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.
Files changed (47) hide show
  1. langroid/__init__.py +16 -15
  2. langroid/agent/__init__.py +1 -0
  3. langroid/agent/callbacks/chainlit.py +5 -12
  4. langroid/agent/special/__init__.py +13 -4
  5. langroid/agent/special/doc_chat_agent.py +39 -55
  6. langroid/agent/special/neo4j/csv_kg_chat.py +2 -2
  7. langroid/agent/special/sql/__init__.py +12 -6
  8. langroid/agent/special/sql/sql_chat_agent.py +10 -4
  9. langroid/agent/special/sql/utils/__init__.py +4 -5
  10. langroid/agent/special/sql/utils/description_extractors.py +7 -2
  11. langroid/agent/special/sql/utils/populate_metadata.py +6 -1
  12. langroid/agent/special/table_chat_agent.py +2 -2
  13. langroid/agent/tool_message.py +14 -3
  14. langroid/agent/tools/__init__.py +2 -3
  15. langroid/agent/tools/duckduckgo_search_tool.py +2 -2
  16. langroid/agent/tools/google_search_tool.py +2 -2
  17. langroid/agent/tools/metaphor_search_tool.py +2 -2
  18. langroid/agent/tools/retrieval_tool.py +2 -2
  19. langroid/agent/tools/run_python_code.py +2 -2
  20. langroid/agent/tools/segment_extract_tool.py +2 -2
  21. langroid/cachedb/__init__.py +10 -2
  22. langroid/cachedb/base.py +10 -2
  23. langroid/cachedb/momento_cachedb.py +10 -4
  24. langroid/cachedb/redis_cachedb.py +2 -3
  25. langroid/embedding_models/__init__.py +1 -0
  26. langroid/exceptions.py +57 -0
  27. langroid/language_models/__init__.py +1 -0
  28. langroid/language_models/base.py +2 -3
  29. langroid/language_models/openai_gpt.py +15 -14
  30. langroid/language_models/prompt_formatter/__init__.py +4 -3
  31. langroid/parsing/__init__.py +8 -2
  32. langroid/parsing/document_parser.py +46 -10
  33. langroid/parsing/parser.pyi +56 -0
  34. langroid/parsing/spider.py +12 -7
  35. langroid/utils/logging.py +7 -3
  36. langroid/utils/output/__init__.py +1 -2
  37. langroid/utils/output/citations.py +41 -0
  38. langroid/utils/output/printing.py +7 -2
  39. langroid/vector_store/__init__.py +33 -23
  40. langroid/vector_store/chromadb.py +2 -8
  41. langroid/vector_store/lancedb.py +36 -5
  42. langroid/vector_store/meilisearch.py +21 -11
  43. langroid/vector_store/momento.py +31 -14
  44. {langroid-0.1.252.dist-info → langroid-0.1.254.dist-info}/METADATA +59 -47
  45. {langroid-0.1.252.dist-info → langroid-0.1.254.dist-info}/RECORD +47 -45
  46. {langroid-0.1.252.dist-info → langroid-0.1.254.dist-info}/LICENSE +0 -0
  47. {langroid-0.1.252.dist-info → langroid-0.1.254.dist-info}/WHEEL +0 -0
@@ -1,18 +1,31 @@
1
+ from __future__ import annotations
2
+
1
3
  import logging
2
- from typing import Any, Dict, Generator, List, Optional, Sequence, Tuple, Type
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(self, result: LanceVectorQueryBuilder) -> List[Document]:
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,
@@ -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
- from momento import (
13
- # PreviewVectorIndexClientAsync,
14
- CredentialProvider,
15
- PreviewVectorIndexClient,
16
- VectorIndexConfigurations,
17
- )
18
- from momento.requests.vector_index import (
19
- ALL_METADATA,
20
- Item,
21
- SimilarityMetric,
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.config.distance,
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.252
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 (==1.16.1)
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: pytest-asyncio (>=0.21.1,<0.22.0)
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: ruff (>=0.2.2,<0.3.0)
97
- Requires-Dist: scrapy (>=2.11.0,<3.0.0)
98
- Requires-Dist: sentence-transformers (==2.2.2) ; extra == "hf-embeddings"
99
- Requires-Dist: sqlalchemy (>=2.0.19,<3.0.0)
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: types-pillow (>=10.2.0.20240406,<11.0.0.0)
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 environment:
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=GXjDRv1rVNCxEB0BkfPIT4xgldKkB20b7kGPuGxNdiI,1803
2
- langroid/agent/__init__.py,sha256=_D8dxnfdr92ch1CIrUkKjrB5HVvsQdn62b1Fb2kBxV8,785
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=LboE3zlLLzClKxpBkzHX4XU6fW4lNZW97zwwN97uuaU,21067
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=NG0JkB5y4K0bgnd9Q9UIvFExun3uTfVOWEVLVymff1M,1207
13
- langroid/agent/special/doc_chat_agent.py,sha256=MTUrUyCZ7_wksTo11AwSTHMOKZf1WX-cAJowi_sfT2o,55320
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=koL3sKtHm3aRkLTiARs54ngrcU3lOR1WaLLc_i8rWOU,6374
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=qUM-b4FfvIt0gYWP7_niyqR3OwVMMkuK2SyqUYWjyxs,207
28
- langroid/agent/special/sql/sql_chat_agent.py,sha256=ZTK19ToIpSxtedwzsqL38diMtHth6uVDf25Wng2dn7Q,13746
29
- langroid/agent/special/sql/utils/__init__.py,sha256=i8oYoyI4aV1LcYktMOhzi_eYbQ6RVt2e7Dj2bXkCZXc,447
30
- langroid/agent/special/sql/utils/description_extractors.py,sha256=RZ2R3DmASxB1ijzbA_TuxkhP00Pxcg_tAKlLXGo3rcg,6381
31
- langroid/agent/special/sql/utils/populate_metadata.py,sha256=x2OMKfmIBnJESBG3qKt6gvr3H3L4ZQcoxHfNdWfHjZs,2987
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=xz4nWndTYTykET_oaveHcZUQ8IEpmA5yB8QGTXfOifw,9624
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=aNSYLiRCszPZXJpKt7bGXWjBRzJVJIZoTjQXy7RHMQs,8486
37
- langroid/agent/tools/__init__.py,sha256=q-maq3k2BXhPAU99G0H6-j_ozoRvx15I1RFpPVicQIU,304
38
- langroid/agent/tools/duckduckgo_search_tool.py,sha256=mLGhlgs6pwbYZIwrOs9shfh1dMBVT4DtkR29pYL3cCQ,1900
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=cQxcNtb8XCNpOo_yCeYRwG_y-OATjPgkbr01kea9qWE,1421
42
- langroid/agent/tools/metaphor_search_tool.py,sha256=NKHss-AkI942_XhfMgUctAwHjIHpqp5NfYIebKV4UcE,2454
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=6uvRNg-kG_ItPa3sF9NWkthQ5frHn8bkB1Z3GSd3Oas,836
45
- langroid/agent/tools/run_python_code.py,sha256=V3mHdHQYn0M0PAtyoHxjNvk6KvWWcQ4ugo0TOKc8HyI,1752
46
- langroid/agent/tools/segment_extract_tool.py,sha256=W39poS7Av2EuJ34tGKhLhzgj3zEyZnBplpSt2goRAp4,1285
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=ygx42MS7fvh2UwRMjukTk3dWBkzv_rACebTBRYa_MkU,148
49
- langroid/cachedb/base.py,sha256=tdIZmdDdDMW-wVkNQdi4vMQCHP718l9JM6cDhL6odf4,1229
50
- langroid/cachedb/momento_cachedb.py,sha256=IbaYG7HgG-G18GlWsYVnLv0r2e2S48z6sl8OlJOGUfc,2998
51
- langroid/cachedb/redis_cachedb.py,sha256=5WrwgareXGboZeaCLkJ8MarqRMrrXl4_8o8aDrdrOCE,4993
52
- langroid/embedding_models/__init__.py,sha256=AJg2668ytmUyqYP0SGw-ZKz2ITi4YK7IAv2lfCjFfOg,714
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=aQwRVRb04flh1GVbLo3PmoIf3sP9RC7Q5gJH9aVSEkI,169
63
- langroid/language_models/__init__.py,sha256=5L9ndEEC8iLJHjDJmYFTnv6-2-3xsxWUMHcugR8IeDs,821
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=2JhacnbQ-DJzLbOaJqyZPnl867xyiz_W-ODiAlEcp98,21131
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=5O-roChpUDZ6OmRTOkR9e2AHHZL8w12Yzs9Q_xviDZ0,50668
69
- langroid/language_models/prompt_formatter/__init__.py,sha256=9JXFF22QNMmbQV1q4nrIeQVTtA3Tx8tEZABLtLBdFyc,352
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=2O5HOW8nDE3v-JInc5z2wIbFGejf4h5ZTdPqxsFtaWE,870
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=sfyNhkIdAQkufOHb-tTv63EF51pGNzrnAl0DNeLR40I,23049
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=w_mHR1B4KOmxsBLoVI8kMkMTEbwTzeK3ath9fOMJrTk,3043
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=R8TN-FqVpwZ4Ajgls9TDMthLvPpQd0QVNXK-PJDj1Z8,3917
111
- langroid/utils/output/__init__.py,sha256=4X8Hdo1SEm06NUnggMJrLtW8i1owdDQPrS7J08BaTec,341
112
- langroid/utils/output/printing.py,sha256=5EsYB1O4qKhocW19aebOUzK82RD9U5nygbY21yo8gfg,2872
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=D82ioqPWxKTTbN0qiPNB-I1GjovhLw1MgDuYhcB3hCs,831
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=rp-qWmYJc_HR48JYNt1MixjJM90jZTdeZIYghd5CenA,8109
122
- langroid/vector_store/lancedb.py,sha256=lbl8wZuV6GNw0LnIwOSriSNwoMEba90umQTcQHtMw7Y,18483
123
- langroid/vector_store/meilisearch.py,sha256=d2huA9P-NoYRuAQ9ZeXJmMKr7ry8u90RUSR28k2ecQg,11340
124
- langroid/vector_store/momento.py,sha256=9cui31TTrILid2KIzUpBkN2Ey3g_CZWOQVdaFsA4Ors,10045
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.252.dist-info/LICENSE,sha256=EgVbvA6VSYgUlvC3RvPKehSg7MFaxWDsFuzLOsPPfJg,1065
128
- langroid-0.1.252.dist-info/METADATA,sha256=zRgxQH1C04RM1tofjy6tNtYSE1YalSYHvqVz7oVjYU8,49559
129
- langroid-0.1.252.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
130
- langroid-0.1.252.dist-info/RECORD,,
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,,