vision-agent 0.2.143__py3-none-any.whl → 0.2.144__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.
@@ -30,6 +30,12 @@ WORKSPACE.mkdir(parents=True, exist_ok=True)
30
30
  if str(WORKSPACE) != "":
31
31
  os.environ["PYTHONPATH"] = f"{WORKSPACE}:{os.getenv('PYTHONPATH', '')}"
32
32
 
33
+ STUCK_IN_LOOP_ERROR_MESSAGE = {
34
+ "name": "Error when running conversation agent",
35
+ "value": "Agent is stuck in conversation loop, exited",
36
+ "traceback_raw": [],
37
+ }
38
+
33
39
 
34
40
  class BoilerplateCode:
35
41
  pre_code = [
@@ -229,7 +235,7 @@ class VisionAgent(Agent):
229
235
  ) as code_interpreter:
230
236
  orig_chat = copy.deepcopy(chat)
231
237
  int_chat = copy.deepcopy(chat)
232
- last_user_message_content = chat[-1].get("content")
238
+ last_user_message = chat[-1]
233
239
  media_list = []
234
240
  for chat_i in int_chat:
235
241
  if "media" in chat_i:
@@ -278,32 +284,9 @@ class VisionAgent(Agent):
278
284
  orig_chat.append({"role": "observation", "content": artifacts_loaded})
279
285
  self.streaming_message({"role": "observation", "content": artifacts_loaded})
280
286
 
281
- if int_chat[-1]["role"] == "user":
282
- last_user_message_content = cast(str, int_chat[-1].get("content", ""))
283
- user_code_action = parse_execution(last_user_message_content, False)
284
- if user_code_action is not None:
285
- user_result, user_obs = run_code_action(
286
- user_code_action, code_interpreter, str(remote_artifacts_path)
287
- )
288
- if self.verbosity >= 1:
289
- _LOGGER.info(user_obs)
290
- int_chat.append({"role": "observation", "content": user_obs})
291
- orig_chat.append(
292
- {
293
- "role": "observation",
294
- "content": user_obs,
295
- "execution": user_result,
296
- }
297
- )
298
- self.streaming_message(
299
- {
300
- "role": "observation",
301
- "content": user_obs,
302
- "execution": user_result,
303
- "finished": True,
304
- }
305
- )
306
- finished = True
287
+ finished = self.execute_user_code_action(
288
+ last_user_message, code_interpreter, remote_artifacts_path
289
+ )
307
290
 
308
291
  while not finished and iterations < self.max_iterations:
309
292
  response = run_conversation(self.agent, int_chat)
@@ -316,10 +299,12 @@ class VisionAgent(Agent):
316
299
  if last_response == response:
317
300
  response["let_user_respond"] = True
318
301
  self.streaming_message(
319
- {"role": "assistant", "error": "Stuck in loop"}
302
+ {
303
+ "role": "assistant",
304
+ "content": "{}",
305
+ "error": STUCK_IN_LOOP_ERROR_MESSAGE,
306
+ }
320
307
  )
321
- else:
322
- self.streaming_message({"role": "assistant", "content": response})
323
308
 
324
309
  finished = response["let_user_respond"]
325
310
 
@@ -327,6 +312,24 @@ class VisionAgent(Agent):
327
312
  response["response"], test_multi_plan, customized_tool_names
328
313
  )
329
314
 
315
+ if last_response == response:
316
+ self.streaming_message(
317
+ {
318
+ "role": "assistant",
319
+ "content": "{}",
320
+ "error": STUCK_IN_LOOP_ERROR_MESSAGE,
321
+ "finished": finished and code_action is None,
322
+ }
323
+ )
324
+ else:
325
+ self.streaming_message(
326
+ {
327
+ "role": "assistant",
328
+ "content": response,
329
+ "finished": finished and code_action is None,
330
+ }
331
+ )
332
+
330
333
  if code_action is not None:
331
334
  result, obs = run_code_action(
332
335
  code_action, code_interpreter, str(remote_artifacts_path)
@@ -353,6 +356,7 @@ class VisionAgent(Agent):
353
356
  "role": "observation",
354
357
  "content": obs,
355
358
  "execution": result,
359
+ "finished": finished,
356
360
  }
357
361
  )
358
362
 
@@ -367,6 +371,34 @@ class VisionAgent(Agent):
367
371
  artifacts.save()
368
372
  return orig_chat, artifacts
369
373
 
374
+ def execute_user_code_action(
375
+ self,
376
+ last_user_message: Message,
377
+ code_interpreter: CodeInterpreter,
378
+ remote_artifacts_path: Path,
379
+ ) -> bool:
380
+ if last_user_message["role"] != "user":
381
+ return False
382
+ user_code_action = parse_execution(
383
+ cast(str, last_user_message.get("content", "")), False
384
+ )
385
+ if user_code_action is not None:
386
+ user_result, user_obs = run_code_action(
387
+ user_code_action, code_interpreter, str(remote_artifacts_path)
388
+ )
389
+ if self.verbosity >= 1:
390
+ _LOGGER.info(user_obs)
391
+ self.streaming_message(
392
+ {
393
+ "role": "observation",
394
+ "content": user_obs,
395
+ "execution": user_result,
396
+ "finished": True,
397
+ }
398
+ )
399
+ return True
400
+ return False
401
+
370
402
  def streaming_message(self, message: Dict[str, Any]) -> None:
371
403
  if self.callback_message:
372
404
  self.callback_message(message)
@@ -425,6 +425,7 @@ def edit_vision_code(
425
425
 
426
426
  agent = va.agent.VisionAgentCoder()
427
427
  if name not in artifacts:
428
+ print(f"[Artifact {name} does not exist]")
428
429
  return f"[Artifact {name} does not exist]"
429
430
 
430
431
  code = artifacts[name]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vision-agent
3
- Version: 0.2.143
3
+ Version: 0.2.144
4
4
  Summary: Toolset for Vision Agent
5
5
  Author: Landing AI
6
6
  Author-email: dev@landing.ai
@@ -2,7 +2,7 @@ vision_agent/__init__.py,sha256=EAb4-f9iyuEYkBrX4ag1syM8Syx8118_t0R6_C34M9w,57
2
2
  vision_agent/agent/__init__.py,sha256=NF2LABqHixLvbsOIO-fe-VKZ7awvShLtcT0oQT4eWtI,235
3
3
  vision_agent/agent/agent.py,sha256=2cjIOxEuSJrqbfPXYoV0qER5ihXsPFCoEFJa4jpqan0,597
4
4
  vision_agent/agent/agent_utils.py,sha256=PEUHqvnHmFL4np_TeFmKMwr5s_dWfdfJz6TF_ogd1dU,2353
5
- vision_agent/agent/vision_agent.py,sha256=k1bUmvoz0KjVEu62PYA9djnq3pqzv2S1UsW6gLnTd7w,17023
5
+ vision_agent/agent/vision_agent.py,sha256=WW0vtu8EFp7sFmU8z5_GDEduMOh9e0y4R3ZDiFDYJmM,17812
6
6
  vision_agent/agent/vision_agent_coder.py,sha256=4bbebV1sKE10vsxcZR-R8P54X2HjLeU9lDt7ylIZAT4,38429
7
7
  vision_agent/agent/vision_agent_coder_prompts.py,sha256=YWK4C--YRS1Kuab11Gn-AXBzar1j_GNnTnxi_nnaPRY,14901
8
8
  vision_agent/agent/vision_agent_prompts.py,sha256=e_ASPeRFU1yZsQhCkK_bIBG-eyIWyWXmN64lFk-r7e0,10897
@@ -15,7 +15,7 @@ vision_agent/lmm/__init__.py,sha256=jyY1sJb_tYKg5-Wzs3p1lvwFkc-aUNZfMcLy3TOC4Zg,
15
15
  vision_agent/lmm/lmm.py,sha256=B5ClgwvbybVCWkf9opDMLjTtJZemUU4KUkQoRxGh43I,16787
16
16
  vision_agent/lmm/types.py,sha256=ZEXR_ptBL0ZwDMTDYkgxUCmSZFmBYPQd2jreNzr_8UY,221
17
17
  vision_agent/tools/__init__.py,sha256=zUv3aVPN1MXfyQiQi5To4rkQGtG7mxLQ1NjLI3pxM80,2412
18
- vision_agent/tools/meta_tools.py,sha256=XO5Ahe5ZauomynxgDcBuzmm0ocXwTnmZ0wjfgvOzDWc,23426
18
+ vision_agent/tools/meta_tools.py,sha256=iHvMeBktWcVi-0DOrSMak1gsZrM_VKJlAq1mAFbBemE,23477
19
19
  vision_agent/tools/prompts.py,sha256=V1z4YJLXZuUl_iZ5rY0M5hHc_2tmMEUKr0WocXKGt4E,1430
20
20
  vision_agent/tools/tool_utils.py,sha256=5ukuDMxbEH4iKetYR9I7twzsA8ECyP4tVwYXQq54mxI,8020
21
21
  vision_agent/tools/tools.py,sha256=dD_8AmAQb0oKVZHg2w2kSKlvWrG9yaKRbaHTz_kHgjA,73648
@@ -27,7 +27,7 @@ vision_agent/utils/image_utils.py,sha256=rm9GfXvD4JrjnqKrP_f2gfq4SzmqYC0IdC1kKwd
27
27
  vision_agent/utils/sim.py,sha256=ebE9Cs00pVEDI1HMjAzUBk88tQQmc2U-yAzIDinnekU,5572
28
28
  vision_agent/utils/type_defs.py,sha256=BE12s3JNQy36QvauXHjwyeffVh5enfcvd4vTzSwvEZI,1384
29
29
  vision_agent/utils/video.py,sha256=xbMEoRk13l4fHeQlbvMQhLCn8RNndYmsDhUf01TUeR8,4781
30
- vision_agent-0.2.143.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
31
- vision_agent-0.2.143.dist-info/METADATA,sha256=JPDcTSZk7U0j20CaJnw-WzKG7s5EjX0axntfS58264I,13758
32
- vision_agent-0.2.143.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
33
- vision_agent-0.2.143.dist-info/RECORD,,
30
+ vision_agent-0.2.144.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
31
+ vision_agent-0.2.144.dist-info/METADATA,sha256=HcZyYla50SBGHFDstUNElj7524PT64XT5a6_VQV_y6E,13758
32
+ vision_agent-0.2.144.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
33
+ vision_agent-0.2.144.dist-info/RECORD,,