Duibonduil commited on
Commit
854fc2a
·
verified ·
1 Parent(s): bb35c15

Upload 5 files

Browse files
examples/sandbox/__init__.py ADDED
File without changes
examples/sandbox/mcp.json ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "mcpServers": {
3
+ "amap-amap-sse": {
4
+ "type": "sse",
5
+ "url": "https://mcp.amap.com/sse?key=${AMAP_AMAP_SSE_KEY}",
6
+ "timeout": 5.0,
7
+ "sse_read_timeout": 300.0
8
+ },
9
+ "tavily-mcp": {
10
+ "type": "stdio",
11
+ "command": "npx",
12
+ "args": ["-y", "[email protected]"],
13
+ "env": {
14
+ "TAVILY_API_KEY": "tvly-dev-"
15
+ }
16
+ },
17
+ "aworldsearch_server": {
18
+ "type": "function_tool"
19
+ },
20
+ "aworldsearch_server1": {
21
+ "command": "python",
22
+ "args": [
23
+ "-m",
24
+ "mcp_servers.aworldsearch_server"
25
+ ],
26
+ "env": {
27
+ "AWORLD_SEARCH_URL": "${AWORLD_SEARCH_URL}",
28
+ "AWORLD_SEARCH_TOTAL_NUM": "${AWORLD_SEARCH_TOTAL_NUM}",
29
+ "AWORLD_SEARCH_SLICE_NUM": "${AWORLD_SEARCH_SLICE_NUM}",
30
+ "AWORLD_SEARCH_DOMAIN": "${AWORLD_SEARCH_DOMAIN}",
31
+ "AWORLD_SEARCH_SEARCHMODE": "${AWORLD_SEARCH_SEARCHMODE}",
32
+ "AWORLD_SEARCH_SOURCE": "${AWORLD_SEARCH_SOURCE}",
33
+ "AWORLD_SEARCH_UID": "${AWORLD_SEARCH_UID}"
34
+ }
35
+ },
36
+ "picsearch_server": {
37
+ "command": "python",
38
+ "args": [
39
+ "-m",
40
+ "mcp_servers.picsearch_server"
41
+ ],
42
+ "env": {
43
+ "PIC_SEARCH_URL": "${PIC_SEARCH_URL}",
44
+ "PIC_SEARCH_TOTAL_NUM": "${PIC_SEARCH_TOTAL_NUM}",
45
+ "PIC_SEARCH_SLICE_NUM": "${PIC_SEARCH_SLICE_NUM}",
46
+ "PIC_SEARCH_DOMAIN": "${PIC_SEARCH_DOMAIN}",
47
+ "PIC_SEARCH_SEARCHMODE": "${PIC_SEARCH_SEARCHMODE}",
48
+ "PIC_SEARCH_SOURCE": "${PIC_SEARCH_SOURCE}"
49
+ }
50
+ },
51
+ "gen_audio_server": {
52
+ "command": "python",
53
+ "args": [
54
+ "-m",
55
+ "mcp_servers.gen_audio_server"
56
+ ],
57
+ "env": {
58
+ "AUDIO_TASK_URL": "${AUDIO_TASK_URL}",
59
+ "AUDIO_QUERY_URL": "${AUDIO_QUERY_URL}",
60
+ "AUDIO_APP_KEY": "${AUDIO_APP_KEY}",
61
+ "AUDIO_SECRET": "${AUDIO_SECRET}",
62
+ "AUDIO_SAMPLE_RATE": "${AUDIO_SAMPLE_RATE}",
63
+ "AUDIO_AUDIO_FORMAT": "${AUDIO_AUDIO_FORMAT}",
64
+ "AUDIO_TTS_VOICE": "${AUDIO_TTS_VOICE}",
65
+ "AUDIO_TTS_SPEECH_RATE": "${AUDIO_TTS_SPEECH_RATE}",
66
+ "AUDIO_TTS_VOLUME": "${AUDIO_TTS_VOLUME}",
67
+ "AUDIO_TTS_PITCH": "${AUDIO_TTS_PITCH}",
68
+ "AUDIO_VOICE_TYPE": "${AUDIO_VOICE_TYPE}"
69
+ }
70
+ },
71
+ "gen_video_server": {
72
+ "command": "python",
73
+ "args": [
74
+ "-m",
75
+ "mcp_servers.gen_video_server"
76
+ ],
77
+ "env": {
78
+ "DASHSCOPE_API_KEY": "${DASHSCOPE_API_KEY}",
79
+ "DASHSCOPE_VIDEO_SUBMIT_URL": "${DASHSCOPE_VIDEO_SUBMIT_URL}",
80
+ "DASHSCOPE_QUERY_BASE_URL": "${DASHSCOPE_QUERY_BASE_URL}",
81
+ "DASHSCOPE_VIDEO_MODEL": "${DASHSCOPE_VIDEO_MODEL}",
82
+ "DASHSCOPE_VIDEO_SIZE": "${DASHSCOPE_VIDEO_SIZE}",
83
+ "DASHSCOPE_VIDEO_SLEEP_TIME": "${DASHSCOPE_VIDEO_SLEEP_TIME}",
84
+ "DASHSCOPE_VIDEO_RETRY_TIMES": "${DASHSCOPE_VIDEO_RETRY_TIMES}"
85
+ }
86
+ }
87
+ }
88
+ }
examples/sandbox/run-inner-tool-test.py ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # coding: utf-8
2
+ # Copyright (c) 2025 inclusionAI.
3
+ import asyncio
4
+ import json
5
+ import logging
6
+ import os
7
+
8
+ from dotenv import load_dotenv
9
+
10
+ from aworld.agents.llm_agent import Agent
11
+ from aworld.config.conf import AgentConfig, TaskConfig
12
+ from aworld.core.task import Task
13
+
14
+ from aworld.runner import Runners
15
+ from aworld.runners.callback.decorator import reg_callback
16
+ from aworld.tools.mcp_tool import async_mcp_tool
17
+ from examples.sandbox.inner_tools import aworldsearch_function_tools
18
+
19
+
20
+
21
+
22
+ @reg_callback("print_content")
23
+ def simple_callback(content):
24
+ """Simple callback function, prints content and returns it
25
+
26
+ Args:
27
+ content: Content to print
28
+
29
+ Returns:
30
+ The input content
31
+ """
32
+ print(f"callback content: {content}")
33
+ return content
34
+
35
+ async def run():
36
+ load_dotenv()
37
+ llm_provider = os.getenv("LLM_PROVIDER_WEATHER", "openai")
38
+ llm_model_name = os.getenv("LLM_MODEL_NAME_WEATHER")
39
+ llm_api_key = os.getenv("LLM_API_KEY_WEATHER")
40
+ llm_base_url = os.getenv("LLM_BASE_URL_WEATHER")
41
+ llm_temperature = os.getenv("LLM_TEMPERATURE_WEATHER", 0.0)
42
+
43
+ agent_config = AgentConfig(
44
+ llm_provider=llm_provider,
45
+ llm_model_name=llm_model_name,
46
+ llm_api_key=llm_api_key,
47
+ llm_base_url=llm_base_url,
48
+ llm_temperature=llm_temperature,
49
+ )
50
+ #mcp_servers = ["filewrite_server", "fileread_server"]
51
+ #mcp_servers = ["amap-amap-sse","filewrite_server", "fileread_server"]
52
+ #mcp_servers = ["file_server"]
53
+ #mcp_servers = ["amap-amap-sse"]
54
+ mcp_servers = ["aworldsearch_server"]
55
+ #mcp_servers = ["gen_video_server"]
56
+ # mcp_servers = ["picsearch_server"]
57
+ #mcp_servers = ["gen_audio_server"]
58
+ #mcp_servers = ["playwright"]
59
+ #mcp_servers = ["tavily-mcp"]
60
+
61
+ path_cwd = os.path.dirname(os.path.abspath(__file__))
62
+ mcp_path = os.path.join(path_cwd, "mcp.json")
63
+ with open(mcp_path, "r") as f:
64
+ mcp_config = json.load(f)
65
+
66
+ print("-------------------mcp_config--------------",mcp_config)
67
+
68
+ #sand_box = Sandbox(mcp_servers=mcp_servers,mcp_config=mcp_config)
69
+ # You can specify sandbox
70
+ #sand_box = Sandbox(mcp_servers=mcp_servers, mcp_config=mcp_config,env_type=SandboxEnvType.K8S)
71
+ #sand_box = Sandbox(mcp_servers=mcp_servers, mcp_config=mcp_config,env_type=SandboxEnvType.SUPERCOMPUTER)
72
+
73
+ search_sys_prompt = "You are a versatile assistant"
74
+ search = Agent(
75
+ conf=agent_config,
76
+ name="search_agent",
77
+ system_prompt=search_sys_prompt,
78
+ mcp_config=mcp_config,
79
+ mcp_servers=mcp_servers,
80
+ #sandbox=sand_box,
81
+ )
82
+
83
+ # Run agent
84
+ # Runners.sync_run(input="Use tavily-mcp to check what tourist attractions are in Hangzhou", agent=search)
85
+ task = Task(
86
+ # input="Use tavily-mcp to check what tourist attractions are in Hangzhou",
87
+ # input="Use the file_server tool to analyze this audio link: https://amap-aibox-data.oss-cn-zhangjiakou.aliyuncs.com/.mp3",
88
+ # input="Use the amap-amap-sse tool to find hotels within one kilometer of West Lake in Hangzhou",
89
+ input="Use the aworldsearch_server tool to search for the origin of the Dragon Boat Festival",
90
+ # input="Use the picsearch_server tool to search for Captain America",
91
+ # input="Make sure to use the human_confirm tool to let the user confirm this message: 'Do you want to make a payment to this customer'",
92
+ # input="Use the gen_audio_server tool to convert this sentence to audio: 'Nice to meet you'",
93
+ #input="Use the gen_video_server tool to generate a video of this description: 'A cat walking alone on a snowy day'",
94
+ #input="How's the weather in New York, Shanghai, and Beijing right now? These are three cities, I hope the large model returns three tools when it identifies tool calls",
95
+ # input="First call the filewrite_server tool, then call the fileread_server tool",
96
+ # input="Use the playwright tool, with Google browser, search for the latest news about the Trump administration on www.baidu.com",
97
+ # input="Use tavily-mcp",
98
+ agent=search,
99
+ conf=TaskConfig(),
100
+ event_driven=True
101
+ )
102
+
103
+ #result = Runners.sync_run_task(task)
104
+ #result = Runners.sync_run_task(task)
105
+ #result = await Runners.streamed_run_task(task)
106
+ # result = await Runners.run_task(task)
107
+ # print(
108
+ # "----------------------------------------------------------------------------------------------"
109
+ # )
110
+ # print(result)
111
+ # async for chunk in Runners.streamed_run_task(task).stream_events():
112
+ # print(chunk, end="", flush=True)
113
+
114
+ async for output in Runners.streamed_run_task(task).stream_events():
115
+ print(f"Agent Ouput: {output}")
116
+
117
+
118
+
119
+ if __name__ == "__main__":
120
+ asyncio.run(run())
examples/sandbox/run-test.py ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # coding: utf-8
2
+ # Copyright (c) 2025 inclusionAI.
3
+ import asyncio
4
+ import json
5
+ import os
6
+
7
+ from dotenv import load_dotenv
8
+
9
+ from aworld.config.conf import AgentConfig, TaskConfig
10
+ from aworld.agents.llm_agent import Agent
11
+ from aworld.core.task import Task
12
+ from aworld.runner import Runners
13
+
14
+
15
+ async def run():
16
+ load_dotenv()
17
+ llm_provider = os.getenv("LLM_PROVIDER_WEATHER", "openai")
18
+ llm_model_name = os.getenv("LLM_MODEL_NAME_WEATHER")
19
+ llm_api_key = os.getenv("LLM_API_KEY_WEATHER")
20
+ llm_base_url = os.getenv("LLM_BASE_URL_WEATHER")
21
+ llm_temperature = os.getenv("LLM_TEMPERATURE_WEATHER", 0.0)
22
+
23
+ agent_config = AgentConfig(
24
+ llm_provider=llm_provider,
25
+ llm_model_name=llm_model_name,
26
+ llm_api_key=llm_api_key,
27
+ llm_base_url=llm_base_url,
28
+ llm_temperature=llm_temperature,
29
+ )
30
+ mcp_servers = ["tavily-mcp"]
31
+
32
+ path_cwd = os.path.dirname(os.path.abspath(__file__))
33
+ mcp_path = os.path.join(path_cwd, "mcp.json")
34
+ with open(mcp_path, "r") as f:
35
+ mcp_config = json.load(f)
36
+
37
+ search_sys_prompt = "You are a versatile assistant"
38
+ search = Agent(
39
+ conf=agent_config,
40
+ name="search_agent",
41
+ system_prompt=search_sys_prompt,
42
+ mcp_config=mcp_config,
43
+ mcp_servers=mcp_servers,
44
+ )
45
+
46
+ # Run agent
47
+ task = Task(
48
+ input="Use tavily-mcp to check what tourist attractions are in Hangzhou",
49
+ agent=search,
50
+ conf=TaskConfig(),
51
+ )
52
+
53
+ result = Runners.sync_run_task(task)
54
+ print( "----------------------------------------------------------------------------------------------")
55
+ print(result)
56
+
57
+
58
+ if __name__ == "__main__":
59
+ asyncio.run(run())
examples/sandbox/test_inner_tool.py ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # coding: utf-8
2
+ # Copyright (c) 2025 inclusionAI.
3
+
4
+ import logging
5
+ from aworld.tools import get_function_tools, list_function_tools
6
+ from examples.sandbox.inner_tools import aworldsearch_function_tools, another_function_tools
7
+
8
+ aworldsearch_server = get_function_tools("aworldsearch_server")
9
+
10
+ print(aworldsearch_server.list_tools())
11
+ res = aworldsearch_server.call_tool("search", {"query_list": ["Tencent financial report", "Baidu financial report", "Alibaba financial report"],})
12
+ print(res)
13
+
14
+ another_server = get_function_tools("another-server")
15
+ print(another_server.list_tools())
16
+
17
+
18
+ # Configure logging
19
+ logging.basicConfig(
20
+ level=logging.INFO,
21
+ format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
22
+ )
23
+
24
+ # Step 1: Import different modules, which will automatically register their respective FunctionTools instances
25
+ print("=== Step 1: Import modules, automatically register FunctionTools instances ===")
26
+ # Import aworldsearch_function_tools module, which registers "aworldsearch-server"
27
+ print("Imported aworldsearch_function_tools module")
28
+
29
+ # Import another_function_tools module, which registers "another-server"
30
+
31
+ print("Imported another_function_tools module")
32
+
33
+ # Step 2: Get FunctionTools instances by name
34
+ print("\n=== Step 2: Get FunctionTools instances by name ===")
35
+ from aworld.tools import get_function_tools, list_function_tools
36
+
37
+ # List all registered FunctionTools servers
38
+ print(f"All registered servers: {list_function_tools()}")
39
+
40
+ # Get server instance by specific name
41
+ aworldsearch_server = get_function_tools("aworldsearch-server")
42
+ print(f"Retrieved server: {aworldsearch_server.name}")
43
+ print(f"Server description: {aworldsearch_server.description}")
44
+
45
+ another_server = get_function_tools("another-server")
46
+ print(f"Retrieved server: {another_server.name}")
47
+ print(f"Server description: {another_server.description}")
48
+
49
+ # Step 3: Use the retrieved instances to call methods
50
+ print("\n=== Step 3: Use the retrieved instances to call methods ===")
51
+ # List all tools of aworldsearch server
52
+ print("aworldsearch-server tool list:")
53
+ for tool in aworldsearch_server.list_tools():
54
+ print(f" - {tool.name}: {tool.description}")
55
+
56
+ # List all tools of another server
57
+ print("\nanother-server tool list:")
58
+ for tool in another_server.list_tools():
59
+ print(f" - {tool.name}: {tool.description}")
60
+
61
+ # Step 4: Call tools
62
+ print("\n=== Step 4: Call tool examples ===")
63
+ # Call aworldsearch server's tool
64
+ if "demo_search" in [tool.name for tool in aworldsearch_server.list_tools()]:
65
+ print("Calling demo_search tool:")
66
+ result = aworldsearch_server.call_tool("demo_search", {"query_list": ["Test query"]})
67
+ print(result)
68
+
69
+ # Call another server's tool
70
+ if "get_weather" in [tool.name for tool in another_server.list_tools()]:
71
+ print("\nCalling get_weather tool:")
72
+ result = another_server.call_tool("get_weather", {"city": "Beijing"})
73
+ print(result)
74
+
75
+ if __name__ == "__main__":
76
+ pass # Main logic has already been executed at the module level