Skip to content

Commit 8af2d2d

Browse files
committed
refactor(tool runner): rename generate_tool_call_response
1 parent ede3242 commit 8af2d2d

File tree

3 files changed

+70
-10
lines changed

3 files changed

+70
-10
lines changed

examples/memory/basic.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,7 @@ def conversation_loop():
376376
messages.append({"role": "assistant", "content": assistant_content})
377377

378378
# Generate tool response automatically
379-
tool_response = runner.generate_tool_call_response()
379+
tool_response = runner.generate_tool_response()
380380
if tool_response and tool_response["content"]:
381381
# Add tool results to messages
382382
messages.append({"role": "user", "content": tool_response["content"]})

src/anthropic/lib/tools/_beta_runner.py

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
AsyncIterator,
1818
)
1919
from contextlib import contextmanager, asynccontextmanager
20-
from typing_extensions import TypedDict, override
20+
from typing_extensions import TypedDict, override, deprecated
2121

2222
import httpx
2323

@@ -250,7 +250,7 @@ def __run__(self) -> Iterator[RunnerItemT]:
250250

251251
# If the compaction was performed, skip tool call generation this iteration
252252
if not self._check_and_compact():
253-
response = self.generate_tool_call_response()
253+
response = self.generate_tool_response()
254254
if response is None:
255255
log.debug("Tool call was not requested, exiting from tool runner loop.")
256256
return
@@ -271,7 +271,7 @@ def until_done(self) -> ParsedBetaMessage[ResponseFormatT]:
271271
assert last_message is not None
272272
return last_message
273273

274-
def generate_tool_call_response(self) -> BetaMessageParam | None:
274+
def generate_tool_response(self) -> BetaMessageParam | None:
275275
"""Generate a MessageParam by calling tool functions with any tool use blocks from the last message.
276276
277277
Note the tool call response is cached, repeated calls to this method will return the same response.
@@ -285,6 +285,24 @@ def generate_tool_call_response(self) -> BetaMessageParam | None:
285285
self._cached_tool_call_response = response
286286
return response
287287

288+
@deprecated("generate_tool_call_response is deprecated, use generate_tool_response instead")
289+
def generate_tool_call_response(self) -> BetaMessageParam | None:
290+
"""Generate a MessageParam by calling tool functions with any tool use blocks from the last message.
291+
292+
.. deprecated::
293+
Use :meth:`generate_tool_response` instead.
294+
295+
Note the tool call response is cached, repeated calls to this method will return the same response.
296+
297+
None can be returned if no tool call was applicable.
298+
"""
299+
warnings.warn(
300+
"generate_tool_call_response is deprecated, use generate_tool_response instead",
301+
DeprecationWarning,
302+
stacklevel=2,
303+
)
304+
return self.generate_tool_response()
305+
288306
def _generate_tool_call_response(self) -> BetaMessageParam | None:
289307
content = self._get_last_assistant_message_content()
290308
if not content:
@@ -501,7 +519,7 @@ async def __run__(self) -> AsyncIterator[RunnerItemT]:
501519

502520
# If the compaction was performed, skip tool call generation this iteration
503521
if not await self._check_and_compact():
504-
response = await self.generate_tool_call_response()
522+
response = await self.generate_tool_response()
505523
if response is None:
506524
log.debug("Tool call was not requested, exiting from tool runner loop.")
507525
return
@@ -522,7 +540,7 @@ async def until_done(self) -> ParsedBetaMessage[ResponseFormatT]:
522540
assert last_message is not None
523541
return last_message
524542

525-
async def generate_tool_call_response(self) -> BetaMessageParam | None:
543+
async def generate_tool_response(self) -> BetaMessageParam | None:
526544
"""Generate a MessageParam by calling tool functions with any tool use blocks from the last message.
527545
528546
Note the tool call response is cached, repeated calls to this method will return the same response.
@@ -537,6 +555,24 @@ async def generate_tool_call_response(self) -> BetaMessageParam | None:
537555
self._cached_tool_call_response = response
538556
return response
539557

558+
@deprecated("generate_tool_call_response is deprecated, use generate_tool_response instead")
559+
async def generate_tool_call_response(self) -> BetaMessageParam | None:
560+
"""Generate a MessageParam by calling tool functions with any tool use blocks from the last message.
561+
562+
.. deprecated::
563+
Use :meth:`generate_tool_response` instead.
564+
565+
Note the tool call response is cached, repeated calls to this method will return the same response.
566+
567+
None can be returned if no tool call was applicable.
568+
"""
569+
warnings.warn(
570+
"generate_tool_call_response is deprecated, use generate_tool_response instead",
571+
DeprecationWarning,
572+
stacklevel=2,
573+
)
574+
return await self.generate_tool_response()
575+
540576
async def _get_last_message(self) -> ParsedBetaMessage[ResponseFormatT] | None:
541577
if callable(self._last_message):
542578
return await self._last_message()

tests/lib/tools/test_runners.py

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ def tool_runner(client: Anthropic) -> List[Union[BetaMessageParam, None]]:
143143

144144
actual_responses: List[Union[BetaMessageParam, None]] = []
145145
for _ in runner:
146-
tool_call_response = runner.generate_tool_call_response()
146+
tool_call_response = runner.generate_tool_response()
147147
if tool_call_response is not None:
148148
actual_responses.append(tool_call_response)
149149

@@ -250,8 +250,8 @@ def tool_runner(client: Anthropic) -> None:
250250
)
251251

252252
for _ in runner:
253-
response1 = runner.generate_tool_call_response()
254-
response2 = runner.generate_tool_call_response()
253+
response1 = runner.generate_tool_response()
254+
response2 = runner.generate_tool_response()
255255

256256
if response1 is not None:
257257
assert response1 is response2
@@ -331,7 +331,7 @@ def get_weather_answers(client: Anthropic) -> List[Union[BetaMessageParam, None]
331331
answers: List[Union[BetaMessageParam, None]] = []
332332

333333
for _ in runner:
334-
answers.append(runner.generate_tool_call_response())
334+
answers.append(runner.generate_tool_response())
335335

336336
return answers
337337

@@ -613,3 +613,27 @@ def test_tool_runner_method_in_sync(sync: bool, client: Anthropic, async_client:
613613
"stream",
614614
},
615615
)
616+
617+
618+
def test_generate_tool_call_response_deprecated(client: Anthropic) -> None:
619+
runner = client.beta.messages.tool_runner(
620+
model="claude-haiku-4-5",
621+
messages=[{"role": "user", "content": "What's the weather in SF in Celsius?"}],
622+
tools=[],
623+
max_tokens=1024,
624+
)
625+
626+
with pytest.deprecated_call():
627+
runner.generate_tool_call_response() # type: ignore[reportDeprecated]
628+
629+
630+
async def test_generate_tool_call_response_deprecated_async(async_client: AsyncAnthropic) -> None:
631+
runner = async_client.beta.messages.tool_runner(
632+
model="claude-haiku-4-5",
633+
messages=[{"role": "user", "content": "What's the weather in SF in Celsius?"}],
634+
tools=[],
635+
max_tokens=1024,
636+
)
637+
638+
with pytest.deprecated_call():
639+
await runner.generate_tool_call_response() # type: ignore[reportDeprecated]

0 commit comments

Comments
 (0)