langroid 0.59.11__tar.gz → 0.59.13__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 (146) hide show
  1. {langroid-0.59.11 → langroid-0.59.13}/PKG-INFO +1 -1
  2. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/chat_agent.py +2 -2
  3. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/special/doc_chat_agent.py +5 -1
  4. {langroid-0.59.11 → langroid-0.59.13}/langroid/vector_store/base.py +31 -0
  5. {langroid-0.59.11 → langroid-0.59.13}/langroid/vector_store/qdrantdb.py +8 -0
  6. {langroid-0.59.11 → langroid-0.59.13}/pyproject.toml +1 -1
  7. {langroid-0.59.11 → langroid-0.59.13}/.gitignore +0 -0
  8. {langroid-0.59.11 → langroid-0.59.13}/LICENSE +0 -0
  9. {langroid-0.59.11 → langroid-0.59.13}/README.md +0 -0
  10. {langroid-0.59.11 → langroid-0.59.13}/langroid/__init__.py +0 -0
  11. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/__init__.py +0 -0
  12. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/base.py +0 -0
  13. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/batch.py +0 -0
  14. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/callbacks/__init__.py +0 -0
  15. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/callbacks/chainlit.py +0 -0
  16. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/chat_document.py +0 -0
  17. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/done_sequence_parser.py +0 -0
  18. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/openai_assistant.py +0 -0
  19. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/special/__init__.py +0 -0
  20. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/special/arangodb/__init__.py +0 -0
  21. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/special/arangodb/arangodb_agent.py +0 -0
  22. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/special/arangodb/system_messages.py +0 -0
  23. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/special/arangodb/tools.py +0 -0
  24. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/special/arangodb/utils.py +0 -0
  25. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/special/doc_chat_task.py +0 -0
  26. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/special/lance_doc_chat_agent.py +0 -0
  27. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/special/lance_rag/__init__.py +0 -0
  28. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/special/lance_rag/critic_agent.py +0 -0
  29. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/special/lance_rag/lance_rag_task.py +0 -0
  30. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/special/lance_rag/query_planner_agent.py +0 -0
  31. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/special/lance_tools.py +0 -0
  32. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/special/neo4j/__init__.py +0 -0
  33. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/special/neo4j/csv_kg_chat.py +0 -0
  34. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/special/neo4j/neo4j_chat_agent.py +0 -0
  35. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/special/neo4j/system_messages.py +0 -0
  36. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/special/neo4j/tools.py +0 -0
  37. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/special/relevance_extractor_agent.py +0 -0
  38. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/special/retriever_agent.py +0 -0
  39. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/special/sql/__init__.py +0 -0
  40. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/special/sql/sql_chat_agent.py +0 -0
  41. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/special/sql/utils/__init__.py +0 -0
  42. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/special/sql/utils/description_extractors.py +0 -0
  43. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/special/sql/utils/populate_metadata.py +0 -0
  44. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/special/sql/utils/system_message.py +0 -0
  45. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/special/sql/utils/tools.py +0 -0
  46. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/special/table_chat_agent.py +0 -0
  47. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/task.py +0 -0
  48. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/tool_message.py +0 -0
  49. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/tools/__init__.py +0 -0
  50. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/tools/duckduckgo_search_tool.py +0 -0
  51. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/tools/exa_search_tool.py +0 -0
  52. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/tools/file_tools.py +0 -0
  53. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/tools/google_search_tool.py +0 -0
  54. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/tools/mcp/__init__.py +0 -0
  55. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/tools/mcp/decorators.py +0 -0
  56. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/tools/mcp/fastmcp_client.py +0 -0
  57. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/tools/metaphor_search_tool.py +0 -0
  58. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/tools/orchestration.py +0 -0
  59. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/tools/recipient_tool.py +0 -0
  60. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/tools/retrieval_tool.py +0 -0
  61. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/tools/rewind_tool.py +0 -0
  62. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/tools/segment_extract_tool.py +0 -0
  63. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/tools/task_tool.py +0 -0
  64. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/tools/tavily_search_tool.py +0 -0
  65. {langroid-0.59.11 → langroid-0.59.13}/langroid/agent/xml_tool_message.py +0 -0
  66. {langroid-0.59.11 → langroid-0.59.13}/langroid/cachedb/__init__.py +0 -0
  67. {langroid-0.59.11 → langroid-0.59.13}/langroid/cachedb/base.py +0 -0
  68. {langroid-0.59.11 → langroid-0.59.13}/langroid/cachedb/redis_cachedb.py +0 -0
  69. {langroid-0.59.11 → langroid-0.59.13}/langroid/embedding_models/__init__.py +0 -0
  70. {langroid-0.59.11 → langroid-0.59.13}/langroid/embedding_models/base.py +0 -0
  71. {langroid-0.59.11 → langroid-0.59.13}/langroid/embedding_models/models.py +0 -0
  72. {langroid-0.59.11 → langroid-0.59.13}/langroid/embedding_models/protoc/__init__.py +0 -0
  73. {langroid-0.59.11 → langroid-0.59.13}/langroid/embedding_models/protoc/embeddings.proto +0 -0
  74. {langroid-0.59.11 → langroid-0.59.13}/langroid/embedding_models/protoc/embeddings_pb2.py +0 -0
  75. {langroid-0.59.11 → langroid-0.59.13}/langroid/embedding_models/protoc/embeddings_pb2.pyi +0 -0
  76. {langroid-0.59.11 → langroid-0.59.13}/langroid/embedding_models/protoc/embeddings_pb2_grpc.py +0 -0
  77. {langroid-0.59.11 → langroid-0.59.13}/langroid/embedding_models/remote_embeds.py +0 -0
  78. {langroid-0.59.11 → langroid-0.59.13}/langroid/exceptions.py +0 -0
  79. {langroid-0.59.11 → langroid-0.59.13}/langroid/language_models/__init__.py +0 -0
  80. {langroid-0.59.11 → langroid-0.59.13}/langroid/language_models/azure_openai.py +0 -0
  81. {langroid-0.59.11 → langroid-0.59.13}/langroid/language_models/base.py +0 -0
  82. {langroid-0.59.11 → langroid-0.59.13}/langroid/language_models/client_cache.py +0 -0
  83. {langroid-0.59.11 → langroid-0.59.13}/langroid/language_models/config.py +0 -0
  84. {langroid-0.59.11 → langroid-0.59.13}/langroid/language_models/mock_lm.py +0 -0
  85. {langroid-0.59.11 → langroid-0.59.13}/langroid/language_models/model_info.py +0 -0
  86. {langroid-0.59.11 → langroid-0.59.13}/langroid/language_models/openai_gpt.py +0 -0
  87. {langroid-0.59.11 → langroid-0.59.13}/langroid/language_models/prompt_formatter/__init__.py +0 -0
  88. {langroid-0.59.11 → langroid-0.59.13}/langroid/language_models/prompt_formatter/base.py +0 -0
  89. {langroid-0.59.11 → langroid-0.59.13}/langroid/language_models/prompt_formatter/hf_formatter.py +0 -0
  90. {langroid-0.59.11 → langroid-0.59.13}/langroid/language_models/prompt_formatter/llama2_formatter.py +0 -0
  91. {langroid-0.59.11 → langroid-0.59.13}/langroid/language_models/provider_params.py +0 -0
  92. {langroid-0.59.11 → langroid-0.59.13}/langroid/language_models/utils.py +0 -0
  93. {langroid-0.59.11 → langroid-0.59.13}/langroid/mcp/__init__.py +0 -0
  94. {langroid-0.59.11 → langroid-0.59.13}/langroid/mcp/server/__init__.py +0 -0
  95. {langroid-0.59.11 → langroid-0.59.13}/langroid/mytypes.py +0 -0
  96. {langroid-0.59.11 → langroid-0.59.13}/langroid/parsing/__init__.py +0 -0
  97. {langroid-0.59.11 → langroid-0.59.13}/langroid/parsing/agent_chats.py +0 -0
  98. {langroid-0.59.11 → langroid-0.59.13}/langroid/parsing/code_parser.py +0 -0
  99. {langroid-0.59.11 → langroid-0.59.13}/langroid/parsing/document_parser.py +0 -0
  100. {langroid-0.59.11 → langroid-0.59.13}/langroid/parsing/file_attachment.py +0 -0
  101. {langroid-0.59.11 → langroid-0.59.13}/langroid/parsing/md_parser.py +0 -0
  102. {langroid-0.59.11 → langroid-0.59.13}/langroid/parsing/para_sentence_split.py +0 -0
  103. {langroid-0.59.11 → langroid-0.59.13}/langroid/parsing/parse_json.py +0 -0
  104. {langroid-0.59.11 → langroid-0.59.13}/langroid/parsing/parser.py +0 -0
  105. {langroid-0.59.11 → langroid-0.59.13}/langroid/parsing/pdf_utils.py +0 -0
  106. {langroid-0.59.11 → langroid-0.59.13}/langroid/parsing/repo_loader.py +0 -0
  107. {langroid-0.59.11 → langroid-0.59.13}/langroid/parsing/routing.py +0 -0
  108. {langroid-0.59.11 → langroid-0.59.13}/langroid/parsing/search.py +0 -0
  109. {langroid-0.59.11 → langroid-0.59.13}/langroid/parsing/spider.py +0 -0
  110. {langroid-0.59.11 → langroid-0.59.13}/langroid/parsing/table_loader.py +0 -0
  111. {langroid-0.59.11 → langroid-0.59.13}/langroid/parsing/url_loader.py +0 -0
  112. {langroid-0.59.11 → langroid-0.59.13}/langroid/parsing/urls.py +0 -0
  113. {langroid-0.59.11 → langroid-0.59.13}/langroid/parsing/utils.py +0 -0
  114. {langroid-0.59.11 → langroid-0.59.13}/langroid/parsing/web_search.py +0 -0
  115. {langroid-0.59.11 → langroid-0.59.13}/langroid/prompts/__init__.py +0 -0
  116. {langroid-0.59.11 → langroid-0.59.13}/langroid/prompts/dialog.py +0 -0
  117. {langroid-0.59.11 → langroid-0.59.13}/langroid/prompts/prompts_config.py +0 -0
  118. {langroid-0.59.11 → langroid-0.59.13}/langroid/prompts/templates.py +0 -0
  119. {langroid-0.59.11 → langroid-0.59.13}/langroid/py.typed +0 -0
  120. {langroid-0.59.11 → langroid-0.59.13}/langroid/pydantic_v1/__init__.py +0 -0
  121. {langroid-0.59.11 → langroid-0.59.13}/langroid/pydantic_v1/main.py +0 -0
  122. {langroid-0.59.11 → langroid-0.59.13}/langroid/utils/__init__.py +0 -0
  123. {langroid-0.59.11 → langroid-0.59.13}/langroid/utils/algorithms/__init__.py +0 -0
  124. {langroid-0.59.11 → langroid-0.59.13}/langroid/utils/algorithms/graph.py +0 -0
  125. {langroid-0.59.11 → langroid-0.59.13}/langroid/utils/configuration.py +0 -0
  126. {langroid-0.59.11 → langroid-0.59.13}/langroid/utils/constants.py +0 -0
  127. {langroid-0.59.11 → langroid-0.59.13}/langroid/utils/git_utils.py +0 -0
  128. {langroid-0.59.11 → langroid-0.59.13}/langroid/utils/globals.py +0 -0
  129. {langroid-0.59.11 → langroid-0.59.13}/langroid/utils/html_logger.py +0 -0
  130. {langroid-0.59.11 → langroid-0.59.13}/langroid/utils/logging.py +0 -0
  131. {langroid-0.59.11 → langroid-0.59.13}/langroid/utils/object_registry.py +0 -0
  132. {langroid-0.59.11 → langroid-0.59.13}/langroid/utils/output/__init__.py +0 -0
  133. {langroid-0.59.11 → langroid-0.59.13}/langroid/utils/output/citations.py +0 -0
  134. {langroid-0.59.11 → langroid-0.59.13}/langroid/utils/output/printing.py +0 -0
  135. {langroid-0.59.11 → langroid-0.59.13}/langroid/utils/output/status.py +0 -0
  136. {langroid-0.59.11 → langroid-0.59.13}/langroid/utils/pandas_utils.py +0 -0
  137. {langroid-0.59.11 → langroid-0.59.13}/langroid/utils/pydantic_utils.py +0 -0
  138. {langroid-0.59.11 → langroid-0.59.13}/langroid/utils/system.py +0 -0
  139. {langroid-0.59.11 → langroid-0.59.13}/langroid/utils/types.py +0 -0
  140. {langroid-0.59.11 → langroid-0.59.13}/langroid/vector_store/__init__.py +0 -0
  141. {langroid-0.59.11 → langroid-0.59.13}/langroid/vector_store/chromadb.py +0 -0
  142. {langroid-0.59.11 → langroid-0.59.13}/langroid/vector_store/lancedb.py +0 -0
  143. {langroid-0.59.11 → langroid-0.59.13}/langroid/vector_store/meilisearch.py +0 -0
  144. {langroid-0.59.11 → langroid-0.59.13}/langroid/vector_store/pineconedb.py +0 -0
  145. {langroid-0.59.11 → langroid-0.59.13}/langroid/vector_store/postgres.py +0 -0
  146. {langroid-0.59.11 → langroid-0.59.13}/langroid/vector_store/weaviatedb.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langroid
3
- Version: 0.59.11
3
+ Version: 0.59.13
4
4
  Summary: Harness LLMs with Multi-Agent Programming
5
5
  Author-email: Prasad Chalasani <pchalasani@gmail.com>
6
6
  License: MIT
@@ -279,8 +279,8 @@ class ChatAgent(Agent):
279
279
  new_agent.llm_functions_handled = self.llm_functions_handled
280
280
  new_agent.llm_functions_usable = self.llm_functions_usable
281
281
  new_agent.llm_function_force = self.llm_function_force
282
- # Caution - we are copying the vector-db, maybe we don't always want this?
283
- new_agent.vecdb = self.vecdb
282
+ # Ensure each clone gets its own vecdb client when supported.
283
+ new_agent.vecdb = None if self.vecdb is None else self.vecdb.clone()
284
284
  new_agent.id = ObjectRegistry.new_id()
285
285
  if self.config.add_to_registry:
286
286
  ObjectRegistry.register_object(new_agent)
@@ -14,6 +14,7 @@ pip install "langroid[hf-embeddings]"
14
14
 
15
15
  """
16
16
 
17
+ import asyncio
17
18
  import importlib
18
19
  import logging
19
20
  from collections import OrderedDict
@@ -858,7 +859,9 @@ class DocChatAgent(ChatAgent):
858
859
  return self.summarize_docs()
859
860
  else:
860
861
  self.callbacks.show_start_response(entity="llm")
861
- response = self.answer_from_docs(query_str)
862
+ # Offload blocking retrieval/LLM work to default thread pool so
863
+ # asyncio batch runners can make progress concurrently.
864
+ response = await asyncio.to_thread(self.answer_from_docs, query_str)
862
865
  self._render_llm_response(response, citation_only=True)
863
866
  return ChatDocument(
864
867
  content=response.content,
@@ -1411,6 +1414,7 @@ class DocChatAgent(ChatAgent):
1411
1414
  )
1412
1415
 
1413
1416
  if len(passages) == 0:
1417
+ logger.debug("No passages retrieved for query '%s'", query)
1414
1418
  return []
1415
1419
 
1416
1420
  if self.config.rerank_after_adding_context:
@@ -95,6 +95,37 @@ class VectorStore(ABC):
95
95
  def embedding_dim(self) -> int:
96
96
  return len(self.embedding_fn(["test"])[0])
97
97
 
98
+ def clone(self) -> "VectorStore":
99
+ """Return a vector-store clone suitable for agent cloning.
100
+
101
+ The default implementation deep-copies the configuration, reuses any
102
+ existing embedding model, and instantiates a fresh store of the same
103
+ type. Subclasses can override when sharing the instance is required
104
+ (e.g., embedded/local stores that rely on file locks).
105
+ """
106
+
107
+ config_copy = self.config.model_copy(deep=True)
108
+ # Preserve the calculated collection contents without forcing replaces
109
+ if hasattr(config_copy, "replace_collection"):
110
+ config_copy.replace_collection = False # type: ignore[attr-defined]
111
+ if hasattr(config_copy, "embedding_model"):
112
+ config_copy.embedding_model = getattr(self.config, "embedding_model", None)
113
+ # Fall back to the existing embedding model instance if config lacks it
114
+ if getattr(config_copy, "embedding_model", None) is None:
115
+ setattr(
116
+ config_copy, "embedding_model", getattr(self, "embedding_model", None)
117
+ )
118
+
119
+ cloned_store = type(self)(config_copy) # type: ignore[call-arg]
120
+ # Some stores might not honour replace_collection; ensure same collection
121
+ if getattr(self.config, "collection_name", None) is not None:
122
+ setattr(
123
+ cloned_store.config,
124
+ "collection_name",
125
+ getattr(self.config, "collection_name", None),
126
+ )
127
+ return cloned_store
128
+
98
129
  @abstractmethod
99
130
  def clear_empty_collections(self) -> int:
100
131
  """Clear all empty collections in the vector store.
@@ -143,6 +143,14 @@ class QdrantDB(VectorStore):
143
143
  config.collection_name, replace=config.replace_collection
144
144
  )
145
145
 
146
+ def clone(self) -> "QdrantDB":
147
+ """Create an independent Qdrant client when running against Qdrant Cloud."""
148
+ if not self.config.cloud:
149
+ return self
150
+ cloned = super().clone()
151
+ assert isinstance(cloned, QdrantDB)
152
+ return cloned
153
+
146
154
  def close(self) -> None:
147
155
  """
148
156
  Close the QdrantDB client and release any resources (e.g., file locks).
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "langroid"
3
- version = "0.59.11"
3
+ version = "0.59.13"
4
4
  authors = [
5
5
  {name = "Prasad Chalasani", email = "pchalasani@gmail.com"},
6
6
  ]
File without changes
File without changes
File without changes
File without changes