Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions astrbot/core/astr_agent_tool_exec.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
LOCAL_EXECUTE_SHELL_TOOL,
LOCAL_PYTHON_TOOL,
PYTHON_TOOL,
SEND_MESSAGE_TO_USER_TOOL,
)
from astrbot.core.cron.events import CronMessageEvent
from astrbot.core.message.components import Image
Expand All @@ -37,6 +36,7 @@
from astrbot.core.platform.message_session import MessageSession
from astrbot.core.provider.entites import ProviderRequest
from astrbot.core.provider.register import llm_tools
from astrbot.core.tools.message_tools import SendMessageToUserTool
from astrbot.core.utils.astrbot_path import get_astrbot_temp_path
from astrbot.core.utils.history_saver import persist_agent_history
from astrbot.core.utils.image_ref_utils import is_supported_image_ref
Expand Down Expand Up @@ -515,7 +515,9 @@ async def _wake_main_agent_for_background_result(
)
if not req.func_tool:
req.func_tool = ToolSet()
req.func_tool.add_tool(SEND_MESSAGE_TO_USER_TOOL)
req.func_tool.add_tool(
ctx.get_llm_tool_manager().get_builtin_tool(SendMessageToUserTool)
)

result = await build_main_agent(
event=cron_event, plugin_context=ctx, config=config, req=req
Expand Down
58 changes: 35 additions & 23 deletions astrbot/core/astr_main_agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@
FILE_UPLOAD_TOOL,
GET_EXECUTION_HISTORY_TOOL,
GET_SKILL_PAYLOAD_TOOL,
KNOWLEDGE_BASE_QUERY_TOOL,
LIST_SKILL_CANDIDATES_TOOL,
LIST_SKILL_RELEASES_TOOL,
LIVE_MODE_SYSTEM_PROMPT,
Expand All @@ -44,11 +43,9 @@
ROLLBACK_SKILL_RELEASE_TOOL,
RUN_BROWSER_SKILL_TOOL,
SANDBOX_MODE_PROMPT,
SEND_MESSAGE_TO_USER_TOOL,
SYNC_SKILL_RELEASE_TOOL,
TOOL_CALL_PROMPT,
TOOL_CALL_PROMPT_SKILLS_LIKE_MODE,
retrieve_knowledge_base,
)
from astrbot.core.conversation_mgr import Conversation
from astrbot.core.message.components import File, Image, Record, Reply
Expand All @@ -63,16 +60,21 @@
from astrbot.core.star.context import Context
from astrbot.core.star.star_handler import star_map
from astrbot.core.tools.cron_tools import (
CREATE_CRON_JOB_TOOL,
DELETE_CRON_JOB_TOOL,
LIST_CRON_JOBS_TOOL,
CreateActiveCronTool,
DeleteCronJobTool,
ListCronJobsTool,
)
from astrbot.core.tools.knowledge_base_tools import (
KnowledgeBaseQueryTool,
retrieve_knowledge_base,
)
from astrbot.core.tools.message_tools import SendMessageToUserTool
from astrbot.core.tools.web_search_tools import (
TAVILY_EXTRACT_WEB_PAGE_TOOL,
WEB_SEARCH_BAIDU_TOOL,
WEB_SEARCH_BOCHA_TOOL,
WEB_SEARCH_BRAVE_TOOL,
WEB_SEARCH_TAVILY_TOOL,
BaiduWebSearchTool,
BochaWebSearchTool,
BraveWebSearchTool,
TavilyExtractWebPageTool,
TavilyWebSearchTool,
normalize_legacy_web_search_config,
)
from astrbot.core.utils.file_extract import extract_file_moonshotai
Expand Down Expand Up @@ -226,7 +228,11 @@ async def _apply_kb(
else:
if req.func_tool is None:
req.func_tool = ToolSet()
req.func_tool.add_tool(KNOWLEDGE_BASE_QUERY_TOOL)
req.func_tool.add_tool(
plugin_context.get_llm_tool_manager().get_builtin_tool(
KnowledgeBaseQueryTool
)
)


async def _apply_file_extract(
Expand Down Expand Up @@ -1054,12 +1060,13 @@ def _apply_sandbox_tools(
req.system_prompt = f"{req.system_prompt or ''}\n{SANDBOX_MODE_PROMPT}\n"


def _proactive_cron_job_tools(req: ProviderRequest) -> None:
def _proactive_cron_job_tools(req: ProviderRequest, plugin_context: Context) -> None:
if req.func_tool is None:
req.func_tool = ToolSet()
req.func_tool.add_tool(CREATE_CRON_JOB_TOOL)
req.func_tool.add_tool(DELETE_CRON_JOB_TOOL)
req.func_tool.add_tool(LIST_CRON_JOBS_TOOL)
tool_mgr = plugin_context.get_llm_tool_manager()
req.func_tool.add_tool(tool_mgr.get_builtin_tool(CreateActiveCronTool))
req.func_tool.add_tool(tool_mgr.get_builtin_tool(DeleteCronJobTool))
req.func_tool.add_tool(tool_mgr.get_builtin_tool(ListCronJobsTool))


async def _apply_web_search_tools(
Expand All @@ -1077,16 +1084,17 @@ async def _apply_web_search_tools(
if req.func_tool is None:
req.func_tool = ToolSet()

tool_mgr = plugin_context.get_llm_tool_manager()
provider = prov_settings.get("websearch_provider", "tavily")
if provider == "tavily":
req.func_tool.add_tool(WEB_SEARCH_TAVILY_TOOL)
req.func_tool.add_tool(TAVILY_EXTRACT_WEB_PAGE_TOOL)
req.func_tool.add_tool(tool_mgr.get_builtin_tool(TavilyWebSearchTool))
req.func_tool.add_tool(tool_mgr.get_builtin_tool(TavilyExtractWebPageTool))
elif provider == "bocha":
req.func_tool.add_tool(WEB_SEARCH_BOCHA_TOOL)
req.func_tool.add_tool(tool_mgr.get_builtin_tool(BochaWebSearchTool))
elif provider == "brave":
req.func_tool.add_tool(WEB_SEARCH_BRAVE_TOOL)
req.func_tool.add_tool(tool_mgr.get_builtin_tool(BraveWebSearchTool))
elif provider == "baidu_ai_search":
req.func_tool.add_tool(WEB_SEARCH_BAIDU_TOOL)
req.func_tool.add_tool(tool_mgr.get_builtin_tool(BaiduWebSearchTool))


def _get_compress_provider(
Expand Down Expand Up @@ -1348,12 +1356,16 @@ async def build_main_agent(
)

if config.add_cron_tools:
_proactive_cron_job_tools(req)
_proactive_cron_job_tools(req, plugin_context)

if event.platform_meta.support_proactive_message:
if req.func_tool is None:
req.func_tool = ToolSet()
req.func_tool.add_tool(SEND_MESSAGE_TO_USER_TOOL)
req.func_tool.add_tool(
plugin_context.get_llm_tool_manager().get_builtin_tool(
SendMessageToUserTool
)
)

if provider.provider_config.get("max_context_tokens", 0) <= 0:
model = provider.get_model()
Expand Down
Loading
Loading