langroid 0.53.13__tar.gz → 0.53.14__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 (140) hide show
  1. {langroid-0.53.13 → langroid-0.53.14}/PKG-INFO +1 -1
  2. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/base.py +4 -0
  3. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/batch.py +15 -0
  4. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/callbacks/chainlit.py +6 -1
  5. {langroid-0.53.13 → langroid-0.53.14}/langroid/utils/logging.py +12 -2
  6. {langroid-0.53.13 → langroid-0.53.14}/pyproject.toml +1 -1
  7. {langroid-0.53.13 → langroid-0.53.14}/.gitignore +0 -0
  8. {langroid-0.53.13 → langroid-0.53.14}/LICENSE +0 -0
  9. {langroid-0.53.13 → langroid-0.53.14}/README.md +0 -0
  10. {langroid-0.53.13 → langroid-0.53.14}/langroid/__init__.py +0 -0
  11. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/__init__.py +0 -0
  12. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/callbacks/__init__.py +0 -0
  13. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/chat_agent.py +0 -0
  14. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/chat_document.py +0 -0
  15. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/openai_assistant.py +0 -0
  16. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/special/__init__.py +0 -0
  17. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/special/arangodb/__init__.py +0 -0
  18. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/special/arangodb/arangodb_agent.py +0 -0
  19. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/special/arangodb/system_messages.py +0 -0
  20. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/special/arangodb/tools.py +0 -0
  21. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/special/arangodb/utils.py +0 -0
  22. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/special/doc_chat_agent.py +0 -0
  23. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/special/doc_chat_task.py +0 -0
  24. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/special/lance_doc_chat_agent.py +0 -0
  25. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/special/lance_rag/__init__.py +0 -0
  26. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/special/lance_rag/critic_agent.py +0 -0
  27. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/special/lance_rag/lance_rag_task.py +0 -0
  28. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/special/lance_rag/query_planner_agent.py +0 -0
  29. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/special/lance_tools.py +0 -0
  30. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/special/neo4j/__init__.py +0 -0
  31. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/special/neo4j/csv_kg_chat.py +0 -0
  32. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/special/neo4j/neo4j_chat_agent.py +0 -0
  33. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/special/neo4j/system_messages.py +0 -0
  34. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/special/neo4j/tools.py +0 -0
  35. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/special/relevance_extractor_agent.py +0 -0
  36. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/special/retriever_agent.py +0 -0
  37. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/special/sql/__init__.py +0 -0
  38. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/special/sql/sql_chat_agent.py +0 -0
  39. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/special/sql/utils/__init__.py +0 -0
  40. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/special/sql/utils/description_extractors.py +0 -0
  41. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/special/sql/utils/populate_metadata.py +0 -0
  42. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/special/sql/utils/system_message.py +0 -0
  43. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/special/sql/utils/tools.py +0 -0
  44. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/special/table_chat_agent.py +0 -0
  45. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/task.py +0 -0
  46. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/tool_message.py +0 -0
  47. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/tools/__init__.py +0 -0
  48. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/tools/duckduckgo_search_tool.py +0 -0
  49. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/tools/exa_search_tool.py +0 -0
  50. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/tools/file_tools.py +0 -0
  51. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/tools/google_search_tool.py +0 -0
  52. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/tools/mcp/__init__.py +0 -0
  53. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/tools/mcp/decorators.py +0 -0
  54. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/tools/mcp/fastmcp_client.py +0 -0
  55. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/tools/metaphor_search_tool.py +0 -0
  56. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/tools/orchestration.py +0 -0
  57. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/tools/recipient_tool.py +0 -0
  58. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/tools/retrieval_tool.py +0 -0
  59. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/tools/rewind_tool.py +0 -0
  60. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/tools/segment_extract_tool.py +0 -0
  61. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/tools/tavily_search_tool.py +0 -0
  62. {langroid-0.53.13 → langroid-0.53.14}/langroid/agent/xml_tool_message.py +0 -0
  63. {langroid-0.53.13 → langroid-0.53.14}/langroid/cachedb/__init__.py +0 -0
  64. {langroid-0.53.13 → langroid-0.53.14}/langroid/cachedb/base.py +0 -0
  65. {langroid-0.53.13 → langroid-0.53.14}/langroid/cachedb/redis_cachedb.py +0 -0
  66. {langroid-0.53.13 → langroid-0.53.14}/langroid/embedding_models/__init__.py +0 -0
  67. {langroid-0.53.13 → langroid-0.53.14}/langroid/embedding_models/base.py +0 -0
  68. {langroid-0.53.13 → langroid-0.53.14}/langroid/embedding_models/models.py +0 -0
  69. {langroid-0.53.13 → langroid-0.53.14}/langroid/embedding_models/protoc/__init__.py +0 -0
  70. {langroid-0.53.13 → langroid-0.53.14}/langroid/embedding_models/protoc/embeddings.proto +0 -0
  71. {langroid-0.53.13 → langroid-0.53.14}/langroid/embedding_models/protoc/embeddings_pb2.py +0 -0
  72. {langroid-0.53.13 → langroid-0.53.14}/langroid/embedding_models/protoc/embeddings_pb2.pyi +0 -0
  73. {langroid-0.53.13 → langroid-0.53.14}/langroid/embedding_models/protoc/embeddings_pb2_grpc.py +0 -0
  74. {langroid-0.53.13 → langroid-0.53.14}/langroid/embedding_models/remote_embeds.py +0 -0
  75. {langroid-0.53.13 → langroid-0.53.14}/langroid/exceptions.py +0 -0
  76. {langroid-0.53.13 → langroid-0.53.14}/langroid/language_models/__init__.py +0 -0
  77. {langroid-0.53.13 → langroid-0.53.14}/langroid/language_models/azure_openai.py +0 -0
  78. {langroid-0.53.13 → langroid-0.53.14}/langroid/language_models/base.py +0 -0
  79. {langroid-0.53.13 → langroid-0.53.14}/langroid/language_models/config.py +0 -0
  80. {langroid-0.53.13 → langroid-0.53.14}/langroid/language_models/mcp_client_lm.py +0 -0
  81. {langroid-0.53.13 → langroid-0.53.14}/langroid/language_models/mock_lm.py +0 -0
  82. {langroid-0.53.13 → langroid-0.53.14}/langroid/language_models/model_info.py +0 -0
  83. {langroid-0.53.13 → langroid-0.53.14}/langroid/language_models/openai_gpt.py +0 -0
  84. {langroid-0.53.13 → langroid-0.53.14}/langroid/language_models/prompt_formatter/__init__.py +0 -0
  85. {langroid-0.53.13 → langroid-0.53.14}/langroid/language_models/prompt_formatter/base.py +0 -0
  86. {langroid-0.53.13 → langroid-0.53.14}/langroid/language_models/prompt_formatter/hf_formatter.py +0 -0
  87. {langroid-0.53.13 → langroid-0.53.14}/langroid/language_models/prompt_formatter/llama2_formatter.py +0 -0
  88. {langroid-0.53.13 → langroid-0.53.14}/langroid/language_models/utils.py +0 -0
  89. {langroid-0.53.13 → langroid-0.53.14}/langroid/mytypes.py +0 -0
  90. {langroid-0.53.13 → langroid-0.53.14}/langroid/parsing/__init__.py +0 -0
  91. {langroid-0.53.13 → langroid-0.53.14}/langroid/parsing/agent_chats.py +0 -0
  92. {langroid-0.53.13 → langroid-0.53.14}/langroid/parsing/code_parser.py +0 -0
  93. {langroid-0.53.13 → langroid-0.53.14}/langroid/parsing/document_parser.py +0 -0
  94. {langroid-0.53.13 → langroid-0.53.14}/langroid/parsing/file_attachment.py +0 -0
  95. {langroid-0.53.13 → langroid-0.53.14}/langroid/parsing/md_parser.py +0 -0
  96. {langroid-0.53.13 → langroid-0.53.14}/langroid/parsing/para_sentence_split.py +0 -0
  97. {langroid-0.53.13 → langroid-0.53.14}/langroid/parsing/parse_json.py +0 -0
  98. {langroid-0.53.13 → langroid-0.53.14}/langroid/parsing/parser.py +0 -0
  99. {langroid-0.53.13 → langroid-0.53.14}/langroid/parsing/pdf_utils.py +0 -0
  100. {langroid-0.53.13 → langroid-0.53.14}/langroid/parsing/repo_loader.py +0 -0
  101. {langroid-0.53.13 → langroid-0.53.14}/langroid/parsing/routing.py +0 -0
  102. {langroid-0.53.13 → langroid-0.53.14}/langroid/parsing/search.py +0 -0
  103. {langroid-0.53.13 → langroid-0.53.14}/langroid/parsing/spider.py +0 -0
  104. {langroid-0.53.13 → langroid-0.53.14}/langroid/parsing/table_loader.py +0 -0
  105. {langroid-0.53.13 → langroid-0.53.14}/langroid/parsing/url_loader.py +0 -0
  106. {langroid-0.53.13 → langroid-0.53.14}/langroid/parsing/urls.py +0 -0
  107. {langroid-0.53.13 → langroid-0.53.14}/langroid/parsing/utils.py +0 -0
  108. {langroid-0.53.13 → langroid-0.53.14}/langroid/parsing/web_search.py +0 -0
  109. {langroid-0.53.13 → langroid-0.53.14}/langroid/prompts/__init__.py +0 -0
  110. {langroid-0.53.13 → langroid-0.53.14}/langroid/prompts/dialog.py +0 -0
  111. {langroid-0.53.13 → langroid-0.53.14}/langroid/prompts/prompts_config.py +0 -0
  112. {langroid-0.53.13 → langroid-0.53.14}/langroid/prompts/templates.py +0 -0
  113. {langroid-0.53.13 → langroid-0.53.14}/langroid/py.typed +0 -0
  114. {langroid-0.53.13 → langroid-0.53.14}/langroid/pydantic_v1/__init__.py +0 -0
  115. {langroid-0.53.13 → langroid-0.53.14}/langroid/pydantic_v1/main.py +0 -0
  116. {langroid-0.53.13 → langroid-0.53.14}/langroid/utils/__init__.py +0 -0
  117. {langroid-0.53.13 → langroid-0.53.14}/langroid/utils/algorithms/__init__.py +0 -0
  118. {langroid-0.53.13 → langroid-0.53.14}/langroid/utils/algorithms/graph.py +0 -0
  119. {langroid-0.53.13 → langroid-0.53.14}/langroid/utils/configuration.py +0 -0
  120. {langroid-0.53.13 → langroid-0.53.14}/langroid/utils/constants.py +0 -0
  121. {langroid-0.53.13 → langroid-0.53.14}/langroid/utils/git_utils.py +0 -0
  122. {langroid-0.53.13 → langroid-0.53.14}/langroid/utils/globals.py +0 -0
  123. {langroid-0.53.13 → langroid-0.53.14}/langroid/utils/object_registry.py +0 -0
  124. {langroid-0.53.13 → langroid-0.53.14}/langroid/utils/output/__init__.py +0 -0
  125. {langroid-0.53.13 → langroid-0.53.14}/langroid/utils/output/citations.py +0 -0
  126. {langroid-0.53.13 → langroid-0.53.14}/langroid/utils/output/printing.py +0 -0
  127. {langroid-0.53.13 → langroid-0.53.14}/langroid/utils/output/status.py +0 -0
  128. {langroid-0.53.13 → langroid-0.53.14}/langroid/utils/pandas_utils.py +0 -0
  129. {langroid-0.53.13 → langroid-0.53.14}/langroid/utils/pydantic_utils.py +0 -0
  130. {langroid-0.53.13 → langroid-0.53.14}/langroid/utils/system.py +0 -0
  131. {langroid-0.53.13 → langroid-0.53.14}/langroid/utils/types.py +0 -0
  132. {langroid-0.53.13 → langroid-0.53.14}/langroid/vector_store/__init__.py +0 -0
  133. {langroid-0.53.13 → langroid-0.53.14}/langroid/vector_store/base.py +0 -0
  134. {langroid-0.53.13 → langroid-0.53.14}/langroid/vector_store/chromadb.py +0 -0
  135. {langroid-0.53.13 → langroid-0.53.14}/langroid/vector_store/lancedb.py +0 -0
  136. {langroid-0.53.13 → langroid-0.53.14}/langroid/vector_store/meilisearch.py +0 -0
  137. {langroid-0.53.13 → langroid-0.53.14}/langroid/vector_store/pineconedb.py +0 -0
  138. {langroid-0.53.13 → langroid-0.53.14}/langroid/vector_store/postgres.py +0 -0
  139. {langroid-0.53.13 → langroid-0.53.14}/langroid/vector_store/qdrantdb.py +0 -0
  140. {langroid-0.53.13 → langroid-0.53.14}/langroid/vector_store/weaviatedb.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langroid
3
- Version: 0.53.13
3
+ Version: 0.53.14
4
4
  Summary: Harness LLMs with Multi-Agent Programming
5
5
  Author-email: Prasad Chalasani <pchalasani@gmail.com>
6
6
  License: MIT
@@ -503,6 +503,10 @@ class Agent(ABC):
503
503
  self.callbacks.show_agent_response(
504
504
  content=results_str,
505
505
  language="json" if maybe_json else "text",
506
+ is_tool=(
507
+ isinstance(results, ChatDocument)
508
+ and self.has_tool_message_attempt(results)
509
+ ),
506
510
  )
507
511
  if isinstance(results, ChatDocument):
508
512
  # Preserve trail of tool_ids for OpenAI Assistant fn-calls
@@ -334,6 +334,21 @@ def run_batch_task_gen(
334
334
  task_i.kill()
335
335
  # exception will be handled by the caller
336
336
  raise e
337
+ # ----------------------------------------
338
+ # Propagate any exception stored on the task that may have been
339
+ # swallowed inside `Task.run_async`, so that the upper-level
340
+ # exception-handling logic works as expected.
341
+ for attr in ("_exception", "last_exception", "exception"):
342
+ exc = getattr(task_i, attr, None)
343
+ if isinstance(exc, BaseException):
344
+ raise exc
345
+ # Fallback: treat a KILL-status result as an error
346
+ if (
347
+ isinstance(result, ChatDocument)
348
+ and getattr(result, "status", None) is not None
349
+ and str(getattr(result, "status")) == "StatusCode.KILL"
350
+ ):
351
+ raise RuntimeError(str(result.content))
337
352
  return result
338
353
 
339
354
  return run_batched_tasks(
@@ -410,7 +410,12 @@ class ChainlitAgentCallbacks:
410
410
  self.last_step = step
411
411
  run_sync(step.send())
412
412
 
413
- def show_agent_response(self, content: str, language="text") -> None:
413
+ def show_agent_response(
414
+ self,
415
+ content: str,
416
+ language="text",
417
+ is_tool: bool = False,
418
+ ) -> None:
414
419
  """Show message from agent (typically tool handler)."""
415
420
  if language == "text":
416
421
  content = wrap_text_preserving_structure(content, width=90)
@@ -1,6 +1,7 @@
1
1
  import logging
2
2
  import os
3
3
  import os.path
4
+ import sys
4
5
  import threading
5
6
  from typing import ClassVar, Dict, no_type_check
6
7
 
@@ -163,7 +164,16 @@ class RichFileLogger:
163
164
 
164
165
  os.makedirs(os.path.dirname(log_file), exist_ok=True)
165
166
  mode = "a" if append else "w"
166
- self.file = open(log_file, mode, buffering=1, encoding="utf-8")
167
+ self._owns_file: bool = True
168
+ try:
169
+ self.file = open(log_file, mode, buffering=1, encoding="utf-8")
170
+ except OSError as exc: # EMFILE: too many open files
171
+ if exc.errno == 24:
172
+ # Fallback: reuse an already-open stream to avoid creating a new FD
173
+ self.file = sys.stderr
174
+ self._owns_file = False
175
+ else:
176
+ raise
167
177
  self.log_file: str = log_file
168
178
  self.color: bool = color
169
179
  self.console: Console | None = (
@@ -195,7 +205,7 @@ class RichFileLogger:
195
205
  self._ref_counts.pop(self.log_file, None)
196
206
  self._instances.pop(self.log_file, None)
197
207
  with self._write_lock:
198
- if not self.file.closed:
208
+ if self._owns_file and not self.file.closed:
199
209
  self.file.close()
200
210
  else:
201
211
  self._ref_counts[self.log_file] = count
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "langroid"
3
- version = "0.53.13"
3
+ version = "0.53.14"
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