agentscope-runtime 0.2.0b1__py3-none-any.whl → 1.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- agentscope_runtime/adapters/__init__.py +0 -0
- agentscope_runtime/adapters/agentscope/__init__.py +0 -0
- agentscope_runtime/adapters/agentscope/long_term_memory/__init__.py +6 -0
- agentscope_runtime/adapters/agentscope/long_term_memory/_long_term_memory_adapter.py +258 -0
- agentscope_runtime/adapters/agentscope/memory/__init__.py +6 -0
- agentscope_runtime/adapters/agentscope/memory/_memory_adapter.py +152 -0
- agentscope_runtime/adapters/agentscope/message.py +535 -0
- agentscope_runtime/adapters/agentscope/stream.py +506 -0
- agentscope_runtime/adapters/agentscope/tool/__init__.py +9 -0
- agentscope_runtime/adapters/agentscope/tool/sandbox_tool.py +69 -0
- agentscope_runtime/adapters/agentscope/tool/tool.py +233 -0
- agentscope_runtime/adapters/autogen/__init__.py +0 -0
- agentscope_runtime/adapters/autogen/tool/__init__.py +7 -0
- agentscope_runtime/adapters/autogen/tool/tool.py +211 -0
- agentscope_runtime/adapters/text/__init__.py +0 -0
- agentscope_runtime/adapters/text/stream.py +29 -0
- agentscope_runtime/common/collections/redis_mapping.py +4 -1
- agentscope_runtime/common/container_clients/fc_client.py +855 -0
- agentscope_runtime/common/container_clients/kubernetes_client.py +6 -13
- agentscope_runtime/common/utils/__init__.py +0 -0
- agentscope_runtime/common/utils/lazy_loader.py +57 -0
- agentscope_runtime/engine/__init__.py +25 -18
- agentscope_runtime/engine/app/agent_app.py +161 -91
- agentscope_runtime/engine/app/base_app.py +4 -118
- agentscope_runtime/engine/constant.py +8 -0
- agentscope_runtime/engine/deployers/__init__.py +8 -0
- agentscope_runtime/engine/deployers/adapter/__init__.py +2 -0
- agentscope_runtime/engine/deployers/adapter/a2a/a2a_adapter_utils.py +0 -21
- agentscope_runtime/engine/deployers/adapter/a2a/a2a_protocol_adapter.py +28 -9
- agentscope_runtime/engine/deployers/adapter/responses/__init__.py +2 -0
- agentscope_runtime/engine/deployers/adapter/responses/response_api_adapter_utils.py +5 -2
- agentscope_runtime/engine/deployers/adapter/responses/response_api_protocol_adapter.py +1 -1
- agentscope_runtime/engine/deployers/agentrun_deployer.py +2541 -0
- agentscope_runtime/engine/deployers/cli_fc_deploy.py +1 -1
- agentscope_runtime/engine/deployers/kubernetes_deployer.py +9 -21
- agentscope_runtime/engine/deployers/local_deployer.py +47 -74
- agentscope_runtime/engine/deployers/modelstudio_deployer.py +216 -50
- agentscope_runtime/engine/deployers/utils/app_runner_utils.py +29 -0
- agentscope_runtime/engine/deployers/utils/detached_app.py +510 -0
- agentscope_runtime/engine/deployers/utils/docker_image_utils/__init__.py +1 -1
- agentscope_runtime/engine/deployers/utils/docker_image_utils/dockerfile_generator.py +1 -1
- agentscope_runtime/engine/deployers/utils/docker_image_utils/{runner_image_factory.py → image_factory.py} +121 -61
- agentscope_runtime/engine/deployers/utils/package.py +693 -0
- agentscope_runtime/engine/deployers/utils/service_utils/__init__.py +0 -5
- agentscope_runtime/engine/deployers/utils/service_utils/fastapi_factory.py +301 -282
- agentscope_runtime/engine/deployers/utils/service_utils/fastapi_templates.py +2 -4
- agentscope_runtime/engine/deployers/utils/service_utils/process_manager.py +23 -1
- agentscope_runtime/engine/deployers/utils/templates/app_main.py.j2 +84 -0
- agentscope_runtime/engine/deployers/utils/templates/runner_main.py.j2 +95 -0
- agentscope_runtime/engine/deployers/utils/{service_utils → templates}/standalone_main.py.j2 +0 -45
- agentscope_runtime/engine/deployers/utils/wheel_packager.py +119 -18
- agentscope_runtime/engine/helpers/runner.py +40 -0
- agentscope_runtime/engine/runner.py +171 -130
- agentscope_runtime/engine/schemas/agent_schemas.py +114 -3
- agentscope_runtime/engine/schemas/modelstudio_llm.py +4 -2
- agentscope_runtime/engine/schemas/oai_llm.py +23 -23
- agentscope_runtime/engine/schemas/response_api.py +65 -0
- agentscope_runtime/engine/schemas/session.py +24 -0
- agentscope_runtime/engine/services/__init__.py +0 -9
- agentscope_runtime/engine/services/agent_state/__init__.py +16 -0
- agentscope_runtime/engine/services/agent_state/redis_state_service.py +113 -0
- agentscope_runtime/engine/services/agent_state/state_service.py +179 -0
- agentscope_runtime/engine/services/memory/__init__.py +24 -0
- agentscope_runtime/engine/services/{mem0_memory_service.py → memory/mem0_memory_service.py} +17 -13
- agentscope_runtime/engine/services/{memory_service.py → memory/memory_service.py} +28 -7
- agentscope_runtime/engine/services/{redis_memory_service.py → memory/redis_memory_service.py} +1 -1
- agentscope_runtime/engine/services/{reme_personal_memory_service.py → memory/reme_personal_memory_service.py} +9 -6
- agentscope_runtime/engine/services/{reme_task_memory_service.py → memory/reme_task_memory_service.py} +2 -2
- agentscope_runtime/engine/services/{tablestore_memory_service.py → memory/tablestore_memory_service.py} +16 -19
- agentscope_runtime/engine/services/sandbox/__init__.py +13 -0
- agentscope_runtime/engine/services/{sandbox_service.py → sandbox/sandbox_service.py} +86 -71
- agentscope_runtime/engine/services/session_history/__init__.py +23 -0
- agentscope_runtime/engine/services/{redis_session_history_service.py → session_history/redis_session_history_service.py} +3 -2
- agentscope_runtime/engine/services/{session_history_service.py → session_history/session_history_service.py} +44 -34
- agentscope_runtime/engine/services/{tablestore_session_history_service.py → session_history/tablestore_session_history_service.py} +14 -19
- agentscope_runtime/engine/services/utils/tablestore_service_utils.py +2 -2
- agentscope_runtime/engine/tracing/base.py +10 -9
- agentscope_runtime/engine/tracing/message_util.py +1 -1
- agentscope_runtime/engine/tracing/tracing_util.py +7 -2
- agentscope_runtime/engine/tracing/wrapper.py +49 -31
- agentscope_runtime/sandbox/__init__.py +10 -2
- agentscope_runtime/sandbox/box/agentbay/__init__.py +4 -0
- agentscope_runtime/sandbox/box/agentbay/agentbay_sandbox.py +559 -0
- agentscope_runtime/sandbox/box/base/base_sandbox.py +12 -0
- agentscope_runtime/sandbox/box/browser/browser_sandbox.py +115 -11
- agentscope_runtime/sandbox/box/cloud/__init__.py +4 -0
- agentscope_runtime/sandbox/box/cloud/cloud_sandbox.py +254 -0
- agentscope_runtime/sandbox/box/filesystem/filesystem_sandbox.py +66 -0
- agentscope_runtime/sandbox/box/gui/gui_sandbox.py +42 -0
- agentscope_runtime/sandbox/box/mobile/__init__.py +4 -0
- agentscope_runtime/sandbox/box/mobile/box/__init__.py +0 -0
- agentscope_runtime/sandbox/box/mobile/mobile_sandbox.py +216 -0
- agentscope_runtime/sandbox/box/training_box/training_box.py +2 -44
- agentscope_runtime/sandbox/client/http_client.py +1 -0
- agentscope_runtime/sandbox/enums.py +2 -1
- agentscope_runtime/sandbox/manager/sandbox_manager.py +15 -2
- agentscope_runtime/sandbox/manager/server/app.py +12 -0
- agentscope_runtime/sandbox/manager/server/config.py +19 -0
- agentscope_runtime/sandbox/model/manager_config.py +79 -2
- agentscope_runtime/sandbox/utils.py +0 -18
- agentscope_runtime/tools/RAGs/__init__.py +0 -0
- agentscope_runtime/tools/RAGs/modelstudio_rag.py +377 -0
- agentscope_runtime/tools/RAGs/modelstudio_rag_lite.py +219 -0
- agentscope_runtime/tools/__init__.py +119 -0
- agentscope_runtime/tools/_constants.py +18 -0
- agentscope_runtime/tools/alipay/__init__.py +4 -0
- agentscope_runtime/tools/alipay/base.py +334 -0
- agentscope_runtime/tools/alipay/payment.py +835 -0
- agentscope_runtime/tools/alipay/subscribe.py +551 -0
- agentscope_runtime/tools/base.py +264 -0
- agentscope_runtime/tools/cli/__init__.py +0 -0
- agentscope_runtime/tools/cli/modelstudio_mcp_server.py +78 -0
- agentscope_runtime/tools/generations/__init__.py +75 -0
- agentscope_runtime/tools/generations/async_image_to_video.py +350 -0
- agentscope_runtime/tools/generations/async_image_to_video_wan25.py +366 -0
- agentscope_runtime/tools/generations/async_speech_to_video.py +422 -0
- agentscope_runtime/tools/generations/async_text_to_video.py +320 -0
- agentscope_runtime/tools/generations/async_text_to_video_wan25.py +334 -0
- agentscope_runtime/tools/generations/image_edit.py +208 -0
- agentscope_runtime/tools/generations/image_edit_wan25.py +193 -0
- agentscope_runtime/tools/generations/image_generation.py +202 -0
- agentscope_runtime/tools/generations/image_generation_wan25.py +201 -0
- agentscope_runtime/tools/generations/image_style_repaint.py +208 -0
- agentscope_runtime/tools/generations/image_to_video.py +233 -0
- agentscope_runtime/tools/generations/qwen_image_edit.py +205 -0
- agentscope_runtime/tools/generations/qwen_image_generation.py +214 -0
- agentscope_runtime/tools/generations/qwen_text_to_speech.py +154 -0
- agentscope_runtime/tools/generations/speech_to_text.py +260 -0
- agentscope_runtime/tools/generations/speech_to_video.py +314 -0
- agentscope_runtime/tools/generations/text_to_video.py +221 -0
- agentscope_runtime/tools/mcp_wrapper.py +215 -0
- agentscope_runtime/tools/realtime_clients/__init__.py +13 -0
- agentscope_runtime/tools/realtime_clients/asr_client.py +27 -0
- agentscope_runtime/tools/realtime_clients/azure_asr_client.py +195 -0
- agentscope_runtime/tools/realtime_clients/azure_tts_client.py +383 -0
- agentscope_runtime/tools/realtime_clients/modelstudio_asr_client.py +151 -0
- agentscope_runtime/tools/realtime_clients/modelstudio_tts_client.py +199 -0
- agentscope_runtime/tools/realtime_clients/realtime_tool.py +55 -0
- agentscope_runtime/tools/realtime_clients/tts_client.py +33 -0
- agentscope_runtime/tools/searches/__init__.py +3 -0
- agentscope_runtime/tools/searches/modelstudio_search.py +877 -0
- agentscope_runtime/tools/searches/modelstudio_search_lite.py +310 -0
- agentscope_runtime/tools/utils/__init__.py +0 -0
- agentscope_runtime/tools/utils/api_key_util.py +45 -0
- agentscope_runtime/tools/utils/crypto_utils.py +99 -0
- agentscope_runtime/tools/utils/mcp_util.py +35 -0
- agentscope_runtime/version.py +1 -1
- {agentscope_runtime-0.2.0b1.dist-info → agentscope_runtime-1.0.0.dist-info}/METADATA +244 -168
- agentscope_runtime-1.0.0.dist-info/RECORD +240 -0
- {agentscope_runtime-0.2.0b1.dist-info → agentscope_runtime-1.0.0.dist-info}/entry_points.txt +1 -0
- agentscope_runtime/engine/agents/__init__.py +0 -2
- agentscope_runtime/engine/agents/agentscope_agent.py +0 -488
- agentscope_runtime/engine/agents/agno_agent.py +0 -222
- agentscope_runtime/engine/agents/autogen_agent.py +0 -250
- agentscope_runtime/engine/agents/base_agent.py +0 -29
- agentscope_runtime/engine/agents/langgraph_agent.py +0 -59
- agentscope_runtime/engine/agents/utils.py +0 -53
- agentscope_runtime/engine/deployers/utils/package_project_utils.py +0 -1163
- agentscope_runtime/engine/deployers/utils/service_utils/service_config.py +0 -75
- agentscope_runtime/engine/deployers/utils/service_utils/service_factory.py +0 -220
- agentscope_runtime/engine/helpers/helper.py +0 -179
- agentscope_runtime/engine/schemas/context.py +0 -54
- agentscope_runtime/engine/services/context_manager.py +0 -164
- agentscope_runtime/engine/services/environment_manager.py +0 -50
- agentscope_runtime/engine/services/manager.py +0 -174
- agentscope_runtime/engine/services/rag_service.py +0 -195
- agentscope_runtime/engine/services/tablestore_rag_service.py +0 -143
- agentscope_runtime/sandbox/tools/__init__.py +0 -12
- agentscope_runtime/sandbox/tools/base/__init__.py +0 -8
- agentscope_runtime/sandbox/tools/base/tool.py +0 -52
- agentscope_runtime/sandbox/tools/browser/__init__.py +0 -57
- agentscope_runtime/sandbox/tools/browser/tool.py +0 -597
- agentscope_runtime/sandbox/tools/filesystem/__init__.py +0 -32
- agentscope_runtime/sandbox/tools/filesystem/tool.py +0 -319
- agentscope_runtime/sandbox/tools/function_tool.py +0 -321
- agentscope_runtime/sandbox/tools/gui/__init__.py +0 -7
- agentscope_runtime/sandbox/tools/gui/tool.py +0 -77
- agentscope_runtime/sandbox/tools/mcp_tool.py +0 -195
- agentscope_runtime/sandbox/tools/sandbox_tool.py +0 -104
- agentscope_runtime/sandbox/tools/tool.py +0 -238
- agentscope_runtime/sandbox/tools/utils.py +0 -68
- agentscope_runtime-0.2.0b1.dist-info/RECORD +0 -183
- {agentscope_runtime-0.2.0b1.dist-info → agentscope_runtime-1.0.0.dist-info}/WHEEL +0 -0
- {agentscope_runtime-0.2.0b1.dist-info → agentscope_runtime-1.0.0.dist-info}/licenses/LICENSE +0 -0
- {agentscope_runtime-0.2.0b1.dist-info → agentscope_runtime-1.0.0.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentscope-runtime
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 1.0.0
|
|
4
4
|
Summary: A production-ready runtime framework for agent applications, providing secure sandboxed execution environments and scalable deployment solutions with multi-framework support.
|
|
5
5
|
Requires-Python: >=3.10
|
|
6
6
|
Description-Content-Type: text/markdown
|
|
@@ -21,6 +21,11 @@ Requires-Dist: kubernetes>=33.1.0
|
|
|
21
21
|
Requires-Dist: shortuuid>=1.0.13
|
|
22
22
|
Requires-Dist: celery[redis]>=5.3.1
|
|
23
23
|
Requires-Dist: a2a-sdk>=0.3.0
|
|
24
|
+
Requires-Dist: jinja2
|
|
25
|
+
Requires-Dist: psutil
|
|
26
|
+
Requires-Dist: dashscope>=1.25.0
|
|
27
|
+
Requires-Dist: jsonref
|
|
28
|
+
Requires-Dist: asgiref
|
|
24
29
|
Provides-Extra: dev
|
|
25
30
|
Requires-Dist: pytest>=8.3.5; extra == "dev"
|
|
26
31
|
Requires-Dist: pytest-asyncio>=0.23.0; extra == "dev"
|
|
@@ -30,55 +35,37 @@ Requires-Dist: furo>=2025.7.19; extra == "dev"
|
|
|
30
35
|
Requires-Dist: pytest-cov>=6.2.1; extra == "dev"
|
|
31
36
|
Requires-Dist: fakeredis>=2.31.0; extra == "dev"
|
|
32
37
|
Requires-Dist: sphinx-autoapi>=3.6.0; extra == "dev"
|
|
33
|
-
|
|
34
|
-
Requires-Dist:
|
|
35
|
-
|
|
36
|
-
Requires-Dist:
|
|
37
|
-
Provides-Extra:
|
|
38
|
-
Requires-Dist:
|
|
39
|
-
Requires-Dist:
|
|
40
|
-
|
|
41
|
-
Requires-Dist:
|
|
42
|
-
Requires-Dist:
|
|
43
|
-
|
|
44
|
-
Requires-Dist: langchain>=0.3.
|
|
45
|
-
Requires-Dist:
|
|
46
|
-
Requires-Dist:
|
|
47
|
-
Requires-Dist:
|
|
48
|
-
Requires-Dist:
|
|
49
|
-
|
|
50
|
-
Requires-Dist:
|
|
51
|
-
Requires-Dist:
|
|
52
|
-
Requires-Dist:
|
|
53
|
-
Requires-Dist:
|
|
54
|
-
Requires-Dist:
|
|
55
|
-
Requires-Dist:
|
|
56
|
-
Requires-Dist:
|
|
57
|
-
|
|
58
|
-
Requires-Dist:
|
|
59
|
-
Requires-Dist: dashscope>=1.24.4; extra == "aliyun-tablestore-ext"
|
|
60
|
-
Requires-Dist: langchain-community>=0.3.27; extra == "aliyun-tablestore-ext"
|
|
61
|
-
Provides-Extra: memory-ext
|
|
62
|
-
Requires-Dist: reme-ai==0.1.9; python_full_version >= "3.12" and extra == "memory-ext"
|
|
63
|
-
Requires-Dist: mem0ai>=0.1.117; extra == "memory-ext"
|
|
64
|
-
Provides-Extra: deployment
|
|
65
|
-
Requires-Dist: alibabacloud-oss-v2; extra == "deployment"
|
|
66
|
-
Requires-Dist: alibabacloud-bailian20231229>=2.5.0; extra == "deployment"
|
|
67
|
-
Requires-Dist: build; extra == "deployment"
|
|
68
|
-
Requires-Dist: setuptools>=40.8.0; extra == "deployment"
|
|
69
|
-
Requires-Dist: wheel; extra == "deployment"
|
|
70
|
-
Requires-Dist: steel-sdk>=0.1.0; extra == "deployment"
|
|
71
|
-
Requires-Dist: alibabacloud-credentials; extra == "deployment"
|
|
72
|
-
Requires-Dist: jinja2; extra == "deployment"
|
|
73
|
-
Requires-Dist: psutil; extra == "deployment"
|
|
74
|
-
Requires-Dist: shortuuid>=1.0.13; extra == "deployment"
|
|
75
|
-
Requires-Dist: PyYAML; extra == "deployment"
|
|
76
|
-
Requires-Dist: oss2>=2.19.1; extra == "deployment"
|
|
38
|
+
Requires-Dist: pytest-mock>=3.15.1; extra == "dev"
|
|
39
|
+
Requires-Dist: sphinxcontrib-mermaid>=1.2.3; extra == "dev"
|
|
40
|
+
Requires-Dist: langgraph>=0.4.0; extra == "dev"
|
|
41
|
+
Requires-Dist: autogen-agentchat>=0.7.0; extra == "dev"
|
|
42
|
+
Provides-Extra: ext
|
|
43
|
+
Requires-Dist: reme-ai>=0.2.0.2; extra == "ext"
|
|
44
|
+
Requires-Dist: mem0ai>=0.1.117; extra == "ext"
|
|
45
|
+
Requires-Dist: alibabacloud-agentrun20250910>=2.0.1; extra == "ext"
|
|
46
|
+
Requires-Dist: alibabacloud_tea_openapi>=0.4.0; extra == "ext"
|
|
47
|
+
Requires-Dist: alibabacloud-fc20230330>=4.4.0; extra == "ext"
|
|
48
|
+
Requires-Dist: tablestore-for-agent-memory>=1.1.0; extra == "ext"
|
|
49
|
+
Requires-Dist: langchain-community>=0.3.27; extra == "ext"
|
|
50
|
+
Requires-Dist: wuying-agentbay-sdk>=0.5.0; extra == "ext"
|
|
51
|
+
Requires-Dist: alipay-sdk-python; extra == "ext"
|
|
52
|
+
Requires-Dist: cryptography; extra == "ext"
|
|
53
|
+
Requires-Dist: gunicorn>=20.0.0; extra == "ext"
|
|
54
|
+
Requires-Dist: starlette>=0.37.0; extra == "ext"
|
|
55
|
+
Requires-Dist: asgiref>=3.11.0; extra == "ext"
|
|
56
|
+
Requires-Dist: azure-cognitiveservices-speech>=1.47.0; extra == "ext"
|
|
57
|
+
Requires-Dist: alibabacloud-oss-v2; extra == "ext"
|
|
58
|
+
Requires-Dist: alibabacloud-bailian20231229>=2.6.0; extra == "ext"
|
|
59
|
+
Requires-Dist: build; extra == "ext"
|
|
60
|
+
Requires-Dist: setuptools>=40.8.0; extra == "ext"
|
|
61
|
+
Requires-Dist: wheel; extra == "ext"
|
|
62
|
+
Requires-Dist: alibabacloud-credentials; extra == "ext"
|
|
63
|
+
Requires-Dist: PyYAML; extra == "ext"
|
|
77
64
|
Dynamic: license-file
|
|
78
65
|
|
|
79
66
|
<div align="center">
|
|
80
67
|
|
|
81
|
-
# AgentScope Runtime
|
|
68
|
+
# AgentScope Runtime v1.0
|
|
82
69
|
|
|
83
70
|
[](https://github.com/agentscope-ai/agentscope-runtime)
|
|
84
71
|
[](https://pypi.org/project/agentscope-runtime/)
|
|
@@ -102,7 +89,9 @@ Dynamic: license-file
|
|
|
102
89
|
|
|
103
90
|
**A Production-Ready Runtime Framework for Intelligent Agent Applications**
|
|
104
91
|
|
|
105
|
-
|
|
92
|
+
***AgentScope Runtime** is a full-stack agent runtime that tackles two core challenges: **efficient agent deployment** and **secure sandbox execution**. It ships with foundational services such as short- and long-term memory plus agent state persistence, along with hardened sandbox infrastructure. Whether you need to orchestrate production-grade agents or guarantee safe tool interactions, AgentScope Runtime provides developer-friendly workflows with complete observability.*
|
|
93
|
+
|
|
94
|
+
*In V1.0, these services are exposed via an **adapter pattern**, enabling seamless integration with the native modules of different agent frameworks while preserving their native interfaces and behaviors, ensuring both compatibility and flexibility.*
|
|
106
95
|
|
|
107
96
|
</div>
|
|
108
97
|
|
|
@@ -110,21 +99,22 @@ Dynamic: license-file
|
|
|
110
99
|
|
|
111
100
|
## 🆕 NEWS
|
|
112
101
|
|
|
113
|
-
* **[2025-
|
|
114
|
-
* **[2025-10]** **GUI Sandbox** is added with support for virtual desktop environments, mouse, keyboard, and screen operations. Introduced the **`desktop_url`** property for GUI Sandbox, Browser Sandbox, and Filesystem Sandbox — allowing direct access to the virtual desktop via your browser. Check our [cookbook](https://runtime.agentscope.io/en/sandbox.html#sandbox-usage) for more details.
|
|
102
|
+
* **[2025-12]** We have released **AgentScope Runtime v1.0**, introducing a unified “Agent as API” white-box development experience, with enhanced multi-agent collaboration, state persistence, and cross-framework integration. This release also streamlines abstractions and modules to ensure consistency between development and production environments. Please refer to the **[CHANGELOG](https://runtime.agentscope.io/en/CHANGELOG.html)** for full update details and migration guide.
|
|
115
103
|
|
|
116
104
|
---
|
|
117
105
|
|
|
118
106
|
## ✨ Key Features
|
|
119
107
|
|
|
120
|
-
- **🏗️ Deployment Infrastructure**: Built-in services for
|
|
121
|
-
-
|
|
122
|
-
|
|
123
|
-
-
|
|
124
|
-
|
|
125
|
-
-
|
|
108
|
+
- **🏗️ Deployment Infrastructure**: Built-in services for agent state management, conversation history, long-term memory, and sandbox lifecycle control
|
|
109
|
+
- **🔧 Framework-Agnostic**: Not tied to any specific agent framework; seamlessly integrates with popular open-source and custom implementations
|
|
110
|
+
- ⚡ **Developer-Friendly**: Offers `AgentApp` for easy deployment with powerful customization options
|
|
111
|
+
- **📊 Observability**: Comprehensive tracking and monitoring of runtime operations
|
|
112
|
+
- **🔒 Sandboxed Tool Execution**: Isolated sandbox ensures safe tool execution without affecting the system
|
|
113
|
+
- **🛠️ Out-of-the-Box Tools & One-Click Adaptation**: Rich set of ready-to-use tools, with adapters enabling quick integration into different frameworks
|
|
126
114
|
|
|
127
|
-
|
|
115
|
+
> [!NOTE]
|
|
116
|
+
>
|
|
117
|
+
> **About Framework-Agnostic**: Currently, AgentScope Runtime supports the **AgentScope** framework. We plan to extend compatibility to more agent development frameworks in the future.
|
|
128
118
|
|
|
129
119
|
---
|
|
130
120
|
|
|
@@ -142,7 +132,6 @@ Welcome to join our community on
|
|
|
142
132
|
|
|
143
133
|
- [🚀 Quick Start](#-quick-start)
|
|
144
134
|
- [📚 Cookbook](#-cookbook)
|
|
145
|
-
- [🔌 Agent Framework Integration](#-agent-framework-integration)
|
|
146
135
|
- [🏗️ Deployment](#️-deployment)
|
|
147
136
|
- [🤝 Contributing](#-contributing)
|
|
148
137
|
- [📄 License](#-license)
|
|
@@ -162,6 +151,12 @@ From PyPI:
|
|
|
162
151
|
```bash
|
|
163
152
|
# Install core dependencies
|
|
164
153
|
pip install agentscope-runtime
|
|
154
|
+
|
|
155
|
+
# Install extension
|
|
156
|
+
pip install "agentscope-runtime[ext]"
|
|
157
|
+
|
|
158
|
+
# Install preview version
|
|
159
|
+
pip install --pre agentscope-runtime
|
|
165
160
|
```
|
|
166
161
|
|
|
167
162
|
(Optional) From source:
|
|
@@ -175,35 +170,112 @@ cd agentscope-runtime
|
|
|
175
170
|
pip install -e .
|
|
176
171
|
```
|
|
177
172
|
|
|
178
|
-
###
|
|
173
|
+
### Agent App Example
|
|
179
174
|
|
|
180
|
-
This example demonstrates how to create an agent API server using agentscope `ReActAgent` and `AgentApp`.
|
|
175
|
+
This example demonstrates how to create an agent API server using agentscope `ReActAgent` and `AgentApp`. To run a minimal `AgentScope` Agent with AgentScope Runtime, you generally need to implement:
|
|
176
|
+
|
|
177
|
+
1. **`@agent_app.init`** – Initialize services/resources at startup
|
|
178
|
+
2. **`@agent_app.query(framework="agentscope")`** – Core logic for handling requests, **must use** `stream_printing_messages` to `yield msg, last` for streaming output
|
|
179
|
+
3. **`@agent_app.shutdown`** – Clean up services/resources on exit
|
|
181
180
|
|
|
182
181
|
|
|
183
182
|
```python
|
|
184
183
|
import os
|
|
185
184
|
|
|
185
|
+
from agentscope.agent import ReActAgent
|
|
186
|
+
from agentscope.model import DashScopeChatModel
|
|
187
|
+
from agentscope.formatter import DashScopeChatFormatter
|
|
188
|
+
from agentscope.tool import Toolkit, execute_python_code
|
|
189
|
+
from agentscope.pipeline import stream_printing_messages
|
|
190
|
+
|
|
186
191
|
from agentscope_runtime.engine import AgentApp
|
|
187
|
-
from agentscope_runtime.engine.
|
|
192
|
+
from agentscope_runtime.engine.schemas.agent_schemas import AgentRequest
|
|
193
|
+
from agentscope_runtime.adapters.agentscope.memory import (
|
|
194
|
+
AgentScopeSessionHistoryMemory,
|
|
195
|
+
)
|
|
196
|
+
from agentscope_runtime.engine.services.agent_state import (
|
|
197
|
+
InMemoryStateService,
|
|
198
|
+
)
|
|
199
|
+
from agentscope_runtime.engine.services.session_history import (
|
|
200
|
+
InMemorySessionHistoryService,
|
|
201
|
+
)
|
|
188
202
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
agent = AgentScopeAgent(
|
|
194
|
-
name="Friday",
|
|
195
|
-
model=OpenAIChatModel(
|
|
196
|
-
"gpt-4",
|
|
197
|
-
api_key=os.getenv("OPENAI_API_KEY"),
|
|
198
|
-
),
|
|
199
|
-
agent_config={
|
|
200
|
-
"sys_prompt": "You're a helpful assistant named Friday.",
|
|
201
|
-
},
|
|
202
|
-
agent_builder=ReActAgent, # Or use your own agent builder
|
|
203
|
+
agent_app = AgentApp(
|
|
204
|
+
app_name="Friday",
|
|
205
|
+
app_description="A helpful assistant",
|
|
203
206
|
)
|
|
204
|
-
app = AgentApp(agent=agent, endpoint_path="/process")
|
|
205
207
|
|
|
206
|
-
|
|
208
|
+
|
|
209
|
+
@agent_app.init
|
|
210
|
+
async def init_func(self):
|
|
211
|
+
self.state_service = InMemoryStateService()
|
|
212
|
+
self.session_service = InMemorySessionHistoryService()
|
|
213
|
+
|
|
214
|
+
await self.state_service.start()
|
|
215
|
+
await self.session_service.start()
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
@agent_app.shutdown
|
|
219
|
+
async def shutdown_func(self):
|
|
220
|
+
await self.state_service.stop()
|
|
221
|
+
await self.session_service.stop()
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
@agent_app.query(framework="agentscope")
|
|
225
|
+
async def query_func(
|
|
226
|
+
self,
|
|
227
|
+
msgs,
|
|
228
|
+
request: AgentRequest = None,
|
|
229
|
+
**kwargs,
|
|
230
|
+
):
|
|
231
|
+
session_id = request.session_id
|
|
232
|
+
user_id = request.user_id
|
|
233
|
+
|
|
234
|
+
state = await self.state_service.export_state(
|
|
235
|
+
session_id=session_id,
|
|
236
|
+
user_id=user_id,
|
|
237
|
+
)
|
|
238
|
+
|
|
239
|
+
toolkit = Toolkit()
|
|
240
|
+
toolkit.register_tool_function(execute_python_code)
|
|
241
|
+
|
|
242
|
+
agent = ReActAgent(
|
|
243
|
+
name="Friday",
|
|
244
|
+
model=DashScopeChatModel(
|
|
245
|
+
"qwen-turbo",
|
|
246
|
+
api_key=os.getenv("DASHSCOPE_API_KEY"),
|
|
247
|
+
stream=True,
|
|
248
|
+
),
|
|
249
|
+
sys_prompt="You're a helpful assistant named Friday.",
|
|
250
|
+
toolkit=toolkit,
|
|
251
|
+
memory=AgentScopeSessionHistoryMemory(
|
|
252
|
+
service=self.session_service,
|
|
253
|
+
session_id=session_id,
|
|
254
|
+
user_id=user_id,
|
|
255
|
+
),
|
|
256
|
+
formatter=DashScopeChatFormatter(),
|
|
257
|
+
)
|
|
258
|
+
agent.set_console_output_enabled(enabled=False)
|
|
259
|
+
|
|
260
|
+
if state:
|
|
261
|
+
agent.load_state_dict(state)
|
|
262
|
+
|
|
263
|
+
async for msg, last in stream_printing_messages(
|
|
264
|
+
agents=[agent],
|
|
265
|
+
coroutine_task=agent(msgs),
|
|
266
|
+
):
|
|
267
|
+
yield msg, last
|
|
268
|
+
|
|
269
|
+
state = agent.state_dict()
|
|
270
|
+
|
|
271
|
+
await self.state_service.save_state(
|
|
272
|
+
user_id=user_id,
|
|
273
|
+
session_id=session_id,
|
|
274
|
+
state=state,
|
|
275
|
+
)
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
agent_app.run(host="127.0.0.1", port=8090)
|
|
207
279
|
```
|
|
208
280
|
|
|
209
281
|
The server will start and listen on: `http://localhost:8090/process`. You can send JSON input to the API using `curl`:
|
|
@@ -229,12 +301,14 @@ You’ll see output streamed in **Server-Sent Events (SSE)** format:
|
|
|
229
301
|
```bash
|
|
230
302
|
data: {"sequence_number":0,"object":"response","status":"created", ... }
|
|
231
303
|
data: {"sequence_number":1,"object":"response","status":"in_progress", ... }
|
|
232
|
-
data: {"sequence_number":2,"object":"
|
|
233
|
-
data: {"sequence_number":3,"object":"content","status":"in_progress","text":"
|
|
234
|
-
data: {"sequence_number":4,"object":"
|
|
304
|
+
data: {"sequence_number":2,"object":"message","status":"in_progress", ... }
|
|
305
|
+
data: {"sequence_number":3,"object":"content","status":"in_progress","text":"The" }
|
|
306
|
+
data: {"sequence_number":4,"object":"content","status":"in_progress","text":" capital of France is Paris." }
|
|
307
|
+
data: {"sequence_number":5,"object":"message","status":"completed","text":"The capital of France is Paris." }
|
|
308
|
+
data: {"sequence_number":6,"object":"response","status":"completed", ... }
|
|
235
309
|
```
|
|
236
310
|
|
|
237
|
-
###
|
|
311
|
+
### Sandbox Example
|
|
238
312
|
|
|
239
313
|
These examples demonstrate how to create sandboxed environments and execute tools within them, with some examples featuring interactive frontend interfaces accessible via VNC (Virtual Network Computing):
|
|
240
314
|
|
|
@@ -311,6 +385,57 @@ with FilesystemSandbox() as box:
|
|
|
311
385
|
input("Press Enter to continue...")
|
|
312
386
|
```
|
|
313
387
|
|
|
388
|
+
#### Mobile Sandbox
|
|
389
|
+
|
|
390
|
+
Provides a **sandboxed Android emulator environment** that allows executing various mobile operations, such as tapping, swiping, inputting text, and taking screenshots.
|
|
391
|
+
|
|
392
|
+
##### Prerequisites
|
|
393
|
+
|
|
394
|
+
- **Linux Host**:
|
|
395
|
+
When running on a Linux host, this sandbox requires the `binder` and `ashmem` kernel modules to be loaded. If they are missing, execute the following commands on your host to install and load the required modules:
|
|
396
|
+
|
|
397
|
+
```bash
|
|
398
|
+
# 1. Install extra kernel modules
|
|
399
|
+
sudo apt update && sudo apt install -y linux-modules-extra-`uname -r`
|
|
400
|
+
|
|
401
|
+
# 2. Load modules and create device nodes
|
|
402
|
+
sudo modprobe binder_linux devices="binder,hwbinder,vndbinder"
|
|
403
|
+
sudo modprobe ashmem_linux
|
|
404
|
+
- **Architecture Compatibility**:
|
|
405
|
+
When running on an ARM64/aarch64 architecture (e.g., Apple M-series chips), you may encounter compatibility or performance issues. It is recommended to run on an x86_64 host.
|
|
406
|
+
```python
|
|
407
|
+
from agentscope_runtime.sandbox import MobileSandbox
|
|
408
|
+
|
|
409
|
+
with MobileSandbox() as box:
|
|
410
|
+
# By default, pulls 'agentscope/runtime-sandbox-mobile:latest' from DockerHub
|
|
411
|
+
print(box.list_tools()) # List all available tools
|
|
412
|
+
print(box.mobile_get_screen_resolution()) # Get the screen resolution
|
|
413
|
+
print(box.mobile_tap(x=500, y=1000)) # Tap at coordinate (500, 1000)
|
|
414
|
+
print(box.mobile_input_text("Hello from AgentScope!")) # Input text
|
|
415
|
+
print(box.mobile_key_event(3)) # Sends a HOME key event (KeyCode: 3)
|
|
416
|
+
screenshot_result = box.mobile_get_screenshot() # Get the current screenshot
|
|
417
|
+
input("Press Enter to continue...")
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
> [!NOTE]
|
|
421
|
+
>
|
|
422
|
+
> To add tools to the AgentScope `Toolkit`:
|
|
423
|
+
>
|
|
424
|
+
> 1. Wrap sandbox tool with `sandbox_tool_adapter`, so the AgentScope agent can call them:
|
|
425
|
+
>
|
|
426
|
+
> ```python
|
|
427
|
+
> from agentscope_runtime.adapters.agentscope.tool import sandbox_tool_adapter
|
|
428
|
+
>
|
|
429
|
+
> wrapped_tool = sandbox_tool_adapter(sandbox.browser_navigate)
|
|
430
|
+
> ```
|
|
431
|
+
>
|
|
432
|
+
> 2. Register the tool with `register_tool_function`:
|
|
433
|
+
>
|
|
434
|
+
> ```python
|
|
435
|
+
> toolkit = Toolkit()
|
|
436
|
+
> Toolkit.register_tool_function(wrapped_tool)
|
|
437
|
+
> ```
|
|
438
|
+
|
|
314
439
|
#### Configuring Sandbox Image Registry, Namespace, and Tag
|
|
315
440
|
|
|
316
441
|
##### 1. Registry
|
|
@@ -371,110 +496,47 @@ agentscope-registry.ap-southeast-1.cr.aliyuncs.com/agentscope/runtime-sandbox-ba
|
|
|
371
496
|
|
|
372
497
|
---
|
|
373
498
|
|
|
374
|
-
##
|
|
499
|
+
## 🏗️ Deployment
|
|
375
500
|
|
|
376
|
-
|
|
501
|
+
The `AgentApp` exposes a `deploy` method that takes a `DeployManager` instance and deploys the agent.
|
|
377
502
|
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
from agno.agent import Agent
|
|
381
|
-
from agno.models.openai import OpenAIChat
|
|
382
|
-
from agentscope_runtime.engine.agents.agno_agent import AgnoAgent
|
|
383
|
-
|
|
384
|
-
agent = AgnoAgent(
|
|
385
|
-
name="Friday",
|
|
386
|
-
model=OpenAIChat(
|
|
387
|
-
id="gpt-4",
|
|
388
|
-
),
|
|
389
|
-
agent_config={
|
|
390
|
-
"instructions": "You're a helpful assistant.",
|
|
391
|
-
},
|
|
392
|
-
agent_builder=Agent,
|
|
393
|
-
)
|
|
394
|
-
```
|
|
503
|
+
* The service port is set as the parameter `port` when creating the `LocalDeployManager`.
|
|
504
|
+
* The service endpoint path is set as the parameter `endpoint_path` to `/process` when deploying the agent.
|
|
395
505
|
|
|
396
|
-
|
|
506
|
+
* The deployer will automatically add common agent protocols, such as **A2A**, **Response API**.
|
|
397
507
|
|
|
398
|
-
|
|
399
|
-
# pip install "agentscope-runtime[autogen]"
|
|
400
|
-
from autogen_agentchat.agents import AssistantAgent
|
|
401
|
-
from autogen_ext.models.openai import OpenAIChatCompletionClient
|
|
402
|
-
from agentscope_runtime.engine.agents.autogen_agent import AutogenAgent
|
|
403
|
-
|
|
404
|
-
agent = AutogenAgent(
|
|
405
|
-
name="Friday",
|
|
406
|
-
model=OpenAIChatCompletionClient(
|
|
407
|
-
model="gpt-4",
|
|
408
|
-
),
|
|
409
|
-
agent_config={
|
|
410
|
-
"system_message": "You're a helpful assistant",
|
|
411
|
-
},
|
|
412
|
-
agent_builder=AssistantAgent,
|
|
413
|
-
)
|
|
414
|
-
```
|
|
415
|
-
|
|
416
|
-
### LangGraph Integration
|
|
508
|
+
After deployment, users can access the service at `http://localhost:8090/process:
|
|
417
509
|
|
|
418
510
|
```python
|
|
419
|
-
|
|
420
|
-
from typing import TypedDict
|
|
421
|
-
from langgraph import graph, types
|
|
422
|
-
from agentscope_runtime.engine.agents.langgraph_agent import LangGraphAgent
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
# define the state
|
|
426
|
-
class State(TypedDict, total=False):
|
|
427
|
-
id: str
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
# define the node functions
|
|
431
|
-
async def set_id(state: State):
|
|
432
|
-
new_id = state.get("id")
|
|
433
|
-
assert new_id is not None, "must set ID"
|
|
434
|
-
return types.Command(update=State(id=new_id), goto="REVERSE_ID")
|
|
435
|
-
|
|
511
|
+
from agentscope_runtime.engine.deployers import LocalDeployManager
|
|
436
512
|
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
513
|
+
# Create deployment manager
|
|
514
|
+
deployer = LocalDeployManager(
|
|
515
|
+
host="0.0.0.0",
|
|
516
|
+
port=8090,
|
|
517
|
+
)
|
|
441
518
|
|
|
519
|
+
# Deploy the app as a streaming service
|
|
520
|
+
deploy_result = await app.deploy(deployer=deployer)
|
|
442
521
|
|
|
443
|
-
state_graph = graph.StateGraph(state_schema=State)
|
|
444
|
-
state_graph.add_node("SET_ID", set_id)
|
|
445
|
-
state_graph.add_node("REVERSE_ID", reverse_id)
|
|
446
|
-
state_graph.set_entry_point("SET_ID")
|
|
447
|
-
compiled_graph = state_graph.compile(name="ID Reversal")
|
|
448
|
-
agent = LangGraphAgent(graph=compiled_graph)
|
|
449
522
|
```
|
|
450
523
|
|
|
451
|
-
|
|
452
|
-
>
|
|
453
|
-
> More agent framework interations are comming soon!
|
|
454
|
-
|
|
455
|
-
---
|
|
456
|
-
|
|
457
|
-
## 🏗️ Deployment
|
|
458
|
-
|
|
459
|
-
The agent runner exposes a `deploy` method that takes a `DeployManager` instance and deploys the agent. The service port is set as the parameter `port` when creating the `LocalDeployManager`. The service endpoint path is set as the parameter `endpoint_path` when deploying the agent. In this example, we set the endpoint path to `/process`. After deployment, you can access the service at `http://localhost:8090/process`.
|
|
524
|
+
After deployment, users can also access this service using the Response API of the OpenAI SDK:
|
|
460
525
|
|
|
461
526
|
```python
|
|
462
|
-
from
|
|
527
|
+
from openai import OpenAI
|
|
463
528
|
|
|
464
|
-
|
|
465
|
-
deploy_manager = LocalDeployManager(
|
|
466
|
-
host="localhost",
|
|
467
|
-
port=8090,
|
|
468
|
-
)
|
|
529
|
+
client = OpenAI(base_url="http://0.0.0.0:8090/compatible-mode/v1")
|
|
469
530
|
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
endpoint_path="/process",
|
|
474
|
-
stream=True, # Enable streaming responses
|
|
531
|
+
response = client.responses.create(
|
|
532
|
+
model="any_name",
|
|
533
|
+
input="What is the weather in Beijing?"
|
|
475
534
|
)
|
|
535
|
+
|
|
536
|
+
print(response)
|
|
476
537
|
```
|
|
477
538
|
|
|
539
|
+
|
|
478
540
|
---
|
|
479
541
|
|
|
480
542
|
## 🤝 Contributing
|
|
@@ -524,10 +586,10 @@ limitations under the License.
|
|
|
524
586
|
|
|
525
587
|
## Contributors ✨
|
|
526
588
|
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
|
527
|
-
[](#contributors-)
|
|
528
590
|
<!-- ALL-CONTRIBUTORS-BADGE:END -->
|
|
529
591
|
|
|
530
|
-
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/
|
|
592
|
+
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/emoji-key/)):
|
|
531
593
|
|
|
532
594
|
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
|
533
595
|
<!-- prettier-ignore-start -->
|
|
@@ -552,6 +614,20 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
|
|
|
552
614
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Sodawyx"><img src="https://avatars.githubusercontent.com/u/34974468?v=4?s=100" width="100px;" alt="Yuxuan Wu"/><br /><sub><b>Yuxuan Wu</b></sub></a><br /><a href="https://github.com/agentscope-ai/agentscope-runtime/commits?author=Sodawyx" title="Code">💻</a> <a href="https://github.com/agentscope-ai/agentscope-runtime/commits?author=Sodawyx" title="Documentation">📖</a></td>
|
|
553
615
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/TianYu92"><img src="https://avatars.githubusercontent.com/u/12960468?v=4?s=100" width="100px;" alt="Fear1es5"/><br /><sub><b>Fear1es5</b></sub></a><br /><a href="https://github.com/agentscope-ai/agentscope-runtime/issues?q=author%3ATianYu92" title="Bug reports">🐛</a></td>
|
|
554
616
|
</tr>
|
|
617
|
+
<tr>
|
|
618
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ms-cs"><img src="https://avatars.githubusercontent.com/u/43086458?v=4?s=100" width="100px;" alt="zhiyong"/><br /><sub><b>zhiyong</b></sub></a><br /><a href="https://github.com/agentscope-ai/agentscope-runtime/commits?author=ms-cs" title="Code">💻</a> <a href="https://github.com/agentscope-ai/agentscope-runtime/issues?q=author%3Ams-cs" title="Bug reports">🐛</a></td>
|
|
619
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jooojo"><img src="https://avatars.githubusercontent.com/u/11719425?v=4?s=100" width="100px;" alt="jooojo"/><br /><sub><b>jooojo</b></sub></a><br /><a href="https://github.com/agentscope-ai/agentscope-runtime/commits?author=jooojo" title="Code">💻</a> <a href="https://github.com/agentscope-ai/agentscope-runtime/issues?q=author%3Ajooojo" title="Bug reports">🐛</a></td>
|
|
620
|
+
<td align="center" valign="top" width="14.28%"><a href="http://ceshihao.github.io"><img src="https://avatars.githubusercontent.com/u/7711875?v=4?s=100" width="100px;" alt="Zheng Dayu"/><br /><sub><b>Zheng Dayu</b></sub></a><br /><a href="https://github.com/agentscope-ai/agentscope-runtime/commits?author=ceshihao" title="Code">💻</a> <a href="https://github.com/agentscope-ai/agentscope-runtime/issues?q=author%3Aceshihao" title="Bug reports">🐛</a></td>
|
|
621
|
+
<td align="center" valign="top" width="14.28%"><a href="http://lokk.cn/about"><img src="https://avatars.githubusercontent.com/u/39740818?v=4?s=100" width="100px;" alt="quanyu"/><br /><sub><b>quanyu</b></sub></a><br /><a href="https://github.com/agentscope-ai/agentscope-runtime/commits?author=taoquanyus" title="Code">💻</a></td>
|
|
622
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Littlegrace111"><img src="https://avatars.githubusercontent.com/u/3880455?v=4?s=100" width="100px;" alt="Grace Wu"/><br /><sub><b>Grace Wu</b></sub></a><br /><a href="https://github.com/agentscope-ai/agentscope-runtime/commits?author=Littlegrace111" title="Code">💻</a> <a href="https://github.com/agentscope-ai/agentscope-runtime/commits?author=Littlegrace111" title="Documentation">📖</a></td>
|
|
623
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pitt-liang"><img src="https://avatars.githubusercontent.com/u/8534560?v=4?s=100" width="100px;" alt="LiangQuan"/><br /><sub><b>LiangQuan</b></sub></a><br /><a href="https://github.com/agentscope-ai/agentscope-runtime/commits?author=pitt-liang" title="Code">💻</a></td>
|
|
624
|
+
<td align="center" valign="top" width="14.28%"><a href="https://lishengcn.cn"><img src="https://avatars.githubusercontent.com/u/12003270?v=4?s=100" width="100px;" alt="ls"/><br /><sub><b>ls</b></sub></a><br /><a href="https://github.com/agentscope-ai/agentscope-runtime/commits?author=lishengzxc" title="Code">💻</a> <a href="#design-lishengzxc" title="Design">🎨</a></td>
|
|
625
|
+
</tr>
|
|
626
|
+
<tr>
|
|
627
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/iSample"><img src="https://avatars.githubusercontent.com/u/12894421?v=4?s=100" width="100px;" alt="iSample"/><br /><sub><b>iSample</b></sub></a><br /><a href="https://github.com/agentscope-ai/agentscope-runtime/commits?author=iSample" title="Code">💻</a> <a href="https://github.com/agentscope-ai/agentscope-runtime/commits?author=iSample" title="Documentation">📖</a></td>
|
|
628
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/XiuShenAl"><img src="https://avatars.githubusercontent.com/u/242360128?v=4?s=100" width="100px;" alt="XiuShenAl"/><br /><sub><b>XiuShenAl</b></sub></a><br /><a href="https://github.com/agentscope-ai/agentscope-runtime/commits?author=XiuShenAl" title="Code">💻</a> <a href="https://github.com/agentscope-ai/agentscope-runtime/commits?author=XiuShenAl" title="Documentation">📖</a></td>
|
|
629
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/k-farruh"><img src="https://avatars.githubusercontent.com/u/33511681?v=4?s=100" width="100px;" alt="Farruh Kushnazarov"/><br /><sub><b>Farruh Kushnazarov</b></sub></a><br /><a href="https://github.com/agentscope-ai/agentscope-runtime/commits?author=k-farruh" title="Documentation">📖</a></td>
|
|
630
|
+
</tr>
|
|
555
631
|
</tbody>
|
|
556
632
|
<tfoot>
|
|
557
633
|
<tr>
|