pycoze 0.1.410__py3-none-any.whl → 0.1.412__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 +43 -13
- {pycoze-0.1.410.dist-info → pycoze-0.1.412.dist-info}/METADATA +1 -1
- {pycoze-0.1.410.dist-info → pycoze-0.1.412.dist-info}/RECORD +6 -6
- {pycoze-0.1.410.dist-info → pycoze-0.1.412.dist-info}/LICENSE +0 -0
- {pycoze-0.1.410.dist-info → pycoze-0.1.412.dist-info}/WHEEL +0 -0
- {pycoze-0.1.410.dist-info → pycoze-0.1.412.dist-info}/top_level.txt +0 -0
pycoze/bot/chat_base.py
CHANGED
@@ -111,31 +111,51 @@ async def stream_openai_response(conversation_history, start_new_stream):
|
|
111
111
|
# 使用 async for 迭代异步生成器
|
112
112
|
try:
|
113
113
|
async for chunk in stream:
|
114
|
-
info("assistant", chunk)
|
115
|
-
buffer += chunk
|
116
114
|
|
117
115
|
# 检查是否需要重新创建流
|
118
116
|
if start_new_stream["value"]:
|
119
117
|
break # 退出当前的 async for 循环,进入下一次 while 循环
|
120
118
|
|
121
|
-
|
122
|
-
|
123
|
-
|
119
|
+
info("assistant", chunk)
|
120
|
+
buffer += chunk
|
121
|
+
|
122
|
+
# 处理 buffer 中的内容
|
123
|
+
while buffer:
|
124
|
+
print("while buffer", buffer)
|
124
125
|
if not in_json_block:
|
125
|
-
|
126
|
-
|
126
|
+
# 查找 JSON 代码块的起始标记
|
127
|
+
json_start_match = re.search(r"```json", buffer, re.IGNORECASE)
|
128
|
+
if json_start_match:
|
129
|
+
# 提取 JSON 代码块之前的文本
|
130
|
+
text_content += buffer[:json_start_match.start()]
|
131
|
+
# 如果 text_content 不为空,先 yield 文本
|
132
|
+
if text_content.strip():
|
133
|
+
print("yield text", text_content.strip())
|
127
134
|
yield ("text", text_content.strip())
|
128
135
|
text_content = ""
|
136
|
+
# 进入 JSON 代码块模式
|
129
137
|
in_json_block = True
|
138
|
+
buffer = buffer[json_start_match.end():]
|
130
139
|
else:
|
131
|
-
|
140
|
+
# 如果没有找到 JSON 代码块,继续累积到 text_content
|
141
|
+
text_content += buffer
|
142
|
+
buffer = ""
|
132
143
|
else:
|
133
|
-
|
144
|
+
# 查找 JSON 代码块的结束标记
|
145
|
+
json_end_match = re.search(r"```", buffer)
|
146
|
+
if json_end_match:
|
147
|
+
# 提取 JSON 代码块内容
|
148
|
+
json_block_content += buffer[:json_end_match.start()]
|
149
|
+
# yield JSON 代码块
|
150
|
+
print("yield json", json_block_content.strip())
|
134
151
|
yield ("json", json_block_content.strip())
|
135
152
|
json_block_content = ""
|
136
153
|
in_json_block = False
|
154
|
+
buffer = buffer[json_end_match.end():]
|
137
155
|
else:
|
138
|
-
|
156
|
+
# 如果没有找到结束标记,继续累积 JSON 内容
|
157
|
+
json_block_content += buffer
|
158
|
+
buffer = ""
|
139
159
|
|
140
160
|
# 如果流正常结束,退出 while 循环
|
141
161
|
break
|
@@ -150,11 +170,21 @@ async def stream_openai_response(conversation_history, start_new_stream):
|
|
150
170
|
if in_json_block:
|
151
171
|
buffer = buffer.split("```")[0]
|
152
172
|
json_block_content += buffer
|
153
|
-
yield ("json", json_block_content.strip())
|
154
173
|
else:
|
155
174
|
text_content += buffer
|
156
|
-
|
157
|
-
|
175
|
+
|
176
|
+
# 处理流结束后的剩余内容
|
177
|
+
if in_json_block:
|
178
|
+
# 如果仍在 JSON 代码块模式,处理剩余的 JSON 内容
|
179
|
+
if json_block_content.strip():
|
180
|
+
print("yield json", json_block_content.strip())
|
181
|
+
yield ("json", json_block_content.strip())
|
182
|
+
else:
|
183
|
+
# 如果不在 JSON 代码块模式,处理剩余的文本内容
|
184
|
+
if text_content.strip():
|
185
|
+
print("yield json", text_content.strip())
|
186
|
+
yield ("text", text_content.strip())
|
187
|
+
|
158
188
|
|
159
189
|
|
160
190
|
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=Kd2SoXLK4Qmm_MCvxs714Sk9TZ2OPYutTJMdLQhUAg0,11905
|
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.412.dist-info/LICENSE,sha256=QStd_Qsd0-kAam_-sOesCIp_uKrGWeoKwt9M49NVkNU,1090
|
36
|
+
pycoze-0.1.412.dist-info/METADATA,sha256=dL4nQEwr0ah73-t0GLzZO7_aoRCErRF7JhoVYoZHg7g,854
|
37
|
+
pycoze-0.1.412.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
38
|
+
pycoze-0.1.412.dist-info/top_level.txt,sha256=76dPeDhKvOCleL3ZC5gl1-y4vdS1tT_U1hxWVAn7sFo,7
|
39
|
+
pycoze-0.1.412.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|