diff --git a/apps/llm/reasoning.py b/apps/llm/reasoning.py index 58c3fd715e2159194568b294983647c94c120513..79768783d258fff4eb02a4fd5809e1110186fa33 100644 --- a/apps/llm/reasoning.py +++ b/apps/llm/reasoning.py @@ -61,15 +61,16 @@ class ReasoningContent: return reason, text if self.reasoning_type == "args": - if hasattr(chunk.choices[0].delta, "reasoning_content"): + if hasattr( + chunk.choices[0].delta, "reasoning_content") and chunk.choices[0].delta.reasoning_content is not None: # type: ignore[attr-defined] + # 仍在推理中,继续添加推理内容 reason = chunk.choices[0].delta.reasoning_content or "" # type: ignore[attr-defined] else: # 推理结束,设置标志并添加结束标签 self.is_reasoning = False reason = "" # 如果当前内容不是推理内容标签,将其作为文本返回 - if content and not content.startswith(""): - text = content + text = content.lstrip("") elif self.reasoning_type == "tokens": for token in REASONING_END_TOKEN: if token == content: diff --git a/apps/scheduler/pool/loader/mcp.py b/apps/scheduler/pool/loader/mcp.py index 79e7bc381622937877c4450f5de01dc03aceded1..bb4cb8a10408118d7614145259e1ef0fd9de8d46 100644 --- a/apps/scheduler/pool/loader/mcp.py +++ b/apps/scheduler/pool/loader/mcp.py @@ -430,7 +430,10 @@ class MCPLoader(metaclass=SingletonMeta): symlinks=True, ) if mcp_env is not None: - mcp_config.config.env.update(mcp_env) + if mcp_config.type == MCPType.STDIO: + mcp_config.config.env.update(mcp_env) + else: + mcp_config.config.headers.update(mcp_env) if mcp_config.type == MCPType.STDIO: index = None for i in range(len(mcp_config.config.args)): diff --git a/apps/scheduler/pool/mcp/client.py b/apps/scheduler/pool/mcp/client.py index fb3c2da0bd2e58e4ee590379687a65770b2e1640..b672690536bc1f03923de51bef6b1ed88c785a04 100644 --- a/apps/scheduler/pool/mcp/client.py +++ b/apps/scheduler/pool/mcp/client.py @@ -55,7 +55,6 @@ class MCPClient: """ # 创建Client if isinstance(config, MCPServerSSEConfig): - env = config.env or {} headers = config.headers or {} client = sse_client( url=config.url, diff --git a/apps/schemas/mcp.py b/apps/schemas/mcp.py index f740713ac600b1519c564975649cc1c9729d9036..718726e140681bc24b5c1b3cd80dd820a40f4fd1 100644 --- a/apps/schemas/mcp.py +++ b/apps/schemas/mcp.py @@ -38,25 +38,24 @@ class MCPType(str, Enum): class MCPBasicConfig(BaseModel): """MCP 基本配置""" - env: dict[str, Any] = Field(description="MCP 服务器环境变量", default={}) auto_approve: list[str] = Field(description="自动批准的MCP工具ID列表", default=[], alias="autoApprove") disabled: bool = Field(description="MCP 服务器是否禁用", default=False) auto_install: bool = Field(description="是否自动安装MCP服务器", default=True) timeout: int = Field(description="MCP 服务器超时时间(秒)", default=60, alias="timeout") description: str = Field(description="MCP 服务器自然语言描述", default="") - headers: dict[str, str] = Field(description="MCP 服务器请求头", default={}, alias="headers") class MCPServerStdioConfig(MCPBasicConfig): """MCP 服务器配置""" + env: dict[str, Any] = Field(description="MCP 服务器环境变量", default={}) command: str = Field(description="MCP 服务器命令") args: list[str] = Field(description="MCP 服务器命令参数") class MCPServerSSEConfig(MCPBasicConfig): """MCP 服务器配置""" - + headers: dict[str, str] = Field(description="MCP 服务器请求头", default={}) url: str = Field(description="MCP 服务器地址", default="http://example.com/sse", pattern=r"^https?://.*$") diff --git a/apps/services/appcenter.py b/apps/services/appcenter.py index 1541162300526b98219894606d999f069cc95e1c..0a72e4654d90b45bd2972cf53a52b99392061522 100644 --- a/apps/services/appcenter.py +++ b/apps/services/appcenter.py @@ -482,12 +482,9 @@ class AppCenterManager: # 在预期的条件下,如果在 data 或 app_data 中找不到 mcp_service,则默认回退为空列表。 metadata.mcp_service = [] # 处理llm_id字段 - if data is not None and hasattr(data, "llm") and data.llm: + if data is not None and hasattr(data, "llm"): # 创建应用场景,验证传入的 llm_id 状态 (create_app) metadata.llm_id = data.llm if data.llm else "empty" - elif data is not None and hasattr(data, "llm_id"): - # 更新应用场景,使用 data 中的 llm_id (update_app) - metadata.llm_id = data.llm if data.llm else "empty" elif app_data is not None and hasattr(app_data, "llm_id"): # 更新应用发布状态场景,使用 app_data 中的 llm_id (update_app_publish_status) metadata.llm_id = app_data.llm_id if app_data.llm_id else "empty" diff --git a/apps/services/mcp_service.py b/apps/services/mcp_service.py index 0b72e0748d6375a2def140d305cfdde4c2caade8..f6fec0ebd2f7053d3f8bc72a9d97ba077019528b 100644 --- a/apps/services/mcp_service.py +++ b/apps/services/mcp_service.py @@ -97,12 +97,15 @@ class MCPServiceManager: filters["activated"] = {"$in": [user_sub]} else: filters["activated"] = {"$nin": [user_sub]} - if not is_install: - user_info = await UserManager.get_userinfo_by_user_sub(user_sub) - if not user_info.is_admin: - filters["status"] = MCPInstallStatus.READY.value - else: + user_info = await UserManager.get_userinfo_by_user_sub(user_sub) + if not user_info.is_admin: filters["status"] = MCPInstallStatus.READY.value + else: + if is_install is not None: + if is_install: + filters["status"] = MCPInstallStatus.READY.value + else: + filters["status"] = {"$ne": MCPInstallStatus.READY.value} mcpservice_pools = await MCPServiceManager._search_mcpservice(filters, page) return [ MCPServiceCardItem(