beswarm 0.1.92__py3-none-any.whl → 0.1.94__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.
- beswarm/aient/setup.py +1 -1
- beswarm/aient/src/aient/core/models.py +1 -0
- beswarm/aient/src/aient/core/request.py +122 -0
- beswarm/aient/src/aient/core/response.py +33 -5
- beswarm/aient/src/aient/core/utils.py +7 -5
- beswarm/tools/search_web.py +11 -6
- beswarm/tools/worker.py +18 -2
- {beswarm-0.1.92.dist-info → beswarm-0.1.94.dist-info}/METADATA +1 -1
- {beswarm-0.1.92.dist-info → beswarm-0.1.94.dist-info}/RECORD +11 -11
- {beswarm-0.1.92.dist-info → beswarm-0.1.94.dist-info}/WHEEL +0 -0
- {beswarm-0.1.92.dist-info → beswarm-0.1.94.dist-info}/top_level.txt +0 -0
beswarm/aient/setup.py
CHANGED
@@ -4,7 +4,7 @@ from setuptools import setup, find_packages
|
|
4
4
|
|
5
5
|
setup(
|
6
6
|
name="aient",
|
7
|
-
version="1.1.
|
7
|
+
version="1.1.36",
|
8
8
|
description="Aient: The Awakening of Agent.",
|
9
9
|
long_description=Path.open(Path("README.md"), encoding="utf-8").read(),
|
10
10
|
long_description_content_type="text/markdown",
|
@@ -105,6 +105,7 @@ class RequestModel(BaseRequest):
|
|
105
105
|
response_format: Optional[ResponseFormat] = None
|
106
106
|
thinking: Optional[Thinking] = None
|
107
107
|
stream_options: Optional[StreamOptions] = None
|
108
|
+
chat_template_kwargs: Optional[Dict[str, Any]] = None
|
108
109
|
|
109
110
|
def get_last_text_message(self) -> Optional[str]:
|
110
111
|
for message in reversed(self.messages):
|
@@ -1197,6 +1197,126 @@ async def get_azure_payload(request, engine, provider, api_key=None):
|
|
1197
1197
|
|
1198
1198
|
return url, headers, payload
|
1199
1199
|
|
1200
|
+
async def get_azure_databricks_payload(request, engine, provider, api_key=None):
|
1201
|
+
api_key = base64.b64encode(f"token:{api_key}".encode()).decode()
|
1202
|
+
headers = {
|
1203
|
+
'Content-Type': 'application/json',
|
1204
|
+
'Authorization': f"Basic {api_key}",
|
1205
|
+
}
|
1206
|
+
model_dict = get_model_dict(provider)
|
1207
|
+
original_model = model_dict[request.model]
|
1208
|
+
|
1209
|
+
base_url=provider['base_url']
|
1210
|
+
url = urllib.parse.urljoin(base_url, f"/serving-endpoints/{original_model}/invocations")
|
1211
|
+
|
1212
|
+
messages = []
|
1213
|
+
for msg in request.messages:
|
1214
|
+
tool_calls = None
|
1215
|
+
tool_call_id = None
|
1216
|
+
if isinstance(msg.content, list):
|
1217
|
+
content = []
|
1218
|
+
for item in msg.content:
|
1219
|
+
if item.type == "text":
|
1220
|
+
text_message = await get_text_message(item.text, engine)
|
1221
|
+
content.append(text_message)
|
1222
|
+
elif item.type == "image_url" and provider.get("image", True) and "o1-mini" not in original_model:
|
1223
|
+
image_message = await get_image_message(item.image_url.url, engine)
|
1224
|
+
content.append(image_message)
|
1225
|
+
else:
|
1226
|
+
content = msg.content
|
1227
|
+
tool_calls = msg.tool_calls
|
1228
|
+
tool_call_id = msg.tool_call_id
|
1229
|
+
|
1230
|
+
if tool_calls:
|
1231
|
+
tool_calls_list = []
|
1232
|
+
for tool_call in tool_calls:
|
1233
|
+
tool_calls_list.append({
|
1234
|
+
"id": tool_call.id,
|
1235
|
+
"type": tool_call.type,
|
1236
|
+
"function": {
|
1237
|
+
"name": tool_call.function.name,
|
1238
|
+
"arguments": tool_call.function.arguments
|
1239
|
+
}
|
1240
|
+
})
|
1241
|
+
if provider.get("tools"):
|
1242
|
+
messages.append({"role": msg.role, "tool_calls": tool_calls_list})
|
1243
|
+
elif tool_call_id:
|
1244
|
+
if provider.get("tools"):
|
1245
|
+
messages.append({"role": msg.role, "tool_call_id": tool_call_id, "content": content})
|
1246
|
+
else:
|
1247
|
+
messages.append({"role": msg.role, "content": content})
|
1248
|
+
|
1249
|
+
if "claude-3-7-sonnet" in original_model:
|
1250
|
+
max_tokens = 128000
|
1251
|
+
elif "claude-3-5-sonnet" in original_model:
|
1252
|
+
max_tokens = 8192
|
1253
|
+
elif "claude-sonnet-4" in original_model:
|
1254
|
+
max_tokens = 64000
|
1255
|
+
elif "claude-opus-4" in original_model:
|
1256
|
+
max_tokens = 32000
|
1257
|
+
else:
|
1258
|
+
max_tokens = 4096
|
1259
|
+
|
1260
|
+
payload = {
|
1261
|
+
"model": original_model,
|
1262
|
+
"messages": messages,
|
1263
|
+
"max_tokens": max_tokens,
|
1264
|
+
}
|
1265
|
+
|
1266
|
+
if request.max_tokens:
|
1267
|
+
payload["max_tokens"] = int(request.max_tokens)
|
1268
|
+
|
1269
|
+
miss_fields = [
|
1270
|
+
'model',
|
1271
|
+
'messages',
|
1272
|
+
]
|
1273
|
+
|
1274
|
+
for field, value in request.model_dump(exclude_unset=True).items():
|
1275
|
+
if field not in miss_fields and value is not None:
|
1276
|
+
if field == "max_tokens" and "o1" in original_model:
|
1277
|
+
payload["max_completion_tokens"] = value
|
1278
|
+
else:
|
1279
|
+
payload[field] = value
|
1280
|
+
|
1281
|
+
if provider.get("tools") == False or "o1" in original_model or "chatgpt-4o-latest" in original_model or "grok" in original_model:
|
1282
|
+
payload.pop("tools", None)
|
1283
|
+
payload.pop("tool_choice", None)
|
1284
|
+
|
1285
|
+
if "think" in request.model.lower():
|
1286
|
+
payload["thinking"] = {
|
1287
|
+
"budget_tokens": 4096,
|
1288
|
+
"type": "enabled"
|
1289
|
+
}
|
1290
|
+
payload["temperature"] = 1
|
1291
|
+
payload.pop("top_p", None)
|
1292
|
+
payload.pop("top_k", None)
|
1293
|
+
if request.model.split("-")[-1].isdigit():
|
1294
|
+
think_tokens = int(request.model.split("-")[-1])
|
1295
|
+
if think_tokens < max_tokens:
|
1296
|
+
payload["thinking"] = {
|
1297
|
+
"budget_tokens": think_tokens,
|
1298
|
+
"type": "enabled"
|
1299
|
+
}
|
1300
|
+
|
1301
|
+
if request.thinking:
|
1302
|
+
payload["thinking"] = {
|
1303
|
+
"budget_tokens": request.thinking.budget_tokens,
|
1304
|
+
"type": request.thinking.type
|
1305
|
+
}
|
1306
|
+
payload["temperature"] = 1
|
1307
|
+
payload.pop("top_p", None)
|
1308
|
+
payload.pop("top_k", None)
|
1309
|
+
|
1310
|
+
if safe_get(provider, "preferences", "post_body_parameter_overrides", default=None):
|
1311
|
+
for key, value in safe_get(provider, "preferences", "post_body_parameter_overrides", default={}).items():
|
1312
|
+
if key == request.model:
|
1313
|
+
for k, v in value.items():
|
1314
|
+
payload[k] = v
|
1315
|
+
elif all(_model not in request.model.lower() for _model in ["gemini", "gpt", "claude"]):
|
1316
|
+
payload[key] = value
|
1317
|
+
|
1318
|
+
return url, headers, payload
|
1319
|
+
|
1200
1320
|
async def get_openrouter_payload(request, engine, provider, api_key=None):
|
1201
1321
|
headers = {
|
1202
1322
|
'Content-Type': 'application/json'
|
@@ -1765,6 +1885,8 @@ async def get_payload(request: RequestModel, engine, provider, api_key=None):
|
|
1765
1885
|
return await get_vertex_claude_payload(request, engine, provider, api_key)
|
1766
1886
|
elif engine == "azure":
|
1767
1887
|
return await get_azure_payload(request, engine, provider, api_key)
|
1888
|
+
elif engine == "azure-databricks":
|
1889
|
+
return await get_azure_databricks_payload(request, engine, provider, api_key)
|
1768
1890
|
elif engine == "claude":
|
1769
1891
|
return await get_claude_payload(request, engine, provider, api_key)
|
1770
1892
|
elif engine == "gpt":
|
@@ -49,6 +49,30 @@ async def fetch_gemini_response_stream(client, url, headers, payload, model):
|
|
49
49
|
while "\n" in buffer:
|
50
50
|
line, buffer = buffer.split("\n", 1)
|
51
51
|
# line_index += 1
|
52
|
+
if line.startswith("data: "):
|
53
|
+
json_line = line.lstrip("data: ").strip()
|
54
|
+
response_json = json.loads(json_line)
|
55
|
+
json_data = safe_get(response_json, "candidates", 0, "content", default=None)
|
56
|
+
finishReason = safe_get(response_json, "candidates", 0 , "finishReason", default=None)
|
57
|
+
if finishReason:
|
58
|
+
promptTokenCount = safe_get(response_json, "usageMetadata", "promptTokenCount", default=0)
|
59
|
+
candidatesTokenCount = safe_get(response_json, "usageMetadata", "candidatesTokenCount", default=0)
|
60
|
+
totalTokenCount = safe_get(response_json, "usageMetadata", "totalTokenCount", default=0)
|
61
|
+
|
62
|
+
content = safe_get(json_data, "parts", 0, "text", default="")
|
63
|
+
b64_json = safe_get(json_data, "parts", 0, "inlineData", "data", default="")
|
64
|
+
if b64_json:
|
65
|
+
image_base64 = b64_json
|
66
|
+
|
67
|
+
is_thinking = safe_get(json_data, "parts", 0, "thought", default=False)
|
68
|
+
if is_thinking:
|
69
|
+
sse_string = await generate_sse_response(timestamp, model, reasoning_content=content)
|
70
|
+
yield sse_string
|
71
|
+
elif not image_base64 and content:
|
72
|
+
sse_string = await generate_sse_response(timestamp, model, content=content)
|
73
|
+
yield sse_string
|
74
|
+
|
75
|
+
continue
|
52
76
|
|
53
77
|
# https://ai.google.dev/api/generate-content?hl=zh-cn#FinishReason
|
54
78
|
if line and '\"finishReason\": \"' in line:
|
@@ -270,8 +294,15 @@ async def fetch_gpt_response_stream(client, url, headers, payload):
|
|
270
294
|
|
271
295
|
no_stream_content = safe_get(line, "choices", 0, "message", "content", default=None)
|
272
296
|
openrouter_reasoning = safe_get(line, "choices", 0, "delta", "reasoning", default="")
|
297
|
+
azure_databricks_claude_summary_content = safe_get(line, "choices", 0, "delta", "content", 0, "summary", 0, "text", default="")
|
298
|
+
azure_databricks_claude_signature_content = safe_get(line, "choices", 0, "delta", "content", 0, "summary", 0, "signature", default="")
|
273
299
|
# print("openrouter_reasoning", repr(openrouter_reasoning), openrouter_reasoning.endswith("\\\\"), openrouter_reasoning.endswith("\\"))
|
274
|
-
if
|
300
|
+
if azure_databricks_claude_signature_content:
|
301
|
+
pass
|
302
|
+
elif azure_databricks_claude_summary_content:
|
303
|
+
sse_string = await generate_sse_response(timestamp, payload["model"], reasoning_content=azure_databricks_claude_summary_content)
|
304
|
+
yield sse_string
|
305
|
+
elif openrouter_reasoning:
|
275
306
|
if openrouter_reasoning.endswith("\\"):
|
276
307
|
enter_buffer += openrouter_reasoning
|
277
308
|
continue
|
@@ -640,15 +671,12 @@ async def fetch_response_stream(client, url, headers, payload, engine, model):
|
|
640
671
|
elif engine == "aws":
|
641
672
|
async for chunk in fetch_aws_response_stream(client, url, headers, payload, model):
|
642
673
|
yield chunk
|
643
|
-
elif engine == "gpt":
|
674
|
+
elif engine == "gpt" or engine == "openrouter" or engine == "azure-databricks":
|
644
675
|
async for chunk in fetch_gpt_response_stream(client, url, headers, payload):
|
645
676
|
yield chunk
|
646
677
|
elif engine == "azure":
|
647
678
|
async for chunk in fetch_azure_response_stream(client, url, headers, payload):
|
648
679
|
yield chunk
|
649
|
-
elif engine == "openrouter":
|
650
|
-
async for chunk in fetch_gpt_response_stream(client, url, headers, payload):
|
651
|
-
yield chunk
|
652
680
|
elif engine == "cloudflare":
|
653
681
|
async for chunk in fetch_cloudflare_response_stream(client, url, headers, payload, model):
|
654
682
|
yield chunk
|
@@ -75,6 +75,8 @@ def get_engine(provider, endpoint=None, original_model=""):
|
|
75
75
|
engine = "vertex"
|
76
76
|
elif parsed_url.netloc.rstrip('/').endswith('azure.com'):
|
77
77
|
engine = "azure"
|
78
|
+
elif parsed_url.netloc.rstrip('/').endswith('azuredatabricks.net'):
|
79
|
+
engine = "azure-databricks"
|
78
80
|
elif parsed_url.netloc == 'api.cloudflare.com':
|
79
81
|
engine = "cloudflare"
|
80
82
|
elif parsed_url.netloc == 'api.anthropic.com' or parsed_url.path.endswith("v1/messages"):
|
@@ -482,7 +484,6 @@ async def generate_sse_response(timestamp, model, content=None, tools_id=None, f
|
|
482
484
|
if role:
|
483
485
|
sample_data["choices"][0]["delta"] = {"role": role, "content": ""}
|
484
486
|
if total_tokens:
|
485
|
-
total_tokens = prompt_tokens + completion_tokens
|
486
487
|
sample_data["usage"] = {"prompt_tokens": prompt_tokens, "completion_tokens": completion_tokens, "total_tokens": total_tokens}
|
487
488
|
sample_data["choices"] = []
|
488
489
|
if stop:
|
@@ -574,7 +575,6 @@ async def generate_no_stream_response(timestamp, model, content=None, tools_id=N
|
|
574
575
|
}
|
575
576
|
|
576
577
|
if total_tokens:
|
577
|
-
total_tokens = prompt_tokens + completion_tokens
|
578
578
|
sample_data["usage"] = {"prompt_tokens": prompt_tokens, "completion_tokens": completion_tokens, "total_tokens": total_tokens}
|
579
579
|
|
580
580
|
json_data = json.dumps(sample_data, ensure_ascii=False)
|
@@ -674,7 +674,7 @@ async def get_image_message(base64_image, engine = None):
|
|
674
674
|
base64_image = f"data:image/png;base64,{png_base64}"
|
675
675
|
image_type = "image/png"
|
676
676
|
|
677
|
-
if "gpt" == engine or "openrouter" == engine or "azure" == engine:
|
677
|
+
if "gpt" == engine or "openrouter" == engine or "azure" == engine or "azure-databricks" == engine:
|
678
678
|
return {
|
679
679
|
"type": "image_url",
|
680
680
|
"image_url": {
|
@@ -702,7 +702,9 @@ async def get_image_message(base64_image, engine = None):
|
|
702
702
|
raise ValueError("Unknown engine")
|
703
703
|
|
704
704
|
async def get_text_message(message, engine = None):
|
705
|
-
if "gpt" == engine or "claude" == engine or "openrouter" == engine or
|
705
|
+
if "gpt" == engine or "claude" == engine or "openrouter" == engine or \
|
706
|
+
"vertex-claude" == engine or "azure" == engine or "aws" == engine or \
|
707
|
+
"azure-databricks" == engine:
|
706
708
|
return {"type": "text", "text": message}
|
707
709
|
if "gemini" == engine or "vertex-gemini" == engine:
|
708
710
|
return {"text": message}
|
@@ -734,7 +736,7 @@ def parse_json_safely(json_str):
|
|
734
736
|
return json.loads(json_str, strict=False)
|
735
737
|
except json.JSONDecodeError as e:
|
736
738
|
# 两种方法都失败,抛出异常
|
737
|
-
raise Exception(f"无法解析JSON字符串: {e}")
|
739
|
+
raise Exception(f"无法解析JSON字符串: {e}, {json_str}")
|
738
740
|
|
739
741
|
if __name__ == "__main__":
|
740
742
|
provider = {
|
beswarm/tools/search_web.py
CHANGED
@@ -48,27 +48,32 @@ async def search_web(query: str):
|
|
48
48
|
except httpx.HTTPStatusError as e:
|
49
49
|
return {
|
50
50
|
"error": f"HTTP error occurred: {e.response.status_code} - {e.response.text}",
|
51
|
-
"status_code": e.response.status_code
|
51
|
+
"status_code": e.response.status_code,
|
52
|
+
"code": 400
|
52
53
|
}
|
53
54
|
except httpx.RequestError as e:
|
54
55
|
return {
|
55
56
|
"error": f"An error occurred while requesting {e.request.url!r}: {e}",
|
56
|
-
"request_url": str(e.request.url)
|
57
|
+
"request_url": str(e.request.url),
|
58
|
+
"code": 400
|
57
59
|
}
|
58
60
|
except json.JSONDecodeError:
|
59
61
|
return {
|
60
62
|
"error": "Failed to decode JSON response from the API.",
|
61
|
-
"response_text": response.text if 'response' in locals() else "No response text available"
|
63
|
+
"response_text": response.text if 'response' in locals() else "No response text available",
|
64
|
+
"code": 400
|
62
65
|
}
|
63
66
|
except Exception as e:
|
64
67
|
return {
|
65
|
-
"error": f"An unexpected error occurred: {str(e)}"
|
68
|
+
"error": f"An unexpected error occurred: {str(e)}",
|
69
|
+
"code": 400
|
66
70
|
}
|
67
71
|
|
68
72
|
unique_urls = []
|
69
|
-
if "error" in results:
|
70
|
-
print(f"Error fetching search results for '{query}':")
|
73
|
+
if "error" in results or results.get("code", 200) != 200:
|
74
|
+
# print(f"Error fetching search results for '{query}':")
|
71
75
|
print(json.dumps(results, indent=2, ensure_ascii=False))
|
76
|
+
raise Exception(f"Error fetching search results for '{query}':")
|
72
77
|
else:
|
73
78
|
# print(f"Search results for '{query}':")
|
74
79
|
html_content = results.get("data", {}).get("result", {}).get("html", "")
|
beswarm/tools/worker.py
CHANGED
@@ -72,7 +72,7 @@ async def worker(goal, tools, work_dir, cache_messages=None):
|
|
72
72
|
if cache_file_path.exists():
|
73
73
|
with cache_file_path.open("r", encoding="utf-8") as f:
|
74
74
|
cache_messages = json.load(f)
|
75
|
-
if cache_messages and isinstance(cache_messages, list) and len(cache_messages) >
|
75
|
+
if cache_messages and isinstance(cache_messages, list) and len(cache_messages) > 1:
|
76
76
|
first_user_message = replace_xml_content(cache_messages[1]["content"], "goal", goal)
|
77
77
|
work_agent_config["cache_messages"] = cache_messages[0:1] + [{"role": "user", "content": first_user_message}] + cache_messages[2:]
|
78
78
|
|
@@ -90,6 +90,7 @@ async def worker(goal, tools, work_dir, cache_messages=None):
|
|
90
90
|
# 工作agent初始化
|
91
91
|
work_agent = chatgpt(**work_agent_config)
|
92
92
|
async def instruction_agent_task():
|
93
|
+
last_instruction = None
|
93
94
|
while True:
|
94
95
|
|
95
96
|
instruction_prompt = f"""
|
@@ -100,6 +101,12 @@ async def worker(goal, tools, work_dir, cache_messages=None):
|
|
100
101
|
|
101
102
|
根据以上对话历史和目标,请生成下一步指令。如果任务已完成,请回复"任务已完成"。
|
102
103
|
"""
|
104
|
+
if last_instruction:
|
105
|
+
instruction_prompt = (
|
106
|
+
f"{instruction_prompt}\n\n"
|
107
|
+
"你生成的指令格式错误,必须把给assistant的指令放在<instructions>...</instructions>标签内。请重新生成格式正确的指令。"
|
108
|
+
f"这是你上次给assistant的错误格式的指令:\n{last_instruction}"
|
109
|
+
)
|
103
110
|
# 让指令agent分析对话历史并生成新指令
|
104
111
|
instruction_agent = chatgpt(**instruction_agent_config)
|
105
112
|
conversation_history = copy.deepcopy(work_agent.conversation["default"])
|
@@ -149,6 +156,7 @@ async def worker(goal, tools, work_dir, cache_messages=None):
|
|
149
156
|
break
|
150
157
|
if "<instructions>" in next_instruction and "</instructions>" not in next_instruction:
|
151
158
|
next_instruction = next_instruction + "\n</instructions>"
|
159
|
+
last_instruction = next_instruction
|
152
160
|
next_instruction = extract_xml_content(next_instruction, "instructions")
|
153
161
|
if not next_instruction:
|
154
162
|
print("\n❌ 指令智能体生成的指令不符合要求,请重新生成。")
|
@@ -240,7 +248,7 @@ async def worker_gen(goal, tools, work_dir, cache_messages=None):
|
|
240
248
|
if cache_file_path.exists():
|
241
249
|
with cache_file_path.open("r", encoding="utf-8") as f:
|
242
250
|
cache_messages = json.load(f)
|
243
|
-
if cache_messages and isinstance(cache_messages, list) and len(cache_messages) >
|
251
|
+
if cache_messages and isinstance(cache_messages, list) and len(cache_messages) > 1:
|
244
252
|
first_user_message = replace_xml_content(cache_messages[1]["content"], "goal", goal)
|
245
253
|
work_agent_config["cache_messages"] = cache_messages[0:1] + [{"role": "user", "content": first_user_message}] + cache_messages[2:]
|
246
254
|
|
@@ -258,6 +266,7 @@ async def worker_gen(goal, tools, work_dir, cache_messages=None):
|
|
258
266
|
# 工作agent初始化
|
259
267
|
work_agent = chatgpt(**work_agent_config)
|
260
268
|
async def instruction_agent_task():
|
269
|
+
last_instruction = None
|
261
270
|
while True:
|
262
271
|
|
263
272
|
instruction_prompt = f"""
|
@@ -268,6 +277,12 @@ async def worker_gen(goal, tools, work_dir, cache_messages=None):
|
|
268
277
|
|
269
278
|
根据以上对话历史和目标,请生成下一步指令。如果任务已完成,请回复"任务已完成"。
|
270
279
|
"""
|
280
|
+
if last_instruction:
|
281
|
+
instruction_prompt = (
|
282
|
+
f"{instruction_prompt}\n\n"
|
283
|
+
"你生成的指令格式错误,必须把给assistant的指令放在<instructions>...</instructions>标签内。请重新生成格式正确的指令。"
|
284
|
+
f"这是你上次给assistant的错误格式的指令:\n{last_instruction}"
|
285
|
+
)
|
271
286
|
# 让指令agent分析对话历史并生成新指令
|
272
287
|
instruction_agent = chatgpt(**instruction_agent_config)
|
273
288
|
conversation_history = copy.deepcopy(work_agent.conversation["default"])
|
@@ -318,6 +333,7 @@ async def worker_gen(goal, tools, work_dir, cache_messages=None):
|
|
318
333
|
break
|
319
334
|
if "<instructions>" in next_instruction and "</instructions>" not in next_instruction:
|
320
335
|
next_instruction = next_instruction + "\n</instructions>"
|
336
|
+
last_instruction = next_instruction
|
321
337
|
next_instruction = extract_xml_content(next_instruction, "instructions")
|
322
338
|
if not next_instruction:
|
323
339
|
print("\n❌ 指令智能体生成的指令不符合要求,请重新生成。")
|
@@ -2,14 +2,14 @@ beswarm/__init__.py,sha256=HZjUOJtZR5QhMuDbq-wukQQn1VrBusNWai_ysGo-VVI,20
|
|
2
2
|
beswarm/prompt.py,sha256=cBz8sSmFj0edIGOZjCMg0rg3pFXQYo8xGvXSA8Py1hg,31591
|
3
3
|
beswarm/utils.py,sha256=lm0drN1ebXM9haoKaW2DLzJJRCOpLmiJ864mH4jAdB4,6697
|
4
4
|
beswarm/aient/main.py,sha256=SiYAIgQlLJqYusnTVEJOx1WNkSJKMImhgn5aWjfroxg,3814
|
5
|
-
beswarm/aient/setup.py,sha256=
|
5
|
+
beswarm/aient/setup.py,sha256=gXGWJdyTOLlVJUiH-3m5BA4q4-VfUOxnywMFVKTEQqI,487
|
6
6
|
beswarm/aient/src/aient/__init__.py,sha256=SRfF7oDVlOOAi6nGKiJIUK6B_arqYLO9iSMp-2IZZps,21
|
7
7
|
beswarm/aient/src/aient/core/__init__.py,sha256=NxjebTlku35S4Dzr16rdSqSTWUvvwEeACe8KvHJnjPg,34
|
8
8
|
beswarm/aient/src/aient/core/log_config.py,sha256=kz2_yJv1p-o3lUQOwA3qh-LSc3wMHv13iCQclw44W9c,274
|
9
|
-
beswarm/aient/src/aient/core/models.py,sha256=
|
10
|
-
beswarm/aient/src/aient/core/request.py,sha256=
|
11
|
-
beswarm/aient/src/aient/core/response.py,sha256=
|
12
|
-
beswarm/aient/src/aient/core/utils.py,sha256=
|
9
|
+
beswarm/aient/src/aient/core/models.py,sha256=d4MISNezTSe0ls0-fjuToI2SoT-sk5fWqAJuKVinIlo,7502
|
10
|
+
beswarm/aient/src/aient/core/request.py,sha256=6Nwduj7kFuubFaZ0ZLkT_zd03XpT-bFhgrKVOZiGBOQ,71918
|
11
|
+
beswarm/aient/src/aient/core/response.py,sha256=RYy70Ld_txixHHd61Dqtlo0tKHMU_OIXqxGWd6EfATI,35315
|
12
|
+
beswarm/aient/src/aient/core/utils.py,sha256=fhI5wBxr01lVEp8nMfjG9dQ859AE-VdrWyb9suLzzqM,27400
|
13
13
|
beswarm/aient/src/aient/core/test/test_base_api.py,sha256=pWnycRJbuPSXKKU9AQjWrMAX1wiLC_014Qc9hh5C2Pw,524
|
14
14
|
beswarm/aient/src/aient/core/test/test_geminimask.py,sha256=HFX8jDbNg_FjjgPNxfYaR-0-roUrOO-ND-FVsuxSoiw,13254
|
15
15
|
beswarm/aient/src/aient/core/test/test_image.py,sha256=_T4peNGdXKBHHxyQNx12u-NTyFE8TlYI6NvvagsG2LE,319
|
@@ -131,10 +131,10 @@ beswarm/tools/planner.py,sha256=lguBCS6kpwNPoXQvqH-WySabVubT82iyWOkJnjt6dXw,1265
|
|
131
131
|
beswarm/tools/repomap.py,sha256=N09K0UgwjCN7Zjg_5TYlVsulp3n2fztYlS8twalChU8,45003
|
132
132
|
beswarm/tools/screenshot.py,sha256=u6t8FCgW5YHJ_Oc4coo8e0F3wTusWE_-H8dFh1rBq9Q,1011
|
133
133
|
beswarm/tools/search_arxiv.py,sha256=GpuIOYX8T0iRC-X-hmuR9AUJVn15WWZq864DaoC7BUc,8004
|
134
|
-
beswarm/tools/search_web.py,sha256=
|
134
|
+
beswarm/tools/search_web.py,sha256=w0T0aCqOVlb6Of5hn_TtpnrGXo6bMtw2aKZdkrYjycI,12069
|
135
135
|
beswarm/tools/think.py,sha256=WLw-7jNIsnS6n8MMSYUin_f-BGLENFmnKM2LISEp0co,1760
|
136
|
-
beswarm/tools/worker.py,sha256=
|
137
|
-
beswarm-0.1.
|
138
|
-
beswarm-0.1.
|
139
|
-
beswarm-0.1.
|
140
|
-
beswarm-0.1.
|
136
|
+
beswarm/tools/worker.py,sha256=4gII0s83gXf8Y453NK4Cs7tLyN89b2q0v9vic92RlrU,18579
|
137
|
+
beswarm-0.1.94.dist-info/METADATA,sha256=1WUIZWN43CmVJLxPFkVtiyQqMGojfb7CZSDIuWr3bOg,3584
|
138
|
+
beswarm-0.1.94.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
139
|
+
beswarm-0.1.94.dist-info/top_level.txt,sha256=pJw4O87wvt5882smuSO6DfByJz7FJ8SxxT8h9fHCmpo,8
|
140
|
+
beswarm-0.1.94.dist-info/RECORD,,
|
File without changes
|
File without changes
|