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 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 "\n" in buffer:
124
- line, buffer = buffer.split("\n", 1)
123
+ # 处理 buffer 中的内容
124
+ while buffer:
125
+ print("while buffer", buffer)
125
126
  if not in_json_block:
126
- if line.strip().lower().startswith("```json"):
127
- if text_content:
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
- text_content += line + "\n"
141
+ # 如果没有找到 JSON 代码块,继续累积到 text_content
142
+ text_content += buffer
143
+ buffer = ""
133
144
  else:
134
- if line.strip().lower().startswith("```") and in_json_block:
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
- json_block_content += line + "\n"
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
- if text_content:
158
- yield ("text", text_content.strip())
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(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: pycoze
3
- Version: 0.1.411
3
+ Version: 0.1.413
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=yj9uyE6TcPWycNwAhldbrTdwMOazljTmqewU7UHyVQM,10315
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.411.dist-info/LICENSE,sha256=QStd_Qsd0-kAam_-sOesCIp_uKrGWeoKwt9M49NVkNU,1090
36
- pycoze-0.1.411.dist-info/METADATA,sha256=oPl20z_YBtyyl4BNj_2TKExdlUDP4pAn-t-nX8t0CNE,854
37
- pycoze-0.1.411.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
38
- pycoze-0.1.411.dist-info/top_level.txt,sha256=76dPeDhKvOCleL3ZC5gl1-y4vdS1tT_U1hxWVAn7sFo,7
39
- pycoze-0.1.411.dist-info/RECORD,,
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,,