🐛 fix: 修复重载插件时函数工具可能多次家在的问题

This commit is contained in:
Soulter
2025-03-12 23:37:24 +08:00
parent 16488506e8
commit 681940d466
3 changed files with 8 additions and 9 deletions
+7 -4
View File
@@ -2,7 +2,7 @@ import json
import textwrap
from typing import Dict, List, Awaitable
from dataclasses import dataclass
from astrbot import logger
@dataclass
class FuncTool:
@@ -46,14 +46,16 @@ class FuncCall:
desc: str,
handler: Awaitable,
) -> None:
"""
为函数调用(function-calling / tools-use)添加工具。
"""添加函数调用工具
@param name: 函数名
@param func_args: 函数参数列表,格式为 [{"type": "string", "name": "arg_name", "description": "arg_description"}, ...]
@param desc: 函数描述
@param func_obj: 处理函数
"""
# check if the tool has been added before
self.remove_func(name)
params = {
"type": "object", # hard-coded here
"properties": {},
@@ -70,13 +72,14 @@ class FuncCall:
handler=handler,
)
self.func_list.append(_func)
logger.info(f"添加了函数调用工具({len(self.func_list)}): {name} - {desc}")
def remove_func(self, name: str) -> None:
"""
删除一个函数调用工具。
"""
for i, f in enumerate(self.func_list):
if f["name"] == name:
if f.name == name:
self.func_list.pop(i)
break
@@ -360,8 +360,6 @@ def register_llm_tool(name: str = None):
)
md = get_handler_or_create(awaitable, EventType.OnCallingFuncToolEvent)
llm_tools.add_func(llm_tool_name, args, docstring.description, md.handler)
logger.debug(f"LLM 函数工具 {llm_tool_name} 已注册")
return awaitable
return decorator
+1 -3
View File
@@ -485,7 +485,7 @@ class PluginManager:
for handler in star_handlers_registry.get_handlers_by_module_name(
plugin_module_path
):
logger.debug(f"unbind handler {handler.handler_name} from {plugin_name}")
logger.info(f"移除了插件 {plugin_name} 的处理函数 {handler.handler_name} ({len(star_handlers_registry)})")
star_handlers_registry.remove(handler)
keys_to_delete = [
k
@@ -493,8 +493,6 @@ class PluginManager:
if k.startswith(plugin_module_path)
]
for k in keys_to_delete:
v = star_handlers_registry.star_handlers_map[k]
logger.debug(f"unbind handler {v.handler_name} from {plugin_name} (map)")
try:
del star_handlers_registry.star_handlers_map[k]
except KeyError: