Skip to content

Commit 1c24786

Browse files
authored
Update ExpertiseBasedToolMiddleware implementation (#1123)
## Overview Refactor ExpertiseBasedToolMiddleware to use ChatOpenAI and Callable for model requests. ## Type of change **Type:** [bug/ Remove outdated content] ## Related issues/PRs <!-- To automatically close an issue when this PR is merged, use closing keywords: - "closes #123" or "fixes #123" or "resolves #123" For regular references without auto-closing, just use: - "#123" or "See issue #123" Examples: - closes #456 (will auto-close issue #456 when PR is merged) - See #789 for context (will reference but not auto-close issue #789) --> - GitHub issue: #1113 - Feature PR: #1104 - closes #1113 - please merge first #1104 <!-- For LangChain employees, if applicable: --> - Linear issue: - Slack thread: ## Checklist <!-- Put an 'x' in all boxes that apply --> - [x] I have read the [contributing guidelines](README.md) - [x] I have tested my changes locally using `docs dev` - [x] All code examples have been tested and work correctly - [x] I have used **root relative** paths for internal links - [x] I have updated navigation in `src/docs.json` if needed - I have gotten approval from the relevant reviewers ## Additional notes <!-- Any other information that would be helpful for reviewers -->
1 parent cdf715a commit 1c24786

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

src/oss/python/releases/langchain-v1.mdx

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -134,38 +134,40 @@ Example custom middleware:
134134

135135
```python expandable
136136
from dataclasses import dataclass
137+
from typing import Callable
138+
139+
from langchain_openai import ChatOpenAI
137140

138141
from langchain.agents.middleware import (
139142
AgentMiddleware,
140-
ModelRequest,
141-
ModelRequestHandler
143+
ModelRequest
142144
)
143-
from langchain.messages import AIMessage
145+
from langchain.agents.middleware.types import ModelResponse
144146

145147
@dataclass
146148
class Context:
147149
user_expertise: str = "beginner"
148150

149-
class ExpertiseBasedToolMiddleware(Middleware):
151+
class ExpertiseBasedToolMiddleware(AgentMiddleware):
150152
def wrap_model_call(
151153
self,
152154
request: ModelRequest,
153-
handler: ModelRequestHandler
154-
) -> AIMessage:
155+
handler: Callable[[ModelRequest], ModelResponse]
156+
) -> ModelResponse:
155157
user_level = request.runtime.context.user_expertise
156158

157159
if user_level == "expert":
158160
# More powerful model
159-
model = "openai:gpt-5"
161+
model = ChatOpenAI(model="openai:gpt-5")
160162
tools = [advanced_search, data_analysis]
161163
else:
162164
# Less powerful model
163-
model = "openai:gpt-5-nano"
165+
model = ChatOpenAI(model="openai:gpt-5-nano")
164166
tools = [simple_search, basic_calculator]
165167

166-
return handler(
167-
request.replace(model=model, tools=tools)
168-
)
168+
request.model = model
169+
request.tools = tools
170+
return handler(request)
169171

170172
agent = create_agent(
171173
model="anthropic:claude-sonnet-4-5",

0 commit comments

Comments
 (0)