pycoze 0.1.429__py3-none-any.whl → 0.1.430__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 -38
- {pycoze-0.1.429.dist-info → pycoze-0.1.430.dist-info}/METADATA +1 -1
- {pycoze-0.1.429.dist-info → pycoze-0.1.430.dist-info}/RECORD +6 -6
- {pycoze-0.1.429.dist-info → pycoze-0.1.430.dist-info}/LICENSE +0 -0
- {pycoze-0.1.429.dist-info → pycoze-0.1.430.dist-info}/WHEEL +0 -0
- {pycoze-0.1.429.dist-info → pycoze-0.1.430.dist-info}/top_level.txt +0 -0
pycoze/bot/chat_base.py
CHANGED
@@ -99,41 +99,43 @@ class BufferProcessor:
|
|
99
99
|
处理 buffer 中的内容,并返回生成的内容类型和内容。
|
100
100
|
返回格式为 (type, content),其中 type 可以是 "text" 或 "json"。
|
101
101
|
"""
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
self.
|
116
|
-
|
117
|
-
else:
|
118
|
-
# 如果没有找到 JSON 代码块,继续累积到 text_content
|
119
|
-
self.text_content += self.buffer
|
120
|
-
self.buffer = ""
|
102
|
+
if not self.in_json_block:
|
103
|
+
# 查找 JSON 代码块的起始标记
|
104
|
+
json_start_match = re.search(r"```json", self.buffer, re.IGNORECASE)
|
105
|
+
if json_start_match:
|
106
|
+
# 提取 JSON 代码块之前的文本
|
107
|
+
self.text_content += self.buffer[:json_start_match.start()]
|
108
|
+
# 进入 JSON 代码块模式
|
109
|
+
self.in_json_block = True
|
110
|
+
self.buffer = self.buffer[json_start_match.end():]
|
111
|
+
# 如果 text_content 不为空,先 yield 文本
|
112
|
+
if self.text_content.strip():
|
113
|
+
# results.append(("text", self.text_content.strip()))
|
114
|
+
self.text_content = ""
|
115
|
+
return ("text", self.text_content.strip())
|
116
|
+
|
121
117
|
else:
|
122
|
-
#
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
118
|
+
# 如果没有找到 JSON 代码块,继续累积到 text_content
|
119
|
+
self.text_content += self.buffer
|
120
|
+
self.buffer = ""
|
121
|
+
else:
|
122
|
+
# 查找 JSON 代码块的结束标记
|
123
|
+
json_end_match = re.search(r"```", self.buffer)
|
124
|
+
if json_end_match:
|
125
|
+
# 提取 JSON 代码块内容
|
126
|
+
self.json_block_content += self.buffer[:json_end_match.start()]
|
127
|
+
# yield JSON 代码块
|
128
|
+
self.in_json_block = False
|
129
|
+
self.buffer = self.buffer[json_end_match.end():]
|
130
|
+
json_block_content = self.json_block_content
|
131
|
+
self.json_block_content = ""
|
132
|
+
return ("json", json_block_content)
|
133
|
+
|
134
|
+
else:
|
135
|
+
# 如果没有找到结束标记,继续累积 JSON 内容
|
136
|
+
self.json_block_content += self.buffer
|
137
|
+
self.buffer = ""
|
138
|
+
return None
|
137
139
|
|
138
140
|
def finalize(self):
|
139
141
|
"""
|
@@ -187,8 +189,8 @@ async def stream_openai_response(conversation_history, start_new_stream):
|
|
187
189
|
buffer_processor.buffer += chunk
|
188
190
|
|
189
191
|
if "\n" in chunk: # 不能数据不足时就解析,不然会解析出错,例如```json就不能解析为```和json
|
190
|
-
|
191
|
-
|
192
|
+
result = buffer_processor.process_buffer()
|
193
|
+
if result:
|
192
194
|
yield result
|
193
195
|
|
194
196
|
# 如果流正常结束,退出 while 循环
|
@@ -198,8 +200,9 @@ async def stream_openai_response(conversation_history, start_new_stream):
|
|
198
200
|
# 捕获其他异常(如网络错误)
|
199
201
|
print(f"Error: {e}", style="bold red")
|
200
202
|
break
|
201
|
-
|
202
|
-
|
203
|
+
|
204
|
+
while buffer_processor.buffer:
|
205
|
+
result = buffer_processor.process_buffer():
|
203
206
|
print("final process result", result)
|
204
207
|
yield result
|
205
208
|
|
@@ -11,7 +11,7 @@ pycoze/api/lib/web.py,sha256=gR2Ffaj3Pk4NfnE314UTLfZm7rW_rizZxWVDcZMeFgs,382
|
|
11
11
|
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
|
-
pycoze/bot/chat_base.py,sha256=
|
14
|
+
pycoze/bot/chat_base.py,sha256=Z6clLPWkfpbmwcOzWgtctBnurmr9Cn-o4eyhk7UWg6c,12541
|
15
15
|
pycoze/bot/lib.py,sha256=_bQ52mKsWgFGAogFHnmRBJbvK_tPOwsAJ8NqJNMR5K4,7210
|
16
16
|
pycoze/bot/message.py,sha256=udnIi-h4QgGzkbr_5VcAsVGjoLp9wXJSfBCeuOz7_Bk,802
|
17
17
|
pycoze/bot/prompt.md,sha256=t7NQdiiNe-jCDVfeVbvTPfq5WK5nF8CxFUQUFMyXJlo,13880
|
@@ -31,8 +31,8 @@ pycoze/utils/arg.py,sha256=jop1tBfe5hYkHW1NSpCeaZBEznkgguBscj_7M2dWfrs,503
|
|
31
31
|
pycoze/utils/env.py,sha256=5pWlXfM1F5ZU9hhv1rHlDEanjEW5wf0nbyez9bNRqqA,559
|
32
32
|
pycoze/utils/socket.py,sha256=bZbFFRH4mfThzRqt55BAAGQ6eICx_ja4x8UGGrUdAm8,2428
|
33
33
|
pycoze/utils/text_or_file.py,sha256=gpxZVWt2DW6YiEg_MnMuwg36VNf3TX383QD_1oZNB0Y,551
|
34
|
-
pycoze-0.1.
|
35
|
-
pycoze-0.1.
|
36
|
-
pycoze-0.1.
|
37
|
-
pycoze-0.1.
|
38
|
-
pycoze-0.1.
|
34
|
+
pycoze-0.1.430.dist-info/LICENSE,sha256=QStd_Qsd0-kAam_-sOesCIp_uKrGWeoKwt9M49NVkNU,1090
|
35
|
+
pycoze-0.1.430.dist-info/METADATA,sha256=wbcBCmnMeUAVS0nhshQLYFcHIiPCZEG8pYU-19oHvEg,854
|
36
|
+
pycoze-0.1.430.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
37
|
+
pycoze-0.1.430.dist-info/top_level.txt,sha256=76dPeDhKvOCleL3ZC5gl1-y4vdS1tT_U1hxWVAn7sFo,7
|
38
|
+
pycoze-0.1.430.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|