langroid 0.19.5__tar.gz → 0.20.1__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 (149) hide show
  1. {langroid-0.19.5 → langroid-0.20.1}/PKG-INFO +5 -1
  2. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/base.py +29 -14
  3. langroid-0.20.1/langroid/agent/special/arangodb/arangodb_agent.py +649 -0
  4. langroid-0.20.1/langroid/agent/special/arangodb/system_messages.py +183 -0
  5. langroid-0.20.1/langroid/agent/special/arangodb/tools.py +102 -0
  6. langroid-0.20.1/langroid/agent/special/arangodb/utils.py +36 -0
  7. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/neo4j/neo4j_chat_agent.py +120 -54
  8. langroid-0.20.1/langroid/agent/special/neo4j/system_messages.py +120 -0
  9. langroid-0.20.1/langroid/agent/special/neo4j/tools.py +32 -0
  10. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/sql/sql_chat_agent.py +8 -3
  11. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/task.py +78 -56
  12. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/tools/orchestration.py +7 -7
  13. {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/parser.py +6 -0
  14. {langroid-0.19.5 → langroid-0.20.1}/pyproject.toml +7 -1
  15. langroid-0.19.5/langroid/agent/special/neo4j/utils/system_message.py +0 -64
  16. {langroid-0.19.5 → langroid-0.20.1}/LICENSE +0 -0
  17. {langroid-0.19.5 → langroid-0.20.1}/README.md +0 -0
  18. {langroid-0.19.5 → langroid-0.20.1}/langroid/__init__.py +0 -0
  19. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/__init__.py +0 -0
  20. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/batch.py +0 -0
  21. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/callbacks/__init__.py +0 -0
  22. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/callbacks/chainlit.py +0 -0
  23. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/chat_agent.py +0 -0
  24. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/chat_document.py +0 -0
  25. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/helpers.py +0 -0
  26. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/junk +0 -0
  27. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/openai_assistant.py +0 -0
  28. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/__init__.py +0 -0
  29. {langroid-0.19.5/langroid/agent/special/neo4j → langroid-0.20.1/langroid/agent/special/arangodb}/__init__.py +0 -0
  30. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/doc_chat_agent.py +0 -0
  31. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/lance_doc_chat_agent.py +0 -0
  32. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/lance_rag/__init__.py +0 -0
  33. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/lance_rag/critic_agent.py +0 -0
  34. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/lance_rag/lance_rag_task.py +0 -0
  35. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/lance_rag/query_planner_agent.py +0 -0
  36. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/lance_tools.py +0 -0
  37. {langroid-0.19.5/langroid/agent/special/neo4j/utils → langroid-0.20.1/langroid/agent/special/neo4j}/__init__.py +0 -0
  38. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/neo4j/csv_kg_chat.py +0 -0
  39. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/relevance_extractor_agent.py +0 -0
  40. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/retriever_agent.py +0 -0
  41. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/sql/__init__.py +0 -0
  42. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/sql/utils/__init__.py +0 -0
  43. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/sql/utils/description_extractors.py +0 -0
  44. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/sql/utils/populate_metadata.py +0 -0
  45. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/sql/utils/system_message.py +0 -0
  46. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/sql/utils/tools.py +0 -0
  47. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/table_chat_agent.py +0 -0
  48. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/structured_message.py +0 -0
  49. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/tool_message.py +0 -0
  50. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/tools/__init__.py +0 -0
  51. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/tools/duckduckgo_search_tool.py +0 -0
  52. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/tools/file_tools.py +0 -0
  53. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/tools/google_search_tool.py +0 -0
  54. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/tools/metaphor_search_tool.py +0 -0
  55. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/tools/recipient_tool.py +0 -0
  56. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/tools/retrieval_tool.py +0 -0
  57. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/tools/rewind_tool.py +0 -0
  58. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/tools/segment_extract_tool.py +0 -0
  59. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/typed_task.py +0 -0
  60. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/xml_tool_message.py +0 -0
  61. {langroid-0.19.5 → langroid-0.20.1}/langroid/agent_config.py +0 -0
  62. {langroid-0.19.5 → langroid-0.20.1}/langroid/cachedb/__init__.py +0 -0
  63. {langroid-0.19.5 → langroid-0.20.1}/langroid/cachedb/base.py +0 -0
  64. {langroid-0.19.5 → langroid-0.20.1}/langroid/cachedb/momento_cachedb.py +0 -0
  65. {langroid-0.19.5 → langroid-0.20.1}/langroid/cachedb/redis_cachedb.py +0 -0
  66. {langroid-0.19.5 → langroid-0.20.1}/langroid/embedding_models/__init__.py +0 -0
  67. {langroid-0.19.5 → langroid-0.20.1}/langroid/embedding_models/base.py +0 -0
  68. {langroid-0.19.5 → langroid-0.20.1}/langroid/embedding_models/clustering.py +0 -0
  69. {langroid-0.19.5 → langroid-0.20.1}/langroid/embedding_models/models.py +0 -0
  70. {langroid-0.19.5 → langroid-0.20.1}/langroid/embedding_models/protoc/__init__.py +0 -0
  71. {langroid-0.19.5 → langroid-0.20.1}/langroid/embedding_models/protoc/embeddings.proto +0 -0
  72. {langroid-0.19.5 → langroid-0.20.1}/langroid/embedding_models/protoc/embeddings_pb2.py +0 -0
  73. {langroid-0.19.5 → langroid-0.20.1}/langroid/embedding_models/protoc/embeddings_pb2.pyi +0 -0
  74. {langroid-0.19.5 → langroid-0.20.1}/langroid/embedding_models/protoc/embeddings_pb2_grpc.py +0 -0
  75. {langroid-0.19.5 → langroid-0.20.1}/langroid/embedding_models/remote_embeds.py +0 -0
  76. {langroid-0.19.5 → langroid-0.20.1}/langroid/exceptions.py +0 -0
  77. {langroid-0.19.5 → langroid-0.20.1}/langroid/language_models/.chainlit/config.toml +0 -0
  78. {langroid-0.19.5 → langroid-0.20.1}/langroid/language_models/.chainlit/translations/en-US.json +0 -0
  79. {langroid-0.19.5 → langroid-0.20.1}/langroid/language_models/__init__.py +0 -0
  80. {langroid-0.19.5 → langroid-0.20.1}/langroid/language_models/azure_openai.py +0 -0
  81. {langroid-0.19.5 → langroid-0.20.1}/langroid/language_models/base.py +0 -0
  82. {langroid-0.19.5 → langroid-0.20.1}/langroid/language_models/config.py +0 -0
  83. {langroid-0.19.5 → langroid-0.20.1}/langroid/language_models/mock_lm.py +0 -0
  84. {langroid-0.19.5 → langroid-0.20.1}/langroid/language_models/openai_gpt.py +0 -0
  85. {langroid-0.19.5 → langroid-0.20.1}/langroid/language_models/prompt_formatter/__init__.py +0 -0
  86. {langroid-0.19.5 → langroid-0.20.1}/langroid/language_models/prompt_formatter/base.py +0 -0
  87. {langroid-0.19.5 → langroid-0.20.1}/langroid/language_models/prompt_formatter/hf_formatter.py +0 -0
  88. {langroid-0.19.5 → langroid-0.20.1}/langroid/language_models/prompt_formatter/llama2_formatter.py +0 -0
  89. {langroid-0.19.5 → langroid-0.20.1}/langroid/language_models/utils.py +0 -0
  90. {langroid-0.19.5 → langroid-0.20.1}/langroid/mytypes.py +0 -0
  91. {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/__init__.py +0 -0
  92. {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/agent_chats.py +0 -0
  93. {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/code-parsing.md +0 -0
  94. {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/code_parser.py +0 -0
  95. {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/config.py +0 -0
  96. {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/document_parser.py +0 -0
  97. {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/image_text.py +0 -0
  98. {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/para_sentence_split.py +0 -0
  99. {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/parse_json.py +0 -0
  100. {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/repo_loader.py +0 -0
  101. {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/routing.py +0 -0
  102. {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/search.py +0 -0
  103. {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/spider.py +0 -0
  104. {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/table_loader.py +0 -0
  105. {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/url_loader.py +0 -0
  106. {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/url_loader_cookies.py +0 -0
  107. {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/urls.py +0 -0
  108. {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/utils.py +0 -0
  109. {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/web_search.py +0 -0
  110. {langroid-0.19.5 → langroid-0.20.1}/langroid/prompts/__init__.py +0 -0
  111. {langroid-0.19.5 → langroid-0.20.1}/langroid/prompts/chat-gpt4-system-prompt.md +0 -0
  112. {langroid-0.19.5 → langroid-0.20.1}/langroid/prompts/dialog.py +0 -0
  113. {langroid-0.19.5 → langroid-0.20.1}/langroid/prompts/prompts_config.py +0 -0
  114. {langroid-0.19.5 → langroid-0.20.1}/langroid/prompts/templates.py +0 -0
  115. {langroid-0.19.5 → langroid-0.20.1}/langroid/py.typed +0 -0
  116. {langroid-0.19.5 → langroid-0.20.1}/langroid/pydantic_v1/__init__.py +0 -0
  117. {langroid-0.19.5 → langroid-0.20.1}/langroid/pydantic_v1/main.py +0 -0
  118. {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/.chainlit/config.toml +0 -0
  119. {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/.chainlit/translations/en-US.json +0 -0
  120. {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/__init__.py +0 -0
  121. {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/algorithms/__init__.py +0 -0
  122. {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/algorithms/graph.py +0 -0
  123. {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/configuration.py +0 -0
  124. {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/constants.py +0 -0
  125. {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/docker.py +0 -0
  126. {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/git_utils.py +0 -0
  127. {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/globals.py +0 -0
  128. {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/llms/__init__.py +0 -0
  129. {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/llms/strings.py +0 -0
  130. {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/logging.py +0 -0
  131. {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/object_registry.py +0 -0
  132. {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/output/__init__.py +0 -0
  133. {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/output/citations.py +0 -0
  134. {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/output/printing.py +0 -0
  135. {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/output/status.py +0 -0
  136. {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/pandas_utils.py +0 -0
  137. {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/pydantic_utils.py +0 -0
  138. {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/system.py +0 -0
  139. {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/types.py +0 -0
  140. {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/web/__init__.py +0 -0
  141. {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/web/login.py +0 -0
  142. {langroid-0.19.5 → langroid-0.20.1}/langroid/vector_store/__init__.py +0 -0
  143. {langroid-0.19.5 → langroid-0.20.1}/langroid/vector_store/base.py +0 -0
  144. {langroid-0.19.5 → langroid-0.20.1}/langroid/vector_store/chromadb.py +0 -0
  145. {langroid-0.19.5 → langroid-0.20.1}/langroid/vector_store/lancedb.py +0 -0
  146. {langroid-0.19.5 → langroid-0.20.1}/langroid/vector_store/meilisearch.py +0 -0
  147. {langroid-0.19.5 → langroid-0.20.1}/langroid/vector_store/momento.py +0 -0
  148. {langroid-0.19.5 → langroid-0.20.1}/langroid/vector_store/qdrant_cloud.py +0 -0
  149. {langroid-0.19.5 → langroid-0.20.1}/langroid/vector_store/qdrantdb.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langroid
3
- Version: 0.19.5
3
+ Version: 0.20.1
4
4
  Summary: Harness LLMs with Multi-Agent Programming
5
5
  License: MIT
6
6
  Author: Prasad Chalasani
@@ -12,6 +12,7 @@ Classifier: Programming Language :: Python :: 3.10
12
12
  Classifier: Programming Language :: Python :: 3.11
13
13
  Classifier: Programming Language :: Python :: 3.12
14
14
  Provides-Extra: all
15
+ Provides-Extra: arango
15
16
  Provides-Extra: chainlit
16
17
  Provides-Extra: chromadb
17
18
  Provides-Extra: db
@@ -35,7 +36,9 @@ Provides-Extra: sql
35
36
  Provides-Extra: transformers
36
37
  Provides-Extra: unstructured
37
38
  Provides-Extra: vecdbs
39
+ Requires-Dist: adb-cloud-connector (>=1.0.2,<2.0.0)
38
40
  Requires-Dist: aiohttp (>=3.9.1,<4.0.0)
41
+ Requires-Dist: arango-datasets (>=1.2.2,<2.0.0) ; extra == "all" or extra == "arango"
39
42
  Requires-Dist: async-generator (>=1.10,<2.0)
40
43
  Requires-Dist: bs4 (>=0.0.1,<0.0.2)
41
44
  Requires-Dist: cerebras-cloud-sdk (>=1.1.0,<2.0.0)
@@ -82,6 +85,7 @@ Requires-Dist: pymysql (>=1.1.0,<2.0.0) ; extra == "db" or extra == "all" or ext
82
85
  Requires-Dist: pyparsing (>=3.0.9,<4.0.0)
83
86
  Requires-Dist: pypdf (>=3.12.2,<4.0.0) ; extra == "doc-chat" or extra == "all" or extra == "pdf-parsers"
84
87
  Requires-Dist: pytesseract (>=0.3.10,<0.4.0) ; extra == "doc-chat" or extra == "all" or extra == "pdf-parsers"
88
+ Requires-Dist: python-arango (>=8.1.2,<9.0.0) ; extra == "all" or extra == "arango"
85
89
  Requires-Dist: python-docx (>=1.1.0,<2.0.0) ; extra == "doc-chat" or extra == "all" or extra == "docx"
86
90
  Requires-Dist: python-dotenv (>=1.0.0,<2.0.0)
87
91
  Requires-Dist: python-magic (>=0.4.27,<0.5.0)
@@ -94,6 +94,9 @@ class AgentConfig(BaseSettings):
94
94
  respond_tools_only: bool = False # respond only to tool messages (not plain text)?
95
95
  # allow multiple tool messages in a single response?
96
96
  allow_multiple_tools: bool = True
97
+ human_prompt: str = (
98
+ "Human (respond or q, x to exit current level, " "or hit enter to continue)"
99
+ )
97
100
 
98
101
  @validator("name")
99
102
  def check_name_alphanum(cls, v: str) -> str:
@@ -411,16 +414,13 @@ class Agent(ABC):
411
414
  results = self.handle_message(msg)
412
415
  if results is None:
413
416
  return None
414
- if isinstance(results, ChatDocument):
415
- # Preserve trail of tool_ids for OpenAI Assistant fn-calls
416
- results.metadata.tool_ids = (
417
- [] if isinstance(msg, str) else msg.metadata.tool_ids
418
- )
419
- return results
420
417
  if not settings.quiet:
421
- results_str = (
422
- results if isinstance(results, str) else json.dumps(results, indent=2)
423
- )
418
+ if isinstance(results, str):
419
+ results_str = results
420
+ elif isinstance(results, ChatDocument):
421
+ results_str = results.content
422
+ elif isinstance(results, dict):
423
+ results_str = json.dumps(results, indent=2)
424
424
  console.print(f"[red]{self.indent}", end="")
425
425
  print(f"[red]Agent: {escape(results_str)}")
426
426
  maybe_json = len(extract_top_level_json(results_str)) > 0
@@ -428,6 +428,12 @@ class Agent(ABC):
428
428
  content=results_str,
429
429
  language="json" if maybe_json else "text",
430
430
  )
431
+ if isinstance(results, ChatDocument):
432
+ # Preserve trail of tool_ids for OpenAI Assistant fn-calls
433
+ results.metadata.tool_ids = (
434
+ [] if isinstance(msg, str) else msg.metadata.tool_ids
435
+ )
436
+ return results
431
437
  sender_name = self.config.name
432
438
  if isinstance(msg, ChatDocument) and msg.function_call is not None:
433
439
  # if result was from handling an LLM `function_call`,
@@ -655,9 +661,9 @@ class Agent(ABC):
655
661
  user_msg = self.callbacks.get_user_response(prompt="")
656
662
  else:
657
663
  user_msg = Prompt.ask(
658
- f"[blue]{self.indent}Human "
659
- "(respond or q, x to exit current level, "
660
- f"or hit enter to continue)\n{self.indent}",
664
+ f"[blue]{self.indent}"
665
+ + self.config.human_prompt
666
+ + f"\n{self.indent}"
661
667
  ).strip()
662
668
 
663
669
  tool_ids = []
@@ -668,7 +674,7 @@ class Agent(ABC):
668
674
  return None
669
675
  else:
670
676
  if user_msg.startswith("SYSTEM"):
671
- user_msg = user_msg[6:].strip()
677
+ user_msg = user_msg.replace("SYSTEM", "").strip()
672
678
  source = Entity.SYSTEM
673
679
  sender = Entity.SYSTEM
674
680
  else:
@@ -874,7 +880,13 @@ class Agent(ABC):
874
880
  return cdoc
875
881
 
876
882
  def has_tool_message_attempt(self, msg: str | ChatDocument | None) -> bool:
877
- """Check whether msg contains a Tool/fn-call attempt (by the LLM)"""
883
+ """
884
+ Check whether msg contains a Tool/fn-call attempt (by the LLM).
885
+
886
+ CAUTION: This uses self.get_tool_messages(msg) which as a side-effect
887
+ may update msg.tool_messages when msg is a ChatDocument, if there are
888
+ any tools in msg.
889
+ """
878
890
  if msg is None:
879
891
  return False
880
892
  try:
@@ -915,6 +927,9 @@ class Agent(ABC):
915
927
  ) -> List[ToolMessage]:
916
928
  """
917
929
  Get ToolMessages recognized in msg, handle-able by this agent.
930
+ NOTE: as a side-effect, this will update msg.tool_messages
931
+ when msg is a ChatDocument and msg contains tool messages.
932
+
918
933
  If all_tools is True:
919
934
  - return all tools, i.e. any tool in self.llm_tools_known,
920
935
  whether it is handled by this agent or not;