pycoze 0.1.380__py3-none-any.whl → 0.1.382__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.
- pycoze/bot/chat.py +6 -1
- pycoze/bot/chat_base.py +22 -37
- {pycoze-0.1.380.dist-info → pycoze-0.1.382.dist-info}/METADATA +1 -1
- {pycoze-0.1.380.dist-info → pycoze-0.1.382.dist-info}/RECORD +7 -7
- {pycoze-0.1.380.dist-info → pycoze-0.1.382.dist-info}/LICENSE +0 -0
- {pycoze-0.1.380.dist-info → pycoze-0.1.382.dist-info}/WHEEL +0 -0
- {pycoze-0.1.380.dist-info → pycoze-0.1.382.dist-info}/top_level.txt +0 -0
pycoze/bot/chat.py
CHANGED
@@ -8,6 +8,8 @@ from pycoze import utils
|
|
8
8
|
import tempfile
|
9
9
|
import re
|
10
10
|
import datetime
|
11
|
+
from pathlib import Path
|
12
|
+
|
11
13
|
|
12
14
|
def eclipse_tool_result(text, threshold=100):
|
13
15
|
pattern = r'\[Tool Result Begin\](.*?)\[Tool Result End\]'
|
@@ -93,7 +95,10 @@ def chat(bot_setting_file: str):
|
|
93
95
|
abilities = get_abilities(bot_setting)
|
94
96
|
continuouslyRememberToolResults = bot_setting["continuouslyRememberToolResults"]
|
95
97
|
|
96
|
-
|
98
|
+
if bot_setting["specifiedWorkingDirectory"] is None:
|
99
|
+
cwd = tempfile.mkdtemp()
|
100
|
+
else:
|
101
|
+
cwd = Path(bot_setting["specifiedWorkingDirectory"]).as_posix()
|
97
102
|
system_prompt, has_any_tool = get_system_prompt(abilities, bot_setting)
|
98
103
|
conversation_history = [
|
99
104
|
{
|
pycoze/bot/chat_base.py
CHANGED
@@ -37,8 +37,7 @@ def user_task_prompt(conversation_history, cwd, user_input: str, programmer_mode
|
|
37
37
|
if content
|
38
38
|
else ""
|
39
39
|
)
|
40
|
-
return f"""
|
41
|
-
<task>
|
40
|
+
return f"""<task>
|
42
41
|
{user_input}
|
43
42
|
</task>
|
44
43
|
|
@@ -52,11 +51,14 @@ List of files under path:
|
|
52
51
|
|
53
52
|
</environment_details>
|
54
53
|
"""
|
54
|
+
|
55
55
|
else:
|
56
|
-
return f"""
|
57
|
-
<task>
|
56
|
+
return f"""<task>
|
58
57
|
{user_input}
|
59
58
|
</task>
|
59
|
+
<environment_details>
|
60
|
+
Current working directory: {cwd}
|
61
|
+
</environment_details>
|
60
62
|
"""
|
61
63
|
|
62
64
|
|
@@ -65,18 +67,6 @@ def dumps_markdown_json(data):
|
|
65
67
|
return f"\n```json\n{json_str}\n```\n"
|
66
68
|
|
67
69
|
|
68
|
-
def process_code_block(language: str, content: str):
|
69
|
-
"""
|
70
|
-
处理并清理代码块内容,返回格式化后的字符串
|
71
|
-
"""
|
72
|
-
if language and content:
|
73
|
-
# 清理代码块内容
|
74
|
-
cleaned_content = "\n".join(
|
75
|
-
line.strip() for line in content.split("\n") if line.strip()
|
76
|
-
)
|
77
|
-
return (language, cleaned_content)
|
78
|
-
return ""
|
79
|
-
|
80
70
|
|
81
71
|
async def stream_openai_response(conversation_history, start_new_stream):
|
82
72
|
"""
|
@@ -84,9 +74,8 @@ async def stream_openai_response(conversation_history, start_new_stream):
|
|
84
74
|
"""
|
85
75
|
stream = None
|
86
76
|
buffer = ""
|
87
|
-
|
88
|
-
|
89
|
-
code_block_content = ""
|
77
|
+
in_json_block = False
|
78
|
+
json_block_content = ""
|
90
79
|
text_content = ""
|
91
80
|
|
92
81
|
while True:
|
@@ -97,9 +86,8 @@ async def stream_openai_response(conversation_history, start_new_stream):
|
|
97
86
|
stream = chat_stream_async(conversation_history) # 获取新的异步生成器
|
98
87
|
start_new_stream["value"] = False # 重置标志
|
99
88
|
buffer = ""
|
100
|
-
|
101
|
-
|
102
|
-
code_block_content = ""
|
89
|
+
in_json_block = False
|
90
|
+
json_block_content = ""
|
103
91
|
text_content = ""
|
104
92
|
|
105
93
|
# 使用 async for 迭代异步生成器
|
@@ -115,24 +103,21 @@ async def stream_openai_response(conversation_history, start_new_stream):
|
|
115
103
|
# 处理 buffer 中的每一行
|
116
104
|
while "\n" in buffer:
|
117
105
|
line, buffer = buffer.split("\n", 1)
|
118
|
-
if not
|
119
|
-
if line.strip().startswith("```"):
|
106
|
+
if not in_json_block:
|
107
|
+
if line.strip().lower().startswith("```json"):
|
120
108
|
if text_content:
|
121
109
|
yield ("text", text_content.strip())
|
122
110
|
text_content = ""
|
123
|
-
|
124
|
-
code_block_language = line.strip()[3:].strip()
|
111
|
+
in_json_block = True
|
125
112
|
else:
|
126
113
|
text_content += line + "\n"
|
127
114
|
else:
|
128
|
-
if line.strip().startswith("```"):
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
)
|
133
|
-
code_block_content = ""
|
115
|
+
if line.strip().lower().startswith("```") and in_json_block:
|
116
|
+
yield ("json", json_block_content.strip())
|
117
|
+
json_block_content = ""
|
118
|
+
in_json_block = False
|
134
119
|
else:
|
135
|
-
|
120
|
+
json_block_content += line + "\n"
|
136
121
|
|
137
122
|
# 如果流正常结束,退出 while 循环
|
138
123
|
break
|
@@ -144,10 +129,10 @@ async def stream_openai_response(conversation_history, start_new_stream):
|
|
144
129
|
|
145
130
|
# 处理 buffer 中剩余的内容
|
146
131
|
if buffer:
|
147
|
-
if
|
132
|
+
if in_json_block:
|
148
133
|
buffer = buffer.split("```")[0]
|
149
|
-
|
150
|
-
yield
|
134
|
+
json_block_content += buffer
|
135
|
+
yield ("json", json_block_content.strip())
|
151
136
|
else:
|
152
137
|
text_content += buffer
|
153
138
|
if text_content:
|
@@ -189,7 +174,7 @@ async def handle_user_inputs(
|
|
189
174
|
):
|
190
175
|
if len(response) == 2:
|
191
176
|
if (
|
192
|
-
response[0]
|
177
|
+
response[0] == "text"
|
193
178
|
and response[1].strip() != ""
|
194
179
|
or (response[0] == "json" and not has_any_tool)
|
195
180
|
):
|
@@ -12,8 +12,8 @@ pycoze/api/lib/view.py,sha256=_PIpTfeuTPPlMDKshMGsqFQYMq7ZiO4Hg5XwHwDoU60,7357
|
|
12
12
|
pycoze/api/lib/web.py,sha256=GWgtiTJOolKOX2drXcwuyqTcbo5FQVxa1NuBGcNyjyc,223
|
13
13
|
pycoze/api/lib/window.py,sha256=bTkQCzQZ7i3pYXB70bUSTBNJ9C4TW_X3yMae1VkquGk,1944
|
14
14
|
pycoze/bot/__init__.py,sha256=rL3Q-ycczRpSFfKn84fg3QBl5k22WpyeIU5qOEjEby8,79
|
15
|
-
pycoze/bot/chat.py,sha256=
|
16
|
-
pycoze/bot/chat_base.py,sha256=
|
15
|
+
pycoze/bot/chat.py,sha256=VoYFhO-vYFeQIPbnUI6cRgVQTCihUcDLDK9HK2_VstI,5804
|
16
|
+
pycoze/bot/chat_base.py,sha256=abCJvqEtShQpARefTfRTIrKCohN78nWztb2MvX3R-tc,9714
|
17
17
|
pycoze/bot/lib.py,sha256=smigeWuhl8esHE-Y5l_9bpjJkEJ5OqrxTyPcO8JIubM,7224
|
18
18
|
pycoze/bot/message.py,sha256=udnIi-h4QgGzkbr_5VcAsVGjoLp9wXJSfBCeuOz7_Bk,802
|
19
19
|
pycoze/bot/prompt.md,sha256=OBxwUY6yiwEmusnUHhwixWYByrWX3BpwfxG_Gfas8UM,15783
|
@@ -33,8 +33,8 @@ pycoze/utils/arg.py,sha256=jop1tBfe5hYkHW1NSpCeaZBEznkgguBscj_7M2dWfrs,503
|
|
33
33
|
pycoze/utils/env.py,sha256=5pWlXfM1F5ZU9hhv1rHlDEanjEW5wf0nbyez9bNRqqA,559
|
34
34
|
pycoze/utils/socket.py,sha256=bZbFFRH4mfThzRqt55BAAGQ6eICx_ja4x8UGGrUdAm8,2428
|
35
35
|
pycoze/utils/text_or_file.py,sha256=gpxZVWt2DW6YiEg_MnMuwg36VNf3TX383QD_1oZNB0Y,551
|
36
|
-
pycoze-0.1.
|
37
|
-
pycoze-0.1.
|
38
|
-
pycoze-0.1.
|
39
|
-
pycoze-0.1.
|
40
|
-
pycoze-0.1.
|
36
|
+
pycoze-0.1.382.dist-info/LICENSE,sha256=QStd_Qsd0-kAam_-sOesCIp_uKrGWeoKwt9M49NVkNU,1090
|
37
|
+
pycoze-0.1.382.dist-info/METADATA,sha256=JrRAP5KhJiZflVCZhLideI9CF4blKLvYA0tqJa5OaTg,854
|
38
|
+
pycoze-0.1.382.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
39
|
+
pycoze-0.1.382.dist-info/top_level.txt,sha256=76dPeDhKvOCleL3ZC5gl1-y4vdS1tT_U1hxWVAn7sFo,7
|
40
|
+
pycoze-0.1.382.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|