Agently 3.2.2.2__tar.gz → 3.2.2.4__tar.gz
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.
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Agent/Agent.py +4 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Agent/AgentFactory.py +4 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Workflow/yamlflow/yamlflow.py +1 -1
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/agent_component/Tool.py +7 -5
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/agent_component/YAMLLoader.py +5 -1
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/request/Claude.py +14 -3
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/request/OAIClient.py +2 -54
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/request/utils/__init__.py +2 -1
- Agently-3.2.2.4/Agently/plugins/request/utils/format.py +57 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/storage/FileStorage.py +1 -1
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/tool/Web.py +22 -51
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/requirements.txt +2 -1
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/utils/ToolManager.py +6 -1
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently.egg-info/PKG-INFO +3 -2
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently.egg-info/SOURCES.txt +1 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently.egg-info/requires.txt +2 -1
- {Agently-3.2.2.2 → Agently-3.2.2.4}/PKG-INFO +3 -2
- {Agently-3.2.2.2 → Agently-3.2.2.4}/setup.py +1 -1
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Agent/__init__.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Facility/FacilityManager.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Facility/__init__.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Request/Request.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Request/__init__.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/WebSocket/WebSocket.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/WebSocket/__init__.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Workflow/Chunk.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Workflow/MainExecutor.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Workflow/Schema.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Workflow/Workflow.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Workflow/__init__.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Workflow/executors/StartExecutor.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Workflow/executors/__init__.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Workflow/executors/install.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Workflow/lib/BreakingHub.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Workflow/lib/ChunkExecutorABC.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Workflow/lib/ChunkExecutorManager.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Workflow/lib/Store.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Workflow/lib/__init__.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Workflow/lib/constants.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Workflow/lib/painter.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Workflow/utils/__init__.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Workflow/utils/exec_tree.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Workflow/utils/find.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Workflow/utils/logger.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Workflow/utils/runtime_supports.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Workflow/utils/verify.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Workflow/yamlflow/__init__.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Workflow/yamlflow/preset_chunks/Print.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Workflow/yamlflow/preset_chunks/Start.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Workflow/yamlflow/preset_chunks/UserInput.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/Workflow/yamlflow/preset_chunks/__init__.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/__init__.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/_global.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/global_plugin_manager.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/__init__.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/agent_component/Decorator.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/agent_component/EventListener.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/agent_component/OpenAIAssistant.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/agent_component/ReplyReformer.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/agent_component/Role.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/agent_component/Search.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/agent_component/Segment.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/agent_component/Session.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/agent_component/Status.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/agent_component/UserInfo.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/agent_component/__init__.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/agent_component/config.ini +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/agent_component/utils/ComponentABC.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/agent_component/utils/__init__.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/facility/Embedding.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/facility/RoleManager.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/facility/StatusManager.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/facility/__init__.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/facility/config.ini +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/facility/utils/FacilityABC.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/facility/utils/__init__.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/request/ERNIE.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/request/Google.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/request/Kimi.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/request/MiniMax.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/request/OpenAI.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/request/ZhipuAI.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/request/__init__.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/request/config.ini +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/request/utils/RequestABC.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/request/utils/transform.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/storage/__init__.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/storage/config.ini +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/storage/utils/StorageABC.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/storage/utils/__init__.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/tool/Code.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/tool/__init__.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/tool/config.ini +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/tool/utils/ToolABC.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/plugins/tool/utils/__init__.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/utils/AliasManager.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/utils/DataOps.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/utils/IdGenerator.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/utils/PluginManager.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/utils/RuntimeCtx.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/utils/StorageDelegate.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/utils/__init__.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/utils/check_version.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/utils/load_json.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently/utils/transform.py +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently.egg-info/dependency_links.txt +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/Agently.egg-info/top_level.txt +0 -0
- {Agently-3.2.2.2 → Agently-3.2.2.4}/setup.cfg +0 -0
|
@@ -122,6 +122,10 @@ class Agent(object):
|
|
|
122
122
|
self.settings.set(settings_key, settings_value)
|
|
123
123
|
return self
|
|
124
124
|
|
|
125
|
+
def set_global_variable(self, variable_name: str, variable_value: any):
|
|
126
|
+
self.settings.set(f"global_variables.{ variable_name }", variable_value)
|
|
127
|
+
return self
|
|
128
|
+
|
|
125
129
|
def set_agent_prompt(self, key: str, value: any):
|
|
126
130
|
self.agent_runtime_ctx.set(f"prompt.{ key }", value)
|
|
127
131
|
return self
|
|
@@ -52,6 +52,10 @@ class AgentFactory(object):
|
|
|
52
52
|
self.settings.set(settings_key, settings_value)
|
|
53
53
|
return self
|
|
54
54
|
|
|
55
|
+
def set_global_variable(self, variable_name: str, variable_value: any):
|
|
56
|
+
self.settings.set(f"global_variables.{ variable_name }", variable_value)
|
|
57
|
+
return self
|
|
58
|
+
|
|
55
59
|
def toggle_component(self, component_name: str, is_enabled: bool):
|
|
56
60
|
self.set_settings(f"component_toggles.{ component_name }", is_enabled)
|
|
57
61
|
return self
|
|
@@ -107,7 +107,7 @@ def start_yaml(workflow, yaml_dict, *, draw):
|
|
|
107
107
|
|
|
108
108
|
def start_yaml_from_path(workflow, yaml_path, *, draw):
|
|
109
109
|
try:
|
|
110
|
-
with open(yaml_path, "r") as yaml_file:
|
|
110
|
+
with open(yaml_path, "r", encoding="utf-8") as yaml_file:
|
|
111
111
|
yaml_dict = yaml.safe_load(yaml_file)
|
|
112
112
|
return start_yaml(workflow, yaml_dict, draw=draw)
|
|
113
113
|
except Exception as e:
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import asyncio
|
|
1
2
|
import json
|
|
2
3
|
from datetime import datetime
|
|
3
4
|
from .utils import ComponentABC
|
|
@@ -11,6 +12,7 @@ class Tool(ComponentABC):
|
|
|
11
12
|
self.tool_manager = self.agent.tool_manager
|
|
12
13
|
self.tool_dict = {}
|
|
13
14
|
self.must_call_tool_info = None
|
|
15
|
+
self.get_tool_func = self.tool_manager.get_tool_func
|
|
14
16
|
self.call_tool_func = self.tool_manager.call_tool_func
|
|
15
17
|
self.set_tool_proxy = self.tool_manager.set_tool_proxy
|
|
16
18
|
|
|
@@ -101,10 +103,11 @@ class Tool(ComponentABC):
|
|
|
101
103
|
tool_kwrags.update({ "proxy": proxy })
|
|
102
104
|
call_result = None
|
|
103
105
|
try:
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
**tool_kwrags
|
|
107
|
-
|
|
106
|
+
tool_func = self.get_tool_func(tool_info["tool_name"])
|
|
107
|
+
if asyncio.iscoroutinefunction(tool_func):
|
|
108
|
+
call_result = await tool_func(**tool_kwrags)
|
|
109
|
+
else:
|
|
110
|
+
call_result = tool_func(**tool_kwrags)
|
|
108
111
|
except Exception as e:
|
|
109
112
|
if self.is_debug():
|
|
110
113
|
print("[Tool Error]: ", e)
|
|
@@ -151,7 +154,6 @@ class Tool(ComponentABC):
|
|
|
151
154
|
if tool_results and len(tool_results.keys()) > 0:
|
|
152
155
|
return {
|
|
153
156
|
"info": tool_results,
|
|
154
|
-
"instruct": ["Use format [keywords](url) to mark internet-source information in {OUTPUT}"]
|
|
155
157
|
}
|
|
156
158
|
else:
|
|
157
159
|
return None
|
|
@@ -19,7 +19,7 @@ class YAMLLoader(ComponentABC):
|
|
|
19
19
|
agently_tuple_list[1] = self.transform_to_agently_style(value, variables=variables)
|
|
20
20
|
else:
|
|
21
21
|
result.update({ key: self.transform_to_agently_style(value, variables=variables) })
|
|
22
|
-
if agently_tuple_list[0]
|
|
22
|
+
if agently_tuple_list[0] or agently_tuple_list[1]:
|
|
23
23
|
result = (agently_tuple_list[0], agently_tuple_list[1])
|
|
24
24
|
return result
|
|
25
25
|
if isinstance(target, list):
|
|
@@ -31,6 +31,10 @@ class YAMLLoader(ComponentABC):
|
|
|
31
31
|
result = str(target)
|
|
32
32
|
for key, value in variables.items():
|
|
33
33
|
result = result.replace("${" + str(key) + "}", str(value))
|
|
34
|
+
global_variables = self.agent.settings.get("global_variables")
|
|
35
|
+
if global_variables:
|
|
36
|
+
for key, value in global_variables.items():
|
|
37
|
+
result = result.replace("${" + str(key) + "}", str(value))
|
|
34
38
|
return result
|
|
35
39
|
|
|
36
40
|
def load_yaml_prompt(self, *, path:str=None, yaml:str=None, use_agently_style:bool=True, variables:dict={}):
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from .utils import RequestABC, to_prompt_structure, to_instruction, to_json_desc, find_json
|
|
1
|
+
from .utils import RequestABC, to_prompt_structure, to_instruction, to_json_desc, find_json, format_request_messages
|
|
2
2
|
from Agently.utils import RuntimeCtxNamespace
|
|
3
3
|
import httpx
|
|
4
4
|
import json
|
|
@@ -8,6 +8,12 @@ class Claude(RequestABC):
|
|
|
8
8
|
self.request = request
|
|
9
9
|
self.model_name = "Claude"
|
|
10
10
|
self.model_settings = RuntimeCtxNamespace(f"model.{ self.model_name }", self.request.settings)
|
|
11
|
+
if not self.model_settings.get_trace_back("message_rules.no_multi_system_messages"):
|
|
12
|
+
self.model_settings.set("message_rules.no_multi_system_messages", False)
|
|
13
|
+
if not self.model_settings.get_trace_back("message_rules.strict_orders"):
|
|
14
|
+
self.model_settings.set("message_rules.strict_orders", True)
|
|
15
|
+
if not self.model_settings.get_trace_back("message_rules.no_multi_type_messages"):
|
|
16
|
+
self.model_settings.set("message_rules.no_multi_type_messages", False)
|
|
11
17
|
self.default_options = {
|
|
12
18
|
"model": "claude-3-sonnet-20240229",
|
|
13
19
|
"max_tokens": 4096,
|
|
@@ -72,15 +78,20 @@ class Claude(RequestABC):
|
|
|
72
78
|
request_messages.append({ "role": "user", "content": [{"type": "text", "text": prompt_text }] })
|
|
73
79
|
return request_messages
|
|
74
80
|
|
|
81
|
+
|
|
82
|
+
|
|
75
83
|
def generate_request_data(self):
|
|
76
84
|
options = self.model_settings.get_trace_back("options", {})
|
|
77
85
|
return {
|
|
78
|
-
"messages": self.construct_request_messages(),
|
|
86
|
+
"messages": format_request_messages(self.construct_request_messages(), self.model_settings),
|
|
79
87
|
"options": options,
|
|
80
88
|
}
|
|
81
89
|
|
|
82
90
|
async def request_model(self, request_data: dict):
|
|
83
91
|
api_key = self.model_settings.get_trace_back("auth.api_key")
|
|
92
|
+
base_url = self.model_settings.get_trace_back("url", "https://api.anthropic.com/v1")
|
|
93
|
+
if base_url.endswith("/"):
|
|
94
|
+
base_url = base_url[:-1]
|
|
84
95
|
proxy = self.request.settings.get_trace_back("proxy")
|
|
85
96
|
messages = request_data["messages"]
|
|
86
97
|
system_prompt = ""
|
|
@@ -111,7 +122,7 @@ class Claude(RequestABC):
|
|
|
111
122
|
async with httpx.AsyncClient(**client_params) as client:
|
|
112
123
|
async with client.stream(
|
|
113
124
|
"POST",
|
|
114
|
-
"
|
|
125
|
+
f"{ base_url }/messages",
|
|
115
126
|
**request_params
|
|
116
127
|
) as response:
|
|
117
128
|
async for chunk in response.aiter_lines():
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from openai import AsyncOpenAI as OpenAIClient
|
|
2
|
-
from .utils import RequestABC, to_prompt_structure, to_instruction, to_json_desc, find_json
|
|
2
|
+
from .utils import RequestABC, to_prompt_structure, to_instruction, to_json_desc, find_json, format_request_messages
|
|
3
3
|
from Agently.utils import RuntimeCtxNamespace
|
|
4
4
|
import httpx
|
|
5
5
|
import json
|
|
@@ -76,58 +76,6 @@ class OAIClient(RequestABC):
|
|
|
76
76
|
request_messages.append({ "role": "user", "content": [{"type": "text", "text": prompt_text }] })
|
|
77
77
|
return request_messages
|
|
78
78
|
|
|
79
|
-
def format_request_messages(self, request_messages):
|
|
80
|
-
system_prompt = ""
|
|
81
|
-
system_messages = []
|
|
82
|
-
chat_messages = []
|
|
83
|
-
role_list = ["user", "assistant"]
|
|
84
|
-
current_role = 0
|
|
85
|
-
for message in request_messages:
|
|
86
|
-
if message["role"] == "system":
|
|
87
|
-
# no_multi_system_messages=True
|
|
88
|
-
if self.model_settings.get_trace_back("message_rules.no_multi_system_messages"):
|
|
89
|
-
for content in message["content"]:
|
|
90
|
-
if content["type"] == "text":
|
|
91
|
-
system_prompt += f"{ content['text'] }\n"
|
|
92
|
-
# no_multi_system_messages=False
|
|
93
|
-
else:
|
|
94
|
-
system_messages.append(message)
|
|
95
|
-
else:
|
|
96
|
-
# strict_orders=True
|
|
97
|
-
if self.model_settings.get_trace_back("message_rules.strict_orders"):
|
|
98
|
-
if len(chat_messages) == 0 and message["role"] != "user":
|
|
99
|
-
chat_messages.append({ "role": "user", "content": "What did we talked about?" })
|
|
100
|
-
current_role = not current_role
|
|
101
|
-
if message["role"] == role_list[current_role]:
|
|
102
|
-
chat_messages.append(message)
|
|
103
|
-
current_role = not current_role
|
|
104
|
-
else:
|
|
105
|
-
content = f"{ chat_messages[-1]['content'] }\n{ message['content'] }"
|
|
106
|
-
chat_messages[-1]['content'] = content
|
|
107
|
-
# strict_orders=False
|
|
108
|
-
else:
|
|
109
|
-
chat_messages.append(message)
|
|
110
|
-
# no_multi_system_messages=True
|
|
111
|
-
if self.model_settings.get_trace_back("message_rules.no_multi_system_messages") and system_prompt != "":
|
|
112
|
-
system_messages.append({
|
|
113
|
-
"role": "system",
|
|
114
|
-
"content": [{
|
|
115
|
-
"type": "text",
|
|
116
|
-
"text": system_prompt
|
|
117
|
-
}]
|
|
118
|
-
})
|
|
119
|
-
formatted_messages = system_messages.copy()
|
|
120
|
-
formatted_messages.extend(chat_messages)
|
|
121
|
-
# no_multi_type_messages=True
|
|
122
|
-
if self.model_settings.get_trace_back("message_rules.no_multi_type_messages"):
|
|
123
|
-
current_messages = formatted_messages.copy()
|
|
124
|
-
formatted_messages = []
|
|
125
|
-
for message in current_messages:
|
|
126
|
-
for item in message["content"]:
|
|
127
|
-
if item["type"] == "text":
|
|
128
|
-
formatted_messages.append({ "role": message["role"], "content": item["text"] })
|
|
129
|
-
return formatted_messages
|
|
130
|
-
|
|
131
79
|
def construct_completion_prompt(self):
|
|
132
80
|
# - init prompt
|
|
133
81
|
completion_prompt = ""
|
|
@@ -218,7 +166,7 @@ class OAIClient(RequestABC):
|
|
|
218
166
|
options.update({ key: value })
|
|
219
167
|
if self.request_type == "chat":
|
|
220
168
|
return {
|
|
221
|
-
"messages":
|
|
169
|
+
"messages": format_request_messages(self.construct_request_messages(), self.model_settings),
|
|
222
170
|
**options,
|
|
223
171
|
}
|
|
224
172
|
elif self.request_type == "completions":
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
def format_request_messages(request_messages, model_settings):
|
|
2
|
+
system_prompt = ""
|
|
3
|
+
system_messages = []
|
|
4
|
+
chat_messages = []
|
|
5
|
+
role_list = ["user", "assistant"]
|
|
6
|
+
current_role = 0
|
|
7
|
+
for message in request_messages:
|
|
8
|
+
if message["role"] == "system":
|
|
9
|
+
# no_multi_system_messages=True
|
|
10
|
+
if model_settings.get_trace_back("message_rules.no_multi_system_messages"):
|
|
11
|
+
if isinstance(message["content"], str):
|
|
12
|
+
system_prompt += f"{ message['content'] }\n"
|
|
13
|
+
elif isinstance(message["content"], list):
|
|
14
|
+
for content in message["content"]:
|
|
15
|
+
if content["type"] == "text":
|
|
16
|
+
system_prompt += f"{ content['text'] }\n"
|
|
17
|
+
# no_multi_system_messages=False
|
|
18
|
+
else:
|
|
19
|
+
system_messages.append(message)
|
|
20
|
+
else:
|
|
21
|
+
# strict_orders=True
|
|
22
|
+
if model_settings.get_trace_back("message_rules.strict_orders"):
|
|
23
|
+
if len(chat_messages) == 0 and message["role"] != "user":
|
|
24
|
+
chat_messages.append({ "role": "user", "content": [{"type": "text", "text": "What did we talked about?" }] })
|
|
25
|
+
current_role = not current_role
|
|
26
|
+
if message["role"] == role_list[current_role]:
|
|
27
|
+
chat_messages.append(message)
|
|
28
|
+
current_role = not current_role
|
|
29
|
+
else:
|
|
30
|
+
content = f"{ chat_messages[-1]['content'] }\n{ message['content'] }"
|
|
31
|
+
chat_messages[-1]['content'] = content
|
|
32
|
+
# strict_orders=False
|
|
33
|
+
else:
|
|
34
|
+
chat_messages.append(message)
|
|
35
|
+
# no_multi_system_messages=True
|
|
36
|
+
if model_settings.get_trace_back("message_rules.no_multi_system_messages") and system_prompt != "":
|
|
37
|
+
system_messages.append({
|
|
38
|
+
"role": "system",
|
|
39
|
+
"content": [{
|
|
40
|
+
"type": "text",
|
|
41
|
+
"text": system_prompt
|
|
42
|
+
}]
|
|
43
|
+
})
|
|
44
|
+
formatted_messages = system_messages.copy()
|
|
45
|
+
formatted_messages.extend(chat_messages)
|
|
46
|
+
# no_multi_type_messages=True
|
|
47
|
+
if model_settings.get_trace_back("message_rules.no_multi_type_messages"):
|
|
48
|
+
current_messages = formatted_messages.copy()
|
|
49
|
+
formatted_messages = []
|
|
50
|
+
for message in current_messages:
|
|
51
|
+
if isinstance(message["content"], str):
|
|
52
|
+
formatted_messages.append(message)
|
|
53
|
+
elif isinstance(message["content"], list):
|
|
54
|
+
for item in message["content"]:
|
|
55
|
+
if item["type"] == "text":
|
|
56
|
+
formatted_messages.append({ "role": message["role"], "content": item["text"] })
|
|
57
|
+
return formatted_messages
|
|
@@ -2,8 +2,8 @@ from .utils import ToolABC
|
|
|
2
2
|
import time
|
|
3
3
|
import httpx
|
|
4
4
|
from duckduckgo_search import DDGS
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
import requests
|
|
6
|
+
from bs4 import BeautifulSoup
|
|
7
7
|
|
|
8
8
|
class Web(ToolABC):
|
|
9
9
|
def __init__(self, tool_manager: object):
|
|
@@ -36,14 +36,6 @@ class Web(ToolABC):
|
|
|
36
36
|
"brief": result["body"],
|
|
37
37
|
"url": result["href"],
|
|
38
38
|
})
|
|
39
|
-
'''
|
|
40
|
-
results["origin"].append(result)
|
|
41
|
-
results["for_agent"].append({
|
|
42
|
-
"index": index,
|
|
43
|
-
"title": result["title"],
|
|
44
|
-
"body": result["body"],
|
|
45
|
-
})
|
|
46
|
-
'''
|
|
47
39
|
elif type == 2:
|
|
48
40
|
for index, result in enumerate(ddgs.news(
|
|
49
41
|
str(keywords),
|
|
@@ -56,15 +48,6 @@ class Web(ToolABC):
|
|
|
56
48
|
"source": result["source"],
|
|
57
49
|
"date": result["date"],
|
|
58
50
|
})
|
|
59
|
-
'''
|
|
60
|
-
results["origin"].append(result)
|
|
61
|
-
results["for_agent"].append({
|
|
62
|
-
"index": index,
|
|
63
|
-
"title": result["title"],
|
|
64
|
-
"body": result["body"],
|
|
65
|
-
"date": result["date"],
|
|
66
|
-
})
|
|
67
|
-
'''
|
|
68
51
|
except Exception as e:
|
|
69
52
|
results = f"No Result Because: { str(e) }"
|
|
70
53
|
return results
|
|
@@ -82,40 +65,28 @@ class Web(ToolABC):
|
|
|
82
65
|
return self.search(keywords, options=options, proxy=proxy, type=2)
|
|
83
66
|
|
|
84
67
|
def browse(self, url: str, *, retry_times:int = 0, proxy: str=None):
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
if proxy.startswith("http:"):
|
|
88
|
-
ns_config.proxies = { "http": proxy }
|
|
89
|
-
elif proxy.startswith("https:"):
|
|
90
|
-
ns_config.proxies = { "https": proxy }
|
|
91
|
-
ns_config.request_timeout = 20
|
|
92
|
-
ns_config.browser_user_agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36"
|
|
93
|
-
ns_config.browser_accept = "*/*"
|
|
94
|
-
ns_config.fetch_images = False
|
|
95
|
-
ns_config.memoize_articles = False
|
|
96
|
-
ns_article = NsArticle(url, config = ns_config)
|
|
97
|
-
ns_article.download()
|
|
98
|
-
ns_article.parse()
|
|
99
|
-
result = ns_article.text
|
|
100
|
-
return result
|
|
101
|
-
'''
|
|
102
|
-
if len(result) < 200:
|
|
103
|
-
request_params = {}
|
|
68
|
+
try:
|
|
69
|
+
request_options = {}
|
|
104
70
|
if proxy:
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
71
|
+
if proxy.startswith("http:"):
|
|
72
|
+
request_options.update({ "proxies": { "http": proxy } })
|
|
73
|
+
elif proxy.startswith("https:"):
|
|
74
|
+
request_options.update({ "proxies": { "https": proxy } })
|
|
75
|
+
request_options.update({ "headers": { "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"} })
|
|
76
|
+
page_response = requests.get(url, **request_options)
|
|
77
|
+
soup = BeautifulSoup(page_response.content, 'html.parser')
|
|
78
|
+
paragraphs = soup.find_all('p')
|
|
79
|
+
texts = [p.get_text() for p in paragraphs]
|
|
80
|
+
page_content = '\n'.join(texts)
|
|
81
|
+
if page_content and page_content != "":
|
|
82
|
+
return page_content
|
|
111
83
|
else:
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
'''
|
|
84
|
+
return f"Can not get content from url: { url }"
|
|
85
|
+
except Exception as e:
|
|
86
|
+
if retry_times < 3:
|
|
87
|
+
return self.browse(url, retry_times = retry_times + 1, proxy = proxy)
|
|
88
|
+
else:
|
|
89
|
+
return f"Can not get content from url: { url }\nError: { str(e) }"
|
|
119
90
|
|
|
120
91
|
def export(self):
|
|
121
92
|
return {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import asyncio
|
|
1
2
|
from .RuntimeCtx import RuntimeCtx, RuntimeCtxNamespace
|
|
2
3
|
|
|
3
4
|
class ToolManager(object):
|
|
@@ -71,7 +72,11 @@ class ToolManager(object):
|
|
|
71
72
|
def call_tool_func(self, tool_name: str, *args, **kwargs):
|
|
72
73
|
func = self.get_tool_func(tool_name)
|
|
73
74
|
if func:
|
|
74
|
-
|
|
75
|
+
if asyncio.iscoroutinefunction(func):
|
|
76
|
+
loop = asyncio.get_event_loop()
|
|
77
|
+
return loop.run_until_complete(func(*args, **kwargs))
|
|
78
|
+
else:
|
|
79
|
+
return func(*args, **kwargs)
|
|
75
80
|
else:
|
|
76
81
|
return None
|
|
77
82
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: Agently
|
|
3
|
-
Version: 3.2.2.
|
|
3
|
+
Version: 3.2.2.4
|
|
4
4
|
Summary: Agently, a framework to build applications based on language model powered intelligent agents.
|
|
5
5
|
Home-page: https://github.com/Maplemx/Agently
|
|
6
6
|
Author: Maplemx
|
|
@@ -20,7 +20,8 @@ Requires-Dist: zhipuai
|
|
|
20
20
|
Requires-Dist: PyYAML
|
|
21
21
|
Requires-Dist: json5
|
|
22
22
|
Requires-Dist: duckduckgo_search
|
|
23
|
-
Requires-Dist:
|
|
23
|
+
Requires-Dist: beautifulsoup4
|
|
24
|
+
Requires-Dist: requests
|
|
24
25
|
Requires-Dist: numpy
|
|
25
26
|
Requires-Dist: scipy
|
|
26
27
|
Requires-Dist: sympy
|
|
@@ -80,6 +80,7 @@ Agently/plugins/request/__init__.py
|
|
|
80
80
|
Agently/plugins/request/config.ini
|
|
81
81
|
Agently/plugins/request/utils/RequestABC.py
|
|
82
82
|
Agently/plugins/request/utils/__init__.py
|
|
83
|
+
Agently/plugins/request/utils/format.py
|
|
83
84
|
Agently/plugins/request/utils/transform.py
|
|
84
85
|
Agently/plugins/storage/FileStorage.py
|
|
85
86
|
Agently/plugins/storage/__init__.py
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: Agently
|
|
3
|
-
Version: 3.2.2.
|
|
3
|
+
Version: 3.2.2.4
|
|
4
4
|
Summary: Agently, a framework to build applications based on language model powered intelligent agents.
|
|
5
5
|
Home-page: https://github.com/Maplemx/Agently
|
|
6
6
|
Author: Maplemx
|
|
@@ -20,7 +20,8 @@ Requires-Dist: zhipuai
|
|
|
20
20
|
Requires-Dist: PyYAML
|
|
21
21
|
Requires-Dist: json5
|
|
22
22
|
Requires-Dist: duckduckgo_search
|
|
23
|
-
Requires-Dist:
|
|
23
|
+
Requires-Dist: beautifulsoup4
|
|
24
|
+
Requires-Dist: requests
|
|
24
25
|
Requires-Dist: numpy
|
|
25
26
|
Requires-Dist: scipy
|
|
26
27
|
Requires-Dist: sympy
|
|
@@ -10,7 +10,7 @@ for requirement in origin_requirements:
|
|
|
10
10
|
|
|
11
11
|
setuptools.setup(
|
|
12
12
|
name = "Agently",
|
|
13
|
-
version = "3.2.2.
|
|
13
|
+
version = "3.2.2.4",
|
|
14
14
|
author = "Maplemx",
|
|
15
15
|
author_email = "maplemx@gmail.com",
|
|
16
16
|
description = "Agently, a framework to build applications based on language model powered intelligent agents.",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|