diff --git a/backend/app/utils/agent.py b/backend/app/utils/agent.py index 549c96e12..7ed2fabd4 100644 --- a/backend/app/utils/agent.py +++ b/backend/app/utils/agent.py @@ -449,7 +449,7 @@ class ListenChatAgent(ChatAgent): # Clone tools and collect toolkits that need registration cloned_tools, toolkits_to_register = self._clone_tools() - + new_agent = ListenChatAgent( api_task_id=self.api_task_id, agent_name=self.agent_name, @@ -465,7 +465,6 @@ class ListenChatAgent(ChatAgent): response_terminators=self.response_terminators, scheduling_strategy=self.model_backend.scheduling_strategy.__name__, max_iteration=self.max_iteration, - agent_id=self.agent_id, stop_event=self.stop_event, tool_execution_timeout=self.tool_execution_timeout, mask_tool_output=self.mask_tool_output, diff --git a/backend/app/utils/toolkit/notion_mcp_toolkit.py b/backend/app/utils/toolkit/notion_mcp_toolkit.py index 36928aa0a..735193083 100644 --- a/backend/app/utils/toolkit/notion_mcp_toolkit.py +++ b/backend/app/utils/toolkit/notion_mcp_toolkit.py @@ -6,6 +6,25 @@ from app.component.environment import env from app.utils.toolkit.abstract_toolkit import AbstractToolkit from camel.toolkits.mcp_toolkit import MCPToolkit +def _customize_function_parameters(schema: Dict[str, Any]) -> None: + r"""Customize function parameters for specific functions. + + This method allows modifying parameter descriptions or other schema + attributes for specific functions. + """ + function_info = schema.get("function", {}) + function_name = function_info.get("name", "") + parameters = function_info.get("parameters", {}) + properties = parameters.get("properties", {}) + required = parameters.get("required", []) + + # Modify the notion-create-pages function to make parent optional + if function_name == "notion-create-pages": + required.remove("parent") + parameters["required"] = required + if "parent" in properties: + # Update the parent parameter description + properties["parent"]["description"] = "Optional. " + properties["parent"]["description"] class NotionMCPToolkit(MCPToolkit, AbstractToolkit): @@ -33,68 +52,7 @@ class NotionMCPToolkit(MCPToolkit, AbstractToolkit): } } } - super().__init__(config_dict=config_dict, timeout=timeout) - - def get_tools(self) -> List[FunctionTool]: - r"""Returns a list of tools provided by the NotionMCPToolkit. - - Returns: - List[FunctionTool]: List of available tools. - """ - all_tools = [] - for client in self.clients: - try: - original_build_schema = client._build_tool_schema - - def create_wrapper(orig_func): - def wrapper(mcp_tool): - return self._build_custom_tool_schema( - mcp_tool, orig_func - ) - - return wrapper - - client._build_tool_schema = create_wrapper( # type: ignore[method-assign] - original_build_schema - ) - - client_tools = client.get_tools() - all_tools.extend(client_tools) - - client._build_tool_schema = original_build_schema # type: ignore[method-assign] - - except Exception as e: - logger.error(f"Failed to get tools from client: {e}") - return all_tools - - def _build_custom_tool_schema(self, mcp_tool, original_build_schema): - r"""Build tool schema with custom modifications.""" - schema = original_build_schema(mcp_tool) - self._customize_function_parameters(schema) - return schema - - def _customize_function_parameters(self, schema: Dict[str, Any]) -> None: - r"""Customize function parameters for specific functions. - - This method allows modifying parameter descriptions or other schema - attributes for specific functions. - """ - function_info = schema.get("function", {}) - function_name = function_info.get("name", "") - parameters = function_info.get("parameters", {}) - properties = parameters.get("properties", {}) - - # Modify the notion-create-pages function to make parent optional - if function_name == "notion-create-pages": - if "parent" in properties: - # Update the parent parameter description - properties["parent"]["description"] = ( - "Optional. The parent under which the new pages will be created. " - "This can be a page (page_id), a database page (database_id), or " - "a data source/collection under a database (data_source_id). " - "If omitted, the new pages will be created as private pages at the workspace level. " - "Use data_source_id when you have a collection:// URL from the fetch tool." - ) + super().__init__(config_dict=config_dict, timeout=timeout) @classmethod async def get_can_use_tools(cls, api_task_id: str) -> list[FunctionTool]: @@ -104,6 +62,12 @@ class NotionMCPToolkit(MCPToolkit, AbstractToolkit): await toolkit.connect() # Use subclass implementation that inlines upstream processing all_tools = toolkit.get_tools() + tool_schema = [ + item.get_openai_tool_schema() for item in all_tools + ] + #adjust tool schema + for item in tool_schema: + _customize_function_parameters(item) for item in all_tools: setattr(item, "_toolkit_name", cls.__name__) tools.append(item) diff --git a/src/store/chatStore.ts b/src/store/chatStore.ts index 8819f36f1..7b37f6af9 100644 --- a/src/store/chatStore.ts +++ b/src/store/chatStore.ts @@ -235,7 +235,9 @@ const chatStore = create()( apiModel = { api_key: res.value, model_type: cloud_model_type, - model_platform: cloud_model_type.includes('gpt') ? 'openai' : 'gemini', + model_platform: cloud_model_type.includes('gpt') ? 'openai' : + cloud_model_type.includes('claude') ? 'anthropic' : + cloud_model_type.includes('gemini') ? 'gemini' : 'openai-compatible-model', api_url: res.api_url, extra_params: {} }