tech-envision commited on
Commit
258e41b
·
1 Parent(s): 8828dae

Modify tool response handling

Browse files
Files changed (2) hide show
  1. src/chat.py +22 -3
  2. src/vm.py +0 -1
src/chat.py CHANGED
@@ -161,6 +161,19 @@ class ChatSession:
161
  # return ChatSession._serialize_tool_calls(message.tool_calls)
162
  return message.content or ""
163
 
 
 
 
 
 
 
 
 
 
 
 
 
 
164
  @staticmethod
165
  def _store_assistant_message(conversation: Conversation, message: Message) -> None:
166
  """Persist assistant messages, storing tool calls when present."""
@@ -225,9 +238,12 @@ class ChatSession:
225
  execute_terminal_async(**call.function.arguments)
226
  )
227
 
228
- placeholder = {"role": "assistant", "content": "Awaiting tool response..."}
 
 
 
 
229
  messages.append(placeholder)
230
- yield ChatResponse(message=Message(**placeholder))
231
 
232
  follow_task = asyncio.create_task(self.ask(messages, think=True))
233
 
@@ -246,7 +262,7 @@ class ChatSession:
246
  await follow_task
247
  except asyncio.CancelledError:
248
  pass
249
- messages.pop() # remove placeholder
250
  result = await exec_task
251
  messages.append(
252
  {
@@ -274,6 +290,7 @@ class ChatSession:
274
  messages.append(followup.message.model_dump())
275
  yield followup
276
  result = await exec_task
 
277
  messages.append(
278
  {
279
  "role": "tool",
@@ -344,6 +361,7 @@ class ChatSession:
344
  await user_task
345
  except asyncio.CancelledError:
346
  pass
 
347
  result = await exec_task
348
  self._tool_task = None
349
  self._messages.append(
@@ -377,6 +395,7 @@ class ChatSession:
377
  yield text
378
  result = await exec_task
379
  self._tool_task = None
 
380
  self._messages.append(
381
  {"role": "tool", "name": "execute_terminal", "content": result}
382
  )
 
161
  # return ChatSession._serialize_tool_calls(message.tool_calls)
162
  return message.content or ""
163
 
164
+ @staticmethod
165
+ def _remove_tool_placeholder(messages: List[Msg]) -> None:
166
+ """Remove the pending placeholder tool message if present."""
167
+
168
+ for i in range(len(messages) - 1, -1, -1):
169
+ msg = messages[i]
170
+ if (
171
+ msg.get("role") == "tool"
172
+ and msg.get("content") == "Awaiting tool response..."
173
+ ):
174
+ messages.pop(i)
175
+ break
176
+
177
  @staticmethod
178
  def _store_assistant_message(conversation: Conversation, message: Message) -> None:
179
  """Persist assistant messages, storing tool calls when present."""
 
238
  execute_terminal_async(**call.function.arguments)
239
  )
240
 
241
+ placeholder = {
242
+ "role": "tool",
243
+ "name": call.function.name,
244
+ "content": "Awaiting tool response...",
245
+ }
246
  messages.append(placeholder)
 
247
 
248
  follow_task = asyncio.create_task(self.ask(messages, think=True))
249
 
 
262
  await follow_task
263
  except asyncio.CancelledError:
264
  pass
265
+ self._remove_tool_placeholder(messages)
266
  result = await exec_task
267
  messages.append(
268
  {
 
290
  messages.append(followup.message.model_dump())
291
  yield followup
292
  result = await exec_task
293
+ self._remove_tool_placeholder(messages)
294
  messages.append(
295
  {
296
  "role": "tool",
 
361
  await user_task
362
  except asyncio.CancelledError:
363
  pass
364
+ self._remove_tool_placeholder(self._messages)
365
  result = await exec_task
366
  self._tool_task = None
367
  self._messages.append(
 
395
  yield text
396
  result = await exec_task
397
  self._tool_task = None
398
+ self._remove_tool_placeholder(self._messages)
399
  self._messages.append(
400
  {"role": "tool", "name": "execute_terminal", "content": result}
401
  )
src/vm.py CHANGED
@@ -3,7 +3,6 @@ from __future__ import annotations
3
  import subprocess
4
  import asyncio
5
  from functools import partial
6
- import uuid
7
  from pathlib import Path
8
 
9
  from threading import Lock
 
3
  import subprocess
4
  import asyncio
5
  from functools import partial
 
6
  from pathlib import Path
7
 
8
  from threading import Lock