langroid 0.59.0b2__py3-none-any.whl → 0.59.1__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 (50) hide show
  1. langroid/agent/done_sequence_parser.py +46 -11
  2. langroid/agent/special/doc_chat_task.py +0 -0
  3. langroid/agent/task.py +44 -7
  4. langroid/language_models/model_info.py +51 -0
  5. langroid/mcp/__init__.py +1 -0
  6. langroid/mcp/server/__init__.py +1 -0
  7. langroid/pydantic_v1/__init__.py +7 -0
  8. {langroid-0.59.0b2.dist-info → langroid-0.59.1.dist-info}/METADATA +4 -1
  9. {langroid-0.59.0b2.dist-info → langroid-0.59.1.dist-info}/RECORD +11 -47
  10. langroid/agent/base.py-e +0 -2216
  11. langroid/agent/chat_agent.py-e +0 -2086
  12. langroid/agent/chat_document.py-e +0 -513
  13. langroid/agent/openai_assistant.py-e +0 -882
  14. langroid/agent/special/arangodb/arangodb_agent.py-e +0 -648
  15. langroid/agent/special/lance_tools.py-e +0 -61
  16. langroid/agent/special/neo4j/neo4j_chat_agent.py-e +0 -430
  17. langroid/agent/task.py-e +0 -2418
  18. langroid/agent/tool_message.py-e +0 -400
  19. langroid/agent/tools/file_tools.py-e +0 -234
  20. langroid/agent/tools/mcp/fastmcp_client.py-e +0 -584
  21. langroid/agent/tools/orchestration.py-e +0 -301
  22. langroid/agent/tools/task_tool.py-e +0 -249
  23. langroid/agent/xml_tool_message.py-e +0 -392
  24. langroid/embedding_models/models.py-e +0 -563
  25. langroid/language_models/azure_openai.py-e +0 -134
  26. langroid/language_models/base.py-e +0 -812
  27. langroid/language_models/config.py-e +0 -18
  28. langroid/language_models/model_info.py-e +0 -483
  29. langroid/language_models/openai_gpt.py-e +0 -2280
  30. langroid/language_models/provider_params.py-e +0 -153
  31. langroid/mytypes.py-e +0 -132
  32. langroid/parsing/file_attachment.py-e +0 -246
  33. langroid/parsing/md_parser.py-e +0 -574
  34. langroid/parsing/parser.py-e +0 -410
  35. langroid/parsing/repo_loader.py-e +0 -812
  36. langroid/parsing/url_loader.py-e +0 -683
  37. langroid/parsing/urls.py-e +0 -279
  38. langroid/pydantic_v1/__init__.py-e +0 -36
  39. langroid/pydantic_v1/main.py-e +0 -11
  40. langroid/utils/configuration.py-e +0 -141
  41. langroid/utils/constants.py-e +0 -32
  42. langroid/utils/globals.py-e +0 -49
  43. langroid/utils/html_logger.py-e +0 -825
  44. langroid/utils/object_registry.py-e +0 -66
  45. langroid/utils/pydantic_utils.py-e +0 -602
  46. langroid/utils/types.py-e +0 -113
  47. langroid/vector_store/lancedb.py-e +0 -404
  48. langroid/vector_store/pineconedb.py-e +0 -427
  49. {langroid-0.59.0b2.dist-info → langroid-0.59.1.dist-info}/WHEEL +0 -0
  50. {langroid-0.59.0b2.dist-info → langroid-0.59.1.dist-info}/licenses/LICENSE +0 -0
@@ -11,16 +11,20 @@ Examples:
11
11
  """
12
12
 
13
13
  import re
14
- from typing import List, Union
14
+ from typing import Any, Dict, List, Optional, Union
15
15
 
16
16
  from .task import AgentEvent, DoneSequence, EventType
17
17
 
18
18
 
19
- def parse_done_sequence(sequence: Union[str, DoneSequence]) -> DoneSequence:
19
+ def parse_done_sequence(
20
+ sequence: Union[str, DoneSequence], tools_map: Optional[Dict[str, Any]] = None
21
+ ) -> DoneSequence:
20
22
  """Parse a string pattern or return existing DoneSequence unchanged.
21
23
 
22
24
  Args:
23
25
  sequence: Either a DoneSequence object or a string pattern to parse
26
+ tools_map: Optional dict mapping tool names to tool classes
27
+ (e.g., agent.llm_tools_map)
24
28
 
25
29
  Returns:
26
30
  DoneSequence object
@@ -34,21 +38,25 @@ def parse_done_sequence(sequence: Union[str, DoneSequence]) -> DoneSequence:
34
38
  if not isinstance(sequence, str):
35
39
  raise ValueError(f"Expected string or DoneSequence, got {type(sequence)}")
36
40
 
37
- events = _parse_string_pattern(sequence)
41
+ events = _parse_string_pattern(sequence, tools_map)
38
42
  return DoneSequence(events=events)
39
43
 
40
44
 
41
- def _parse_string_pattern(pattern: str) -> List[AgentEvent]:
45
+ def _parse_string_pattern(
46
+ pattern: str, tools_map: Optional[Dict[str, Any]] = None
47
+ ) -> List[AgentEvent]:
42
48
  """Parse a string pattern into a list of AgentEvent objects.
43
49
 
44
50
  Pattern format:
45
51
  - Single letter codes: T, A, L, U, N, C
46
- - Specific tools: T[tool_name]
52
+ - Specific tools: T[tool_name] or T[ToolClass]
47
53
  - Content match: C[regex_pattern]
48
54
  - Separated by commas, spaces allowed
49
55
 
50
56
  Args:
51
57
  pattern: String pattern to parse
58
+ tools_map: Optional dict mapping tool names to tool classes
59
+ (e.g., agent.llm_tools_map)
52
60
 
53
61
  Returns:
54
62
  List of AgentEvent objects
@@ -65,7 +73,7 @@ def _parse_string_pattern(pattern: str) -> List[AgentEvent]:
65
73
  if not part:
66
74
  continue
67
75
 
68
- event = _parse_event_token(part)
76
+ event = _parse_event_token(part, tools_map)
69
77
  events.append(event)
70
78
 
71
79
  if not events:
@@ -74,11 +82,15 @@ def _parse_string_pattern(pattern: str) -> List[AgentEvent]:
74
82
  return events
75
83
 
76
84
 
77
- def _parse_event_token(token: str) -> AgentEvent:
85
+ def _parse_event_token(
86
+ token: str, tools_map: Optional[Dict[str, Any]] = None
87
+ ) -> AgentEvent:
78
88
  """Parse a single event token into an AgentEvent.
79
89
 
80
90
  Args:
81
91
  token: Single event token (e.g., "T", "T[calc]", "C[quit|exit]")
92
+ tools_map: Optional dict mapping tool names to tool classes
93
+ (e.g., agent.llm_tools_map)
82
94
 
83
95
  Returns:
84
96
  AgentEvent object
@@ -94,8 +106,28 @@ def _parse_event_token(token: str) -> AgentEvent:
94
106
  param = bracket_match.group(2)
95
107
 
96
108
  if event_code == "T":
97
- # Specific tool: T[tool_name]
98
- return AgentEvent(event_type=EventType.SPECIFIC_TOOL, tool_name=param)
109
+ # Specific tool: T[tool_name] or T[ToolClass]
110
+ tool_class = None
111
+ tool_name = param
112
+
113
+ # First try direct lookup in tools_map by the param (tool name)
114
+ if tools_map and param in tools_map:
115
+ tool_class = tools_map[param]
116
+ tool_name = param
117
+ elif tools_map:
118
+ # If not found, loop through tools_map to find a tool class
119
+ # whose __name__ matches param
120
+ for name, cls in tools_map.items():
121
+ if hasattr(cls, "__name__") and cls.__name__ == param:
122
+ tool_class = cls
123
+ tool_name = name
124
+ break
125
+
126
+ return AgentEvent(
127
+ event_type=EventType.SPECIFIC_TOOL,
128
+ tool_name=tool_name,
129
+ tool_class=tool_class,
130
+ )
99
131
  elif event_code == "C":
100
132
  # Content match: C[regex_pattern]
101
133
  return AgentEvent(event_type=EventType.CONTENT_MATCH, content_pattern=param)
@@ -136,14 +168,17 @@ def _parse_event_token(token: str) -> AgentEvent:
136
168
 
137
169
 
138
170
  def parse_done_sequences(
139
- sequences: List[Union[str, DoneSequence]]
171
+ sequences: List[Union[str, DoneSequence]],
172
+ tools_map: Optional[Dict[str, Any]] = None,
140
173
  ) -> List[DoneSequence]:
141
174
  """Parse a list of mixed string patterns and DoneSequence objects.
142
175
 
143
176
  Args:
144
177
  sequences: List containing strings and/or DoneSequence objects
178
+ tools_map: Optional dict mapping tool names to tool classes
179
+ (e.g., agent.llm_tools_map)
145
180
 
146
181
  Returns:
147
182
  List of DoneSequence objects
148
183
  """
149
- return [parse_done_sequence(seq) for seq in sequences]
184
+ return [parse_done_sequence(seq, tools_map) for seq in sequences]
File without changes
langroid/agent/task.py CHANGED
@@ -90,6 +90,9 @@ class AgentEvent(BaseModel):
90
90
 
91
91
  event_type: EventType
92
92
  tool_name: Optional[str] = None # For SPECIFIC_TOOL
93
+ tool_class: Optional[Type[Any]] = (
94
+ None # For storing tool class references when using SPECIFIC_TOOL events
95
+ )
93
96
  content_pattern: Optional[str] = None # For CONTENT_MATCH (regex)
94
97
  responder: Optional[str] = None # Specific responder name
95
98
  # Optionally match only if the responder was specific entity/task
@@ -146,6 +149,7 @@ class TaskConfig(BaseModel):
146
149
  done_sequences (List[DoneSequence]): List of event sequences that trigger task
147
150
  completion. Task is done if ANY sequence matches the recent event history.
148
151
  Each sequence is checked against the message parent chain.
152
+ Tool classes can be referenced in sequences like "T[MyToolClass]".
149
153
 
150
154
  """
151
155
 
@@ -298,14 +302,8 @@ class Task:
298
302
  set_parent_agent=noop_fn,
299
303
  )
300
304
  self.config = config
301
- # Store parsed done sequences
305
+ # Store parsed done sequences (will be initialized after agent assignment)
302
306
  self._parsed_done_sequences: Optional[List[DoneSequence]] = None
303
- if self.config.done_sequences:
304
- from .done_sequence_parser import parse_done_sequences
305
-
306
- self._parsed_done_sequences = parse_done_sequences(
307
- self.config.done_sequences
308
- )
309
307
  # how to behave as a sub-task; can be overridden by `add_sub_task()`
310
308
  self.config_sub_task = copy.deepcopy(config)
311
309
  # counts of distinct pending messages in history,
@@ -340,6 +338,21 @@ class Task:
340
338
  self.agent.set_system_message(system_message)
341
339
  if user_message:
342
340
  self.agent.set_user_message(user_message)
341
+
342
+ # Initialize parsed done sequences now that self.agent is available
343
+ if self.config.done_sequences:
344
+ from .done_sequence_parser import parse_done_sequences
345
+
346
+ # Pass agent's llm_tools_map directly
347
+ tools_map = (
348
+ self.agent.llm_tools_map
349
+ if hasattr(self.agent, "llm_tools_map")
350
+ else None
351
+ )
352
+ self._parsed_done_sequences = parse_done_sequences(
353
+ self.config.done_sequences, tools_map
354
+ )
355
+
343
356
  self.max_cost: float = 0
344
357
  self.max_tokens: int = 0
345
358
  self.session_id: str = ""
@@ -2331,8 +2344,32 @@ class Task:
2331
2344
  if expected.event_type == EventType.SPECIFIC_TOOL:
2332
2345
  if actual.event_type != EventType.TOOL:
2333
2346
  return False
2347
+
2348
+ # First try tool_class matching if available
2349
+ if expected.tool_class is not None:
2350
+ # Handle case where actual.tool_class might be a class instance
2351
+ if hasattr(actual, "tool_class") and actual.tool_class is not None:
2352
+ # If actual.tool_class is an instance, get its class
2353
+ if isinstance(actual.tool_class, type):
2354
+ actual_class = actual.tool_class
2355
+ else:
2356
+ actual_class = type(actual.tool_class)
2357
+
2358
+ # Compare the tool classes
2359
+ if actual_class == expected.tool_class:
2360
+ return True
2361
+ # Also check if actual tool is an instance of expected class
2362
+ if not isinstance(actual.tool_class, type) and isinstance(
2363
+ actual.tool_class, expected.tool_class
2364
+ ):
2365
+ return True
2366
+
2367
+ # If tool_class comparison didn't match, continue to tool_name fallback
2368
+
2369
+ # Fall back to tool_name comparison for backwards compatibility
2334
2370
  if expected.tool_name and actual.tool_name != expected.tool_name:
2335
2371
  return False
2372
+
2336
2373
  elif actual.event_type != expected.event_type:
2337
2374
  return False
2338
2375
  if expected.sender and actual.sender != expected.sender:
@@ -36,6 +36,9 @@ class OpenAIChatModel(ModelName):
36
36
  GPT4_1 = "gpt-4.1"
37
37
  GPT4_1_MINI = "gpt-4.1-mini"
38
38
  GPT4_1_NANO = "gpt-4.1-nano"
39
+ GPT5 = "gpt-5"
40
+ GPT5_MINI = "gpt-5-mini"
41
+ GPT5_NANO = "gpt-5-nano"
39
42
 
40
43
 
41
44
  class OpenAICompletionModel(str, Enum):
@@ -305,6 +308,54 @@ MODEL_INFO: Dict[str, ModelInfo] = {
305
308
  has_tools=False,
306
309
  description="O3 Mini Reasoning LM",
307
310
  ),
311
+ OpenAIChatModel.GPT5.value: ModelInfo(
312
+ name=OpenAIChatModel.GPT5.value,
313
+ provider=ModelProvider.OPENAI,
314
+ context_length=400_000,
315
+ max_output_tokens=128_000,
316
+ input_cost_per_million=1.25,
317
+ cached_cost_per_million=0.125,
318
+ output_cost_per_million=10.00,
319
+ allows_streaming=False,
320
+ allows_system_message=False,
321
+ has_structured_output=True,
322
+ unsupported_params=["temperature", "stream"],
323
+ rename_params={"max_tokens": "max_completion_tokens"},
324
+ has_tools=False,
325
+ description="GPT-5",
326
+ ),
327
+ OpenAIChatModel.GPT5_MINI.value: ModelInfo(
328
+ name=OpenAIChatModel.GPT5_MINI.value,
329
+ provider=ModelProvider.OPENAI,
330
+ context_length=400_000,
331
+ max_output_tokens=128_000,
332
+ input_cost_per_million=0.25,
333
+ cached_cost_per_million=0.025,
334
+ output_cost_per_million=2.00,
335
+ allows_streaming=False,
336
+ allows_system_message=False,
337
+ has_structured_output=True,
338
+ unsupported_params=["temperature", "stream"],
339
+ rename_params={"max_tokens": "max_completion_tokens"},
340
+ has_tools=False,
341
+ description="GPT-5 Mini",
342
+ ),
343
+ OpenAIChatModel.GPT5_NANO.value: ModelInfo(
344
+ name=OpenAIChatModel.GPT5_NANO.value,
345
+ provider=ModelProvider.OPENAI,
346
+ context_length=400_000,
347
+ max_output_tokens=128_000,
348
+ input_cost_per_million=0.05,
349
+ cached_cost_per_million=0.005,
350
+ output_cost_per_million=0.40,
351
+ allows_streaming=False,
352
+ allows_system_message=False,
353
+ has_structured_output=True,
354
+ unsupported_params=["temperature", "stream"],
355
+ rename_params={"max_tokens": "max_completion_tokens"},
356
+ has_tools=False,
357
+ description="GPT-5 Nano",
358
+ ),
308
359
  # Anthropic Models
309
360
  AnthropicModel.CLAUDE_3_5_SONNET.value: ModelInfo(
310
361
  name=AnthropicModel.CLAUDE_3_5_SONNET.value,
@@ -0,0 +1 @@
1
+ """MCP (Model Context Protocol) integration for Langroid."""
@@ -0,0 +1 @@
1
+ """MCP server implementation for Langroid."""
@@ -40,6 +40,13 @@ logger.warning(
40
40
  # This allows existing code to continue working if it's already v2-compatible
41
41
  from pydantic import * # noqa: F403, F401
42
42
 
43
+ # BaseSettings has moved in v2, import it explicitly
44
+ try:
45
+ from pydantic_settings import BaseSettings # noqa: F401
46
+ except ImportError:
47
+ # Fallback for older pydantic versions
48
+ from pydantic import BaseSettings # type: ignore[no-redef] # noqa: F401
49
+
43
50
  # Explicitly export all items for mypy
44
51
  __all__ = [
45
52
  "BaseModel",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langroid
3
- Version: 0.59.0b2
3
+ Version: 0.59.1
4
4
  Summary: Harness LLMs with Multi-Agent Programming
5
5
  Author-email: Prasad Chalasani <pchalasani@gmail.com>
6
6
  License: MIT
@@ -347,6 +347,9 @@ teacher_task.run()
347
347
  <details>
348
348
  <summary> <b>Click to expand</b></summary>
349
349
 
350
+ - **Aug 2025:**
351
+ - [0.59.0](https://github.com/langroid/langroid/releases/tag/0.59.0) Complete Pydantic V2 Migration -
352
+ 5-50x faster validation, modern Python patterns, 100% backward compatible.
350
353
  - **Jul 2025:**
351
354
  - [0.58.0](https://github.com/langroid/langroid/releases/tag/0.58.0) Crawl4AI integration -
352
355
  browser-based web crawling with Playwright for JavaScript-heavy sites, no API key required (thank you @abab-dev!).
@@ -1,38 +1,29 @@
1
1
  langroid/__init__.py,sha256=z_fCOLQJPOw3LLRPBlFB5-2HyCjpPgQa4m4iY5Fvb8Y,1800
2
2
  langroid/exceptions.py,sha256=9Kroide4tNeEbH-cw-2KWeATcas0NFW0bGE0yrFznmE,3038
3
3
  langroid/mytypes.py,sha256=UfPfDhA0fvjSr4xJn-3EbnTZ-yNUilag4mjepnXfnQo,4271
4
- langroid/mytypes.py-e,sha256=vaN7TJ6j4noYHEn4whoeBSofHPp1EJZrOMNJh5KG7Aw,4006
5
4
  langroid/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
5
  langroid/agent/__init__.py,sha256=ll0Cubd2DZ-fsCMl7e10hf9ZjFGKzphfBco396IKITY,786
7
6
  langroid/agent/base.py,sha256=mP57z3QiOm8Y7tG_OHpyvcsWmoq-4WSrHxAiiwgtsX8,87307
8
- langroid/agent/base.py-e,sha256=pLR8DNEC030jDAyGAv6BaRltvGD30Rk6ip4GckfHx_c,86329
9
7
  langroid/agent/batch.py,sha256=wpE9RqCNDVDhAXkCB7wEqfCIEAi6qKcrhaZ-Zr9T4C0,21375
10
8
  langroid/agent/chat_agent.py,sha256=wTR9PPbUZb4utOhKvAFebTOVkzJrySbhRdrrwqiceXg,89944
11
- langroid/agent/chat_agent.py-e,sha256=3TujzioxCNxfhCTz7jQyf4Cie4GkbcEIfysS_LvW8Ow,89129
12
9
  langroid/agent/chat_document.py,sha256=bgNGfgyvTqPqUV8093IYRJ7jLNlOEctEvjnwdVUApaI,19748
13
- langroid/agent/chat_document.py-e,sha256=YEZOvqWAP03bkU__I_p0wfAWFoKfIMrMrgyXTRuw89g,19759
14
- langroid/agent/done_sequence_parser.py,sha256=oUPzQCkkAo-5qos3ndSV47Lre7O_LoGWwTybjE9sCwc,4381
10
+ langroid/agent/done_sequence_parser.py,sha256=99UZoLknQx0AZzX-hGp03MfUxHomrMTLcyekpC25JoU,5845
15
11
  langroid/agent/openai_assistant.py,sha256=v__MWg0jhEOQVplKh1urU2Dq4VZonHV0G3CuGiHFw7o,34386
16
- langroid/agent/openai_assistant.py-e,sha256=kh76OTdc4AxsazIC8d0k2LaXFnNOmXqt3vJ0qo6er4I,34357
17
- langroid/agent/task.py,sha256=5Kmvp-SyiB5k8KgfFwPVmmZ0IQ4WAVJSLcUhEdPPsd8,103325
18
- langroid/agent/task.py-e,sha256=gpYV-HK6rlHhZjCtYhh5-kuJO0FDCWBV4CqXeRspyTw,103359
12
+ langroid/agent/task.py,sha256=sY0PwqlMb3OXTMxEVoiBxDqZcyqKWTVg721iJbUqbxU,105021
19
13
  langroid/agent/tool_message.py,sha256=BPygVQPDAJ5xFDQopHqBx_2DixA3m7mwDwgWMiZWYeM,15327
20
- langroid/agent/tool_message.py-e,sha256=UCmhWAgQgTxq_tZnn9J6Hg241uCUvagi6uWTvH9M_kw,14948
21
14
  langroid/agent/xml_tool_message.py,sha256=b5zyYuQS8bduVNoe-jOjy7iLB5VOMvbGfD_A5Zp7ans,17730
22
- langroid/agent/xml_tool_message.py-e,sha256=jzmsnnzFvhIy6OlfS4abAeu_jtECymaTcUyvCS2SIU8,15501
23
15
  langroid/agent/callbacks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
16
  langroid/agent/callbacks/chainlit.py,sha256=nRCTkYDgTiBPP8Cg2ct8dLUBDevLMO4w0jv0GfQQq2U,20960
25
17
  langroid/agent/special/__init__.py,sha256=gik_Xtm_zV7U9s30Mn8UX3Gyuy4jTjQe9zjiE3HWmEo,1273
26
18
  langroid/agent/special/doc_chat_agent.py,sha256=tUr4qex3OjqF32zeyvTOnNgUP1wdpe5hoZ8bH1IisJQ,68962
19
+ langroid/agent/special/doc_chat_task.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
20
  langroid/agent/special/lance_doc_chat_agent.py,sha256=6pIqi2DF-MvYYN3-blsdUgulYnOBTl7I21T7wPAt1zM,10413
28
21
  langroid/agent/special/lance_tools.py,sha256=3j7Hsyf3-H9ccTXjyNOcnMnpJ7r1lXnqDLSMQgFa7ZI,2114
29
- langroid/agent/special/lance_tools.py-e,sha256=uodIhfcXmhbCoyKY-VVWbqex1QrODiVqHCcyQ7wTgjQ,2093
30
22
  langroid/agent/special/relevance_extractor_agent.py,sha256=Wa65UReGaNIB5MkXugzc4X9ci3c21-PwDrN7zNX-iVQ,4801
31
23
  langroid/agent/special/retriever_agent.py,sha256=o2UfqiCGME0t85SZ6qjK041_WZYqXSuV1SeH_3KtVuc,1931
32
24
  langroid/agent/special/table_chat_agent.py,sha256=T2YMFpOnW4YV-QXvB34MbaBGXBPiWeCiqO1bVKFykbg,10943
33
25
  langroid/agent/special/arangodb/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
26
  langroid/agent/special/arangodb/arangodb_agent.py,sha256=_5LsM3otXJGIImdkgHlsuptFpjzVWsiNjlU9tIbOCHo,25631
35
- langroid/agent/special/arangodb/arangodb_agent.py-e,sha256=vOj689GiN3LmrcrzCPxCkwMq2r1M1yQw6nW43Fw9E3w,25603
36
27
  langroid/agent/special/arangodb/system_messages.py,sha256=udwfLleTdyz_DuxHuoiv2wHEZoAPBPbwdF_ivjIfP5c,6867
37
28
  langroid/agent/special/arangodb/tools.py,sha256=Mc8wQCnNDFu5lmf-N2jX2dB_iEqXxpyStlM_cxbxgWU,3605
38
29
  langroid/agent/special/arangodb/utils.py,sha256=LIevtkayIdVVXyj3jlbKH2WgdZTtH5-JLgbXOHC7uxs,1420
@@ -43,7 +34,6 @@ langroid/agent/special/lance_rag/query_planner_agent.py,sha256=FOtcGh_L6uJD8Bf-D
43
34
  langroid/agent/special/neo4j/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
35
  langroid/agent/special/neo4j/csv_kg_chat.py,sha256=dRsAgMBa1H_EMI2YYgJR2Xyv1D7e4o3G9M64mTewq_c,6409
45
36
  langroid/agent/special/neo4j/neo4j_chat_agent.py,sha256=MyNE-6XWJZ00ohRK14Dj6hycf0PUFRY-YDmJ5lTCKy0,16566
46
- langroid/agent/special/neo4j/neo4j_chat_agent.py-e,sha256=aGWGXXXuRvB6gZM6spRPx4-jt5DOxtrDABuVXgJM-Wg,16551
47
37
  langroid/agent/special/neo4j/system_messages.py,sha256=m2jsVayey6E_88F5B_gW2WbWKBJvIeDUoVCRBbNs97o,4522
48
38
  langroid/agent/special/neo4j/tools.py,sha256=Vw3HvtDfG2c4_bUHgt4_ZbJq48lpIQstbjjwhh1BjrQ,905
49
39
  langroid/agent/special/sql/__init__.py,sha256=mWfmm1QpXCezpFOS2eI57M0L_Ok3q5_ukG8tXBnBrEA,319
@@ -57,29 +47,24 @@ langroid/agent/tools/__init__.py,sha256=IMgCte-_ZIvCkozGQmvMqxIw7_nKLKzD78ccJL1b
57
47
  langroid/agent/tools/duckduckgo_search_tool.py,sha256=NhsCaGZkdv28nja7yveAhSK_w6l_Ftym8agbrdzqgfo,1935
58
48
  langroid/agent/tools/exa_search_tool.py,sha256=qxDs6vIiUtFyfX6gmS-PxoCXes-55in3ef5AkUQhiM0,2469
59
49
  langroid/agent/tools/file_tools.py,sha256=6XHfbQkexdHcB80Hupc1ITLeej8z2TSLXJXnfiwpqG8,7325
60
- langroid/agent/tools/file_tools.py-e,sha256=ItAp_tnO_iOTuDOqmfSx9ziH2zqZolzUzu78gdXX_yQ,7280
61
50
  langroid/agent/tools/google_search_tool.py,sha256=y7b-3FtgXf0lfF4AYxrZ3K5pH2dhidvibUOAGBE--WI,1456
62
51
  langroid/agent/tools/metaphor_search_tool.py,sha256=ccyEhkShH5MxW6-sx1n0BLpD_GForQddS_nNvBZ67Ik,2561
63
52
  langroid/agent/tools/orchestration.py,sha256=KgKycDFQck98oU4c143Zwh1l0KkpHJ60iHv1jLAOn9A,11457
64
- langroid/agent/tools/orchestration.py-e,sha256=YpEFQlAqMedz0m3qJRim0-NYGd_KvdC2XvYGJ17dKGQ,11211
65
53
  langroid/agent/tools/recipient_tool.py,sha256=-fLoXlQ00PjIejMEKPAawd6wAcIcd2zw4M0P5Sj4exs,9854
66
54
  langroid/agent/tools/retrieval_tool.py,sha256=zcAV20PP_6VzSd-UE-IJcabaBseFL_QNz59Bnig8-lE,946
67
55
  langroid/agent/tools/rewind_tool.py,sha256=XAXL3BpNhCmBGYq_qi_sZfHJuIw7NY2jp4wnojJ7WRs,5606
68
56
  langroid/agent/tools/segment_extract_tool.py,sha256=__srZ_VGYLVOdPrITUM8S0HpmX4q7r5FHWMDdHdEv8w,1440
69
57
  langroid/agent/tools/task_tool.py,sha256=nn9g8fCaKtfTi6Gx3aa2joTg486VdTGT1s5geXuaViw,10119
70
- langroid/agent/tools/task_tool.py-e,sha256=BDyzPS3vK8JcQwhL7VNV6ed1JLmmIyMUFFsZqJ3xtTE,9674
71
58
  langroid/agent/tools/tavily_search_tool.py,sha256=soI-j0HdgVQLf09wRQScaEK4b5RpAX9C4cwOivRFWWI,1903
72
59
  langroid/agent/tools/mcp/__init__.py,sha256=DJNM0VeFnFS3pJKCyFGggT8JVjVu0rBzrGzasT1HaSM,387
73
60
  langroid/agent/tools/mcp/decorators.py,sha256=h7dterhsmvWJ8q4mp_OopmuG2DF71ty8cZwOyzdDZuk,1127
74
61
  langroid/agent/tools/mcp/fastmcp_client.py,sha256=qqw05j8U89505HO9weXeOIK5aWgIn8sv67-l6_b4ZEU,22754
75
- langroid/agent/tools/mcp/fastmcp_client.py-e,sha256=KTvAtJjRyarzTLIlADyQPBHlpWHTc8Ivm-5zF7IZAa8,22076
76
62
  langroid/cachedb/__init__.py,sha256=G2KyNnk3Qkhv7OKyxTOnpsxfDycx3NY0O_wXkJlalNY,96
77
63
  langroid/cachedb/base.py,sha256=b104RrL1Og7K2mWFy3sWc4Er3z9zWMtY9dxQVhwnm2E,1351
78
64
  langroid/cachedb/redis_cachedb.py,sha256=7kgnbf4b5CKsCrlL97mHWKvdvlLt8zgn7lc528jEpiE,5141
79
65
  langroid/embedding_models/__init__.py,sha256=KyYxR3jDFUCfYjSuCL86qjAmrq6mXXjOT4lFNOKVj6Y,955
80
66
  langroid/embedding_models/base.py,sha256=F65Vlj3RugkcntWOoKm-0b7h4T_Les6m4e7Qto_-Otg,2564
81
67
  langroid/embedding_models/models.py,sha256=Cwlq3ZsXXRblh7v0iABJ1QDZorJ2l3Hyks-T9g4JtnE,20649
82
- langroid/embedding_models/models.py-e,sha256=oqVNSujA2569PsVk5Bz6Pg5pkYlTe-Th29txTV__nrg,20647
83
68
  langroid/embedding_models/remote_embeds.py,sha256=6_kjXByVbqhY9cGwl9R83ZcYC2km-nGieNNAo1McHaY,5151
84
69
  langroid/embedding_models/protoc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
85
70
  langroid/embedding_models/protoc/embeddings.proto,sha256=_O-SgFpTaylQeOTgSpxhEJ7CUw7PeCQQJLaPqpPYKJg,321
@@ -88,76 +73,57 @@ langroid/embedding_models/protoc/embeddings_pb2.pyi,sha256=UkNy7BrNsmQm0vLb3NtGX
88
73
  langroid/embedding_models/protoc/embeddings_pb2_grpc.py,sha256=9dYQqkW3JPyBpSEjeGXTNpSqAkC-6FPtBHyteVob2Y8,2452
89
74
  langroid/language_models/__init__.py,sha256=3aD2qC1lz8v12HX4B-dilv27gNxYdGdeu1QvDlkqqHs,1095
90
75
  langroid/language_models/azure_openai.py,sha256=V7a4Y87fQGQ43_aNwuVGj5KQUe8MV2cjZQB5RLQOHHA,5094
91
- langroid/language_models/azure_openai.py-e,sha256=HXQlN9xtKpv9_6OJRYjZPnVGY8YmXjPytvQr1g6T0M0,5069
92
76
  langroid/language_models/base.py,sha256=uRi-XtQhsEBN702_lGepxlNQ0e8gaPgaXjULYn2r8ww,28595
93
- langroid/language_models/base.py-e,sha256=_MQ_MkwQSyPH7j5IQCfJMw9eAEvnnGgp_9_OBZRHJRE,28627
94
77
  langroid/language_models/client_cache.py,sha256=c8tAUTKxbd-CVGRy9WPYhI1pLtarFWWwX6-qm4ZXaqk,9399
95
78
  langroid/language_models/config.py,sha256=rhEZ9Wwq42q1uW_-oRFbilJhIw1vYlTvYqIk_7pHiSY,397
96
- langroid/language_models/config.py-e,sha256=VGgsU-idOpcRqZE6gsGYQYk060hNhlI_UXrYl_A1ggI,402
97
79
  langroid/language_models/mock_lm.py,sha256=tA9JpURznsMZ59iRhFYMmaYQzAc0D0BT-PiJIV58sAk,4079
98
- langroid/language_models/model_info.py,sha256=n3Lk0asScD3IV8NOMw9gvazMKqQIyY0hLcrK3yJAxNs,17397
99
- langroid/language_models/model_info.py-e,sha256=kgqYB4AxEcJrTPke8LcbND8GKYJpdTOeYhtEbL9ClAw,17109
80
+ langroid/language_models/model_info.py,sha256=89iYrl-BsWxn-gyVp9ZhoS7h3aOyaZGlp5gPK2IxgDM,19266
100
81
  langroid/language_models/openai_gpt.py,sha256=K0SSRQYDBb_2ku9TPxGBStsimxBKw-EmmySuagqfgSs,94072
101
- langroid/language_models/openai_gpt.py-e,sha256=A5mvI4qMqo8tlZJj8DM3FaVc9xhIdYwTNKRE0d_aDvQ,92688
102
82
  langroid/language_models/provider_params.py,sha256=upG4cBrX8fcvAo1g7fcsv-rBbsfypIqcDRRV9m1hohU,4846
103
- langroid/language_models/provider_params.py-e,sha256=cPlAKVHlLHQOMzY6VIcQO8QSV5hFxiqXqNtTxxZMinA,4842
104
83
  langroid/language_models/utils.py,sha256=n55Oe2_V_4VNGhytvPWLYC-0tFS07RTjN83KWl-p_MI,6032
105
84
  langroid/language_models/prompt_formatter/__init__.py,sha256=2-5cdE24XoFDhifOLl8yiscohil1ogbP1ECkYdBlBsk,372
106
85
  langroid/language_models/prompt_formatter/base.py,sha256=eDS1sgRNZVnoajwV_ZIha6cba5Dt8xjgzdRbPITwx3Q,1221
107
86
  langroid/language_models/prompt_formatter/hf_formatter.py,sha256=PVJppmjRvD-2DF-XNC6mE05vTZ9wbu37SmXwZBQhad0,5055
108
87
  langroid/language_models/prompt_formatter/llama2_formatter.py,sha256=YdcO88qyBeuMENVIVvVqSYuEpvYSTndUe_jd6hVTko4,2899
88
+ langroid/mcp/__init__.py,sha256=HGtfHjcLVruCFJavOBAmVpk5u2h5UwzgqxOiOYIjXj0,61
89
+ langroid/mcp/server/__init__.py,sha256=HIju6Y3npEAC6lx8svT3q_vrMN1vT8fGUTzChBMIM4U,46
109
90
  langroid/parsing/__init__.py,sha256=2oUWJJAxIavq9Wtw5RGlkXLq3GF3zgXeVLLW4j7yeb8,1138
110
91
  langroid/parsing/agent_chats.py,sha256=sbZRV9ujdM5QXvvuHVjIi2ysYSYlap-uqfMMUKulrW0,1068
111
92
  langroid/parsing/code_parser.py,sha256=ZxKvbO3_VGOa0HA9Ybh26HGF6i2pD_zWsrLvy5oYxSs,3793
112
93
  langroid/parsing/document_parser.py,sha256=cUcp4JKS_LpsjX7OqnGBhHorDHx7FG5pvKGjRBkQoMw,57685
113
94
  langroid/parsing/file_attachment.py,sha256=f-MBRCI58XsCqJDH2HwTWwTQxLbYsDrOLgjrM1kw3XE,7350
114
- langroid/parsing/file_attachment.py-e,sha256=f-MBRCI58XsCqJDH2HwTWwTQxLbYsDrOLgjrM1kw3XE,7350
115
95
  langroid/parsing/md_parser.py,sha256=8LX9RDRWV1dZSYa-uBD8-whC_L6UYco-AQUxIuviqEk,21656
116
- langroid/parsing/md_parser.py-e,sha256=Jl7uQ9t6dR8Ka-j-FRW6TpaoA_FK_HDlEp8bbEQ1eU8,21328
117
96
  langroid/parsing/para_sentence_split.py,sha256=AJBzZojP3zpB-_IMiiHismhqcvkrVBQ3ZINoQyx_bE4,2000
118
97
  langroid/parsing/parse_json.py,sha256=aADo38bAHQhC8on4aWZZzVzSDy-dK35vRLZsFI2ewh8,4756
119
98
  langroid/parsing/parser.py,sha256=IcwmVLlAae5LiKZ9OFhrnVOoHxcnsV7feFSHQiFfoi4,16112
120
- langroid/parsing/parser.py-e,sha256=MgCioYSKcX4HkPfUSlzG6Q_8L121-DmwsLeV9x13xoE,15737
121
99
  langroid/parsing/pdf_utils.py,sha256=QogxU_B1N3WSLyZ9PEcJDaJoZShKs7CPQRVyF1V2DiE,3143
122
100
  langroid/parsing/repo_loader.py,sha256=oB0TNifWCaqvlj7C0U76C4NZT7b94BbGkVX_-mrcH_4,30220
123
- langroid/parsing/repo_loader.py-e,sha256=qFpHm054WtpRh_hj46h7XTpy5GqkcDJifXln8EBj9ds,30220
124
101
  langroid/parsing/routing.py,sha256=-FcnlqldzL4ZoxuDwXjQPNHgBe9F9-F4R6q7b_z9CvI,1232
125
102
  langroid/parsing/search.py,sha256=2vs09KRyA12OQAoxrThyEbuekHtxtBicQohJf7d3nOw,9820
126
103
  langroid/parsing/spider.py,sha256=hAVM6wxh1pQ0EN4tI5wMBtAjIk0T-xnpi-ZUzWybhos,3258
127
104
  langroid/parsing/table_loader.py,sha256=qNM4obT_0Y4tjrxNBCNUYjKQ9oETCZ7FbolKBTcz-GM,3410
128
105
  langroid/parsing/url_loader.py,sha256=q7Sxjq94xhWvTioCru7ndf3rM_tGkiTyGcSkxdfZjxQ,24028
129
- langroid/parsing/url_loader.py-e,sha256=JW416W6-BoxNviWvOF24WAILyA0V6b50sOqCN0in3cU,25190
130
106
  langroid/parsing/urls.py,sha256=6PIj0W8QpQAx7L1m4hYd2cH2yq9dupCJzCp1HBfDLO0,8169
131
- langroid/parsing/urls.py-e,sha256=C-y206RgCqxoJ099dcklWvyV4Nr1U5K22-T02pN7f5c,8069
132
107
  langroid/parsing/utils.py,sha256=WwqzOhbQRlorbVvddDIZKv9b1KqZCBDm955lgIHDXRw,12828
133
108
  langroid/parsing/web_search.py,sha256=atk8wIpOfiGTvW8yL_26TvjvyY2zD24xIHIi0QjEklI,8599
134
109
  langroid/prompts/__init__.py,sha256=RW11vK6jiLPuaUh4GpeFvstti73gkm8_rDMtrbo2YsU,142
135
110
  langroid/prompts/dialog.py,sha256=SpfiSyofSgy2pwD1YboHR_yHO3LEEMbv6j2sm874jKo,331
136
111
  langroid/prompts/prompts_config.py,sha256=U4TxNld-ulVzWMK9joSVH852qfZtvF310eIG_mSGxmg,140
137
112
  langroid/prompts/templates.py,sha256=VV84HVf_amOx6xdWQyIsN9i5dNfrbl8rsfFp6hyfOss,6371
138
- langroid/pydantic_v1/__init__.py,sha256=hD6l5R_hESX5ZMemG-IA21YqbKnV8jj9DdtIB07H7aI,2945
139
- langroid/pydantic_v1/__init__.py-e,sha256=rfgQ78ZCiaN5A9P2tvAKGuzspGJdDeGP8czONYsdz4U,1008
113
+ langroid/pydantic_v1/__init__.py,sha256=f619eSnO8we5vkY0YEj6VKtDCtXnY6jaXD1hRWXQ_tY,3205
140
114
  langroid/pydantic_v1/main.py,sha256=OPsAisRqkzWd4hvlvJqPH-goMWIyModK2AQJOTxThQg,362
141
- langroid/pydantic_v1/main.py-e,sha256=Qh6qp5aqAIZxPprdHI3ys2kk3jHPQKBMIcr-zKmTomo,326
142
115
  langroid/utils/__init__.py,sha256=Sruos2tB4G7Tn0vlblvYlX9PEGR0plI2uE0PJ4d_EC4,353
143
116
  langroid/utils/configuration.py,sha256=7j3LR4vPiOPuu4BD8-uy0T8Um2qpx--RD6PUlF-K60Q,4886
144
- langroid/utils/configuration.py-e,sha256=Fv8lCN7ziVtDj7of7-A97lkURNmJnFMPyopEtnIaGTQ,4909
145
117
  langroid/utils/constants.py,sha256=yOqhrb9L5dmRL3Z1V33pRn-2sUfubCdeBi7n0Y_lxMs,1063
146
- langroid/utils/constants.py-e,sha256=yOqhrb9L5dmRL3Z1V33pRn-2sUfubCdeBi7n0Y_lxMs,1063
147
118
  langroid/utils/git_utils.py,sha256=WnflJ3R3owhlD0LNdSJakcKhExcEehE1UW5jYVQl8JY,7955
148
119
  langroid/utils/globals.py,sha256=-t0deiWdBbfgm9FA2uPWU5T6ydZ4f7uajahGdOSEpd4,2064
149
- langroid/utils/globals.py-e,sha256=VkTHhlqSz86oOPq65sjul0XU8I52UNaFC5vwybMQ74w,1343
150
120
  langroid/utils/html_logger.py,sha256=I1x2E51D-Q-4WZBAy5LtItV_6ESFzPEHMRb9QVx3gH8,27018
151
- langroid/utils/html_logger.py-e,sha256=sgJSpJ805aGSoJl8JrYtucj4AL7f161-nhT-tLs--0w,27017
152
121
  langroid/utils/logging.py,sha256=RgfmWRWe178rQSd0gFrrSizHzD0mG-SA5FR92kNZ9Gk,7280
153
122
  langroid/utils/object_registry.py,sha256=414nUXie88D6YSIW5o53bEEgsLJHqFCbbFTMlCNRiqs,2088
154
- langroid/utils/object_registry.py-e,sha256=414nUXie88D6YSIW5o53bEEgsLJHqFCbbFTMlCNRiqs,2088
155
123
  langroid/utils/pandas_utils.py,sha256=IaEtdy4IkIh6fjc7XXpczwjhgWodoGmJX50LxoYSEeI,7280
156
124
  langroid/utils/pydantic_utils.py,sha256=alz7txJqSdiZC643b6fYrysHpggSfpZW_DFgggeKNqI,22070
157
- langroid/utils/pydantic_utils.py-e,sha256=FY7KN74YXMRcYdiGUroJDWAKuuzZ4ZF2Dcufzq5XLos,20865
158
125
  langroid/utils/system.py,sha256=q3QJtTSapIwNe8MMhGEM03wgxPLmZiD47_sF1pKx53I,8472
159
126
  langroid/utils/types.py,sha256=i9iQOx5HHtHIft578iR5L1yOJQcr9XvASZqZluAdXJA,2991
160
- langroid/utils/types.py-e,sha256=i9iQOx5HHtHIft578iR5L1yOJQcr9XvASZqZluAdXJA,2991
161
127
  langroid/utils/algorithms/__init__.py,sha256=WylYoZymA0fnzpB4vrsH_0n7WsoLhmuZq8qxsOCjUpM,41
162
128
  langroid/utils/algorithms/graph.py,sha256=JbdpPnUOhw4-D6O7ou101JLA3xPCD0Lr3qaPoFCaRfo,2866
163
129
  langroid/utils/output/__init__.py,sha256=7P0f--4IZneNsTxXY5fd6d6iW-CeVe-KSsl-87sbBPc,340
@@ -168,14 +134,12 @@ langroid/vector_store/__init__.py,sha256=8ktJUVsVUoc7FMmkUFpFBZu7VMWUqQY9zpm4kEJ
168
134
  langroid/vector_store/base.py,sha256=27DmKvYNQInD5xDTRFIUgHl4vOYt5TQzAGbk_0EqGtI,15064
169
135
  langroid/vector_store/chromadb.py,sha256=p9mEqJwO2BrL2jSSXfa23kCPlPOwWpF3xJYd5zoWw_c,8661
170
136
  langroid/vector_store/lancedb.py,sha256=8rXonTIGgwQU2R6Zy2zcWXR-iI7cdGf-ZwasjGFAziw,14761
171
- langroid/vector_store/lancedb.py-e,sha256=oHlM3JAEiLh4g5rs5wLkosKvS4cfUdLoW-0m35GmOlU,14688
172
137
  langroid/vector_store/meilisearch.py,sha256=97rvoVR720mbNOVCbXcnw9GYjiyLI9RrrT10P7giabw,11674
173
138
  langroid/vector_store/pineconedb.py,sha256=7V0Bkt4ZrOR3V90tdXvdFmyNGuww7SFdyPq7-_GG5W0,14988
174
- langroid/vector_store/pineconedb.py-e,sha256=LSC507hYKu6D3HZa3NnSQT-fmdGnUfRiz05js_5Trwo,14988
175
139
  langroid/vector_store/postgres.py,sha256=TY_VshimwFZglYgKYm7Qn1F-dCSL8GsXRTgmh7VTe9c,16110
176
140
  langroid/vector_store/qdrantdb.py,sha256=mqxMOrcLAQpl0opuL8vXhdIt6ppv2zYyAvddHZoEW0Y,19184
177
141
  langroid/vector_store/weaviatedb.py,sha256=BS95bxVKNYfQc9VPb85a1HlcgnXfAkgMzjydnjCgRHc,11853
178
- langroid-0.59.0b2.dist-info/METADATA,sha256=zaJTOCPV4pF4YNMBREq9qY01sH76Q3HUw9y0PdkIejs,66319
179
- langroid-0.59.0b2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
180
- langroid-0.59.0b2.dist-info/licenses/LICENSE,sha256=EgVbvA6VSYgUlvC3RvPKehSg7MFaxWDsFuzLOsPPfJg,1065
181
- langroid-0.59.0b2.dist-info/RECORD,,
142
+ langroid-0.59.1.dist-info/METADATA,sha256=IZz1_PjIS9l4UVdBDz6cXfFqszMI8uzp4lbzV0QZwDs,66517
143
+ langroid-0.59.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
144
+ langroid-0.59.1.dist-info/licenses/LICENSE,sha256=EgVbvA6VSYgUlvC3RvPKehSg7MFaxWDsFuzLOsPPfJg,1065
145
+ langroid-0.59.1.dist-info/RECORD,,