langroid 0.59.3__tar.gz → 0.59.5__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.3 → langroid-0.59.5}/PKG-INFO +1 -1
  2. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/chat_agent.py +6 -1
  3. {langroid-0.59.3 → langroid-0.59.5}/langroid/language_models/openai_gpt.py +10 -31
  4. {langroid-0.59.3 → langroid-0.59.5}/pyproject.toml +1 -1
  5. {langroid-0.59.3 → langroid-0.59.5}/.gitignore +0 -0
  6. {langroid-0.59.3 → langroid-0.59.5}/LICENSE +0 -0
  7. {langroid-0.59.3 → langroid-0.59.5}/README.md +0 -0
  8. {langroid-0.59.3 → langroid-0.59.5}/langroid/__init__.py +0 -0
  9. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/__init__.py +0 -0
  10. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/base.py +0 -0
  11. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/batch.py +0 -0
  12. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/callbacks/__init__.py +0 -0
  13. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/callbacks/chainlit.py +0 -0
  14. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/chat_document.py +0 -0
  15. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/done_sequence_parser.py +0 -0
  16. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/openai_assistant.py +0 -0
  17. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/special/__init__.py +0 -0
  18. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/special/arangodb/__init__.py +0 -0
  19. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/special/arangodb/arangodb_agent.py +0 -0
  20. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/special/arangodb/system_messages.py +0 -0
  21. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/special/arangodb/tools.py +0 -0
  22. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/special/arangodb/utils.py +0 -0
  23. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/special/doc_chat_agent.py +0 -0
  24. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/special/doc_chat_task.py +0 -0
  25. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/special/lance_doc_chat_agent.py +0 -0
  26. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/special/lance_rag/__init__.py +0 -0
  27. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/special/lance_rag/critic_agent.py +0 -0
  28. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/special/lance_rag/lance_rag_task.py +0 -0
  29. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/special/lance_rag/query_planner_agent.py +0 -0
  30. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/special/lance_tools.py +0 -0
  31. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/special/neo4j/__init__.py +0 -0
  32. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/special/neo4j/csv_kg_chat.py +0 -0
  33. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/special/neo4j/neo4j_chat_agent.py +0 -0
  34. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/special/neo4j/system_messages.py +0 -0
  35. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/special/neo4j/tools.py +0 -0
  36. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/special/relevance_extractor_agent.py +0 -0
  37. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/special/retriever_agent.py +0 -0
  38. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/special/sql/__init__.py +0 -0
  39. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/special/sql/sql_chat_agent.py +0 -0
  40. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/special/sql/utils/__init__.py +0 -0
  41. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/special/sql/utils/description_extractors.py +0 -0
  42. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/special/sql/utils/populate_metadata.py +0 -0
  43. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/special/sql/utils/system_message.py +0 -0
  44. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/special/sql/utils/tools.py +0 -0
  45. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/special/table_chat_agent.py +0 -0
  46. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/task.py +0 -0
  47. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/tool_message.py +0 -0
  48. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/tools/__init__.py +0 -0
  49. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/tools/duckduckgo_search_tool.py +0 -0
  50. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/tools/exa_search_tool.py +0 -0
  51. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/tools/file_tools.py +0 -0
  52. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/tools/google_search_tool.py +0 -0
  53. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/tools/mcp/__init__.py +0 -0
  54. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/tools/mcp/decorators.py +0 -0
  55. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/tools/mcp/fastmcp_client.py +0 -0
  56. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/tools/metaphor_search_tool.py +0 -0
  57. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/tools/orchestration.py +0 -0
  58. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/tools/recipient_tool.py +0 -0
  59. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/tools/retrieval_tool.py +0 -0
  60. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/tools/rewind_tool.py +0 -0
  61. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/tools/segment_extract_tool.py +0 -0
  62. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/tools/task_tool.py +0 -0
  63. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/tools/tavily_search_tool.py +0 -0
  64. {langroid-0.59.3 → langroid-0.59.5}/langroid/agent/xml_tool_message.py +0 -0
  65. {langroid-0.59.3 → langroid-0.59.5}/langroid/cachedb/__init__.py +0 -0
  66. {langroid-0.59.3 → langroid-0.59.5}/langroid/cachedb/base.py +0 -0
  67. {langroid-0.59.3 → langroid-0.59.5}/langroid/cachedb/redis_cachedb.py +0 -0
  68. {langroid-0.59.3 → langroid-0.59.5}/langroid/embedding_models/__init__.py +0 -0
  69. {langroid-0.59.3 → langroid-0.59.5}/langroid/embedding_models/base.py +0 -0
  70. {langroid-0.59.3 → langroid-0.59.5}/langroid/embedding_models/models.py +0 -0
  71. {langroid-0.59.3 → langroid-0.59.5}/langroid/embedding_models/protoc/__init__.py +0 -0
  72. {langroid-0.59.3 → langroid-0.59.5}/langroid/embedding_models/protoc/embeddings.proto +0 -0
  73. {langroid-0.59.3 → langroid-0.59.5}/langroid/embedding_models/protoc/embeddings_pb2.py +0 -0
  74. {langroid-0.59.3 → langroid-0.59.5}/langroid/embedding_models/protoc/embeddings_pb2.pyi +0 -0
  75. {langroid-0.59.3 → langroid-0.59.5}/langroid/embedding_models/protoc/embeddings_pb2_grpc.py +0 -0
  76. {langroid-0.59.3 → langroid-0.59.5}/langroid/embedding_models/remote_embeds.py +0 -0
  77. {langroid-0.59.3 → langroid-0.59.5}/langroid/exceptions.py +0 -0
  78. {langroid-0.59.3 → langroid-0.59.5}/langroid/language_models/__init__.py +0 -0
  79. {langroid-0.59.3 → langroid-0.59.5}/langroid/language_models/azure_openai.py +0 -0
  80. {langroid-0.59.3 → langroid-0.59.5}/langroid/language_models/base.py +0 -0
  81. {langroid-0.59.3 → langroid-0.59.5}/langroid/language_models/client_cache.py +0 -0
  82. {langroid-0.59.3 → langroid-0.59.5}/langroid/language_models/config.py +0 -0
  83. {langroid-0.59.3 → langroid-0.59.5}/langroid/language_models/mock_lm.py +0 -0
  84. {langroid-0.59.3 → langroid-0.59.5}/langroid/language_models/model_info.py +0 -0
  85. {langroid-0.59.3 → langroid-0.59.5}/langroid/language_models/prompt_formatter/__init__.py +0 -0
  86. {langroid-0.59.3 → langroid-0.59.5}/langroid/language_models/prompt_formatter/base.py +0 -0
  87. {langroid-0.59.3 → langroid-0.59.5}/langroid/language_models/prompt_formatter/hf_formatter.py +0 -0
  88. {langroid-0.59.3 → langroid-0.59.5}/langroid/language_models/prompt_formatter/llama2_formatter.py +0 -0
  89. {langroid-0.59.3 → langroid-0.59.5}/langroid/language_models/provider_params.py +0 -0
  90. {langroid-0.59.3 → langroid-0.59.5}/langroid/language_models/utils.py +0 -0
  91. {langroid-0.59.3 → langroid-0.59.5}/langroid/mcp/__init__.py +0 -0
  92. {langroid-0.59.3 → langroid-0.59.5}/langroid/mcp/server/__init__.py +0 -0
  93. {langroid-0.59.3 → langroid-0.59.5}/langroid/mytypes.py +0 -0
  94. {langroid-0.59.3 → langroid-0.59.5}/langroid/parsing/__init__.py +0 -0
  95. {langroid-0.59.3 → langroid-0.59.5}/langroid/parsing/agent_chats.py +0 -0
  96. {langroid-0.59.3 → langroid-0.59.5}/langroid/parsing/code_parser.py +0 -0
  97. {langroid-0.59.3 → langroid-0.59.5}/langroid/parsing/document_parser.py +0 -0
  98. {langroid-0.59.3 → langroid-0.59.5}/langroid/parsing/file_attachment.py +0 -0
  99. {langroid-0.59.3 → langroid-0.59.5}/langroid/parsing/md_parser.py +0 -0
  100. {langroid-0.59.3 → langroid-0.59.5}/langroid/parsing/para_sentence_split.py +0 -0
  101. {langroid-0.59.3 → langroid-0.59.5}/langroid/parsing/parse_json.py +0 -0
  102. {langroid-0.59.3 → langroid-0.59.5}/langroid/parsing/parser.py +0 -0
  103. {langroid-0.59.3 → langroid-0.59.5}/langroid/parsing/pdf_utils.py +0 -0
  104. {langroid-0.59.3 → langroid-0.59.5}/langroid/parsing/repo_loader.py +0 -0
  105. {langroid-0.59.3 → langroid-0.59.5}/langroid/parsing/routing.py +0 -0
  106. {langroid-0.59.3 → langroid-0.59.5}/langroid/parsing/search.py +0 -0
  107. {langroid-0.59.3 → langroid-0.59.5}/langroid/parsing/spider.py +0 -0
  108. {langroid-0.59.3 → langroid-0.59.5}/langroid/parsing/table_loader.py +0 -0
  109. {langroid-0.59.3 → langroid-0.59.5}/langroid/parsing/url_loader.py +0 -0
  110. {langroid-0.59.3 → langroid-0.59.5}/langroid/parsing/urls.py +0 -0
  111. {langroid-0.59.3 → langroid-0.59.5}/langroid/parsing/utils.py +0 -0
  112. {langroid-0.59.3 → langroid-0.59.5}/langroid/parsing/web_search.py +0 -0
  113. {langroid-0.59.3 → langroid-0.59.5}/langroid/prompts/__init__.py +0 -0
  114. {langroid-0.59.3 → langroid-0.59.5}/langroid/prompts/dialog.py +0 -0
  115. {langroid-0.59.3 → langroid-0.59.5}/langroid/prompts/prompts_config.py +0 -0
  116. {langroid-0.59.3 → langroid-0.59.5}/langroid/prompts/templates.py +0 -0
  117. {langroid-0.59.3 → langroid-0.59.5}/langroid/py.typed +0 -0
  118. {langroid-0.59.3 → langroid-0.59.5}/langroid/pydantic_v1/__init__.py +0 -0
  119. {langroid-0.59.3 → langroid-0.59.5}/langroid/pydantic_v1/main.py +0 -0
  120. {langroid-0.59.3 → langroid-0.59.5}/langroid/utils/__init__.py +0 -0
  121. {langroid-0.59.3 → langroid-0.59.5}/langroid/utils/algorithms/__init__.py +0 -0
  122. {langroid-0.59.3 → langroid-0.59.5}/langroid/utils/algorithms/graph.py +0 -0
  123. {langroid-0.59.3 → langroid-0.59.5}/langroid/utils/configuration.py +0 -0
  124. {langroid-0.59.3 → langroid-0.59.5}/langroid/utils/constants.py +0 -0
  125. {langroid-0.59.3 → langroid-0.59.5}/langroid/utils/git_utils.py +0 -0
  126. {langroid-0.59.3 → langroid-0.59.5}/langroid/utils/globals.py +0 -0
  127. {langroid-0.59.3 → langroid-0.59.5}/langroid/utils/html_logger.py +0 -0
  128. {langroid-0.59.3 → langroid-0.59.5}/langroid/utils/logging.py +0 -0
  129. {langroid-0.59.3 → langroid-0.59.5}/langroid/utils/object_registry.py +0 -0
  130. {langroid-0.59.3 → langroid-0.59.5}/langroid/utils/output/__init__.py +0 -0
  131. {langroid-0.59.3 → langroid-0.59.5}/langroid/utils/output/citations.py +0 -0
  132. {langroid-0.59.3 → langroid-0.59.5}/langroid/utils/output/printing.py +0 -0
  133. {langroid-0.59.3 → langroid-0.59.5}/langroid/utils/output/status.py +0 -0
  134. {langroid-0.59.3 → langroid-0.59.5}/langroid/utils/pandas_utils.py +0 -0
  135. {langroid-0.59.3 → langroid-0.59.5}/langroid/utils/pydantic_utils.py +0 -0
  136. {langroid-0.59.3 → langroid-0.59.5}/langroid/utils/system.py +0 -0
  137. {langroid-0.59.3 → langroid-0.59.5}/langroid/utils/types.py +0 -0
  138. {langroid-0.59.3 → langroid-0.59.5}/langroid/vector_store/__init__.py +0 -0
  139. {langroid-0.59.3 → langroid-0.59.5}/langroid/vector_store/base.py +0 -0
  140. {langroid-0.59.3 → langroid-0.59.5}/langroid/vector_store/chromadb.py +0 -0
  141. {langroid-0.59.3 → langroid-0.59.5}/langroid/vector_store/lancedb.py +0 -0
  142. {langroid-0.59.3 → langroid-0.59.5}/langroid/vector_store/meilisearch.py +0 -0
  143. {langroid-0.59.3 → langroid-0.59.5}/langroid/vector_store/pineconedb.py +0 -0
  144. {langroid-0.59.3 → langroid-0.59.5}/langroid/vector_store/postgres.py +0 -0
  145. {langroid-0.59.3 → langroid-0.59.5}/langroid/vector_store/qdrantdb.py +0 -0
  146. {langroid-0.59.3 → langroid-0.59.5}/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.3
3
+ Version: 0.59.5
4
4
  Summary: Harness LLMs with Multi-Agent Programming
5
5
  Author-email: Prasad Chalasani <pchalasani@gmail.com>
6
6
  License: MIT
@@ -264,12 +264,17 @@ class ChatAgent(Agent):
264
264
  Revisit later.
265
265
  """
266
266
  agent_cls = type(self)
267
- config_copy = copy.deepcopy(self.config)
267
+ # Use model_copy to preserve Pydantic subclass types (like MockLMConfig)
268
+ # instead of deepcopy which loses subclass information
269
+ config_copy = self.config.model_copy(deep=True)
268
270
  config_copy.name = f"{config_copy.name}-{i}"
269
271
  new_agent = agent_cls(config_copy)
270
272
  new_agent.system_tool_instructions = self.system_tool_instructions
271
273
  new_agent.system_tool_format_instructions = self.system_tool_format_instructions
272
274
  new_agent.llm_tools_map = self.llm_tools_map
275
+ new_agent.llm_tools_known = self.llm_tools_known
276
+ new_agent.llm_tools_handled = self.llm_tools_handled
277
+ new_agent.llm_tools_usable = self.llm_tools_usable
273
278
  new_agent.llm_functions_map = self.llm_functions_map
274
279
  new_agent.llm_functions_handled = self.llm_functions_handled
275
280
  new_agent.llm_functions_usable = self.llm_functions_usable
@@ -323,37 +323,15 @@ class OpenAIGPTConfig(LLMConfig):
323
323
  self, *, update: Mapping[str, Any] | None = None, deep: bool = False
324
324
  ) -> "OpenAIGPTConfig":
325
325
  """
326
- Override model_copy to handle unpicklable fields properly.
326
+ Copy config while preserving nested model instances and subclasses.
327
327
 
328
- This preserves fields like http_client_factory during normal copying
329
- while still allowing exclusion for pickling operations.
328
+ Important: Avoid reconstructing via `model_dump` as that coerces nested
329
+ models to their annotated base types (dropping subclass-only fields).
330
+ Instead, defer to Pydantic's native `model_copy`, which keeps nested
331
+ `BaseModel` instances (and their concrete subclasses) intact.
330
332
  """
331
- # Save references to unpicklable fields
332
- http_client_factory = self.http_client_factory
333
- streamer = self.streamer
334
- streamer_async = self.streamer_async
335
-
336
- # Get the current model data, excluding problematic fields
337
- data = self.model_dump(
338
- exclude={"http_client_factory", "streamer", "streamer_async"}
339
- )
340
-
341
- # Apply any updates
342
- if update:
343
- data.update(update)
344
-
345
- # Create a new instance with the copied data
346
- new_instance = self.__class__(**data)
347
-
348
- # Restore the unpicklable fields if they weren't overridden by update
349
- if "http_client_factory" not in (update or {}):
350
- new_instance.http_client_factory = http_client_factory
351
- if "streamer" not in (update or {}):
352
- new_instance.streamer = streamer
353
- if "streamer_async" not in (update or {}):
354
- new_instance.streamer_async = streamer_async
355
-
356
- return new_instance
333
+ # Delegate to BaseSettings/BaseModel implementation to preserve types
334
+ return super().model_copy(update=update, deep=deep) # type: ignore[return-value]
357
335
 
358
336
  def _validate_litellm(self) -> None:
359
337
  """
@@ -441,8 +419,9 @@ class OpenAIGPT(LanguageModel):
441
419
  Args:
442
420
  config: configuration for openai-gpt model
443
421
  """
444
- # copy the config to avoid modifying the original
445
- config = config.model_copy()
422
+ # copy the config to avoid modifying the original; deep to decouple
423
+ # nested models while preserving their concrete subclasses
424
+ config = config.model_copy(deep=True)
446
425
  super().__init__(config)
447
426
  self.config: OpenAIGPTConfig = config
448
427
  # save original model name such as `provider/model` before
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "langroid"
3
- version = "0.59.3"
3
+ version = "0.59.5"
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
File without changes