langroid 0.58.2__py3-none-any.whl → 0.59.0b1__py3-none-any.whl
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/agent/base.py +39 -17
- langroid/agent/base.py-e +2216 -0
- langroid/agent/callbacks/chainlit.py +2 -1
- langroid/agent/chat_agent.py +73 -55
- langroid/agent/chat_agent.py-e +2086 -0
- langroid/agent/chat_document.py +7 -7
- langroid/agent/chat_document.py-e +513 -0
- langroid/agent/openai_assistant.py +9 -9
- langroid/agent/openai_assistant.py-e +882 -0
- langroid/agent/special/arangodb/arangodb_agent.py +10 -18
- langroid/agent/special/arangodb/arangodb_agent.py-e +648 -0
- langroid/agent/special/arangodb/tools.py +3 -3
- langroid/agent/special/doc_chat_agent.py +16 -14
- langroid/agent/special/lance_rag/critic_agent.py +2 -2
- langroid/agent/special/lance_rag/query_planner_agent.py +4 -4
- langroid/agent/special/lance_tools.py +6 -5
- langroid/agent/special/lance_tools.py-e +61 -0
- langroid/agent/special/neo4j/neo4j_chat_agent.py +3 -7
- langroid/agent/special/neo4j/neo4j_chat_agent.py-e +430 -0
- langroid/agent/special/relevance_extractor_agent.py +1 -1
- langroid/agent/special/sql/sql_chat_agent.py +11 -3
- langroid/agent/task.py +9 -87
- langroid/agent/task.py-e +2418 -0
- langroid/agent/tool_message.py +33 -17
- langroid/agent/tool_message.py-e +400 -0
- langroid/agent/tools/file_tools.py +4 -2
- langroid/agent/tools/file_tools.py-e +234 -0
- langroid/agent/tools/mcp/fastmcp_client.py +19 -6
- langroid/agent/tools/mcp/fastmcp_client.py-e +584 -0
- langroid/agent/tools/orchestration.py +22 -17
- langroid/agent/tools/orchestration.py-e +301 -0
- langroid/agent/tools/recipient_tool.py +3 -3
- langroid/agent/tools/task_tool.py +22 -16
- langroid/agent/tools/task_tool.py-e +249 -0
- langroid/agent/xml_tool_message.py +90 -35
- langroid/agent/xml_tool_message.py-e +392 -0
- langroid/cachedb/base.py +1 -1
- langroid/embedding_models/base.py +2 -2
- langroid/embedding_models/models.py +3 -7
- langroid/embedding_models/models.py-e +563 -0
- langroid/exceptions.py +4 -1
- langroid/language_models/azure_openai.py +2 -2
- langroid/language_models/azure_openai.py-e +134 -0
- langroid/language_models/base.py +6 -4
- langroid/language_models/base.py-e +812 -0
- langroid/language_models/client_cache.py +64 -0
- langroid/language_models/config.py +2 -4
- langroid/language_models/config.py-e +18 -0
- langroid/language_models/model_info.py +9 -1
- langroid/language_models/model_info.py-e +483 -0
- langroid/language_models/openai_gpt.py +119 -20
- langroid/language_models/openai_gpt.py-e +2280 -0
- langroid/language_models/provider_params.py +3 -22
- langroid/language_models/provider_params.py-e +153 -0
- langroid/mytypes.py +11 -4
- langroid/mytypes.py-e +132 -0
- langroid/parsing/code_parser.py +1 -1
- langroid/parsing/file_attachment.py +1 -1
- langroid/parsing/file_attachment.py-e +246 -0
- langroid/parsing/md_parser.py +14 -4
- langroid/parsing/md_parser.py-e +574 -0
- langroid/parsing/parser.py +22 -7
- langroid/parsing/parser.py-e +410 -0
- langroid/parsing/repo_loader.py +3 -1
- langroid/parsing/repo_loader.py-e +812 -0
- langroid/parsing/search.py +1 -1
- langroid/parsing/url_loader.py +17 -51
- langroid/parsing/url_loader.py-e +683 -0
- langroid/parsing/urls.py +5 -4
- langroid/parsing/urls.py-e +279 -0
- langroid/prompts/prompts_config.py +1 -1
- langroid/pydantic_v1/__init__.py +45 -6
- langroid/pydantic_v1/__init__.py-e +36 -0
- langroid/pydantic_v1/main.py +11 -4
- langroid/pydantic_v1/main.py-e +11 -0
- langroid/utils/configuration.py +13 -11
- langroid/utils/configuration.py-e +141 -0
- langroid/utils/constants.py +1 -1
- langroid/utils/constants.py-e +32 -0
- langroid/utils/globals.py +21 -5
- langroid/utils/globals.py-e +49 -0
- langroid/utils/html_logger.py +2 -1
- langroid/utils/html_logger.py-e +825 -0
- langroid/utils/object_registry.py +1 -1
- langroid/utils/object_registry.py-e +66 -0
- langroid/utils/pydantic_utils.py +55 -28
- langroid/utils/pydantic_utils.py-e +602 -0
- langroid/utils/types.py +2 -2
- langroid/utils/types.py-e +113 -0
- langroid/vector_store/base.py +3 -3
- langroid/vector_store/lancedb.py +5 -5
- langroid/vector_store/lancedb.py-e +404 -0
- langroid/vector_store/meilisearch.py +2 -2
- langroid/vector_store/pineconedb.py +4 -4
- langroid/vector_store/pineconedb.py-e +427 -0
- langroid/vector_store/postgres.py +1 -1
- langroid/vector_store/qdrantdb.py +3 -3
- langroid/vector_store/weaviatedb.py +1 -1
- {langroid-0.58.2.dist-info → langroid-0.59.0b1.dist-info}/METADATA +3 -2
- langroid-0.59.0b1.dist-info/RECORD +181 -0
- langroid/agent/special/doc_chat_task.py +0 -0
- langroid/mcp/__init__.py +0 -1
- langroid/mcp/server/__init__.py +0 -1
- langroid-0.58.2.dist-info/RECORD +0 -145
- {langroid-0.58.2.dist-info → langroid-0.59.0b1.dist-info}/WHEEL +0 -0
- {langroid-0.58.2.dist-info → langroid-0.59.0b1.dist-info}/licenses/LICENSE +0 -0
langroid/parsing/search.py
CHANGED
@@ -64,7 +64,7 @@ def find_fuzzy_matches_in_docs(
|
|
64
64
|
return orig_doc_matches
|
65
65
|
if len(orig_doc_matches) == 0:
|
66
66
|
return []
|
67
|
-
if set(orig_doc_matches[0][0].
|
67
|
+
if set(orig_doc_matches[0][0].model_fields) != {"content", "metadata"}:
|
68
68
|
# If there are fields beyond just content and metadata,
|
69
69
|
# we do NOT want to create new document objects with content fields
|
70
70
|
# based on words_before and words_after, since we don't know how to
|
langroid/parsing/url_loader.py
CHANGED
@@ -7,12 +7,12 @@ from typing import TYPE_CHECKING, Any, Dict, List, Literal, Optional
|
|
7
7
|
|
8
8
|
import markdownify as md
|
9
9
|
from dotenv import load_dotenv
|
10
|
+
from pydantic_settings import BaseSettings, SettingsConfigDict
|
10
11
|
|
11
12
|
from langroid.exceptions import LangroidImportError
|
12
13
|
from langroid.mytypes import DocMetaData, Document
|
13
14
|
from langroid.parsing.document_parser import DocumentParser, ImagePdfParser
|
14
15
|
from langroid.parsing.parser import Parser, ParsingConfig
|
15
|
-
from langroid.pydantic_v1 import BaseSettings
|
16
16
|
|
17
17
|
if TYPE_CHECKING:
|
18
18
|
from firecrawl import FirecrawlApp
|
@@ -54,20 +54,13 @@ class FirecrawlConfig(BaseCrawlerConfig):
|
|
54
54
|
params: Dict[str, Any] = {}
|
55
55
|
timeout: Optional[int] = None
|
56
56
|
|
57
|
-
|
58
|
-
# Leverage Pydantic's BaseSettings to
|
59
|
-
# allow setting of fields via env vars,
|
60
|
-
# e.g. FIRECRAWL_MODE=scrape and FIRECRAWL_API_KEY=...
|
61
|
-
env_prefix = "FIRECRAWL_"
|
57
|
+
model_config = SettingsConfigDict(env_prefix="FIRECRAWL_")
|
62
58
|
|
63
59
|
|
64
60
|
class ExaCrawlerConfig(BaseCrawlerConfig):
|
65
61
|
api_key: str = ""
|
66
62
|
|
67
|
-
|
68
|
-
# Allow setting of fields via env vars with prefix EXA_
|
69
|
-
# e.g., EXA_API_KEY=your_api_key
|
70
|
-
env_prefix = "EXA_"
|
63
|
+
model_config = SettingsConfigDict(env_prefix="EXA_")
|
71
64
|
|
72
65
|
|
73
66
|
class Crawl4aiConfig(BaseCrawlerConfig):
|
@@ -81,49 +74,22 @@ class Crawl4aiConfig(BaseCrawlerConfig):
|
|
81
74
|
browser_config: Optional["BrowserConfig"] = None
|
82
75
|
run_config: Optional["CrawlerRunConfig"] = None
|
83
76
|
|
84
|
-
|
77
|
+
model_config = SettingsConfigDict(arbitrary_types_allowed=True)
|
85
78
|
|
86
|
-
def __init_subclass__(cls, **kwargs: Any) -> None:
|
87
|
-
"""Resolve forward references when class is first subclassed or instantiated."""
|
88
|
-
super().__init_subclass__(**kwargs)
|
89
|
-
cls._resolve_forward_refs()
|
90
79
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
from crawl4ai.deep_crawling import DeepCrawlStrategy
|
99
|
-
from crawl4ai.extraction_strategy import ExtractionStrategy
|
100
|
-
from crawl4ai.markdown_generation_strategy import (
|
101
|
-
MarkdownGenerationStrategy,
|
102
|
-
)
|
103
|
-
|
104
|
-
# Create namespace for update_forward_refs
|
105
|
-
namespace = {
|
106
|
-
"BrowserConfig": BrowserConfig,
|
107
|
-
"CrawlerRunConfig": CrawlerRunConfig,
|
108
|
-
"ContentScrapingStrategy": ContentScrapingStrategy,
|
109
|
-
"DeepCrawlStrategy": DeepCrawlStrategy,
|
110
|
-
"ExtractionStrategy": ExtractionStrategy,
|
111
|
-
"MarkdownGenerationStrategy": MarkdownGenerationStrategy,
|
112
|
-
}
|
113
|
-
|
114
|
-
cls.update_forward_refs(**namespace)
|
115
|
-
cls._refs_resolved = True
|
116
|
-
except ImportError:
|
117
|
-
# If crawl4ai is not installed, leave forward refs as strings
|
118
|
-
pass
|
119
|
-
|
120
|
-
def __init__(self, **kwargs: Any) -> None:
|
121
|
-
"""Initialize and ensure forward refs are resolved."""
|
122
|
-
self._resolve_forward_refs()
|
123
|
-
super().__init__(**kwargs)
|
80
|
+
# Resolve forward references for Crawl4aiConfig after the class is defined
|
81
|
+
try:
|
82
|
+
from crawl4ai.async_configs import BrowserConfig, CrawlerRunConfig
|
83
|
+
from crawl4ai.content_scraping_strategy import ContentScrapingStrategy
|
84
|
+
from crawl4ai.deep_crawling import DeepCrawlStrategy
|
85
|
+
from crawl4ai.extraction_strategy import ExtractionStrategy
|
86
|
+
from crawl4ai.markdown_generation_strategy import MarkdownGenerationStrategy
|
124
87
|
|
125
|
-
|
126
|
-
|
88
|
+
# Rebuild the model with resolved references
|
89
|
+
Crawl4aiConfig.model_rebuild()
|
90
|
+
except ImportError:
|
91
|
+
# If crawl4ai is not installed, leave forward refs as strings
|
92
|
+
pass
|
127
93
|
|
128
94
|
|
129
95
|
class BaseCrawler(ABC):
|
@@ -347,7 +313,7 @@ class FirecrawlCrawler(BaseCrawler):
|
|
347
313
|
)
|
348
314
|
processed_urls.add(url)
|
349
315
|
new_pages += 1
|
350
|
-
pbar.update
|
316
|
+
pbar.model_copy(update=new_pages) # Update progress bar with new pages
|
351
317
|
|
352
318
|
# Break if crawl is complete
|
353
319
|
if status["status"] == "completed":
|