langroid 0.22.1__tar.gz → 0.22.3__tar.gz

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.
Files changed (148) hide show
  1. {langroid-0.22.1 → langroid-0.22.3}/PKG-INFO +1 -1
  2. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/base.py +14 -4
  3. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/chat_agent.py +21 -9
  4. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/task.py +4 -4
  5. {langroid-0.22.1 → langroid-0.22.3}/pyproject.toml +1 -1
  6. {langroid-0.22.1 → langroid-0.22.3}/LICENSE +0 -0
  7. {langroid-0.22.1 → langroid-0.22.3}/README.md +0 -0
  8. {langroid-0.22.1 → langroid-0.22.3}/langroid/__init__.py +0 -0
  9. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/__init__.py +0 -0
  10. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/batch.py +0 -0
  11. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/callbacks/__init__.py +0 -0
  12. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/callbacks/chainlit.py +0 -0
  13. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/chat_document.py +0 -0
  14. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/helpers.py +0 -0
  15. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/junk +0 -0
  16. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/openai_assistant.py +0 -0
  17. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/special/__init__.py +0 -0
  18. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/special/arangodb/__init__.py +0 -0
  19. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/special/arangodb/arangodb_agent.py +0 -0
  20. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/special/arangodb/system_messages.py +0 -0
  21. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/special/arangodb/tools.py +0 -0
  22. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/special/arangodb/utils.py +0 -0
  23. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/special/doc_chat_agent.py +0 -0
  24. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/special/lance_doc_chat_agent.py +0 -0
  25. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/special/lance_rag/__init__.py +0 -0
  26. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/special/lance_rag/critic_agent.py +0 -0
  27. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/special/lance_rag/lance_rag_task.py +0 -0
  28. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/special/lance_rag/query_planner_agent.py +0 -0
  29. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/special/lance_tools.py +0 -0
  30. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/special/neo4j/__init__.py +0 -0
  31. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/special/neo4j/csv_kg_chat.py +0 -0
  32. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/special/neo4j/neo4j_chat_agent.py +0 -0
  33. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/special/neo4j/system_messages.py +0 -0
  34. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/special/neo4j/tools.py +0 -0
  35. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/special/relevance_extractor_agent.py +0 -0
  36. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/special/retriever_agent.py +0 -0
  37. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/special/sql/__init__.py +0 -0
  38. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/special/sql/sql_chat_agent.py +0 -0
  39. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/special/sql/utils/__init__.py +0 -0
  40. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/special/sql/utils/description_extractors.py +0 -0
  41. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/special/sql/utils/populate_metadata.py +0 -0
  42. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/special/sql/utils/system_message.py +0 -0
  43. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/special/sql/utils/tools.py +0 -0
  44. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/special/table_chat_agent.py +0 -0
  45. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/structured_message.py +0 -0
  46. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/tool_message.py +0 -0
  47. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/tools/__init__.py +0 -0
  48. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/tools/duckduckgo_search_tool.py +0 -0
  49. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/tools/file_tools.py +0 -0
  50. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/tools/google_search_tool.py +0 -0
  51. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/tools/metaphor_search_tool.py +0 -0
  52. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/tools/orchestration.py +0 -0
  53. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/tools/recipient_tool.py +0 -0
  54. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/tools/retrieval_tool.py +0 -0
  55. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/tools/rewind_tool.py +0 -0
  56. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/tools/segment_extract_tool.py +0 -0
  57. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/typed_task.py +0 -0
  58. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent/xml_tool_message.py +0 -0
  59. {langroid-0.22.1 → langroid-0.22.3}/langroid/agent_config.py +0 -0
  60. {langroid-0.22.1 → langroid-0.22.3}/langroid/cachedb/__init__.py +0 -0
  61. {langroid-0.22.1 → langroid-0.22.3}/langroid/cachedb/base.py +0 -0
  62. {langroid-0.22.1 → langroid-0.22.3}/langroid/cachedb/momento_cachedb.py +0 -0
  63. {langroid-0.22.1 → langroid-0.22.3}/langroid/cachedb/redis_cachedb.py +0 -0
  64. {langroid-0.22.1 → langroid-0.22.3}/langroid/embedding_models/__init__.py +0 -0
  65. {langroid-0.22.1 → langroid-0.22.3}/langroid/embedding_models/base.py +0 -0
  66. {langroid-0.22.1 → langroid-0.22.3}/langroid/embedding_models/clustering.py +0 -0
  67. {langroid-0.22.1 → langroid-0.22.3}/langroid/embedding_models/models.py +0 -0
  68. {langroid-0.22.1 → langroid-0.22.3}/langroid/embedding_models/protoc/__init__.py +0 -0
  69. {langroid-0.22.1 → langroid-0.22.3}/langroid/embedding_models/protoc/embeddings.proto +0 -0
  70. {langroid-0.22.1 → langroid-0.22.3}/langroid/embedding_models/protoc/embeddings_pb2.py +0 -0
  71. {langroid-0.22.1 → langroid-0.22.3}/langroid/embedding_models/protoc/embeddings_pb2.pyi +0 -0
  72. {langroid-0.22.1 → langroid-0.22.3}/langroid/embedding_models/protoc/embeddings_pb2_grpc.py +0 -0
  73. {langroid-0.22.1 → langroid-0.22.3}/langroid/embedding_models/remote_embeds.py +0 -0
  74. {langroid-0.22.1 → langroid-0.22.3}/langroid/exceptions.py +0 -0
  75. {langroid-0.22.1 → langroid-0.22.3}/langroid/language_models/.chainlit/config.toml +0 -0
  76. {langroid-0.22.1 → langroid-0.22.3}/langroid/language_models/.chainlit/translations/en-US.json +0 -0
  77. {langroid-0.22.1 → langroid-0.22.3}/langroid/language_models/__init__.py +0 -0
  78. {langroid-0.22.1 → langroid-0.22.3}/langroid/language_models/azure_openai.py +0 -0
  79. {langroid-0.22.1 → langroid-0.22.3}/langroid/language_models/base.py +0 -0
  80. {langroid-0.22.1 → langroid-0.22.3}/langroid/language_models/config.py +0 -0
  81. {langroid-0.22.1 → langroid-0.22.3}/langroid/language_models/mock_lm.py +0 -0
  82. {langroid-0.22.1 → langroid-0.22.3}/langroid/language_models/openai_gpt.py +0 -0
  83. {langroid-0.22.1 → langroid-0.22.3}/langroid/language_models/prompt_formatter/__init__.py +0 -0
  84. {langroid-0.22.1 → langroid-0.22.3}/langroid/language_models/prompt_formatter/base.py +0 -0
  85. {langroid-0.22.1 → langroid-0.22.3}/langroid/language_models/prompt_formatter/hf_formatter.py +0 -0
  86. {langroid-0.22.1 → langroid-0.22.3}/langroid/language_models/prompt_formatter/llama2_formatter.py +0 -0
  87. {langroid-0.22.1 → langroid-0.22.3}/langroid/language_models/utils.py +0 -0
  88. {langroid-0.22.1 → langroid-0.22.3}/langroid/mytypes.py +0 -0
  89. {langroid-0.22.1 → langroid-0.22.3}/langroid/parsing/__init__.py +0 -0
  90. {langroid-0.22.1 → langroid-0.22.3}/langroid/parsing/agent_chats.py +0 -0
  91. {langroid-0.22.1 → langroid-0.22.3}/langroid/parsing/code-parsing.md +0 -0
  92. {langroid-0.22.1 → langroid-0.22.3}/langroid/parsing/code_parser.py +0 -0
  93. {langroid-0.22.1 → langroid-0.22.3}/langroid/parsing/config.py +0 -0
  94. {langroid-0.22.1 → langroid-0.22.3}/langroid/parsing/document_parser.py +0 -0
  95. {langroid-0.22.1 → langroid-0.22.3}/langroid/parsing/image_text.py +0 -0
  96. {langroid-0.22.1 → langroid-0.22.3}/langroid/parsing/para_sentence_split.py +0 -0
  97. {langroid-0.22.1 → langroid-0.22.3}/langroid/parsing/parse_json.py +0 -0
  98. {langroid-0.22.1 → langroid-0.22.3}/langroid/parsing/parser.py +0 -0
  99. {langroid-0.22.1 → langroid-0.22.3}/langroid/parsing/repo_loader.py +0 -0
  100. {langroid-0.22.1 → langroid-0.22.3}/langroid/parsing/routing.py +0 -0
  101. {langroid-0.22.1 → langroid-0.22.3}/langroid/parsing/search.py +0 -0
  102. {langroid-0.22.1 → langroid-0.22.3}/langroid/parsing/spider.py +0 -0
  103. {langroid-0.22.1 → langroid-0.22.3}/langroid/parsing/table_loader.py +0 -0
  104. {langroid-0.22.1 → langroid-0.22.3}/langroid/parsing/url_loader.py +0 -0
  105. {langroid-0.22.1 → langroid-0.22.3}/langroid/parsing/url_loader_cookies.py +0 -0
  106. {langroid-0.22.1 → langroid-0.22.3}/langroid/parsing/urls.py +0 -0
  107. {langroid-0.22.1 → langroid-0.22.3}/langroid/parsing/utils.py +0 -0
  108. {langroid-0.22.1 → langroid-0.22.3}/langroid/parsing/web_search.py +0 -0
  109. {langroid-0.22.1 → langroid-0.22.3}/langroid/prompts/__init__.py +0 -0
  110. {langroid-0.22.1 → langroid-0.22.3}/langroid/prompts/chat-gpt4-system-prompt.md +0 -0
  111. {langroid-0.22.1 → langroid-0.22.3}/langroid/prompts/dialog.py +0 -0
  112. {langroid-0.22.1 → langroid-0.22.3}/langroid/prompts/prompts_config.py +0 -0
  113. {langroid-0.22.1 → langroid-0.22.3}/langroid/prompts/templates.py +0 -0
  114. {langroid-0.22.1 → langroid-0.22.3}/langroid/py.typed +0 -0
  115. {langroid-0.22.1 → langroid-0.22.3}/langroid/pydantic_v1/__init__.py +0 -0
  116. {langroid-0.22.1 → langroid-0.22.3}/langroid/pydantic_v1/main.py +0 -0
  117. {langroid-0.22.1 → langroid-0.22.3}/langroid/utils/.chainlit/config.toml +0 -0
  118. {langroid-0.22.1 → langroid-0.22.3}/langroid/utils/.chainlit/translations/en-US.json +0 -0
  119. {langroid-0.22.1 → langroid-0.22.3}/langroid/utils/__init__.py +0 -0
  120. {langroid-0.22.1 → langroid-0.22.3}/langroid/utils/algorithms/__init__.py +0 -0
  121. {langroid-0.22.1 → langroid-0.22.3}/langroid/utils/algorithms/graph.py +0 -0
  122. {langroid-0.22.1 → langroid-0.22.3}/langroid/utils/configuration.py +0 -0
  123. {langroid-0.22.1 → langroid-0.22.3}/langroid/utils/constants.py +0 -0
  124. {langroid-0.22.1 → langroid-0.22.3}/langroid/utils/docker.py +0 -0
  125. {langroid-0.22.1 → langroid-0.22.3}/langroid/utils/git_utils.py +0 -0
  126. {langroid-0.22.1 → langroid-0.22.3}/langroid/utils/globals.py +0 -0
  127. {langroid-0.22.1 → langroid-0.22.3}/langroid/utils/llms/__init__.py +0 -0
  128. {langroid-0.22.1 → langroid-0.22.3}/langroid/utils/llms/strings.py +0 -0
  129. {langroid-0.22.1 → langroid-0.22.3}/langroid/utils/logging.py +0 -0
  130. {langroid-0.22.1 → langroid-0.22.3}/langroid/utils/object_registry.py +0 -0
  131. {langroid-0.22.1 → langroid-0.22.3}/langroid/utils/output/__init__.py +0 -0
  132. {langroid-0.22.1 → langroid-0.22.3}/langroid/utils/output/citations.py +0 -0
  133. {langroid-0.22.1 → langroid-0.22.3}/langroid/utils/output/printing.py +0 -0
  134. {langroid-0.22.1 → langroid-0.22.3}/langroid/utils/output/status.py +0 -0
  135. {langroid-0.22.1 → langroid-0.22.3}/langroid/utils/pandas_utils.py +0 -0
  136. {langroid-0.22.1 → langroid-0.22.3}/langroid/utils/pydantic_utils.py +0 -0
  137. {langroid-0.22.1 → langroid-0.22.3}/langroid/utils/system.py +0 -0
  138. {langroid-0.22.1 → langroid-0.22.3}/langroid/utils/types.py +0 -0
  139. {langroid-0.22.1 → langroid-0.22.3}/langroid/utils/web/__init__.py +0 -0
  140. {langroid-0.22.1 → langroid-0.22.3}/langroid/utils/web/login.py +0 -0
  141. {langroid-0.22.1 → langroid-0.22.3}/langroid/vector_store/__init__.py +0 -0
  142. {langroid-0.22.1 → langroid-0.22.3}/langroid/vector_store/base.py +0 -0
  143. {langroid-0.22.1 → langroid-0.22.3}/langroid/vector_store/chromadb.py +0 -0
  144. {langroid-0.22.1 → langroid-0.22.3}/langroid/vector_store/lancedb.py +0 -0
  145. {langroid-0.22.1 → langroid-0.22.3}/langroid/vector_store/meilisearch.py +0 -0
  146. {langroid-0.22.1 → langroid-0.22.3}/langroid/vector_store/momento.py +0 -0
  147. {langroid-0.22.1 → langroid-0.22.3}/langroid/vector_store/qdrant_cloud.py +0 -0
  148. {langroid-0.22.1 → langroid-0.22.3}/langroid/vector_store/qdrantdb.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langroid
3
- Version: 0.22.1
3
+ Version: 0.22.3
4
4
  Summary: Harness LLMs with Multi-Agent Programming
5
5
  License: MIT
6
6
  Author: Prasad Chalasani
@@ -703,7 +703,7 @@ class Agent(ABC):
703
703
  if self.llm is None:
704
704
  return False
705
705
 
706
- if message is not None and len(self.get_tool_messages(message)) > 0:
706
+ if message is not None and len(self.try_get_tool_messages(message)) > 0:
707
707
  # if there is a valid "tool" message (either JSON or via `function_call`)
708
708
  # then LLM cannot respond to it
709
709
  return False
@@ -717,7 +717,7 @@ class Agent(ABC):
717
717
  Args:
718
718
  message (str|ChatDocument): message or ChatDocument object to respond to.
719
719
  """
720
- tools = self.get_tool_messages(message)
720
+ tools = self.try_get_tool_messages(message)
721
721
  if len(tools) == 0 and self.config.respond_tools_only:
722
722
  return False
723
723
  if message is not None and self.has_only_unhandled_tools(message):
@@ -915,11 +915,21 @@ class Agent(ABC):
915
915
  """
916
916
  if msg is None:
917
917
  return False
918
- tools = self.get_tool_messages(msg, all_tools=True)
918
+ tools = self.try_get_tool_messages(msg, all_tools=True)
919
919
  if len(tools) == 0:
920
920
  return False
921
921
  return all(not self._tool_recipient_match(t) for t in tools)
922
922
 
923
+ def try_get_tool_messages(
924
+ self,
925
+ msg: str | ChatDocument | None,
926
+ all_tools: bool = False,
927
+ ) -> List[ToolMessage]:
928
+ try:
929
+ return self.get_tool_messages(msg, all_tools)
930
+ except ValidationError:
931
+ return []
932
+
923
933
  def get_tool_messages(
924
934
  self,
925
935
  msg: str | ChatDocument | None,
@@ -1417,7 +1427,7 @@ class Agent(ABC):
1417
1427
  if content_any is not None and isinstance(content_any, output_type):
1418
1428
  return cast(T, content_any)
1419
1429
 
1420
- tools = self.get_tool_messages(msg, all_tools=True)
1430
+ tools = self.try_get_tool_messages(msg, all_tools=True)
1421
1431
 
1422
1432
  if get_origin(output_type) is list:
1423
1433
  list_element_type = get_args(output_type)[0]
@@ -623,10 +623,27 @@ class ChatAgent(Agent):
623
623
  self.llm_tools_usable.discard(r)
624
624
  self.llm_functions_usable.discard(r)
625
625
 
626
+ def truncate_message(
627
+ self,
628
+ idx: int,
629
+ tokens: int = 5,
630
+ warning: str = "...[Contents truncated!]",
631
+ ) -> LLMMessage:
632
+ """Truncate message at idx in msg history to `tokens` tokens"""
633
+ llm_msg = self.message_history[idx]
634
+ orig_content = llm_msg.content
635
+ new_content = (
636
+ self.parser.truncate_tokens(orig_content, tokens)
637
+ if self.parser is not None
638
+ else orig_content[: tokens * 4] # approx truncation
639
+ )
640
+ llm_msg.content = new_content + "\n" + warning
641
+ return llm_msg
642
+
626
643
  def _reduce_raw_tool_results(self, message: ChatDocument) -> None:
627
644
  """
628
- If message is the result of a ToolMessage that had the
629
- flag `_retain_raw_results = False`, then we replace contents
645
+ If message is the result of a ToolMessage that had
646
+ a `_max_retained_tokens` set to a non-None value, then we replace contents
630
647
  with a placeholder message.
631
648
  """
632
649
  parent_message: ChatDocument | None = message.parent
@@ -641,14 +658,9 @@ class ChatAgent(Agent):
641
658
  and has been truncated to {max_tokens} tokens.
642
659
  To obtain the full result, the tool needs to be re-used.
643
660
  """
644
- llm_msg = self.message_history[message.metadata.msg_idx]
645
- orig_content = llm_msg.content
646
- new_content = (
647
- self.parser.truncate_tokens(orig_content, max_tokens)
648
- if self.parser is not None
649
- else orig_content[: max_tokens * 4] # approx truncation
661
+ self.truncate_message(
662
+ message.metadata.msg_idx, max_tokens, truncation_warning
650
663
  )
651
- llm_msg.content = new_content + "\n\n" + truncation_warning
652
664
 
653
665
  def llm_response(
654
666
  self, message: Optional[str | ChatDocument] = None
@@ -1314,7 +1314,7 @@ class Task:
1314
1314
  actual_turns = e.turns if e.turns > 0 else turns
1315
1315
  e.agent.callbacks.set_parent_agent(self.agent)
1316
1316
  # e.callbacks.set_parent_agent(self.agent)
1317
- pending_tools = self.agent.get_tool_messages(self.pending_message)
1317
+ pending_tools = self.agent.try_get_tool_messages(self.pending_message)
1318
1318
  # TODO disable this
1319
1319
  if (
1320
1320
  len(pending_tools) > 1
@@ -1332,7 +1332,7 @@ class Task:
1332
1332
  )
1333
1333
  # update result.tool_messages if any
1334
1334
  if isinstance(result, ChatDocument):
1335
- self.agent.get_tool_messages(result)
1335
+ self.agent.try_get_tool_messages(result)
1336
1336
  if result is not None:
1337
1337
  content, id2result, oai_tool_id = self.agent.process_tool_results(
1338
1338
  result.content,
@@ -1363,7 +1363,7 @@ class Task:
1363
1363
  result = response_fn(self.pending_message)
1364
1364
  # update result.tool_messages if any
1365
1365
  if isinstance(result, ChatDocument):
1366
- self.agent.get_tool_messages(result)
1366
+ self.agent.try_get_tool_messages(result)
1367
1367
 
1368
1368
  result_chat_doc = self.agent.to_ChatDocument(
1369
1369
  result,
@@ -1446,7 +1446,7 @@ class Task:
1446
1446
  if isinstance(e, Task):
1447
1447
  actual_turns = e.turns if e.turns > 0 else turns
1448
1448
  e.agent.callbacks.set_parent_agent(self.agent)
1449
- pending_tools = self.agent.get_tool_messages(self.pending_message)
1449
+ pending_tools = self.agent.try_get_tool_messages(self.pending_message)
1450
1450
  # TODO disable this
1451
1451
  if (
1452
1452
  len(pending_tools) > 1
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "langroid"
3
- version = "0.22.1"
3
+ version = "0.22.3"
4
4
  description = "Harness LLMs with Multi-Agent Programming"
5
5
  authors = ["Prasad Chalasani <pchalasani@gmail.com>"]
6
6
  readme = "README.md"
File without changes
File without changes
File without changes
File without changes
File without changes