avsolatorio commited on
Commit
e8809f1
·
1 Parent(s): 8362096

Implement proper buffering of the output

Browse files

Signed-off-by: Aivin V. Solatorio <avsolatorio@gmail.com>

Files changed (1) hide show
  1. mcp_openai_client.py +27 -10
mcp_openai_client.py CHANGED
@@ -65,6 +65,7 @@ When responding you must always plan the steps and enumerate all the tools that
65
  - Present the data in clear, user-friendly language.
66
  - You may summarize or explain the data retrieved, but do **not** elaborate based on outside or implicit knowledge.
67
  - You may describe the data in a way that is easy to understand but you MUST NOT elaborate based on external knowledge.
 
68
 
69
  6. **Presentation**:
70
  - Present the data in a way that is easy to understand.
@@ -215,18 +216,21 @@ class MCPClientWrapper:
215
  }
216
  )
217
  messages[-1]["content"] += partial[-1]["delta"]
218
- elif partial[-1].get("response_id"):
219
- previous_response_id = partial[-1]["response_id"]
220
- yield (
221
- messages,
222
- gr.Textbox(value=""),
223
- gr.Textbox(value=previous_response_id),
224
- )
225
- await asyncio.sleep(0.01)
226
- continue
227
  else:
228
  is_delta = False
229
- messages.extend(partial)
 
 
 
 
 
 
 
 
 
 
230
  print(partial)
231
 
232
  yield (
@@ -378,6 +382,19 @@ class MCPClientWrapper:
378
  is_tool_call = False
379
  tool_name = None
380
  tool_args = None
 
 
 
 
 
 
 
 
 
 
 
 
 
381
  elif isinstance(event, ResponseTextDeltaEvent):
382
  yield [{"role": "assistant", "content": None, "delta": event.delta}]
383
 
 
65
  - Present the data in clear, user-friendly language.
66
  - You may summarize or explain the data retrieved, but do **not** elaborate based on outside or implicit knowledge.
67
  - You may describe the data in a way that is easy to understand but you MUST NOT elaborate based on external knowledge.
68
+ - Provide summary of the answer in the last step describing some observations and insights solely based on the data.
69
 
70
  6. **Presentation**:
71
  - Present the data in a way that is easy to understand.
 
216
  }
217
  )
218
  messages[-1]["content"] += partial[-1]["delta"]
219
+ if partial[-1].get("status") == "done":
220
+ await asyncio.sleep(0.05)
 
 
 
 
 
 
 
221
  else:
222
  is_delta = False
223
+ if partial[-1].get("response_id"):
224
+ previous_response_id = partial[-1]["response_id"]
225
+ yield (
226
+ messages,
227
+ gr.Textbox(value=""),
228
+ gr.Textbox(value=previous_response_id),
229
+ )
230
+ await asyncio.sleep(0.01)
231
+ continue
232
+ else:
233
+ messages.extend(partial)
234
  print(partial)
235
 
236
  yield (
 
382
  is_tool_call = False
383
  tool_name = None
384
  tool_args = None
385
+
386
+ elif (
387
+ isinstance(event, ResponseContentPartDoneEvent)
388
+ and event.type == "response.content_part.done"
389
+ ):
390
+ yield [
391
+ {
392
+ "role": "assistant",
393
+ "content": "",
394
+ "delta": "",
395
+ "status": "done",
396
+ }
397
+ ]
398
  elif isinstance(event, ResponseTextDeltaEvent):
399
  yield [{"role": "assistant", "content": None, "delta": event.delta}]
400