S1-DeepResearch-32B / inference /test_all_tools.py
ScienceOne-AI's picture
Upload 61 files
816198f verified
from tool_kits import (
AskQuestionAboutImageToolkit,
AskQuestionAboutVideoToolkit,
ExecuteCodeToolkit,
WideSearchToolkit,
ImageSearchToolkit,
ScholarSearchToolkit,
FileWideParseToolkit,
WideVisitToolkit,
BashToolkit
)
from urllib.parse import urljoin
from typing import Callable, Dict, Any
# initialize all tools (alphabetically sorted)
tools = {
"ask_question_about_image": AskQuestionAboutImageToolkit(),
"ask_question_about_video": AskQuestionAboutVideoToolkit(),
"execute_code": ExecuteCodeToolkit(),
"wide_search": WideSearchToolkit(),
"image_search": ImageSearchToolkit(),
"scholar_search": ScholarSearchToolkit(),
"file_wide_parse": FileWideParseToolkit(),
"wide_visit": WideVisitToolkit(),
"bash": BashToolkit(),
}
# register all tools
ALL_TOOLS: Dict[str, Dict[str, Any]] = {}
def register_tool(name: str, description: str, parameters: Dict[str, Any]):
"""
装饰器:注册工具到 TOOLS
"""
def decorator(func: Callable):
ALL_TOOLS[name] = {
"name": name,
"description": description,
"strict": True,
"parameters": parameters,
"function": func,
}
return func
return decorator
# for competibility with the old code
for tool_name, tool in tools.items():
ALL_TOOLS[tool_name] = {
"name": tool.name,
"description": tool.description,
"strict": True,
"parameters": tool.params,
"function": tool.forward, # 工具执行函数
"schema_json": tool.json
}
def test_tools():
"""
测试所有注册的工具,参考xxl_wrapped_camel_tools.py中的测试用例
"""
results = {}
# 测试用例定义(每个工具一个简单用例)
test_cases = {
"ask_question_about_image": {"image_path": [
"http://img.daimg.com/uploads/allimg/240712/3-240G2112F6.jpg"
], "question": "What is in this image?"},
"ask_question_about_video": {"video_path": "https://www.bilibili.com/video/BV11p81zFEJT/?spm_id_from=333.337.search-card.all.click", "question": "描述这个视频的内容和主要场景。"},
"bash": {"command": "echo 'hello world'"},
"execute_code": {"code": "print('Hello World')"},
"execute_code": {"code": "import math\nimport matplotlib.pyplot as plt\n"},
"wide_search": {"query": ['伊莎贝尔·于佩尔 包法利夫人 苦的砒霜', 'Isabelle Huppert insisted poison taste bitter']},
"image_search": {"query": ["咖喱", "肉骨茶", "印尼九层塔"]},
"scholar_search": {"query": ["spa", "烟花", "attention"]},
"file_wide_parse": {
"files": [
"http://img.daimg.com/uploads/allimg/240712/3-240G2112F6.jpg"
],
},
"wide_visit": {"url": "https://www.sohu.com/a/960662276_163491", "goal": "疯狂动物城有哪些周边"},
}
for tool_name, test_case in test_cases.items():
if tool_name not in ALL_TOOLS:
print(f"Tool {tool_name} not found in registered tools.")
continue
tool_info = ALL_TOOLS[tool_name]
print(f"\nTool: {tool_name}")
print(f"Description: {tool_info['description']}")
print(f"Parameters: {tool_info['parameters']}")
params = test_case
import time
params['conversation_id'] = f"test_{time.strftime('%Y%m%d%H%M%S', time.localtime())}"
print(f"Testing with parameters: {params}")
try:
# 支持异步工具(如browse_url)
if tool_name == "browse_url":
import asyncio
result = asyncio.run(tool_info["function"](**params))
else:
result = tool_info["function"](**params)
print(f"\n✅ Test result: {str(result)}")
results[tool_name] = {"success": True, "result": result}
except Exception as e:
print(f"\n❌ Test failed: {str(e)}")
results[tool_name] = {"success": False, "error": str(e)}
print("\n" + "🏃..🎈 " * 20 + "\n")
print("\n" + "==" * 20 + "END" + "==" * 20 + "\n")
if __name__ == "__main__":
for key in ALL_TOOLS.keys():
print(ALL_TOOLS[key]['schema_json'])
print("=" * 100)
test_tools()