pycoze 0.1.411__py3-none-any.whl → 0.1.413__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_base.py +41 -11
- {pycoze-0.1.411.dist-info → pycoze-0.1.413.dist-info}/METADATA +1 -1
- {pycoze-0.1.411.dist-info → pycoze-0.1.413.dist-info}/RECORD +6 -6
- {pycoze-0.1.411.dist-info → pycoze-0.1.413.dist-info}/LICENSE +0 -0
- {pycoze-0.1.411.dist-info → pycoze-0.1.413.dist-info}/WHEEL +0 -0
- {pycoze-0.1.411.dist-info → pycoze-0.1.413.dist-info}/top_level.txt +0 -0
pycoze/bot/chat_base.py
CHANGED
@@ -5,6 +5,7 @@ from .message import info
|
|
5
5
|
from pycoze.ai import chat_stream_async, extract
|
6
6
|
from .tools import ToolExecutor
|
7
7
|
from typing import List
|
8
|
+
import re
|
8
9
|
|
9
10
|
def guess_files_in_message(cwd: str, user_message: str) -> List[str]:
|
10
11
|
try:
|
@@ -119,24 +120,43 @@ async def stream_openai_response(conversation_history, start_new_stream):
|
|
119
120
|
info("assistant", chunk)
|
120
121
|
buffer += chunk
|
121
122
|
|
122
|
-
# 处理 buffer
|
123
|
-
while
|
124
|
-
|
123
|
+
# 处理 buffer 中的内容
|
124
|
+
while buffer:
|
125
|
+
print("while buffer", buffer)
|
125
126
|
if not in_json_block:
|
126
|
-
|
127
|
-
|
127
|
+
# 查找 JSON 代码块的起始标记
|
128
|
+
json_start_match = re.search(r"```json", buffer, re.IGNORECASE)
|
129
|
+
if json_start_match:
|
130
|
+
# 提取 JSON 代码块之前的文本
|
131
|
+
text_content += buffer[:json_start_match.start()]
|
132
|
+
# 如果 text_content 不为空,先 yield 文本
|
133
|
+
if text_content.strip():
|
134
|
+
print("yield text", text_content.strip())
|
128
135
|
yield ("text", text_content.strip())
|
129
136
|
text_content = ""
|
137
|
+
# 进入 JSON 代码块模式
|
130
138
|
in_json_block = True
|
139
|
+
buffer = buffer[json_start_match.end():]
|
131
140
|
else:
|
132
|
-
|
141
|
+
# 如果没有找到 JSON 代码块,继续累积到 text_content
|
142
|
+
text_content += buffer
|
143
|
+
buffer = ""
|
133
144
|
else:
|
134
|
-
|
145
|
+
# 查找 JSON 代码块的结束标记
|
146
|
+
json_end_match = re.search(r"```", buffer)
|
147
|
+
if json_end_match:
|
148
|
+
# 提取 JSON 代码块内容
|
149
|
+
json_block_content += buffer[:json_end_match.start()]
|
150
|
+
# yield JSON 代码块
|
151
|
+
print("yield json", json_block_content.strip())
|
135
152
|
yield ("json", json_block_content.strip())
|
136
153
|
json_block_content = ""
|
137
154
|
in_json_block = False
|
155
|
+
buffer = buffer[json_end_match.end():]
|
138
156
|
else:
|
139
|
-
|
157
|
+
# 如果没有找到结束标记,继续累积 JSON 内容
|
158
|
+
json_block_content += buffer
|
159
|
+
buffer = ""
|
140
160
|
|
141
161
|
# 如果流正常结束,退出 while 循环
|
142
162
|
break
|
@@ -151,11 +171,21 @@ async def stream_openai_response(conversation_history, start_new_stream):
|
|
151
171
|
if in_json_block:
|
152
172
|
buffer = buffer.split("```")[0]
|
153
173
|
json_block_content += buffer
|
154
|
-
yield ("json", json_block_content.strip())
|
155
174
|
else:
|
156
175
|
text_content += buffer
|
157
|
-
|
158
|
-
|
176
|
+
|
177
|
+
# 处理流结束后的剩余内容
|
178
|
+
if in_json_block:
|
179
|
+
# 如果仍在 JSON 代码块模式,处理剩余的 JSON 内容
|
180
|
+
if json_block_content.strip():
|
181
|
+
print("yield json", json_block_content.strip())
|
182
|
+
yield ("json", json_block_content.strip())
|
183
|
+
else:
|
184
|
+
# 如果不在 JSON 代码块模式,处理剩余的文本内容
|
185
|
+
if text_content.strip():
|
186
|
+
print("yield json", text_content.strip())
|
187
|
+
yield ("text", text_content.strip())
|
188
|
+
|
159
189
|
|
160
190
|
|
161
191
|
async def handle_user_inputs(
|
@@ -12,7 +12,7 @@ pycoze/api/lib/window.py,sha256=dkzWfLwn5pE_L0DfQ38K8nx9tQyT5KO-GYyXi0rytFc,2073
|
|
12
12
|
pycoze/bot/__init__.py,sha256=rL3Q-ycczRpSFfKn84fg3QBl5k22WpyeIU5qOEjEby8,79
|
13
13
|
pycoze/bot/chat.py,sha256=qEuMxH0cVFU9QSU36FrOsjhRAxtsvOv7CQtuXvM3F6Y,6446
|
14
14
|
pycoze/bot/chat_base copy.py,sha256=WZRB08zN4OeYAjSxccgu69Jb-k8tfbNwskqi5LmBF20,11979
|
15
|
-
pycoze/bot/chat_base.py,sha256=
|
15
|
+
pycoze/bot/chat_base.py,sha256=AMcVMxCGT4N2BO9FMI22Ts82KxdeLkRTUD0T-ZtetEc,11915
|
16
16
|
pycoze/bot/lib.py,sha256=_bQ52mKsWgFGAogFHnmRBJbvK_tPOwsAJ8NqJNMR5K4,7210
|
17
17
|
pycoze/bot/message.py,sha256=udnIi-h4QgGzkbr_5VcAsVGjoLp9wXJSfBCeuOz7_Bk,802
|
18
18
|
pycoze/bot/prompt.md,sha256=t7NQdiiNe-jCDVfeVbvTPfq5WK5nF8CxFUQUFMyXJlo,13880
|
@@ -32,8 +32,8 @@ pycoze/utils/arg.py,sha256=jop1tBfe5hYkHW1NSpCeaZBEznkgguBscj_7M2dWfrs,503
|
|
32
32
|
pycoze/utils/env.py,sha256=5pWlXfM1F5ZU9hhv1rHlDEanjEW5wf0nbyez9bNRqqA,559
|
33
33
|
pycoze/utils/socket.py,sha256=bZbFFRH4mfThzRqt55BAAGQ6eICx_ja4x8UGGrUdAm8,2428
|
34
34
|
pycoze/utils/text_or_file.py,sha256=gpxZVWt2DW6YiEg_MnMuwg36VNf3TX383QD_1oZNB0Y,551
|
35
|
-
pycoze-0.1.
|
36
|
-
pycoze-0.1.
|
37
|
-
pycoze-0.1.
|
38
|
-
pycoze-0.1.
|
39
|
-
pycoze-0.1.
|
35
|
+
pycoze-0.1.413.dist-info/LICENSE,sha256=QStd_Qsd0-kAam_-sOesCIp_uKrGWeoKwt9M49NVkNU,1090
|
36
|
+
pycoze-0.1.413.dist-info/METADATA,sha256=pm_Vm50SG6OrA1ZZuSX3hrV28GkT8-mm9RlQuZ6flI4,854
|
37
|
+
pycoze-0.1.413.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
38
|
+
pycoze-0.1.413.dist-info/top_level.txt,sha256=76dPeDhKvOCleL3ZC5gl1-y4vdS1tT_U1hxWVAn7sFo,7
|
39
|
+
pycoze-0.1.413.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|