langchain-dev-utils 1.3.1__py3-none-any.whl → 1.3.2__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.
- langchain_dev_utils/__init__.py +1 -1
- langchain_dev_utils/agents/middleware/__init__.py +3 -12
- langchain_dev_utils/agents/middleware/handoffs.py +74 -23
- langchain_dev_utils/agents/middleware/plan.py +29 -45
- langchain_dev_utils/chat_models/adapters/openai_compatible.py +7 -14
- {langchain_dev_utils-1.3.1.dist-info → langchain_dev_utils-1.3.2.dist-info}/METADATA +1 -1
- {langchain_dev_utils-1.3.1.dist-info → langchain_dev_utils-1.3.2.dist-info}/RECORD +9 -9
- {langchain_dev_utils-1.3.1.dist-info → langchain_dev_utils-1.3.2.dist-info}/WHEEL +0 -0
- {langchain_dev_utils-1.3.1.dist-info → langchain_dev_utils-1.3.2.dist-info}/licenses/LICENSE +0 -0
langchain_dev_utils/__init__.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "1.3.
|
|
1
|
+
__version__ = "1.3.2"
|
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
from .format_prompt import format_prompt
|
|
2
|
-
from .handoffs import
|
|
2
|
+
from .handoffs import HandoffAgentMiddleware
|
|
3
3
|
from .model_fallback import ModelFallbackMiddleware
|
|
4
4
|
from .model_router import ModelRouterMiddleware
|
|
5
|
-
from .plan import
|
|
6
|
-
PlanMiddleware,
|
|
7
|
-
create_finish_sub_plan_tool,
|
|
8
|
-
create_read_plan_tool,
|
|
9
|
-
create_write_plan_tool,
|
|
10
|
-
)
|
|
5
|
+
from .plan import PlanMiddleware
|
|
11
6
|
from .summarization import SummarizationMiddleware
|
|
12
7
|
from .tool_call_repair import ToolCallRepairMiddleware
|
|
13
8
|
from .tool_emulator import LLMToolEmulator
|
|
@@ -17,14 +12,10 @@ __all__ = [
|
|
|
17
12
|
"SummarizationMiddleware",
|
|
18
13
|
"LLMToolSelectorMiddleware",
|
|
19
14
|
"PlanMiddleware",
|
|
20
|
-
"create_finish_sub_plan_tool",
|
|
21
|
-
"create_read_plan_tool",
|
|
22
|
-
"create_write_plan_tool",
|
|
23
15
|
"ModelFallbackMiddleware",
|
|
24
16
|
"LLMToolEmulator",
|
|
25
17
|
"ModelRouterMiddleware",
|
|
26
18
|
"ToolCallRepairMiddleware",
|
|
27
19
|
"format_prompt",
|
|
28
|
-
"
|
|
29
|
-
"HandoffsAgentMiddleware",
|
|
20
|
+
"HandoffAgentMiddleware",
|
|
30
21
|
]
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Any, Awaitable, Callable
|
|
1
|
+
from typing import Any, Awaitable, Callable, Literal
|
|
2
2
|
|
|
3
3
|
from langchain.agents import AgentState
|
|
4
4
|
from langchain.agents.middleware import AgentMiddleware, ModelRequest, ModelResponse
|
|
@@ -19,35 +19,24 @@ class MultiAgentState(AgentState):
|
|
|
19
19
|
class AgentConfig(TypedDict):
|
|
20
20
|
model: NotRequired[str | BaseChatModel]
|
|
21
21
|
prompt: str | SystemMessage
|
|
22
|
-
tools: list[BaseTool | dict[str, Any]]
|
|
22
|
+
tools: NotRequired[list[BaseTool | dict[str, Any]]]
|
|
23
23
|
default: NotRequired[bool]
|
|
24
|
+
handoffs: list[str] | Literal["all"]
|
|
24
25
|
|
|
25
26
|
|
|
26
|
-
def
|
|
27
|
-
agent_name: str,
|
|
28
|
-
tool_name: Optional[str] = None,
|
|
29
|
-
tool_description: Optional[str] = None,
|
|
30
|
-
):
|
|
27
|
+
def _create_handoffs_tool(agent_name: str, tool_description: Optional[str] = None):
|
|
31
28
|
"""Create a tool for handoffs to a specified agent.
|
|
32
29
|
|
|
33
30
|
Args:
|
|
34
31
|
agent_name (str): The name of the agent to transfer to.
|
|
35
|
-
tool_name (Optional[str], optional): The name of the tool. Defaults to None.
|
|
36
|
-
tool_description (Optional[str], optional): The description of the tool. Defaults to None.
|
|
37
32
|
|
|
38
33
|
Returns:
|
|
39
34
|
BaseTool: A tool instance for handoffs to the specified agent.
|
|
40
|
-
|
|
41
|
-
Example:
|
|
42
|
-
Basic usage
|
|
43
|
-
>>> from langchain_dev_utils.agents.middleware import create_handoffs_tool
|
|
44
|
-
>>> handoffs_tool = create_handoffs_tool("time_agent")
|
|
45
35
|
"""
|
|
46
|
-
if tool_name is None:
|
|
47
|
-
tool_name = f"transfer_to_{agent_name}"
|
|
48
|
-
if not tool_name.endswith("_agent"):
|
|
49
|
-
tool_name += "_agent"
|
|
50
36
|
|
|
37
|
+
tool_name = f"transfer_to_{agent_name}"
|
|
38
|
+
if not tool_name.endswith("_agent"):
|
|
39
|
+
tool_name += "_agent"
|
|
51
40
|
if tool_description is None:
|
|
52
41
|
tool_description = f"Transfer to the {agent_name}"
|
|
53
42
|
|
|
@@ -75,30 +64,92 @@ def _get_default_active_agent(state: dict[str, AgentConfig]) -> Optional[str]:
|
|
|
75
64
|
return None
|
|
76
65
|
|
|
77
66
|
|
|
78
|
-
|
|
67
|
+
def _transform_agent_config(
|
|
68
|
+
config: dict[str, AgentConfig],
|
|
69
|
+
handoffs_tools: list[BaseTool],
|
|
70
|
+
) -> dict[str, AgentConfig]:
|
|
71
|
+
"""Transform the agent config to add handoffs tools.
|
|
72
|
+
|
|
73
|
+
Args:
|
|
74
|
+
config (dict[str, AgentConfig]): The agent config.
|
|
75
|
+
handoffs_tools (list[BaseTool]): The list of handoffs tools.
|
|
76
|
+
|
|
77
|
+
Returns:
|
|
78
|
+
dict[str, AgentConfig]: The transformed agent config.
|
|
79
|
+
"""
|
|
80
|
+
|
|
81
|
+
for agent_name, _cfg in config.items():
|
|
82
|
+
handoffs = _cfg.get("handoffs", [])
|
|
83
|
+
if handoffs == "all":
|
|
84
|
+
handoff_tools = [
|
|
85
|
+
handoff_tool
|
|
86
|
+
for handoff_tool in handoffs_tools
|
|
87
|
+
if handoff_tool.name != f"transfer_to_{agent_name}"
|
|
88
|
+
]
|
|
89
|
+
else:
|
|
90
|
+
if not isinstance(handoffs, list):
|
|
91
|
+
raise ValueError(
|
|
92
|
+
f"handoffs for agent {agent_name} must be a list of agent names or 'all'"
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
handoff_tools = [
|
|
96
|
+
handoff_tool
|
|
97
|
+
for handoff_tool in handoffs_tools
|
|
98
|
+
if handoff_tool.name
|
|
99
|
+
in [
|
|
100
|
+
f"transfer_to_{_handoff_agent_name}"
|
|
101
|
+
for _handoff_agent_name in handoffs
|
|
102
|
+
]
|
|
103
|
+
]
|
|
104
|
+
|
|
105
|
+
_cfg["tools"] = [*_cfg.get("tools", []), *handoff_tools]
|
|
106
|
+
return config
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
class HandoffAgentMiddleware(AgentMiddleware):
|
|
79
110
|
"""Agent middleware for switching between multiple agents.
|
|
80
111
|
This middleware dynamically replaces model call parameters based on the currently active agent configuration, enabling seamless switching between different agents.
|
|
81
112
|
|
|
82
113
|
Args:
|
|
83
114
|
agents_config (dict[str, AgentConfig]): A dictionary of agent configurations.
|
|
115
|
+
custom_handoffs_tool_descriptions (Optional[dict[str, str]]): A dictionary of custom tool descriptions for handoffs tools. Defaults to None.
|
|
84
116
|
|
|
85
117
|
Examples:
|
|
86
118
|
```python
|
|
87
|
-
from langchain_dev_utils.agents.middleware import
|
|
88
|
-
middleware =
|
|
119
|
+
from langchain_dev_utils.agents.middleware import HandoffAgentMiddleware
|
|
120
|
+
middleware = HandoffAgentMiddleware(agents_config)
|
|
89
121
|
```
|
|
90
122
|
"""
|
|
91
123
|
|
|
92
124
|
state_schema = MultiAgentState
|
|
93
125
|
|
|
94
|
-
def __init__(
|
|
126
|
+
def __init__(
|
|
127
|
+
self,
|
|
128
|
+
agents_config: dict[str, AgentConfig],
|
|
129
|
+
custom_handoffs_tool_descriptions: Optional[dict[str, str]] = None,
|
|
130
|
+
) -> None:
|
|
95
131
|
default_agent_name = _get_default_active_agent(agents_config)
|
|
96
132
|
if default_agent_name is None:
|
|
97
133
|
raise ValueError(
|
|
98
134
|
"No default agent found, you must set one by set default=True"
|
|
99
135
|
)
|
|
136
|
+
|
|
137
|
+
if custom_handoffs_tool_descriptions is None:
|
|
138
|
+
custom_handoffs_tool_descriptions = {}
|
|
139
|
+
|
|
140
|
+
handoffs_tools = [
|
|
141
|
+
_create_handoffs_tool(
|
|
142
|
+
agent_name,
|
|
143
|
+
custom_handoffs_tool_descriptions.get(agent_name),
|
|
144
|
+
)
|
|
145
|
+
for agent_name in agents_config.keys()
|
|
146
|
+
]
|
|
100
147
|
self.default_agent_name = default_agent_name
|
|
101
|
-
self.agents_config =
|
|
148
|
+
self.agents_config = _transform_agent_config(
|
|
149
|
+
agents_config,
|
|
150
|
+
handoffs_tools,
|
|
151
|
+
)
|
|
152
|
+
self.tools = handoffs_tools
|
|
102
153
|
|
|
103
154
|
def _get_active_agent_config(self, request: ModelRequest) -> dict[str, Any]:
|
|
104
155
|
active_agent_name = request.state.get("active_agent", self.default_agent_name)
|
|
@@ -104,9 +104,14 @@ class PlanState(AgentState):
|
|
|
104
104
|
plan: NotRequired[list[Plan]]
|
|
105
105
|
|
|
106
106
|
|
|
107
|
-
|
|
107
|
+
class PlanToolDescription(TypedDict):
|
|
108
|
+
write_plan: NotRequired[str]
|
|
109
|
+
finish_sub_plan: NotRequired[str]
|
|
110
|
+
read_plan: NotRequired[str]
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def _create_write_plan_tool(
|
|
108
114
|
description: Optional[str] = None,
|
|
109
|
-
message_key: Optional[str] = None,
|
|
110
115
|
) -> BaseTool:
|
|
111
116
|
"""Create a tool for writing initial plan.
|
|
112
117
|
|
|
@@ -116,22 +121,15 @@ def create_write_plan_tool(
|
|
|
116
121
|
|
|
117
122
|
Args:
|
|
118
123
|
description: The description of the tool. Uses default description if not provided.
|
|
119
|
-
message_key: The key of the message to be updated. Defaults to "messages".
|
|
120
124
|
|
|
121
125
|
Returns:
|
|
122
126
|
BaseTool: The tool for writing initial plan.
|
|
123
|
-
|
|
124
|
-
Example:
|
|
125
|
-
Basic usage:
|
|
126
|
-
>>> from langchain_dev_utils.agents.middleware import create_write_plan_tool
|
|
127
|
-
>>> write_plan_tool = create_write_plan_tool()
|
|
128
127
|
"""
|
|
129
128
|
|
|
130
129
|
@tool(
|
|
131
130
|
description=description or _DEFAULT_WRITE_PLAN_TOOL_DESCRIPTION,
|
|
132
131
|
)
|
|
133
132
|
def write_plan(plan: list[str], runtime: ToolRuntime):
|
|
134
|
-
msg_key = message_key or "messages"
|
|
135
133
|
return Command(
|
|
136
134
|
update={
|
|
137
135
|
"plan": [
|
|
@@ -141,7 +139,7 @@ def create_write_plan_tool(
|
|
|
141
139
|
}
|
|
142
140
|
for index, content in enumerate(plan)
|
|
143
141
|
],
|
|
144
|
-
|
|
142
|
+
"messages": [
|
|
145
143
|
ToolMessage(
|
|
146
144
|
content=f"Plan successfully written, please first execute the {plan[0]} sub-plan (no need to change the status to in_process)",
|
|
147
145
|
tool_call_id=runtime.tool_call_id,
|
|
@@ -153,9 +151,8 @@ def create_write_plan_tool(
|
|
|
153
151
|
return write_plan
|
|
154
152
|
|
|
155
153
|
|
|
156
|
-
def
|
|
154
|
+
def _create_finish_sub_plan_tool(
|
|
157
155
|
description: Optional[str] = None,
|
|
158
|
-
message_key: Optional[str] = None,
|
|
159
156
|
) -> BaseTool:
|
|
160
157
|
"""Create a tool for finishing sub-plan tasks.
|
|
161
158
|
|
|
@@ -164,15 +161,9 @@ def create_finish_sub_plan_tool(
|
|
|
164
161
|
|
|
165
162
|
Args:
|
|
166
163
|
description: The description of the tool. Uses default description if not provided.
|
|
167
|
-
message_key: The key of the message to be updated. Defaults to "messages".
|
|
168
164
|
|
|
169
165
|
Returns:
|
|
170
166
|
BaseTool: The tool for finishing sub-plan tasks.
|
|
171
|
-
|
|
172
|
-
Example:
|
|
173
|
-
Basic usage:
|
|
174
|
-
>>> from langchain_dev_utils.agents.middleware import create_finish_sub_plan_tool
|
|
175
|
-
>>> finish_sub_plan_tool = create_finish_sub_plan_tool()
|
|
176
167
|
"""
|
|
177
168
|
|
|
178
169
|
@tool(
|
|
@@ -181,7 +172,6 @@ def create_finish_sub_plan_tool(
|
|
|
181
172
|
def finish_sub_plan(
|
|
182
173
|
runtime: ToolRuntime,
|
|
183
174
|
):
|
|
184
|
-
msg_key = message_key or "messages"
|
|
185
175
|
plan_list = runtime.state.get("plan", [])
|
|
186
176
|
|
|
187
177
|
sub_finish_plan = ""
|
|
@@ -200,7 +190,7 @@ def create_finish_sub_plan_tool(
|
|
|
200
190
|
return Command(
|
|
201
191
|
update={
|
|
202
192
|
"plan": plan_list,
|
|
203
|
-
|
|
193
|
+
"messages": [
|
|
204
194
|
ToolMessage(
|
|
205
195
|
content=sub_finish_plan + sub_next_plan,
|
|
206
196
|
tool_call_id=runtime.tool_call_id,
|
|
@@ -212,7 +202,7 @@ def create_finish_sub_plan_tool(
|
|
|
212
202
|
return finish_sub_plan
|
|
213
203
|
|
|
214
204
|
|
|
215
|
-
def
|
|
205
|
+
def _create_read_plan_tool(
|
|
216
206
|
description: Optional[str] = None,
|
|
217
207
|
):
|
|
218
208
|
"""Create a tool for reading all sub-plans.
|
|
@@ -225,11 +215,6 @@ def create_read_plan_tool(
|
|
|
225
215
|
|
|
226
216
|
Returns:
|
|
227
217
|
BaseTool: The tool for reading all sub-plans.
|
|
228
|
-
|
|
229
|
-
Example:
|
|
230
|
-
Basic usage:
|
|
231
|
-
>>> from langchain_dev_utils.agents.middleware import create_read_plan_tool
|
|
232
|
-
>>> read_plan_tool = create_read_plan_tool()
|
|
233
218
|
"""
|
|
234
219
|
|
|
235
220
|
@tool(
|
|
@@ -287,12 +272,8 @@ class PlanMiddleware(AgentMiddleware):
|
|
|
287
272
|
tool. If not provided, uses the default `_PLAN_SYSTEM_PROMPT` or
|
|
288
273
|
`_PLAN_SYSTEM_PROMPT_NOT_READ_PLAN` based on the `use_read_plan_tool`
|
|
289
274
|
parameter.
|
|
290
|
-
|
|
291
|
-
If not provided, uses the default
|
|
292
|
-
finish_sub_plan_tool_description: Description of the `finish_sub_plan` tool.
|
|
293
|
-
If not provided, uses the default `_DEFAULT_FINISH_SUB_PLAN_TOOL_DESCRIPTION`.
|
|
294
|
-
read_plan_tool_description: Description of the `read_plan` tool.
|
|
295
|
-
If not provided, uses the default `_DEFAULT_READ_PLAN_TOOL_DESCRIPTION`.
|
|
275
|
+
custom_plan_tool_descriptions: Custom descriptions for the plan tools.
|
|
276
|
+
If not provided, uses the default descriptions.
|
|
296
277
|
use_read_plan_tool: Whether to use the `read_plan` tool.
|
|
297
278
|
If not provided, uses the default `True`.
|
|
298
279
|
|
|
@@ -316,31 +297,34 @@ class PlanMiddleware(AgentMiddleware):
|
|
|
316
297
|
self,
|
|
317
298
|
*,
|
|
318
299
|
system_prompt: Optional[str] = None,
|
|
319
|
-
|
|
320
|
-
finish_sub_plan_tool_description: Optional[str] = None,
|
|
321
|
-
read_plan_tool_description: Optional[str] = None,
|
|
300
|
+
custom_plan_tool_descriptions: Optional[PlanToolDescription] = None,
|
|
322
301
|
use_read_plan_tool: bool = True,
|
|
323
302
|
) -> None:
|
|
324
303
|
super().__init__()
|
|
325
304
|
|
|
326
|
-
|
|
327
|
-
|
|
305
|
+
if not custom_plan_tool_descriptions:
|
|
306
|
+
custom_plan_tool_descriptions = {}
|
|
307
|
+
|
|
308
|
+
write_plan_tool_description = custom_plan_tool_descriptions.get(
|
|
309
|
+
"write_plan",
|
|
310
|
+
_DEFAULT_WRITE_PLAN_TOOL_DESCRIPTION,
|
|
328
311
|
)
|
|
329
|
-
finish_sub_plan_tool_description = (
|
|
330
|
-
|
|
331
|
-
|
|
312
|
+
finish_sub_plan_tool_description = custom_plan_tool_descriptions.get(
|
|
313
|
+
"finish_sub_plan",
|
|
314
|
+
_DEFAULT_FINISH_SUB_PLAN_TOOL_DESCRIPTION,
|
|
332
315
|
)
|
|
333
|
-
read_plan_tool_description = (
|
|
334
|
-
|
|
316
|
+
read_plan_tool_description = custom_plan_tool_descriptions.get(
|
|
317
|
+
"read_plan",
|
|
318
|
+
_DEFAULT_READ_PLAN_TOOL_DESCRIPTION,
|
|
335
319
|
)
|
|
336
320
|
|
|
337
321
|
tools = [
|
|
338
|
-
|
|
339
|
-
|
|
322
|
+
_create_write_plan_tool(description=write_plan_tool_description),
|
|
323
|
+
_create_finish_sub_plan_tool(description=finish_sub_plan_tool_description),
|
|
340
324
|
]
|
|
341
325
|
|
|
342
326
|
if use_read_plan_tool:
|
|
343
|
-
tools.append(
|
|
327
|
+
tools.append(_create_read_plan_tool(description=read_plan_tool_description))
|
|
344
328
|
|
|
345
329
|
if system_prompt is None:
|
|
346
330
|
if use_read_plan_tool:
|
|
@@ -134,9 +134,8 @@ class _BaseChatOpenAICompatible(BaseChatOpenAI):
|
|
|
134
134
|
from other model providers.
|
|
135
135
|
|
|
136
136
|
**2. Dynamically adapts to choose the most suitable structured-output method**
|
|
137
|
-
OpenAICompatibleChatModel
|
|
138
|
-
|
|
139
|
-
capabilities of the model provider.
|
|
137
|
+
OpenAICompatibleChatModel selects the best structured-output method (function_calling or json_schema)
|
|
138
|
+
based on the actual capabilities of the model provider.
|
|
140
139
|
|
|
141
140
|
**3. Supports configuration of related parameters**
|
|
142
141
|
For cases where parameters differ from the official OpenAI API, this library
|
|
@@ -527,11 +526,10 @@ class _BaseChatOpenAICompatible(BaseChatOpenAI):
|
|
|
527
526
|
schema: Optional[_DictOrPydanticClass] = None,
|
|
528
527
|
*,
|
|
529
528
|
method: Literal[
|
|
530
|
-
"auto",
|
|
531
529
|
"function_calling",
|
|
532
530
|
"json_mode",
|
|
533
531
|
"json_schema",
|
|
534
|
-
] = "
|
|
532
|
+
] = "json_schema",
|
|
535
533
|
include_raw: bool = False,
|
|
536
534
|
strict: Optional[bool] = None,
|
|
537
535
|
**kwargs: Any,
|
|
@@ -545,7 +543,7 @@ class _BaseChatOpenAICompatible(BaseChatOpenAI):
|
|
|
545
543
|
|
|
546
544
|
Args:
|
|
547
545
|
schema: Output schema (Pydantic model class or dictionary definition)
|
|
548
|
-
method: Extraction method - defaults to
|
|
546
|
+
method: Extraction method - defaults to json_schema, it the provider doesn't support json_schema, it will fallback to function_calling
|
|
549
547
|
include_raw: Whether to include raw model response alongside parsed output
|
|
550
548
|
strict: Schema enforcement strictness (provider-dependent)
|
|
551
549
|
**kwargs: Additional structured output parameters
|
|
@@ -553,16 +551,11 @@ class _BaseChatOpenAICompatible(BaseChatOpenAI):
|
|
|
553
551
|
Returns:
|
|
554
552
|
Runnable configured for structured output extraction
|
|
555
553
|
"""
|
|
556
|
-
if method not in ["
|
|
554
|
+
if method not in ["function_calling", "json_mode", "json_schema"]:
|
|
557
555
|
raise ValueError(
|
|
558
|
-
f"Unsupported method: {method}. Please choose from '
|
|
556
|
+
f"Unsupported method: {method}. Please choose from 'function_calling', 'json_mode', 'json_schema'."
|
|
559
557
|
)
|
|
560
|
-
if
|
|
561
|
-
if "json_schema" in self.supported_response_format:
|
|
562
|
-
method = "json_schema"
|
|
563
|
-
else:
|
|
564
|
-
method = "function_calling"
|
|
565
|
-
elif (
|
|
558
|
+
if (
|
|
566
559
|
method == "json_schema"
|
|
567
560
|
and "json_schema" not in self.supported_response_format
|
|
568
561
|
):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: langchain-dev-utils
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.2
|
|
4
4
|
Summary: A practical utility library for LangChain and LangGraph development
|
|
5
5
|
Project-URL: Source Code, https://github.com/TBice123123/langchain-dev-utils
|
|
6
6
|
Project-URL: repository, https://github.com/TBice123123/langchain-dev-utils
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
langchain_dev_utils/__init__.py,sha256
|
|
1
|
+
langchain_dev_utils/__init__.py,sha256=HgKA3RqZvC7slo8MgLyffCGwJbQ3cY6I7oUMFvGLWps,22
|
|
2
2
|
langchain_dev_utils/_utils.py,sha256=MFEzR1BjXMj6HEVwt2x2omttFuDJ_rYAEbNqe99r9pM,1338
|
|
3
3
|
langchain_dev_utils/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
4
|
langchain_dev_utils/agents/__init__.py,sha256=PJ-lSDZv_AXMYA3H4fx-HzJa14tPbkGmq1HX8LNfaPo,125
|
|
@@ -6,12 +6,12 @@ langchain_dev_utils/agents/factory.py,sha256=8XB6y_ddf58vXlTLHBL6KCirFqkD2Gjtzsu
|
|
|
6
6
|
langchain_dev_utils/agents/file_system.py,sha256=Yk3eetREE26WNrnTWLoiDUpOyCJ-rhjlfFDk6foLa1E,8468
|
|
7
7
|
langchain_dev_utils/agents/plan.py,sha256=WwhoiJBmVYVI9bT8HfjCzTJ_SIp9WFil0gOeznv2omQ,6497
|
|
8
8
|
langchain_dev_utils/agents/wrap.py,sha256=RuchoH_VotPmKFuYEn2SXoSgNxZhSA9jKM0Iv_8oHLk,4718
|
|
9
|
-
langchain_dev_utils/agents/middleware/__init__.py,sha256=
|
|
9
|
+
langchain_dev_utils/agents/middleware/__init__.py,sha256=QVQibaNHvHPyNTZ2UNFfYL153ZboaCHcoioTHK0FsiY,710
|
|
10
10
|
langchain_dev_utils/agents/middleware/format_prompt.py,sha256=LzYiQXCRvkpfDhGPxhZwdepeU3j-HUWPJqcx3FWsfT4,2357
|
|
11
|
-
langchain_dev_utils/agents/middleware/handoffs.py,sha256=
|
|
11
|
+
langchain_dev_utils/agents/middleware/handoffs.py,sha256=hYtm6NKUvfJQ_fxtTBuvEay185_RCB0yXAEdgSL7-Ls,6721
|
|
12
12
|
langchain_dev_utils/agents/middleware/model_fallback.py,sha256=8xiNjTJ0yiRkPLCRfAGNnqY1TLstj1Anmiqyv5w2mA8,1633
|
|
13
13
|
langchain_dev_utils/agents/middleware/model_router.py,sha256=qBspvj9ZoKfmC1pHWTO0EHHfxjgCUd-TuSbqvZl0kmg,7977
|
|
14
|
-
langchain_dev_utils/agents/middleware/plan.py,sha256
|
|
14
|
+
langchain_dev_utils/agents/middleware/plan.py,sha256=-ZLkp85QQTSCX9thMblacJ1N86h0BYPoTwCfJlJ_jzQ,14981
|
|
15
15
|
langchain_dev_utils/agents/middleware/summarization.py,sha256=IoZ2PM1OC3AXwf0DWpfreuPOAipeiYu0KPmAABWXuY0,3087
|
|
16
16
|
langchain_dev_utils/agents/middleware/tool_call_repair.py,sha256=oZF0Oejemqs9kSn8xbW79FWyVVarL4IGCz0gpqYBkFM,3529
|
|
17
17
|
langchain_dev_utils/agents/middleware/tool_emulator.py,sha256=OgtPhqturaWzF4fRSJ3f_IXvIrYrrAjlpOC5zmLtrkY,2031
|
|
@@ -20,7 +20,7 @@ langchain_dev_utils/chat_models/__init__.py,sha256=YSLUyHrWEEj4y4DtGFCOnDW02VIYZ
|
|
|
20
20
|
langchain_dev_utils/chat_models/base.py,sha256=BzaoCIv145eE8b5wNDsbZDHn4EAxe4vdlptp7qXPWKk,11625
|
|
21
21
|
langchain_dev_utils/chat_models/types.py,sha256=MD3cv_ZIe9fCdgwisNfuxAOhy-j4YSs1ZOQYyCjlNKs,927
|
|
22
22
|
langchain_dev_utils/chat_models/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
23
|
-
langchain_dev_utils/chat_models/adapters/openai_compatible.py,sha256=
|
|
23
|
+
langchain_dev_utils/chat_models/adapters/openai_compatible.py,sha256=ws1CTZhyl8gxoY_RCLsV3cDgc8d7yDLWUa6ZfloxuMs,24239
|
|
24
24
|
langchain_dev_utils/embeddings/__init__.py,sha256=zbEOaV86TUi9Zrg_dH9dpdgacWg31HMJTlTQknA9EKk,244
|
|
25
25
|
langchain_dev_utils/embeddings/base.py,sha256=BGoWY0L7nG9iRV3d4sSagXhECXrwvS1xA-A_OVltn3k,9406
|
|
26
26
|
langchain_dev_utils/message_convert/__init__.py,sha256=ZGrHGXPKMrZ_p9MqfIVZ4jgbEyb7aC4Q7X-muuThIYU,457
|
|
@@ -33,7 +33,7 @@ langchain_dev_utils/pipeline/types.py,sha256=T3aROKKXeWvd0jcH5XkgMDQfEkLfPaiOhhV
|
|
|
33
33
|
langchain_dev_utils/tool_calling/__init__.py,sha256=mu_WxKMcu6RoTf4vkTPbA1WSBSNc6YIqyBtOQ6iVQj4,322
|
|
34
34
|
langchain_dev_utils/tool_calling/human_in_the_loop.py,sha256=7Z_QO5OZUR6K8nLoIcafc6osnvX2IYNorOJcbx6bVso,9672
|
|
35
35
|
langchain_dev_utils/tool_calling/utils.py,sha256=S4-KXQ8jWmpGTXYZitovF8rxKpaSSUkFruM8LDwvcvE,2765
|
|
36
|
-
langchain_dev_utils-1.3.
|
|
37
|
-
langchain_dev_utils-1.3.
|
|
38
|
-
langchain_dev_utils-1.3.
|
|
39
|
-
langchain_dev_utils-1.3.
|
|
36
|
+
langchain_dev_utils-1.3.2.dist-info/METADATA,sha256=PLQKHjjqwlL9lvaW3Et1q0gYbZTtRdmTN6w5A4gJiYM,4552
|
|
37
|
+
langchain_dev_utils-1.3.2.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
38
|
+
langchain_dev_utils-1.3.2.dist-info/licenses/LICENSE,sha256=AWAOzNEcsvCEzHOF0qby5OKxviVH_eT9Yce1sgJTico,1084
|
|
39
|
+
langchain_dev_utils-1.3.2.dist-info/RECORD,,
|
|
File without changes
|
{langchain_dev_utils-1.3.1.dist-info → langchain_dev_utils-1.3.2.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|