langroid 0.22.3__py3-none-any.whl → 0.22.5__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 CHANGED
@@ -142,7 +142,7 @@ class Agent(ABC):
142
142
  self.llm_tools_handled: Set[str] = set()
143
143
  self.llm_tools_usable: Set[str] = set()
144
144
  self.llm_tools_known: Set[str] = set() # all known tools, handled/used or not
145
- self.interactive: bool | None = None
145
+ self.interactive: bool = True # may be modified by Task wrapper
146
146
  self.token_stats_str = ""
147
147
  self.default_human_response: Optional[str] = None
148
148
  self._indent = ""
@@ -645,10 +645,11 @@ class Agent(ABC):
645
645
  need_human_response = (
646
646
  isinstance(msg, ChatDocument) and msg.metadata.recipient == Entity.USER
647
647
  )
648
+ default_user_msg = (
649
+ (self.default_human_response or "null") if need_human_response else ""
650
+ )
648
651
 
649
- interactive = self.interactive or settings.interactive
650
-
651
- if not interactive and not need_human_response:
652
+ if not self.interactive and not need_human_response:
652
653
  return None
653
654
  elif self.default_human_response is not None:
654
655
  user_msg = self.default_human_response
@@ -669,6 +670,8 @@ class Agent(ABC):
669
670
  tool_ids = []
670
671
  if msg is not None and isinstance(msg, ChatDocument):
671
672
  tool_ids = msg.metadata.tool_ids
673
+
674
+ user_msg = user_msg.strip() or default_user_msg.strip()
672
675
  # only return non-None result if user_msg not empty
673
676
  if not user_msg:
674
677
  return None
@@ -10,11 +10,10 @@ Functionality includes:
10
10
  import logging
11
11
  from typing import Any, Dict, List, Optional, Sequence, Union
12
12
 
13
- from rich import print
14
13
  from rich.console import Console
15
14
 
16
15
  from langroid.exceptions import LangroidImportError
17
- from langroid.utils.constants import DONE, SEND_TO
16
+ from langroid.utils.constants import SEND_TO
18
17
 
19
18
  try:
20
19
  from sqlalchemy import MetaData, Row, create_engine, inspect, text
@@ -25,7 +24,7 @@ except ImportError as e:
25
24
  raise LangroidImportError(extra="sql", error=str(e))
26
25
 
27
26
  from langroid.agent.chat_agent import ChatAgent, ChatAgentConfig
28
- from langroid.agent.chat_document import ChatDocMetaData, ChatDocument
27
+ from langroid.agent.chat_document import ChatDocument
29
28
  from langroid.agent.special.sql.utils.description_extractors import (
30
29
  extract_schema_descriptions,
31
30
  )
@@ -43,15 +42,15 @@ from langroid.agent.special.sql.utils.tools import (
43
42
  GetTableSchemaTool,
44
43
  RunQueryTool,
45
44
  )
46
- from langroid.mytypes import Entity
45
+ from langroid.agent.tools.orchestration import DoneTool, ForwardTool
47
46
  from langroid.vector_store.base import VectorStoreConfig
48
47
 
49
48
  logger = logging.getLogger(__name__)
50
49
 
51
50
  console = Console()
52
51
 
53
- DEFAULT_SQL_CHAT_SYSTEM_MESSAGE = f"""
54
- {{mode}}
52
+ DEFAULT_SQL_CHAT_SYSTEM_MESSAGE = """
53
+ {mode}
55
54
 
56
55
  You do not need to attempt answering a question with just one query.
57
56
  You could make a sequence of SQL queries to help you write the final query.
@@ -65,19 +64,24 @@ are "Male" and "Female".
65
64
 
66
65
  Start by asking what I would like to know about the data.
67
66
 
68
- When you have FINISHED the given query or database update task,
69
- say {DONE} and show your answer.
70
-
71
67
  """
72
68
 
73
- ADDRESSING_INSTRUCTION = f"""
69
+ ADDRESSING_INSTRUCTION = """
74
70
  IMPORTANT - Whenever you are NOT writing a SQL query, make sure you address the user
75
- using {{prefix}}User. You MUST use the EXACT syntax {{prefix}} !!!
71
+ using {prefix}User. You MUST use the EXACT syntax {prefix} !!!
76
72
 
77
73
  In other words, you ALWAYS write EITHER:
78
74
  - a SQL query using the `run_query` tool,
79
- - OR address the user using {{prefix}}User, and include {DONE} to indicate your
80
- task is FINISHED.
75
+ - OR address the user using {prefix}User
76
+ """
77
+
78
+ DONE_INSTRUCTION = f"""
79
+ When you are SURE you have the CORRECT answer to a user's query or request,
80
+ use the `{DoneTool.name()}` with `content` set to the answer or result.
81
+ If you DO NOT think you have the answer to the user's query or request,
82
+ you SHOULD NOT use the `{DoneTool.name()}` tool.
83
+ Instead, you must CONTINUE to improve your queries (tools) to get the correct answer,
84
+ and finally use the `{DoneTool.name()}` tool to send the correct answer to the user.
81
85
  """
82
86
 
83
87
 
@@ -96,7 +100,10 @@ class SQLChatAgentConfig(ChatAgentConfig):
96
100
  context_descriptions: Dict[str, Dict[str, Union[str, Dict[str, str]]]] = {}
97
101
  use_schema_tools: bool = False
98
102
  multi_schema: bool = False
99
- addressing_prefix: str = SEND_TO
103
+ # whether the agent is used in a continuous chat with user,
104
+ # as opposed to returning a result from the task.run()
105
+ chat_mode: bool = False
106
+ addressing_prefix: str = ""
100
107
 
101
108
  """
102
109
  Optional, but strongly recommended, context descriptions for tables, columns,
@@ -225,14 +232,21 @@ class SQLChatAgent(ChatAgent):
225
232
  """Initialize message tools used for chatting."""
226
233
  message = self._format_message()
227
234
  self.config.system_message = self.config.system_message.format(mode=message)
228
- if self.config.addressing_prefix != "":
235
+
236
+ if self.config.chat_mode:
237
+ self.config.addressing_prefix = self.config.addressing_prefix or SEND_TO
229
238
  self.config.system_message += ADDRESSING_INSTRUCTION.format(
230
239
  prefix=self.config.addressing_prefix
231
240
  )
241
+ else:
242
+ self.config.system_message += DONE_INSTRUCTION
243
+
232
244
  super().__init__(self.config)
233
- self.enable_message(RunQueryTool)
245
+ self.enable_message([RunQueryTool, ForwardTool])
234
246
  if self.config.use_schema_tools:
235
247
  self._enable_schema_tools()
248
+ if not self.config.chat_mode:
249
+ self.enable_message(DoneTool)
236
250
 
237
251
  def _format_message(self) -> str:
238
252
  if self.engine is None:
@@ -270,7 +284,7 @@ class SQLChatAgent(ChatAgent):
270
284
 
271
285
  def handle_message_fallback(
272
286
  self, msg: str | ChatDocument
273
- ) -> str | ChatDocument | None:
287
+ ) -> str | ForwardTool | None:
274
288
  """
275
289
  Handle the scenario where current msg is not a tool.
276
290
  Special handling is only needed if the message was from the LLM
@@ -278,60 +292,40 @@ class SQLChatAgent(ChatAgent):
278
292
  """
279
293
  if not self.llm_responded:
280
294
  return None
281
- if self.used_run_query:
282
- prefix = (
283
- self.config.addressing_prefix + "User"
284
- if self.config.addressing_prefix
285
- else ""
286
- )
287
- return (
288
- DONE + prefix + (msg.content if isinstance(msg, ChatDocument) else msg)
289
- )
295
+ if self.interactive:
296
+ return ForwardTool(agent="User")
290
297
 
291
- else:
292
- reminder = """
293
- You may have forgotten to use the `run_query` tool to execute an SQL query
294
- for the user's question/request
298
+ tools_instruction = f"""
299
+ For example you may want to use the TOOL
300
+ `{RunQueryTool.name()}` to further explore the database contents
301
+ """
302
+ if self.config.use_schema_tools:
303
+ tools_instruction += """
304
+ OR you may want to use one of the schema tools to
305
+ explore the database schema
306
+ """
307
+ if self.config.chat_mode:
308
+ return f"""
309
+ Since you did not explicitly address the User, it is not clear
310
+ whether:
311
+ - you intend this to be the final response to the
312
+ user's query/request, in which case you must use the
313
+ `{ForwardTool.name()}` to indicate this.
314
+ - OR, you FORGOT to use an Appropriate TOOL,
315
+ in which case you should use the available tools to
316
+ make progress on the user's query/request.
317
+ {tools_instruction}
295
318
  """
296
- if self.config.addressing_prefix != "":
297
- reminder += f"""
298
- OR you may have forgotten to address the user using the prefix
299
- {self.config.addressing_prefix}
300
- """
301
- return reminder
302
-
303
- def _agent_response(
304
- self,
305
- msg: Optional[str | ChatDocument] = None,
306
- ) -> Optional[ChatDocument]:
307
- # Your override code here
308
- if msg is None:
309
- return None
310
-
311
- results = self.handle_message(msg)
312
- if results is None:
313
- return None
314
319
 
315
- output = results
316
- if SQL_ERROR_MSG in output:
317
- output = "There was an error in the SQL Query. Press enter to retry."
318
-
319
- console.print(f"[red]{self.indent}", end="")
320
- print(f"[red]Agent: {output}")
321
- sender_name = self.config.name
322
- if isinstance(msg, ChatDocument) and msg.function_call is not None:
323
- sender_name = msg.function_call.name
324
-
325
- content = results.content if isinstance(results, ChatDocument) else results
326
-
327
- return ChatDocument(
328
- content=content,
329
- metadata=ChatDocMetaData(
330
- source=Entity.AGENT,
331
- sender=Entity.AGENT,
332
- sender_name=sender_name,
333
- ),
334
- )
320
+ return f"""
321
+ The intent of your response is not clear:
322
+ - if you intended this to be the FINAL answer to the user's query,
323
+ then use the `{DoneTool.name()}` to indicate so,
324
+ with the `content` set to the answer or result.
325
+ - otherwise, use one of the available tools to make progress
326
+ to arrive at the final answer.
327
+ {tools_instruction}
328
+ """
335
329
 
336
330
  def retry_query(self, e: Exception, query: str) -> str:
337
331
  """
langroid/agent/task.py CHANGED
@@ -1023,9 +1023,11 @@ class Task:
1023
1023
  found_response = False
1024
1024
  # (responder, result) from a responder who explicitly said NO_ANSWER
1025
1025
  no_answer_response: None | Tuple[Responder, ChatDocument] = None
1026
+ n_non_responders = 0
1026
1027
  for r in responders:
1027
1028
  self.is_pass_thru = False
1028
1029
  if not self._can_respond(r):
1030
+ n_non_responders += 1
1029
1031
  # create dummy msg for logging
1030
1032
  log_doc = ChatDocument(
1031
1033
  content="[CANNOT RESPOND]",
@@ -1038,6 +1040,9 @@ class Task:
1038
1040
  # no need to register this dummy msg in ObjectRegistry
1039
1041
  ChatDocument.delete_id(log_doc.id())
1040
1042
  self.log_message(r, log_doc)
1043
+ if n_non_responders == len(responders):
1044
+ # don't stay in this "non-response" loop forever
1045
+ break
1041
1046
  continue
1042
1047
  self.human_tried = r == Entity.USER
1043
1048
  result = self.response(r, turns)
@@ -4,7 +4,10 @@ from langroid.agent.tool_message import ToolMessage
4
4
 
5
5
 
6
6
  class RetrievalTool(ToolMessage):
7
- """Retrieval tool, only to be used by a DocChatAgent."""
7
+ """
8
+ Retrieval tool, only to be used by a DocChatAgent.
9
+ The handler method is defined in DocChatAgent.retrieval_tool
10
+ """
8
11
 
9
12
  request: str = "retrieval_tool"
10
13
  purpose: str = """
langroid/parsing/utils.py CHANGED
@@ -31,6 +31,10 @@ def download_nltk_resource(resource: str) -> None:
31
31
  nltk.download(resource, quiet=True)
32
32
 
33
33
 
34
+ # Download punkt_tab resource at module import
35
+ download_nltk_resource("punkt_tab")
36
+ download_nltk_resource("gutenberg")
37
+
34
38
  T = TypeVar("T")
35
39
 
36
40
 
@@ -46,7 +50,6 @@ def batched(iterable: Iterable[T], n: int) -> Iterable[Sequence[T]]:
46
50
 
47
51
  def generate_random_sentences(k: int) -> str:
48
52
  # Load the sample text
49
- download_nltk_resource("gutenberg")
50
53
 
51
54
  from nltk.corpus import gutenberg
52
55
 
@@ -17,8 +17,6 @@ class Settings(BaseSettings):
17
17
  stream: bool = True # stream output?
18
18
  cache: bool = True # use cache?
19
19
  cache_type: Literal["redis", "fakeredis", "momento", "none"] = "redis" # cache type
20
- interactive: bool = True # interactive mode?
21
- gpt3_5: bool = True # use GPT-3.5?
22
20
  chat_model: str = "" # language model name, e.g. litellm/ollama/llama2
23
21
  quiet: bool = False # quiet mode (i.e. suppress all output)?
24
22
  notebook: bool = False # running in a notebook?
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langroid
3
- Version: 0.22.3
3
+ Version: 0.22.5
4
4
  Summary: Harness LLMs with Multi-Agent Programming
5
5
  License: MIT
6
6
  Author: Prasad Chalasani
@@ -68,7 +68,7 @@ Requires-Dist: metaphor-python (>=0.1.23,<0.2.0) ; extra == "all" or extra == "m
68
68
  Requires-Dist: momento (>=1.10.2,<1.21) ; extra == "momento"
69
69
  Requires-Dist: neo4j (>=5.14.1,<6.0.0) ; extra == "all" or extra == "neo4j"
70
70
  Requires-Dist: nest-asyncio (>=1.6.0,<2.0.0)
71
- Requires-Dist: nltk (>=3.8.1,<4.0.0)
71
+ Requires-Dist: nltk (>=3.8.2,<4.0.0)
72
72
  Requires-Dist: onnxruntime (>=1.16.1,<2.0.0)
73
73
  Requires-Dist: openai (>=1.45.0,<2.0.0)
74
74
  Requires-Dist: pandas (>=2.0.3,<3.0.0)
@@ -1,6 +1,6 @@
1
1
  langroid/__init__.py,sha256=z_fCOLQJPOw3LLRPBlFB5-2HyCjpPgQa4m4iY5Fvb8Y,1800
2
2
  langroid/agent/__init__.py,sha256=ll0Cubd2DZ-fsCMl7e10hf9ZjFGKzphfBco396IKITY,786
3
- langroid/agent/base.py,sha256=IatVtrdstxMcreeVSndNoChFKxrJIEkYRpNruBxRQ7M,67112
3
+ langroid/agent/base.py,sha256=-lMv0XHO7ya1P6IW_xb439Mx8WhFEPgt1AmcMe200ds,67268
4
4
  langroid/agent/batch.py,sha256=QZdlt1563hx4l3AXrCaGovE-PNG93M3DsvQAbDzdiS8,13705
5
5
  langroid/agent/callbacks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  langroid/agent/callbacks/chainlit.py,sha256=JJXI3UGTyTDg2FFath4rqY1GyUo_0pbVBt8CZpvdtn4,23289
@@ -30,7 +30,7 @@ langroid/agent/special/neo4j/tools.py,sha256=Vw3HvtDfG2c4_bUHgt4_ZbJq48lpIQstbjj
30
30
  langroid/agent/special/relevance_extractor_agent.py,sha256=zIx8GUdVo1aGW6ASla0NPQjYYIpmriK_TYMijqAx3F8,4796
31
31
  langroid/agent/special/retriever_agent.py,sha256=lvMvf-u9rSosg4YASuFdUbGLgkzLPknXAbJZfZ1LZCc,1868
32
32
  langroid/agent/special/sql/__init__.py,sha256=mWfmm1QpXCezpFOS2eI57M0L_Ok3q5_ukG8tXBnBrEA,319
33
- langroid/agent/special/sql/sql_chat_agent.py,sha256=LVTuOlaY6m5DpsMFLFv00eOz04y6vKeO4mfGLIUp6AY,16844
33
+ langroid/agent/special/sql/sql_chat_agent.py,sha256=j8m1Lm8j_w3m3gzPjuC2vea_t_bfhNewCfDnPDzrc38,17191
34
34
  langroid/agent/special/sql/utils/__init__.py,sha256=JFif6CRTrN-bc91uuAI4K9fe2ndIWSNMVxJ0WA68--M,446
35
35
  langroid/agent/special/sql/utils/description_extractors.py,sha256=cX8TIpmTPXZXQTMpIi3OUFwFsPywxFFdurpx717Kq0I,6529
36
36
  langroid/agent/special/sql/utils/populate_metadata.py,sha256=1J22UsyEPKzwK0XlJZtYn9r6kYc0FXIr8-lZrndYlhc,3131
@@ -38,7 +38,7 @@ langroid/agent/special/sql/utils/system_message.py,sha256=qKLHkvQWRQodTtPLPxr1GS
38
38
  langroid/agent/special/sql/utils/tools.py,sha256=vFYysk6Vi7HJjII8B4RitA3pt_z3gkSglDNdhNVMiFc,1332
39
39
  langroid/agent/special/table_chat_agent.py,sha256=d9v2wsblaRx7oMnKhLV7uO_ujvk9gh59pSGvBXyeyNc,9659
40
40
  langroid/agent/structured_message.py,sha256=y7pud1EgRNeTFZlJmBkLmwME3yQJ_IYik-Xds9kdZbY,282
41
- langroid/agent/task.py,sha256=0ewueaJBXvOvlSAHipL21xqgcpiGySDHr-A_Ov0WyQ8,86659
41
+ langroid/agent/task.py,sha256=BdLNWFQqA9X-9ZtUIC2NwmRrPAX7GB0mAC0aXDzK0Uk,86877
42
42
  langroid/agent/tool_message.py,sha256=bjBSk1N1IgqqYGmOy6O97zPFMSaUdEK7r8ZjOaJwoeE,11335
43
43
  langroid/agent/tools/__init__.py,sha256=IMgCte-_ZIvCkozGQmvMqxIw7_nKLKzD78ccJL1bnQU,804
44
44
  langroid/agent/tools/duckduckgo_search_tool.py,sha256=NhsCaGZkdv28nja7yveAhSK_w6l_Ftym8agbrdzqgfo,1935
@@ -47,7 +47,7 @@ langroid/agent/tools/google_search_tool.py,sha256=y7b-3FtgXf0lfF4AYxrZ3K5pH2dhid
47
47
  langroid/agent/tools/metaphor_search_tool.py,sha256=qj4gt453cLEX3EGW7nVzVu6X7LCdrwjSlcNY0qJW104,2489
48
48
  langroid/agent/tools/orchestration.py,sha256=EDv1EMVGYqX82x3bCRbTn9gFNs66oosiUM8WTSZkUJg,10909
49
49
  langroid/agent/tools/recipient_tool.py,sha256=dr0yTxgNEIoxUYxH6TtaExC4G_8WdJ0xGohIa4dFLhY,9808
50
- langroid/agent/tools/retrieval_tool.py,sha256=2q2pfoYbZNfbWQ0McxrtmfF0ekGglIgRl-6uF26pa-E,871
50
+ langroid/agent/tools/retrieval_tool.py,sha256=zcAV20PP_6VzSd-UE-IJcabaBseFL_QNz59Bnig8-lE,946
51
51
  langroid/agent/tools/rewind_tool.py,sha256=XAXL3BpNhCmBGYq_qi_sZfHJuIw7NY2jp4wnojJ7WRs,5606
52
52
  langroid/agent/tools/segment_extract_tool.py,sha256=__srZ_VGYLVOdPrITUM8S0HpmX4q7r5FHWMDdHdEv8w,1440
53
53
  langroid/agent/typed_task.py,sha256=oxja0Z3uLTv0BcR1xIMqDpo85MIGOruz4XsZ4ghjsW4,689
@@ -100,7 +100,7 @@ langroid/parsing/table_loader.py,sha256=qNM4obT_0Y4tjrxNBCNUYjKQ9oETCZ7FbolKBTcz
100
100
  langroid/parsing/url_loader.py,sha256=Na2TBlKuQkloZzkE2d7xl6mh9olS3CbpgCsJbJ-xhIA,4472
101
101
  langroid/parsing/url_loader_cookies.py,sha256=Lg4sNpRz9MByWq2mde6T0hKv68VZSV3mtMjNEHuFeSU,2327
102
102
  langroid/parsing/urls.py,sha256=XjpaV5onG7gKQ5iQeFTzHSw5P08Aqw0g-rMUu61lR6s,7988
103
- langroid/parsing/utils.py,sha256=pbSAbfwA28EBNESpQRJee_Kp1b44qze-2_2b9qJOKfM,12646
103
+ langroid/parsing/utils.py,sha256=kb9DlHaG1iQB-6JagH1C26SdCNNf8U-2XaXia4_dWCw,12726
104
104
  langroid/parsing/web_search.py,sha256=wGycU86N3nsZ78E9iS-BIm5NWueDgoknojABE0_1LRA,4886
105
105
  langroid/prompts/__init__.py,sha256=RW11vK6jiLPuaUh4GpeFvstti73gkm8_rDMtrbo2YsU,142
106
106
  langroid/prompts/chat-gpt4-system-prompt.md,sha256=Q3uLCJTPQvmUkZN2XDnkBC7M2K3X0F3C3GIQBaFvYvw,5329
@@ -115,7 +115,7 @@ langroid/utils/.chainlit/translations/en-US.json,sha256=DAFz2HjOFFfboCStrUfKFg2B
115
115
  langroid/utils/__init__.py,sha256=Sruos2tB4G7Tn0vlblvYlX9PEGR0plI2uE0PJ4d_EC4,353
116
116
  langroid/utils/algorithms/__init__.py,sha256=WylYoZymA0fnzpB4vrsH_0n7WsoLhmuZq8qxsOCjUpM,41
117
117
  langroid/utils/algorithms/graph.py,sha256=JbdpPnUOhw4-D6O7ou101JLA3xPCD0Lr3qaPoFCaRfo,2866
118
- langroid/utils/configuration.py,sha256=LgjHGB0qgKKTwBaVt84APiqvJbz6pLwylUvHWYmzyP0,3303
118
+ langroid/utils/configuration.py,sha256=V3RS8OP7AC0_bDKczxfortD0F5H3cnsZL0ulKBxuoHU,3213
119
119
  langroid/utils/constants.py,sha256=vKIdkAJwyPT-bRA5MDPiOl7-EppBRmewRBIOcdXi4I4,959
120
120
  langroid/utils/docker.py,sha256=kJQOLTgM0x9j9pgIIqp0dZNZCTvoUDhp6i8tYBq1Jr0,1105
121
121
  langroid/utils/git_utils.py,sha256=WnflJ3R3owhlD0LNdSJakcKhExcEehE1UW5jYVQl8JY,7955
@@ -142,8 +142,8 @@ langroid/vector_store/meilisearch.py,sha256=6frB7GFWeWmeKzRfLZIvzRjllniZ1cYj3Hmh
142
142
  langroid/vector_store/momento.py,sha256=qR-zBF1RKVHQZPZQYW_7g-XpTwr46p8HJuYPCkfJbM4,10534
143
143
  langroid/vector_store/qdrant_cloud.py,sha256=3im4Mip0QXLkR6wiqVsjV1QvhSElfxdFSuDKddBDQ-4,188
144
144
  langroid/vector_store/qdrantdb.py,sha256=v88lqFkepADvlN6lByUj9I4NEKa9X9lWH16uTPPbYrE,17457
145
- pyproject.toml,sha256=blIMIWJ0_N8r8YBAJV1BoWriHqWE3erxmjQb-2npkbU,7488
146
- langroid-0.22.3.dist-info/LICENSE,sha256=EgVbvA6VSYgUlvC3RvPKehSg7MFaxWDsFuzLOsPPfJg,1065
147
- langroid-0.22.3.dist-info/METADATA,sha256=_1rwLApadQ9D1HTsVSTq03sPgyiALup286Snmx2Ei7I,57107
148
- langroid-0.22.3.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
149
- langroid-0.22.3.dist-info/RECORD,,
145
+ pyproject.toml,sha256=m9VWz7kgw5OWUlJj_B-LP9ov67jCSioaLfCLTVdi-jg,7488
146
+ langroid-0.22.5.dist-info/LICENSE,sha256=EgVbvA6VSYgUlvC3RvPKehSg7MFaxWDsFuzLOsPPfJg,1065
147
+ langroid-0.22.5.dist-info/METADATA,sha256=B7F4ITogUktXDfPGpjQB1RDNe2TV1se5JF321Jc2tNY,57107
148
+ langroid-0.22.5.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
149
+ langroid-0.22.5.dist-info/RECORD,,
pyproject.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "langroid"
3
- version = "0.22.3"
3
+ version = "0.22.5"
4
4
  description = "Harness LLMs with Multi-Agent Programming"
5
5
  authors = ["Prasad Chalasani <pchalasani@gmail.com>"]
6
6
  readme = "README.md"
@@ -62,7 +62,7 @@ fakeredis = "^2.12.1"
62
62
  faker = "^18.9.0"
63
63
  requests = "^2.31.0"
64
64
  pyparsing = "^3.0.9"
65
- nltk = "^3.8.1"
65
+ nltk = "^3.8.2"
66
66
  qdrant-client = "^1.8.0"
67
67
  pydantic = ">=1,<3"
68
68
  pandas = "^2.0.3"