diff --git a/backend/app/agent/factory/browser.py b/backend/app/agent/factory/browser.py index 7fdff31c4..385ae167f 100644 --- a/backend/app/agent/factory/browser.py +++ b/backend/app/agent/factory/browser.py @@ -21,18 +21,18 @@ from camel.toolkits import ToolkitMessageIntegration from app.agent.agent_model import agent_model from app.agent.listen_chat_agent import logger from app.agent.prompt import BROWSER_SYS_PROMPT +from app.agent.toolkit.human_toolkit import HumanToolkit +from app.agent.toolkit.hybrid_browser_toolkit import HybridBrowserToolkit + +# TODO: Remove NoteTakingToolkit and use TerminalToolkit instead +from app.agent.toolkit.note_taking_toolkit import NoteTakingToolkit +from app.agent.toolkit.search_toolkit import SearchToolkit +from app.agent.toolkit.terminal_toolkit import TerminalToolkit from app.agent.utils import NOW_STR from app.component.environment import env from app.model.chat import Chat from app.service.task import Agents from app.utils.file_utils import get_working_directory -from app.utils.toolkit.human_toolkit import HumanToolkit -from app.utils.toolkit.hybrid_browser_toolkit import HybridBrowserToolkit - -# TODO: Remove NoteTakingToolkit and use TerminalToolkit instead -from app.utils.toolkit.note_taking_toolkit import NoteTakingToolkit -from app.utils.toolkit.search_toolkit import SearchToolkit -from app.utils.toolkit.terminal_toolkit import TerminalToolkit def browser_agent(options: Chat): diff --git a/backend/app/agent/factory/developer.py b/backend/app/agent/factory/developer.py index c1012a19e..96359e055 100644 --- a/backend/app/agent/factory/developer.py +++ b/backend/app/agent/factory/developer.py @@ -20,17 +20,17 @@ from camel.toolkits import ToolkitMessageIntegration from app.agent.agent_model import agent_model from app.agent.listen_chat_agent import logger from app.agent.prompt import DEVELOPER_SYS_PROMPT +from app.agent.toolkit.human_toolkit import HumanToolkit + +# TODO: Remove NoteTakingToolkit and use TerminalToolkit instead +from app.agent.toolkit.note_taking_toolkit import NoteTakingToolkit +from app.agent.toolkit.screenshot_toolkit import ScreenshotToolkit +from app.agent.toolkit.terminal_toolkit import TerminalToolkit +from app.agent.toolkit.web_deploy_toolkit import WebDeployToolkit from app.agent.utils import NOW_STR from app.model.chat import Chat from app.service.task import Agents from app.utils.file_utils import get_working_directory -from app.utils.toolkit.human_toolkit import HumanToolkit - -# TODO: Remove NoteTakingToolkit and use TerminalToolkit instead -from app.utils.toolkit.note_taking_toolkit import NoteTakingToolkit -from app.utils.toolkit.screenshot_toolkit import ScreenshotToolkit -from app.utils.toolkit.terminal_toolkit import TerminalToolkit -from app.utils.toolkit.web_deploy_toolkit import WebDeployToolkit async def developer_agent(options: Chat): diff --git a/backend/app/agent/factory/document.py b/backend/app/agent/factory/document.py index 18a4705a3..0d3b2c897 100644 --- a/backend/app/agent/factory/document.py +++ b/backend/app/agent/factory/document.py @@ -19,20 +19,20 @@ from camel.toolkits import ToolkitMessageIntegration from app.agent.agent_model import agent_model from app.agent.listen_chat_agent import logger from app.agent.prompt import DOCUMENT_SYS_PROMPT +from app.agent.toolkit.excel_toolkit import ExcelToolkit +from app.agent.toolkit.file_write_toolkit import FileToolkit +from app.agent.toolkit.google_drive_mcp_toolkit import GoogleDriveMCPToolkit +from app.agent.toolkit.human_toolkit import HumanToolkit +from app.agent.toolkit.markitdown_toolkit import MarkItDownToolkit + +# TODO: Remove NoteTakingToolkit and use TerminalToolkit instead +from app.agent.toolkit.note_taking_toolkit import NoteTakingToolkit +from app.agent.toolkit.pptx_toolkit import PPTXToolkit +from app.agent.toolkit.terminal_toolkit import TerminalToolkit from app.agent.utils import NOW_STR from app.model.chat import Chat from app.service.task import Agents from app.utils.file_utils import get_working_directory -from app.utils.toolkit.excel_toolkit import ExcelToolkit -from app.utils.toolkit.file_write_toolkit import FileToolkit -from app.utils.toolkit.google_drive_mcp_toolkit import GoogleDriveMCPToolkit -from app.utils.toolkit.human_toolkit import HumanToolkit -from app.utils.toolkit.markitdown_toolkit import MarkItDownToolkit - -# TODO: Remove NoteTakingToolkit and use TerminalToolkit instead -from app.utils.toolkit.note_taking_toolkit import NoteTakingToolkit -from app.utils.toolkit.pptx_toolkit import PPTXToolkit -from app.utils.toolkit.terminal_toolkit import TerminalToolkit async def document_agent(options: Chat): diff --git a/backend/app/agent/factory/mcp.py b/backend/app/agent/factory/mcp.py index c6139becc..4f1dc86ab 100644 --- a/backend/app/agent/factory/mcp.py +++ b/backend/app/agent/factory/mcp.py @@ -18,10 +18,10 @@ from camel.models import ModelFactory from app.agent.listen_chat_agent import ListenChatAgent, logger from app.agent.prompt import MCP_SYS_PROMPT +from app.agent.toolkit.mcp_search_toolkit import McpSearchToolkit from app.agent.tools import get_mcp_tools from app.model.chat import Chat from app.service.task import ActionCreateAgentData, Agents, get_task_lock -from app.utils.toolkit.mcp_search_toolkit import McpSearchToolkit async def mcp_agent(options: Chat): diff --git a/backend/app/agent/factory/multi_modal.py b/backend/app/agent/factory/multi_modal.py index 95e201038..fea7b1c29 100644 --- a/backend/app/agent/factory/multi_modal.py +++ b/backend/app/agent/factory/multi_modal.py @@ -21,20 +21,20 @@ from camel.types import ModelPlatformType from app.agent.agent_model import agent_model from app.agent.listen_chat_agent import logger from app.agent.prompt import MULTI_MODAL_SYS_PROMPT +from app.agent.toolkit.audio_analysis_toolkit import AudioAnalysisToolkit +from app.agent.toolkit.human_toolkit import HumanToolkit +from app.agent.toolkit.image_analysis_toolkit import ImageAnalysisToolkit + +# TODO: Remove NoteTakingToolkit and use TerminalToolkit instead +from app.agent.toolkit.note_taking_toolkit import NoteTakingToolkit +from app.agent.toolkit.openai_image_toolkit import OpenAIImageToolkit +from app.agent.toolkit.search_toolkit import SearchToolkit +from app.agent.toolkit.terminal_toolkit import TerminalToolkit +from app.agent.toolkit.video_download_toolkit import VideoDownloaderToolkit from app.agent.utils import NOW_STR from app.model.chat import Chat from app.service.task import Agents from app.utils.file_utils import get_working_directory -from app.utils.toolkit.audio_analysis_toolkit import AudioAnalysisToolkit -from app.utils.toolkit.human_toolkit import HumanToolkit -from app.utils.toolkit.image_analysis_toolkit import ImageAnalysisToolkit - -# TODO: Remove NoteTakingToolkit and use TerminalToolkit instead -from app.utils.toolkit.note_taking_toolkit import NoteTakingToolkit -from app.utils.toolkit.openai_image_toolkit import OpenAIImageToolkit -from app.utils.toolkit.search_toolkit import SearchToolkit -from app.utils.toolkit.terminal_toolkit import TerminalToolkit -from app.utils.toolkit.video_download_toolkit import VideoDownloaderToolkit def multi_modal_agent(options: Chat): diff --git a/backend/app/agent/factory/social_media.py b/backend/app/agent/factory/social_media.py index 4b32f4235..649613bb6 100644 --- a/backend/app/agent/factory/social_media.py +++ b/backend/app/agent/factory/social_media.py @@ -16,22 +16,22 @@ from camel.messages import BaseMessage from app.agent.agent_model import agent_model from app.agent.listen_chat_agent import logger from app.agent.prompt import SOCIAL_MEDIA_SYS_PROMPT +from app.agent.toolkit.google_calendar_toolkit import GoogleCalendarToolkit +from app.agent.toolkit.google_gmail_mcp_toolkit import GoogleGmailMCPToolkit +from app.agent.toolkit.human_toolkit import HumanToolkit +from app.agent.toolkit.linkedin_toolkit import LinkedInToolkit + +# TODO: Remove NoteTakingToolkit and use TerminalToolkit instead +from app.agent.toolkit.note_taking_toolkit import NoteTakingToolkit +from app.agent.toolkit.notion_mcp_toolkit import NotionMCPToolkit +from app.agent.toolkit.reddit_toolkit import RedditToolkit +from app.agent.toolkit.terminal_toolkit import TerminalToolkit +from app.agent.toolkit.twitter_toolkit import TwitterToolkit +from app.agent.toolkit.whatsapp_toolkit import WhatsAppToolkit from app.agent.utils import NOW_STR from app.model.chat import Chat from app.service.task import Agents from app.utils.file_utils import get_working_directory -from app.utils.toolkit.google_calendar_toolkit import GoogleCalendarToolkit -from app.utils.toolkit.google_gmail_mcp_toolkit import GoogleGmailMCPToolkit -from app.utils.toolkit.human_toolkit import HumanToolkit -from app.utils.toolkit.linkedin_toolkit import LinkedInToolkit - -# TODO: Remove NoteTakingToolkit and use TerminalToolkit instead -from app.utils.toolkit.note_taking_toolkit import NoteTakingToolkit -from app.utils.toolkit.notion_mcp_toolkit import NotionMCPToolkit -from app.utils.toolkit.reddit_toolkit import RedditToolkit -from app.utils.toolkit.terminal_toolkit import TerminalToolkit -from app.utils.toolkit.twitter_toolkit import TwitterToolkit -from app.utils.toolkit.whatsapp_toolkit import WhatsAppToolkit async def social_media_agent(options: Chat): diff --git a/backend/app/utils/toolkit/__init__.py b/backend/app/agent/toolkit/__init__.py similarity index 100% rename from backend/app/utils/toolkit/__init__.py rename to backend/app/agent/toolkit/__init__.py diff --git a/backend/app/utils/toolkit/abstract_toolkit.py b/backend/app/agent/toolkit/abstract_toolkit.py similarity index 100% rename from backend/app/utils/toolkit/abstract_toolkit.py rename to backend/app/agent/toolkit/abstract_toolkit.py diff --git a/backend/app/utils/toolkit/audio_analysis_toolkit.py b/backend/app/agent/toolkit/audio_analysis_toolkit.py similarity index 96% rename from backend/app/utils/toolkit/audio_analysis_toolkit.py rename to backend/app/agent/toolkit/audio_analysis_toolkit.py index 44d2ea017..251afee77 100644 --- a/backend/app/utils/toolkit/audio_analysis_toolkit.py +++ b/backend/app/agent/toolkit/audio_analysis_toolkit.py @@ -17,10 +17,10 @@ import os from camel.models import BaseAudioModel, BaseModelBackend from camel.toolkits import AudioAnalysisToolkit as BaseAudioAnalysisToolkit +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.component.environment import env from app.service.task import Agents from app.utils.listen.toolkit_listen import auto_listen_toolkit -from app.utils.toolkit.abstract_toolkit import AbstractToolkit @auto_listen_toolkit(BaseAudioAnalysisToolkit) diff --git a/backend/app/utils/toolkit/code_execution_toolkit.py b/backend/app/agent/toolkit/code_execution_toolkit.py similarity index 96% rename from backend/app/utils/toolkit/code_execution_toolkit.py rename to backend/app/agent/toolkit/code_execution_toolkit.py index 5f108d627..e08c3fe37 100644 --- a/backend/app/utils/toolkit/code_execution_toolkit.py +++ b/backend/app/agent/toolkit/code_execution_toolkit.py @@ -19,9 +19,9 @@ from camel.toolkits import ( FunctionTool, ) +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.service.task import Agents from app.utils.listen.toolkit_listen import auto_listen_toolkit -from app.utils.toolkit.abstract_toolkit import AbstractToolkit @auto_listen_toolkit(BaseCodeExecutionToolkit) diff --git a/backend/app/utils/toolkit/craw4ai_toolkit.py b/backend/app/agent/toolkit/craw4ai_toolkit.py similarity index 95% rename from backend/app/utils/toolkit/craw4ai_toolkit.py rename to backend/app/agent/toolkit/craw4ai_toolkit.py index c27a6f7b6..7927dc7cd 100644 --- a/backend/app/utils/toolkit/craw4ai_toolkit.py +++ b/backend/app/agent/toolkit/craw4ai_toolkit.py @@ -14,9 +14,9 @@ from camel.toolkits import Crawl4AIToolkit as BaseCrawl4AIToolkit +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.service.task import Agents from app.utils.listen.toolkit_listen import auto_listen_toolkit -from app.utils.toolkit.abstract_toolkit import AbstractToolkit @auto_listen_toolkit(BaseCrawl4AIToolkit) diff --git a/backend/app/utils/toolkit/excel_toolkit.py b/backend/app/agent/toolkit/excel_toolkit.py similarity index 95% rename from backend/app/utils/toolkit/excel_toolkit.py rename to backend/app/agent/toolkit/excel_toolkit.py index d370f88b0..2b2af8c29 100644 --- a/backend/app/utils/toolkit/excel_toolkit.py +++ b/backend/app/agent/toolkit/excel_toolkit.py @@ -16,10 +16,10 @@ import os from camel.toolkits import ExcelToolkit as BaseExcelToolkit +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.component.environment import env from app.service.task import Agents from app.utils.listen.toolkit_listen import auto_listen_toolkit -from app.utils.toolkit.abstract_toolkit import AbstractToolkit @auto_listen_toolkit(BaseExcelToolkit) diff --git a/backend/app/utils/toolkit/file_write_toolkit.py b/backend/app/agent/toolkit/file_write_toolkit.py similarity index 97% rename from backend/app/utils/toolkit/file_write_toolkit.py rename to backend/app/agent/toolkit/file_write_toolkit.py index 0c081b9d4..403d119d5 100644 --- a/backend/app/utils/toolkit/file_write_toolkit.py +++ b/backend/app/agent/toolkit/file_write_toolkit.py @@ -16,6 +16,7 @@ import os from camel.toolkits import FileToolkit as BaseFileToolkit +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.component.environment import env from app.service.task import ( ActionWriteFileData, @@ -28,7 +29,6 @@ from app.utils.listen.toolkit_listen import ( auto_listen_toolkit, listen_toolkit, ) -from app.utils.toolkit.abstract_toolkit import AbstractToolkit @auto_listen_toolkit(BaseFileToolkit) diff --git a/backend/app/utils/toolkit/github_toolkit.py b/backend/app/agent/toolkit/github_toolkit.py similarity index 96% rename from backend/app/utils/toolkit/github_toolkit.py rename to backend/app/agent/toolkit/github_toolkit.py index 55426fc45..ba0d66a3d 100644 --- a/backend/app/utils/toolkit/github_toolkit.py +++ b/backend/app/agent/toolkit/github_toolkit.py @@ -15,10 +15,10 @@ from camel.toolkits import GithubToolkit as BaseGithubToolkit from camel.toolkits.function_tool import FunctionTool +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.component.environment import env from app.service.task import Agents from app.utils.listen.toolkit_listen import auto_listen_toolkit -from app.utils.toolkit.abstract_toolkit import AbstractToolkit @auto_listen_toolkit(BaseGithubToolkit) diff --git a/backend/app/utils/toolkit/google_calendar_toolkit.py b/backend/app/agent/toolkit/google_calendar_toolkit.py similarity index 99% rename from backend/app/utils/toolkit/google_calendar_toolkit.py rename to backend/app/agent/toolkit/google_calendar_toolkit.py index 612fa0943..a391ea331 100644 --- a/backend/app/utils/toolkit/google_calendar_toolkit.py +++ b/backend/app/agent/toolkit/google_calendar_toolkit.py @@ -18,11 +18,11 @@ import threading from camel.toolkits import GoogleCalendarToolkit as BaseGoogleCalendarToolkit +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.component.environment import env from app.service.task import Agents from app.utils.listen.toolkit_listen import auto_listen_toolkit from app.utils.oauth_state_manager import oauth_state_manager -from app.utils.toolkit.abstract_toolkit import AbstractToolkit logger = logging.getLogger("main") diff --git a/backend/app/utils/toolkit/google_drive_mcp_toolkit.py b/backend/app/agent/toolkit/google_drive_mcp_toolkit.py similarity index 97% rename from backend/app/utils/toolkit/google_drive_mcp_toolkit.py rename to backend/app/agent/toolkit/google_drive_mcp_toolkit.py index 1491e30d8..0368f7ea3 100644 --- a/backend/app/utils/toolkit/google_drive_mcp_toolkit.py +++ b/backend/app/agent/toolkit/google_drive_mcp_toolkit.py @@ -18,10 +18,10 @@ from camel.toolkits import ( ) from camel.toolkits.function_tool import FunctionTool +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.component.command import bun from app.component.environment import env from app.service.task import Agents -from app.utils.toolkit.abstract_toolkit import AbstractToolkit class GoogleDriveMCPToolkit(BaseGoogleDriveMCPToolkit, AbstractToolkit): diff --git a/backend/app/utils/toolkit/google_gmail_mcp_toolkit.py b/backend/app/agent/toolkit/google_gmail_mcp_toolkit.py similarity index 97% rename from backend/app/utils/toolkit/google_gmail_mcp_toolkit.py rename to backend/app/agent/toolkit/google_gmail_mcp_toolkit.py index fef4c489d..754d30bfc 100644 --- a/backend/app/utils/toolkit/google_gmail_mcp_toolkit.py +++ b/backend/app/agent/toolkit/google_gmail_mcp_toolkit.py @@ -14,10 +14,10 @@ from camel.toolkits import BaseToolkit, FunctionTool, MCPToolkit +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.component.command import bun from app.component.environment import env, env_or_fail from app.service.task import Agents -from app.utils.toolkit.abstract_toolkit import AbstractToolkit class GoogleGmailMCPToolkit(BaseToolkit, AbstractToolkit): diff --git a/backend/app/utils/toolkit/human_toolkit.py b/backend/app/agent/toolkit/human_toolkit.py similarity index 99% rename from backend/app/utils/toolkit/human_toolkit.py rename to backend/app/agent/toolkit/human_toolkit.py index 53baeb2c8..731ca939a 100644 --- a/backend/app/utils/toolkit/human_toolkit.py +++ b/backend/app/agent/toolkit/human_toolkit.py @@ -17,6 +17,7 @@ import logging from camel.toolkits.base import BaseToolkit from camel.toolkits.function_tool import FunctionTool +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.service.task import ( Action, ActionAskData, @@ -25,7 +26,6 @@ from app.service.task import ( process_task, ) from app.utils.listen.toolkit_listen import auto_listen_toolkit, listen_toolkit -from app.utils.toolkit.abstract_toolkit import AbstractToolkit logger = logging.getLogger("human_toolkit") diff --git a/backend/app/utils/toolkit/hybrid_browser_python_toolkit.py b/backend/app/agent/toolkit/hybrid_browser_python_toolkit.py similarity index 99% rename from backend/app/utils/toolkit/hybrid_browser_python_toolkit.py rename to backend/app/agent/toolkit/hybrid_browser_python_toolkit.py index 00821d0ee..096f0d7cb 100644 --- a/backend/app/utils/toolkit/hybrid_browser_python_toolkit.py +++ b/backend/app/agent/toolkit/hybrid_browser_python_toolkit.py @@ -32,11 +32,11 @@ from camel.toolkits.hybrid_browser_toolkit_py.browser_session import ( from camel.toolkits.hybrid_browser_toolkit_py.config_loader import ConfigLoader from camel.toolkits.hybrid_browser_toolkit_py.snapshot import PageSnapshot +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.component.environment import env from app.exception.exception import ProgramException from app.service.task import Agents from app.utils.listen.toolkit_listen import auto_listen_toolkit, listen_toolkit -from app.utils.toolkit.abstract_toolkit import AbstractToolkit logger = logging.getLogger("hybrid_browser_python_toolkit") diff --git a/backend/app/utils/toolkit/hybrid_browser_toolkit.py b/backend/app/agent/toolkit/hybrid_browser_toolkit.py similarity index 99% rename from backend/app/utils/toolkit/hybrid_browser_toolkit.py rename to backend/app/agent/toolkit/hybrid_browser_toolkit.py index 610da3f59..e0e800383 100644 --- a/backend/app/utils/toolkit/hybrid_browser_toolkit.py +++ b/backend/app/agent/toolkit/hybrid_browser_toolkit.py @@ -29,10 +29,10 @@ from camel.toolkits.hybrid_browser_toolkit.ws_wrapper import ( ) from typing_extensions import TypedDict +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.component.environment import env from app.service.task import Agents from app.utils.listen.toolkit_listen import auto_listen_toolkit -from app.utils.toolkit.abstract_toolkit import AbstractToolkit logger = logging.getLogger("hybrid_browser_toolkit") diff --git a/backend/app/utils/toolkit/image_analysis_toolkit.py b/backend/app/agent/toolkit/image_analysis_toolkit.py similarity index 95% rename from backend/app/utils/toolkit/image_analysis_toolkit.py rename to backend/app/agent/toolkit/image_analysis_toolkit.py index 1df71260f..ada3090f2 100644 --- a/backend/app/utils/toolkit/image_analysis_toolkit.py +++ b/backend/app/agent/toolkit/image_analysis_toolkit.py @@ -15,9 +15,9 @@ from camel.models import BaseModelBackend from camel.toolkits import ImageAnalysisToolkit as BaseImageAnalysisToolkit +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.service.task import Agents from app.utils.listen.toolkit_listen import auto_listen_toolkit -from app.utils.toolkit.abstract_toolkit import AbstractToolkit @auto_listen_toolkit(BaseImageAnalysisToolkit) diff --git a/backend/app/utils/toolkit/lark_toolkit.py b/backend/app/agent/toolkit/lark_toolkit.py similarity index 95% rename from backend/app/utils/toolkit/lark_toolkit.py rename to backend/app/agent/toolkit/lark_toolkit.py index 10df4c563..f3c7d0d45 100644 --- a/backend/app/utils/toolkit/lark_toolkit.py +++ b/backend/app/agent/toolkit/lark_toolkit.py @@ -15,9 +15,9 @@ from camel.toolkits import LarkToolkit as BaseLarkToolkit from camel.toolkits.function_tool import FunctionTool +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.component.environment import env from app.utils.listen.toolkit_listen import auto_listen_toolkit -from app.utils.toolkit.abstract_toolkit import AbstractToolkit @auto_listen_toolkit(BaseLarkToolkit) diff --git a/backend/app/utils/toolkit/linkedin_toolkit.py b/backend/app/agent/toolkit/linkedin_toolkit.py similarity index 99% rename from backend/app/utils/toolkit/linkedin_toolkit.py rename to backend/app/agent/toolkit/linkedin_toolkit.py index 53339a929..3b7aa2165 100644 --- a/backend/app/utils/toolkit/linkedin_toolkit.py +++ b/backend/app/agent/toolkit/linkedin_toolkit.py @@ -20,10 +20,10 @@ import time from camel.toolkits import LinkedInToolkit as BaseLinkedInToolkit from camel.toolkits.function_tool import FunctionTool +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.component.environment import env from app.service.task import Agents from app.utils.listen.toolkit_listen import auto_listen_toolkit -from app.utils.toolkit.abstract_toolkit import AbstractToolkit logger = logging.getLogger("linkedin_toolkit") diff --git a/backend/app/utils/toolkit/markitdown_toolkit.py b/backend/app/agent/toolkit/markitdown_toolkit.py similarity index 94% rename from backend/app/utils/toolkit/markitdown_toolkit.py rename to backend/app/agent/toolkit/markitdown_toolkit.py index 48d1745f8..c8514f221 100644 --- a/backend/app/utils/toolkit/markitdown_toolkit.py +++ b/backend/app/agent/toolkit/markitdown_toolkit.py @@ -14,9 +14,9 @@ from camel.toolkits import MarkItDownToolkit as BaseMarkItDownToolkit +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.service.task import Agents from app.utils.listen.toolkit_listen import auto_listen_toolkit -from app.utils.toolkit.abstract_toolkit import AbstractToolkit @auto_listen_toolkit(BaseMarkItDownToolkit) diff --git a/backend/app/utils/toolkit/mcp_search_toolkit.py b/backend/app/agent/toolkit/mcp_search_toolkit.py similarity index 93% rename from backend/app/utils/toolkit/mcp_search_toolkit.py rename to backend/app/agent/toolkit/mcp_search_toolkit.py index 1c700fd38..81b61c29c 100644 --- a/backend/app/utils/toolkit/mcp_search_toolkit.py +++ b/backend/app/agent/toolkit/mcp_search_toolkit.py @@ -17,10 +17,10 @@ from typing import Any import httpx from camel.toolkits import BaseToolkit, FunctionTool +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.component.environment import env_not_empty from app.service.task import Action, ActionSearchMcpData, Agents, get_task_lock from app.utils.listen.toolkit_listen import listen_toolkit -from app.utils.toolkit.abstract_toolkit import AbstractToolkit class McpSearchToolkit(BaseToolkit, AbstractToolkit): @@ -31,8 +31,10 @@ class McpSearchToolkit(BaseToolkit, AbstractToolkit): self.api_task_id = api_task_id @listen_toolkit( - inputs=lambda _, keyword, size, page: - f"keyword: {keyword}, size: {size}, page: {page}", + inputs=lambda _, + keyword, + size, + page: f"keyword: {keyword}, size: {size}, page: {page}", return_msg=lambda res: f"Search {len(res)} results: ", ) async def search_mcp_from_url( diff --git a/backend/app/utils/toolkit/note_taking_toolkit.py b/backend/app/agent/toolkit/note_taking_toolkit.py similarity index 96% rename from backend/app/utils/toolkit/note_taking_toolkit.py rename to backend/app/agent/toolkit/note_taking_toolkit.py index 31455498f..0800e7790 100644 --- a/backend/app/utils/toolkit/note_taking_toolkit.py +++ b/backend/app/agent/toolkit/note_taking_toolkit.py @@ -14,9 +14,9 @@ from camel.toolkits import NoteTakingToolkit as BaseNoteTakingToolkit +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.service.task import Agents from app.utils.listen.toolkit_listen import auto_listen_toolkit -from app.utils.toolkit.abstract_toolkit import AbstractToolkit @auto_listen_toolkit(BaseNoteTakingToolkit) diff --git a/backend/app/utils/toolkit/notion_mcp_toolkit.py b/backend/app/agent/toolkit/notion_mcp_toolkit.py similarity index 98% rename from backend/app/utils/toolkit/notion_mcp_toolkit.py rename to backend/app/agent/toolkit/notion_mcp_toolkit.py index fee5a3613..6948c9d5c 100644 --- a/backend/app/utils/toolkit/notion_mcp_toolkit.py +++ b/backend/app/agent/toolkit/notion_mcp_toolkit.py @@ -20,8 +20,8 @@ from typing import Any from camel.toolkits import FunctionTool from camel.toolkits.mcp_toolkit import MCPToolkit +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.component.environment import env -from app.utils.toolkit.abstract_toolkit import AbstractToolkit logger = logging.getLogger("notion_mcp_toolkit") diff --git a/backend/app/utils/toolkit/notion_toolkit.py b/backend/app/agent/toolkit/notion_toolkit.py similarity index 96% rename from backend/app/utils/toolkit/notion_toolkit.py rename to backend/app/agent/toolkit/notion_toolkit.py index 42772c583..8beccdd5a 100644 --- a/backend/app/utils/toolkit/notion_toolkit.py +++ b/backend/app/agent/toolkit/notion_toolkit.py @@ -16,10 +16,10 @@ from camel.toolkits import NotionToolkit as BaseNotionToolkit from camel.toolkits.function_tool import FunctionTool +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.component.environment import env from app.service.task import Agents from app.utils.listen.toolkit_listen import auto_listen_toolkit -from app.utils.toolkit.abstract_toolkit import AbstractToolkit @auto_listen_toolkit(BaseNotionToolkit) diff --git a/backend/app/utils/toolkit/openai_image_toolkit.py b/backend/app/agent/toolkit/openai_image_toolkit.py similarity index 98% rename from backend/app/utils/toolkit/openai_image_toolkit.py rename to backend/app/agent/toolkit/openai_image_toolkit.py index f7d376ca3..54b8f7bb7 100644 --- a/backend/app/utils/toolkit/openai_image_toolkit.py +++ b/backend/app/agent/toolkit/openai_image_toolkit.py @@ -16,9 +16,9 @@ from typing import Literal from camel.toolkits import OpenAIImageToolkit as BaseOpenAIImageToolkit +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.service.task import Agents from app.utils.listen.toolkit_listen import auto_listen_toolkit, listen_toolkit -from app.utils.toolkit.abstract_toolkit import AbstractToolkit @auto_listen_toolkit(BaseOpenAIImageToolkit) diff --git a/backend/app/utils/toolkit/pptx_toolkit.py b/backend/app/agent/toolkit/pptx_toolkit.py similarity index 97% rename from backend/app/utils/toolkit/pptx_toolkit.py rename to backend/app/agent/toolkit/pptx_toolkit.py index 6f8953220..6d54f4dec 100644 --- a/backend/app/utils/toolkit/pptx_toolkit.py +++ b/backend/app/agent/toolkit/pptx_toolkit.py @@ -16,6 +16,7 @@ import os from camel.toolkits import PPTXToolkit as BasePPTXToolkit +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.component.environment import env from app.service.task import ( ActionWriteFileData, @@ -28,7 +29,6 @@ from app.utils.listen.toolkit_listen import ( auto_listen_toolkit, listen_toolkit, ) -from app.utils.toolkit.abstract_toolkit import AbstractToolkit @auto_listen_toolkit(BasePPTXToolkit) diff --git a/backend/app/utils/toolkit/pyautogui_toolkit.py b/backend/app/agent/toolkit/pyautogui_toolkit.py similarity index 95% rename from backend/app/utils/toolkit/pyautogui_toolkit.py rename to backend/app/agent/toolkit/pyautogui_toolkit.py index ca03ac693..a52b6521b 100644 --- a/backend/app/utils/toolkit/pyautogui_toolkit.py +++ b/backend/app/agent/toolkit/pyautogui_toolkit.py @@ -16,10 +16,10 @@ import os from camel.toolkits import PyAutoGUIToolkit as BasePyAutoGUIToolkit +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.component.environment import env from app.service.task import Agents from app.utils.listen.toolkit_listen import auto_listen_toolkit -from app.utils.toolkit.abstract_toolkit import AbstractToolkit @auto_listen_toolkit(BasePyAutoGUIToolkit) diff --git a/backend/app/utils/toolkit/rag_toolkit.py b/backend/app/agent/toolkit/rag_toolkit.py similarity index 99% rename from backend/app/utils/toolkit/rag_toolkit.py rename to backend/app/agent/toolkit/rag_toolkit.py index deea5bf2c..9c7213fa1 100644 --- a/backend/app/utils/toolkit/rag_toolkit.py +++ b/backend/app/agent/toolkit/rag_toolkit.py @@ -24,9 +24,9 @@ from camel.toolkits import RetrievalToolkit from camel.toolkits.function_tool import FunctionTool from camel.types import StorageType +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.component.environment import env from app.service.task import Agents -from app.utils.toolkit.abstract_toolkit import AbstractToolkit logger = logging.getLogger("rag_toolkit") diff --git a/backend/app/utils/toolkit/reddit_toolkit.py b/backend/app/agent/toolkit/reddit_toolkit.py similarity index 96% rename from backend/app/utils/toolkit/reddit_toolkit.py rename to backend/app/agent/toolkit/reddit_toolkit.py index 865c39718..a0e256f93 100644 --- a/backend/app/utils/toolkit/reddit_toolkit.py +++ b/backend/app/agent/toolkit/reddit_toolkit.py @@ -15,10 +15,10 @@ from camel.toolkits import RedditToolkit as BaseRedditToolkit from camel.toolkits.function_tool import FunctionTool +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.component.environment import env from app.service.task import Agents from app.utils.listen.toolkit_listen import auto_listen_toolkit -from app.utils.toolkit.abstract_toolkit import AbstractToolkit @auto_listen_toolkit(BaseRedditToolkit) diff --git a/backend/app/utils/toolkit/screenshot_toolkit.py b/backend/app/agent/toolkit/screenshot_toolkit.py similarity index 95% rename from backend/app/utils/toolkit/screenshot_toolkit.py rename to backend/app/agent/toolkit/screenshot_toolkit.py index 584cffbaa..2e6b279f8 100644 --- a/backend/app/utils/toolkit/screenshot_toolkit.py +++ b/backend/app/agent/toolkit/screenshot_toolkit.py @@ -16,10 +16,10 @@ import os from camel.toolkits import ScreenshotToolkit as BaseScreenshotToolkit +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.component.environment import env from app.service.task import Agents from app.utils.listen.toolkit_listen import auto_listen_toolkit -from app.utils.toolkit.abstract_toolkit import AbstractToolkit @auto_listen_toolkit(BaseScreenshotToolkit) diff --git a/backend/app/utils/toolkit/search_toolkit.py b/backend/app/agent/toolkit/search_toolkit.py similarity index 99% rename from backend/app/utils/toolkit/search_toolkit.py rename to backend/app/agent/toolkit/search_toolkit.py index 2b4f15a17..330aab1c2 100644 --- a/backend/app/utils/toolkit/search_toolkit.py +++ b/backend/app/agent/toolkit/search_toolkit.py @@ -20,10 +20,10 @@ import httpx from camel.toolkits import SearchToolkit as BaseSearchToolkit from camel.toolkits.function_tool import FunctionTool +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.component.environment import env, env_not_empty from app.service.task import Agents from app.utils.listen.toolkit_listen import auto_listen_toolkit, listen_toolkit -from app.utils.toolkit.abstract_toolkit import AbstractToolkit logger = logging.getLogger("search_toolkit") diff --git a/backend/app/utils/toolkit/slack_toolkit.py b/backend/app/agent/toolkit/slack_toolkit.py similarity index 96% rename from backend/app/utils/toolkit/slack_toolkit.py rename to backend/app/agent/toolkit/slack_toolkit.py index 7ba3f4e20..95b72326b 100644 --- a/backend/app/utils/toolkit/slack_toolkit.py +++ b/backend/app/agent/toolkit/slack_toolkit.py @@ -17,10 +17,10 @@ import logging from camel.toolkits import SlackToolkit as BaseSlackToolkit from camel.toolkits.function_tool import FunctionTool +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.component.environment import env from app.service.task import Agents from app.utils.listen.toolkit_listen import auto_listen_toolkit -from app.utils.toolkit.abstract_toolkit import AbstractToolkit logger = logging.getLogger("slack_toolkit") diff --git a/backend/app/utils/toolkit/terminal_toolkit.py b/backend/app/agent/toolkit/terminal_toolkit.py similarity index 99% rename from backend/app/utils/toolkit/terminal_toolkit.py rename to backend/app/agent/toolkit/terminal_toolkit.py index 1736d3fa6..ce35dfcdb 100644 --- a/backend/app/utils/toolkit/terminal_toolkit.py +++ b/backend/app/agent/toolkit/terminal_toolkit.py @@ -26,6 +26,7 @@ from camel.toolkits.terminal_toolkit import ( ) from camel.toolkits.terminal_toolkit.terminal_toolkit import _to_plain +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.component.environment import env from app.service.task import ( Action, @@ -35,7 +36,6 @@ from app.service.task import ( process_task, ) from app.utils.listen.toolkit_listen import auto_listen_toolkit -from app.utils.toolkit.abstract_toolkit import AbstractToolkit logger = logging.getLogger("terminal_toolkit") diff --git a/backend/app/utils/toolkit/thinking_toolkit.py b/backend/app/agent/toolkit/thinking_toolkit.py similarity index 94% rename from backend/app/utils/toolkit/thinking_toolkit.py rename to backend/app/agent/toolkit/thinking_toolkit.py index 9989b16e2..a2bc3f0b0 100644 --- a/backend/app/utils/toolkit/thinking_toolkit.py +++ b/backend/app/agent/toolkit/thinking_toolkit.py @@ -14,8 +14,8 @@ from camel.toolkits import ThinkingToolkit as BaseThinkingToolkit +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.utils.listen.toolkit_listen import auto_listen_toolkit -from app.utils.toolkit.abstract_toolkit import AbstractToolkit @auto_listen_toolkit(BaseThinkingToolkit) diff --git a/backend/app/utils/toolkit/twitter_toolkit.py b/backend/app/agent/toolkit/twitter_toolkit.py similarity index 98% rename from backend/app/utils/toolkit/twitter_toolkit.py rename to backend/app/agent/toolkit/twitter_toolkit.py index 29b14c7ff..5d7fb62f5 100644 --- a/backend/app/utils/toolkit/twitter_toolkit.py +++ b/backend/app/agent/toolkit/twitter_toolkit.py @@ -21,10 +21,10 @@ from camel.toolkits.twitter_toolkit import ( get_user_by_username, ) +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.component.environment import env from app.service.task import Agents from app.utils.listen.toolkit_listen import auto_listen_toolkit, listen_toolkit -from app.utils.toolkit.abstract_toolkit import AbstractToolkit @auto_listen_toolkit(BaseTwitterToolkit) diff --git a/backend/app/utils/toolkit/video_analysis_toolkit.py b/backend/app/agent/toolkit/video_analysis_toolkit.py similarity index 96% rename from backend/app/utils/toolkit/video_analysis_toolkit.py rename to backend/app/agent/toolkit/video_analysis_toolkit.py index 2a76f1bdb..483810c3f 100644 --- a/backend/app/utils/toolkit/video_analysis_toolkit.py +++ b/backend/app/agent/toolkit/video_analysis_toolkit.py @@ -17,10 +17,10 @@ import os from camel.models import BaseModelBackend from camel.toolkits import VideoAnalysisToolkit as BaseVideoAnalysisToolkit +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.component.environment import env from app.service.task import Agents from app.utils.listen.toolkit_listen import auto_listen_toolkit -from app.utils.toolkit.abstract_toolkit import AbstractToolkit @auto_listen_toolkit(BaseVideoAnalysisToolkit) diff --git a/backend/app/utils/toolkit/video_download_toolkit.py b/backend/app/agent/toolkit/video_download_toolkit.py similarity index 96% rename from backend/app/utils/toolkit/video_download_toolkit.py rename to backend/app/agent/toolkit/video_download_toolkit.py index 395634cd7..2f9eef4d7 100644 --- a/backend/app/utils/toolkit/video_download_toolkit.py +++ b/backend/app/agent/toolkit/video_download_toolkit.py @@ -16,10 +16,10 @@ import os from camel.toolkits import VideoDownloaderToolkit as BaseVideoDownloaderToolkit +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.component.environment import env from app.service.task import Agents from app.utils.listen.toolkit_listen import auto_listen_toolkit -from app.utils.toolkit.abstract_toolkit import AbstractToolkit @auto_listen_toolkit(BaseVideoDownloaderToolkit) diff --git a/backend/app/utils/toolkit/web_deploy_toolkit.py b/backend/app/agent/toolkit/web_deploy_toolkit.py similarity index 97% rename from backend/app/utils/toolkit/web_deploy_toolkit.py rename to backend/app/agent/toolkit/web_deploy_toolkit.py index c7d2a5fff..332107901 100644 --- a/backend/app/utils/toolkit/web_deploy_toolkit.py +++ b/backend/app/agent/toolkit/web_deploy_toolkit.py @@ -17,9 +17,9 @@ from typing import Any from camel.toolkits import WebDeployToolkit as BaseWebDeployToolkit +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.service.task import Agents from app.utils.listen.toolkit_listen import auto_listen_toolkit, listen_toolkit -from app.utils.toolkit.abstract_toolkit import AbstractToolkit @auto_listen_toolkit(BaseWebDeployToolkit) diff --git a/backend/app/utils/toolkit/whatsapp_toolkit.py b/backend/app/agent/toolkit/whatsapp_toolkit.py similarity index 96% rename from backend/app/utils/toolkit/whatsapp_toolkit.py rename to backend/app/agent/toolkit/whatsapp_toolkit.py index 7a2ef49a8..6b11bd147 100644 --- a/backend/app/utils/toolkit/whatsapp_toolkit.py +++ b/backend/app/agent/toolkit/whatsapp_toolkit.py @@ -15,10 +15,10 @@ from camel.toolkits import WhatsAppToolkit as BaseWhatsAppToolkit from camel.toolkits.function_tool import FunctionTool +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.component.environment import env from app.service.task import Agents from app.utils.listen.toolkit_listen import auto_listen_toolkit -from app.utils.toolkit.abstract_toolkit import AbstractToolkit @auto_listen_toolkit(BaseWhatsAppToolkit) diff --git a/backend/app/agent/tools.py b/backend/app/agent/tools.py index 2a80cc004..f91f44137 100644 --- a/backend/app/agent/tools.py +++ b/backend/app/agent/tools.py @@ -18,32 +18,32 @@ import os from camel.toolkits import MCPToolkit +from app.agent.toolkit.abstract_toolkit import AbstractToolkit +from app.agent.toolkit.audio_analysis_toolkit import AudioAnalysisToolkit +from app.agent.toolkit.excel_toolkit import ExcelToolkit +from app.agent.toolkit.file_write_toolkit import FileToolkit +from app.agent.toolkit.github_toolkit import GithubToolkit +from app.agent.toolkit.google_calendar_toolkit import GoogleCalendarToolkit +from app.agent.toolkit.google_drive_mcp_toolkit import GoogleDriveMCPToolkit +from app.agent.toolkit.google_gmail_mcp_toolkit import GoogleGmailMCPToolkit +from app.agent.toolkit.image_analysis_toolkit import ImageAnalysisToolkit +from app.agent.toolkit.lark_toolkit import LarkToolkit +from app.agent.toolkit.linkedin_toolkit import LinkedInToolkit +from app.agent.toolkit.mcp_search_toolkit import McpSearchToolkit +from app.agent.toolkit.notion_mcp_toolkit import NotionMCPToolkit +from app.agent.toolkit.openai_image_toolkit import OpenAIImageToolkit +from app.agent.toolkit.pptx_toolkit import PPTXToolkit +from app.agent.toolkit.rag_toolkit import RAGToolkit +from app.agent.toolkit.reddit_toolkit import RedditToolkit +from app.agent.toolkit.search_toolkit import SearchToolkit +from app.agent.toolkit.slack_toolkit import SlackToolkit +from app.agent.toolkit.terminal_toolkit import TerminalToolkit +from app.agent.toolkit.twitter_toolkit import TwitterToolkit +from app.agent.toolkit.video_analysis_toolkit import VideoAnalysisToolkit +from app.agent.toolkit.video_download_toolkit import VideoDownloaderToolkit +from app.agent.toolkit.whatsapp_toolkit import WhatsAppToolkit from app.component.environment import env from app.model.chat import McpServers -from app.utils.toolkit.abstract_toolkit import AbstractToolkit -from app.utils.toolkit.audio_analysis_toolkit import AudioAnalysisToolkit -from app.utils.toolkit.excel_toolkit import ExcelToolkit -from app.utils.toolkit.file_write_toolkit import FileToolkit -from app.utils.toolkit.github_toolkit import GithubToolkit -from app.utils.toolkit.google_calendar_toolkit import GoogleCalendarToolkit -from app.utils.toolkit.google_drive_mcp_toolkit import GoogleDriveMCPToolkit -from app.utils.toolkit.google_gmail_mcp_toolkit import GoogleGmailMCPToolkit -from app.utils.toolkit.image_analysis_toolkit import ImageAnalysisToolkit -from app.utils.toolkit.lark_toolkit import LarkToolkit -from app.utils.toolkit.linkedin_toolkit import LinkedInToolkit -from app.utils.toolkit.mcp_search_toolkit import McpSearchToolkit -from app.utils.toolkit.notion_mcp_toolkit import NotionMCPToolkit -from app.utils.toolkit.openai_image_toolkit import OpenAIImageToolkit -from app.utils.toolkit.pptx_toolkit import PPTXToolkit -from app.utils.toolkit.rag_toolkit import RAGToolkit -from app.utils.toolkit.reddit_toolkit import RedditToolkit -from app.utils.toolkit.search_toolkit import SearchToolkit -from app.utils.toolkit.slack_toolkit import SlackToolkit -from app.utils.toolkit.terminal_toolkit import TerminalToolkit -from app.utils.toolkit.twitter_toolkit import TwitterToolkit -from app.utils.toolkit.video_analysis_toolkit import VideoAnalysisToolkit -from app.utils.toolkit.video_download_toolkit import VideoDownloaderToolkit -from app.utils.toolkit.whatsapp_toolkit import WhatsAppToolkit logger = logging.getLogger(__name__) diff --git a/backend/app/controller/tool_controller.py b/backend/app/controller/tool_controller.py index 006e80de2..a8277dd8e 100644 --- a/backend/app/controller/tool_controller.py +++ b/backend/app/controller/tool_controller.py @@ -19,11 +19,11 @@ import time from fastapi import APIRouter, HTTPException from pydantic import BaseModel +from app.agent.toolkit.google_calendar_toolkit import GoogleCalendarToolkit +from app.agent.toolkit.linkedin_toolkit import LinkedInToolkit +from app.agent.toolkit.notion_mcp_toolkit import NotionMCPToolkit from app.utils.cookie_manager import CookieManager from app.utils.oauth_state_manager import oauth_state_manager -from app.utils.toolkit.google_calendar_toolkit import GoogleCalendarToolkit -from app.utils.toolkit.linkedin_toolkit import LinkedInToolkit -from app.utils.toolkit.notion_mcp_toolkit import NotionMCPToolkit class LinkedInTokenRequest(BaseModel): diff --git a/backend/app/service/chat_service.py b/backend/app/service/chat_service.py index 3fc7de6ad..f4abde1c4 100644 --- a/backend/app/service/chat_service.py +++ b/backend/app/service/chat_service.py @@ -39,6 +39,9 @@ from app.agent.factory import ( task_summary_agent, ) from app.agent.listen_chat_agent import ListenChatAgent +from app.agent.toolkit.human_toolkit import HumanToolkit +from app.agent.toolkit.note_taking_toolkit import NoteTakingToolkit +from app.agent.toolkit.terminal_toolkit import TerminalToolkit from app.agent.tools import get_mcp_tools, get_toolkits from app.model.chat import Chat, NewAgent, Status, TaskContent, sse_json from app.service.task import ( @@ -57,9 +60,6 @@ from app.utils.event_loop_utils import set_main_event_loop from app.utils.file_utils import get_working_directory from app.utils.server.sync_step import sync_step from app.utils.telemetry.workforce_metrics import WorkforceMetricsCallback -from app.utils.toolkit.human_toolkit import HumanToolkit -from app.utils.toolkit.note_taking_toolkit import NoteTakingToolkit -from app.utils.toolkit.terminal_toolkit import TerminalToolkit from app.utils.workforce import Workforce logger = logging.getLogger("chat_service") diff --git a/backend/app/utils/listen/toolkit_listen.py b/backend/app/utils/listen/toolkit_listen.py index b71765ec7..bd411b86b 100644 --- a/backend/app/utils/listen/toolkit_listen.py +++ b/backend/app/utils/listen/toolkit_listen.py @@ -23,13 +23,13 @@ from functools import wraps from inspect import iscoroutinefunction, signature from typing import Any, TypeVar +from app.agent.toolkit.abstract_toolkit import AbstractToolkit from app.service.task import ( ActionActivateToolkitData, ActionDeactivateToolkitData, get_task_lock, process_task, ) -from app.utils.toolkit.abstract_toolkit import AbstractToolkit logger = logging.getLogger("toolkit_listen") diff --git a/backend/tests/app/utils/toolkit/test_note_taking_toolkit.py b/backend/tests/app/agent/toolkit/test_note_taking_toolkit.py similarity index 94% rename from backend/tests/app/utils/toolkit/test_note_taking_toolkit.py rename to backend/tests/app/agent/toolkit/test_note_taking_toolkit.py index 132ea3348..0b70b0a9a 100644 --- a/backend/tests/app/utils/toolkit/test_note_taking_toolkit.py +++ b/backend/tests/app/agent/toolkit/test_note_taking_toolkit.py @@ -14,7 +14,7 @@ import pytest -from app.utils.toolkit.note_taking_toolkit import NoteTakingToolkit +from app.agent.toolkit.note_taking_toolkit import NoteTakingToolkit @pytest.mark.unit diff --git a/backend/tests/app/utils/toolkit/test_rag_toolkit.py b/backend/tests/app/agent/toolkit/test_rag_toolkit.py similarity index 83% rename from backend/tests/app/utils/toolkit/test_rag_toolkit.py rename to backend/tests/app/agent/toolkit/test_rag_toolkit.py index 6ab8f37a3..bc4e4adf4 100644 --- a/backend/tests/app/utils/toolkit/test_rag_toolkit.py +++ b/backend/tests/app/agent/toolkit/test_rag_toolkit.py @@ -1,3 +1,17 @@ +# ========= Copyright 2025-2026 @ Eigent.ai All Rights Reserved. ========= +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ========= Copyright 2025-2026 @ Eigent.ai All Rights Reserved. ========= + import shutil import tempfile from pathlib import Path @@ -5,7 +19,7 @@ from unittest.mock import MagicMock, Mock, patch import pytest -from app.utils.toolkit.rag_toolkit import RAGToolkit +from app.agent.toolkit.rag_toolkit import RAGToolkit @pytest.fixture @@ -19,7 +33,7 @@ def temp_storage_path(): @pytest.fixture def toolkit(temp_storage_path): """Create a RAGToolkit instance with mocked AutoRetriever.""" - with patch("app.utils.toolkit.rag_toolkit.AutoRetriever"): + with patch("app.agent.toolkit.rag_toolkit.AutoRetriever"): with patch.dict("os.environ", {"OPENAI_API_KEY": "test-key"}): toolkit = RAGToolkit( api_task_id="test-task-123", @@ -30,7 +44,7 @@ def toolkit(temp_storage_path): def test_toolkit_initialization(temp_storage_path): """Test RAGToolkit initializes correctly.""" - with patch("app.utils.toolkit.rag_toolkit.AutoRetriever") as mock_ar: + with patch("app.agent.toolkit.rag_toolkit.AutoRetriever") as mock_ar: with patch.dict("os.environ", {"OPENAI_API_KEY": "test-key"}): toolkit = RAGToolkit( api_task_id="test-task-456", @@ -52,7 +66,7 @@ def test_toolkit_initialization(temp_storage_path): def test_toolkit_initialization_with_custom_agent(temp_storage_path): """Test RAGToolkit with custom agent name.""" - with patch("app.utils.toolkit.rag_toolkit.AutoRetriever"): + with patch("app.agent.toolkit.rag_toolkit.AutoRetriever"): with patch.dict("os.environ", {"OPENAI_API_KEY": "test-key"}): toolkit = RAGToolkit( api_task_id="test-task", @@ -65,7 +79,7 @@ def test_toolkit_initialization_with_custom_agent(temp_storage_path): def test_list_knowledge_bases_empty(temp_storage_path): """Test list_knowledge_bases when no KBs exist.""" - with patch("app.utils.toolkit.rag_toolkit.AutoRetriever"): + with patch("app.agent.toolkit.rag_toolkit.AutoRetriever"): with patch.dict("os.environ", {"OPENAI_API_KEY": "test-key"}): toolkit = RAGToolkit( api_task_id="test-task", @@ -81,7 +95,7 @@ def test_list_knowledge_bases_with_tasks(temp_storage_path): (temp_storage_path / "task_123").mkdir() (temp_storage_path / "task_456").mkdir() - with patch("app.utils.toolkit.rag_toolkit.AutoRetriever"): + with patch("app.agent.toolkit.rag_toolkit.AutoRetriever"): with patch.dict("os.environ", {"OPENAI_API_KEY": "test-key"}): toolkit = RAGToolkit( api_task_id="test-task", @@ -106,7 +120,7 @@ def test_get_tools_returns_three_tools(toolkit): def test_get_can_use_tools_returns_tools(temp_storage_path): """Test get_can_use_tools returns tools.""" - with patch("app.utils.toolkit.rag_toolkit.AutoRetriever"): + with patch("app.agent.toolkit.rag_toolkit.AutoRetriever"): with patch.object(RAGToolkit, "get_tools") as mock_get_tools: mock_get_tools.return_value = [Mock(), Mock()] tools = RAGToolkit.get_can_use_tools("test-task") @@ -115,7 +129,7 @@ def test_get_can_use_tools_returns_tools(temp_storage_path): def test_get_can_use_tools_auto_derives_collection_name(temp_storage_path): """Test get_can_use_tools auto-derives collection_name from api_task_id.""" - with patch("app.utils.toolkit.rag_toolkit.AutoRetriever"): + with patch("app.agent.toolkit.rag_toolkit.AutoRetriever"): with patch.object( RAGToolkit, "__init__", return_value=None ) as mock_init: @@ -129,7 +143,7 @@ def test_get_can_use_tools_auto_derives_collection_name(temp_storage_path): def test_default_collection_name(temp_storage_path): """Test default collection_name when not provided.""" - with patch("app.utils.toolkit.rag_toolkit.AutoRetriever"): + with patch("app.agent.toolkit.rag_toolkit.AutoRetriever"): with patch.dict("os.environ", {"OPENAI_API_KEY": "test-key"}): toolkit = RAGToolkit( api_task_id="test-task", @@ -138,7 +152,7 @@ def test_default_collection_name(temp_storage_path): assert toolkit._collection_name == "default" -@patch("app.utils.toolkit.rag_toolkit.AutoRetriever") +@patch("app.agent.toolkit.rag_toolkit.AutoRetriever") def test_information_retrieval_success( mock_auto_retriever_class, temp_storage_path ): @@ -165,7 +179,7 @@ def test_information_retrieval_success( mock_auto_retriever.run_vector_retriever.assert_called_once() -@patch("app.utils.toolkit.rag_toolkit.AutoRetriever") +@patch("app.agent.toolkit.rag_toolkit.AutoRetriever") def test_information_retrieval_with_error( mock_auto_retriever_class, temp_storage_path ): @@ -191,7 +205,7 @@ def test_information_retrieval_with_error( assert "Test error" in result -@patch("app.utils.toolkit.rag_toolkit.AutoRetriever") +@patch("app.agent.toolkit.rag_toolkit.AutoRetriever") def test_information_retrieval_with_list_contents( mock_auto_retriever_class, temp_storage_path ): diff --git a/backend/tests/unit/utils/test_terminal_toolkit.py b/backend/tests/app/agent/toolkit/test_terminal_toolkit.py similarity index 98% rename from backend/tests/unit/utils/test_terminal_toolkit.py rename to backend/tests/app/agent/toolkit/test_terminal_toolkit.py index 1c04a27d5..dc060fba0 100644 --- a/backend/tests/unit/utils/test_terminal_toolkit.py +++ b/backend/tests/app/agent/toolkit/test_terminal_toolkit.py @@ -18,8 +18,8 @@ import time import pytest +from app.agent.toolkit.terminal_toolkit import TerminalToolkit from app.service.task import TaskLock, task_locks -from app.utils.toolkit.terminal_toolkit import TerminalToolkit @pytest.mark.unit diff --git a/backend/tests/unit/service/test_chat_service.py b/backend/tests/unit/service/test_chat_service.py index 36d753aa6..ee96b258a 100644 --- a/backend/tests/unit/service/test_chat_service.py +++ b/backend/tests/unit/service/test_chat_service.py @@ -679,7 +679,7 @@ class TestChatServiceAgentOperations: return_value=mock_mcp_agent, ), patch( - "app.utils.toolkit.human_toolkit.get_task_lock", + "app.agent.toolkit.human_toolkit.get_task_lock", return_value=mock_task_lock, ), ): @@ -1209,7 +1209,7 @@ class TestChatServiceErrorCases: with ( patch( - "app.utils.toolkit.human_toolkit.get_task_lock", + "app.agent.toolkit.human_toolkit.get_task_lock", return_value=mock_task_lock, ), patch(