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 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
- # 处理 buffer 中的每一行
122
- while "\n" in buffer:
123
- line, buffer = buffer.split("\n", 1)
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
- if line.strip().lower().startswith("```json"):
126
- if text_content:
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
- text_content += line + "\n"
140
+ # 如果没有找到 JSON 代码块,继续累积到 text_content
141
+ text_content += buffer
142
+ buffer = ""
132
143
  else:
133
- if line.strip().lower().startswith("```") and in_json_block:
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
- json_block_content += line + "\n"
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
- if text_content:
157
- yield ("text", text_content.strip())
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(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: pycoze
3
- Version: 0.1.410
3
+ Version: 0.1.412
4
4
  Summary: Package for pycoze only!
5
5
  Author: Yuan Jie Xiong
6
6
  Author-email: aiqqqqqqq@qq.com
@@ -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=u2TDvXwtxcboXq8zixck1A6HHgQ1kDEMXFMON--fBLM,10314
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.410.dist-info/LICENSE,sha256=QStd_Qsd0-kAam_-sOesCIp_uKrGWeoKwt9M49NVkNU,1090
36
- pycoze-0.1.410.dist-info/METADATA,sha256=yZLpsyYmHf2ajNHg1Wz6CaIocYvs91QLKYLE_5MdZDY,854
37
- pycoze-0.1.410.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
38
- pycoze-0.1.410.dist-info/top_level.txt,sha256=76dPeDhKvOCleL3ZC5gl1-y4vdS1tT_U1hxWVAn7sFo,7
39
- pycoze-0.1.410.dist-info/RECORD,,
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,,