diff --git a/api/app/controllers/service/app_api_controller.py b/api/app/controllers/service/app_api_controller.py index b2256a98..b34015a7 100644 --- a/api/app/controllers/service/app_api_controller.py +++ b/api/app/controllers/service/app_api_controller.py @@ -33,7 +33,7 @@ async def list_apps(): """列出可访问的应用(占位)""" return success(data=[], msg="App API - Coming Soon") -# /v1/apps/{resource_id}/chat +# /v1/app/chat # @router.post("/chat") # @require_api_key(scopes=["app"]) @@ -49,7 +49,6 @@ async def list_apps(): # scopes: 所需的权限范围列表["app", "rag", "memory"] # Args: -# resource_id: 如果是应用的apikey传的是应用id; 如果是服务的apikey传的是工作空间id # message: 请求参数 # request: 声明请求 # api_key_auth: 包含验证后的API Key 信息 diff --git a/api/app/controllers/tool_controller.py b/api/app/controllers/tool_controller.py index dc304c50..79c87205 100644 --- a/api/app/controllers/tool_controller.py +++ b/api/app/controllers/tool_controller.py @@ -87,7 +87,8 @@ async def create_tool( tenant_id=current_user.tenant_id, icon=request.icon, description=request.description, - config=request.config + config=request.config, + tags=request.tags ) return success(data={"tool_id": tool_id}, msg="工具创建成功") except ValueError as e: @@ -112,7 +113,8 @@ async def update_tool( description=request.description, icon=request.icon, config=request.config, - is_enabled=request.config.get("is_enabled", None) + is_enabled=request.config.get("is_enabled", None), + tags=request.tags ) if not success_flag: raise HTTPException(status_code=404, detail="工具不存在") @@ -220,6 +222,8 @@ async def test_tool_connection( else: # 普通连接测试 result = await service.test_connection(tool_id, current_user.tenant_id) + if result["success"] is False: + raise HTTPException(status_code=400, detail=result["message"]) return success(data=result, msg="连接测试完成") except Exception as e: raise HTTPException(status_code=500, detail=str(e)) diff --git a/api/app/core/tools/configs/builtin_tools.json b/api/app/core/tools/configs/builtin_tools.json index c758a54a..79206a5e 100644 --- a/api/app/core/tools/configs/builtin_tools.json +++ b/api/app/core/tools/configs/builtin_tools.json @@ -30,32 +30,5 @@ "parameters": { "api_key": {"type": "string", "description": "百度搜索API密钥", "sensitive": true, "required": true} } - }, - "mineru": { - "name": "MinerU", - "description": "PDF文档解析工具", - "tool_class": "MinerUTool", - "category": "document", - "requires_config": true, - "version": "1.0.0", - "enabled": true, - "parameters": { - "api_key": {"type": "string", "description": "MinerU API密钥", "sensitive": true, "required": true}, - "base_url": {"type": "string", "description": "API地址", "default": "https://api.mineru.com"} - } - }, - "textin": { - "name": "TextIn", - "description": "OCR文字识别服务", - "tool_class": "TextInTool", - "category": "ocr", - "requires_config": true, - "version": "1.0.0", - "enabled": true, - "parameters": { - "api_key": {"type": "string", "description": "TextIn API密钥", "sensitive": true, "required": true}, - "api_secret": {"type": "string", "description": "TextIn API密钥", "sensitive": true, "required": true}, - "base_url": {"type": "string", "description": "API地址", "default": "https://api.textin.com/v1"} - } } } \ No newline at end of file diff --git a/api/app/schemas/tool_schema.py b/api/app/schemas/tool_schema.py index 15167375..ef539934 100644 --- a/api/app/schemas/tool_schema.py +++ b/api/app/schemas/tool_schema.py @@ -191,6 +191,7 @@ class ToolCreateRequest(BaseModel): icon: Optional[str] = Field(None, max_length=255) tool_type: ToolType config: Dict[str, Any] = Field(default_factory=dict) + tags: List[str] = Field(default_factory=list) class ToolUpdateRequest(BaseModel): @@ -200,6 +201,7 @@ class ToolUpdateRequest(BaseModel): icon: Optional[str] = Field(None, max_length=255) config: Optional[Dict[str, Any]] = None is_enabled: Optional[bool] = None + tags: Optional[List[str]] = None class ToolExecuteRequest(BaseModel): diff --git a/api/app/services/tool_service.py b/api/app/services/tool_service.py index 9142a9ba..69d99c18 100644 --- a/api/app/services/tool_service.py +++ b/api/app/services/tool_service.py @@ -83,7 +83,8 @@ class ToolService: tenant_id: uuid.UUID, icon: Optional[str] = None, description: Optional[str] = None, - config: Optional[Dict[str, Any]] = None + config: Optional[Dict[str, Any]] = None, + tags: Optional[List[str]] = None ) -> str: """创建工具""" if tool_type == ToolType.BUILTIN: @@ -98,7 +99,8 @@ class ToolService: tool_type=tool_type.value, tenant_id=tenant_id, status=ToolStatus.AVAILABLE.value, - config_data=config or {} + config_data=config or {}, + tags=tags ) self.db.add(tool_config) self.db.flush() @@ -123,7 +125,8 @@ class ToolService: description: Optional[str] = None, icon: Optional[str] = None, config: Optional[Dict[str, Any]] = None, - is_enabled: Optional[bool] = None + is_enabled: Optional[bool] = None, + tags: Optional[List[str]] = None ) -> bool: """更新工具""" config_obj = self._get_tool_config(tool_id, tenant_id) @@ -140,6 +143,8 @@ class ToolService: config_obj.description = description if icon: config_obj.icon = icon + if tags: + config_obj.tags = tags if config: config_obj.config_data = config.copy()