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.
- {langroid-0.19.5 → langroid-0.20.1}/PKG-INFO +5 -1
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/base.py +29 -14
- langroid-0.20.1/langroid/agent/special/arangodb/arangodb_agent.py +649 -0
- langroid-0.20.1/langroid/agent/special/arangodb/system_messages.py +183 -0
- langroid-0.20.1/langroid/agent/special/arangodb/tools.py +102 -0
- langroid-0.20.1/langroid/agent/special/arangodb/utils.py +36 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/neo4j/neo4j_chat_agent.py +120 -54
- langroid-0.20.1/langroid/agent/special/neo4j/system_messages.py +120 -0
- langroid-0.20.1/langroid/agent/special/neo4j/tools.py +32 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/sql/sql_chat_agent.py +8 -3
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/task.py +78 -56
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/tools/orchestration.py +7 -7
- {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/parser.py +6 -0
- {langroid-0.19.5 → langroid-0.20.1}/pyproject.toml +7 -1
- langroid-0.19.5/langroid/agent/special/neo4j/utils/system_message.py +0 -64
- {langroid-0.19.5 → langroid-0.20.1}/LICENSE +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/README.md +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/__init__.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/__init__.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/batch.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/callbacks/__init__.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/callbacks/chainlit.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/chat_agent.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/chat_document.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/helpers.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/junk +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/openai_assistant.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/__init__.py +0 -0
- {langroid-0.19.5/langroid/agent/special/neo4j → langroid-0.20.1/langroid/agent/special/arangodb}/__init__.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/doc_chat_agent.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/lance_doc_chat_agent.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/lance_rag/__init__.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/lance_rag/critic_agent.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/lance_rag/lance_rag_task.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/lance_rag/query_planner_agent.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/lance_tools.py +0 -0
- {langroid-0.19.5/langroid/agent/special/neo4j/utils → langroid-0.20.1/langroid/agent/special/neo4j}/__init__.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/neo4j/csv_kg_chat.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/relevance_extractor_agent.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/retriever_agent.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/sql/__init__.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/sql/utils/__init__.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/sql/utils/description_extractors.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/sql/utils/populate_metadata.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/sql/utils/system_message.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/sql/utils/tools.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/special/table_chat_agent.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/structured_message.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/tool_message.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/tools/__init__.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/tools/duckduckgo_search_tool.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/tools/file_tools.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/tools/google_search_tool.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/tools/metaphor_search_tool.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/tools/recipient_tool.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/tools/retrieval_tool.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/tools/rewind_tool.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/tools/segment_extract_tool.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/typed_task.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent/xml_tool_message.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/agent_config.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/cachedb/__init__.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/cachedb/base.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/cachedb/momento_cachedb.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/cachedb/redis_cachedb.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/embedding_models/__init__.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/embedding_models/base.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/embedding_models/clustering.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/embedding_models/models.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/embedding_models/protoc/__init__.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/embedding_models/protoc/embeddings.proto +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/embedding_models/protoc/embeddings_pb2.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/embedding_models/protoc/embeddings_pb2.pyi +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/embedding_models/protoc/embeddings_pb2_grpc.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/embedding_models/remote_embeds.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/exceptions.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/language_models/.chainlit/config.toml +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/language_models/.chainlit/translations/en-US.json +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/language_models/__init__.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/language_models/azure_openai.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/language_models/base.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/language_models/config.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/language_models/mock_lm.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/language_models/openai_gpt.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/language_models/prompt_formatter/__init__.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/language_models/prompt_formatter/base.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/language_models/prompt_formatter/hf_formatter.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/language_models/prompt_formatter/llama2_formatter.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/language_models/utils.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/mytypes.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/__init__.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/agent_chats.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/code-parsing.md +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/code_parser.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/config.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/document_parser.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/image_text.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/para_sentence_split.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/parse_json.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/repo_loader.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/routing.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/search.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/spider.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/table_loader.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/url_loader.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/url_loader_cookies.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/urls.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/utils.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/parsing/web_search.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/prompts/__init__.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/prompts/chat-gpt4-system-prompt.md +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/prompts/dialog.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/prompts/prompts_config.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/prompts/templates.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/py.typed +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/pydantic_v1/__init__.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/pydantic_v1/main.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/.chainlit/config.toml +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/.chainlit/translations/en-US.json +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/__init__.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/algorithms/__init__.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/algorithms/graph.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/configuration.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/constants.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/docker.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/git_utils.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/globals.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/llms/__init__.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/llms/strings.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/logging.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/object_registry.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/output/__init__.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/output/citations.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/output/printing.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/output/status.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/pandas_utils.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/pydantic_utils.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/system.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/types.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/web/__init__.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/utils/web/login.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/vector_store/__init__.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/vector_store/base.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/vector_store/chromadb.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/vector_store/lancedb.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/vector_store/meilisearch.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/vector_store/momento.py +0 -0
- {langroid-0.19.5 → langroid-0.20.1}/langroid/vector_store/qdrant_cloud.py +0 -0
- {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.
|
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
|
-
|
422
|
-
|
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}
|
659
|
-
|
660
|
-
f"
|
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
|
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
|
-
"""
|
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;
|