langroid 0.1.252__py3-none-any.whl → 0.1.254__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/__init__.py +16 -15
- langroid/agent/__init__.py +1 -0
- langroid/agent/callbacks/chainlit.py +5 -12
- langroid/agent/special/__init__.py +13 -4
- langroid/agent/special/doc_chat_agent.py +39 -55
- langroid/agent/special/neo4j/csv_kg_chat.py +2 -2
- langroid/agent/special/sql/__init__.py +12 -6
- langroid/agent/special/sql/sql_chat_agent.py +10 -4
- langroid/agent/special/sql/utils/__init__.py +4 -5
- langroid/agent/special/sql/utils/description_extractors.py +7 -2
- langroid/agent/special/sql/utils/populate_metadata.py +6 -1
- langroid/agent/special/table_chat_agent.py +2 -2
- langroid/agent/tool_message.py +14 -3
- langroid/agent/tools/__init__.py +2 -3
- langroid/agent/tools/duckduckgo_search_tool.py +2 -2
- langroid/agent/tools/google_search_tool.py +2 -2
- langroid/agent/tools/metaphor_search_tool.py +2 -2
- langroid/agent/tools/retrieval_tool.py +2 -2
- langroid/agent/tools/run_python_code.py +2 -2
- langroid/agent/tools/segment_extract_tool.py +2 -2
- langroid/cachedb/__init__.py +10 -2
- langroid/cachedb/base.py +10 -2
- langroid/cachedb/momento_cachedb.py +10 -4
- langroid/cachedb/redis_cachedb.py +2 -3
- langroid/embedding_models/__init__.py +1 -0
- langroid/exceptions.py +57 -0
- langroid/language_models/__init__.py +1 -0
- langroid/language_models/base.py +2 -3
- langroid/language_models/openai_gpt.py +15 -14
- langroid/language_models/prompt_formatter/__init__.py +4 -3
- langroid/parsing/__init__.py +8 -2
- langroid/parsing/document_parser.py +46 -10
- langroid/parsing/parser.pyi +56 -0
- langroid/parsing/spider.py +12 -7
- langroid/utils/logging.py +7 -3
- langroid/utils/output/__init__.py +1 -2
- langroid/utils/output/citations.py +41 -0
- langroid/utils/output/printing.py +7 -2
- langroid/vector_store/__init__.py +33 -23
- langroid/vector_store/chromadb.py +2 -8
- langroid/vector_store/lancedb.py +36 -5
- langroid/vector_store/meilisearch.py +21 -11
- langroid/vector_store/momento.py +31 -14
- {langroid-0.1.252.dist-info → langroid-0.1.254.dist-info}/METADATA +59 -47
- {langroid-0.1.252.dist-info → langroid-0.1.254.dist-info}/RECORD +47 -45
- {langroid-0.1.252.dist-info → langroid-0.1.254.dist-info}/LICENSE +0 -0
- {langroid-0.1.252.dist-info → langroid-0.1.254.dist-info}/WHEEL +0 -0
langroid/vector_store/lancedb.py
CHANGED
@@ -1,18 +1,31 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
1
3
|
import logging
|
2
|
-
from typing import
|
4
|
+
from typing import (
|
5
|
+
TYPE_CHECKING,
|
6
|
+
Any,
|
7
|
+
Dict,
|
8
|
+
Generator,
|
9
|
+
List,
|
10
|
+
Optional,
|
11
|
+
Sequence,
|
12
|
+
Tuple,
|
13
|
+
Type,
|
14
|
+
)
|
3
15
|
|
4
|
-
import lancedb
|
5
16
|
import pandas as pd
|
6
17
|
from dotenv import load_dotenv
|
7
|
-
from lancedb.pydantic import LanceModel, Vector
|
8
|
-
from lancedb.query import LanceVectorQueryBuilder
|
9
18
|
from pydantic import BaseModel, ValidationError, create_model
|
10
19
|
|
20
|
+
if TYPE_CHECKING:
|
21
|
+
from lancedb.query import LanceVectorQueryBuilder
|
22
|
+
|
11
23
|
from langroid.embedding_models.base import (
|
12
24
|
EmbeddingModel,
|
13
25
|
EmbeddingModelsConfig,
|
14
26
|
)
|
15
27
|
from langroid.embedding_models.models import OpenAIEmbeddingsConfig
|
28
|
+
from langroid.exceptions import LangroidImportError
|
16
29
|
from langroid.mytypes import Document, EmbeddingFunction
|
17
30
|
from langroid.utils.configuration import settings
|
18
31
|
from langroid.utils.pydantic_utils import (
|
@@ -26,6 +39,14 @@ from langroid.utils.pydantic_utils import (
|
|
26
39
|
)
|
27
40
|
from langroid.vector_store.base import VectorStore, VectorStoreConfig
|
28
41
|
|
42
|
+
try:
|
43
|
+
import lancedb
|
44
|
+
from lancedb.pydantic import LanceModel, Vector
|
45
|
+
|
46
|
+
has_lancedb = True
|
47
|
+
except ImportError:
|
48
|
+
has_lancedb = False
|
49
|
+
|
29
50
|
logger = logging.getLogger(__name__)
|
30
51
|
|
31
52
|
|
@@ -44,6 +65,9 @@ class LanceDBConfig(VectorStoreConfig):
|
|
44
65
|
class LanceDB(VectorStore):
|
45
66
|
def __init__(self, config: LanceDBConfig = LanceDBConfig()):
|
46
67
|
super().__init__(config)
|
68
|
+
if not has_lancedb:
|
69
|
+
raise LangroidImportError("lancedb", "lancedb")
|
70
|
+
|
47
71
|
self.config: LanceDBConfig = config
|
48
72
|
emb_model = EmbeddingModel.create(config.embedding)
|
49
73
|
self.embedding_fn: EmbeddingFunction = emb_model.embedding_fn()
|
@@ -170,6 +194,9 @@ class LanceDB(VectorStore):
|
|
170
194
|
if not issubclass(doc_cls, Document):
|
171
195
|
raise ValueError("DocClass must be a subclass of Document")
|
172
196
|
|
197
|
+
if not has_lancedb:
|
198
|
+
raise LangroidImportError("lancedb", "lancedb")
|
199
|
+
|
173
200
|
n = self.embedding_dim
|
174
201
|
|
175
202
|
# Prepare fields for the new model
|
@@ -193,6 +220,8 @@ class LanceDB(VectorStore):
|
|
193
220
|
Flat version of the lance_schema, as nested Pydantic schemas are not yet
|
194
221
|
supported by LanceDB.
|
195
222
|
"""
|
223
|
+
if not has_lancedb:
|
224
|
+
raise LangroidImportError("lancedb", "lancedb")
|
196
225
|
lance_model = self._create_lance_schema(doc_cls)
|
197
226
|
FlatModel = flatten_pydantic_model(lance_model, base_model=LanceModel)
|
198
227
|
return FlatModel
|
@@ -368,7 +397,9 @@ class LanceDB(VectorStore):
|
|
368
397
|
def delete_collection(self, collection_name: str) -> None:
|
369
398
|
self.client.drop_table(collection_name, ignore_missing=True)
|
370
399
|
|
371
|
-
def _lance_result_to_docs(
|
400
|
+
def _lance_result_to_docs(
|
401
|
+
self, result: "LanceVectorQueryBuilder"
|
402
|
+
) -> List[Document]:
|
372
403
|
if self.is_from_dataframe:
|
373
404
|
df = result.to_pandas()
|
374
405
|
return dataframe_to_documents(
|
@@ -7,16 +7,21 @@ Note that what we call "Collection" in Langroid is referred to as
|
|
7
7
|
but for uniformity we use the Langroid terminology here.
|
8
8
|
"""
|
9
9
|
|
10
|
+
from __future__ import annotations
|
11
|
+
|
10
12
|
import asyncio
|
11
13
|
import logging
|
12
14
|
import os
|
13
|
-
from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple
|
15
|
+
from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional, Sequence, Tuple
|
14
16
|
|
15
|
-
import meilisearch_python_sdk as meilisearch
|
16
17
|
from dotenv import load_dotenv
|
17
|
-
from meilisearch_python_sdk.index import AsyncIndex
|
18
|
-
from meilisearch_python_sdk.models.documents import DocumentsInfo
|
19
18
|
|
19
|
+
if TYPE_CHECKING:
|
20
|
+
from meilisearch_python_sdk.index import AsyncIndex
|
21
|
+
from meilisearch_python_sdk.models.documents import DocumentsInfo
|
22
|
+
|
23
|
+
|
24
|
+
from langroid.exceptions import LangroidImportError
|
20
25
|
from langroid.mytypes import DocMetaData, Document
|
21
26
|
from langroid.utils.configuration import settings
|
22
27
|
from langroid.vector_store.base import VectorStore, VectorStoreConfig
|
@@ -34,6 +39,11 @@ class MeiliSearchConfig(VectorStoreConfig):
|
|
34
39
|
class MeiliSearch(VectorStore):
|
35
40
|
def __init__(self, config: MeiliSearchConfig = MeiliSearchConfig()):
|
36
41
|
super().__init__(config)
|
42
|
+
try:
|
43
|
+
import meilisearch_python_sdk as meilisearch
|
44
|
+
except ImportError:
|
45
|
+
raise LangroidImportError("meilisearch", "meilisearch")
|
46
|
+
|
37
47
|
self.config: MeiliSearchConfig = config
|
38
48
|
self.host = config.host
|
39
49
|
self.port = config.port
|
@@ -98,12 +108,12 @@ class MeiliSearch(VectorStore):
|
|
98
108
|
async def _async_get_indexes(self) -> List[AsyncIndex]:
|
99
109
|
async with self.client() as client:
|
100
110
|
indexes = await client.get_indexes(limit=10_000)
|
101
|
-
return [] if indexes is None else indexes
|
111
|
+
return [] if indexes is None else indexes # type: ignore
|
102
112
|
|
103
|
-
async def _async_get_index(self, index_uid: str) -> AsyncIndex:
|
113
|
+
async def _async_get_index(self, index_uid: str) -> "AsyncIndex":
|
104
114
|
async with self.client() as client:
|
105
115
|
index = await client.get_index(index_uid)
|
106
|
-
return index
|
116
|
+
return index # type: ignore
|
107
117
|
|
108
118
|
def list_collections(self, empty: bool = False) -> List[str]:
|
109
119
|
"""
|
@@ -116,7 +126,7 @@ class MeiliSearch(VectorStore):
|
|
116
126
|
else:
|
117
127
|
return [ind.uid for ind in indexes]
|
118
128
|
|
119
|
-
async def _async_create_index(self, collection_name: str) -> AsyncIndex:
|
129
|
+
async def _async_create_index(self, collection_name: str) -> "AsyncIndex":
|
120
130
|
async with self.client() as client:
|
121
131
|
index = await client.create_index(
|
122
132
|
uid=collection_name,
|
@@ -128,7 +138,7 @@ class MeiliSearch(VectorStore):
|
|
128
138
|
"""Delete index if it exists. Returns True iff index was deleted"""
|
129
139
|
async with self.client() as client:
|
130
140
|
result = await client.delete_index_if_exists(uid=collection_name)
|
131
|
-
return result
|
141
|
+
return result # type: ignore
|
132
142
|
|
133
143
|
def create_collection(self, collection_name: str, replace: bool = False) -> None:
|
134
144
|
"""
|
@@ -198,7 +208,7 @@ class MeiliSearch(VectorStore):
|
|
198
208
|
except ValueError:
|
199
209
|
return id
|
200
210
|
|
201
|
-
async def _async_get_documents(self, where: str = "") -> DocumentsInfo:
|
211
|
+
async def _async_get_documents(self, where: str = "") -> "DocumentsInfo":
|
202
212
|
if self.config.collection_name is None:
|
203
213
|
raise ValueError("No collection name set, cannot retrieve docs")
|
204
214
|
filter = [] if where is None else where
|
@@ -258,7 +268,7 @@ class MeiliSearch(VectorStore):
|
|
258
268
|
show_ranking_score=True,
|
259
269
|
filter=filter,
|
260
270
|
)
|
261
|
-
return results.hits
|
271
|
+
return results.hits # type: ignore
|
262
272
|
|
263
273
|
def similar_texts_with_scores(
|
264
274
|
self,
|
langroid/vector_store/momento.py
CHANGED
@@ -3,23 +3,34 @@ Momento Vector Index.
|
|
3
3
|
https://docs.momentohq.com/vector-index/develop/api-reference
|
4
4
|
"""
|
5
5
|
|
6
|
+
from __future__ import annotations
|
7
|
+
|
6
8
|
import logging
|
7
9
|
import os
|
8
10
|
from typing import List, Optional, Sequence, Tuple, no_type_check
|
9
11
|
|
10
|
-
import momento.responses.vector_index as mvi_response
|
11
12
|
from dotenv import load_dotenv
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
)
|
13
|
+
|
14
|
+
from langroid.exceptions import LangroidImportError
|
15
|
+
|
16
|
+
try:
|
17
|
+
import momento.responses.vector_index as mvi_response
|
18
|
+
from momento import (
|
19
|
+
# PreviewVectorIndexClientAsync,
|
20
|
+
CredentialProvider,
|
21
|
+
PreviewVectorIndexClient,
|
22
|
+
VectorIndexConfigurations,
|
23
|
+
)
|
24
|
+
from momento.requests.vector_index import (
|
25
|
+
ALL_METADATA,
|
26
|
+
Item,
|
27
|
+
SimilarityMetric,
|
28
|
+
)
|
29
|
+
|
30
|
+
has_momento = True
|
31
|
+
except ImportError:
|
32
|
+
has_momento = False
|
33
|
+
|
23
34
|
|
24
35
|
from langroid.embedding_models.base import (
|
25
36
|
EmbeddingModel,
|
@@ -41,12 +52,14 @@ class MomentoVIConfig(VectorStoreConfig):
|
|
41
52
|
cloud: bool = True
|
42
53
|
collection_name: str | None = "temp"
|
43
54
|
embedding: EmbeddingModelsConfig = OpenAIEmbeddingsConfig()
|
44
|
-
distance: SimilarityMetric = SimilarityMetric.COSINE_SIMILARITY
|
45
55
|
|
46
56
|
|
47
57
|
class MomentoVI(VectorStore):
|
48
58
|
def __init__(self, config: MomentoVIConfig = MomentoVIConfig()):
|
49
59
|
super().__init__(config)
|
60
|
+
if not has_momento:
|
61
|
+
raise LangroidImportError("momento", "momento")
|
62
|
+
self.distance = SimilarityMetric.COSINE_SIMILARITY
|
50
63
|
self.config: MomentoVIConfig = config
|
51
64
|
emb_model = EmbeddingModel.create(config.embedding)
|
52
65
|
self.embedding_fn: EmbeddingFunction = emb_model.embedding_fn()
|
@@ -114,6 +127,8 @@ class MomentoVI(VectorStore):
|
|
114
127
|
Args:
|
115
128
|
empty (bool, optional): Whether to include empty collections.
|
116
129
|
"""
|
130
|
+
if not has_momento:
|
131
|
+
raise LangroidImportError("momento", "momento")
|
117
132
|
response = self.client.list_indexes()
|
118
133
|
if isinstance(response, mvi_response.ListIndexes.Success):
|
119
134
|
return [ind.name for ind in response.indexes]
|
@@ -131,11 +146,13 @@ class MomentoVI(VectorStore):
|
|
131
146
|
replace (bool): Whether to replace an existing collection
|
132
147
|
with the same name. Defaults to False.
|
133
148
|
"""
|
149
|
+
if not has_momento:
|
150
|
+
raise LangroidImportError("momento", "momento")
|
134
151
|
self.config.collection_name = collection_name
|
135
152
|
response = self.client.create_index(
|
136
153
|
index_name=collection_name,
|
137
154
|
num_dimensions=self.embedding_dim,
|
138
|
-
similarity_metric=self.
|
155
|
+
similarity_metric=self.distance,
|
139
156
|
)
|
140
157
|
if isinstance(response, mvi_response.CreateIndex.Success):
|
141
158
|
logger.info(f"Created collection {collection_name}")
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: langroid
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.254
|
4
4
|
Summary: Harness LLMs with Multi-Agent Programming
|
5
5
|
License: MIT
|
6
6
|
Author: Prasad Chalasani
|
@@ -12,19 +12,27 @@ Classifier: Programming Language :: Python :: 3.10
|
|
12
12
|
Classifier: Programming Language :: Python :: 3.11
|
13
13
|
Provides-Extra: chainlit
|
14
14
|
Provides-Extra: chromadb
|
15
|
+
Provides-Extra: db
|
16
|
+
Provides-Extra: doc-chat
|
17
|
+
Provides-Extra: docx
|
18
|
+
Provides-Extra: embeddings
|
15
19
|
Provides-Extra: hf-embeddings
|
20
|
+
Provides-Extra: lancedb
|
16
21
|
Provides-Extra: litellm
|
22
|
+
Provides-Extra: meilisearch
|
17
23
|
Provides-Extra: metaphor
|
18
24
|
Provides-Extra: mkdocs
|
25
|
+
Provides-Extra: momento
|
19
26
|
Provides-Extra: mysql
|
20
27
|
Provides-Extra: neo4j
|
28
|
+
Provides-Extra: pdf-parsers
|
21
29
|
Provides-Extra: postgres
|
30
|
+
Provides-Extra: scrapy
|
31
|
+
Provides-Extra: sql
|
22
32
|
Provides-Extra: transformers
|
23
33
|
Provides-Extra: unstructured
|
24
34
|
Requires-Dist: aiohttp (>=3.9.1,<4.0.0)
|
25
35
|
Requires-Dist: async-generator (>=1.10,<2.0)
|
26
|
-
Requires-Dist: autopep8 (>=2.0.2,<3.0.0)
|
27
|
-
Requires-Dist: black[jupyter] (>=24.3.0,<25.0.0)
|
28
36
|
Requires-Dist: bs4 (>=0.0.1,<0.0.2)
|
29
37
|
Requires-Dist: chainlit (>=1.0.400,<2.0.0) ; extra == "chainlit"
|
30
38
|
Requires-Dist: chromadb (>=0.4.21,<=0.4.23) ; extra == "chromadb"
|
@@ -34,19 +42,18 @@ Requires-Dist: duckduckgo-search (>=6.0.0,<7.0.0)
|
|
34
42
|
Requires-Dist: faker (>=18.9.0,<19.0.0)
|
35
43
|
Requires-Dist: fakeredis (>=2.12.1,<3.0.0)
|
36
44
|
Requires-Dist: fire (>=0.5.0,<0.6.0)
|
37
|
-
Requires-Dist: flake8 (>=6.0.0,<7.0.0)
|
38
45
|
Requires-Dist: google-api-python-client (>=2.95.0,<3.0.0)
|
39
46
|
Requires-Dist: google-generativeai (>=0.5.2,<0.6.0)
|
40
47
|
Requires-Dist: groq (>=0.5.0,<0.6.0)
|
41
48
|
Requires-Dist: grpcio (>=1.62.1,<2.0.0)
|
42
49
|
Requires-Dist: halo (>=0.0.31,<0.0.32)
|
43
|
-
Requires-Dist: huggingface-hub (>=0.21.2,<0.22.0) ; extra == "transformers"
|
50
|
+
Requires-Dist: huggingface-hub (>=0.21.2,<0.22.0) ; extra == "embeddings" or extra == "transformers"
|
44
51
|
Requires-Dist: jinja2 (>=3.1.2,<4.0.0)
|
45
|
-
Requires-Dist: lancedb (>=0.6.2,<0.7.0)
|
52
|
+
Requires-Dist: lancedb (>=0.6.2,<0.7.0) ; extra == "lancedb"
|
46
53
|
Requires-Dist: litellm (>=1.30.1,<2.0.0) ; extra == "litellm"
|
47
54
|
Requires-Dist: lxml (>=4.9.3,<5.0.0)
|
48
|
-
Requires-Dist: meilisearch (>=0.28.3,<0.29.0)
|
49
|
-
Requires-Dist: meilisearch-python-sdk (>=2.2.3,<3.0.0)
|
55
|
+
Requires-Dist: meilisearch (>=0.28.3,<0.29.0) ; extra == "meilisearch"
|
56
|
+
Requires-Dist: meilisearch-python-sdk (>=2.2.3,<3.0.0) ; extra == "meilisearch"
|
50
57
|
Requires-Dist: metaphor-python (>=0.1.23,<0.2.0) ; extra == "metaphor"
|
51
58
|
Requires-Dist: mkdocs (>=1.4.2,<2.0.0) ; extra == "mkdocs"
|
52
59
|
Requires-Dist: mkdocs-awesome-pages-plugin (>=2.8.0,<3.0.0) ; extra == "mkdocs"
|
@@ -57,33 +64,27 @@ Requires-Dist: mkdocs-material (>=9.1.5,<10.0.0) ; extra == "mkdocs"
|
|
57
64
|
Requires-Dist: mkdocs-rss-plugin (>=1.8.0,<2.0.0) ; extra == "mkdocs"
|
58
65
|
Requires-Dist: mkdocs-section-index (>=0.3.5,<0.4.0) ; extra == "mkdocs"
|
59
66
|
Requires-Dist: mkdocstrings[python] (>=0.21.2,<0.22.0) ; extra == "mkdocs"
|
60
|
-
Requires-Dist: momento (>=1.10.2,<2.0.0)
|
61
|
-
Requires-Dist: mypy (>=1.7.0,<2.0.0)
|
67
|
+
Requires-Dist: momento (>=1.10.2,<2.0.0) ; extra == "momento"
|
62
68
|
Requires-Dist: neo4j (>=5.14.1,<6.0.0) ; extra == "neo4j"
|
63
69
|
Requires-Dist: nest-asyncio (>=1.6.0,<2.0.0)
|
64
70
|
Requires-Dist: nltk (>=3.8.1,<4.0.0)
|
65
|
-
Requires-Dist: onnxruntime (
|
71
|
+
Requires-Dist: onnxruntime (>=1.16.1,<2.0.0)
|
66
72
|
Requires-Dist: openai (>=1.14.0,<2.0.0)
|
67
73
|
Requires-Dist: pandas (>=2.0.3,<3.0.0)
|
68
|
-
Requires-Dist: pdf2image (>=1.17.0,<2.0.0)
|
69
|
-
Requires-Dist: pdfplumber (>=0.10.2,<0.11.0)
|
70
|
-
Requires-Dist: pre-commit (>=3.3.2,<4.0.0)
|
74
|
+
Requires-Dist: pdf2image (>=1.17.0,<2.0.0) ; extra == "doc-chat" or extra == "pdf-parsers"
|
75
|
+
Requires-Dist: pdfplumber (>=0.10.2,<0.11.0) ; extra == "doc-chat" or extra == "pdf-parsers"
|
71
76
|
Requires-Dist: prettytable (>=3.8.0,<4.0.0)
|
72
|
-
Requires-Dist: psycopg2 (>=2.9.7,<3.0.0) ; extra == "postgres"
|
73
|
-
Requires-Dist: pyarrow (==15.0.0)
|
77
|
+
Requires-Dist: psycopg2 (>=2.9.7,<3.0.0) ; extra == "db" or extra == "postgres" or extra == "sql"
|
78
|
+
Requires-Dist: pyarrow (==15.0.0) ; extra == "lancedb"
|
74
79
|
Requires-Dist: pydantic (==1.10.13)
|
75
80
|
Requires-Dist: pygithub (>=1.58.1,<2.0.0)
|
76
81
|
Requires-Dist: pygments (>=2.15.1,<3.0.0)
|
77
|
-
Requires-Dist: pymupdf (>=1.23.3,<2.0.0)
|
78
|
-
Requires-Dist: pymysql (>=1.1.0,<2.0.0) ; extra == "mysql"
|
82
|
+
Requires-Dist: pymupdf (>=1.23.3,<2.0.0) ; extra == "doc-chat" or extra == "pdf-parsers"
|
83
|
+
Requires-Dist: pymysql (>=1.1.0,<2.0.0) ; extra == "db" or extra == "mysql" or extra == "sql"
|
79
84
|
Requires-Dist: pyparsing (>=3.0.9,<4.0.0)
|
80
|
-
Requires-Dist: pypdf (>=3.12.2,<4.0.0)
|
81
|
-
Requires-Dist: pytesseract (>=0.3.10,<0.4.0)
|
82
|
-
Requires-Dist:
|
83
|
-
Requires-Dist: pytest-mysql (>=2.4.2,<3.0.0) ; extra == "mysql"
|
84
|
-
Requires-Dist: pytest-postgresql (>=5.0.0,<6.0.0) ; extra == "postgres"
|
85
|
-
Requires-Dist: pytest-redis (>=3.0.2,<4.0.0)
|
86
|
-
Requires-Dist: python-docx (>=1.1.0,<2.0.0)
|
85
|
+
Requires-Dist: pypdf (>=3.12.2,<4.0.0) ; extra == "doc-chat" or extra == "pdf-parsers"
|
86
|
+
Requires-Dist: pytesseract (>=0.3.10,<0.4.0) ; extra == "doc-chat" or extra == "pdf-parsers"
|
87
|
+
Requires-Dist: python-docx (>=1.1.0,<2.0.0) ; extra == "doc-chat" or extra == "docx"
|
87
88
|
Requires-Dist: python-dotenv (>=1.0.0,<2.0.0)
|
88
89
|
Requires-Dist: python-magic (>=0.4.27,<0.5.0)
|
89
90
|
Requires-Dist: python-socketio (>=5.11.0,<6.0.0) ; extra == "chainlit"
|
@@ -93,22 +94,17 @@ Requires-Dist: redis (>=5.0.1,<6.0.0)
|
|
93
94
|
Requires-Dist: requests (>=2.31.0,<3.0.0)
|
94
95
|
Requires-Dist: requests-oauthlib (>=1.3.1,<2.0.0)
|
95
96
|
Requires-Dist: rich (>=13.3.4,<14.0.0)
|
96
|
-
Requires-Dist:
|
97
|
-
Requires-Dist:
|
98
|
-
Requires-Dist:
|
99
|
-
Requires-Dist:
|
100
|
-
Requires-Dist: tantivy (>=0.21.0,<0.22.0)
|
97
|
+
Requires-Dist: scrapy (>=2.11.0,<3.0.0) ; extra == "scrapy"
|
98
|
+
Requires-Dist: sentence-transformers (==2.2.2) ; extra == "embeddings" or extra == "hf-embeddings"
|
99
|
+
Requires-Dist: sqlalchemy (>=2.0.19,<3.0.0) ; extra == "db" or extra == "sql"
|
100
|
+
Requires-Dist: tantivy (>=0.21.0,<0.22.0) ; extra == "lancedb"
|
101
101
|
Requires-Dist: thefuzz (>=0.20.0,<0.21.0)
|
102
102
|
Requires-Dist: tiktoken (>=0.7.0,<0.8.0)
|
103
|
-
Requires-Dist: torch (==2.0.0) ; extra == "hf-embeddings" or extra == "transformers"
|
103
|
+
Requires-Dist: torch (==2.0.0) ; extra == "embeddings" or extra == "hf-embeddings" or extra == "transformers"
|
104
104
|
Requires-Dist: trafilatura (>=1.5.0,<2.0.0)
|
105
|
-
Requires-Dist: transformers (>=4.40.1,<5.0.0) ; extra == "transformers"
|
105
|
+
Requires-Dist: transformers (>=4.40.1,<5.0.0) ; extra == "embeddings" or extra == "transformers"
|
106
106
|
Requires-Dist: typer (>=0.9.0,<0.10.0)
|
107
|
-
Requires-Dist:
|
108
|
-
Requires-Dist: types-pyyaml (>=6.0.12.20240311,<7.0.0.0)
|
109
|
-
Requires-Dist: types-redis (>=4.5.5.2,<5.0.0.0)
|
110
|
-
Requires-Dist: types-requests (>=2.31.0.1,<3.0.0.0)
|
111
|
-
Requires-Dist: unstructured[docx,pdf,pptx] (>=0.10.16,<0.10.18) ; extra == "unstructured"
|
107
|
+
Requires-Dist: unstructured[docx,pdf,pptx] (>=0.10.16,<0.10.18) ; extra == "doc-chat" or extra == "unstructured"
|
112
108
|
Requires-Dist: wget (>=3.2,<4.0)
|
113
109
|
Description-Content-Type: text/markdown
|
114
110
|
|
@@ -237,6 +233,17 @@ teacher_task.run()
|
|
237
233
|
<summary> <b>Click to expand</b></summary>
|
238
234
|
|
239
235
|
- **May 2024:**
|
236
|
+
- [Infinite loop detection](https://github.com/langroid/langroid/blob/0ed30eb467b00d5eaf2933b577a4b2cc37de1aa1/langroid/agent/task.py#L1121) for task loops of cycle-length <= 10 (configurable
|
237
|
+
in [`TaskConfig`](https://github.
|
238
|
+
com/langroid/langroid/blob/0ed30eb467b00d5eaf2933b577a4b2cc37de1aa1/langroid/agent
|
239
|
+
/task.py#L61). Only detects _exact_ loops, rather than
|
240
|
+
_approximate_ loops where the entities are saying essentially similar (but not
|
241
|
+
exactly the same) things repeatedly.
|
242
|
+
- "@"-addressing: any entity can address any other by name, which can be the name
|
243
|
+
of an agent's responder ("llm", "user", "agent") or a sub-task name. This is a
|
244
|
+
simpler alternative to the `RecipientTool` mechanism, with the tradeoff that
|
245
|
+
since it's not a tool, there's no way to enforce/remind the LLM to explicitly
|
246
|
+
specify an addressee (in scenarios where this is important).
|
240
247
|
- [Much-Improved Citation](https://github.com/langroid/langroid/issues/477)
|
241
248
|
generation and display when using `DocChatAgent`.
|
242
249
|
- `gpt-4o` is now the default LLM throughout; Update tests and examples to work
|
@@ -457,7 +464,8 @@ such as [LiteLLM](https://docs.litellm.ai/docs/providers) that in effect mimic t
|
|
457
464
|
|
458
465
|
### Install `langroid`
|
459
466
|
Langroid requires Python 3.11+. We recommend using a virtual environment.
|
460
|
-
Use `pip` to install `langroid` (from PyPi) to your virtual
|
467
|
+
Use `pip` to install a bare-bones slim version of `langroid` (from PyPi) to your virtual
|
468
|
+
environment:
|
461
469
|
```bash
|
462
470
|
pip install langroid
|
463
471
|
```
|
@@ -465,17 +473,21 @@ The core Langroid package lets you use OpenAI Embeddings models via their API.
|
|
465
473
|
If you instead want to use the `sentence-transformers` embedding models from HuggingFace,
|
466
474
|
install Langroid like this:
|
467
475
|
```bash
|
468
|
-
pip install langroid[hf-embeddings]
|
469
|
-
```
|
470
|
-
If using `zsh` (or similar shells), you may need to escape the square brackets, e.g.:
|
471
|
-
```
|
472
|
-
pip install langroid\[hf-embeddings\]
|
473
|
-
```
|
474
|
-
or use quotes:
|
475
|
-
```
|
476
476
|
pip install "langroid[hf-embeddings]"
|
477
477
|
```
|
478
|
-
|
478
|
+
For many practical scenarios, you may need additional optional dependencies:
|
479
|
+
- To use various document-parsers, install langroid with the `doc-chat` extra:
|
480
|
+
```bash
|
481
|
+
pip install "langroid[doc-chat]"
|
482
|
+
```
|
483
|
+
- For "chat with databases", use the `db` extra:
|
484
|
+
```bash
|
485
|
+
pip install "langroid[db]"
|
486
|
+
``
|
487
|
+
- You can specify multiple extras by separating them with commas, e.g.:
|
488
|
+
```bash
|
489
|
+
pip install "langroid[doc-chat,db]"
|
490
|
+
```
|
479
491
|
|
480
492
|
<details>
|
481
493
|
<summary><b>Optional Installs for using SQL Chat with a PostgreSQL DB </b></summary>
|
@@ -1,16 +1,16 @@
|
|
1
|
-
langroid/__init__.py,sha256=
|
2
|
-
langroid/agent/__init__.py,sha256=
|
1
|
+
langroid/__init__.py,sha256=z_fCOLQJPOw3LLRPBlFB5-2HyCjpPgQa4m4iY5Fvb8Y,1800
|
2
|
+
langroid/agent/__init__.py,sha256=ll0Cubd2DZ-fsCMl7e10hf9ZjFGKzphfBco396IKITY,786
|
3
3
|
langroid/agent/base.py,sha256=6EznAMa4zeRdouo3U3_UzOI_cblvdpNH4v5CAM-fgbA,37171
|
4
4
|
langroid/agent/batch.py,sha256=feRA_yRG768ElOQjrKEefcRv6Aefd_yY7qktuYUQDwc,10040
|
5
5
|
langroid/agent/callbacks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
6
|
-
langroid/agent/callbacks/chainlit.py,sha256=
|
6
|
+
langroid/agent/callbacks/chainlit.py,sha256=XWih3UkHsYgPIaBQ1cZ-8H2VU_URh-sSfw8fcq1hfMo,20841
|
7
7
|
langroid/agent/chat_agent.py,sha256=_xsBfGBkwcHd8IRErsW7tKNz7qn0h2oKSg_BFleOPCs,39475
|
8
8
|
langroid/agent/chat_document.py,sha256=uwCq53SHRyxQw6qyhjzPYuJG48VHBgOf2122Ew3fk6c,9316
|
9
9
|
langroid/agent/helpers.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
10
10
|
langroid/agent/junk,sha256=LxfuuW7Cijsg0szAzT81OjWWv1PMNI-6w_-DspVIO2s,339
|
11
11
|
langroid/agent/openai_assistant.py,sha256=kIVDI4r-xGvplLU5s0nShPVHs6Jq-wOsfWE0kcMhAdQ,33056
|
12
|
-
langroid/agent/special/__init__.py,sha256=
|
13
|
-
langroid/agent/special/doc_chat_agent.py,sha256=
|
12
|
+
langroid/agent/special/__init__.py,sha256=gik_Xtm_zV7U9s30Mn8UX3Gyuy4jTjQe9zjiE3HWmEo,1273
|
13
|
+
langroid/agent/special/doc_chat_agent.py,sha256=_jXEjxuymNjkDcwT2xEcpf9sWoUW0P-1UWHCuRQFt_w,54428
|
14
14
|
langroid/agent/special/lance_doc_chat_agent.py,sha256=USp0U3eTaJzwF_3bdqE7CedSLbaqAi2tm-VzygcyLaA,10175
|
15
15
|
langroid/agent/special/lance_rag/__init__.py,sha256=QTbs0IVE2ZgDg8JJy1zN97rUUg4uEPH7SLGctFNumk4,174
|
16
16
|
langroid/agent/special/lance_rag/critic_agent.py,sha256=ufTdpHSeHgCzN85Q0sfWOrpBpsCjGVZdAg5yOH1ogU8,7296
|
@@ -18,38 +18,38 @@ langroid/agent/special/lance_rag/lance_rag_task.py,sha256=l_HQgrYY-CX2FwIsS961aE
|
|
18
18
|
langroid/agent/special/lance_rag/query_planner_agent.py,sha256=wSkrtY3Qz98KAqpVf0xMf4LRgKbHLASWVNUrbqwUAB0,9814
|
19
19
|
langroid/agent/special/lance_tools.py,sha256=btMwKdcT8RdwAjmzbtN1xxm3s1H7ipO9GSpUamryYx8,1456
|
20
20
|
langroid/agent/special/neo4j/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
21
|
-
langroid/agent/special/neo4j/csv_kg_chat.py,sha256=
|
21
|
+
langroid/agent/special/neo4j/csv_kg_chat.py,sha256=dRsAgMBa1H_EMI2YYgJR2Xyv1D7e4o3G9M64mTewq_c,6409
|
22
22
|
langroid/agent/special/neo4j/neo4j_chat_agent.py,sha256=vBr6EQ_eJCYAtqDe-gTSvWHT-jRE_fZOPsGWxuDJe4w,13092
|
23
23
|
langroid/agent/special/neo4j/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
24
24
|
langroid/agent/special/neo4j/utils/system_message.py,sha256=vRpz1P-OYLLiC6OGYYoK6x77yxVzDxMTCEJSsYUIuG4,2242
|
25
25
|
langroid/agent/special/relevance_extractor_agent.py,sha256=zIx8GUdVo1aGW6ASla0NPQjYYIpmriK_TYMijqAx3F8,4796
|
26
26
|
langroid/agent/special/retriever_agent.py,sha256=lvMvf-u9rSosg4YASuFdUbGLgkzLPknXAbJZfZ1LZCc,1868
|
27
|
-
langroid/agent/special/sql/__init__.py,sha256=
|
28
|
-
langroid/agent/special/sql/sql_chat_agent.py,sha256=
|
29
|
-
langroid/agent/special/sql/utils/__init__.py,sha256=
|
30
|
-
langroid/agent/special/sql/utils/description_extractors.py,sha256=
|
31
|
-
langroid/agent/special/sql/utils/populate_metadata.py,sha256=
|
27
|
+
langroid/agent/special/sql/__init__.py,sha256=mWfmm1QpXCezpFOS2eI57M0L_Ok3q5_ukG8tXBnBrEA,319
|
28
|
+
langroid/agent/special/sql/sql_chat_agent.py,sha256=Now37yznNeiCE0ysC5W5BPG41xO69kxrHZWzLqs5dhQ,13903
|
29
|
+
langroid/agent/special/sql/utils/__init__.py,sha256=JFif6CRTrN-bc91uuAI4K9fe2ndIWSNMVxJ0WA68--M,446
|
30
|
+
langroid/agent/special/sql/utils/description_extractors.py,sha256=cX8TIpmTPXZXQTMpIi3OUFwFsPywxFFdurpx717Kq0I,6529
|
31
|
+
langroid/agent/special/sql/utils/populate_metadata.py,sha256=1J22UsyEPKzwK0XlJZtYn9r6kYc0FXIr8-lZrndYlhc,3131
|
32
32
|
langroid/agent/special/sql/utils/system_message.py,sha256=qKLHkvQWRQodTtPLPxr1GSLUYUFASZU8x-ybV67cB68,1885
|
33
33
|
langroid/agent/special/sql/utils/tools.py,sha256=6uB2424SLtmapui9ggcEr0ZTiB6_dL1-JRGgN8RK9Js,1332
|
34
|
-
langroid/agent/special/table_chat_agent.py,sha256=
|
34
|
+
langroid/agent/special/table_chat_agent.py,sha256=d9v2wsblaRx7oMnKhLV7uO_ujvk9gh59pSGvBXyeyNc,9659
|
35
35
|
langroid/agent/task.py,sha256=J4GIvbPMlL9uXKr7J-bSPHGvFK5tI2R0INgbnbFRmqk,59265
|
36
|
-
langroid/agent/tool_message.py,sha256=
|
37
|
-
langroid/agent/tools/__init__.py,sha256=
|
38
|
-
langroid/agent/tools/duckduckgo_search_tool.py,sha256=
|
36
|
+
langroid/agent/tool_message.py,sha256=okhIK0M2ZIGTlQF3h6UGkYk6ibH17mzm0ypDeczlWc0,9137
|
37
|
+
langroid/agent/tools/__init__.py,sha256=8Pc9BlGCB5FQ2IDGKS_WPpHCoWp5jblMU8EHJwwikAY,303
|
38
|
+
langroid/agent/tools/duckduckgo_search_tool.py,sha256=NhsCaGZkdv28nja7yveAhSK_w6l_Ftym8agbrdzqgfo,1935
|
39
39
|
langroid/agent/tools/extract_tool.py,sha256=u5lL9rKBzaLBOrRyLnTAZ97pQ1uxyLP39XsWMnpaZpw,3789
|
40
40
|
langroid/agent/tools/generator_tool.py,sha256=y0fB0ZObjA0b3L0uSTtrqRCKHDUR95arBftqiUeKD2o,663
|
41
|
-
langroid/agent/tools/google_search_tool.py,sha256=
|
42
|
-
langroid/agent/tools/metaphor_search_tool.py,sha256=
|
41
|
+
langroid/agent/tools/google_search_tool.py,sha256=y7b-3FtgXf0lfF4AYxrZ3K5pH2dhidvibUOAGBE--WI,1456
|
42
|
+
langroid/agent/tools/metaphor_search_tool.py,sha256=qj4gt453cLEX3EGW7nVzVu6X7LCdrwjSlcNY0qJW104,2489
|
43
43
|
langroid/agent/tools/recipient_tool.py,sha256=NrLxIeQT-kbMv7AeYX0uqvGeMK4Q3fIDvG15OVzlgk8,9624
|
44
|
-
langroid/agent/tools/retrieval_tool.py,sha256=
|
45
|
-
langroid/agent/tools/run_python_code.py,sha256=
|
46
|
-
langroid/agent/tools/segment_extract_tool.py,sha256=
|
44
|
+
langroid/agent/tools/retrieval_tool.py,sha256=2q2pfoYbZNfbWQ0McxrtmfF0ekGglIgRl-6uF26pa-E,871
|
45
|
+
langroid/agent/tools/run_python_code.py,sha256=BvoxYzzHijU-p4703n2iVlt5BCieR1oMSy50w0tQZAg,1787
|
46
|
+
langroid/agent/tools/segment_extract_tool.py,sha256=WOwZdTTOqKaJUDIqI0jWDV126VM1UjJzIUandHsnC-g,1320
|
47
47
|
langroid/agent_config.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
48
|
-
langroid/cachedb/__init__.py,sha256=
|
49
|
-
langroid/cachedb/base.py,sha256=
|
50
|
-
langroid/cachedb/momento_cachedb.py,sha256=
|
51
|
-
langroid/cachedb/redis_cachedb.py,sha256=
|
52
|
-
langroid/embedding_models/__init__.py,sha256=
|
48
|
+
langroid/cachedb/__init__.py,sha256=icAT2s7Vhf-ZGUeqpDQGNU6ob6o0aFEyjwcxxUGRFjg,225
|
49
|
+
langroid/cachedb/base.py,sha256=LKiJyOFQUN1NRzPIynfbYKGFfSanA6auDfBNEedBK7Y,1342
|
50
|
+
langroid/cachedb/momento_cachedb.py,sha256=YEOJ62hEcV6iIeMr5aGgRYgWQqFYaej9gEDEcY0sm7M,3172
|
51
|
+
langroid/cachedb/redis_cachedb.py,sha256=NukuCWgdp1AWWNgguiZfuypbH9GHwiYe34ZZy866u54,4981
|
52
|
+
langroid/embedding_models/__init__.py,sha256=lsu8qxCjfGujXGueJWU-VI3LMZYGjLSYgqUKDd4F3Qo,715
|
53
53
|
langroid/embedding_models/base.py,sha256=xY9QF01ilsMvaNH4JMDvkZgXY59AeYR4VAykgNd6Flg,1818
|
54
54
|
langroid/embedding_models/clustering.py,sha256=tZWElUqXl9Etqla0FAa7og96iDKgjqWjucZR_Egtp-A,6684
|
55
55
|
langroid/embedding_models/models.py,sha256=-xeN0irBPc1tUgRFHGM1ki4NwOIHr6F3SKuEjD5nTOg,7144
|
@@ -59,33 +59,34 @@ langroid/embedding_models/protoc/embeddings_pb2.py,sha256=4Q57PhOunv-uZNJrxYrWBX
|
|
59
59
|
langroid/embedding_models/protoc/embeddings_pb2.pyi,sha256=UkNy7BrNsmQm0vLb3NtGXy8jVtz-kPWwwFsX-QbQBhQ,1475
|
60
60
|
langroid/embedding_models/protoc/embeddings_pb2_grpc.py,sha256=9dYQqkW3JPyBpSEjeGXTNpSqAkC-6FPtBHyteVob2Y8,2452
|
61
61
|
langroid/embedding_models/remote_embeds.py,sha256=6_kjXByVbqhY9cGwl9R83ZcYC2km-nGieNNAo1McHaY,5151
|
62
|
-
langroid/exceptions.py,sha256=
|
63
|
-
langroid/language_models/__init__.py,sha256=
|
62
|
+
langroid/exceptions.py,sha256=w_Cr41nPAmsa6gW5nNFaO9yDcBCWdQqRspL1jYvZf5w,2209
|
63
|
+
langroid/language_models/__init__.py,sha256=55602F5QA58MmRq-yRjoXK6xZOMRHQrR4QGaCnlX218,822
|
64
64
|
langroid/language_models/azure_openai.py,sha256=ncRCbKooqLVOY-PWQUIo9C3yTuKEFbAwyngXT_M4P7k,5989
|
65
|
-
langroid/language_models/base.py,sha256=
|
65
|
+
langroid/language_models/base.py,sha256=8FTvWtOmIrz6K78kzyrVqf2uJk03dBc0AUnVY-l9ucg,21031
|
66
66
|
langroid/language_models/config.py,sha256=5UF3DzO1a-Dfsc3vghE0XGq7g9t_xDsRCsuRiU4dgBg,366
|
67
67
|
langroid/language_models/openai_assistants.py,sha256=9K-DEAL2aSWHeXj2hwCo2RAlK9_1oCPtqX2u1wISCj8,36
|
68
|
-
langroid/language_models/openai_gpt.py,sha256=
|
69
|
-
langroid/language_models/prompt_formatter/__init__.py,sha256=
|
68
|
+
langroid/language_models/openai_gpt.py,sha256=SSLBYb41ITLegdinFHL2u9Hm5v2bNgBDF8q0BsznY8A,50596
|
69
|
+
langroid/language_models/prompt_formatter/__init__.py,sha256=2-5cdE24XoFDhifOLl8yiscohil1ogbP1ECkYdBlBsk,372
|
70
70
|
langroid/language_models/prompt_formatter/base.py,sha256=eDS1sgRNZVnoajwV_ZIha6cba5Dt8xjgzdRbPITwx3Q,1221
|
71
71
|
langroid/language_models/prompt_formatter/hf_formatter.py,sha256=TFL6ppmeQWnzr6CKQzRZFYY810zE1mr8DZnhw6i85ok,5217
|
72
72
|
langroid/language_models/prompt_formatter/llama2_formatter.py,sha256=YdcO88qyBeuMENVIVvVqSYuEpvYSTndUe_jd6hVTko4,2899
|
73
73
|
langroid/language_models/utils.py,sha256=j8xEEm__-2b9eql1oTiWQk5dHW59UwmrRKs5kMHaGGo,4803
|
74
74
|
langroid/mytypes.py,sha256=qD3o2v1pccICz-xeei4cwkvJviVC2llJ3eIYgBP9RDE,3045
|
75
|
-
langroid/parsing/__init__.py,sha256=
|
75
|
+
langroid/parsing/__init__.py,sha256=ZgSAfgTC6VsTLFlRSWT-TwYco7SQeRMeZG-49MnKYGY,936
|
76
76
|
langroid/parsing/agent_chats.py,sha256=sbZRV9ujdM5QXvvuHVjIi2ysYSYlap-uqfMMUKulrW0,1068
|
77
77
|
langroid/parsing/code-parsing.md,sha256=--cyyNiSZSDlIwcjAV4-shKrSiRe2ytF3AdSoS_hD2g,3294
|
78
78
|
langroid/parsing/code_parser.py,sha256=BbDAzp35wkYQ9U1dpf1ARL0lVyi0tfqEc6_eox2C090,3727
|
79
79
|
langroid/parsing/config.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
80
|
-
langroid/parsing/document_parser.py,sha256=
|
80
|
+
langroid/parsing/document_parser.py,sha256=bN-D1kqx6qe1Sx-AMR8a8WbPJYPdoxLYPdgGl7dfW3I,24017
|
81
81
|
langroid/parsing/image_text.py,sha256=sbLIQ5nHe2UnYUksBaQsmZGaX-X0qgEpPd7CEzi_z5M,910
|
82
82
|
langroid/parsing/para_sentence_split.py,sha256=AJBzZojP3zpB-_IMiiHismhqcvkrVBQ3ZINoQyx_bE4,2000
|
83
83
|
langroid/parsing/parse_json.py,sha256=tgB_oatcrgt6L9ZplC-xBBXjLzL1gjSQf1L2_W5kwFA,4230
|
84
84
|
langroid/parsing/parser.py,sha256=2TT6YMgEe79Kz9bPIqI-1RIEK77V2H2gbpbX5DhNNrY,10743
|
85
|
+
langroid/parsing/parser.pyi,sha256=4t55zlG_23hUFO7OvOttY1xzbLze2elpGjoVTUK9izM,1693
|
85
86
|
langroid/parsing/repo_loader.py,sha256=My5UIe-h1xr0I-6Icu0ZVwRHmGRRRW8SrJYMc9J1M9Q,29361
|
86
87
|
langroid/parsing/routing.py,sha256=_NFPe7wLjd5B6s47w3M8-5vldL8e2Sz51Gb5bwF5ooY,1072
|
87
88
|
langroid/parsing/search.py,sha256=plQtjarB9afGfJLB0CyPXPq3mM4m7kRsfd0_4brziEI,8846
|
88
|
-
langroid/parsing/spider.py,sha256=
|
89
|
+
langroid/parsing/spider.py,sha256=Y6y7b86Y2k770LdhxgjVlImBxuuy1V9n8-XQ3QPaG5s,3199
|
89
90
|
langroid/parsing/table_loader.py,sha256=qNM4obT_0Y4tjrxNBCNUYjKQ9oETCZ7FbolKBTcz-GM,3410
|
90
91
|
langroid/parsing/url_loader.py,sha256=Na2TBlKuQkloZzkE2d7xl6mh9olS3CbpgCsJbJ-xhIA,4472
|
91
92
|
langroid/parsing/url_loader_cookies.py,sha256=Lg4sNpRz9MByWq2mde6T0hKv68VZSV3mtMjNEHuFeSU,2327
|
@@ -107,24 +108,25 @@ langroid/utils/docker.py,sha256=kJQOLTgM0x9j9pgIIqp0dZNZCTvoUDhp6i8tYBq1Jr0,1105
|
|
107
108
|
langroid/utils/globals.py,sha256=VkTHhlqSz86oOPq65sjul0XU8I52UNaFC5vwybMQ74w,1343
|
108
109
|
langroid/utils/llms/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
109
110
|
langroid/utils/llms/strings.py,sha256=CSAX9Z6FQOLXOzbLMe_Opqtc3ruDAKTTk7cPqc6Blh0,263
|
110
|
-
langroid/utils/logging.py,sha256=
|
111
|
-
langroid/utils/output/__init__.py,sha256=
|
112
|
-
langroid/utils/output/
|
111
|
+
langroid/utils/logging.py,sha256=WN180zjxhlozwtyTcLWmbVkXylBs5EvQj85dBPeVUwc,3985
|
112
|
+
langroid/utils/output/__init__.py,sha256=7P0f--4IZneNsTxXY5fd6d6iW-CeVe-KSsl-87sbBPc,340
|
113
|
+
langroid/utils/output/citations.py,sha256=PSY2cpti8W-ZGFMAgj1lYoEIZy0lsniLpCliMsVkXtc,1425
|
114
|
+
langroid/utils/output/printing.py,sha256=yzPJZN-8_jyOJmI9N_oLwEDfjMwVgk3IDiwnZ4eK_AE,2962
|
113
115
|
langroid/utils/output/status.py,sha256=rzbE7mDJcgNNvdtylCseQcPGCGghtJvVq3lB-OPJ49E,1049
|
114
116
|
langroid/utils/pandas_utils.py,sha256=UctS986Jtl_MvU5rA7-GfrjEHXP7MNu8ePhepv0bTn0,755
|
115
117
|
langroid/utils/pydantic_utils.py,sha256=yb-ghaQYL7EIYeiZ0tailvZvAuJZNF7UBXkd3z35OYc,21728
|
116
118
|
langroid/utils/system.py,sha256=RfAcQODu4tjl-pAO8zZ65yKB9-6WsvzSz2dEPkJdSdw,4909
|
117
119
|
langroid/utils/web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
118
120
|
langroid/utils/web/login.py,sha256=1iz9eUAHa87vpKIkzwkmFa00avwFWivDSAr7QUhK7U0,2528
|
119
|
-
langroid/vector_store/__init__.py,sha256=
|
121
|
+
langroid/vector_store/__init__.py,sha256=6xBjb_z4QtUy4vz4RuFbcbSwmHrggHL8-q0DwCf3PMM,972
|
120
122
|
langroid/vector_store/base.py,sha256=VZl-pvGs6K-ruTT8SQmDthsCp-VARYaf6OuzKmcXN58,13469
|
121
|
-
langroid/vector_store/chromadb.py,sha256=
|
122
|
-
langroid/vector_store/lancedb.py,sha256=
|
123
|
-
langroid/vector_store/meilisearch.py,sha256=
|
124
|
-
langroid/vector_store/momento.py,sha256=
|
123
|
+
langroid/vector_store/chromadb.py,sha256=bZ5HjwgKgfJj1PUHsatYsrHv-v0dpOfMR2l0tJ2H0_A,7890
|
124
|
+
langroid/vector_store/lancedb.py,sha256=nC5pcrFoUOOO941Y7XiPZONUO4LuoZIAR1aR4PecKto,19014
|
125
|
+
langroid/vector_store/meilisearch.py,sha256=6frB7GFWeWmeKzRfLZIvzRjllniZ1cYj3HmhHQICXLs,11663
|
126
|
+
langroid/vector_store/momento.py,sha256=QaPzUnTwlswoawGB-paLtUPyLRvckFXLfLDfvbTzjNQ,10505
|
125
127
|
langroid/vector_store/qdrant_cloud.py,sha256=3im4Mip0QXLkR6wiqVsjV1QvhSElfxdFSuDKddBDQ-4,188
|
126
128
|
langroid/vector_store/qdrantdb.py,sha256=sk5Qb2ZNbooi0rorsMuqIMokF7WADw6PJ0D6goM2XBw,16802
|
127
|
-
langroid-0.1.
|
128
|
-
langroid-0.1.
|
129
|
-
langroid-0.1.
|
130
|
-
langroid-0.1.
|
129
|
+
langroid-0.1.254.dist-info/LICENSE,sha256=EgVbvA6VSYgUlvC3RvPKehSg7MFaxWDsFuzLOsPPfJg,1065
|
130
|
+
langroid-0.1.254.dist-info/METADATA,sha256=moT2a-C4KIhExM6a0sNAh8du03kaFfNJ7IiSwUwdVn0,50962
|
131
|
+
langroid-0.1.254.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
132
|
+
langroid-0.1.254.dist-info/RECORD,,
|
File without changes
|
File without changes
|