beswarm 0.2.64__tar.gz → 0.2.66__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.
- {beswarm-0.2.64 → beswarm-0.2.66}/PKG-INFO +1 -1
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/agents/planact.py +18 -9
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/core/request.py +34 -15
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/core/response.py +22 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/core/utils.py +6 -3
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/models/chatgpt.py +14 -6
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm.egg-info/PKG-INFO +1 -1
- {beswarm-0.2.64 → beswarm-0.2.66}/pyproject.toml +1 -1
- {beswarm-0.2.64 → beswarm-0.2.66}/MANIFEST.in +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/README.md +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/__init__.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/agents/chatgroup.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/__init__.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/core/__init__.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/core/log_config.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/core/models.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/core/test/test_base_api.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/core/test/test_geminimask.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/core/test/test_image.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/core/test/test_payload.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/models/__init__.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/models/audio.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/models/base.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/plugins/__init__.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/plugins/arXiv.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/plugins/config.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/plugins/excute_command.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/plugins/get_time.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/plugins/image.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/plugins/list_directory.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/plugins/read_file.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/plugins/read_image.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/plugins/readonly.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/plugins/registry.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/plugins/run_python.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/plugins/websearch.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/plugins/write_file.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/utils/__init__.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/utils/prompt.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/aient/utils/scripts.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/test/test_Web_crawler.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/test/test_ddg_search.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/test/test_google_search.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/test/test_ollama.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/test/test_plugin.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/test/test_search.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/test/test_url.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/test/test_whisper.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/aient/test/test_yjh.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/bemcp/bemcp/__init__.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/bemcp/bemcp/decorator.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/bemcp/bemcp/main.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/bemcp/bemcp/utils.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/bemcp/test/client.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/bemcp/test/server.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/broker.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/core.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/knowledge_graph.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/prompt.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/README.md +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/c-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/d-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/go-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/java-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/python-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/r-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-languages/README.md +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-languages/c-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-languages/cpp-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-languages/dart-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-languages/elisp-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-languages/elixir-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-languages/elm-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-languages/go-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-languages/hcl-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-languages/java-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-languages/javascript-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-languages/php-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-languages/python-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-languages/ql-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-languages/ruby-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-languages/rust-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-languages/scala-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-languages/typescript-tags.scm +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/taskmanager.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/tools/__init__.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/tools/click.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/tools/completion.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/tools/edit_file.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/tools/graph.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/tools/planner.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/tools/repomap.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/tools/request_input.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/tools/screenshot.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/tools/search_arxiv.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/tools/search_web.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/tools/subtasks.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/tools/worker.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/tools/write_csv.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm/utils.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm.egg-info/SOURCES.txt +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm.egg-info/dependency_links.txt +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm.egg-info/requires.txt +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/beswarm.egg-info/top_level.txt +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/setup.cfg +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/test/test_TaskManager.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/test/test_broker.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/test/test_graph.py +0 -0
- {beswarm-0.2.64 → beswarm-0.2.66}/test/test_new_TaskManager.py +0 -0
@@ -12,7 +12,7 @@ from typing import List, Dict, Union
|
|
12
12
|
|
13
13
|
from ..broker import MessageBroker
|
14
14
|
from ..aient.aient.models import chatgpt
|
15
|
-
from ..aient.aient.models.chatgpt import ModelNotFoundError, TaskComplete
|
15
|
+
from ..aient.aient.models.chatgpt import ModelNotFoundError, TaskComplete, RetryFailedError
|
16
16
|
from ..aient.aient.plugins import get_function_call_list, registry
|
17
17
|
from ..prompt import worker_system_prompt, instruction_system_prompt
|
18
18
|
from ..utils import extract_xml_content, get_current_screen_image_message, replace_xml_content, register_mcp_tools, setup_logger
|
@@ -90,8 +90,16 @@ class InstructionAgent(BaseAgent):
|
|
90
90
|
self.goal_diff = '\n'.join(changed_lines).strip()
|
91
91
|
|
92
92
|
def get_conversation_history(self, raw_conversation_history: List[Dict]):
|
93
|
-
conversation_history = copy.deepcopy(raw_conversation_history)
|
94
93
|
|
94
|
+
for index, message in enumerate(raw_conversation_history):
|
95
|
+
if message.get("content") and isinstance(message["content"], str):
|
96
|
+
if "<knowledge_graph_tree>" in message["content"] and self.graph_tree:
|
97
|
+
message["content"] = replace_xml_content(message["content"], "knowledge_graph_tree", self.graph_tree)
|
98
|
+
raw_conversation_history[index] = message
|
99
|
+
if "\n\nYour message **must** end with [done] to signify the end of your output." in message["content"]:
|
100
|
+
message["content"] = message["content"].replace("\n\nYour message **must** end with [done] to signify the end of your output.", "")
|
101
|
+
|
102
|
+
conversation_history = copy.deepcopy(raw_conversation_history)
|
95
103
|
self.cache_file.write_text(json.dumps(conversation_history, ensure_ascii=False, indent=4), encoding="utf-8")
|
96
104
|
|
97
105
|
work_agent_system_prompt = conversation_history.pop(0)
|
@@ -113,13 +121,6 @@ class InstructionAgent(BaseAgent):
|
|
113
121
|
if "<knowledge_graph_tree>" in message["content"] and self.graph_tree:
|
114
122
|
message["content"] = replace_xml_content(message["content"], "knowledge_graph_tree", self.graph_tree)
|
115
123
|
|
116
|
-
for index, message in enumerate(raw_conversation_history):
|
117
|
-
if message.get("content") and isinstance(message["content"], str):
|
118
|
-
if "<knowledge_graph_tree>" in message["content"] and self.graph_tree:
|
119
|
-
message["content"] = replace_xml_content(message["content"], "knowledge_graph_tree", self.graph_tree)
|
120
|
-
raw_conversation_history[index] = message
|
121
|
-
if "\n\nYour message **must** end with [done] to signify the end of your output." in message["content"]:
|
122
|
-
message["content"] = message["content"].replace("\n\nYour message **must** end with [done] to signify the end of your output.", "")
|
123
124
|
|
124
125
|
return conversation_history
|
125
126
|
|
@@ -149,6 +150,10 @@ class InstructionAgent(BaseAgent):
|
|
149
150
|
raw_response = await self.agent.ask_async(instruction_prompt)
|
150
151
|
except ModelNotFoundError as e:
|
151
152
|
raise Exception(str(e))
|
153
|
+
except RetryFailedError as e:
|
154
|
+
self.logger.error("❌ Commander retry failed, retrying...")
|
155
|
+
self.broker.publish(message, self.error_topic)
|
156
|
+
return
|
152
157
|
|
153
158
|
if "'status_code': 413" in raw_response or \
|
154
159
|
"'status_code': 400" in raw_response:
|
@@ -220,6 +225,10 @@ class WorkerAgent(BaseAgent):
|
|
220
225
|
except TaskComplete as e:
|
221
226
|
self.broker.publish({"status": "finished", "result": e.completion_message}, self.status_topic)
|
222
227
|
return
|
228
|
+
except RetryFailedError as e:
|
229
|
+
self.logger.error("❌ Worker retry failed, retrying...")
|
230
|
+
self.broker.publish(message, self.error_topic)
|
231
|
+
return
|
223
232
|
|
224
233
|
if response.strip() == '':
|
225
234
|
self.logger.error("\n❌ 工作智能体回复为空,请重新生成指令。")
|
@@ -3,9 +3,9 @@ import json
|
|
3
3
|
import httpx
|
4
4
|
import base64
|
5
5
|
import asyncio
|
6
|
-
import urllib.parse
|
7
6
|
from io import IOBase
|
8
7
|
from typing import Tuple
|
8
|
+
from urllib.parse import urlparse
|
9
9
|
|
10
10
|
from .models import RequestModel, Message
|
11
11
|
from .utils import (
|
@@ -41,7 +41,7 @@ async def get_gemini_payload(request, engine, provider, api_key=None):
|
|
41
41
|
else:
|
42
42
|
gemini_stream = "generateContent"
|
43
43
|
url = provider['base_url']
|
44
|
-
parsed_url =
|
44
|
+
parsed_url = urlparse(url)
|
45
45
|
if "/v1beta" in parsed_url.path:
|
46
46
|
api_version = "v1beta"
|
47
47
|
else:
|
@@ -1952,21 +1952,40 @@ async def get_embedding_payload(request, engine, provider, api_key=None):
|
|
1952
1952
|
headers = {
|
1953
1953
|
"Content-Type": "application/json",
|
1954
1954
|
}
|
1955
|
-
if api_key:
|
1956
|
-
headers['Authorization'] = f"Bearer {api_key}"
|
1957
|
-
url = provider['base_url']
|
1958
|
-
url = BaseAPI(url).embeddings
|
1959
1955
|
|
1960
|
-
|
1961
|
-
|
1962
|
-
|
1963
|
-
|
1956
|
+
url = provider['base_url']
|
1957
|
+
parsed_url = urlparse(url)
|
1958
|
+
if "embedding-00" in original_model and "127.0.0.1" not in url and \
|
1959
|
+
(parsed_url.path.endswith("/v1beta") or \
|
1960
|
+
parsed_url.path.endswith("/v1") or \
|
1961
|
+
(parsed_url.netloc == 'generativelanguage.googleapis.com' and "openai/chat/completions" not in parsed_url.path)):
|
1962
|
+
if api_key:
|
1963
|
+
headers['x-goog-api-key'] = f"{api_key}"
|
1964
|
+
parsed_url = urllib.parse.urlparse(url)
|
1965
|
+
url = f"{parsed_url.scheme}://{parsed_url.netloc}{parsed_url.path.split('/models')[0].rstrip('/')}/models/{original_model}:embedContent"
|
1966
|
+
payload = {
|
1967
|
+
"content": {
|
1968
|
+
"parts": [
|
1969
|
+
{
|
1970
|
+
"text": request.input
|
1971
|
+
}
|
1972
|
+
]
|
1973
|
+
}
|
1974
|
+
}
|
1975
|
+
else:
|
1976
|
+
if api_key:
|
1977
|
+
headers['Authorization'] = f"Bearer {api_key}"
|
1978
|
+
url = BaseAPI(url).embeddings
|
1979
|
+
payload = {
|
1980
|
+
"input": request.input,
|
1981
|
+
"model": original_model,
|
1982
|
+
}
|
1964
1983
|
|
1965
|
-
|
1966
|
-
|
1967
|
-
|
1968
|
-
|
1969
|
-
|
1984
|
+
if request.encoding_format:
|
1985
|
+
if url.startswith("https://api.jina.ai"):
|
1986
|
+
payload["embedding_type"] = request.encoding_format
|
1987
|
+
else:
|
1988
|
+
payload["encoding_format"] = request.encoding_format
|
1970
1989
|
|
1971
1990
|
return url, headers, payload
|
1972
1991
|
|
@@ -626,6 +626,28 @@ async def fetch_response(client, url, headers, payload, engine, model, timeout=2
|
|
626
626
|
response_json = await asyncio.to_thread(json.loads, response_bytes)
|
627
627
|
content = safe_get(response_json, "output", "choices", 0, "message", "content", 0, default=None)
|
628
628
|
yield content
|
629
|
+
|
630
|
+
elif "embedContent" in url:
|
631
|
+
response_bytes = await response.aread()
|
632
|
+
response_json = await asyncio.to_thread(json.loads, response_bytes)
|
633
|
+
content = safe_get(response_json, "embedding", "values", default=[])
|
634
|
+
response_embedContent = {
|
635
|
+
"object": "list",
|
636
|
+
"data": [
|
637
|
+
{
|
638
|
+
"object": "embedding",
|
639
|
+
"embedding":content,
|
640
|
+
"index": 0
|
641
|
+
}
|
642
|
+
],
|
643
|
+
"model": model,
|
644
|
+
"usage": {
|
645
|
+
"prompt_tokens": 0,
|
646
|
+
"total_tokens": 0
|
647
|
+
}
|
648
|
+
}
|
649
|
+
|
650
|
+
yield response_embedContent
|
629
651
|
else:
|
630
652
|
response_bytes = await response.aread()
|
631
653
|
response_json = await asyncio.to_thread(json.loads, response_bytes)
|
@@ -518,7 +518,7 @@ async def generate_sse_response(timestamp, model, content=None, tools_id=None, f
|
|
518
518
|
sample_data["choices"][0]["delta"] = {}
|
519
519
|
sample_data["choices"][0]["finish_reason"] = stop
|
520
520
|
|
521
|
-
json_data = json.dumps
|
521
|
+
json_data = await asyncio.to_thread(json.dumps, sample_data, ensure_ascii=False)
|
522
522
|
# print("json_data", json.dumps(sample_data, indent=4, ensure_ascii=False))
|
523
523
|
|
524
524
|
# 构建SSE响应
|
@@ -557,6 +557,9 @@ async def generate_no_stream_response(timestamp, model, content=None, tools_id=N
|
|
557
557
|
if function_call_name:
|
558
558
|
if not tools_id:
|
559
559
|
tools_id = f"call_{random_str}"
|
560
|
+
|
561
|
+
arguments_json = await asyncio.to_thread(json.dumps, function_call_content, ensure_ascii=False)
|
562
|
+
|
560
563
|
sample_data = {
|
561
564
|
"id": f"chatcmpl-{random_str}",
|
562
565
|
"object": "chat.completion",
|
@@ -574,7 +577,7 @@ async def generate_no_stream_response(timestamp, model, content=None, tools_id=N
|
|
574
577
|
"type": "function",
|
575
578
|
"function": {
|
576
579
|
"name": function_call_name,
|
577
|
-
"arguments":
|
580
|
+
"arguments": arguments_json
|
578
581
|
}
|
579
582
|
}
|
580
583
|
],
|
@@ -605,7 +608,7 @@ async def generate_no_stream_response(timestamp, model, content=None, tools_id=N
|
|
605
608
|
if total_tokens:
|
606
609
|
sample_data["usage"] = {"prompt_tokens": prompt_tokens, "completion_tokens": completion_tokens, "total_tokens": total_tokens}
|
607
610
|
|
608
|
-
json_data = json.dumps
|
611
|
+
json_data = await asyncio.to_thread(json.dumps, sample_data, ensure_ascii=False)
|
609
612
|
# print("json_data", json.dumps(sample_data, indent=4, ensure_ascii=False))
|
610
613
|
|
611
614
|
return json_data
|
@@ -37,6 +37,14 @@ class RateLimitError(Exception):
|
|
37
37
|
"""Custom exception for rate limit (429) errors."""
|
38
38
|
pass
|
39
39
|
|
40
|
+
class ConfigurationError(Exception):
|
41
|
+
"""Custom exception for configuration errors."""
|
42
|
+
pass
|
43
|
+
|
44
|
+
class RetryFailedError(Exception):
|
45
|
+
"""Custom exception for retry failures."""
|
46
|
+
pass
|
47
|
+
|
40
48
|
class TaskComplete(Exception):
|
41
49
|
"""Exception-like signal to indicate the task is complete."""
|
42
50
|
def __init__(self, message):
|
@@ -731,7 +739,7 @@ class chatgpt(BaseLLM):
|
|
731
739
|
need_done_prompt = False
|
732
740
|
|
733
741
|
# 发送请求并处理响应
|
734
|
-
for i in range(
|
742
|
+
for i in range(10):
|
735
743
|
tmp_post_json = copy.deepcopy(json_post)
|
736
744
|
if need_done_prompt:
|
737
745
|
tmp_post_json["messages"].extend(need_done_prompt)
|
@@ -789,8 +797,8 @@ class chatgpt(BaseLLM):
|
|
789
797
|
|
790
798
|
# 成功处理,跳出重试循环
|
791
799
|
break
|
792
|
-
except (httpx.ConnectError, httpx.ReadTimeout):
|
793
|
-
self.logger.error("
|
800
|
+
except (httpx.ConnectError, httpx.ReadTimeout, httpx.PoolTimeout):
|
801
|
+
self.logger.error("Connection or read timeout.")
|
794
802
|
return # Stop iteration
|
795
803
|
except httpx.RemoteProtocolError:
|
796
804
|
continue
|
@@ -820,10 +828,10 @@ class chatgpt(BaseLLM):
|
|
820
828
|
self.logger.error(traceback.format_exc())
|
821
829
|
if "Invalid URL" in str(e):
|
822
830
|
error_message = "您输入了无效的API URL,请使用正确的URL并使用`/start`命令重新设置API URL。具体错误如下:\n\n" + str(e)
|
823
|
-
raise
|
831
|
+
raise ConfigurationError(error_message)
|
824
832
|
# 最后一次重试失败,向上抛出异常
|
825
|
-
if i ==
|
826
|
-
raise
|
833
|
+
if i == 10:
|
834
|
+
raise RetryFailedError(str(e))
|
827
835
|
|
828
836
|
def ask_stream(
|
829
837
|
self,
|
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
|
{beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/arduino-tags.scm
RENAMED
File without changes
|
File without changes
|
{beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/chatito-tags.scm
RENAMED
File without changes
|
{beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/commonlisp-tags.scm
RENAMED
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
|
{beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/javascript-tags.scm
RENAMED
File without changes
|
File without changes
|
File without changes
|
{beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/properties-tags.scm
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{beswarm-0.2.64 → beswarm-0.2.66}/beswarm/queries/tree-sitter-language-pack/solidity-tags.scm
RENAMED
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
|