diff --git a/.gitignore b/.gitignore
index a89f76c980..decf951689 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,3 +19,4 @@ node_modules/
**.idea/
.coverage*
/test_tmp/
+.mcp.json
diff --git a/docs/api/builtin_tools.md b/docs/api/builtin_tools.md
new file mode 100644
index 0000000000..6de0e93c3c
--- /dev/null
+++ b/docs/api/builtin_tools.md
@@ -0,0 +1,3 @@
+# `pydantic_ai.builtin_tools`
+
+::: pydantic_ai.builtin_tools
diff --git a/docs/builtin-tools.md b/docs/builtin-tools.md
new file mode 100644
index 0000000000..19cd137351
--- /dev/null
+++ b/docs/builtin-tools.md
@@ -0,0 +1,123 @@
+# Builtin Tools
+
+Builtin tools are native tools provided by LLM providers that can be used to enhance your agent's capabilities. Unlike [common tools](common-tools.md), which are custom implementations that PydanticAI executes, builtin tools are executed directly by the model provider.
+
+## Overview
+
+PydanticAI supports two types of builtin tools:
+
+- **[`WebSearchTool`][pydantic_ai.builtin_tools.WebSearchTool]**: Allows agents to search the web
+- **[`CodeExecutionTool`][pydantic_ai.builtin_tools.CodeExecutionTool]**: Enables agents to execute code in a secure environment
+
+These tools are passed to the agent via the `builtin_tools` parameter and are executed by the model provider's infrastructure.
+
+!!! warning "Provider Support"
+ Not all model providers support builtin tools. If you use a builtin tool with an unsupported provider, PydanticAI will raise a [`UserError`][pydantic_ai.exceptions.UserError] when you try to run the agent.
+
+## Web Search Tool
+
+The [`WebSearchTool`][pydantic_ai.builtin_tools.WebSearchTool] allows your agent to search the web,
+making it ideal for queries that require up-to-date data.
+
+### Provider Support
+
+| Provider | Supported | Notes |
+|----------|-----------|-------|
+| OpenAI | ✅ | Full feature support |
+| Anthropic | ✅ | Full feature support |
+| Groq | ✅ | Limited parameter support |
+| Google | ❌ | Not supported |
+| Bedrock | ❌ | Not supported |
+| Mistral | ❌ | Not supported |
+| Cohere | ❌ | Not supported |
+| HuggingFace | ❌ | Not supported |
+
+!!! note "Groq Support"
+ To use web search capabilities with Groq, you need to use the [compound models](https://console.groq.com/docs/compound).
+
+### Usage
+
+```py title="web_search_basic.py"
+from pydantic_ai import Agent, WebSearchTool
+
+agent = Agent('anthropic:claude-sonnet-4-0', builtin_tools=[WebSearchTool()])
+
+result = agent.run_sync('Give me a sentence with the biggest news in AI this week.')
+# > Scientists have developed a universal AI detector that can identify deepfake videos.
+
+```
+
+### Configuration Options
+
+The `WebSearchTool` supports several configuration parameters:
+
+```py title="web_search_configured.py"
+from pydantic_ai import Agent, WebSearchTool, WebSearchUserLocation
+
+agent = Agent(
+ 'anthropic:claude-sonnet-4-0',
+ builtin_tools=[
+ WebSearchTool(
+ search_context_size='high',
+ user_location=WebSearchUserLocation(
+ city='San Francisco',
+ country='US',
+ region='CA',
+ timezone='America/Los_Angeles',
+ ),
+ blocked_domains=['example.com', 'spam-site.net'],
+ allowed_domains=None, # Cannot use both blocked_domains and allowed_domains with Anthropic
+ max_uses=5, # Anthropic only: limit tool usage
+ )
+ ],
+)
+
+result = agent.run_sync('Use the web to get the current time.')
+# > In San Francisco, it's 8:21:41 pm PDT on Wednesday, August 6, 2025.
+```
+
+### Parameter Support by Provider
+
+| Parameter | OpenAI | Anthropic | Groq |
+|-----------|--------|-----------|------|
+| `search_context_size` | ✅ | ❌ | ❌ |
+| `user_location` | ✅ | ✅ | ❌ |
+| `blocked_domains` | ❌ | ✅ | ✅ |
+| `allowed_domains` | ❌ | ✅ | ✅ |
+| `max_uses` | ❌ | ✅ | ❌ |
+
+!!! note "Anthropic Domain Filtering"
+ With Anthropic, you can only use either `blocked_domains` or `allowed_domains`, not both.
+
+## Code Execution Tool
+
+The [`CodeExecutionTool`][pydantic_ai.builtin_tools.CodeExecutionTool] enables your agent to execute code
+in a secure environment, making it perfect for computational tasks, data analysis, and mathematical operations.
+
+### Provider Support
+
+| Provider | Supported |
+|----------|-----------|
+| OpenAI | ✅ |
+| Anthropic | ✅ |
+| Google | ✅ |
+| Groq | ❌ |
+| Bedrock | ❌ |
+| Mistral | ❌ |
+| Cohere | ❌ |
+| HuggingFace | ❌ |
+
+### Usage
+
+```py title="code_execution_basic.py"
+from pydantic_ai import Agent, CodeExecutionTool
+
+agent = Agent('anthropic:claude-sonnet-4-0', builtin_tools=[CodeExecutionTool()])
+
+result = agent.run_sync('Calculate the factorial of 15 and show your work')
+# > The factorial of 15 is **1,307,674,368,000**.
+```
+
+## API Reference
+
+For complete API documentation, see the [API Reference](api/builtin_tools.md).
diff --git a/mkdocs.yml b/mkdocs.yml
index 68680c3365..e59b899bc1 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -41,6 +41,7 @@ nav:
- input.md
- thinking.md
- direct.md
+ - builtin-tools.md
- common-tools.md
- retries.md
- MCP:
@@ -72,6 +73,7 @@ nav:
- api/agent.md
- api/tools.md
- api/toolsets.md
+ - api/builtin_tools.md
- api/common_tools.md
- api/output.md
- api/result.md
@@ -118,29 +120,29 @@ extra:
generator: false
theme:
- name: 'material'
+ name: "material"
custom_dir: docs/.overrides
palette:
- - media: '(prefers-color-scheme)'
+ - media: "(prefers-color-scheme)"
primary: pink
accent: pink
toggle:
icon: material/brightness-auto
- name: 'Switch to light mode'
- - media: '(prefers-color-scheme: light)'
+ name: "Switch to light mode"
+ - media: "(prefers-color-scheme: light)"
scheme: default
primary: pink
accent: pink
toggle:
icon: material/brightness-7
- name: 'Switch to dark mode'
- - media: '(prefers-color-scheme: dark)'
+ name: "Switch to dark mode"
+ - media: "(prefers-color-scheme: dark)"
scheme: slate
primary: pink
accent: pink
toggle:
icon: material/brightness-4
- name: 'Switch to system preference'
+ name: "Switch to system preference"
features:
- search.suggest
- search.highlight
@@ -153,8 +155,8 @@ theme:
- navigation.sections
- navigation.tracking
- toc.follow
- logo: 'img/logo-white.svg'
- favicon: 'favicon.ico'
+ logo: "img/logo-white.svg"
+ favicon: "favicon.ico"
# https://www.mkdocs.org/user-guide/configuration/#validation
validation:
@@ -164,13 +166,13 @@ validation:
anchors: warn
extra_css:
- - 'extra/tweaks.css'
+ - "extra/tweaks.css"
# used for analytics
extra_javascript:
- - '/flarelytics/client.js'
- - 'https://cdn.jsdelivr.net/npm/algoliasearch@5.20.0/dist/lite/builds/browser.umd.js'
- - 'https://cdn.jsdelivr.net/npm/instantsearch.js@4.77.3/dist/instantsearch.production.min.js'
- - '/javascripts/algolia-search.js'
+ - "/flarelytics/client.js"
+ - "https://cdn.jsdelivr.net/npm/algoliasearch@5.20.0/dist/lite/builds/browser.umd.js"
+ - "https://cdn.jsdelivr.net/npm/instantsearch.js@4.77.3/dist/instantsearch.production.min.js"
+ - "/javascripts/algolia-search.js"
markdown_extensions:
- tables
@@ -272,5 +274,5 @@ plugins:
- examples/*.md
hooks:
- - 'docs/.hooks/main.py'
- - 'docs/.hooks/algolia.py'
+ - "docs/.hooks/main.py"
+ - "docs/.hooks/algolia.py"
diff --git a/pydantic_ai_slim/pydantic_ai/__init__.py b/pydantic_ai_slim/pydantic_ai/__init__.py
index cd902ea97f..f9355ea0e3 100644
--- a/pydantic_ai_slim/pydantic_ai/__init__.py
+++ b/pydantic_ai_slim/pydantic_ai/__init__.py
@@ -1,6 +1,7 @@
from importlib.metadata import version as _metadata_version
from .agent import Agent, CallToolsNode, EndStrategy, ModelRequestNode, UserPromptNode, capture_run_messages
+from .builtin_tools import CodeExecutionTool, WebSearchTool, WebSearchUserLocation
from .exceptions import (
AgentRunError,
FallbackExceptionGroup,
@@ -41,6 +42,10 @@
# tools
'Tool',
'RunContext',
+ # builtin_tools
+ 'WebSearchTool',
+ 'WebSearchUserLocation',
+ 'CodeExecutionTool',
# output
'ToolOutput',
'NativeOutput',
diff --git a/pydantic_ai_slim/pydantic_ai/_agent_graph.py b/pydantic_ai_slim/pydantic_ai/_agent_graph.py
index 2bccc8e1c1..b13f597ea5 100644
--- a/pydantic_ai_slim/pydantic_ai/_agent_graph.py
+++ b/pydantic_ai_slim/pydantic_ai/_agent_graph.py
@@ -16,6 +16,7 @@
from pydantic_ai._function_schema import _takes_ctx as is_takes_ctx # type: ignore
from pydantic_ai._tool_manager import ToolManager
from pydantic_ai._utils import is_async_callable, run_in_executor
+from pydantic_ai.builtin_tools import AbstractBuiltinTool
from pydantic_graph import BaseNode, Graph, GraphRunContext
from pydantic_graph.nodes import End, NodeRunEndT
@@ -112,6 +113,7 @@ class GraphAgentDeps(Generic[DepsT, OutputDataT]):
history_processors: Sequence[HistoryProcessor[DepsT]]
+ builtin_tools: list[AbstractBuiltinTool] = dataclasses.field(repr=False)
tool_manager: ToolManager[DepsT]
tracer: Tracer
@@ -269,6 +271,7 @@ async def _prepare_request_parameters(
return models.ModelRequestParameters(
function_tools=function_tools,
+ builtin_tools=ctx.deps.builtin_tools,
output_mode=output_schema.mode,
output_tools=output_tools,
output_object=output_object,
@@ -443,6 +446,10 @@ async def _run_stream() -> AsyncIterator[_messages.HandleResponseEvent]:
texts.append(part.content)
elif isinstance(part, _messages.ToolCallPart):
tool_calls.append(part)
+ elif isinstance(part, _messages.BuiltinToolCallPart):
+ yield _messages.BuiltinToolCallEvent(part)
+ elif isinstance(part, _messages.BuiltinToolReturnPart):
+ yield _messages.BuiltinToolResultEvent(part)
elif isinstance(part, _messages.ThinkingPart):
# We don't need to do anything with thinking parts in this tool-calling node.
# We need to handle text parts in case there are no tool calls and/or the desired output comes
diff --git a/pydantic_ai_slim/pydantic_ai/_utils.py b/pydantic_ai_slim/pydantic_ai/_utils.py
index 88bb30ebe3..08943a8312 100644
--- a/pydantic_ai_slim/pydantic_ai/_utils.py
+++ b/pydantic_ai_slim/pydantic_ai/_utils.py
@@ -227,7 +227,13 @@ def now_utc() -> datetime:
return datetime.now(tz=timezone.utc)
-def guard_tool_call_id(t: _messages.ToolCallPart | _messages.ToolReturnPart | _messages.RetryPromptPart) -> str:
+def guard_tool_call_id(
+ t: _messages.ToolCallPart
+ | _messages.ToolReturnPart
+ | _messages.RetryPromptPart
+ | _messages.BuiltinToolCallPart
+ | _messages.BuiltinToolReturnPart,
+) -> str:
"""Type guard that either returns the tool call id or generates a new one if it's None."""
return t.tool_call_id or generate_tool_call_id()
diff --git a/pydantic_ai_slim/pydantic_ai/agent.py b/pydantic_ai_slim/pydantic_ai/agent.py
index c419e4e1f2..fb40bb2626 100644
--- a/pydantic_ai_slim/pydantic_ai/agent.py
+++ b/pydantic_ai_slim/pydantic_ai/agent.py
@@ -16,6 +16,7 @@
from pydantic.json_schema import GenerateJsonSchema
from typing_extensions import Literal, Never, Self, TypeIs, TypeVar, deprecated
+from pydantic_ai.builtin_tools import AbstractBuiltinTool
from pydantic_graph import End, Graph, GraphRun, GraphRunContext
from pydantic_graph._utils import get_event_loop
@@ -188,6 +189,7 @@ def __init__(
retries: int = 1,
output_retries: int | None = None,
tools: Sequence[Tool[AgentDepsT] | ToolFuncEither[AgentDepsT, ...]] = (),
+ builtin_tools: Sequence[AbstractBuiltinTool] = (),
prepare_tools: ToolsPrepareFunc[AgentDepsT] | None = None,
prepare_output_tools: ToolsPrepareFunc[AgentDepsT] | None = None,
toolsets: Sequence[AbstractToolset[AgentDepsT]] | None = None,
@@ -215,6 +217,7 @@ def __init__(
retries: int = 1,
output_retries: int | None = None,
tools: Sequence[Tool[AgentDepsT] | ToolFuncEither[AgentDepsT, ...]] = (),
+ builtin_tools: Sequence[AbstractBuiltinTool] = (),
prepare_tools: ToolsPrepareFunc[AgentDepsT] | None = None,
prepare_output_tools: ToolsPrepareFunc[AgentDepsT] | None = None,
mcp_servers: Sequence[MCPServer] = (),
@@ -240,6 +243,7 @@ def __init__(
retries: int = 1,
output_retries: int | None = None,
tools: Sequence[Tool[AgentDepsT] | ToolFuncEither[AgentDepsT, ...]] = (),
+ builtin_tools: Sequence[AbstractBuiltinTool] = (),
prepare_tools: ToolsPrepareFunc[AgentDepsT] | None = None,
prepare_output_tools: ToolsPrepareFunc[AgentDepsT] | None = None,
toolsets: Sequence[AbstractToolset[AgentDepsT]] | None = None,
@@ -271,6 +275,8 @@ def __init__(
output_retries: The maximum number of retries to allow for output validation, defaults to `retries`.
tools: Tools to register with the agent, you can also register tools via the decorators
[`@agent.tool`][pydantic_ai.Agent.tool] and [`@agent.tool_plain`][pydantic_ai.Agent.tool_plain].
+ builtin_tools: The builtin tools that the agent will use. This depends on the model, as some models may not
+ support certain tools. If the model doesn't support the builtin tools, an error will be raised.
prepare_tools: Custom function to prepare the tool definition of all tools for each step, except output tools.
This is useful if you want to customize the definition of multiple tools or you want to register
a subset of tools for a given step. See [`ToolsPrepareFunc`][pydantic_ai.tools.ToolsPrepareFunc]
@@ -340,6 +346,8 @@ def __init__(
self._system_prompt_dynamic_functions = {}
self._max_result_retries = output_retries if output_retries is not None else retries
+ self._builtin_tools = builtin_tools
+
self._prepare_tools = prepare_tools
self._prepare_output_tools = prepare_output_tools
@@ -700,6 +708,7 @@ async def get_instructions(run_context: RunContext[AgentDepsT]) -> str | None:
output_schema=output_schema,
output_validators=output_validators,
history_processors=self.history_processors,
+ builtin_tools=list(self._builtin_tools),
tool_manager=run_toolset,
tracer=tracer,
get_instructions=get_instructions,
diff --git a/pydantic_ai_slim/pydantic_ai/builtin_tools.py b/pydantic_ai_slim/pydantic_ai/builtin_tools.py
new file mode 100644
index 0000000000..2de110249d
--- /dev/null
+++ b/pydantic_ai_slim/pydantic_ai/builtin_tools.py
@@ -0,0 +1,105 @@
+from __future__ import annotations as _annotations
+
+from abc import ABC
+from dataclasses import dataclass
+from typing import Literal
+
+from typing_extensions import TypedDict
+
+__all__ = ('AbstractBuiltinTool', 'WebSearchTool', 'WebSearchUserLocation', 'CodeExecutionTool')
+
+
+@dataclass
+class AbstractBuiltinTool(ABC):
+ """A builtin tool that can be used by an agent.
+
+ This class is abstract and cannot be instantiated directly.
+
+ The builtin tools are passed to the model as part of the `ModelRequestParameters`.
+ """
+
+
+@dataclass
+class WebSearchTool(AbstractBuiltinTool):
+ """A builtin tool that allows your agent to search the web for information.
+
+ The parameters that PydanticAI passes depend on the model, as some parameters may not be supported by certain models.
+
+ Supported by:
+ * Anthropic
+ * OpenAI
+ * Groq
+ """
+
+ search_context_size: Literal['low', 'medium', 'high'] = 'medium'
+ """The `search_context_size` parameter controls how much context is retrieved from the web to help the tool formulate a response.
+
+ Supported by:
+ * OpenAI
+ """
+
+ user_location: WebSearchUserLocation | None = None
+ """The `user_location` parameter allows you to localize search results based on a user's location.
+
+ Supported by:
+ * Anthropic
+ * OpenAI
+ """
+
+ blocked_domains: list[str] | None = None
+ """If provided, these domains will never appear in results.
+
+ With Anthropic, you can only use one of `blocked_domains` or `allowed_domains`, not both.
+
+ Supported by:
+ * Anthropic (https://docs.anthropic.com/en/docs/build-with-claude/tool-use/web-search-tool#domain-filtering)
+ * Groq (https://console.groq.com/docs/agentic-tooling#search-settings)
+ """
+
+ allowed_domains: list[str] | None = None
+ """If provided, only these domains will be included in results.
+
+ With Anthropic, you can only use one of `blocked_domains` or `allowed_domains`, not both.
+
+ Supported by:
+ * Anthropic (https://docs.anthropic.com/en/docs/build-with-claude/tool-use/web-search-tool#domain-filtering)
+ * Groq (https://console.groq.com/docs/agentic-tooling#search-settings)
+ """
+
+ max_uses: int | None = None
+ """If provided, the tool will stop searching the web after the given number of uses.
+
+ Supported by:
+ * Anthropic
+ """
+
+
+class WebSearchUserLocation(TypedDict, total=False):
+ """Allows you to localize search results based on a user's location.
+
+ Supported by:
+ * Anthropic
+ * OpenAI
+ """
+
+ city: str
+ """The city where the user is located."""
+
+ country: str
+ """The country where the user is located. For OpenAI, this must be a 2-letter country code (e.g., 'US', 'GB')."""
+
+ region: str
+ """The region or state where the user is located."""
+
+ timezone: str
+ """The timezone of the user's location."""
+
+
+class CodeExecutionTool(AbstractBuiltinTool):
+ """A builtin tool that allows your agent to execute code.
+
+ Supported by:
+ * Anthropic
+ * OpenAI
+ * Google
+ """
diff --git a/pydantic_ai_slim/pydantic_ai/messages.py b/pydantic_ai_slim/pydantic_ai/messages.py
index 195c4b791b..938b367d4b 100644
--- a/pydantic_ai_slim/pydantic_ai/messages.py
+++ b/pydantic_ai_slim/pydantic_ai/messages.py
@@ -532,8 +532,8 @@ def otel_event(self, settings: InstrumentationSettings) -> Event:
@dataclass(repr=False)
-class ToolReturnPart:
- """A tool return message, this encodes the result of running a tool."""
+class BaseToolReturnPart:
+ """Base class for tool return parts."""
tool_name: str
"""The name of the "tool" was called."""
@@ -550,9 +550,6 @@ class ToolReturnPart:
timestamp: datetime = field(default_factory=_now_utc)
"""The timestamp, when the tool returned."""
- part_kind: Literal['tool-return'] = 'tool-return'
- """Part type identifier, this is available on all parts as a discriminator."""
-
def model_response_str(self) -> str:
"""Return a string representation of the content for the model."""
if isinstance(self.content, str):
@@ -579,9 +576,32 @@ def otel_event(self, settings: InstrumentationSettings) -> Event:
},
)
+ def has_content(self) -> bool:
+ """Return `True` if the tool return has content."""
+ return self.content is not None # pragma: no cover
+
__repr__ = _utils.dataclasses_no_defaults_repr
+@dataclass(repr=False)
+class ToolReturnPart(BaseToolReturnPart):
+ """A tool return message, this encodes the result of running a tool."""
+
+ part_kind: Literal['tool-return'] = 'tool-return'
+ """Part type identifier, this is available on all parts as a discriminator."""
+
+
+@dataclass(repr=False)
+class BuiltinToolReturnPart(BaseToolReturnPart):
+ """A tool return message from a built-in tool."""
+
+ provider_name: str | None = None
+ """The name of the provider that generated the response."""
+
+ part_kind: Literal['builtin-tool-return'] = 'builtin-tool-return'
+ """Part type identifier, this is available on all parts as a discriminator."""
+
+
error_details_ta = pydantic.TypeAdapter(list[pydantic_core.ErrorDetails], config=pydantic.ConfigDict(defer_build=True))
@@ -723,7 +743,7 @@ def has_content(self) -> bool:
@dataclass(repr=False)
-class ToolCallPart:
+class BaseToolCallPart:
"""A tool call from a model."""
tool_name: str
@@ -741,9 +761,6 @@ class ToolCallPart:
In case the tool call id is not provided by the model, Pydantic AI will generate a random one.
"""
- part_kind: Literal['tool-call'] = 'tool-call'
- """Part type identifier, this is available on all parts as a discriminator."""
-
def args_as_dict(self) -> dict[str, Any]:
"""Return the arguments as a Python dictionary.
@@ -780,7 +797,29 @@ def has_content(self) -> bool:
__repr__ = _utils.dataclasses_no_defaults_repr
-ModelResponsePart = Annotated[Union[TextPart, ToolCallPart, ThinkingPart], pydantic.Discriminator('part_kind')]
+@dataclass(repr=False)
+class ToolCallPart(BaseToolCallPart):
+ """A tool call from a model."""
+
+ part_kind: Literal['tool-call'] = 'tool-call'
+ """Part type identifier, this is available on all parts as a discriminator."""
+
+
+@dataclass(repr=False)
+class BuiltinToolCallPart(BaseToolCallPart):
+ """A tool call to a built-in tool."""
+
+ provider_name: str | None = None
+ """The name of the provider that generated the response."""
+
+ part_kind: Literal['builtin-tool-call'] = 'builtin-tool-call'
+ """Part type identifier, this is available on all parts as a discriminator."""
+
+
+ModelResponsePart = Annotated[
+ Union[TextPart, ToolCallPart, BuiltinToolCallPart, BuiltinToolReturnPart, ThinkingPart],
+ pydantic.Discriminator('part_kind'),
+]
"""A message part returned by a model."""
@@ -1172,6 +1211,29 @@ def tool_call_id(self) -> str:
__repr__ = _utils.dataclasses_no_defaults_repr
+@dataclass(repr=False)
+class BuiltinToolCallEvent:
+ """An event indicating the start to a call to a built-in tool."""
+
+ part: BuiltinToolCallPart
+ """The built-in tool call to make."""
+
+ event_kind: Literal['builtin_tool_call'] = 'builtin_tool_call'
+ """Event type identifier, used as a discriminator."""
+
+
+@dataclass(repr=False)
+class BuiltinToolResultEvent:
+ """An event indicating the result of a built-in tool call."""
+
+ result: BuiltinToolReturnPart
+ """The result of the call to the built-in tool."""
+
+ event_kind: Literal['builtin_tool_result'] = 'builtin_tool_result'
+ """Event type identifier, used as a discriminator."""
+
+
HandleResponseEvent = Annotated[
- Union[FunctionToolCallEvent, FunctionToolResultEvent], pydantic.Discriminator('event_kind')
+ Union[FunctionToolCallEvent, FunctionToolResultEvent, BuiltinToolCallEvent, BuiltinToolResultEvent],
+ pydantic.Discriminator('event_kind'),
]
diff --git a/pydantic_ai_slim/pydantic_ai/models/__init__.py b/pydantic_ai_slim/pydantic_ai/models/__init__.py
index 6fd0a3c793..ecbefcd57d 100644
--- a/pydantic_ai_slim/pydantic_ai/models/__init__.py
+++ b/pydantic_ai_slim/pydantic_ai/models/__init__.py
@@ -18,6 +18,7 @@
import httpx
from typing_extensions import Literal, TypeAliasType, TypedDict
+from pydantic_ai.builtin_tools import AbstractBuiltinTool
from pydantic_ai.profiles import DEFAULT_PROFILE, ModelProfile, ModelProfileSpec
from .. import _utils
@@ -336,6 +337,7 @@ class ModelRequestParameters:
"""Configuration for an agent's request to a model, specifically related to tools and output handling."""
function_tools: list[ToolDefinition] = field(default_factory=list)
+ builtin_tools: list[AbstractBuiltinTool] = field(default_factory=list)
output_mode: OutputMode = 'text'
output_object: OutputObjectDefinition | None = None
diff --git a/pydantic_ai_slim/pydantic_ai/models/anthropic.py b/pydantic_ai_slim/pydantic_ai/models/anthropic.py
index 3567f86c6d..e9ea76fff4 100644
--- a/pydantic_ai_slim/pydantic_ai/models/anthropic.py
+++ b/pydantic_ai_slim/pydantic_ai/models/anthropic.py
@@ -8,12 +8,24 @@
from datetime import datetime, timezone
from typing import Any, Literal, Union, cast, overload
+from anthropic.types.beta import (
+ BetaCitationsDelta,
+ BetaCodeExecutionToolResultBlock,
+ BetaCodeExecutionToolResultBlockParam,
+ BetaInputJSONDelta,
+ BetaServerToolUseBlockParam,
+ BetaWebSearchToolResultBlockParam,
+)
from typing_extensions import assert_never
+from pydantic_ai.builtin_tools import CodeExecutionTool, WebSearchTool
+
from .. import ModelHTTPError, UnexpectedModelBehavior, _utils, usage
from .._utils import guard_tool_call_id as _guard_tool_call_id
from ..messages import (
BinaryContent,
+ BuiltinToolCallPart,
+ BuiltinToolReturnPart,
DocumentUrl,
ImageUrl,
ModelMessage,
@@ -33,13 +45,21 @@
from ..providers import Provider, infer_provider
from ..settings import ModelSettings
from ..tools import ToolDefinition
-from . import Model, ModelRequestParameters, StreamedResponse, check_allow_model_requests, download_item, get_user_agent
+from . import (
+ Model,
+ ModelRequestParameters,
+ StreamedResponse,
+ check_allow_model_requests,
+ download_item,
+ get_user_agent,
+)
try:
from anthropic import NOT_GIVEN, APIStatusError, AsyncAnthropic, AsyncStream
from anthropic.types.beta import (
BetaBase64PDFBlockParam,
BetaBase64PDFSourceParam,
+ BetaCodeExecutionTool20250522Param,
BetaContentBlock,
BetaContentBlockParam,
BetaImageBlockParam,
@@ -55,6 +75,7 @@
BetaRawMessageStopEvent,
BetaRawMessageStreamEvent,
BetaRedactedThinkingBlock,
+ BetaServerToolUseBlock,
BetaSignatureDelta,
BetaTextBlock,
BetaTextBlockParam,
@@ -66,9 +87,13 @@
BetaToolChoiceParam,
BetaToolParam,
BetaToolResultBlockParam,
+ BetaToolUnionParam,
BetaToolUseBlock,
BetaToolUseBlockParam,
+ BetaWebSearchTool20250305Param,
+ BetaWebSearchToolResultBlock,
)
+ from anthropic.types.beta.beta_web_search_tool_20250305_param import UserLocation
from anthropic.types.model_param import ModelParam
except ImportError as _import_error:
@@ -218,6 +243,7 @@ async def _messages_create(
) -> BetaMessage | AsyncStream[BetaRawMessageStreamEvent]:
# standalone function to make it easier to override
tools = self._get_tools(model_request_parameters)
+ tools += self._get_builtin_tools(model_request_parameters)
tool_choice: BetaToolChoiceParam | None
if not tools:
@@ -236,6 +262,7 @@ async def _messages_create(
try:
extra_headers = model_settings.get('extra_headers', {})
extra_headers.setdefault('User-Agent', get_user_agent())
+ extra_headers.setdefault('anthropic-beta', 'code-execution-2025-05-22')
return await self.client.beta.messages.create(
max_tokens=model_settings.get('max_tokens', 4096),
system=system_prompt or NOT_GIVEN,
@@ -264,6 +291,24 @@ def _process_response(self, response: BetaMessage) -> ModelResponse:
for item in response.content:
if isinstance(item, BetaTextBlock):
items.append(TextPart(content=item.text))
+ elif isinstance(item, (BetaWebSearchToolResultBlock, BetaCodeExecutionToolResultBlock)):
+ items.append(
+ BuiltinToolReturnPart(
+ provider_name='anthropic',
+ tool_name=item.type,
+ content=item.content,
+ tool_call_id=item.tool_use_id,
+ )
+ )
+ elif isinstance(item, BetaServerToolUseBlock):
+ items.append(
+ BuiltinToolCallPart(
+ provider_name='anthropic',
+ tool_name=item.name,
+ args=cast(dict[str, Any], item.input),
+ tool_call_id=item.id,
+ )
+ )
elif isinstance(item, BetaRedactedThinkingBlock): # pragma: no cover
warnings.warn(
'Pydantic AI currently does not handle redacted thinking blocks. '
@@ -302,6 +347,24 @@ def _get_tools(self, model_request_parameters: ModelRequestParameters) -> list[B
tools += [self._map_tool_definition(r) for r in model_request_parameters.output_tools]
return tools
+ def _get_builtin_tools(self, model_request_parameters: ModelRequestParameters) -> list[BetaToolUnionParam]:
+ tools: list[BetaToolUnionParam] = []
+ for tool in model_request_parameters.builtin_tools:
+ if isinstance(tool, WebSearchTool):
+ user_location = UserLocation(type='approximate', **tool.user_location) if tool.user_location else None
+ tools.append(
+ BetaWebSearchTool20250305Param(
+ name='web_search',
+ type='web_search_20250305',
+ allowed_domains=tool.allowed_domains,
+ blocked_domains=tool.blocked_domains,
+ user_location=user_location,
+ )
+ )
+ elif isinstance(tool, CodeExecutionTool): # pragma: no branch
+ tools.append(BetaCodeExecutionTool20250522Param(name='code_execution', type='code_execution_20250522'))
+ return tools
+
async def _map_message(self, messages: list[ModelMessage]) -> tuple[str, list[BetaMessageParam]]: # noqa: C901
"""Just maps a `pydantic_ai.Message` to a `anthropic.types.MessageParam`."""
system_prompt_parts: list[str] = []
@@ -338,11 +401,26 @@ async def _map_message(self, messages: list[ModelMessage]) -> tuple[str, list[Be
if len(user_content_params) > 0:
anthropic_messages.append(BetaMessageParam(role='user', content=user_content_params))
elif isinstance(m, ModelResponse):
- assistant_content_params: list[BetaTextBlockParam | BetaToolUseBlockParam | BetaThinkingBlockParam] = []
+ assistant_content_params: list[
+ BetaTextBlockParam
+ | BetaToolUseBlockParam
+ | BetaServerToolUseBlockParam
+ | BetaWebSearchToolResultBlockParam
+ | BetaCodeExecutionToolResultBlockParam
+ | BetaThinkingBlockParam
+ ] = []
for response_part in m.parts:
if isinstance(response_part, TextPart):
- if response_part.content: # Only add non-empty text
+ if response_part.content:
assistant_content_params.append(BetaTextBlockParam(text=response_part.content, type='text'))
+ elif isinstance(response_part, ToolCallPart):
+ tool_use_block_param = BetaToolUseBlockParam(
+ id=_guard_tool_call_id(t=response_part),
+ type='tool_use',
+ name=response_part.tool_name,
+ input=response_part.args_as_dict(),
+ )
+ assistant_content_params.append(tool_use_block_param)
elif isinstance(response_part, ThinkingPart):
# NOTE: We only send thinking part back for Anthropic, otherwise they raise an error.
if response_part.signature is not None: # pragma: no branch
@@ -351,14 +429,31 @@ async def _map_message(self, messages: list[ModelMessage]) -> tuple[str, list[Be
thinking=response_part.content, signature=response_part.signature, type='thinking'
)
)
+ elif isinstance(response_part, BuiltinToolCallPart):
+ if response_part.provider_name == 'anthropic':
+ server_tool_use_block_param = BetaServerToolUseBlockParam(
+ id=_guard_tool_call_id(t=response_part),
+ type='server_tool_use',
+ name=cast(Literal['web_search', 'code_execution'], response_part.tool_name),
+ input=response_part.args_as_dict(),
+ )
+ assistant_content_params.append(server_tool_use_block_param)
+ elif isinstance(response_part, BuiltinToolReturnPart):
+ if response_part.provider_name == 'anthropic':
+ tool_use_id = _guard_tool_call_id(t=response_part)
+ if response_part.tool_name == 'web_search_tool_result':
+ server_tool_result_block_param = BetaWebSearchToolResultBlockParam(
+ tool_use_id=tool_use_id, type=response_part.tool_name, content=response_part.content
+ )
+ elif response_part.tool_name == 'code_execution_tool_result':
+ server_tool_result_block_param = BetaCodeExecutionToolResultBlockParam(
+ tool_use_id=tool_use_id, type=response_part.tool_name, content=response_part.content
+ )
+ else:
+ raise ValueError(f'Unsupported tool name: {response_part.tool_name}')
+ assistant_content_params.append(server_tool_result_block_param)
else:
- tool_use_block_param = BetaToolUseBlockParam(
- id=_guard_tool_call_id(t=response_part),
- type='tool_use',
- name=response_part.tool_name,
- input=response_part.args_as_dict(),
- )
- assistant_content_params.append(tool_use_block_param)
+ assert_never(response_part)
if len(assistant_content_params) > 0:
anthropic_messages.append(BetaMessageParam(role='assistant', content=assistant_content_params))
else:
@@ -476,7 +571,10 @@ async def _get_event_iterator(self) -> AsyncIterator[ModelResponseStreamEvent]:
async for event in self._response:
self._usage += _map_usage(event)
- if isinstance(event, BetaRawContentBlockStartEvent):
+ if isinstance(event, BetaRawMessageStartEvent):
+ pass
+
+ elif isinstance(event, BetaRawContentBlockStartEvent):
current_block = event.content_block
if isinstance(current_block, BetaTextBlock) and current_block.text:
maybe_event = self._parts_manager.handle_text_delta(
@@ -499,6 +597,8 @@ async def _get_event_iterator(self) -> AsyncIterator[ModelResponseStreamEvent]:
)
if maybe_event is not None: # pragma: no branch
yield maybe_event
+ elif isinstance(current_block, BetaServerToolUseBlock):
+ pass
elif isinstance(event, BetaRawContentBlockDeltaEvent):
if isinstance(event.delta, BetaTextDelta):
@@ -528,8 +628,16 @@ async def _get_event_iterator(self) -> AsyncIterator[ModelResponseStreamEvent]:
)
if maybe_event is not None: # pragma: no branch
yield maybe_event
+ elif isinstance(event.delta, BetaInputJSONDelta):
+ pass
+ # TODO(Marcelo): We need to handle citations.
+ elif isinstance(event.delta, BetaCitationsDelta):
+ pass
+
+ elif isinstance(event, BetaRawMessageDeltaEvent):
+ pass
- elif isinstance(event, (BetaRawContentBlockStopEvent, BetaRawMessageStopEvent)):
+ elif isinstance(event, (BetaRawContentBlockStopEvent, BetaRawMessageStopEvent)): # pragma: no branch
current_block = None
@property
diff --git a/pydantic_ai_slim/pydantic_ai/models/bedrock.py b/pydantic_ai_slim/pydantic_ai/models/bedrock.py
index 106c88c2da..db580f5481 100644
--- a/pydantic_ai_slim/pydantic_ai/models/bedrock.py
+++ b/pydantic_ai_slim/pydantic_ai/models/bedrock.py
@@ -15,9 +15,12 @@
from typing_extensions import ParamSpec, assert_never
from pydantic_ai import _utils, usage
+from pydantic_ai.exceptions import UserError
from pydantic_ai.messages import (
AudioUrl,
BinaryContent,
+ BuiltinToolCallPart,
+ BuiltinToolReturnPart,
DocumentUrl,
ImageUrl,
ModelMessage,
@@ -342,6 +345,9 @@ async def _messages_create(
if tool_config:
params['toolConfig'] = tool_config
+ if model_request_parameters.builtin_tools:
+ raise UserError('Bedrock does not support built-in tools')
+
# Bedrock supports a set of specific extra parameters
if model_settings:
if guardrail_config := model_settings.get('bedrock_guardrail_config', None):
@@ -478,6 +484,8 @@ async def _map_messages( # noqa: C901
else:
# NOTE: We don't pass the thinking part to Bedrock for models other than Claude since it raises an error.
pass
+ elif isinstance(item, (BuiltinToolCallPart, BuiltinToolReturnPart)):
+ pass
else:
assert isinstance(item, ToolCallPart)
content.append(self._map_tool_call(item))
diff --git a/pydantic_ai_slim/pydantic_ai/models/cohere.py b/pydantic_ai_slim/pydantic_ai/models/cohere.py
index 5c4577fa5f..e4d0155362 100644
--- a/pydantic_ai_slim/pydantic_ai/models/cohere.py
+++ b/pydantic_ai_slim/pydantic_ai/models/cohere.py
@@ -7,10 +7,13 @@
from typing_extensions import assert_never
from pydantic_ai._thinking_part import split_content_into_text_and_thinking
+from pydantic_ai.exceptions import UserError
from .. import ModelHTTPError, usage
from .._utils import generate_tool_call_id as _generate_tool_call_id, guard_tool_call_id as _guard_tool_call_id
from ..messages import (
+ BuiltinToolCallPart,
+ BuiltinToolReturnPart,
ModelMessage,
ModelRequest,
ModelResponse,
@@ -166,6 +169,10 @@ async def _chat(
model_request_parameters: ModelRequestParameters,
) -> V2ChatResponse:
tools = self._get_tools(model_request_parameters)
+
+ if model_request_parameters.builtin_tools:
+ raise UserError('Cohere does not support built-in tools')
+
cohere_messages = self._map_messages(messages)
try:
return await self.client.chat(
@@ -223,6 +230,9 @@ def _map_messages(self, messages: list[ModelMessage]) -> list[ChatMessageV2]:
pass
elif isinstance(item, ToolCallPart):
tool_calls.append(self._map_tool_call(item))
+ elif isinstance(item, (BuiltinToolCallPart, BuiltinToolReturnPart)): # pragma: no cover
+ # This is currently never returned from cohere
+ pass
else:
assert_never(item)
message_param = AssistantChatMessageV2(role='assistant')
diff --git a/pydantic_ai_slim/pydantic_ai/models/function.py b/pydantic_ai_slim/pydantic_ai/models/function.py
index c48873f046..2455ddb362 100644
--- a/pydantic_ai_slim/pydantic_ai/models/function.py
+++ b/pydantic_ai_slim/pydantic_ai/models/function.py
@@ -17,6 +17,8 @@
from .._utils import PeekableAsyncStream
from ..messages import (
BinaryContent,
+ BuiltinToolCallPart,
+ BuiltinToolReturnPart,
ModelMessage,
ModelRequest,
ModelResponse,
@@ -331,6 +333,13 @@ def _estimate_usage(messages: Iterable[ModelMessage]) -> usage.Usage:
response_tokens += _estimate_string_tokens(part.content)
elif isinstance(part, ToolCallPart):
response_tokens += 1 + _estimate_string_tokens(part.args_as_json_str())
+ # TODO(Marcelo): We need to add coverage here.
+ elif isinstance(part, BuiltinToolCallPart): # pragma: no cover
+ call = part
+ response_tokens += 1 + _estimate_string_tokens(call.args_as_json_str())
+ # TODO(Marcelo): We need to add coverage here.
+ elif isinstance(part, BuiltinToolReturnPart): # pragma: no cover
+ response_tokens += _estimate_string_tokens(part.model_response_str())
else:
assert_never(part)
else:
diff --git a/pydantic_ai_slim/pydantic_ai/models/gemini.py b/pydantic_ai_slim/pydantic_ai/models/gemini.py
index 3c45de8bef..00384b0e96 100644
--- a/pydantic_ai_slim/pydantic_ai/models/gemini.py
+++ b/pydantic_ai_slim/pydantic_ai/models/gemini.py
@@ -20,6 +20,8 @@
from ..exceptions import UserError
from ..messages import (
BinaryContent,
+ BuiltinToolCallPart,
+ BuiltinToolReturnPart,
FileUrl,
ModelMessage,
ModelRequest,
@@ -610,6 +612,9 @@ def _content_model_response(m: ModelResponse) -> _GeminiContent:
elif isinstance(item, TextPart):
if item.content:
parts.append(_GeminiTextPart(text=item.content))
+ elif isinstance(item, (BuiltinToolCallPart, BuiltinToolReturnPart)): # pragma: no cover
+ # This is currently never returned from gemini
+ pass
else:
assert_never(item)
return _GeminiContent(role='model', parts=parts)
diff --git a/pydantic_ai_slim/pydantic_ai/models/google.py b/pydantic_ai_slim/pydantic_ai/models/google.py
index 4524f090a5..031b3b0625 100644
--- a/pydantic_ai_slim/pydantic_ai/models/google.py
+++ b/pydantic_ai_slim/pydantic_ai/models/google.py
@@ -8,13 +8,17 @@
from typing import Any, Literal, Union, cast, overload
from uuid import uuid4
+from google.genai.types import ExecutableCodeDict
from typing_extensions import assert_never
from .. import UnexpectedModelBehavior, _utils, usage
from .._output import OutputObjectDefinition
+from ..builtin_tools import CodeExecutionTool, WebSearchTool
from ..exceptions import UserError
from ..messages import (
BinaryContent,
+ BuiltinToolCallPart,
+ BuiltinToolReturnPart,
FileUrl,
ModelMessage,
ModelRequest,
@@ -54,12 +58,14 @@
FunctionDeclarationDict,
GenerateContentConfigDict,
GenerateContentResponse,
+ GoogleSearchDict,
HttpOptionsDict,
MediaResolution,
Part,
PartDict,
SafetySettingDict,
ThinkingConfigDict,
+ ToolCodeExecutionDict,
ToolConfigDict,
ToolDict,
ToolListUnionDict,
@@ -213,6 +219,11 @@ def _get_tools(self, model_request_parameters: ModelRequestParameters) -> list[T
ToolDict(function_declarations=[_function_declaration_from_tool(t)])
for t in model_request_parameters.output_tools
]
+ for tool in model_request_parameters.builtin_tools:
+ if isinstance(tool, WebSearchTool):
+ tools.append(ToolDict(google_search=GoogleSearchDict()))
+ elif isinstance(tool, CodeExecutionTool): # pragma: no branch
+ tools.append(ToolDict(code_execution=ToolCodeExecutionDict()))
return tools or None
def _get_tool_config(
@@ -499,6 +510,14 @@ def _content_model_response(m: ModelResponse) -> ContentDict:
# please open an issue. The below code is the code to send thinking to the provider.
# parts.append({'text': item.content, 'thought': True})
pass
+ elif isinstance(item, BuiltinToolCallPart):
+ if item.provider_name == 'google':
+ if item.tool_name == 'code_execution': # pragma: no branch
+ parts.append({'executable_code': cast(ExecutableCodeDict, item.args)})
+ elif isinstance(item, BuiltinToolReturnPart):
+ if item.provider_name == 'google':
+ if item.tool_name == 'code_execution': # pragma: no branch
+ parts.append({'code_execution_result': item.content})
else:
assert_never(item)
return ContentDict(role='model', parts=parts)
@@ -513,7 +532,22 @@ def _process_response_from_parts(
) -> ModelResponse:
items: list[ModelResponsePart] = []
for part in parts:
- if part.text is not None:
+ if part.executable_code is not None:
+ items.append(
+ BuiltinToolCallPart(
+ provider_name='google', args=part.executable_code.model_dump(), tool_name='code_execution'
+ )
+ )
+ elif part.code_execution_result is not None:
+ items.append(
+ BuiltinToolReturnPart(
+ provider_name='google',
+ tool_name='code_execution',
+ content=part.code_execution_result,
+ tool_call_id='not_provided',
+ )
+ )
+ elif part.text is not None:
if part.thought:
items.append(ThinkingPart(content=part.text))
else:
@@ -563,7 +597,7 @@ def _metadata_as_usage(response: GenerateContentResponse) -> usage.Usage:
details['thoughts_tokens'] = thoughts_token_count
if tool_use_prompt_token_count := metadata.get('tool_use_prompt_token_count'):
- details['tool_use_prompt_tokens'] = tool_use_prompt_token_count # pragma: no cover
+ details['tool_use_prompt_tokens'] = tool_use_prompt_token_count
for key, metadata_details in metadata.items():
if key.endswith('_details') and metadata_details:
diff --git a/pydantic_ai_slim/pydantic_ai/models/groq.py b/pydantic_ai_slim/pydantic_ai/models/groq.py
index 15e9161491..7783e73f39 100644
--- a/pydantic_ai_slim/pydantic_ai/models/groq.py
+++ b/pydantic_ai_slim/pydantic_ai/models/groq.py
@@ -10,11 +10,16 @@
from typing_extensions import assert_never
from pydantic_ai._thinking_part import split_content_into_text_and_thinking
+from pydantic_ai.exceptions import UserError
+from pydantic_ai.profiles.groq import GroqModelProfile
from .. import ModelHTTPError, UnexpectedModelBehavior, _utils, usage
-from .._utils import guard_tool_call_id as _guard_tool_call_id, number_to_datetime
+from .._utils import generate_tool_call_id, guard_tool_call_id as _guard_tool_call_id, number_to_datetime
+from ..builtin_tools import CodeExecutionTool, WebSearchTool
from ..messages import (
BinaryContent,
+ BuiltinToolCallPart,
+ BuiltinToolReturnPart,
DocumentUrl,
ImageUrl,
ModelMessage,
@@ -212,7 +217,7 @@ async def _completions_create(
model_request_parameters: ModelRequestParameters,
) -> chat.ChatCompletion | AsyncStream[chat.ChatCompletionChunk]:
tools = self._get_tools(model_request_parameters)
- # standalone function to make it easier to override
+ tools += self._get_builtin_tools(model_request_parameters)
if not tools:
tool_choice: Literal['none', 'required', 'auto'] | None = None
elif not model_request_parameters.allow_text_output:
@@ -226,7 +231,7 @@ async def _completions_create(
extra_headers = model_settings.get('extra_headers', {})
extra_headers.setdefault('User-Agent', get_user_agent())
return await self.client.chat.completions.create(
- model=str(self._model_name),
+ model=self._model_name,
messages=groq_messages,
n=1,
parallel_tool_calls=model_settings.get('parallel_tool_calls', NOT_GIVEN),
@@ -256,6 +261,19 @@ def _process_response(self, response: chat.ChatCompletion) -> ModelResponse:
timestamp = number_to_datetime(response.created)
choice = response.choices[0]
items: list[ModelResponsePart] = []
+ if choice.message.executed_tools:
+ for tool in choice.message.executed_tools:
+ tool_call_id = generate_tool_call_id()
+ items.append(
+ BuiltinToolCallPart(
+ tool_name=tool.type, args=tool.arguments, provider_name='groq', tool_call_id=tool_call_id
+ )
+ )
+ items.append(
+ BuiltinToolReturnPart(
+ provider_name='groq', tool_name=tool.type, content=tool.output, tool_call_id=tool_call_id
+ )
+ )
# NOTE: The `reasoning` field is only present if `groq_reasoning_format` is set to `parsed`.
if choice.message.reasoning is not None:
items.append(ThinkingPart(content=choice.message.reasoning))
@@ -291,6 +309,18 @@ def _get_tools(self, model_request_parameters: ModelRequestParameters) -> list[c
tools += [self._map_tool_definition(r) for r in model_request_parameters.output_tools]
return tools
+ def _get_builtin_tools(
+ self, model_request_parameters: ModelRequestParameters
+ ) -> list[chat.ChatCompletionToolParam]:
+ tools: list[chat.ChatCompletionToolParam] = []
+ for tool in model_request_parameters.builtin_tools:
+ if isinstance(tool, WebSearchTool):
+ if not GroqModelProfile.from_profile(self.profile).groq_always_has_web_search_builtin_tool:
+ raise UserError('`WebSearchTool` is not supported by Groq') # pragma: no cover
+ elif isinstance(tool, CodeExecutionTool): # pragma: no branch
+ raise UserError('`CodeExecutionTool` is not supported by Groq')
+ return tools
+
def _map_messages(self, messages: list[ModelMessage]) -> list[chat.ChatCompletionMessageParam]:
"""Just maps a `pydantic_ai.Message` to a `groq.types.ChatCompletionMessageParam`."""
groq_messages: list[chat.ChatCompletionMessageParam] = []
@@ -308,6 +338,9 @@ def _map_messages(self, messages: list[ModelMessage]) -> list[chat.ChatCompletio
elif isinstance(item, ThinkingPart):
# Skip thinking parts when mapping to Groq messages
continue
+ elif isinstance(item, (BuiltinToolCallPart, BuiltinToolReturnPart)): # pragma: no cover
+ # This is currently never returned from groq
+ pass
else:
assert_never(item)
message_param = chat.ChatCompletionAssistantMessageParam(role='assistant')
diff --git a/pydantic_ai_slim/pydantic_ai/models/huggingface.py b/pydantic_ai_slim/pydantic_ai/models/huggingface.py
index 14af7048ac..82d784273e 100644
--- a/pydantic_ai_slim/pydantic_ai/models/huggingface.py
+++ b/pydantic_ai_slim/pydantic_ai/models/huggingface.py
@@ -10,6 +10,7 @@
from typing_extensions import assert_never
from pydantic_ai._thinking_part import split_content_into_text_and_thinking
+from pydantic_ai.exceptions import UserError
from pydantic_ai.providers import Provider, infer_provider
from .. import ModelHTTPError, UnexpectedModelBehavior, _utils, usage
@@ -17,6 +18,8 @@
from ..messages import (
AudioUrl,
BinaryContent,
+ BuiltinToolCallPart,
+ BuiltinToolReturnPart,
DocumentUrl,
ImageUrl,
ModelMessage,
@@ -198,6 +201,9 @@ async def _completions_create(
else:
tool_choice = 'auto'
+ if model_request_parameters.builtin_tools:
+ raise UserError('HuggingFace does not support built-in tools')
+
hf_messages = await self._map_messages(messages)
try:
@@ -301,6 +307,9 @@ async def _map_messages(
# please open an issue. The below code is the code to send thinking to the provider.
# texts.append(f'\n{item.content}\n')
pass
+ elif isinstance(item, (BuiltinToolCallPart, BuiltinToolReturnPart)): # pragma: no cover
+ # This is currently never returned from huggingface
+ pass
else:
assert_never(item)
message_param = ChatCompletionInputMessage(role='assistant') # type: ignore
diff --git a/pydantic_ai_slim/pydantic_ai/models/mistral.py b/pydantic_ai_slim/pydantic_ai/models/mistral.py
index db60b9cd0c..0c20aee67b 100644
--- a/pydantic_ai_slim/pydantic_ai/models/mistral.py
+++ b/pydantic_ai_slim/pydantic_ai/models/mistral.py
@@ -12,11 +12,14 @@
from typing_extensions import assert_never
from pydantic_ai._thinking_part import split_content_into_text_and_thinking
+from pydantic_ai.exceptions import UserError
from .. import ModelHTTPError, UnexpectedModelBehavior, _utils
from .._utils import generate_tool_call_id as _generate_tool_call_id, now_utc as _now_utc, number_to_datetime
from ..messages import (
BinaryContent,
+ BuiltinToolCallPart,
+ BuiltinToolReturnPart,
DocumentUrl,
ImageUrl,
ModelMessage,
@@ -199,6 +202,11 @@ async def _completions_create(
model_request_parameters: ModelRequestParameters,
) -> MistralChatCompletionResponse:
"""Make a non-streaming request to the model."""
+ # TODO(Marcelo): We need to replace the current MistralAI client to use the beta client.
+ # See https://docs.mistral.ai/agents/connectors/websearch/ to support web search.
+ if model_request_parameters.builtin_tools:
+ raise UserError('Mistral does not support built-in tools')
+
try:
response = await self.client.chat.complete_async(
model=str(self._model_name),
@@ -233,6 +241,11 @@ async def _stream_completions_create(
response: MistralEventStreamAsync[MistralCompletionEvent] | None
mistral_messages = self._map_messages(messages)
+ # TODO(Marcelo): We need to replace the current MistralAI client to use the beta client.
+ # See https://docs.mistral.ai/agents/connectors/websearch/ to support web search.
+ if model_request_parameters.builtin_tools:
+ raise UserError('Mistral does not support built-in tools')
+
if (
model_request_parameters.output_tools
and model_request_parameters.function_tools
@@ -502,6 +515,9 @@ def _map_messages(self, messages: list[ModelMessage]) -> list[MistralMessages]:
pass
elif isinstance(part, ToolCallPart):
tool_calls.append(self._map_tool_call(part))
+ elif isinstance(part, (BuiltinToolCallPart, BuiltinToolReturnPart)): # pragma: no cover
+ # This is currently never returned from mistral
+ pass
else:
assert_never(part)
mistral_messages.append(MistralAssistantMessage(content=content_chunks, tool_calls=tool_calls))
diff --git a/pydantic_ai_slim/pydantic_ai/models/openai.py b/pydantic_ai_slim/pydantic_ai/models/openai.py
index 793b9d401e..59f46a5697 100644
--- a/pydantic_ai_slim/pydantic_ai/models/openai.py
+++ b/pydantic_ai_slim/pydantic_ai/models/openai.py
@@ -11,16 +11,18 @@
from pydantic import ValidationError
from typing_extensions import assert_never
-from pydantic_ai._thinking_part import split_content_into_text_and_thinking
-from pydantic_ai.profiles.openai import OpenAIModelProfile
-from pydantic_ai.providers import Provider, infer_provider
+from pydantic_ai.exceptions import UserError
from .. import ModelHTTPError, UnexpectedModelBehavior, _utils, usage
from .._output import DEFAULT_OUTPUT_TOOL_NAME, OutputObjectDefinition
+from .._thinking_part import split_content_into_text_and_thinking
from .._utils import guard_tool_call_id as _guard_tool_call_id, now_utc as _now_utc, number_to_datetime
+from ..builtin_tools import CodeExecutionTool, WebSearchTool
from ..messages import (
AudioUrl,
BinaryContent,
+ BuiltinToolCallPart,
+ BuiltinToolReturnPart,
DocumentUrl,
ImageUrl,
ModelMessage,
@@ -38,16 +40,11 @@
VideoUrl,
)
from ..profiles import ModelProfile, ModelProfileSpec
+from ..profiles.openai import OpenAIModelProfile
+from ..providers import Provider, infer_provider
from ..settings import ModelSettings
from ..tools import ToolDefinition
-from . import (
- Model,
- ModelRequestParameters,
- StreamedResponse,
- check_allow_model_requests,
- download_item,
- get_user_agent,
-)
+from . import Model, ModelRequestParameters, StreamedResponse, check_allow_model_requests, download_item, get_user_agent
try:
from openai import NOT_GIVEN, APIStatusError, AsyncOpenAI, AsyncStream, NotGiven
@@ -63,6 +60,11 @@
from openai.types.chat.chat_completion_content_part_input_audio_param import InputAudio
from openai.types.chat.chat_completion_content_part_param import File, FileFile
from openai.types.chat.chat_completion_prediction_content_param import ChatCompletionPredictionContentParam
+ from openai.types.chat.completion_create_params import (
+ WebSearchOptions,
+ WebSearchOptionsUserLocation,
+ WebSearchOptionsUserLocationApproximate,
+ )
from openai.types.responses import ComputerToolParam, FileSearchToolParam, WebSearchToolParam
from openai.types.responses.response_input_param import FunctionCallOutput, Message
from openai.types.shared import ReasoningEffort
@@ -298,6 +300,8 @@ async def _completions_create(
model_request_parameters: ModelRequestParameters,
) -> chat.ChatCompletion | AsyncStream[ChatCompletionChunk]:
tools = self._get_tools(model_request_parameters)
+ web_search_options = self._get_web_search_options(model_request_parameters)
+
if not tools:
tool_choice: Literal['none', 'required', 'auto'] | None = None
elif (
@@ -344,6 +348,7 @@ async def _completions_create(
seed=model_settings.get('seed', NOT_GIVEN),
reasoning_effort=model_settings.get('openai_reasoning_effort', NOT_GIVEN),
user=model_settings.get('openai_user', NOT_GIVEN),
+ web_search_options=web_search_options or NOT_GIVEN,
service_tier=model_settings.get('openai_service_tier', NOT_GIVEN),
prediction=model_settings.get('openai_prediction', NOT_GIVEN),
temperature=sampling_settings.get('temperature', NOT_GIVEN),
@@ -444,6 +449,21 @@ def _get_tools(self, model_request_parameters: ModelRequestParameters) -> list[c
tools += [self._map_tool_definition(r) for r in model_request_parameters.output_tools]
return tools
+ def _get_web_search_options(self, model_request_parameters: ModelRequestParameters) -> WebSearchOptions | None:
+ for tool in model_request_parameters.builtin_tools:
+ if isinstance(tool, WebSearchTool): # pragma: no branch
+ if tool.user_location:
+ return WebSearchOptions(
+ search_context_size=tool.search_context_size,
+ user_location=WebSearchOptionsUserLocation(
+ type='approximate',
+ approximate=WebSearchOptionsUserLocationApproximate(**tool.user_location),
+ ),
+ )
+ return WebSearchOptions(search_context_size=tool.search_context_size)
+ elif isinstance(tool, CodeExecutionTool): # pragma: no branch
+ raise UserError('`CodeExecutionTool` is not supported by OpenAI')
+
async def _map_messages(self, messages: list[ModelMessage]) -> list[chat.ChatCompletionMessageParam]:
"""Just maps a `pydantic_ai.Message` to a `openai.types.ChatCompletionMessageParam`."""
openai_messages: list[chat.ChatCompletionMessageParam] = []
@@ -464,6 +484,9 @@ async def _map_messages(self, messages: list[ModelMessage]) -> list[chat.ChatCom
pass
elif isinstance(item, ToolCallPart):
tool_calls.append(self._map_tool_call(item))
+ # OpenAI doesn't return built-in tool calls
+ elif isinstance(item, (BuiltinToolCallPart, BuiltinToolReturnPart)): # pragma: no cover
+ pass
else:
assert_never(item)
message_param = chat.ChatCompletionAssistantMessageParam(role='assistant')
@@ -753,7 +776,7 @@ async def _responses_create(
model_request_parameters: ModelRequestParameters,
) -> responses.Response | AsyncStream[responses.ResponseStreamEvent]:
tools = self._get_tools(model_request_parameters)
- tools = list(model_settings.get('openai_builtin_tools', [])) + tools
+ tools = self._get_builtin_tools(model_request_parameters) + tools
if not tools:
tool_choice: Literal['none', 'required', 'auto'] | None = None
@@ -841,6 +864,22 @@ def _get_tools(self, model_request_parameters: ModelRequestParameters) -> list[r
tools += [self._map_tool_definition(r) for r in model_request_parameters.output_tools]
return tools
+ def _get_builtin_tools(self, model_request_parameters: ModelRequestParameters) -> list[responses.ToolParam]:
+ tools: list[responses.ToolParam] = []
+ for tool in model_request_parameters.builtin_tools:
+ if isinstance(tool, WebSearchTool):
+ web_search_tool = responses.WebSearchToolParam(
+ type='web_search_preview', search_context_size=tool.search_context_size
+ )
+ if tool.user_location:
+ web_search_tool['user_location'] = responses.web_search_tool_param.UserLocation(
+ type='approximate', **tool.user_location
+ )
+ tools.append(web_search_tool)
+ elif isinstance(tool, CodeExecutionTool): # pragma: no branch
+ tools.append({'type': 'code_interpreter', 'container': {'type': 'auto'}})
+ return tools
+
def _map_tool_definition(self, f: ToolDefinition) -> responses.FunctionToolParam:
return {
'name': f.name,
@@ -895,6 +934,9 @@ async def _map_messages(
openai_messages.append(responses.EasyInputMessageParam(role='assistant', content=item.content))
elif isinstance(item, ToolCallPart):
openai_messages.append(self._map_tool_call(item))
+ # OpenAI doesn't return built-in tool calls
+ elif isinstance(item, (BuiltinToolCallPart, BuiltinToolReturnPart)):
+ pass
elif isinstance(item, ThinkingPart):
# NOTE: We don't send ThinkingPart to the providers yet. If you are unsatisfied with this,
# please open an issue. The below code is the code to send thinking to the provider.
@@ -1071,6 +1113,7 @@ class OpenAIResponsesStreamedResponse(StreamedResponse):
async def _get_event_iterator(self) -> AsyncIterator[ModelResponseStreamEvent]: # noqa: C901
async for chunk in self._response:
+ # NOTE: You can inspect the builtin tools used checking the `ResponseCompletedEvent`.
if isinstance(chunk, responses.ResponseCompletedEvent):
self._usage += _map_usage(chunk.response)
@@ -1122,6 +1165,8 @@ async def _get_event_iterator(self) -> AsyncIterator[ModelResponseStreamEvent]:
)
elif isinstance(chunk.item, responses.ResponseOutputMessage):
pass
+ elif isinstance(chunk.item, responses.ResponseFunctionWebSearch):
+ pass
else:
warnings.warn( # pragma: no cover
f'Handling of this item type is not yet implemented. Please report on our GitHub: {chunk}',
@@ -1148,6 +1193,10 @@ async def _get_event_iterator(self) -> AsyncIterator[ModelResponseStreamEvent]:
signature=chunk.item_id,
)
+ # TODO(Marcelo): We should support annotations in the future.
+ elif isinstance(chunk, responses.ResponseOutputTextAnnotationAddedEvent):
+ pass # there's nothing we need to do here
+
elif isinstance(chunk, responses.ResponseTextDeltaEvent):
maybe_event = self._parts_manager.handle_text_delta(
vendor_part_id=chunk.content_index, content=chunk.delta
@@ -1158,6 +1207,18 @@ async def _get_event_iterator(self) -> AsyncIterator[ModelResponseStreamEvent]:
elif isinstance(chunk, responses.ResponseTextDoneEvent):
pass # there's nothing we need to do here
+ elif isinstance(chunk, responses.ResponseWebSearchCallInProgressEvent):
+ pass # there's nothing we need to do here
+
+ elif isinstance(chunk, responses.ResponseWebSearchCallSearchingEvent):
+ pass # there's nothing we need to do here
+
+ elif isinstance(chunk, responses.ResponseWebSearchCallCompletedEvent):
+ pass # there's nothing we need to do here
+
+ elif isinstance(chunk, responses.ResponseAudioDeltaEvent): # pragma: lax no cover
+ pass # there's nothing we need to do here
+
else: # pragma: no cover
warnings.warn(
f'Handling of this event type is not yet implemented. Please report on our GitHub: {chunk}',
diff --git a/pydantic_ai_slim/pydantic_ai/models/test.py b/pydantic_ai_slim/pydantic_ai/models/test.py
index 56a06e5950..73707d6d77 100644
--- a/pydantic_ai_slim/pydantic_ai/models/test.py
+++ b/pydantic_ai_slim/pydantic_ai/models/test.py
@@ -12,7 +12,10 @@
from typing_extensions import assert_never
from .. import _utils
+from ..exceptions import UserError
from ..messages import (
+ BuiltinToolCallPart,
+ BuiltinToolReturnPart,
ModelMessage,
ModelRequest,
ModelResponse,
@@ -179,6 +182,9 @@ def _request(
model_settings: ModelSettings | None,
model_request_parameters: ModelRequestParameters,
) -> ModelResponse:
+ if model_request_parameters.builtin_tools:
+ raise UserError('TestModel does not support built-in tools')
+
tool_calls = self._get_tool_calls(model_request_parameters)
output_wrapper = self._get_output(model_request_parameters)
output_tools = model_request_parameters.output_tools
@@ -283,6 +289,9 @@ async def _get_event_iterator(self) -> AsyncIterator[ModelResponseStreamEvent]:
yield self._parts_manager.handle_tool_call_part(
vendor_part_id=i, tool_name=part.tool_name, args=part.args, tool_call_id=part.tool_call_id
)
+ elif isinstance(part, (BuiltinToolCallPart, BuiltinToolReturnPart)): # pragma: no cover
+ # NOTE: These parts are not generated by TestModel, but we need to handle them for type checking
+ assert False, f'Unexpected part type in TestModel: {type(part).__name__}'
elif isinstance(part, ThinkingPart): # pragma: no cover
# NOTE: There's no way to reach this part of the code, since we don't generate ThinkingPart on TestModel.
assert False, "This should be unreachable — we don't generate ThinkingPart on TestModel."
diff --git a/pydantic_ai_slim/pydantic_ai/profiles/groq.py b/pydantic_ai_slim/pydantic_ai/profiles/groq.py
new file mode 100644
index 0000000000..e32d323896
--- /dev/null
+++ b/pydantic_ai_slim/pydantic_ai/profiles/groq.py
@@ -0,0 +1,23 @@
+from __future__ import annotations as _annotations
+
+from dataclasses import dataclass
+
+from . import ModelProfile
+
+
+@dataclass
+class GroqModelProfile(ModelProfile):
+ """Profile for models used with GroqModel.
+
+ ALL FIELDS MUST BE `groq_` PREFIXED SO YOU CAN MERGE THEM WITH OTHER MODELS.
+ """
+
+ groq_always_has_web_search_builtin_tool: bool = False
+ """Whether the model always has the web search built-in tool available."""
+
+
+def groq_model_profile(model_name: str) -> ModelProfile:
+ """Get the model profile for a Groq model."""
+ return GroqModelProfile(
+ groq_always_has_web_search_builtin_tool=model_name.startswith('compound-'),
+ )
diff --git a/pydantic_ai_slim/pydantic_ai/providers/groq.py b/pydantic_ai_slim/pydantic_ai/providers/groq.py
index 9deada0b09..8b2f2ae528 100644
--- a/pydantic_ai_slim/pydantic_ai/providers/groq.py
+++ b/pydantic_ai_slim/pydantic_ai/providers/groq.py
@@ -10,6 +10,7 @@
from pydantic_ai.profiles import ModelProfile
from pydantic_ai.profiles.deepseek import deepseek_model_profile
from pydantic_ai.profiles.google import google_model_profile
+from pydantic_ai.profiles.groq import groq_model_profile
from pydantic_ai.profiles.meta import meta_model_profile
from pydantic_ai.profiles.mistral import mistral_model_profile
from pydantic_ai.profiles.moonshotai import moonshotai_model_profile
@@ -49,6 +50,7 @@ def model_profile(self, model_name: str) -> ModelProfile | None:
'deepseek': deepseek_model_profile,
'mistral': mistral_model_profile,
'moonshotai/': moonshotai_model_profile,
+ 'compound-': groq_model_profile,
}
for prefix, profile_func in prefix_to_profile.items():
diff --git a/pydantic_ai_slim/pyproject.toml b/pydantic_ai_slim/pyproject.toml
index dfa63f6da1..47c758af5d 100644
--- a/pydantic_ai_slim/pyproject.toml
+++ b/pydantic_ai_slim/pyproject.toml
@@ -67,7 +67,7 @@ cohere = ["cohere>=5.16.0; platform_system != 'Emscripten'"]
vertexai = ["google-auth>=2.36.0", "requests>=2.32.2"]
google = ["google-genai>=1.28.0"]
anthropic = ["anthropic>=0.61.0"]
-groq = ["groq>=0.19.0"]
+groq = ["groq>=0.25.0"]
mistral = ["mistralai>=1.9.2"]
bedrock = ["boto3>=1.39.0"]
huggingface = ["huggingface-hub[inference]>=0.33.5"]
diff --git a/tests/conftest.py b/tests/conftest.py
index 1d6d7b8ab3..84a6436bed 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -452,7 +452,11 @@ def model(
bedrock_provider: BedrockProvider,
) -> Model: # pragma: lax no cover
try:
- if request.param == 'openai':
+ if request.param == 'test':
+ from pydantic_ai.models.test import TestModel
+
+ return TestModel()
+ elif request.param == 'openai':
from pydantic_ai.models.openai import OpenAIModel
from pydantic_ai.providers.openai import OpenAIProvider
diff --git a/tests/models/cassettes/test_anthropic/test_anthropic_code_execution_tool.yaml b/tests/models/cassettes/test_anthropic/test_anthropic_code_execution_tool.yaml
new file mode 100644
index 0000000000..76f19dc008
--- /dev/null
+++ b/tests/models/cassettes/test_anthropic/test_anthropic_code_execution_tool.yaml
@@ -0,0 +1,86 @@
+interactions:
+- request:
+ headers:
+ accept:
+ - application/json
+ accept-encoding:
+ - gzip, deflate
+ connection:
+ - keep-alive
+ content-length:
+ - '250'
+ content-type:
+ - application/json
+ host:
+ - api.anthropic.com
+ method: POST
+ parsed_body:
+ max_tokens: 1024
+ messages:
+ - content:
+ - text: How much is 3 * 12390?
+ type: text
+ role: user
+ model: claude-sonnet-4-0
+ stream: false
+ tool_choice:
+ type: auto
+ tools:
+ - name: code_execution
+ type: code_execution_20250522
+ uri: https://api.anthropic.com/v1/messages?beta=true
+ response:
+ headers:
+ connection:
+ - keep-alive
+ content-length:
+ - '927'
+ content-type:
+ - application/json
+ strict-transport-security:
+ - max-age=31536000; includeSubDomains; preload
+ transfer-encoding:
+ - chunked
+ parsed_body:
+ container:
+ expires_at: '2025-05-26T13:30:45.703429+00:00'
+ id: container_011CPW9LpfbF8dmXMvVNCiQJ
+ content:
+ - text: I'll calculate 3 * 12390 for you.
+ type: text
+ - id: srvtoolu_01CPfaeVC7ju4VsdzxjSLDrY
+ input:
+ code: |-
+ result = 3 * 12390
+ print(f"3 * 12390 = {result}")
+ name: code_execution
+ type: server_tool_use
+ - content:
+ content: []
+ return_code: 0
+ stderr: ''
+ stdout: |
+ 3 * 12390 = 37170
+ type: code_execution_result
+ tool_use_id: srvtoolu_01CPfaeVC7ju4VsdzxjSLDrY
+ type: code_execution_tool_result
+ - text: The answer is **37,170**.
+ type: text
+ id: msg_015H6Emn2T8vZhE52mU2jF1U
+ model: claude-sonnet-4-20250514
+ role: assistant
+ stop_reason: end_turn
+ stop_sequence: null
+ type: message
+ usage:
+ cache_creation_input_tokens: 0
+ cache_read_input_tokens: 0
+ input_tokens: 1630
+ output_tokens: 105
+ server_tool_use:
+ web_search_requests: 0
+ service_tier: standard
+ status:
+ code: 200
+ message: OK
+version: 1
diff --git a/tests/models/cassettes/test_anthropic/test_anthropic_server_tool_pass_history_to_another_provider.yaml b/tests/models/cassettes/test_anthropic/test_anthropic_server_tool_pass_history_to_another_provider.yaml
new file mode 100644
index 0000000000..a73ea3aa45
--- /dev/null
+++ b/tests/models/cassettes/test_anthropic/test_anthropic_server_tool_pass_history_to_another_provider.yaml
@@ -0,0 +1,280 @@
+interactions:
+- request:
+ headers:
+ accept:
+ - application/json
+ accept-encoding:
+ - gzip, deflate
+ connection:
+ - keep-alive
+ content-length:
+ - '312'
+ content-type:
+ - application/json
+ host:
+ - api.anthropic.com
+ method: POST
+ parsed_body:
+ max_tokens: 1024
+ messages:
+ - content:
+ - text: What day is today?
+ type: text
+ role: user
+ model: claude-3-5-sonnet-latest
+ stream: false
+ tool_choice:
+ type: auto
+ tools:
+ - allowed_domains: null
+ blocked_domains: null
+ name: web_search
+ type: web_search_20250305
+ user_location: null
+ uri: https://api.anthropic.com/v1/messages?beta=true
+ response:
+ headers:
+ connection:
+ - keep-alive
+ content-length:
+ - '15304'
+ content-type:
+ - application/json
+ strict-transport-security:
+ - max-age=31536000; includeSubDomains; preload
+ transfer-encoding:
+ - chunked
+ parsed_body:
+ content:
+ - text: Let me search for today's date.
+ type: text
+ - id: srvtoolu_01BJh8n7va96puUF3hhNnYnY
+ input:
+ query: current date today May 26 2025
+ name: web_search
+ type: server_tool_use
+ - content:
+ - encrypted_content: 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
+ page_age: null
+ title: May 2025 Calendar
+ type: web_search_result
+ url: https://www.calendar-365.com/calendar/2025/May.html
+ - encrypted_content: EuwCCioIAxgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDNOs+T2nScTnsxVJZRoM3g9Mm5RlKN0sgiPBIjC1PJPZRfoUgRpmpfVZcF8sBTMUr6Lu9BK9xOxTQ8nMMBGjC7kFOrwJZ3ENgXLhRzcq7wF51cgLQ+Pb0MiXBGozKXa1r7DbogMoIacrDz92bvzbwXbo4mTQMipnow47//PYVelJXipxVAA6ISswEiYPGXyCjqSy6QEIde1TOc8nvMpaM0Y4u3DdOXez5EsgP+ZxIYly/I7JS35h/azV0nbpzEKsptZwNWwuBtNIYbkklPaluda13QbkE0KK1Cl6PnkNMVbO0Uo9XURcwLn5aDLJol0GJGVpuiApXVJoMk7e7L/Ib+p1BE77VW619KzDmQvuAjQXZR28Fb5KEbRxXkSaq7xAZnYZyQFtOlqg/07Tv+V4g0WYZhI3tn0phBe0w+95NhgD
+ page_age: null
+ title: May 26, 2025 Calendar with Holidays & Count Down - USA
+ type: web_search_result
+ url: https://www.wincalendar.com/Calendar/Date/May-26-2025
+ - encrypted_content: Es0ICioIAxgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDE+yP8aOxk+46r0AERoMFOlAyJD/AGdtDxeVIjDDhlbQbqqMmuMK9bN7ZNTwHWQwahkAaZd/LltU3eIPifLnfk4Apnck+mUOM61zRiQq0Ac12DCFUzhrlxvkXqpK3gWjgosGbUyzt8WbmwSaEmCbXf9F4bNc7+LKvQUtEceYmCesYcQa0lOT+88IhhRTxYBMyXo0Ws3Pw1yrLJi9P1JqfpcnWebg8McOGY/pD/MFeJORQvH+0UvGjBoMD0uaPPY1U6cFC7EWL+IebMjjmpj80RqAi/xjOOnU2XO8N98dFCzW4GiI9IWut8OBv8u3kLpmyYOV6cVxr3WTEntDv3onveQvTIyJFiDG8bmOKK72ONWrevnrKGQ7JY2gPYp5CakS+SYahIKiJOOY3cWQfUEheIfEZeuGadI907uvREyb1bf4h/0KsFjnOBWrHXdl7LIDRSfz8OIwfJufTERGCfG0vzMiHzFJbFcezciz3K9m25QjxL676NcrYbgZGFhIXar9jNvPAjGcUecpaOLAEztHx7pd0nHMsW5KKUTS0yU5sMFNY1+RMSKk8kVoCcBtOuOsiegf+BJV/J997IvbQG5A7h/72VsVyUbiBDT1z77VjKTPcerZr4EReCobAoyGdMKt1mihwvYvsyvZepAkvrxOoKnb+2pkzhZQtxGt0ub23yhSZyLgi0frVSS04KeYncVWW7cQJJygzfDS37pdSPnU0wZmAgZLzQ3X1NVmR9AQVSQ+IcIoVSCuru/WiBcS7aJPC4uh6cn5sB9C6yThrD8i7T7DJGbR/uutIADP9IgGUzdoppStgQugx4TwnQI9SC6e36zjfsK6NeUkxLi2b4T1uuRDvjgUDc0OXGZdoGQgc8nHoe7rexoLJqeWat19KNwy4DqnM7oywivVJWDJ2ThV4863f3+hYRlXeuxnojBsmENJsSxZtF46ye1gfPSvBYlEpO/Uu9FzR3yy4bB3b/qOh2+JMTLkk3R5u4C6Ca/Nye0bpnsKG7xjW2cKguqfKhUuUFaSucCCJqg/hT21DlUiHXZQ6wq6Ywi9C9l+wJbzfJWWHczjkTJvWhFq8saXSAzfWDd8tTKH1zje7NN38jRQPUDxS0CWMM78/+BgWoqsB5+IjkEl5QHV55GSCg+05HQPLyHQWWjBdMLWr+Uu3T0kKI0B/QDJPHO1mSX5AsGot5HZzva5qEPzn3vGly1n1vs14JWE+RrtIJTBHi0ypFhaO6oCRGejMRDbZhotP4gWW1VW0gLNikgfW0Z5waOb8wmLcN4vQhsHRFfZiXsqUF0dTXsme8+kF8qcVZNnPtghyf1ACvFgZ8TAF4PaM1wzpa8kDeBFvyp14U39R8XDJ3T6lGWR2rpv0WjS8d5h0RCZ3XlFuqPUXWEQ89OpEH8vEiYXGAM=
+ page_age: null
+ title: Daily Calendar for Monday, May 26, 2025 | Almanac.com
+ type: web_search_result
+ url: https://www.almanac.com/calendar/date/2025-05-26
+ - encrypted_content: EpoFCioIAxgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDClGwxB0YzJdub7VGhoMASvr8D1KqeBCa4knIjAV1lHpDjDIw6nag+Y/ax/aq2LhfZ1/CXJoRyRFiUGLVQHpERodH6/Kg+l8aLy01gAqnQQR8cCm+MlfMM3pSSNah8dZ0m5wam3enQ+5A3VLu0P/CF/TlwL5yB21pfaiu0lad9Ee99YFvs7LInvXpyFcUgLuhankIzNNZZbUIeS4sZIK39RrN+pmifOl6KQqT1f2tpJE6x7erDlAscnMvbRIr9U8Pwf8Au709bI6zcHqCg4GNJk2CqDf6kAXRHRRhcWYFtm8b0wvg9HaWVYZFOunZMJ1gFD3D82dSm3m4awyDSZm54A/9hmzE/lcQyiSVBC73NOmJMBxbNec16qaeJdUTZp33JYk0Fdro1VnkUiJyq5Kb2W7VYvfeQ1a2dLXPTYIsXeQXLHesmVTe7m0X70w0BgCAC+yKZPp68bbsEbsbjwxaWOxQ50seu8kkXDiEgscUK5e4N5YnPXMNjyMNZmlbhmFtw3abOmOCVdpcDORXGOgJZBWBkEqQ4mE8b+aEzXMGRqLzYjDKZHx11wolF3MGu/V/+f4lWEyNwR2Kipp67teOx1ypvl4DiZiPVkZwx9lt08u+TJGEGbTYtdPMQRLVX1K2K4YOEcP5/abNrdT9KdYH7dNscRDqDY04gi+47JyyTSRObcCjQun9LUqh0q6/NfIIWQwjguZ6dbYL67ymiuRgHJDXsPnc/P58qP4kRsClz9lu/XPTFuAzCQwaXioK3XiBNW73nSKyRaxm6/OxbYetPGIG2JUTkQtrmGL5AYJTfFbI6XOB1AFDcsoSC7nGAM=
+ page_age: null
+ title: How long ago was May 26th 2025? | howlongagogo.com
+ type: web_search_result
+ url: https://howlongagogo.com/date/2025/may/26
+ - encrypted_content: Eq0DCioIAxgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDDT/5zRyvf5kzhhLgxoM5vWn/Zjmu43rvWgPIjCf4z9SIoZxgNKyiLOqk422DLmHbFXGX+mhy6FPo43NOogfLhu/a3F3EPkiMxfd0UMqsAKIhRJKuEhfoi2saPCA3LpNhJ3YPO2NZyYL75SJdCbkfACe2YJOcCXHmt4hkrbA98Mrvh9DmtP6HNA9iYdsotXkDi0BuTlmiIcspblXnkpXLIURVpNYqqZ2jbjBEmi/mVlTonm9NJwx1rZHzwciKhaIrz440Vk/uTIqpiMb22U00hWrQ563gNlMSXpvIpyayhJcCnNEjQybJjQUsKaMqb/3Xbp8NUoWtidUb4ARNeoNe4BlzMEEcIPc0QWi1CKoQJH3JazxAhMSqvc4SVWXRyspZZP6lSHhMcIYlf/yorVYVF3FmL1djZfxXbVnI/VbFbpoNejvnOh5QIdbDrHu6UN3u2iGZBUJLgs6i9OUwMWw8kpi2WUm+3JeRkdyThE0M9WAhK+4qYD3UHgFCcucX7ZeGAM=
+ page_age: null
+ title: How many days until 26th May 2025?
+ type: web_search_result
+ url: https://days.to/26-may/2025
+ - encrypted_content: EpACCioIAxgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDNXuvVNnWjvXgGql0RoMXwqBXk4fJbTzoM0pIjC1HFbYVJOlp39xpYzw/uJVUO6cC2L9ScOu9ceP2MDjyBWuE0X2LxBsyFjM3ZwzQtYqkwHukWybclFQu5CuM7gntDFNVYsSAVDbslXo5WwOlljEXnC7ohNjuB4lJfXS5HomdOmnUs0/thHHvR5mvCvHt5o+XrnTV8PSOXJvZonVctfjBeMe/3VWaQX2Pr8F71hiBVghYnc4lqnvA/nebBXcqdz2VTlG7V2/u+KCGVfR27l0+BX9s8vroR6dZ7flEBZBSDDzt3QYAw==
+ page_age: null
+ title: What day of the week will May 26th 2025 be on? | howlongagogo.com
+ type: web_search_result
+ url: https://howlongagogo.com/day-of-the-week/2025-05-26
+ - encrypted_content: EtkGCioIAxgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDNqnvrEdyAJMqZiouRoMl3zAD6YOqFa5Y+LGIjCFzjG2cb9Uv/fUGE2iFHKU3CP5i7yVrpvusD4UBOrARkME7qTDdfIczSbj1PvU7ygq3AUQ9yGVSgg9AB7qawws2Zx43sVi5sDW/thrC8owactbSzc2qE9IsmucxwknSZXemJFSMW3I2vWhlpJVcfipESwRyVSnVNoTivU7/aIbnI15/NOGATtd/TR0mkyO2MMMAFIHiEfq0iuvMUX/EmnEqlSzDngrlWdPvb0qDrZIkSVEYFE5FEPHXuXEFEWZ/yLs7rUK7M9kc161gTbQ/NMALrWDjKtFtgI20Wf2luvbfX8G8kivyPttdUk9aiBxStWetpJZqsBEGT1auj3hk7FaHU2FTNW0LGvIe++QZNL+w/nKa+YuNGpJCxAiLt3X+2hnZmz8Mskfyfl5I5EWt7eOQmoR0qStl7Fh9Myb3vZ0rpZ8gZeaLd1xn6pKKa+tBonm1Oq1zQvsoMkMwTcMRK3LA53dF3rtkgSFyBAWis/tenbdrRVUGlicecn/bSd9FVFoGM5RWYvXR9/3zr3SBf2qNTT2jmeLqcl07LYUk+WDGcas6vAVGDXxVoAh+uAC0WziUtKfv//V4IeleGEOLJNdX1jDC8uQMKyGuRCXNRJAoHRhgUr2F46Ax9xJOHWXKDheklfqTFff0wf93d5U/d4p52RaeM7jcBexjz0wMQRBL91ZOZVweRHbV2BVTBpPH79Y9W/UmBEycRnTmurJJspZre10EVH7MIX/4DRhxBipdZrQFgqTrCgbN6dRFLlQR9w1n+Y2pSEXnSeHdwOTPVHSKBKQO43XCKWmJPgNFELcRBZdVxGcE9xd2/dzs0C6Aa7vXZ/5ZPx9rgis1TY2UegdpiyWmKV0yw1K2LKpq8BOdH4t3OPDTPvJrymaZwldTb+w6rLGf0p1YAkZIBPpUX9tAstQ1HAz58zHnLhQfUzpm5ft4S3m2i+WkyjzIkh4F2Y1bIvbwQvqT2x3rGJRRWJGyg9PDEVCY4gjKObhjkQbanRG58uPuf7mBofFqKbUBJOngnAvSmGibWNn9uSftf8YAw==
+ page_age: null
+ title: Calendar 2025
+ type: web_search_result
+ url: https://www.timeanddate.com/calendar/
+ - encrypted_content: Eq0CCioIAxgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDJI9LlFy1IIRylVnDxoMIXCLnspt86G8qxeIIjD0AiJH0r4ULSsSOXmrBj0ntQEjeADrBeCC4P53iCMga7fv0Uxic9EYRY73zIkr7aAqsAFql3nOsfaopCrkf/WC9qvKgDAeuBfKcTNjj+rfHn5HXgVM4BOpomSXxBc0CHUe3Heqw2mD9+Hy99flWI60pgPB+umunXeOjz5HC4W1q39ROTzvMkdpJzvXoUgG/dbgjJ9vEvZ0VC4z+ZwRAYSNgOgiRt3zApcZJ4iSsF/XgrQNs2L2ThcQyc84+lKKAaKPrSl6Lwm1bH+HTFYIm9KPyhvlbfEbp5buj/wQgn4Na/3qrhgD
+ page_age: null
+ title: May 26
+ type: web_search_result
+ url: https://www.nationaldaycalendar.com/may/may-26
+ - encrypted_content: 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
+ page_age: null
+ title: Day Numbers for 2025
+ type: web_search_result
+ url: https://www.epochconverter.com/days/2025
+ - encrypted_content: EosGCioIAxgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDDVXhko+GaoaARLiWxoMhhwixTlmn7YeimyXIjBqLMdGYisjngIKCxw2kKV4whivBWinF+rFSah3+1JUtoRUor9o+HmU0StGZxaPydsqjgUGl0OUiZ7Dlc0YqCN8bOGaoUeUv7MpoODHTH97tj67PKZmSbEkDp0J1bJzxHd4WeL1SdNnExDsDcSk4joJFA4lBVAAgxvBogir7w/ws8fRoANAp3F4T9IoZHSQVR2PhtRpymmT1JIaelypYDnda1cLVKrOhF26o8zSp3sDKsilZRW7TSGG1YmzEEKdFK0h/jrGO9yr35kL8vzIF1vdXeJbJa79pFo8e1OLxq9Z2e3y5thBAB3aMK+WMT6n3vRaaRpG4/sqL69lUB/J8Ju1X2VAqfUhYe1GbTKVwAqv+Fllq/NQfZywAaqkHF0YqzMFNYYNB0KTpzrPetfmvXMvog2I0qn8Xuuefw6ROAgsUJaIbyY2b2AbO9Ohxlqv08Lgt/CEmghIi2I/zvt4Y5AjUZzpRUqYAomrkagze50qj5P5Mj191pU+SLehkArpjDp131C5k3jhJ/6m7EaRpv7R4JWxWZCETvqonBRkooPRYqTZkHAD61WjNrFzDOn3fOHjrK9XjQMYE6C9rLOQf/Cy3XdlJgmSa6OKzak0NhRzIA8h7O16Mlf5kaMz5gW4vhIY/luKVQCgo7O39nxitIw94BlW0u0qT0XzCFgS05ADWdIC7SHJaU8NB4x2h0zQTTX2P5m0U2giLYPO86lUWicae08l14+JUB+uPlpDhNU7UQl29SM77+XnzdGiX/Kk99k8FcMrgp6+X5riQWuE0+rBhuDzOnVhGOgFCazxWCIpXIAvYqin429shbJtttU/upLPrbj9HsXpCJjOPI7+FLK7JXH5tH3rz1OCa/14jkNd4GTg5eGNnJSDgSJ2dWxC9oRQyFub6rPc58n9BCkHzcqrF502Q4TTEfNUuQsqBMJL8yEYAw==
+ page_age: null
+ title: Countdown to May 26, 2025 in Washington DC, District of Columbia
+ type: web_search_result
+ url: https://www.timeanddate.com/countdown/to?msg=Cressida_Glitter's+birthday&year=2025&month=5&day=26&hour=0&min=0&sec=0&fromtheme=birthday
+ tool_use_id: srvtoolu_01BJh8n7va96puUF3hhNnYnY
+ type: web_search_tool_result
+ - text: "\n\nBased on the search results, "
+ type: text
+ - citations:
+ - cited_text: Current moon phase · Moon calendar 2025 · Moon phases (Full Moon) 2025 & 2026 · World Clock · World
+ Clock · Calculate · Period between two dates · Mon...
+ encrypted_index: Eo8BCioIAxgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDEgJNRfMEmnW19PSuBoMpvnoqkDvIRkx6yxdIjBNsAkQg3SrCCN1zCEKO4LtptywdqMNvgULDnwzA4e8JoIj6nDuov4EZIdg37AOh2QqEx0w/3OTuMMUW8z0FsIsEkBStrkYBA==
+ title: May 2025 Calendar
+ type: web_search_result_location
+ url: https://www.calendar-365.com/calendar/2025/May.html
+ text: today is Monday, May 26, 2025 (Week 22)
+ type: text
+ - text: '. This is notably '
+ type: text
+ - citations:
+ - cited_text: The custom of honoring ancestors by cleaning cemeteries and decorating graves is an ancient and worldwide
+ tradition, but the specific origin of Memori...
+ encrypted_index: Eo8BCioIAxgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDDh1HLd3wIXrMlbIYRoMJbIyO6jhVRytVw9tIjBp5E9G6P/4oCUT+AvhQia2q7og82j1ZKFJMEyZllOT5wNB8wxo/hua8sprObTuApUqEwNbgxwhB3Rzdzbu8jotXE3VzSYYBA==
+ title: Daily Calendar for Monday, May 26, 2025 | Almanac.com
+ type: web_search_result_location
+ url: https://www.almanac.com/calendar/date/2025-05-26
+ text: Memorial Day, which was originally known as Decoration Day
+ type: text
+ - text: '. '
+ type: text
+ - citations:
+ - cited_text: 'The year 2025 has 365 days. '
+ encrypted_index: Eo8BCioIAxgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDGSJfkRRZt9POYx8TRoM9ZykWxngb2XQ3vvZIjDwg7OYkVRW8t1wzFmTQ1TL5akbS2y3zcQRN/I2nU4v3NsNZbfOSHEBhWOql3U/nekqE4EtVZ7XYLel8iTWpvOfRFX8iUAYBA==
+ title: Day Numbers for 2025
+ type: web_search_result_location
+ url: https://www.epochconverter.com/days/2025
+ text: The year 2025 is a regular year with 365 days
+ type: text
+ - text: .
+ type: text
+ id: msg_014DEwKKUs2hUThC8aqhrc5d
+ model: claude-3-5-sonnet-20241022
+ role: assistant
+ stop_reason: end_turn
+ stop_sequence: null
+ type: message
+ usage:
+ cache_creation_input_tokens: 0
+ cache_read_input_tokens: 0
+ input_tokens: 9582
+ output_tokens: 178
+ server_tool_use:
+ web_search_requests: 1
+ service_tier: standard
+ status:
+ code: 200
+ message: OK
+- request:
+ headers:
+ accept:
+ - application/json
+ accept-encoding:
+ - gzip, deflate
+ connection:
+ - keep-alive
+ content-length:
+ - '732'
+ content-type:
+ - application/json
+ host:
+ - api.openai.com
+ method: POST
+ parsed_body:
+ input:
+ - content: What day is today?
+ role: user
+ - content: Let me search for today's date.
+ role: assistant
+ - content: "\n\nBased on the search results, "
+ role: assistant
+ - content: today is Monday, May 26, 2025 (Week 22)
+ role: assistant
+ - content: '. This is notably '
+ role: assistant
+ - content: Memorial Day, which was originally known as Decoration Day
+ role: assistant
+ - content: '. '
+ role: assistant
+ - content: The year 2025 is a regular year with 365 days
+ role: assistant
+ - content: .
+ role: assistant
+ - content: What day is tomorrow?
+ role: user
+ model: gpt-4.1
+ stream: false
+ tool_choice: auto
+ tools:
+ - search_context_size: medium
+ type: web_search_preview
+ uri: https://api.openai.com/v1/responses
+ response:
+ headers:
+ alt-svc:
+ - h3=":443"; ma=86400
+ connection:
+ - keep-alive
+ content-length:
+ - '1494'
+ content-type:
+ - application/json
+ openai-organization:
+ - pydantic-28gund
+ openai-processing-ms:
+ - '1271'
+ openai-version:
+ - '2020-10-01'
+ strict-transport-security:
+ - max-age=31536000; includeSubDomains; preload
+ transfer-encoding:
+ - chunked
+ parsed_body:
+ background: false
+ created_at: 1748263711
+ error: null
+ id: resp_6834631faf2481918638284f62855ddf040b4e5d7e74f261
+ incomplete_details: null
+ instructions: null
+ max_output_tokens: null
+ metadata: {}
+ model: gpt-4.1-2025-04-14
+ object: response
+ output:
+ - content:
+ - annotations: []
+ text: Tomorrow will be **Tuesday, May 27, 2025**.
+ type: output_text
+ id: msg_68346320b7608191a49fcd12e06dd3b5040b4e5d7e74f261
+ role: assistant
+ status: completed
+ type: message
+ parallel_tool_calls: true
+ previous_response_id: null
+ reasoning:
+ effort: null
+ summary: null
+ service_tier: default
+ status: completed
+ store: true
+ temperature: 1.0
+ text:
+ format:
+ type: text
+ tool_choice: auto
+ tools:
+ - search_context_size: medium
+ type: web_search_preview
+ user_location:
+ city: null
+ country: US
+ region: null
+ timezone: null
+ type: approximate
+ top_p: 1.0
+ truncation: disabled
+ usage:
+ input_tokens: 410
+ input_tokens_details:
+ cached_tokens: 0
+ output_tokens: 17
+ output_tokens_details:
+ reasoning_tokens: 0
+ total_tokens: 427
+ user: null
+ status:
+ code: 200
+ message: OK
+version: 1
diff --git a/tests/models/cassettes/test_anthropic/test_anthropic_server_tool_receive_history_from_another_provider.yaml b/tests/models/cassettes/test_anthropic/test_anthropic_server_tool_receive_history_from_another_provider.yaml
new file mode 100644
index 0000000000..babb25f203
--- /dev/null
+++ b/tests/models/cassettes/test_anthropic/test_anthropic_server_tool_receive_history_from_another_provider.yaml
@@ -0,0 +1,169 @@
+interactions:
+- request:
+ headers:
+ accept:
+ - '*/*'
+ accept-encoding:
+ - gzip, deflate
+ connection:
+ - keep-alive
+ content-length:
+ - '137'
+ content-type:
+ - application/json
+ host:
+ - generativelanguage.googleapis.com
+ method: POST
+ parsed_body:
+ contents:
+ - parts:
+ - text: How much is 3 * 12390?
+ role: user
+ generationConfig: {}
+ tools:
+ - codeExecution: {}
+ uri: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent
+ response:
+ headers:
+ alt-svc:
+ - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
+ content-length:
+ - '1065'
+ content-type:
+ - application/json; charset=UTF-8
+ server-timing:
+ - gfet4t7; dur=6172
+ transfer-encoding:
+ - chunked
+ vary:
+ - Origin
+ - X-Origin
+ - Referer
+ parsed_body:
+ candidates:
+ - content:
+ parts:
+ - executableCode:
+ code: |
+ print(3 * 12390)
+ language: PYTHON
+ - codeExecutionResult:
+ outcome: OUTCOME_OK
+ output: |
+ 37170
+ - text: |
+ 3 * 12390 = 37170
+ role: model
+ finishReason: STOP
+ modelVersion: gemini-2.0-flash
+ responseId: 7YuUaK20I8asqsMP75hx
+ usageMetadata:
+ candidatesTokenCount: 34
+ candidatesTokensDetails:
+ - modality: TEXT
+ tokenCount: 34
+ promptTokenCount: 13
+ promptTokensDetails:
+ - modality: TEXT
+ tokenCount: 13
+ toolUsePromptTokenCount: 31
+ toolUsePromptTokensDetails:
+ - modality: TEXT
+ tokenCount: 31
+ totalTokenCount: 78
+ status:
+ code: 200
+ message: OK
+- request:
+ headers:
+ accept:
+ - application/json
+ accept-encoding:
+ - gzip, deflate
+ connection:
+ - keep-alive
+ content-length:
+ - '401'
+ content-type:
+ - application/json
+ host:
+ - api.anthropic.com
+ method: POST
+ parsed_body:
+ max_tokens: 4096
+ messages:
+ - content:
+ - text: How much is 3 * 12390?
+ type: text
+ role: user
+ - content:
+ - text: |
+ 3 * 12390 = 37170
+ type: text
+ role: assistant
+ - content:
+ - text: Multiplied by 12390
+ type: text
+ role: user
+ model: claude-sonnet-4-0
+ stream: false
+ tool_choice:
+ type: auto
+ tools:
+ - name: code_execution
+ type: code_execution_20250522
+ uri: https://api.anthropic.com/v1/messages?beta=true
+ response:
+ headers:
+ connection:
+ - keep-alive
+ content-length:
+ - '913'
+ content-type:
+ - application/json
+ strict-transport-security:
+ - max-age=31536000; includeSubDomains; preload
+ transfer-encoding:
+ - chunked
+ parsed_body:
+ container:
+ expires_at: '2025-08-07T12:20:24.852621+00:00'
+ id: container_011CRtG2ZHU4du4wy3SNRu6J
+ content:
+ - id: srvtoolu_01JHwVUjgQAUV99SPWKR9Fqj
+ input:
+ code: |-
+ # Calculate 37170 * 12390
+ result = 37170 * 12390
+ print(f"37170 * 12390 = {result}")
+ name: code_execution
+ type: server_tool_use
+ - content:
+ content: []
+ return_code: 0
+ stderr: ''
+ stdout: |
+ 37170 * 12390 = 460536300
+ type: code_execution_result
+ tool_use_id: srvtoolu_01JHwVUjgQAUV99SPWKR9Fqj
+ type: code_execution_tool_result
+ - text: 37170 * 12390 = 460,536,300
+ type: text
+ id: msg_01MVPg4CDn7rM9Lw3VARchdZ
+ model: claude-sonnet-4-20250514
+ role: assistant
+ stop_reason: end_turn
+ stop_sequence: null
+ type: message
+ usage:
+ cache_creation_input_tokens: 0
+ cache_read_input_tokens: 0
+ input_tokens: 1681
+ output_tokens: 110
+ server_tool_use:
+ web_search_requests: 0
+ service_tier: standard
+ status:
+ code: 200
+ message: OK
+version: 1
diff --git a/tests/models/cassettes/test_anthropic/test_anthropic_web_search_tool.yaml b/tests/models/cassettes/test_anthropic/test_anthropic_web_search_tool.yaml
new file mode 100644
index 0000000000..57f5e285cd
--- /dev/null
+++ b/tests/models/cassettes/test_anthropic/test_anthropic_web_search_tool.yaml
@@ -0,0 +1,166 @@
+interactions:
+- request:
+ headers:
+ accept:
+ - application/json
+ accept-encoding:
+ - gzip, deflate
+ connection:
+ - keep-alive
+ content-length:
+ - '312'
+ content-type:
+ - application/json
+ host:
+ - api.anthropic.com
+ method: POST
+ parsed_body:
+ max_tokens: 1024
+ messages:
+ - content:
+ - text: What day is today?
+ type: text
+ role: user
+ model: claude-3-5-sonnet-latest
+ stream: false
+ tool_choice:
+ type: auto
+ tools:
+ - allowed_domains: null
+ blocked_domains: null
+ name: web_search
+ type: web_search_20250305
+ user_location: null
+ uri: https://api.anthropic.com/v1/messages?beta=true
+ response:
+ headers:
+ connection:
+ - keep-alive
+ content-length:
+ - '42593'
+ content-type:
+ - application/json
+ strict-transport-security:
+ - max-age=31536000; includeSubDomains; preload
+ transfer-encoding:
+ - chunked
+ parsed_body:
+ content:
+ - text: Let me search for current events to help establish today's date.
+ type: text
+ - id: srvtoolu_01MqVvTi9LWTrMRuZ2KttD3M
+ input:
+ query: current events news today May 26 2025
+ name: web_search
+ type: server_tool_use
+ - content:
+ - encrypted_content: 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
+ page_age: null
+ title: 'News: U.S. and World News Headlines : NPR'
+ type: web_search_result
+ url: https://www.npr.org/sections/news/
+ - encrypted_content: ErwHCioIAxgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDK2W0Qu0wNgI6mf5EhoMNCqr1gVeM/Fj3PSYIjBrgyGKmTOrJLgDCXcOvRtrbigKDeccd5oypMBGnMVhm6h3Ade/9+vNOwI3ByflKmwqvwZqUUdfJ6+k9ZDrmb7VM6ktRqsZ4Z++yOdyubDNbsyM6RdwYuNi+bS5ZUON+rMd8+ZrQYlGYqq7NF43o5klxpac+Dsgx3OlKbu6Hq6eiKOQ3rdPGYlUYKdDouAx6RjypXjhYkqErPrjlFZhNv2lO6cohI0QU66p6b7G8UMVyweqYZ+2QYTFfbwU5VdIAOiQW8PBgNwPC5LRnidfbiT04VY+cEsNW04zOq9coXs4NgFRw2WDCZDBPGTEJex0xv7vD0/D0YpBhfiawNJ8FgBTI6q0gXQ2+YwqelVaZ+BDpu2JeRABLXiXQAMIiBBiayofacvfgJZ4omPY1JRiJwX5IpbLFqLcNz2fWr8veYedwrDZV/lOjyn755WTp2i89GD4Pv53htWrDOH8/YJBQ9u5KA2DFz7zAtRLyPqvPz3YaLMr3ATFvs8m0igrllgC5uaWPWfO/28RU7QNnxyBLGNonF3dtz3Uu2naeNvxjRhqCtUOON5odOahtPrRs5qkjv/UrL2YzlnfsRL4Qb/qsGJE6YWScvLhjBaum29Whk2p6RtYJqzzSqDbk0jxKe/hNatl3s2JF1bAW4L7p9FnsK1v/G7AYSaIYl4RDLGuL1bFOKGKVlUZtohNMws+gvTCYKdhQzfurimTsNIpBP4Ci6aJ+/yACa22AXGhZQqyiOS7yxI6zj3vZdQGFBle1TjDpzveY2Nz/kuuTCPbGsWt5kd9v7BkWvkNacqZ70KijyIk5dVt3H0q4eavyNLU0gF4hSCPDHW7eeWXTmNs1YniKiaHrwmOOqXjw2PCQrZv0i7UQRjDmRQqx9NtuqzMup9DRPbQuZM23b8JwzqA0Qjyxc5pTlWRL9aU+U7ZKOD1OdBszAU54c5N9jOca8S2Plt4TGJcAv2Wy73Bex74GPlkHcKWO8TJYhrV4ZF2nMjssncQEKCltJaZg6TJpazpLKoQ1XmYmgzebbVMRc8RTDXk335AYKkN62xRnfrDd5T5wBhGbPNQeF7PGigtAK/SpSpTna/vmGOBul/cONWOFFKNdY+FtCAGd4AOo3s/N8QUnKR66TEv9ocuVep1UZxV2fJcqIuJukutfT9eWPcou6VImLUzRQMYAw==
+ page_age: 4 days ago
+ title: The Biggest News Stories Of 2025
+ type: web_search_result
+ url: https://92q.com/playlist/the-biggest-news-stories-of-2025/
+ - encrypted_content: EuYCCioIAxgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDCmLeaYgzUtJ4Mi+fBoMpktwxWvlSdpeNRRlIjDckkEHzeMKWP+vkSJ+7ci91OlLvn1nTU4wG+0am9miZ+68Q8XjsyCBGekIPeSsgpkq6QFTAvqrNhd55GMbj8VQtB/7oV66lwp8PzaymgQlLzCnxBdZ6IRYyEd6XwFOPrWCwyjtlKbwRiM2NIaNsGcrraBVrDfsjCz20qsDPGNsQf587z/TD3zWUSelhjhf+T5nDCEXUkYM2+4MaGP5Ty57Khh3WQr5q6Q46m85jBBF+akWf1uKZEgjgFug1ufj/8TXEEAaKCVY9YeXTXfYH8DocKveCXH4Bp9TNbgx55UrL8NdXiwdtpI/zqY+8hM/SiaVeXXI/Rbmjg3HzFTLfrH4wSrl5awdKWuGwQy8nqRISZlwNVnwFY0e8uc08xgD
+ page_age: null
+ title: ABC News – Breaking News, Latest News and Videos
+ type: web_search_result
+ url: https://abcnews.go.com/
+ - encrypted_content: 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
+ page_age: null
+ title: Breaking News, Latest News and Videos | CNN
+ type: web_search_result
+ url: https://www.cnn.com/
+ - encrypted_content: ErQCCioIAxgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDGPat3RtBffd6jd9uxoMkx9uAfM4hgJRbrR4IjCBVNWqux+TsqDP0poLm+ss84SLrVR4rAcjrQSDPna9ZfR0OFhPjv2ko1ZVuBzeRE4qtwGOPV6my0G/y4nPEH8gNVc3y/8uZzh7O8CBrduzchEMd5RRXLlsC+bU/SjZ+5LBYGzAVwRCfVXIdaJ0/d8RYdJWHo3bvKc5Lu/WFPV6Po9gVHLOU5WVDsyzwmrvqzCYC0UhkUMa0yf5j7WTFaT+kgHZcFcbvYPG53USqNh0seahaaCC5fJRjRBTAvuyj4md+ppTjIXGZEp3rTMG3MTkv8t60MgPzn4ObLGEmBQIQrfES9G2BT1k7lUYAw==
+ page_age: null
+ title: 'Philippines Top Stories: Politics, Environment, Education, Trending | Inquirer.net'
+ type: web_search_result
+ url: https://newsinfo.inquirer.net
+ - encrypted_content: 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
+ page_age: null
+ title: Portal:Current events/May 2025 - Wikipedia
+ type: web_search_result
+ url: https://en.wikipedia.org/wiki/Portal:Current_events/May_2025
+ - encrypted_content: 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
+ page_age: null
+ title: Portal:Current events - Wikipedia
+ type: web_search_result
+ url: https://en.wikipedia.org/wiki/Portal:Current_events
+ - encrypted_content: EsoJCioIAxgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDAYjLeq1Kci5o2pi8BoMqJacE/46sh+pR01VIjDPMDUx0d3wj2zbUnowpxFwHvCCnCwLoPMxQsQm/dnvm0Fzfga5o6zXqDwWpXvUzhEqzQg/X9w2opL/m5o7bUw/TubgkYaR6l4t2n0oQlGgetbSj1gOEor/WWJ8bWXL3BZnS2xkIzwGrbLdlPDn/NoXICDQZ+P3IlA6B8CVwiijOnNq+x5nTpX0m794VFJIfO5SdupAiWqhWmtqt8XhcWs8W2gnhDDvNsBG6oH2ZsRenxt3n7a7eWo7yRk/KSHdBM9c+L5r3wu3Ul81DW9CuE6KqUdFjjePJfWKL8OvzfkvJjIqcRaqc/3RIRZbSPbimBiRMXtCBZeCYE1yeBs3xLQ7TJXgRM/9ScKromcFWckYpGXBYSGL8SiXXoBUD7pLsuP5FnRnZUkQLCHTLoId0/w4jVbuXmDh3oipIlGUQCSbp3FkogFB/CZFpKz4tY5E9WQ4pBkApGYgAeGgOOStiUW3pE9oCy5TRpCfilrg66RtJozGI+LWM/XYuuOwSK+f+/c6AaUJ7av+LCUSPFI6G1XErfHK/KeBSJp7ZVoRXn/f7yJXlZvybKQXdN6UtxqxRJbil9RnmmXsBc6cesWW/cHbz01V8tkaqcYdrtJdVM/LesICK77C/JYiA6PQsneeg5xdZDCUp7yUO9P/CHMBqhPB8geS9y4dG7UIdJrFbv43cGOiqoSBsBGCLCc7crptYYGydT6YBgKb+ktUJm14MfbF8lzKt6SVYpn8KWL2dyhsDbfi88h51fvZqDV6loTDpyHbMHeJoA4pIxLhkBIriQOLNnEIEwqTGy2XFy326bahzINKJVTY1mMq2v3O0Snl0DNcAZ1X/iHt393xPgdcSy6c2+sDRexvpU4grX1GGFD4E8kg1QP0fErasq17XzRVpnU7Kedk/ntU/X6zeI3aTEeyRNG7IPH67w6GyIF8XmgCh25H6bCBGN87N8hnPSVAy8/qIMcfZYaF1c8W/QB9n7HBWhQgdyZv3relj0Ur0xdRi2osqo+k2c0a9mmIVupbzpLAxfY7LiwU8Edsr+1WY62x1omk+b4XNiGnhHnrF4B2o+f89icgAVSqRo2ydqIUDnZUYewu8jjUg/j+WUI8yKqZHCgCRdkm4fDSOcK8faTeaITl1iI6XFbUicEWZzG87tFykNSv5fz+ueDbMj936cm97rPUhp/qMnS2uloAxmiWLcS2/oV605i97ccR9IlwB0tt259e9iCvltjxzcC6P95vbhLS94+xVNOG2fmQtzE8oyaREZBkwSjVHuJ3lDAxvHDRYY8F+lkuLE4AvLiye3CDAMXNyCrG+/xiQIBNUGs+1aV9edHMmwpCVs99Q+nHO1RBVPljY607Q6u06Wt4VHnY+45+IxzpHHWXxg3Jn8Lh1AuzFKEaRWaI7JDSCgJmYxjIwkUO7988PWjOmFLquOd6mQsQ6iVG/89zSwr019RlAQRDIbMimefHIYhLm4S/Y8TzPhLFXJ6FaxrPFAkkkp2LnLQUoNKlo2h64JaAerGAku2FEwn/vo3hsCXwILg6R4QYAw==
+ page_age: null
+ title: Current Affairs Today – Current Affairs – 2025-26 - GKToday
+ type: web_search_result
+ url: https://www.gktoday.in/current-affairs/
+ - encrypted_content: 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
+ page_age: 3 weeks ago
+ title: 'May 6, 2025: Top news events to look out for today - People Daily'
+ type: web_search_result
+ url: https://peopledaily.digital/news/may-6-2025-top-news-events-to-look-out-for-today
+ - encrypted_content: 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
+ page_age: 7 hours ago
+ title: 26 May 2025 UPSC Current Affairs - Daily News Headlines
+ type: web_search_result
+ url: https://testbook.com/ias-preparation/upsc-current-affairs-for-26-may-2025
+ tool_use_id: srvtoolu_01MqVvTi9LWTrMRuZ2KttD3M
+ type: web_search_tool_result
+ - text: "\n\nBased on the search results, today is Monday, May 26, 2025. This is confirmed by several sources:\n\n1. "
+ type: text
+ - citations:
+ - cited_text: "Katja Ridderbusch hide caption toggle caption Katja Ridderbusch · May 26, 2025 \x95 Efforts to improve
+ officers' mental health have grown over the p..."
+ encrypted_index: Eo8BCioIAxgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDDbwqv5slJiinAczsRoMhSEnYjGPJgqqehvhIjD+BvlqTC7HRjtE/aw2RZWQrImtkFRHsMc+fLuePmKCTV6CchthAUcDrpTbM2sVfeoqE2azhBPbtwuu/6GGPopddo8c5owYBA==
+ title: 'News: U.S. and World News Headlines : NPR'
+ type: web_search_result_location
+ url: https://www.npr.org/sections/news/
+ - cited_text: "May 26, 2025 \x95 It's Memorial Day. "
+ encrypted_index: EpABCioIAxgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDP+cEzOyt7FZcwJ+GBoMyXx/ouZvvFOJk680IjAWGSs9Nrqov5SEum6N3Gk0FGVUoIgOxF4aOdlcLDVixGpcVil7pLWnwcKf6aH1DhIqFFQUWnEOplUMZH6nQ1RQprK0YB59GAQ=
+ title: 'News: U.S. and World News Headlines : NPR'
+ type: web_search_result_location
+ url: https://www.npr.org/sections/news/
+ text: It's Memorial Day today, May 26, 2025
+ type: text
+ - text: "\n\n2. "
+ type: text
+ - citations:
+ - cited_text: 'May 2025 is the fifth month of the current common year. The month, which began on a Thursday, will
+ end on a Saturday after 31 days. '
+ encrypted_index: EpMBCioIAxgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDKg1IA50Gwr+acWT5BoMGYg/QqdGIWZ1xBQKIjAkgAmLPkrAfHcJ5l/9cBkuIDZFR5HqWIMts7szVwtYu+KUtw636GWrp1YgAWw+PHkqF0xqh9pIZ2wPGUKGN4beDYqhKyS3yKNSGAQ=
+ title: Portal:Current events/May 2025 - Wikipedia
+ type: web_search_result_location
+ url: https://en.wikipedia.org/wiki/Portal:Current_events/May_2025
+ text: May 2025 is the fifth month of the current common year. The month began on a Thursday and will end on a Saturday
+ after 31 days
+ type: text
+ - text: "\n\n3. "
+ type: text
+ - citations:
+ - cited_text: On May 26, 2025, India and the world witnessed significant developments across various sectors. In recent
+ developments shaping global and national aff...
+ encrypted_index: EpIBCioIAxgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDFkt41LpatakOxyiFhoMv3NkIlXjrN17gwJmIjBYF1Ds1OSA6s5ysr6ObQrej6qB8TY2C7CLY3A9izWkBKF92leDuAKzxrbr0q2HuTYqFvMJ033dlXOze2WorB4B4VxlNRvBw7EYBA==
+ title: 26 May 2025 UPSC Current Affairs - Daily News Headlines
+ type: web_search_result_location
+ url: https://testbook.com/ias-preparation/upsc-current-affairs-for-26-may-2025
+ text: On May 26, 2025, there are significant developments happening, including India's launch of the Bharat Forecasting
+ System to boost weather prediction and disaster preparedness
+ type: text
+ id: msg_01WWvGdHT1E2kYaV5ZLWMB2N
+ model: claude-3-5-sonnet-20241022
+ role: assistant
+ stop_reason: end_turn
+ stop_sequence: null
+ type: message
+ usage:
+ cache_creation_input_tokens: 0
+ cache_read_input_tokens: 0
+ input_tokens: 16312
+ output_tokens: 258
+ server_tool_use:
+ web_search_requests: 1
+ service_tier: standard
+ status:
+ code: 200
+ message: OK
+version: 1
diff --git a/tests/models/cassettes/test_anthropic/test_anthropic_web_search_tool_stream.yaml b/tests/models/cassettes/test_anthropic/test_anthropic_web_search_tool_stream.yaml
new file mode 100644
index 0000000000..7fffac4376
--- /dev/null
+++ b/tests/models/cassettes/test_anthropic/test_anthropic_web_search_tool_stream.yaml
@@ -0,0 +1,250 @@
+interactions:
+- request:
+ headers:
+ accept:
+ - application/json
+ accept-encoding:
+ - gzip, deflate
+ connection:
+ - keep-alive
+ content-length:
+ - '372'
+ content-type:
+ - application/json
+ host:
+ - api.anthropic.com
+ method: POST
+ parsed_body:
+ max_tokens: 4096
+ messages:
+ - content:
+ - text: Give me the top 3 news in the world today.
+ type: text
+ role: user
+ model: claude-sonnet-4-0
+ stream: true
+ system: |+
+ You are a helpful assistant.
+
+ tool_choice:
+ type: auto
+ tools:
+ - allowed_domains: null
+ blocked_domains: null
+ name: web_search
+ type: web_search_20250305
+ user_location: null
+ uri: https://api.anthropic.com/v1/messages?beta=true
+ response:
+ body:
+ string: "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"id\":\"msg_0137FtS8bhGs8YPNg2yh5hEY\",\"type\":\"message\",\"role\":\"assistant\",\"model\":\"claude-sonnet-4-20250514\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"usage\":{\"input_tokens\":2050,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"output_tokens\":7,\"service_tier\":\"standard\"}}
+ \ }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"I'll
+ search for the latest world\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"
+ news to get you the top 3 stories\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata:
+ {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" from today.\"} }\n\nevent:
+ content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: content_block_start\ndata:
+ {\"type\":\"content_block_start\",\"index\":1,\"content_block\":{\"type\":\"server_tool_use\",\"id\":\"srvtoolu_019HKdurhDjAVTRjXfAP4xZD\",\"name\":\"web_search\",\"input\":{}}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"quer\"}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"y\\\":
+ \\\"top wo\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"rld
+ news to\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"da\"}
+ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"y
+ July \"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"16
+ 2025\\\"}\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":1 }\n\nevent:
+ content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":2,\"content_block\":{\"type\":\"web_search_tool_result\",\"tool_use_id\":\"srvtoolu_019HKdurhDjAVTRjXfAP4xZD\",\"content\":[{\"type\":\"web_search_result\",\"title\":\"International
+ News | Latest World News, Videos & Photos -ABC News - ABC News\",\"url\":\"https://abcnews.go.com/International\",\"encrypted_content\":\"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\",\"page_age\":null},{\"type\":\"web_search_result\",\"title\":\"Nagpur
+ News Today – July 16, 2025 | Infra Boost, Crime Crackdowns & Sports Wins\",\"url\":\"https://www.nagpurtoday.in/nagpur-news-july-16-2025/07160822\",\"encrypted_content\":\"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\",\"page_age\":\"5
+ hours ago\"},{\"type\":\"web_search_result\",\"title\":\"World News Tonight With David Muir - ABC News\",\"url\":\"https://abcnews.go.com/world-news-tonight-with-david-muir\",\"encrypted_content\":\"Er0JCioIBRgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDH8Jw8XAP6/VubzFZhoMKPRdvqfKTxVcc0fwIjB4oTA6D/7r6nVd/oMEay/2QrIuZZT0F43oKywFNExhA719Z5EPtcgRjmcRI/SQfKgqwAjgSKWNvdQl5MtDJRPJyXIe8+s0O5ZsJ5fgA43BxkHkC+8PjXyPry0MFZC0Kev2ITSkbRA39edQx/Ony4IhDcgauSCing442hi0PnzNE31fxGSeFCmGYuiQsl1mkwAkb7cK7fnFzWEDEcBMoTFR1+syXvppXkx0ssufF2geShDSn1YxXy1OwsUSB8BA3lcuVu7zv2jMSwmrR3XaUAGJ9BCzLP8TDzENJqtdfD4hOn64l3ZYqDnR6FlhkonEyRoxpct9MA+lbsJdX9hE04Pt7gDTnKx0wOgQ9WmZnad2qbkIbGFkinCTv7gz0m/BTq7arIjxAdYLbljUQnXHVVxblnmfdTnokxmkj3Cc01OI8ZdQebsksyKkOQql82uCo4BWb6ZLgjlRIOqO/E3L6jFfy5V0OiV0jRVAZ6S5UQwiG31H9Xv6JMBfZ58Zrisa6nvnvUOiy22ZYgZVJL4V9FplpVrlXKpkghwia/7CPJLCVm6SN48FsMXuf4DAo6J2Uk1j05bY+QbGkaV+zbHOzJ/Z2Us6v2CGRTcA9pKrXi7bHt30qp1+D/4+bZI+N+/hQaQrW992XSJOsaJDr0b8rFjRUrGw+TlgNz5IcWUcuTDXpIInKNPkq0XMKJzPnTgUKXKGb0Mku9iEYn/mdI9T6YRi/mCzE+mr+lQnEAUTXu24Sz6Jp0va1as+CMY8Fg7LbkWcBZOVUtyiHtjNHmu2ZPg/fUOnL8VJWMwp3V64xTKIbcee5Y2s+k9LYDuO95H4CUDcm8hLtpnvmEl85GzqYZZZWvjyClCGezd30wS22TmFqtZOwn9Jv4nYJcRS6KXIEtAcSVU5TwW1gjnHxr+ycONLQaaCUmgClSIcHwtzFTlfOje/oPOg6U21qH93h0id8SaCkQxjlOUTPOTy+XQXZ24yPeA2AWZL1ooh3BbTpMtWm5kASnIqP6H+LefXnJ++r71Q7rwmSjrMbT5QolsB8898CpnJCCMXtJtBReUgs3ZjCrvwF36C0L42lLa8zcsixAHHVLey6JYM30qnxwGJbo4rs8z2wEljC/VtpU8QWBgBAop4/4LaSQafYUXo5UrI/lgPtQ/g4XGkJi+C8sv+RbQlmfLs8v69v6c1X0+iwRUFXLrjv6sCRgxceeOPSYw9IaPEr7o4rCvvSxJ8ze+DWxxzckmJfkCNvjsrRRl2pemyi18iggPxSHYZhRppwnWMdmG+9zZ2L4p+TTMXHMgEg1Rgpkrgw4h2Rl2o7Ju2DN6T3IkdbJYUBYXjz1xJDMkUOHif23/bov0bJRWKkO0x/Sa1BVTcJpauzxtupED9aTIt3nsaDIVapkJCNMmHrfUgk7XhBnIR1T2CCRXGd1i0A8Vbc/cRcH9gd3bsm4+KeD/Hf5bowJx9pQcO/LLUybplaSJBX7O9qbeufVQNL4HKi3ueRXIciQDEFBXLCfgV/GWIUjLvTRgD\",\"page_age\":null},{\"type\":\"web_search_result\",\"title\":\"The
+ Biggest News Stories Of 2025\",\"url\":\"https://92q.com/playlist/the-biggest-news-stories-of-2025/\",\"encrypted_content\":\"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\",\"page_age\":\"2
+ weeks ago\"},{\"type\":\"web_search_result\",\"title\":\"World News and International Headlines : NPR\",\"url\":\"https://www.npr.org/sections/world/\",\"encrypted_content\":\"EvQgCioIBRgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDBJaFil/pyo7yTt39xoMBBaGlFzYg9PaeWyyIjC1QPAYOejRY6XJyNFRPQ2hkiPE1U8oPpMdJUR7w4AMLDztivL9UWZu+S73RVbvnuwq9x8GZvqAutYjTiE25EiGrhegZ09aaN2Vpw/Tip56NAuwEKkUgzOocHlQRrdTpvyjxZFEPNl2faO+XCEFMyyyvaLWGwEFs4C5RVadNj697q35IRhXa6K7YDisKAzKPaRYIWwoDCPZqkycCwPOCuSA2o4wAOIFeGlnxCiQOqJIcs2mL3h9sd3dyaf+d+g2AFKAbPEUvyQsfvewem5OjyiR/25cyKMFuukdxrKzdB7almfu+FkpdQp2AWCH7oiURnseJn0V67tFLJZpmubPgWdMuBfjmn2URooyzQzvxn5S3fRcB6AfscfTxwXszj4XjcjpoOM2HCRmmDrtpBahdfwQcdGGMgVRUBtgIu36lIoKPJMMEmq6xb/B5yhjksNj0kuFIcDXyQj/cVkhHpi7JM7B7FdBMbpR8Dia2gU1kgmLnPy6yqJDy61tGZ5opi45EPN+NrNMdAKzr4xrSme8nZpq7+Ud0yzqgW0snXpMAEwTviISlmskEDXJxVhX+1SBaD+5BKEggvmG9v3YXGTuvoEF92CCBxDs4zjnrRztYvh7XH/DhN/QnXFnBRTzM2Cqi+SoWadaTFxcRRzjjRZ75Wkp2nI/k0431Pb7DWTd1K3Njuh52Hvfw5ecoGk8med84F5m6EzGXHFdUizmJpTGKDwwST2VEaNmRaU2Ypr8346PAApF7IHrsP5FFEZuSANpBa/0sBImFfce96/RpNILp+yEfVatLlIW9E/3WMbrtyg9GSPbaY0Iwp8F8EKf/KBC3VkVRid9Ipm7JUBGoruwoNhbfRQrb/+J0jtX1bDy1Soct10uqKP6DDjCKySqHCbg/WWGbHmotni/IsaWNY5uowtSRvY4jIzg29/D9f43LPOz5D9uaz0IxmMBnUvi1ZjNQvhs7mbsrUkyxn0h111387pAzN5xJ35WtEiULp+F3yqIQGs2kHxgqxoqn3Q56ISDkI3Kc+oF4UNiSVzhDbBu2+jmESJ7FzBbttXLKn/NhBHQhJ8N9hjXCR8pxkhLTaL+DwSyZ7S0cSXfsS7leU5qmOnyyFhantDSzzq9znnmNLTtlZ/4OAbFbYEU+j08TdSlZF7kSWr5zFm3IfwSHLgrVarDieDFEYN19l0sH4xc+I+tJuYHePguOVZavX/h4J33WrA6Q2LUDJJ0Ds9Wy8qThTkhSnQSv/b2Bj4fCqDRvy7Z2koecoq/7WB8cGO4u2nsEacRujQMdEYGANnVI+uF04Szm5ddMXNU0JttDA6sFmx6P86nGTZsIM77lNxY5Y01zCyPbWPcG/a0S/HQdzv+WR3gSVjTUix80E7b+TEDWjI2ezIrXsPA5Uy4q6rLYx+FMhzO8k+x3943Gaj4FxuuNK5qSXc9aQvpQBygb1TfA1ZlhGeM+mj52wm8JTCzzdAKb5XkukXxZ1B07feH4Tk2nuOrC407Q/n5us4HEXAlAL7poWyLLq4WfdjVAY9crtpparVkioN9IJ/Wm4eQteYrdxtQ0IYJmNvFPpYr2IRlL+/+xU2Ch79Ml0PDH0QYlftZniZHtjlOjAIAQjpNnRvcLD6t8k8UQEh99KKxSs//qOUDapVv05KpRXnWjZCFmax5irzhrDqrSpls6w/xdEYFCkFZMQwUC/ZUPrzLGOeiA7aGhi9hkwEZhFFrKHFYr6K8LBIs0bFtTpTGP0NAiVE9iUh7El2g1AfSgkNs+4MLafqb9jF4pPAR0XrcckqVMlzrt+dtUx3U2BjnMFfcspfvVWDWIT213efhCQQQkPRcj+3EBntkpLLtFy7ck9ZHsmmJSkWUzDmvWcUW0/XLgxPkJMxIk6S8J0sUED/C0/dNzVj4M6xdcOoF7oQCELyKL+7ilJ+FdE4NSA7BZQMNrZmRObHrAxtL5lgAjdphTtJ/LL51vxeBqwahBdO9hYJV/QIGIVW6TEl0VfIpCvJf/4PsPYVyveZHJXfCBYbovWyh0dQtrtX30NDfnUSC35AfkGJVXKj4cmKlClV/ChU6xTJfhi5MkhqS7GntlCnjydEZOX9OrGx26J1w1KlXyW3C5oWTyyA+PwZUhYHvxCHUtP8wIQgTrsZjTN72QbZ/YLixXO5glr2Daig5KWMBVh0gsNWHdUyRm/pocaNvRy9CPxdKqIuRsCn9EvZDvLrgmRfxbAxRKgUcfb05roJP95RxRO1c9EH+29a7D3rEI+mvQp9o3USAWxctI/fLhmU6k9Wxe+wKZSeY4EnHF//tVDPNZSwOwJfy0qHag8TBvwwGSpgzTh7dfTQTnHjsSbCw1Bw2c8rwsS066zDCoYZngRzuOeHheFX7JspsdL2jupJ1CmU6f0PZGv3rdFhffcUEHQkZ2cbqPY6G3+R6SmGIKC7DfLvYEJBlVEc3bCOwigLcVbJlT97D5iFmcnUAOkR5vOF4I+F6pMtgVNKRP/YmNL4lFtWIu4wd032eDsws9Si4jfO0jfzaG3NccqkO3JzidjLOPJHKQ6fUYkm4jbazXYNRzPx9mFl4XX0adz+xpbOA9b4A0YNmN+PXFLhPZO4QOGYsXdh0Ov384iGcMsj6/IwejN8CSzDgkHC6jBanWtPmp1+tmlEL8pTNVnnZYsvUEKp6uOQFbzBxx1A6Fhv6GM5y5vp2D0B21jElTK31PXYVIrirg666CDovh21iBaGUC2rSlg1NToKlmB9DHM0WNwT1Grd0Me3bCqgs2HTXgAc6ZtjOIc9k0iV8eZ8a5LzOyiDnqjo91ERBXAW8scg3eXeOvQqU2XpTuAiS9Hjn2R7xJJaw3rJecSeG4ynjMGyrq587+hlWaE3vfpRvFV/zu0sfAz28oh0WUiw4X/pJYztugw5lNIPMdUZemvYAqehFSwTQcSeLfznTtdTW+la/UL5RjxQrilQcE5KUZYuWpEysuRefX03GcaNmmcA/0R11DjtxNEB5SlGbeUVNadX/rb5FGMt2NFuBrnV3xz7L9dTEv7z4ialLflg/w4x60wP7KK0aUfPXAes1KRvsUB/5HmQQDKwHXT6sUFNmfg6GeGt9xeQcsxyHIRzV4Vi3EiSgTV7LHPTzALGzj0dAvRpwapeQtt0oBIXwm8mFqnHvYwywMKUxjxscJz7wzqlEyzjAEwnso0QyPrWoIEiyVxbyJ+ih7zU4LndNfa+ZpnFCTE5iPyZQWscdSBt9K49h9577moc+3gXwykF6IfebOKSb69wBJtf0iUzCYnUxmLHzm4DStJJ4xm7+9L/XZ6cheakJFDHOt+gczy169rEEt8UdUqJmxko5CXq23swnGV6/HE3WK6QRHhowCSp97F4W8tR3k/TS0/SNzJhA7NLMCjLrAnw6Y+wxZPwO+ebeJ+rhA1HhGXLdxcfnlrxp8Jl/LDK2pB8VbbirmK9xZ6vbRH/j+8LSfnRga8GusduKEDzCiPgVjKq1eggreFcJjqBbSPlXs7ooNDm2eSGAJUAuLytmHxlmmwqwmPOze8A2WoPWKrpoN1cqjI8/dTdkEk0R6YyfELd9Jr88OYMUFcrVdGNLIByS/WF0O023IbiUqP7x9nI/suBxwGCn4Kmb1VPJey2/FfE4EmdUXbzcoK3afeQRs857Tpv12JUJWZg5nO4CKj3wuDqm32sSZFSvB1BSP14KEbTTAH5mGBoMN3ll0nfEJyk768k9TIRNzZtWbYZWgi43QHqVzpugRKco1hH3jYYEl6GAVRmIQ5EkmD0a4Nai+raw7WDwiriarE4CmEQt/NlQuWEqErfcI/mN2rNUXO1VArv6EFT3Zgqo++d9hg0OZiUE3gOHOCVNlD/uzgl7HaJNVQfDCuubhH3c/rOnkpd/98xGWoiVt/vEQnFiE4Tzn/Pnn7p97UpYpADf3q0s1l/9B0RiCf/ukMSMRlk69g98ZXfRBPBp+SvVoQjf+npP4k8ywlDYztCS65eGxWmXpCPXbFf88Hhor0zU5POpg3ki6kgwNhT8JEP7NMsGwOGHBm/7g+QRsnwND06oBH84kWFYZx+ib1bB3MfZyUQfhOhG02o3MTb6GfgWauNlPu7orPjvgTFwLM2HPGZAy4GxZtlCBBnrgUSgAfqu0RrDAnl2858qaFfrxbtWAPJKyenEuFzeMhComVSHTq+cFIuwj0hRBNyrerNXPSrgDOKJoZwYEptOOSj1ZEwSjlLEuguOxlVGjG3tdzDaGM6tIIZrWUPrng0wr+5k7iIjCaYuS7FO4oApnJML1zSoNi4BEBc3cY6Nv9UAno9pL8B26DDYuhfxsunEXV7XTXu0o8jybBpcN7CYuV1chtHmEgvoPMEhEIdMYiX+KrTzzu003TEcyf3lodUoD0zImqeWWpC0kcBXH8D7AmLTJSWh5FeGv59nYA8OSd94rqH5TFtVuBWKpyPmGgyy6Au2H9ZeKK+cVIP4S+DcicCxeNEWFNtvM1w6eyJaZMcXFzRiv2cOU4KxVo0voNvkoh9Tx6AGHIQVZoFOGnHkTpNqTgdwOAg7T2uWJ+jpAOLMmgGu+5Jb5RdP+mPDWW2UaXARQztNwr4qudmNGeYeRAzU3Nk2DAfoDR1FqZmDHYt3mN+pd24a4XJ9RmnOl9n7JdslEJbd3DS6K/uYqIcKDhjmuPY1ccTJa+gJxwcZ8lFfBcxa8qy0AcX79KnQR+2ncgyqAvicqt18kTwzTBMku6ZEoQBN6jlzS/rdKU9sCLAMICUl5qCGzJkED3VLzWr9ZsOltVzUe42QaEvlpjcYnuA0fhMrRKpzZ6qZq1OOiiNyiHeiMtGCC0VFfdZ7SoLsOgSVNvF/RYzw3SFCJc7+g1WLV2sQdAEWCxBwfs/+4YzkO4EqPnf4GF95Sc2LOE5HKa5WGwlsICPGZmM67OHEEB8HsNTRjjyZdmowcsXGXfVWiCC2Ye6G8Cvnn4EFDbp0eK1ERzLg5VZwUf+QVKpvJMspYkhVhQJLYvDVWHbJzrmWV8/qCcQtCOqyUVgN6YO0Mp/G9Y42sF/EvkM+WUhKvHQ+kN+eg2wof0oPbvd83JjChxDXfa4OjxqTFkctKygpym9NtAae2PadYCZN0G7rfOOtXbbM+BozfVZsOfKk9iv+/nCz2g7JO8zzklgM3laO2z1z8D7UGR/YIaPxk8mVd4K3jUV/XSjH1abS1XZ82eG1PQcsrcvuaPfVB+ZGiRrxOjEIKmKBThfq8LHkSBf77l51N3sTp4wm1kH4NlbJmbbPpmuFD3iNuPZUyKAY6ZysYBVbhsEvHd3HWbFq+nSPeJFiAxApa2VGQl0kLbkZ3olE8Jf+QCBkixgiL9YvgUJX2zEkaVnnGnpS9CFdj4S7KkCfYtapkG1mdwpJQ5VNmOrZqGRqrZHiGdP4fthMf1hNmBA2y3vlpyxnI/T9PDWPOrtiwD6WhYSfCnHqlHaweSoKP45uwQgEosNeXQmCeyl6B6jmAkNO9UVnOJ07AdZpZUtYYHbZqEhv6mQMotleWb+55fgaNEZVhKyJARRcGAM=\",\"page_age\":null},{\"type\":\"web_search_result\",\"title\":\"All
+ Things Considered for June 16, 2025 : NPR\",\"url\":\"https://www.npr.org/programs/all-things-considered/2025/06/16/all-things-considered-for-june-16-2025\",\"encrypted_content\":\"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\",\"page_age\":null},{\"type\":\"web_search_result\",\"title\":\"News:
+ U.S. and World News Headlines : NPR\",\"url\":\"https://www.npr.org/sections/news\",\"encrypted_content\":\"EskeCioIBRgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDJ6TKygsoEknmAwwVBoMwk7x3ObFnKW/pgnHIjAQbXgf1wD39B27Ebl4tPcgmZ4/Cx+zvCril6IBdCIt/8Xg9JvGgTTvtviAvKoffBoqzB3yStatN7n/mrkiKOomlefxyhBJDml6mWpszFJckK13TRHcy//yxoAGwYze/lbZEixBak6LSZBSQNdbmvu1f+t73/at+iuFOhCVLMl22MX8cBYVlThICVAJ0IOaPN+egyu9am8oKmY0vHLB+dAjnOeitTb/2eW44M9FCQCKmEMqVRwDGeMN2WN343iFY4vDjsM6Qb/hkVy4UW5HnzSZYRWlkJ8RkO0sQVe7CnJydKWJHwYSv5j3hwWLSW+IpnlGCHsog/GYiJmmUhG//slRS00v1r58QFWvGet9lN9GqVcJybFpqh2nUfx6KtQ9Vv9HftFQsVJkdNch/4zQnv5bLVZI2a64TxFVQTv3WvO8MDws1rmubBBNwPaZr5GAbHBz5U2evYj0dmMaSQ2eouduPAUFc+eIyGsk2RV3ZU7IQ5fwTYZid9moWj/S6ti8NuDFfRGeBQMNkR6+9ZICQbtjpBkY0F9izv8Ew0MXnlvYkAqLe7eR9Kj9bhPbNrjDV6qPLAR0yUEY0xpADFslUWbQGMRttsDkr6SaDTTzzSf+HitZwoSy6jlEdltSbCpqjQW/EHcnHwvVYb0hLjA5/485xDWCAsxEEJ7yaS3GkPAOyjqtxgmrEvLySGntSdr7jGPIFAQ2BhhuBemMhWxq2ESvhjGW38S++3v7UZcNiOLImQkhBKwYfVBKW+FtBplYqG7GaVvs74HBGkeTNyTwP5HqcHwvJUsDfhnjUjdREnqg75nocrZ8YQhOfVJ+SRJAUxYg/XHZVDCTpxRe8McW5T5RXHmbyauY6enWcz0g8QTeQpW/JNofYvFOwnaGv92Xqv4nTvkOP5Q8tsSIp7FmmSZRHeYPxADzJ9kYNps6i73zYMRFfFbJV+3z9tgq3pGNgA7ynlJ480gHDjTc4aNu16EtIxbOWy/pnj4QWQrCCToDoFrM7zDoDK60ZZIe2YrOOio878lSK3JTcgtxT6YOwuqsICeLa1podkPThUNcRExZEZtNEuBK6+O9inajephkRQmx4rKOvExNLhQ2jcVykyR0ASVA4ISBiOM13ZY6SYg5KHj6f8wp8J7+Mkdp5tVFUiCSVrHr8bItT+q+NLSdsNggxFaD6+nMXuoCI9u2+Zq9yZZbS6+XXGAHyJUBK4OcUCuEmnrixA+sPJfm19RW08JzQuhY/f6XWVkZIDtqr0E5vxuPtumH2GPCnwGKIoQKLRHvBOSrvl+fo7QHIQ5G2VXn9WICQv9A3or25jfhIrLU1RZgVeKXmgveB3ozUjO7ailtbnO/oG+N2kogWMLQWhZSQVp+IVdPOjhVAHBxDuOBRVaHkdGfK57HKMmr+w90uvjyevFsMJOurksAbl0MhwDptNF4ciRiRBk6D24LsCDt97kpGVZ4uf+BhehHO78CaDs7c7/fx/C+efCGPWQVscAT4QLenpS7GMoUYIxRG63vpFhsOvbMpEePpY6DwtY2JqEYiPUpbcZN7wRDAGm4Xj0EtAypajAdD4rS7WnR8pQEEjZNC3tbpUC52waeVm5jafyL+imh+V2wcJAPRI4/GDpFURj+ZiCsXVJt+jtiiviROcr/93uhtE23f00VcgoMTyNYoScEukuceBu9GESUx71XUjMHcXU28CW6ihWB49ld8IbXDFAJNm0ERvoK/yYKCzqtcpeU39M5Jj8ZkZiuVtnBCIwidcDIiEJdvSYWySZTBjM0VNT+MWW6Pwh78Oi/rRss4X//vf3GV/jrwKrHXs7vXZft5cDK4jaUBTy41ptBsKwUpSYKEKYMKtpwtUEwgbiTnM3qdlAFFD50rrLD/TjGF/t7okRiVcqXeu46ODQoQoRkiToEiky6TSmRCbJBD458G4Qi0/Ha7gMUwZ6cdcVoF5vE/eoQgwS308XJDJOceh3hDB9Bx4Yr9DWrhymlchBil8dwtUWmHdndbrSqcvnabQu+Fmwq6YI0Smmd+0IqICyQHKmpcHpcx1TmvZzWB1baREFnRBPhwdtp1Z2s5+Ccss+E5rWn/hRyx1wFkLLjtwtNxqvpXWmndlFRdaWQi5591j94mzX+NCYpkp2gsGSW6RNBPmoyI3DwAjmcVZsWKvU1M/H5/sD/Sq36GhVgEAO2UFBwdqFsV0tjPVTlG7Ql2Vv9FgYB7qqklLlVdbu99xAAlbBKn9Pnc93LzCguxt/YOo47MdWbnlYTuYhTM1WB6q8UG5ctN7yEGU1wSriGY/dWjay9T8mziBiJCyyEUlug9+4flO+5+SJZVpzvpCuBqotqHHWbX0S0ZifWV2x8NH54i3/zdJ+LrAX7NaB3gv9TjQNr36LIs3ye+W+iAg6ElcPEUMhEManTZDcXP5uyjw6HJkrR2APzh8bn2UEPGqrmOukS9l6wwPWdguNv5uEe94ldKxpHYm4V43WqBZhaDRAAQ1Xc+uvEwy5sTPNg43vMkCDoKKc7w5kjjTKav1zbKH5+oPTI7aDc9NIpwKnssS5Y6gAv1gxlBKK/a8az/XArW2+x4tKl6EWsYKwsAAt8aJTnd1roQf7qisMPhFhb4jv/0V7NNZM/mfes0FbVspWxaPZ26+WKLIpuwNX9B22XuVa5ovfHOczP7J7OjlImncwASvlyA1Ql0DK0o45fRUSNwVf2CMCCNVzHIzNVtvG/78wFviGV5kqoMJUwmr8/cUmbczI5qxKLpW87SV2oYfMz3mvflPt2oiu0nwizCaXwIfJSuOlYk0p6LSJNWDAVUSpBn+dimlLcYeOqSSJQobDEFkbdeT/XGgZXZ6B+sJPnNjJBSKfM1I4kiGZVUqUqmTrZwHZvj0GG9E4/tSP2jMVjW1tH2rticrfIwCtCIsb8WpwovvPbtZIWQHop+qPOT/UDdGHcn/5m5CT7PV8zJYyVFCpZPjjF1/PQbnnLOdBLJSvXgw/odYfZM+m92KSwkmPfzhkCCYBLyDtAeJ2Ju/5Vnl3U7xS+YdvcrLI3dIuDze1oCJjYQys9VpD3miNVDB/ZQbX93E9+6CNH7vvQlJcEDHE1a1+kVGhSEcb5oq6YyvyJ6lA/wZDD5nWnjBo8BRJVgKdWHkoIeYSqGg4/CzzYfjvILyJCslomAlSx8M3NhyoCoH3EJwrcKHPOPCajbn4qKH4wDLhexzcoAWd9mWIfPd6oddG50csKcZtEEA7lAD3Sbns8EDpTg650+6p0Mw28PnRnsK705dVjrYcux9a8CMvTiwNBRe7q9a73mWGV5goto79ZiDQsi/060g6QQUTM0BQeC3GcH8mMi1Tj8B7pAmVUZGHCNWlvBCejwXe3LYRG2T3I34DvMotMjuFjbOVmqu0vT/5Ovbj9BDAcYsTr90RcLtYaKmL6NmlrgijofkUVjJJNHN1YjwnJyoiu3p30aKCO/LUkFaLVRHPrgUMs+FxHN6p+GJW4wzSfhrCidD8QBtMxLlR2FFHs21AAqOaSJHXC8lUaso30Vw6jde5Aw2eqzQ5b02MkAykhBIiKtMzP3/5xijXltX3jufrz66OfUzUk39fwbGto0z7j1gefSTqz6XxUctOoqeTOnp7u2KDr61MJXKgbohLdUlHZQjC3uZcu7R0nV2Jhin3U0zcd9Fp4zoJoBMvrzIxIFm8rqbLnWQwTTJ0tPxITZn2M/+XPoLqv8coGMcbPQtZ/U7E2XtkA+MkZW2CfE1GigLBUb2OKiS5dWJPKmJIqpAbM1h84L93/odPCxkO0768mcTvwP5mAxIefnyt6EDUYV0tTKepg6qqON5Qw1vVEmk8dkPPiebAX1TlZoKuWl3ofoRt0L4M6GNweCAavbZdeCsPqPhu84foXPM4ZZGHbiY5rgg4MJXK9rNgg03H55fn0qr3hhidbLiX/gGlwChF1t/cl+HNRL3ece0YJqbNbRmOj0xGyMt3jthnJZVK8aUjjY3fWFAqA+jQgfk+3o++LQjkJHcnotHyLUCakOFpq+2TpsoU/Pnh4wU8sCTV2JbeQRANaZ21mqfP0WkKIdCzluHmilDNUwrEEGfgyJk3pn/qk00z1LkrSlGzgrCdiQ/ayxk0N1AUXK8YLszm1Z34kA2d52p81YYeZXD6tu44DZBtGzk9p/BODgpAyv0S6vUWU4dxt8Ge1XcecelDvAHfOaahs5FqgXZa8CJTWjxvfjgiAyWflhnCJqw3vfwKFdC8XDjbnvY3zRKUKne/zTrjB7Hq8SXIBNCs1+J+u2Va2sz1h+dekdPbOALrh5rou9BCrrCO1KL18sCiRUZUdmaK2QRIPzuEOMc6ybxQgtwIKXthYkViYN6wHEndvIiAimBXB1NOPxM8wPeztbvC6yraj3Lp+UStfeCqHtLr+DeWzLSWPUJtYEcXKUPK72jnCfTVIc5d63/Rx98CYmuHlws/whpyxc5JijGOG5U+iqvjX8yEXf2F0oLPZrRYOZS7pnITY34PP/qfIoqjDAQYrbdOAFbfp300yELX1dPQ96JSJGTvu3MtRfVn1ofAbQIllxE1OqIdbMC9cZLvzksOoCB/Ncns33dTtrJRt65EX6GL+P919d5MD8o9ZE/P/R2V5mUg05+t3yqqOI6pDG2hy+lKuNVQolSIhmckZQrnEYX3kPh6qwq5+p8gePnb2Xe0K/aUNm4yObjLC3+7TRa+EigwIA2aB7PLPAaOs5sJrpapuJlxv1G8hvy+5sWTOXrtqsX6aTr5rpbSLVP33r2raLzvh+561uus1JPnEvIEHQD7OiIeA5gCI0TrMAsNXgo+HS/RJV/b2BY1gRruqrFemU+e7SUwdM38iVnkDLDZKuxOTTL08psqutcbn0hUW83GtMC/K8nocqL8L68RfKmzGOMpMDYXOe+5Yu47hQys4mYo+yCoyGOkK7WI/+2HrFliPJ/UiT+DzY+i0xKvz7t8kP0SxwkSud0x3s5tk32c0V2v6TThIpgWWxXrgdQqRb1PwBG0TNl5jyj2Up+Y67DX0hYEBUICyUNUJZK94z0cC8Kc6C6uA7RCerIq0OU7xke/YckKMN7jlqYmf4lB255/Sf2l3j4fPglLDtWGdNF9DjeTgFgXrM+O/bu9gDFIT8vOOP5vZIRgD\",\"page_age\":null},{\"type\":\"web_search_result\",\"title\":\"[LIVE]
+ Crypto News Today: Latest Updates for July 16, 2025\",\"url\":\"https://cryptonews.com/news/live-crypto-news-today-latest-updates-for-july-16-2025/\",\"encrypted_content\":\"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\",\"page_age\":\"2
+ hours ago\"},{\"type\":\"web_search_result\",\"title\":\"Latest International News Today | Top World News Updates
+ | Business Standard\",\"url\":\"https://www.business-standard.com/world-news\",\"encrypted_content\":\"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\",\"page_age\":\"13
+ hours ago\"},{\"type\":\"web_search_result\",\"title\":\"Horoscope today, July 16, 2025: Check your astrological predictions
+ here\",\"url\":\"https://nenow.in/lifestyle/horoscope-today-july-16-2025-check-your-astrological-predictions-here.html\",\"encrypted_content\":\"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\",\"page_age\":\"1
+ day ago\"}]} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":2 }\n\nevent:
+ content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":3,\"content_block\":{\"type\":\"text\",\"text\":\"\"}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":3,\"delta\":{\"type\":\"text_delta\",\"text\":\"Let\"}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":3,\"delta\":{\"type\":\"text_delta\",\"text\":\"
+ me search for more specific an\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":3,\"delta\":{\"type\":\"text_delta\",\"text\":\"d
+ recent global news stories from today\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":3,\"delta\":{\"type\":\"text_delta\",\"text\":\".\"}
+ \ }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":3 }\n\nevent: content_block_start\ndata:
+ {\"type\":\"content_block_start\",\"index\":4,\"content_block\":{\"type\":\"server_tool_use\",\"id\":\"srvtoolu_01QEy44BpTzJrx9YkkxntKZy\",\"name\":\"web_search\",\"input\":{}}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":4,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":4,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"query\\\":
+ \"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":4,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\"breaking
+ n\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":4,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"ews\"}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":4,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"
+ today Jul\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":4,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"y
+ 16\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":4,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"
+ 2025 globa\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":4,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"l
+ in\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":4,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"ternati\"}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":4,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"onal\\\"}\"}
+ }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":4}\n\nevent: content_block_start\ndata:
+ {\"type\":\"content_block_start\",\"index\":5,\"content_block\":{\"type\":\"web_search_tool_result\",\"tool_use_id\":\"srvtoolu_01QEy44BpTzJrx9YkkxntKZy\",\"content\":[{\"type\":\"web_search_result\",\"title\":\"International
+ News | Latest World News, Videos & Photos -ABC News - ABC News\",\"url\":\"https://abcnews.go.com/International\",\"encrypted_content\":\"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\",\"page_age\":null},{\"type\":\"web_search_result\",\"title\":\"Breaking
+ News, Latest News and Videos | CNN\",\"url\":\"https://www.cnn.com/\",\"encrypted_content\":\"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\",\"page_age\":null},{\"type\":\"web_search_result\",\"title\":\"Global
+ News - Breaking International News And Headlines | Inquirer.net\",\"url\":\"https://globalnation.inquirer.net/\",\"encrypted_content\":\"EtwICioIBRgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDB+FmN0CrHKorRR/KhoMcZNVrHISf+o0dwh4IjCnLPM+BXpdxPfWqdJIoOB7nQX00iwa7P5OGmGdFJjdHVeNTCjXpkFGLLU58OK0jyUq3wdySgdMWlUqSrXYRUMuWvgjVDdQeHL1UsM6qZW0urI1gvOaYkzaUVwG5DhYJTT6RoBVY8/Qt2tyEZ7swRyPezgn8Ekkb4eKJVeDuPsdP5ZzHnhXKjYNhlUD3AE1KDSXaV6fB4YAWG0/fVPPqroKIDnQ9rMYa/SsMYeVfK1T22DEX2SfTGvXnTa+Q1sBZEStykiBEy7CX+Ne7+rMBmdOA6igvIFrCQs75/yEVdGc03TwLxND0qHalGzRtjuCEylecTPGiumuAf25m98xRlEQhXjVd3ET9Jfll+GmiQ+31A3plSIBlCRMvtMb9ls254Mgq6UUxI7r2pQaK9z7dd/tpqyiGtH1cFverZAao5EEfv6CwHUS2Tlf7eFUs+crUuBSRozEg/Y9L/wO17HJBSGntEjMid5UtbDgED1j17mCsHTaOsQZjManUnPkN05Vo9vinqcSU+b/Mzmkigi4szew7UAr5f+l3u0Mev5auUGMWgpUp89YETYI/wmuTlxuRkln/K2TmWE6YCgMFdte1EpAIvGKQWtJcvMFBJ6GjJEDz6aHrPhmgZevKvbp4WzImmGPpehpzsXeB6u2NztknFge8ATZHrxfkJq6Zo47liCAI2VN1jQ2HwIQ1puUoAcy0+Wp4VkQ//M/DABH0bcvAOLZH41widGP7TsN0q2zE0oCjocSmThkKBhDhUafpcPhytrJoo1GD3noVhK7m7CSfaTarDy8QsLVo5yrpioNfZk9/pyUUF+8+Hx5fh9LwiYHAD7gmg2CN4yFyHEAYWqqlcIS9pUBMbTP/N4XKMIvUk1nIskI2eGhZJWIdjq1HpUzLvwxQVQB8jy58xoYmQXbYoADstk4gjsPTAxVKsOR6YQ31iud83cEWaS5Kxhdq/FW7TRgnTjrhmdSJRpuoHGALezTf73ziPT7fOOAtH5Clrl+XEvxl+nQ7VtMzbRJf46Es1uf4kruNqTGZNLl/o8aj1pY0ZfpGgrG/O/TAOw6ka1t+wMEQWj7uTtuu2bhAJt5Ua90+G3bV3CqKfZ3ySDFa4aYHjGjHBdR3PEmFqd5+qafzy8JqUJ8/oLwHHNupqZkuxvkdMnn2X6ySOjttk8weVRlJYYfgSemqqQek5wTMkXQchjfTUVSsmdsj94JQLU9G/ikVublasf/ix2rPunhkA2TiGXgCJWy3b+mxl7TpoB0C2FkGUo3jTuUDFNlP5xeMm+sg3xsx11NkPbHKjDa7IW2HDGxdhHHnAJONbX4Mui22mqjP40P4Gs8IlsUzFncT3ycWuNsTNKrd/v5qv/B2dP7Jb/wRwdb9dDAtEHWsbyD6BvPGAM=\",\"page_age\":null},{\"type\":\"web_search_result\",\"title\":\"Headlines
+ for July 10, 2025 | Democracy Now!\",\"url\":\"https://www.democracynow.org/2025/7/10/headlines\",\"encrypted_content\":\"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\",\"page_age\":null},{\"type\":\"web_search_result\",\"title\":\"World
+ News: Top & Breaking World News Today | AP News\",\"url\":\"https://apnews.com/world-news\",\"encrypted_content\":\"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\",\"page_age\":null},{\"type\":\"web_search_result\",\"title\":\"UN
+ News Today 10 July 2025 | | UN News\",\"url\":\"https://news.un.org/en/audio/2025/07/1165362\",\"encrypted_content\":\"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\",\"page_age\":\"6
+ days ago\"},{\"type\":\"web_search_result\",\"title\":\"Department Press Briefing – July 10, 2025 - United States
+ Department of State\",\"url\":\"https://www.state.gov/briefings/department-press-briefing-july-10-2025\",\"encrypted_content\":\"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\",\"page_age\":\"5
+ days ago\"},{\"type\":\"web_search_result\",\"title\":\"The Biggest News Stories Of 2025\",\"url\":\"https://92q.com/playlist/the-biggest-news-stories-of-2025/\",\"encrypted_content\":\"EtYECioIBRgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDF7FWzMuY9XdIyQYcRoMZ2+1t+Cs6//V6IfrIjAzuAtK+ZkKJmWBCZKMBykuaaltNdRzGPk3xyEeue24WLe2sg9ydmM8lRXFpRuDxZ4q2QNaTmOwb9aEymEha/OMuhjx2ys3xkuD1Yd0/eQtcXdvVdCTt1K6WPbeo7Vok/qPNQnwBqwEpfuh2K7Zv1rAP+IZJW23mYHeSn/9bs1/5+jsUS9aWWCg9Vh99eqVhIgpnFAGnYsM+c4ick/OT7JMzjtwSUj5w80PZyW0sfGhSyRE0GkiQ1u0AlN48mqcqB/8/cmPQN6kSaXI3JDe2mRKID7PzHzoAggZAwTVCo//Mz9aUe3y8Sr0h1qO0CPYgw9ifwNRrQaqi4AacuVXHjSsCx3S+OOsAN5T/QXcS0H8dFz60CoP1mg90cCbVNwN93FWlDr9O/dZAsJ9x3drTlo2znxfuy6TiJVIP/EVX3lBYX/OkLwVRPTfgcxCnbw7nbKElvThUHooWp6iKtIr4OGR5lLo+LPTj+dZIQMiVXymW3wg5w5r3/YLXw+toFSND8QXyEf6KxyoAxU7p6tsdC9MFgFkjs+5irYiKkE6AFzud33BsFj0uQJH0Y3BwTAq72UhzRkgOvnmTIDuGKibGiyXPJuqxVx5V6Njdzf3wV9WoKGNtaoFb0rK4pndJlN6xgPmzIpd2b4C2N3Ak1qp6WsL1ozp1Tub9GTVQDJyzMsPHAq9yWdD5LCGHv6d+xgD\",\"page_age\":\"2
+ weeks ago\"},{\"type\":\"web_search_result\",\"title\":\"Headlines for July 11, 2025 | Democracy Now!\",\"url\":\"https://www.democracynow.org/2025/7/11/headlines\",\"encrypted_content\":\"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\",\"page_age\":null},{\"type\":\"web_search_result\",\"title\":\"Daily
+ Show for June 16, 2025 | Democracy Now!\",\"url\":\"https://www.democracynow.org/shows/2025/6/16\",\"encrypted_content\":\"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\",\"page_age\":null}]}
+ \ }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":5 }\n\nevent: content_block_start\ndata:
+ {\"type\":\"content_block_start\",\"index\":6,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: content_block_delta\ndata:
+ {\"type\":\"content_block_delta\",\"index\":6,\"delta\":{\"type\":\"text_delta\",\"text\":\"Let me search for more
+ specific global\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":6,\"delta\":{\"type\":\"text_delta\",\"text\":\"
+ news stories from today.\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":6
+ }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":7,\"content_block\":{\"type\":\"server_tool_use\",\"id\":\"srvtoolu_014wYJbEnqpvnStK8Zb3bTop\",\"name\":\"web_search\",\"input\":{}}}\n\nevent:
+ content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":7,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":7,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"qu\"}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":7,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"ery\\\"\"}}\n\nevent:
+ content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":7,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\":
+ \\\"\\\\\\\"J\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":7,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"uly
+ \"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":7,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"16
+ 202\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":7,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"5\\\\\\\"
+ world n\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":7,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"ews
+ toda\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":7,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"y
+ he\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":7,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"adli\"}}\n\nevent:
+ content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":7,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"nes\\\"}\"}
+ \ }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":7 }\n\nevent: content_block_start\ndata:
+ {\"type\":\"content_block_start\",\"index\":8,\"content_block\":{\"type\":\"web_search_tool_result\",\"tool_use_id\":\"srvtoolu_014wYJbEnqpvnStK8Zb3bTop\",\"content\":[]}
+ \ }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":8 }\n\nevent: content_block_start\ndata:
+ {\"type\":\"content_block_start\",\"index\":9,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: content_block_delta\ndata:
+ {\"type\":\"content_block_delta\",\"index\":9,\"delta\":{\"type\":\"text_delta\",\"text\":\"Base\"} }\n\nevent:
+ content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":9,\"delta\":{\"type\":\"text_delta\",\"text\":\"d
+ on my search results, here are the\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":9,\"delta\":{\"type\":\"text_delta\",\"text\":\"
+ top 3 global news stories from today\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":9,\"delta\":{\"type\":\"text_delta\",\"text\":\",
+ July 16, 2025:\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":9,\"delta\":{\"type\":\"text_delta\",\"text\":\"\\n\\n##
+ 1. Trump's Ukraine Special Envoy Visits Kyiv\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":9,\"delta\":{\"type\":\"text_delta\",\"text\":\"\\n\\n\"}
+ \ }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":9 }\n\nevent: content_block_start\ndata:
+ {\"type\":\"content_block_start\",\"index\":10,\"content_block\":{\"citations\":[],\"type\":\"text\",\"text\":\"\"}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":10,\"delta\":{\"type\":\"citations_delta\",\"citation\":{\"type\":\"web_search_result_location\",\"cited_text\":\"The
+ Philippine Defense Department says Secretary Gilberto Teodoro Jr. renounced his Maltese citizenship and disclosed
+ it to Filipino authorities befor...\",\"url\":\"https://abcnews.go.com/International\",\"title\":\"International News
+ | Latest World News, Videos & Photos -ABC News - ABC News\",\"encrypted_index\":\"Eo8BCioIBRgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDNEdJVE8P0O/CQPtGxoMi7HHu43guyP3OD21IjCBn649UR3RN8wDXLadnU2ssY9pC9ZSpxnDPFIIVDP7JJfflEwPzyrllyJ7FCa8uYMqEwZwmTffZCTvmAN7mvQ48XpthV8YBA==\"}}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":10,\"delta\":{\"type\":\"citations_delta\",\"citation\":{\"type\":\"web_search_result_location\",\"cited_text\":\"Only
+ 3 made our lives easier ... For Subscribers Musk said 2025 may be Tesla’s most important year. \",\"url\":\"https://www.cnn.com/\",\"title\":\"Breaking
+ News, Latest News and Videos | CNN\",\"encrypted_index\":\"EpABCioIBRgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDOfI3HmGYhYXFZm6kRoMayhuAfzBk+N6F/cGIjAQM+atqiv7XaMmvUTgxTVmTX9gumlkwCKl34MveMQnAXs50+A0BXCcPjQw/DLhgYMqFL2xNbOxAO2vtzUyjwbPoNOBPQVCGAQ=\"}}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":10,\"delta\":{\"type\":\"text_delta\",\"text\":\"U.S.
+ President Donald Trump's special envoy to Ukraine, retire\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":10,\"delta\":{\"type\":\"text_delta\",\"text\":\"d
+ Lt. Gen. Keith Kellogg\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":10,\"delta\":{\"type\":\"text_delta\",\"text\":\",
+ arrived in Kyiv on Monday\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":10
+ \ }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":11,\"content_block\":{\"type\":\"text\",\"text\":\"\"}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":11,\"delta\":{\"type\":\"text_delta\",\"text\":\".
+ This high-profile diplomatic visit comes as tensions continue over\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":11,\"delta\":{\"type\":\"text_delta\",\"text\":\"
+ the ongoing conflict, with \"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":11
+ \ }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":12,\"content_block\":{\"citations\":[],\"type\":\"text\",\"text\":\"\"}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":12,\"delta\":{\"type\":\"citations_delta\",\"citation\":{\"type\":\"web_search_result_location\",\"cited_text\":\"Evan
+ Vucci/AP hide caption toggle caption Evan Vucci/AP · July 14, 2025 \x95 President Trump threatened to punish Russia
+ with heavy tariffs on countries ...\",\"url\":\"https://www.npr.org/sections/world/\",\"title\":\"World News and International
+ Headlines : NPR\",\"encrypted_index\":\"Eo8BCioIBRgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDBGD4AyDx2jWlaTALhoMIJhSWquUszQMHvM6IjCvI0VUuk7UgEVEmLXTU1KD5h0BzaUYL+ECfMxvJSFlOm7CeHvHWvt7R8u9a8RpYygqEzTmyxvqrUSfqT/iNa5B97zczJ8YBA==\"}}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":12,\"delta\":{\"type\":\"text_delta\",\"text\":\"President
+ Trump threatening to punish Russia with heavy tariffs on\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":12,\"delta\":{\"type\":\"text_delta\",\"text\":\"
+ countries that trade with Moscow if the Kremlin fails\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":12,\"delta\":{\"type\":\"text_delta\",\"text\":\"
+ to reach a ceasefire deal with Ukraine,\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":12,\"delta\":{\"type\":\"text_delta\",\"text\":\"
+ while promising Kyiv weapons\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":12
+ \ }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":13,\"content_block\":{\"type\":\"text\",\"text\":\"\"}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":13,\"delta\":{\"type\":\"text_delta\",\"text\":\".\\n\\n##
+ 2. EU Trade Ministers Meet Over U.S. Tariffs\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":13,\"delta\":{\"type\":\"text_delta\",\"text\":\"\\n\\n\"}
+ \ }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":13 }\n\nevent:
+ content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":14,\"content_block\":{\"citations\":[],\"type\":\"text\",\"text\":\"\"}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":14,\"delta\":{\"type\":\"citations_delta\",\"citation\":{\"type\":\"web_search_result_location\",\"cited_text\":\"The
+ Philippine Defense Department says Secretary Gilberto Teodoro Jr. renounced his Maltese citizenship and disclosed
+ it to Filipino authorities befor...\",\"url\":\"https://abcnews.go.com/International\",\"title\":\"International News
+ | Latest World News, Videos & Photos -ABC News - ABC News\",\"encrypted_index\":\"Eo8BCioIBRgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDAjn76ykbDIunCxZ5xoMnMkMlljUF5jqqEhfIjCxJZonWOJ/s3eS27aYTw/wWE2BZ/dmmw6DfHmGoMrBUqV4V5SXAeC72Jeh8mBnpagqE/NbjknJgyL1Bto+uvZU0kf1968YBA==\"}}}\n\nevent:
+ content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":14,\"delta\":{\"type\":\"citations_delta\",\"citation\":{\"type\":\"web_search_result_location\",\"cited_text\":\"Only
+ 3 made our lives easier ... For Subscribers Musk said 2025 may be Tesla’s most important year. \",\"url\":\"https://www.cnn.com/\",\"title\":\"Breaking
+ News, Latest News and Videos | CNN\",\"encrypted_index\":\"EpABCioIBRgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDCOxlWJwyS+RSAGMfBoMmpWhf7NnzhYoR9PZIjB+cEm/6daGfknDqDKgQMnn5GQkhVTWnislqF4mqBkQCptPGX/hqKZVSakFALTKD64qFBcQuFsvI1GxC+PZJwbRylBkgtExGAQ=\"}}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":14,\"delta\":{\"type\":\"text_delta\",\"text\":\"European
+ trade ministers are meeting in Brussels after U.S. President Donald Trump announced 30% tariffs on the European Union\"}
+ \ }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":14 }\n\nevent: content_block_start\ndata:
+ {\"type\":\"content_block_start\",\"index\":15,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent:
+ content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":15,\"delta\":{\"type\":\"text_delta\",\"text\":\".
+ \"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":15}\n\nevent: content_block_start\ndata:
+ {\"type\":\"content_block_start\",\"index\":16,\"content_block\":{\"citations\":[],\"type\":\"text\",\"text\":\"\"}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":16,\"delta\":{\"type\":\"citations_delta\",\"citation\":{\"type\":\"web_search_result_location\",\"cited_text\":\"Omar
+ Havana/AP hide caption toggle caption Omar Havana/AP · July 14, 2025 \x95 The EU is America's biggest business partner
+ and the world's largest tradi...\",\"url\":\"https://www.npr.org/sections/world/\",\"title\":\"World News and International
+ Headlines : NPR\",\"encrypted_index\":\"EpMBCioIBRgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDLETpfRRGb/FPDgvphoMPgViyPLLKLddvzuEIjD4dkO/SOGMBomq3JcVu6+BUVRQUX9/JsGUs6i4XLshxZEXF4skxqm/8NZRh692nU4qF1iGcM6+QlRl9bOOWwaMTEPDhFdNKLBWGAQ=\"}}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":16,\"delta\":{\"type\":\"text_delta\",\"text\":\"The
+ EU is America's biggest business partner and the world's largest trading block. The U.S. decision\"} }\n\nevent:
+ content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":16,\"delta\":{\"type\":\"text_delta\",\"text\":\"
+ will have repercussions for governments,\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":16,\"delta\":{\"type\":\"text_delta\",\"text\":\"
+ companies and consumers on both sides of the Atlantic\"}}\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":16}\n\nevent:
+ content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":17,\"content_block\":{\"type\":\"text\",\"text\":\"\"}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":17,\"delta\":{\"type\":\"text_delta\",\"text\":\".\\n\\n##
+ 3. Syria Violence Escalates\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":17,\"delta\":{\"type\":\"text_delta\",\"text\":\"\\n\\n\"}
+ \ }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":17 }\n\nevent:
+ content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":18,\"content_block\":{\"citations\":[],\"type\":\"text\",\"text\":\"\"}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":18,\"delta\":{\"type\":\"citations_delta\",\"citation\":{\"type\":\"web_search_result_location\",\"cited_text\":\"Clashes
+ between Druze militias and Sunni Bedouin clans in Syria's Sweida province have killed more than 30 people and injured
+ nearly 100 ... \",\"url\":\"https://abcnews.go.com/International\",\"title\":\"International News | Latest World News,
+ Videos & Photos -ABC News - ABC News\",\"encrypted_index\":\"Eo8BCioIBRgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDDx9sWutz3xAG4mx2RoMw64RVF26zXW+ptzmIjD3PoisgWt/oZeT0RGfo98Fstt5vqpbDqSnwkQZJaKJHxvrBDeeWEZDG4yxHTnqy1gqE5TFCBxvmeizUMYhxtlRcmw48RcYBA==\"}}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":18,\"delta\":{\"type\":\"citations_delta\",\"citation\":{\"type\":\"web_search_result_location\",\"cited_text\":\"Former
+ backers say he’s lost his ‘grip on reality’ ... For Subscribers He survived a catastrophic plane crash at age 3. \",\"url\":\"https://www.cnn.com/\",\"title\":\"Breaking
+ News, Latest News and Videos | CNN\",\"encrypted_index\":\"EpABCioIBRgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDA651gCzzm+i1GeJTxoM9xN/p5yY9mczrfZ5IjBRUW6GZDoVR8yYJU8qiYLzFhDEVa0dUmlXoeavI0r9aNNKBIfeqItKHe1JFpYqwAkqFJhg+GVUs+qK5hQixJuOTGgFmE0oGAQ=\"}}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":18,\"delta\":{\"type\":\"text_delta\",\"text\":\"Clashes
+ between Druze militias and Sunni Bedouin clans in Syria's Swe\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":18,\"delta\":{\"type\":\"text_delta\",\"text\":\"ida
+ province have killed more than 30 people an\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":18,\"delta\":{\"type\":\"text_delta\",\"text\":\"d
+ injured nearly 100\"}}\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":18 }\n\nevent:
+ content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":19,\"content_block\":{\"type\":\"text\",\"text\":\"\"}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":19,\"delta\":{\"type\":\"text_delta\",\"text\":\".
+ This represents a significant escalation in sectarian violence in\"} }\n\nevent: content_block_delta\ndata:
+ {\"type\":\"content_block_delta\",\"index\":19,\"delta\":{\"type\":\"text_delta\",\"text\":\" the region.\\n\\nAdditional
+ notable stories include \"}}\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":19 }\n\nevent:
+ content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":20,\"content_block\":{\"citations\":[],\"type\":\"text\",\"text\":\"\"}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":20,\"delta\":{\"type\":\"citations_delta\",\"citation\":{\"type\":\"web_search_result_location\",\"cited_text\":\"July
+ 11, 2025 · Kim Jong Un met on Saturday with Russian Foreign Minister Sergei Lavrov. \",\"url\":\"https://abcnews.go.com/International\",\"title\":\"International
+ News | Latest World News, Videos & Photos -ABC News - ABC News\",\"encrypted_index\":\"Eo8BCioIBRgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDLwb4WXdJhJc1032yRoMFQXxcuXvyt/Vh7OiIjD+SOLtpM0juYcJEKt823NZCVn8PI5Q35jLEm3b14v+SPI4wjWq6v848wbM5KGwwE4qE3wLb4DbC1vU/C4FXuVjh3ZDk4cYBA==\"}}
+ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":20,\"delta\":{\"type\":\"citations_delta\",\"citation\":{\"type\":\"web_search_result_location\",\"cited_text\":\"Here
+ are 16 stylist-recommended picks ... We rolled 10 beach wagons through the sand. \",\"url\":\"https://www.cnn.com/\",\"title\":\"Breaking
+ News, Latest News and Videos | CNN\",\"encrypted_index\":\"EpABCioIBRgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDPaJ8rCny3rWirV9oBoMbUsHxXlhftTJCZ5lIjAjMzqRJS1bkRWawYy5SiWsVzjeBhiLcgVu0Ma/TkUAWSERP8wUJHlnQm2NgFrzWloqFGoM8KRCYz+n9n2jBLWDoX8Y+M/QGAQ=\"}}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":20,\"delta\":{\"type\":\"text_delta\",\"text\":\"Vietnam's
+ plan to ban fossil-fuel motorcycles in the heart of\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":20,\"delta\":{\"type\":\"text_delta\",\"text\":\"
+ Hanoi starting July 2026, aiming to cut\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":20,\"delta\":{\"type\":\"text_delta\",\"text\":\"
+ air pollution and move toward cleaner transport\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":20
+ \ }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":21,\"content_block\":{\"type\":\"text\",\"text\":\"\"}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":21,\"delta\":{\"type\":\"text_delta\",\"text\":\",
+ and ongoing restoration efforts for \"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":21
+ \ }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":22,\"content_block\":{\"citations\":[],\"type\":\"text\",\"text\":\"\"}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":22,\"delta\":{\"type\":\"citations_delta\",\"citation\":{\"type\":\"web_search_result_location\",\"cited_text\":\"The
+ multistage restoration of Copenhagen’s Old Stock Exchange is taking shape 15 months after a fire destroyed more than
+ half of the 400-year-old buil...\",\"url\":\"https://abcnews.go.com/International\",\"title\":\"International News
+ | Latest World News, Videos & Photos -ABC News - ABC News\",\"encrypted_index\":\"EpABCioIBRgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDPrPzKX1SVlWQWwXhBoMs4Zi8F5SkSW2HXogIjCSp+jGnutl8uk6z7pt0XRNkYGkeFo3MHI2siwQCFi6TXyL9sB0hpWRiOT/oMq5tCsqFAq0B7j2g2hOX7H/mbXtZxEHwPYbGAQ=\"}}}\n\nevent:
+ content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":22,\"delta\":{\"type\":\"citations_delta\",\"citation\":{\"type\":\"web_search_result_location\",\"cited_text\":\"But
+ he and other survivors weren’t prepared for what came next ... \",\"url\":\"https://www.cnn.com/\",\"title\":\"Breaking
+ News, Latest News and Videos | CNN\",\"encrypted_index\":\"EpABCioIBRgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDJs+XftavR/fFfMXlRoM16hBQ9ocCA/2B7ufIjCkQjKCphOMGvTJzRBX8s6ybKwIym1hyvoIetOoQynEPeG7w4x+lpVyaAF+Y8zFaewqFGu3ov28nfleOt2CK1EqDIfc76nVGAQ=\"}}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":22,\"delta\":{\"type\":\"text_delta\",\"text\":\"Copenhagen's
+ Old Stock Exchange, which is taking shape 15 months after a fire destroyed more\"}}\n\nevent: content_block_delta\ndata:
+ {\"type\":\"content_block_delta\",\"index\":22,\"delta\":{\"type\":\"text_delta\",\"text\":\" than half of the 400\"}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":22,\"delta\":{\"type\":\"text_delta\",\"text\":\"-year-old
+ building\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":22 }\n\nevent:
+ content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":23,\"content_block\":{\"type\":\"text\",\"text\":\"\"}
+ \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":23,\"delta\":{\"type\":\"text_delta\",\"text\":\".\"}
+ \ }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":23 }\n\nevent: message_delta\ndata:
+ {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null},\"usage\":{\"input_tokens\":57807,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"output_tokens\":742,\"server_tool_use\":{\"web_search_requests\":3}}
+ \ }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n"
+ headers:
+ cache-control:
+ - no-cache
+ connection:
+ - keep-alive
+ content-type:
+ - text/event-stream; charset=utf-8
+ strict-transport-security:
+ - max-age=31536000; includeSubDomains; preload
+ transfer-encoding:
+ - chunked
+ status:
+ code: 200
+ message: OK
+version: 1
+...
diff --git a/tests/models/cassettes/test_google/test_google_model_code_execution_tool.yaml b/tests/models/cassettes/test_google/test_google_model_code_execution_tool.yaml
new file mode 100644
index 0000000000..aaf79aea19
--- /dev/null
+++ b/tests/models/cassettes/test_google/test_google_model_code_execution_tool.yaml
@@ -0,0 +1,197 @@
+interactions:
+- request:
+ headers:
+ accept:
+ - '*/*'
+ accept-encoding:
+ - gzip, deflate
+ connection:
+ - keep-alive
+ content-length:
+ - '234'
+ content-type:
+ - application/json
+ host:
+ - generativelanguage.googleapis.com
+ method: POST
+ parsed_body:
+ contents:
+ - parts:
+ - text: What day is today in Utrecht?
+ role: user
+ generationConfig: {}
+ systemInstruction:
+ parts:
+ - text: You are a helpful chatbot.
+ role: user
+ tools:
+ - codeExecution: {}
+ uri: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent
+ response:
+ headers:
+ alt-svc:
+ - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
+ content-length:
+ - '1421'
+ content-type:
+ - application/json; charset=UTF-8
+ server-timing:
+ - gfet4t7; dur=8265
+ transfer-encoding:
+ - chunked
+ vary:
+ - Origin
+ - X-Origin
+ - Referer
+ parsed_body:
+ candidates:
+ - content:
+ parts:
+ - text: |+
+ To determine the day of the week in Utrecht, I need to know the current date. I will use the python tool to get the current date and time, and then extract the day of the week.
+
+ - executableCode:
+ code: |
+ import datetime
+
+ now = datetime.datetime.now()
+ day_of_week = now.strftime("%A")
+ print(f'{day_of_week=}')
+ language: PYTHON
+ - codeExecutionResult:
+ outcome: OUTCOME_OK
+ output: |
+ day_of_week='Thursday'
+ - text: |
+ Today is Thursday in Utrecht.
+ role: model
+ finishReason: STOP
+ modelVersion: gemini-2.0-flash
+ responseId: 0HqUaLilMrq5qsMPif2bEQ
+ usageMetadata:
+ candidatesTokenCount: 95
+ candidatesTokensDetails:
+ - modality: TEXT
+ tokenCount: 95
+ promptTokenCount: 13
+ promptTokensDetails:
+ - modality: TEXT
+ tokenCount: 13
+ toolUsePromptTokenCount: 101
+ toolUsePromptTokensDetails:
+ - modality: TEXT
+ tokenCount: 101
+ totalTokenCount: 209
+ status:
+ code: 200
+ message: OK
+- request:
+ headers:
+ accept:
+ - '*/*'
+ accept-encoding:
+ - gzip, deflate
+ connection:
+ - keep-alive
+ content-length:
+ - '825'
+ content-type:
+ - application/json
+ host:
+ - generativelanguage.googleapis.com
+ method: POST
+ parsed_body:
+ contents:
+ - parts:
+ - text: What day is today in Utrecht?
+ role: user
+ - parts:
+ - text: |+
+ To determine the day of the week in Utrecht, I need to know the current date. I will use the python tool to get the current date and time, and then extract the day of the week.
+
+ - executableCode:
+ code: |
+ import datetime
+
+ now = datetime.datetime.now()
+ day_of_week = now.strftime("%A")
+ print(f'{day_of_week=}')
+ language: PYTHON
+ - codeExecutionResult:
+ outcome: OUTCOME_OK
+ output: |
+ day_of_week='Thursday'
+ - text: |
+ Today is Thursday in Utrecht.
+ role: model
+ - parts:
+ - text: What day is tomorrow?
+ role: user
+ generationConfig: {}
+ systemInstruction:
+ parts:
+ - text: You are a helpful chatbot.
+ role: user
+ tools:
+ - codeExecution: {}
+ uri: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent
+ response:
+ headers:
+ alt-svc:
+ - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
+ content-length:
+ - '1424'
+ content-type:
+ - application/json; charset=UTF-8
+ server-timing:
+ - gfet4t7; dur=8179
+ transfer-encoding:
+ - chunked
+ vary:
+ - Origin
+ - X-Origin
+ - Referer
+ parsed_body:
+ candidates:
+ - content:
+ parts:
+ - text: |+
+ To determine what day is tomorrow, I'll use the python tool to calculate tomorrow's date and then find the corresponding day of the week.
+
+ - executableCode:
+ code: |
+ import datetime
+
+ today = datetime.date.today()
+ tomorrow = today + datetime.timedelta(days=1)
+ day_of_week = tomorrow.strftime("%A")
+ print(f'{day_of_week=}')
+ language: PYTHON
+ - codeExecutionResult:
+ outcome: OUTCOME_OK
+ output: |
+ day_of_week='Friday'
+ - text: |
+ Tomorrow is Friday.
+ role: model
+ finishReason: STOP
+ modelVersion: gemini-2.0-flash
+ responseId: 2XqUaMPcDNCC_NUP7avMWA
+ usageMetadata:
+ candidatesTokenCount: 95
+ candidatesTokensDetails:
+ - modality: TEXT
+ tokenCount: 95
+ promptTokenCount: 113
+ promptTokensDetails:
+ - modality: TEXT
+ tokenCount: 113
+ toolUsePromptTokenCount: 203
+ toolUsePromptTokensDetails:
+ - modality: TEXT
+ tokenCount: 203
+ totalTokenCount: 411
+ status:
+ code: 200
+ message: OK
+version: 1
diff --git a/tests/models/cassettes/test_google/test_google_model_receive_web_search_history_from_another_provider.yaml b/tests/models/cassettes/test_google/test_google_model_receive_web_search_history_from_another_provider.yaml
new file mode 100644
index 0000000000..fe76e08a0a
--- /dev/null
+++ b/tests/models/cassettes/test_google/test_google_model_receive_web_search_history_from_another_provider.yaml
@@ -0,0 +1,384 @@
+interactions:
+- request:
+ headers:
+ accept:
+ - application/json
+ accept-encoding:
+ - gzip, deflate
+ connection:
+ - keep-alive
+ content-length:
+ - '331'
+ content-type:
+ - application/json
+ host:
+ - api.anthropic.com
+ method: POST
+ parsed_body:
+ max_tokens: 4096
+ messages:
+ - content:
+ - text: What are the latest news in the Netherlands?
+ type: text
+ role: user
+ model: claude-sonnet-4-0
+ stream: false
+ tool_choice:
+ type: auto
+ tools:
+ - allowed_domains: null
+ blocked_domains: null
+ name: web_search
+ type: web_search_20250305
+ user_location: null
+ uri: https://api.anthropic.com/v1/messages?beta=true
+ response:
+ headers:
+ connection:
+ - keep-alive
+ content-length:
+ - '39306'
+ content-type:
+ - application/json
+ strict-transport-security:
+ - max-age=31536000; includeSubDomains; preload
+ transfer-encoding:
+ - chunked
+ parsed_body:
+ content:
+ - id: srvtoolu_012HdDNujnyBQ2HNbysnuEKY
+ input:
+ query: Netherlands news today latest
+ name: web_search
+ type: server_tool_use
+ - content:
+ - encrypted_content: EvIBCioIBhgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDAsdVbl8L9XkN2y+qRoMJYGGQv7KL2VpQZHkIjDOT0xACmLqQ5OFPD4vy9lPnj7/l3WqDKUpLik++ey+qrnUC4cLx0Selt1r4jQzqxUqdlaIbiZoBFkcmyc8ZJZieE0greN+Ed7BhPIXXNLA0qX8Q23WmPMBmS+5k88riHfRGpGdcGUreb4s9IIVGH35CBGXTPNgWF87YS65TGS65GJPo/BStMudeq93mIqsC9QvgscDzHYBycaRrw/N1aiRomh0v95p50sYAw==
+ page_age: 8 hours ago
+ title: DutchNews.nl brings daily news from The Netherlands in English
+ type: web_search_result
+ url: https://www.dutchnews.nl/
+ - encrypted_content: EoQJCioIBhgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDA7BgHzlZ4JfsgOEuBoM7wjw355LRUb2+NdmIjAxaCwII/uH3DG26hnAYe1SUvRZN62YqMVfvA4aoKwyo5Ll5Oq3rCpVilAq1rNU9IUqhwj1rx7b5t7RDW9pKHExg43lNVEoG8ox5sFs9oMppS4eAZy4IAD5qMNN8ZQMTTeEebUr8jma2h6RqiNpw2lYSnlyXU0Qbhyr6iSh1qllmiBAHqlQOeVMmOeIWFGi2FOBqFO0lE3gsbv13TJizjEoAT8wj7jJfBnEe0NXADwXmWMegz7/baVTPat04K0lhUvhMRYdhFZReF7Y7kAjurJ5BAikIpf4NamFe79tJRcUY2B++DJeJaUFFmEchQxbWbuu3A+sOynOBj6zL6tYU5J5SzQCdGjJ9s9fzy3xV9CBd1tF70nUhKG6OE/LtFrwC29k42FD8EmHrV2IUXP1FWwHYqUDh3Hkp1Ez8U5Ut85hBQgnfDIycalFWEsthOgcionKdBNTDHpXcfSIiSkZw3l5dzD7fNKolG5qYKFZzSKE4VJsM8pPT3omeRcReW/qBfopeXVGJ9qV60/zbjI+GHUH7HLhG6CkqLquMR91rjA9dru2Z/EEWASvcMDEHPGTsO5sHN0JuZb547Bqk+ZunC/CDC8v3oqS9dk5eon/k+ZYLHOQM1UpHbTqumr4KKb9ciRGYrhq0OzI3FuntKs9MbUOUNNFGnncZ1g4xaCraCt3GsNqlIw3ALv5bHahb1IFK+JtZFOCq8o/FRDc+lDgguUoVKGlvv/HSQXW72MiXb5jaDgAN04sPQOsIz5njhLBmi2O9L9++GkrLCz1Ql1mA9f9AYHyDChr/qkR/MmB79tpVkIg7kBQQrCibfa7lj8PAbcmow2BfKrTdEy+m3tHRwcqZuN+JU1SIjGy8YTWhjWHHDz8s9beuDJYLwrDnRWhs3hW8n4ok7p6kVPf/U2eIjlL6Tc9LXDB+F8FV6twrYb8aQ28C7yGxQU7aWddORgl21Vtry8Xty/HcZvZQ+QmOYLrCpzfgBjGuPVHQwPwzx+VjLeMVrQ9XalNYRPRmumARgiONgOp8k0rprAoRDCWHe+Fg8jtyzfbh/dWH4H6QxR0S3lB2m1dbmZc6AkL9GLh/tUq0VV3GQLUlh3JZLNeOPQIEaDCVLuSYfl4HIkP/1VXk7TP4aSlLgAuVUkWsSGI0etro8rIdFMUfrWvLVabTjJgc2ffJEW/+rjhB42xYHnZWlJWHtF2wcjxKpeIADlNeW1oOJWpPaITIwM8VmrhOymc1xyJmFCzMWIxTgv+egbUPs7RsJQZfwgYdbLwt3DWoSh1Iz8up4QNrNj1wwJUbnXM5gTYaEpS7fkOxduYbJJyno7MCkzpzE3zj/xRjdAwauTYfenCIbeydEJrkrGfWGNA10Hh5qmonAWyzfncSURE3tT7YIYUwfXByRZEZrcZ4hK90Ui3Ug3HhDHVGFLHGAL1fYPw4myGmxPT1BgD
+ page_age: 1 week ago
+ title: NL Times | Netherlands news in English
+ type: web_search_result
+ url: https://nltimes.nl/
+ - encrypted_content: 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
+ page_age: June 25, 2025
+ title: Find all the latest news about netherlands | euronews
+ type: web_search_result
+ url: https://www.euronews.com/news/europe/netherlands
+ - encrypted_content: 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
+ page_age: June 29, 2025
+ title: Netherlands | Netherlands | Today's latest from Al Jazeera
+ type: web_search_result
+ url: https://www.aljazeera.com/where/netherlands/
+ - encrypted_content: EvoGCioIBhgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDI6o4h2P3qxGDqZGBxoMk81vJ/Ug18ionv/JIjCPJejVvNDAkoKA4eK2uxdqTOfhMrGQYAv8tM10h9FNwomHKrHaY3+oax6oyFoUwSgq/QXeZS42Aj9VVI0ooN9vZ3XP426SgKiNFPwQofTBYt5d3YI5Fv8UB535YiPzEE7zTJQZFW70rT61a6VNpT4AOuboFL6inhNpgKq/VL9IEFeiFU9a9jlkSUTfWGRsUB3VyBLzaJ2HFumQIdadSQSh4isq7n++IRnG90X8vPGnazyMqI1/DczCwmZJhoPBOGsu42qWUrUK3V+XfOXM8OgVpCkBX3NLXkIsPgwcNL25oDiAqgP2Q8Kr+1z5wanRL4Le4WMCGtRNwajHAibna0TcFZj5yml82dZGnh5CWsWtj4r0IhpttT3S5qbbSw/oac+2a/8IOXuJkEUVIvZsO+oVUyLtyPYorgv+uxRfLVK+eANNT+FTtjbcaPZsCi7FB0hDSLqMKQpKQfGcYovjrQhmipKNqjXcdrDBOoazUYVfwSiG+f1aqsSw+jPXAPO8eY+ZYw4eHrkh9XT4CpbW/Ksakg9Kr0timIcYbZQMSh7S37y2ikO5WK7fexZ0798LzB+D4r1jT/XwidBJZ+AMDvM5TBLPLz3yzbYS0ZuV59mVCYLG7cPZ8+FZXx16rVK0pKNiIAJq21Sb2llyQk5M+FRT50EKNF0WQBe1IEkQQOpZy8xLFx5lKtqqfEy/J1b46hAZmA6xTnwaXavZ0w8YriXyi664pqtSLiga9HYKWQMCsrRiSmWk2huefYznIok0A/vzKLW9GBgrKV18lk5uc3XRdN6ZRKQZHSa6KOLmByOWS5Od52BzXsl+p1Mud+VcKr36vONf182pIcAXuOwPQ99sb8SP34OS0UBW2/kWZsWKW7fQYbxrOynfQD9cx8vvP4yebe5c/PhhXPCZpTRnW5wNn76kPZ5dYWGFknXkxFNTHwg3acAIr2t6kNwOu3Oib2K0eoTNaUkz+VsUmJnrBsS8EEC8HM9k5yB4XHy4L3xrcNvE9WFF2dV9TekDe02WfERQVSMAdcPY8EQx/IYDMh7kuRl/QgatHtVJ9ExzCbO9+rdejxnZ+2Va+e+IJsxhBw4YAw==
+ page_age: 3 weeks ago
+ title: Latest | Government.nl
+ type: web_search_result
+ url: https://www.government.nl/latest
+ - encrypted_content: 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
+ page_age: null
+ title: Netherlands News | Latest Holland News - NewsNow
+ type: web_search_result
+ url: https://www.newsnow.co.uk/h/World+News/Europe/Western+Europe/Netherlands
+ - encrypted_content: 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
+ page_age: null
+ title: Netherlands news - Today’s latest updates - CBS News
+ type: web_search_result
+ url: https://www.cbsnews.com/tag/netherlands/
+ - encrypted_content: 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
+ page_age: null
+ title: DutchReview
+ type: web_search_result
+ url: https://dutchreview.com
+ - encrypted_content: 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
+ page_age: null
+ title: Expat Info News in the Netherlands | IamExpat
+ type: web_search_result
+ url: https://www.iamexpat.nl/dutch-news-articles?section=expat+info&type=news
+ - encrypted_content: EqYGCioIBhgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDIiR0ChCC+cJjFNL+BoMAhqK+gJOPBxKUJp0IjC9s4Ft813g1hjvC3H30CKpgs2BabBP/1U7ydQ4B5RtCgO/I9QsNa3/yzDjH02+hUEqqQUTccjgH1JNhMhxBAm3Rv0TRAAPjjfITKJXy89IH2ZhsIpQzopnPiHIjj8gGXcEx8jtYSnpGKg2BsWnKUtT/oskozeANLSawXhiJFXlmKAMGHR0Amgq2D+osveVh4L4hJ8sKZfvBTOzfce921be5j/a5J9GulOL/DWNB2aMmVaOB2+F9CzLVmiLWmWEyHj4sa5hUmcAMTp98F5i8J+OwdPIePqPXHkocqE4YfS0DUYYli/Ryy7fAcP4rcxEJGxlzDOHJB1BhwRnMfIBorYTzAsA2b+96awn1JgaqnLCDt7mniR+2ThKSMt251vXKRPt7oHF9+lx86pGyBXRZ8fcd3cZ97/PnF0ZttI9bsxDFN+CEK8smUuqSVMq02D//1Kfk5w2ZbufeiOnylW3+/uS6GtFH7CVakuuk6bD/wMh7TMEQjjwEMdmabaeDUHqHCUPmxXJFIljzQKtVIXkG86ksvBmrhd5lCtM9KCrcHda/5crP5ARqnrrOafRHn41anhGEdy3gU35aQPoEXZnTG8SI8+2pDnZqkPDKjREH6BKMsI5UpAFDYRfLWz9TLdYuHPuQzryj84NHMIc9keD1STfg+x+PlkyALn0JlGxDZBU+lEPT/vIJ+lSrNM65nRV0V8atemPhIukpXYflLIR1B8UjhT1kz6zpzTHBtPDCLp0o56eP3GI5Sk3vPXfdlwrwowSQWLwsa3SgCiBl1iWiCzMFBNO4Ev9UMpPYZczWr7HlHbntHV95zmLFZiQYop5lFhU7rCVZlOKa96QC0lqKHEnJIwKFk8v/8BiFPiYS4j257ntkX4tZ6G+xQqGz628zXeYnaSM3/F8uqnRANVvuvXJCleK+b0fWWq0BftkyZVqFbHRBtgXL3ZkZe3y7uVh2QLFpKx2UzT7j/oORmcYAw==
+ page_age: null
+ title: Netherlands Archives - Good News Network
+ type: web_search_result
+ url: https://www.goodnewsnetwork.org/tag/netherlands/
+ tool_use_id: srvtoolu_012HdDNujnyBQ2HNbysnuEKY
+ type: web_search_tool_result
+ - text: |+
+ Based on the latest search results, here are some of the key news stories from the Netherlands:
+
+ ## Recent Headlines
+
+ type: text
+ - citations:
+ - cited_text: Streak of warm summer weather starts today · 6 August 2025 - 08:32 · Image · Sports · Hadj Moussa’s
+ late goal wins Feyenoord first-leg of UCL qualifie...
+ encrypted_index: Eo8BCioIBhgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDBYjaOiIT9WpB2+mhBoMNRyPBghIuzkslM22IjDtkp3WoEBfGB8vLjSgdoxMWNioUz8D9thOxP7Fc0icapCvgHEkaxKV1b6GR9jatEwqE4JuvC6Q9BCYwFSC3sKMpnYuL/sYBA==
+ title: NL Times | Netherlands news in English
+ type: web_search_result_location
+ url: https://nltimes.nl/
+ text: '**Sports**: Hadj Moussa''s late goal wins Feyenoord first-leg of UCL qualifier against Fenerbahçe'
+ type: text
+ - text: |2+
+ (August 6, 2025)
+
+ type: text
+ - citations:
+ - cited_text: Streak of warm summer weather starts today · 6 August 2025 - 08:32 · Image · Sports · Hadj Moussa’s
+ late goal wins Feyenoord first-leg of UCL qualifie...
+ encrypted_index: Eo8BCioIBhgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDKbOscMY+G8Xb8OJGRoMm1+p+KakNpfkwDIIIjDqnPj3lXUu41yrsvs87N9HKwD+s1dyJHkaD81h3MdCEWipsvT+5HJQpd8ANUOJztoqExYnJQ/aE6Q1tMwXoN4cDIED33AYBA==
+ title: NL Times | Netherlands news in English
+ type: web_search_result_location
+ url: https://nltimes.nl/
+ text: '**Politics**: Agriculture Minister says she didn''t abuse her power by withholding critical report'
+ type: text
+ - text: |2+
+ (August 6, 2025)
+
+ type: text
+ - citations:
+ - cited_text: Streak of warm summer weather starts today · 6 August 2025 - 08:32 · Image · Sports · Hadj Moussa’s
+ late goal wins Feyenoord first-leg of UCL qualifie...
+ encrypted_index: Eo8BCioIBhgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDPleaLaOwq1fVQTjDxoMj5Gn3fHqOWsErEouIjANTJnZPnzhjmmK6qH/iZ5r/BFj0sGVMECrtpvF6E38c3poACLVNJmsN0vY8Ra2S60qEz6/bcONqF/zAo6iqK+SJlFnguUYBA==
+ title: NL Times | Netherlands news in English
+ type: web_search_result_location
+ url: https://nltimes.nl/
+ text: '**Crime**: Three more men arrested for posing as cops and scamming dozens of people'
+ type: text
+ - text: |2+
+ (August 6, 2025)
+
+ type: text
+ - citations:
+ - cited_text: Streak of warm summer weather starts today · 6 August 2025 - 08:32 · Image · Sports · Hadj Moussa’s
+ late goal wins Feyenoord first-leg of UCL qualifie...
+ encrypted_index: Eo8BCioIBhgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDEGy+5P9Xg1Z5IviwhoMbyh4edu4x18f58APIjA/TvUz6xodedo8Nr2jfAd9GhpbftJ8tkGD9GbHA5Xer1mcTysUKUHmIZ5daMmg+8oqE5A934VYdM45Aax2tNk9MZSvjlgYBA==
+ title: NL Times | Netherlands news in English
+ type: web_search_result_location
+ url: https://nltimes.nl/
+ text: '**Crime**: Dutch football executive arrested in Cyprus for alleged sexual abuse of children'
+ type: text
+ - text: |2+
+ (August 6, 2025)
+
+ type: text
+ - citations:
+ - cited_text: Streak of warm summer weather starts today · 6 August 2025 - 08:32 · Image · Sports · Hadj Moussa’s
+ late goal wins Feyenoord first-leg of UCL qualifie...
+ encrypted_index: Eo8BCioIBhgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDC3cOT0JXT2nBLqsaxoMfHjHVnSWPcBifZ68IjAFJ2kyfQRmXl+F6CI9BUDzCQaKz3ts6Y0pYs+SQ3svSaLYZ09xFEzh/Nnr+Muau/QqE9tH2t5te3g8Mwm+U8fZ8A5ucPcYBA==
+ title: NL Times | Netherlands news in English
+ type: web_search_result_location
+ url: https://nltimes.nl/
+ text: '**Weather**: Streak of warm summer weather starts today'
+ type: text
+ - text: |2+
+ (August 6, 2025)
+
+ ## Other Notable Recent Developments
+
+ type: text
+ - citations:
+ - cited_text: Streak of warm summer weather starts today · 6 August 2025 - 08:32 · Image · Sports · Hadj Moussa’s
+ late goal wins Feyenoord first-leg of UCL qualifie...
+ encrypted_index: Eo8BCioIBhgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDEGF4Vt1FKBkULfURRoM6+RZ3q8CgzaPWJcbIjDBEo77BsDSP84KkWy2NQN6ldTOihfpR2LrqBPI0BRX94HG6tOxIbX7reX0irDBf90qE9M7bK0tl2JA8Vcu7dbv8AbUwfAYBA==
+ title: NL Times | Netherlands news in English
+ type: web_search_result_location
+ url: https://nltimes.nl/
+ text: '**Crime Statistics**: Fraud reports in the Netherlands surge nearly 50 percent in first half of 2025'
+ type: text
+ - text: |2+
+
+
+ type: text
+ - citations:
+ - cited_text: '‘Terrorists are free and Jews boycotted’: the Netherlands bans senior Israeli Ministers from entering
+ country The New York Sun 1d ... Good communicati...'
+ encrypted_index: Eo8BCioIBhgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDICdSR1Jl3Dle+L5VBoMWVCX3NVRgNr+8R3HIjAwCd785sAsPdYS1bjKrhczdhyHbtn8Jw4tNoUer8EfBi2NRbviZXhTGJLVkdTMfoIqE9dEz8uDgh0/YfcHoGG+D8qwZ/AYBA==
+ title: Netherlands News | Latest Holland News - NewsNow
+ type: web_search_result_location
+ url: https://www.newsnow.co.uk/h/World+News/Europe/Western+Europe/Netherlands
+ text: '**International Relations**: The Netherlands bans senior Israeli Ministers from entering country'
+ type: text
+ - text: |2+
+
+
+ type: text
+ - citations:
+ - cited_text: 'Starting on 1 August, a self-driving bus will be driving autonomously on public roads in Rotterdam
+ for the first time. '
+ encrypted_index: EpABCioIBhgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDIJjhBpwLbYEmKvw+xoMEK/LdZJL1h5r69SdIjB/R4/W7Df7SH/clduIQz3q6VxJnqoY+LhlEiVvXyRhN8sbxrujK8WkdNUXM7ycXrIqFAXmnlmgodmspG6EcU2Z7Rcv++IkGAQ=
+ title: Find all the latest news about netherlands | euronews
+ type: web_search_result_location
+ url: https://www.euronews.com/news/europe/netherlands
+ text: '**Technology**: Starting on 1 August, a self-driving bus will be driving autonomously on public roads in Rotterdam
+ for the first time'
+ type: text
+ - text: |2+
+
+
+ type: text
+ - citations:
+ - cited_text: 'Through this ... ... On Thursday the Netherlands pledged €300 million for the reconstruction and recovery
+ of Ukraine in 2025 and 2026. '
+ encrypted_index: Eo8BCioIBhgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDHHr0Zu7EP6wb/vZPRoMQtlIclD9CaVWGCRFIjBFMLGKHEXtawsjR0kQ0WpnmsRD1P8uCW7Id8hmfW7UOVWoksEy2XoaqIzUo+GQYPcqE8O5+NTdizhsIKpwG5Qus8eSjyYYBA==
+ title: Latest | Government.nl
+ type: web_search_result_location
+ url: https://www.government.nl/latest
+ text: '**International Aid**: On Thursday the Netherlands pledged €300 million for the reconstruction and recovery
+ of Ukraine in 2025 and 2026'
+ type: text
+ - text: |2+
+
+
+ type: text
+ - citations:
+ - cited_text: 'In 2024, the Netherlands hit a major milestone: for the first time ever, more than half of its electricity
+ came from renewable sources. '
+ encrypted_index: Eo8BCioIBhgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDJPupkwzdSqjz0RKQRoMDsve7OgasCg1vIwxIjBuVACP2W31TWq9IfHIBOmRBnpIQCU0zdGZUQBMdKLc+Js8MBCr6ScRdwYyX6fnY0oqE37pJ2BnO2OpdHuBkF6IYu1YitcYBA==
+ title: DutchReview
+ type: web_search_result_location
+ url: https://dutchreview.com
+ text: '**Environment**: In 2024, the Netherlands hit a major milestone: for the first time ever, more than half of
+ its electricity came from renewable sources'
+ type: text
+ - text: |2-
+
+
+ The news sources indicate ongoing focus on crime prevention, international relations, sustainable energy progress, and support for Ukraine. The Netherlands continues to be actively involved in international affairs while addressing domestic security and infrastructure developments.
+ type: text
+ id: msg_011j9MsC3VmYJnTMTCXAddCA
+ model: claude-sonnet-4-20250514
+ role: assistant
+ stop_reason: end_turn
+ stop_sequence: null
+ type: message
+ usage:
+ cache_creation_input_tokens: 0
+ cache_read_input_tokens: 0
+ input_tokens: 12268
+ output_tokens: 578
+ server_tool_use:
+ web_search_requests: 1
+ service_tier: standard
+ status:
+ code: 200
+ message: OK
+- request:
+ headers:
+ accept:
+ - '*/*'
+ accept-encoding:
+ - gzip, deflate
+ connection:
+ - keep-alive
+ content-length:
+ - '2129'
+ content-type:
+ - application/json
+ host:
+ - generativelanguage.googleapis.com
+ method: POST
+ parsed_body:
+ contents:
+ - parts:
+ - text: What are the latest news in the Netherlands?
+ role: user
+ - parts:
+ - text: |+
+ Based on the latest search results, here are some of the key news stories from the Netherlands:
+
+ ## Recent Headlines
+
+ - text: '**Sports**: Hadj Moussa''s late goal wins Feyenoord first-leg of UCL qualifier against Fenerbahçe'
+ - text: |2+
+ (August 6, 2025)
+
+ - text: '**Politics**: Agriculture Minister says she didn''t abuse her power by withholding critical report'
+ - text: |2+
+ (August 6, 2025)
+
+ - text: '**Crime**: Three more men arrested for posing as cops and scamming dozens of people'
+ - text: |2+
+ (August 6, 2025)
+
+ - text: '**Crime**: Dutch football executive arrested in Cyprus for alleged sexual abuse of children'
+ - text: |2+
+ (August 6, 2025)
+
+ - text: '**Weather**: Streak of warm summer weather starts today'
+ - text: |2+
+ (August 6, 2025)
+
+ ## Other Notable Recent Developments
+
+ - text: '**Crime Statistics**: Fraud reports in the Netherlands surge nearly 50 percent in first half of 2025'
+ - text: |2+
+
+
+ - text: '**International Relations**: The Netherlands bans senior Israeli Ministers from entering country'
+ - text: |2+
+
+
+ - text: '**Technology**: Starting on 1 August, a self-driving bus will be driving autonomously on public roads in
+ Rotterdam for the first time'
+ - text: |2+
+
+
+ - text: '**International Aid**: On Thursday the Netherlands pledged €300 million for the reconstruction and recovery
+ of Ukraine in 2025 and 2026'
+ - text: |2+
+
+
+ - text: '**Environment**: In 2024, the Netherlands hit a major milestone: for the first time ever, more than half
+ of its electricity came from renewable sources'
+ - text: |2-
+
+
+ The news sources indicate ongoing focus on crime prevention, international relations, sustainable energy progress, and support for Ukraine. The Netherlands continues to be actively involved in international affairs while addressing domestic security and infrastructure developments.
+ role: model
+ - parts:
+ - text: What day is tomorrow?
+ role: user
+ generationConfig: {}
+ uri: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent
+ response:
+ headers:
+ alt-svc:
+ - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
+ content-length:
+ - '679'
+ content-type:
+ - application/json; charset=UTF-8
+ server-timing:
+ - gfet4t7; dur=391
+ transfer-encoding:
+ - chunked
+ vary:
+ - Origin
+ - X-Origin
+ - Referer
+ parsed_body:
+ candidates:
+ - avgLogprobs: -0.02217143544783959
+ content:
+ parts:
+ - text: |
+ Tomorrow is August 7, 2025.
+ role: model
+ finishReason: STOP
+ modelVersion: gemini-2.0-flash
+ responseId: _JCUaIHPB9SLqsMPw_iTgAw
+ usageMetadata:
+ candidatesTokenCount: 13
+ candidatesTokensDetails:
+ - modality: TEXT
+ tokenCount: 13
+ promptTokenCount: 361
+ promptTokensDetails:
+ - modality: TEXT
+ tokenCount: 361
+ totalTokenCount: 374
+ status:
+ code: 200
+ message: OK
+version: 1
diff --git a/tests/models/cassettes/test_google/test_google_model_server_tool_receive_history_from_another_provider.yaml b/tests/models/cassettes/test_google/test_google_model_server_tool_receive_history_from_another_provider.yaml
new file mode 100644
index 0000000000..c0ad83fd85
--- /dev/null
+++ b/tests/models/cassettes/test_google/test_google_model_server_tool_receive_history_from_another_provider.yaml
@@ -0,0 +1,172 @@
+interactions:
+- request:
+ headers:
+ accept:
+ - application/json
+ accept-encoding:
+ - gzip, deflate
+ connection:
+ - keep-alive
+ content-length:
+ - '250'
+ content-type:
+ - application/json
+ host:
+ - api.anthropic.com
+ method: POST
+ parsed_body:
+ max_tokens: 4096
+ messages:
+ - content:
+ - text: How much is 3 * 12390?
+ type: text
+ role: user
+ model: claude-sonnet-4-0
+ stream: false
+ tool_choice:
+ type: auto
+ tools:
+ - name: code_execution
+ type: code_execution_20250522
+ uri: https://api.anthropic.com/v1/messages?beta=true
+ response:
+ headers:
+ connection:
+ - keep-alive
+ content-length:
+ - '920'
+ content-type:
+ - application/json
+ strict-transport-security:
+ - max-age=31536000; includeSubDomains; preload
+ transfer-encoding:
+ - chunked
+ parsed_body:
+ container:
+ expires_at: '2025-08-07T12:34:48.926660+00:00'
+ id: container_011CRtH8FB5LEPVqMkqupkTy
+ content:
+ - text: I'll calculate 3 * 12390 for you.
+ type: text
+ - id: srvtoolu_01PxRfGz768wdcfze4RwVAjw
+ input:
+ code: |-
+ result = 3 * 12390
+ print(f"3 * 12390 = {result}")
+ name: code_execution
+ type: server_tool_use
+ - content:
+ content: []
+ return_code: 0
+ stderr: ''
+ stdout: |
+ 3 * 12390 = 37170
+ type: code_execution_result
+ tool_use_id: srvtoolu_01PxRfGz768wdcfze4RwVAjw
+ type: code_execution_tool_result
+ - text: 3 * 12390 = 37,170
+ type: text
+ id: msg_017vUE35gAsm2NEEH2fNLDAx
+ model: claude-sonnet-4-20250514
+ role: assistant
+ stop_reason: end_turn
+ stop_sequence: null
+ type: message
+ usage:
+ cache_creation_input_tokens: 0
+ cache_read_input_tokens: 0
+ input_tokens: 1630
+ output_tokens: 109
+ server_tool_use:
+ web_search_requests: 0
+ service_tier: standard
+ status:
+ code: 200
+ message: OK
+- request:
+ headers:
+ accept:
+ - '*/*'
+ accept-encoding:
+ - gzip, deflate
+ connection:
+ - keep-alive
+ content-length:
+ - '308'
+ content-type:
+ - application/json
+ host:
+ - generativelanguage.googleapis.com
+ method: POST
+ parsed_body:
+ contents:
+ - parts:
+ - text: How much is 3 * 12390?
+ role: user
+ - parts:
+ - text: I'll calculate 3 * 12390 for you.
+ - text: 3 * 12390 = 37,170
+ role: model
+ - parts:
+ - text: Multiplied by 12390
+ role: user
+ generationConfig: {}
+ tools:
+ - codeExecution: {}
+ uri: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent
+ response:
+ headers:
+ alt-svc:
+ - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
+ content-length:
+ - '1378'
+ content-type:
+ - application/json; charset=UTF-8
+ server-timing:
+ - gfet4t7; dur=7224
+ transfer-encoding:
+ - chunked
+ vary:
+ - Origin
+ - X-Origin
+ - Referer
+ parsed_body:
+ candidates:
+ - content:
+ parts:
+ - text: |+
+ Okay, I understand. You want to calculate the result of 3 * 12390, and then multiply that result by 12390 again. In other words, you want to calculate (3 * 12390) * 12390. I'll calculate that for you.
+
+ - executableCode:
+ code: |
+ result = (3 * 12390) * 12390
+ print(result)
+ language: PYTHON
+ - codeExecutionResult:
+ outcome: OUTCOME_OK
+ output: |
+ 460536300
+ - text: |
+ So, (3 * 12390) * 12390 = 460,536,300.
+ role: model
+ finishReason: STOP
+ modelVersion: gemini-2.0-flash
+ responseId: Wo-UaOCoENSLqsMPw_iTgAw
+ usageMetadata:
+ candidatesTokenCount: 141
+ candidatesTokensDetails:
+ - modality: TEXT
+ tokenCount: 141
+ promptTokenCount: 54
+ promptTokensDetails:
+ - modality: TEXT
+ tokenCount: 54
+ toolUsePromptTokenCount: 161
+ toolUsePromptTokensDetails:
+ - modality: TEXT
+ tokenCount: 161
+ totalTokenCount: 356
+ status:
+ code: 200
+ message: OK
+version: 1
diff --git a/tests/models/cassettes/test_google/test_google_model_web_search_tool.yaml b/tests/models/cassettes/test_google/test_google_model_web_search_tool.yaml
new file mode 100644
index 0000000000..e880750ace
--- /dev/null
+++ b/tests/models/cassettes/test_google/test_google_model_web_search_tool.yaml
@@ -0,0 +1,199 @@
+interactions:
+- request:
+ headers:
+ accept:
+ - '*/*'
+ accept-encoding:
+ - gzip, deflate
+ connection:
+ - keep-alive
+ content-length:
+ - '233'
+ content-type:
+ - application/json
+ host:
+ - generativelanguage.googleapis.com
+ method: POST
+ parsed_body:
+ contents:
+ - parts:
+ - text: What day is today in Utrecht?
+ role: user
+ generationConfig: {}
+ systemInstruction:
+ parts:
+ - text: You are a helpful chatbot.
+ role: user
+ tools:
+ - googleSearch: {}
+ uri: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent
+ response:
+ headers:
+ alt-svc:
+ - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
+ content-length:
+ - '5991'
+ content-type:
+ - application/json; charset=UTF-8
+ server-timing:
+ - gfet4t7; dur=1340
+ transfer-encoding:
+ - chunked
+ vary:
+ - Origin
+ - X-Origin
+ - Referer
+ parsed_body:
+ candidates:
+ - content:
+ parts:
+ - text: |
+ Today is Wednesday, May 28, 2025, in Utrecht.
+ role: model
+ finishReason: STOP
+ groundingMetadata:
+ retrievalMetadata: {}
+ searchEntryPoint:
+ renderedContent: |
+
+
+
+
+
+
+
+
+
+ webSearchQueries:
+ - current date Utrecht
+ modelVersion: gemini-2.0-flash
+ responseId: LN42aKzNCaqvgLUP1Lz-8As
+ usageMetadata:
+ candidatesTokenCount: 19
+ candidatesTokensDetails:
+ - modality: TEXT
+ tokenCount: 19
+ promptTokenCount: 13
+ promptTokensDetails:
+ - modality: TEXT
+ tokenCount: 13
+ totalTokenCount: 32
+ status:
+ code: 200
+ message: OK
+version: 1
diff --git a/tests/models/cassettes/test_groq/test_groq_model_web_search_tool.yaml b/tests/models/cassettes/test_groq/test_groq_model_web_search_tool.yaml
new file mode 100644
index 0000000000..355dea905f
--- /dev/null
+++ b/tests/models/cassettes/test_groq/test_groq_model_web_search_tool.yaml
@@ -0,0 +1,273 @@
+interactions:
+- request:
+ headers:
+ accept:
+ - application/json
+ accept-encoding:
+ - gzip, deflate
+ connection:
+ - keep-alive
+ content-length:
+ - '106'
+ content-type:
+ - application/json
+ host:
+ - api.groq.com
+ method: POST
+ parsed_body:
+ messages:
+ - content: What day is today?
+ role: user
+ model: compound-beta
+ n: 1
+ stream: false
+ uri: https://api.groq.com/openai/v1/chat/completions
+ response:
+ headers:
+ alt-svc:
+ - h3=":443"; ma=86400
+ cache-control:
+ - private, max-age=0, no-store, no-cache, must-revalidate
+ connection:
+ - keep-alive
+ content-length:
+ - '13044'
+ content-type:
+ - application/json
+ transfer-encoding:
+ - chunked
+ vary:
+ - Origin
+ parsed_body:
+ choices:
+ - finish_reason: stop
+ index: 0
+ logprobs: null
+ message:
+ content: The current day is Tuesday.
+ executed_tools:
+ - arguments: '{"query": "What is the current date?"}'
+ index: 0
+ output: |+
+ Title: Today's Date - Find Out Quickly What's The Date Today ️
+ URL: https://calendarhours.com/todays-date/
+ Content: The current date in RFC 2822 Format with shortened day of week, numerical date, three-letter month abbreviation, year, time, and time zone is: Tue, 13 May 2025 06:07:56 -0400; The current date in Unix Epoch Format with number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT) is:
+ Score: 0.8299
+
+ Title: Today's Date | Current date now - MaxTables
+ URL: https://maxtables.com/tools/todays-date.html
+ Content: The current date, including day of the week, month, day, and year. The exact time, down to seconds. Details on the time zone, its location, and its GMT difference. A tool to select the present date. A visual calendar chart. Why would I need to check Today's Date on this platform instead of my device?
+ Score: 0.7223
+
+ Title: Current Time and Date - Exact Time!
+ URL: https://time-and-calendar.com/
+ Content: The actual time is: Mon May 12 2025 22:14:39 GMT-0700 (Pacific Daylight Time) Your computer time is: 22:14:38 The time of your computer is synchronized with our web server. This mean that it is synchronizing in real time with our server clock.
+ Score: 0.6799
+
+ Title: Today's Date - CalendarDate.com
+ URL: https://www.calendardate.com/todays.htm
+ Content: Details about today's date with count of days, weeks, and months, Sun and Moon cycles, Zodiac signs and holidays. Monday May 12, 2025 . Home; Calendars. 2025 Calendar; ... Current Season Today: Spring with 40 days until the start of Summer. S. Hemisphere flip seasons - i.e. Winter is Summer.
+ Score: 0.6416
+
+ Title: What is the date today | Today's Date
+ URL: https://www.datetoday.info/
+ Content: Master time tracking with Today's Date. Stay updated with real-time information on current date, time, day of the week, days left in the week, current day and remaining days of the year. Explore time in globally accepted formats. Keep up with the current week and month, along with the remaining weeks and months for the year. Embrace efficient time tracking with Today's Date.
+ Score: 0.6282
+
+ Title: Explore Today's Date, Time Zones, Holidays & More
+ URL: https://whatdateis.today/
+ Content: Check what date and time it is today (May 8, 2025). View current time across different time zones, upcoming holidays, and use our date calculator. Your one-stop destination for all date and time information.
+ Score: 0.6181
+
+ Title: Today's Date and Time - Date and Time Tools
+ URL: https://todaysdatetime.com/
+ Content: Discover today's exact date and time, learn about time zones, date formats, and explore our comprehensive collection of date and time tools including calculators, converters, and calendars. ... Get the exact current date and time, along with powerful calculation tools for all your scheduling needs. 12h. Today. Day 76 of year (366) Yesterday
+ Score: 0.5456
+
+ Title: Current Time Now - What time is it? - RapidTables.com
+ URL: https://www.rapidtables.com/tools/current-time.html
+ Content: This page includes the following information: Current time: hours, minutes, seconds. Today's date: day of week, month, day, year. Time zone with location and GMT offset.
+ Score: 0.4255
+
+ Title: Current Time
+ URL: https://www.timeanddate.com/
+ Content: Welcome to the world's top site for time, time zones, and astronomy. Organize your life with free online info and tools you can rely on. No sign-up needed. Sign in. News. News Home; Astronomy News; ... Current Time. Monday May 12, 2025 Roanoke Rapids, North Carolina, USA. Set home location. 11:27: 03 pm. World Clock.
+ Score: 0.3876
+
+ Title: Current local time in the United States - World clock
+ URL: https://dateandtime.info/country.php?code=US
+ Content: Time and Date of DST Change Time Change; DST started: Sunday, March 9, 2025 at 2:00 AM: The clocks were put forward an hour to 3:00 AM. DST ends: Sunday, November 2, 2025 at 2:00 AM: The clocks will be put back an hour to 1:00 AM. DST starts: Sunday, March 8, 2026 at 2:00 AM: The clocks will be put forward an hour to 3:00 AM.
+ Score: 0.3042
+
+ Title: Time.is - exact time, any time zone
+ URL: https://time.is/
+ Content: 7 million locations, 58 languages, synchronized with atomic clock time. Time.is. Get Time.is Ad-free! Exact time now: 05:08:45. Tuesday, 13 May, 2025, week 20. Sun: ↑ 05:09 ↓ 20:45 (15h 36m) - More info - Make London time default - Remove from favorite locations
+ Score: 0.2796
+
+ Title: Time in United States now
+ URL: https://time.is/United_States
+ Content: Exact time now, time zone, time difference, sunrise/sunset time and key facts for United States. Time.is. Get Time.is Ad-free! Time in United States now . 11:17:42 PM. Monday, May 12, 2025. United States (incl. dependent territories) has 11 time zones. The time zone for the capital Washington, D.C. is used here.
+ Score: 0.2726
+
+ Title: Current Local Time in the United States - timeanddate.com
+ URL: https://www.timeanddate.com/worldclock/usa
+ Content: United States time now. USA time zones and time zone map with current time in each state.
+ Score: 0.2519
+
+ Title: Current local time in United States - World Time Clock & Map
+ URL: https://24timezones.com/United-States/time
+ Content: Check the current time in United States and time zone information, the UTC offset and daylight saving time dates in 2025.
+ Score: 0.2221
+
+ Title: The World Clock — Worldwide - timeanddate.com
+ URL: https://www.timeanddate.com/worldclock/
+ Content: World time and date for cities in all time zones. International time right now. Takes into account all DST clock changes.
+ Score: 0.2134
+
+ type: search
+ reasoning: |2-
+
+ To determine the current day, I need to access real-time information. I will use the search tool to find out the current date.
+
+
+ search(What is the current date?)
+
+
+ The current date is Tuesday, May 13, 2025.
+
+
+
+ The current day is Tuesday.
+ role: assistant
+ created: 1747232793
+ id: stub
+ model: compound-beta
+ object: chat.completion
+ system_fingerprint: null
+ usage:
+ completion_time: 0.312814
+ completion_tokens: 117
+ prompt_time: 0.737839
+ prompt_tokens: 4287
+ queue_time: 1.687734
+ total_time: 1.050655
+ total_tokens: 4404
+ usage_breakdown:
+ models:
+ - model: llama-3.3-70b-versatile
+ usage:
+ completion_time: 0.033092212
+ completion_tokens: 4
+ prompt_time: 0.008749282
+ prompt_tokens: 134
+ queue_time: 0.251916212
+ total_time: 0.041841494
+ total_tokens: 138
+ - model: meta-llama/llama-4-scout-17b-16e-instruct
+ usage:
+ completion_time: 0.198660413
+ completion_tokens: 82
+ prompt_time: 0.026323206
+ prompt_tokens: 491
+ queue_time: 0.556546565
+ total_time: 0.224983619
+ total_tokens: 573
+ - model: meta-llama/llama-4-scout-17b-16e-instruct
+ usage:
+ completion_time: 0.047136438
+ completion_tokens: 24
+ prompt_time: 0.077990192
+ prompt_tokens: 1926
+ queue_time: 0.619169638
+ total_time: 0.12512663
+ total_tokens: 1950
+ - model: llama-3.3-70b-versatile
+ usage:
+ completion_time: 0.033926045
+ completion_tokens: 7
+ prompt_time: 0.624777225
+ prompt_tokens: 1736
+ queue_time: 0.26010064499999996
+ total_time: 0.65870327
+ total_tokens: 1743
+ x_groq:
+ id: stub
+ status:
+ code: 200
+ message: OK
+version: 1
diff --git a/tests/models/cassettes/test_openai/test_openai_web_search_tool.yaml b/tests/models/cassettes/test_openai/test_openai_web_search_tool.yaml
new file mode 100644
index 0000000000..cd48b3ea92
--- /dev/null
+++ b/tests/models/cassettes/test_openai/test_openai_web_search_tool.yaml
@@ -0,0 +1,79 @@
+interactions:
+- request:
+ headers:
+ accept:
+ - application/json
+ accept-encoding:
+ - gzip, deflate
+ connection:
+ - keep-alive
+ content-length:
+ - '218'
+ content-type:
+ - application/json
+ host:
+ - api.openai.com
+ method: POST
+ parsed_body:
+ messages:
+ - content: You are a helpful assistant.
+ role: system
+ - content: What day is today?
+ role: user
+ model: gpt-4o-search-preview
+ stream: false
+ web_search_options:
+ search_context_size: low
+ uri: https://api.openai.com/v1/chat/completions
+ response:
+ headers:
+ access-control-expose-headers:
+ - X-Request-ID
+ alt-svc:
+ - h3=":443"; ma=86400
+ connection:
+ - keep-alive
+ content-length:
+ - '785'
+ content-type:
+ - application/json
+ openai-organization:
+ - pydantic-28gund
+ openai-processing-ms:
+ - '2051'
+ openai-version:
+ - '2020-10-01'
+ strict-transport-security:
+ - max-age=31536000; includeSubDomains; preload
+ transfer-encoding:
+ - chunked
+ parsed_body:
+ choices:
+ - finish_reason: stop
+ index: 0
+ message:
+ annotations: []
+ content: 'May 14, 2025, 8:51:29 AM '
+ refusal: null
+ role: assistant
+ created: 1747227087
+ id: chatcmpl-e05fbf7b-44c0-406d-8662-bc7a9a518747
+ model: gpt-4o-search-preview-2025-03-11
+ object: chat.completion
+ system_fingerprint: ''
+ usage:
+ completion_tokens: 17
+ completion_tokens_details:
+ accepted_prediction_tokens: 0
+ audio_tokens: 0
+ reasoning_tokens: 0
+ rejected_prediction_tokens: 0
+ prompt_tokens: 11
+ prompt_tokens_details:
+ audio_tokens: 0
+ cached_tokens: 0
+ total_tokens: 28
+ status:
+ code: 200
+ message: OK
+version: 1
diff --git a/tests/models/cassettes/test_openai/test_openai_web_search_tool_model_not_supported.yaml b/tests/models/cassettes/test_openai/test_openai_web_search_tool_model_not_supported.yaml
new file mode 100644
index 0000000000..0a102fa799
--- /dev/null
+++ b/tests/models/cassettes/test_openai/test_openai_web_search_tool_model_not_supported.yaml
@@ -0,0 +1,57 @@
+interactions:
+- request:
+ headers:
+ accept:
+ - application/json
+ accept-encoding:
+ - gzip, deflate
+ connection:
+ - keep-alive
+ content-length:
+ - '203'
+ content-type:
+ - application/json
+ host:
+ - api.openai.com
+ method: POST
+ parsed_body:
+ messages:
+ - content: You are a helpful assistant.
+ role: system
+ - content: What day is today?
+ role: user
+ model: gpt-4o
+ stream: false
+ web_search_options:
+ search_context_size: low
+ uri: https://api.openai.com/v1/chat/completions
+ response:
+ headers:
+ access-control-expose-headers:
+ - X-Request-ID
+ alt-svc:
+ - h3=":443"; ma=86400
+ connection:
+ - keep-alive
+ content-length:
+ - '177'
+ content-type:
+ - application/json
+ openai-organization:
+ - pydantic-28gund
+ openai-processing-ms:
+ - '23'
+ openai-version:
+ - '2020-10-01'
+ strict-transport-security:
+ - max-age=31536000; includeSubDomains; preload
+ parsed_body:
+ error:
+ code: null
+ message: Web search options not supported with this model.
+ param: web_search_options
+ type: invalid_request_error
+ status:
+ code: 400
+ message: Bad Request
+version: 1
diff --git a/tests/models/cassettes/test_openai/test_openai_web_search_tool_with_user_location.yaml b/tests/models/cassettes/test_openai/test_openai_web_search_tool_with_user_location.yaml
new file mode 100644
index 0000000000..30a5574515
--- /dev/null
+++ b/tests/models/cassettes/test_openai/test_openai_web_search_tool_with_user_location.yaml
@@ -0,0 +1,91 @@
+interactions:
+- request:
+ headers:
+ accept:
+ - application/json
+ accept-encoding:
+ - gzip, deflate
+ connection:
+ - keep-alive
+ content-length:
+ - '322'
+ content-type:
+ - application/json
+ host:
+ - api.openai.com
+ method: POST
+ parsed_body:
+ messages:
+ - content: You are a helpful assistant.
+ role: system
+ - content: What is the current temperature?
+ role: user
+ model: gpt-4o-search-preview
+ stream: false
+ web_search_options:
+ search_context_size: medium
+ user_location:
+ approximate:
+ city: Utrecht
+ country: NL
+ type: approximate
+ uri: https://api.openai.com/v1/chat/completions
+ response:
+ headers:
+ access-control-expose-headers:
+ - X-Request-ID
+ alt-svc:
+ - h3=":443"; ma=86400
+ connection:
+ - keep-alive
+ content-length:
+ - '1656'
+ content-type:
+ - application/json
+ openai-organization:
+ - pydantic-28gund
+ openai-processing-ms:
+ - '3979'
+ openai-version:
+ - '2020-10-01'
+ strict-transport-security:
+ - max-age=31536000; includeSubDomains; preload
+ transfer-encoding:
+ - chunked
+ parsed_body:
+ choices:
+ - finish_reason: stop
+ index: 0
+ message:
+ annotations: []
+ content: "Het is momenteel zonnig in Utrecht met een temperatuur van 22°C.\n\n## Weer voor Utrecht, Nederland:\nHuidige
+ omstandigheden: Zonnig, 72°F (22°C)\n\nDagvoorspelling:\n* woensdag, mei 14: minimum: 48°F (9°C), maximum: 71°F
+ (22°C), beschrijving: Afnemende bewolking\n* donderdag, mei 15: minimum: 43°F (6°C), maximum: 67°F (20°C), beschrijving:
+ Na een bewolkt begin keert de zon terug\n* vrijdag, mei 16: minimum: 45°F (7°C), maximum: 64°F (18°C), beschrijving:
+ Overwegend zonnig\n* zaterdag, mei 17: minimum: 47°F (9°C), maximum: 68°F (20°C), beschrijving: Overwegend zonnig\n*
+ zondag, mei 18: minimum: 47°F (8°C), maximum: 68°F (20°C), beschrijving: Deels zonnig\n* maandag, mei 19: minimum:
+ 49°F (9°C), maximum: 70°F (21°C), beschrijving: Deels zonnig\n* dinsdag, mei 20: minimum: 49°F (10°C), maximum:
+ 72°F (22°C), beschrijving: Zonnig tot gedeeltelijk bewolkt\n "
+ refusal: null
+ role: assistant
+ created: 1747227540
+ id: chatcmpl-da029146-a630-4224-9d12-7d808b031fbc
+ model: gpt-4o-search-preview-2025-03-11
+ object: chat.completion
+ system_fingerprint: ''
+ usage:
+ completion_tokens: 293
+ completion_tokens_details:
+ accepted_prediction_tokens: 0
+ audio_tokens: 0
+ reasoning_tokens: 0
+ rejected_prediction_tokens: 0
+ prompt_tokens: 12
+ prompt_tokens_details:
+ audio_tokens: 0
+ cached_tokens: 0
+ total_tokens: 305
+ status:
+ code: 200
+ message: OK
+version: 1
diff --git a/tests/models/cassettes/test_openai_responses/test_openai_responses_code_execution_tool.yaml b/tests/models/cassettes/test_openai_responses/test_openai_responses_code_execution_tool.yaml
new file mode 100644
index 0000000000..f252e5e92c
--- /dev/null
+++ b/tests/models/cassettes/test_openai_responses/test_openai_responses_code_execution_tool.yaml
@@ -0,0 +1,108 @@
+interactions:
+- request:
+ headers:
+ accept:
+ - application/json
+ accept-encoding:
+ - gzip, deflate
+ connection:
+ - keep-alive
+ content-length:
+ - '223'
+ content-type:
+ - application/json
+ host:
+ - api.openai.com
+ method: POST
+ parsed_body:
+ input:
+ - content: What is 3 * 12390?
+ role: user
+ instructions: You are a helpful assistant.
+ model: gpt-4o
+ stream: false
+ tool_choice: auto
+ tools:
+ - container:
+ type: auto
+ type: code_interpreter
+ uri: https://api.openai.com/v1/responses
+ response:
+ headers:
+ alt-svc:
+ - h3=":443"; ma=86400
+ connection:
+ - keep-alive
+ content-length:
+ - '1487'
+ content-type:
+ - application/json
+ openai-organization:
+ - pydantic-28gund
+ openai-processing-ms:
+ - '3283'
+ openai-project:
+ - proj_dKobscVY9YJxeEaDJen54e3d
+ openai-version:
+ - '2020-10-01'
+ strict-transport-security:
+ - max-age=31536000; includeSubDomains; preload
+ transfer-encoding:
+ - chunked
+ parsed_body:
+ background: false
+ created_at: 1754567678
+ error: null
+ id: resp_689493fdfbc08192abcc3932b6d57146056b97be5d7d0ada
+ incomplete_details: null
+ instructions: You are a helpful assistant.
+ max_output_tokens: null
+ max_tool_calls: null
+ metadata: {}
+ model: gpt-4o-2024-08-06
+ object: response
+ output:
+ - content:
+ - annotations: []
+ logprobs: []
+ text: \(3 \times 12390 = 37170\).
+ type: output_text
+ id: msg_68949400d32481928d1825ed03563132056b97be5d7d0ada
+ role: assistant
+ status: completed
+ type: message
+ parallel_tool_calls: true
+ previous_response_id: null
+ prompt_cache_key: null
+ reasoning:
+ effort: null
+ summary: null
+ safety_identifier: null
+ service_tier: default
+ status: completed
+ store: true
+ temperature: 1.0
+ text:
+ format:
+ type: text
+ tool_choice: auto
+ tools:
+ - container:
+ type: auto
+ type: code_interpreter
+ top_logprobs: 0
+ top_p: 1.0
+ truncation: disabled
+ usage:
+ input_tokens: 165
+ input_tokens_details:
+ cached_tokens: 0
+ output_tokens: 15
+ output_tokens_details:
+ reasoning_tokens: 0
+ total_tokens: 180
+ user: null
+ status:
+ code: 200
+ message: OK
+version: 1
diff --git a/tests/models/cassettes/test_openai_responses/test_openai_responses_code_execution_tool_stream.yaml b/tests/models/cassettes/test_openai_responses/test_openai_responses_code_execution_tool_stream.yaml
new file mode 100644
index 0000000000..29e48764c5
--- /dev/null
+++ b/tests/models/cassettes/test_openai_responses/test_openai_responses_code_execution_tool_stream.yaml
@@ -0,0 +1,119 @@
+interactions:
+- request:
+ headers:
+ accept:
+ - application/json
+ accept-encoding:
+ - gzip, deflate
+ connection:
+ - keep-alive
+ content-length:
+ - '222'
+ content-type:
+ - application/json
+ host:
+ - api.openai.com
+ method: POST
+ parsed_body:
+ input:
+ - content: What is 3 * 12390?
+ role: user
+ instructions: You are a helpful assistant.
+ model: gpt-4o
+ stream: true
+ tool_choice: auto
+ tools:
+ - container:
+ type: auto
+ type: code_interpreter
+ uri: https://api.openai.com/v1/responses
+ response:
+ body:
+ string: |+
+ event: response.created
+ data: {"type":"response.created","sequence_number":0,"response":{"id":"resp_6894960332808192bc2e3af2687138170f6766ea87e53a34","object":"response","created_at":1754568195,"status":"in_progress","background":false,"error":null,"incomplete_details":null,"instructions":"You are a helpful assistant.","max_output_tokens":null,"max_tool_calls":null,"model":"gpt-4o-2024-08-06","output":[],"parallel_tool_calls":true,"previous_response_id":null,"prompt_cache_key":null,"reasoning":{"effort":null,"summary":null},"safety_identifier":null,"service_tier":"auto","store":true,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"auto","tools":[{"type":"code_interpreter","container":{"type":"auto"}}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}}}
+
+ event: response.in_progress
+ data: {"type":"response.in_progress","sequence_number":1,"response":{"id":"resp_6894960332808192bc2e3af2687138170f6766ea87e53a34","object":"response","created_at":1754568195,"status":"in_progress","background":false,"error":null,"incomplete_details":null,"instructions":"You are a helpful assistant.","max_output_tokens":null,"max_tool_calls":null,"model":"gpt-4o-2024-08-06","output":[],"parallel_tool_calls":true,"previous_response_id":null,"prompt_cache_key":null,"reasoning":{"effort":null,"summary":null},"safety_identifier":null,"service_tier":"auto","store":true,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"auto","tools":[{"type":"code_interpreter","container":{"type":"auto"}}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}}}
+
+ event: response.output_item.added
+ data: {"type":"response.output_item.added","sequence_number":2,"output_index":0,"item":{"id":"msg_6894960732d4819284cbfad4b9a1301d0f6766ea87e53a34","type":"message","status":"in_progress","content":[],"role":"assistant"}}
+
+ event: response.content_part.added
+ data: {"type":"response.content_part.added","sequence_number":3,"item_id":"msg_6894960732d4819284cbfad4b9a1301d0f6766ea87e53a34","output_index":0,"content_index":0,"part":{"type":"output_text","annotations":[],"logprobs":[],"text":""}}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":4,"item_id":"msg_6894960732d4819284cbfad4b9a1301d0f6766ea87e53a34","output_index":0,"content_index":0,"delta":"\\(","logprobs":[],"obfuscation":"SRk8eCj2Q7o45J"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":5,"item_id":"msg_6894960732d4819284cbfad4b9a1301d0f6766ea87e53a34","output_index":0,"content_index":0,"delta":"3","logprobs":[],"obfuscation":"sOOmXRdpwf4iPfZ"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":6,"item_id":"msg_6894960732d4819284cbfad4b9a1301d0f6766ea87e53a34","output_index":0,"content_index":0,"delta":" \\","logprobs":[],"obfuscation":"WxLXsBMteY72ZE"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":7,"item_id":"msg_6894960732d4819284cbfad4b9a1301d0f6766ea87e53a34","output_index":0,"content_index":0,"delta":"times","logprobs":[],"obfuscation":"s2kUuooB1zK"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":8,"item_id":"msg_6894960732d4819284cbfad4b9a1301d0f6766ea87e53a34","output_index":0,"content_index":0,"delta":" ","logprobs":[],"obfuscation":"h7g3rCv2FhVfQRz"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":9,"item_id":"msg_6894960732d4819284cbfad4b9a1301d0f6766ea87e53a34","output_index":0,"content_index":0,"delta":"123","logprobs":[],"obfuscation":"wCJju5ucHKLf3"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":10,"item_id":"msg_6894960732d4819284cbfad4b9a1301d0f6766ea87e53a34","output_index":0,"content_index":0,"delta":"90","logprobs":[],"obfuscation":"g9WWCUkgn8WrnB"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":11,"item_id":"msg_6894960732d4819284cbfad4b9a1301d0f6766ea87e53a34","output_index":0,"content_index":0,"delta":" =","logprobs":[],"obfuscation":"b3KStM5DvUwBlh"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":12,"item_id":"msg_6894960732d4819284cbfad4b9a1301d0f6766ea87e53a34","output_index":0,"content_index":0,"delta":" ","logprobs":[],"obfuscation":"gI3mK4z4OxFPMKz"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":13,"item_id":"msg_6894960732d4819284cbfad4b9a1301d0f6766ea87e53a34","output_index":0,"content_index":0,"delta":"371","logprobs":[],"obfuscation":"8fOMxEiOcxyFK"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":14,"item_id":"msg_6894960732d4819284cbfad4b9a1301d0f6766ea87e53a34","output_index":0,"content_index":0,"delta":"70","logprobs":[],"obfuscation":"pX38vMaxgtv32u"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":15,"item_id":"msg_6894960732d4819284cbfad4b9a1301d0f6766ea87e53a34","output_index":0,"content_index":0,"delta":"\\","logprobs":[],"obfuscation":"KEyskeqrnm1ZPOB"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":16,"item_id":"msg_6894960732d4819284cbfad4b9a1301d0f6766ea87e53a34","output_index":0,"content_index":0,"delta":").","logprobs":[],"obfuscation":"Csc7IFpMfbY2Lg"}
+
+ event: response.output_text.done
+ data: {"type":"response.output_text.done","sequence_number":17,"item_id":"msg_6894960732d4819284cbfad4b9a1301d0f6766ea87e53a34","output_index":0,"content_index":0,"text":"\\(3 \\times 12390 = 37170\\).","logprobs":[]}
+
+ event: response.content_part.done
+ data: {"type":"response.content_part.done","sequence_number":18,"item_id":"msg_6894960732d4819284cbfad4b9a1301d0f6766ea87e53a34","output_index":0,"content_index":0,"part":{"type":"output_text","annotations":[],"logprobs":[],"text":"\\(3 \\times 12390 = 37170\\)."}}
+
+ event: response.output_item.done
+ data: {"type":"response.output_item.done","sequence_number":19,"output_index":0,"item":{"id":"msg_6894960732d4819284cbfad4b9a1301d0f6766ea87e53a34","type":"message","status":"completed","content":[{"type":"output_text","annotations":[],"logprobs":[],"text":"\\(3 \\times 12390 = 37170\\)."}],"role":"assistant"}}
+
+ event: response.completed
+ data: {"type":"response.completed","sequence_number":20,"response":{"id":"resp_6894960332808192bc2e3af2687138170f6766ea87e53a34","object":"response","created_at":1754568195,"status":"completed","background":false,"error":null,"incomplete_details":null,"instructions":"You are a helpful assistant.","max_output_tokens":null,"max_tool_calls":null,"model":"gpt-4o-2024-08-06","output":[{"id":"msg_6894960732d4819284cbfad4b9a1301d0f6766ea87e53a34","type":"message","status":"completed","content":[{"type":"output_text","annotations":[],"logprobs":[],"text":"\\(3 \\times 12390 = 37170\\)."}],"role":"assistant"}],"parallel_tool_calls":true,"previous_response_id":null,"prompt_cache_key":null,"reasoning":{"effort":null,"summary":null},"safety_identifier":null,"service_tier":"default","store":true,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"auto","tools":[{"type":"code_interpreter","container":{"type":"auto"}}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":{"input_tokens":165,"input_tokens_details":{"cached_tokens":0},"output_tokens":15,"output_tokens_details":{"reasoning_tokens":0},"total_tokens":180},"user":null,"metadata":{}}}
+
+ headers:
+ alt-svc:
+ - h3=":443"; ma=86400
+ connection:
+ - keep-alive
+ content-type:
+ - text/event-stream; charset=utf-8
+ openai-organization:
+ - pydantic-28gund
+ openai-processing-ms:
+ - '3370'
+ openai-project:
+ - proj_dKobscVY9YJxeEaDJen54e3d
+ openai-version:
+ - '2020-10-01'
+ strict-transport-security:
+ - max-age=31536000; includeSubDomains; preload
+ transfer-encoding:
+ - chunked
+ status:
+ code: 200
+ message: OK
+version: 1
+...
diff --git a/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool.yaml b/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool.yaml
new file mode 100644
index 0000000000..5996ed6c48
--- /dev/null
+++ b/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool.yaml
@@ -0,0 +1,114 @@
+interactions:
+- request:
+ headers:
+ accept:
+ - application/json
+ accept-encoding:
+ - gzip, deflate
+ connection:
+ - keep-alive
+ content-length:
+ - '231'
+ content-type:
+ - application/json
+ host:
+ - api.openai.com
+ method: POST
+ parsed_body:
+ input:
+ - content: What day is it today?
+ role: user
+ instructions: You are a helpful assistant.
+ model: gpt-4o
+ stream: false
+ tool_choice: auto
+ tools:
+ - search_context_size: medium
+ type: web_search_preview
+ uri: https://api.openai.com/v1/responses
+ response:
+ headers:
+ alt-svc:
+ - h3=":443"; ma=86400
+ connection:
+ - keep-alive
+ content-length:
+ - '2569'
+ content-type:
+ - application/json
+ openai-organization:
+ - pydantic-28gund
+ openai-processing-ms:
+ - '3632'
+ openai-version:
+ - '2020-10-01'
+ strict-transport-security:
+ - max-age=31536000; includeSubDomains; preload
+ transfer-encoding:
+ - chunked
+ parsed_body:
+ created_at: 1747227360
+ error: null
+ id: resp_682492e0aab88191afcadcbbb85e1a490e7f27fcb18d04ed
+ incomplete_details: null
+ instructions: You are a helpful assistant.
+ max_output_tokens: null
+ metadata: {}
+ model: gpt-4o-2024-08-06
+ object: response
+ output:
+ - id: ws_682492e1b7a08191b30170317ea7ee570e7f27fcb18d04ed
+ status: completed
+ type: web_search_call
+ - content:
+ - annotations: []
+ text: "Today is Wednesday, May 14, 2025.\n\n## Weather for San Francisco, CA:\nCurrent Conditions: Mostly clear,
+ 50°F (10°C)\n\nDaily Forecast:\n* Wednesday, May 14: Low: 51°F (10°C), High: 65°F (18°C), Description: Areas of
+ low clouds early; otherwise, mostly sunny\n* Thursday, May 15: Low: 53°F (12°C), High: 66°F (19°C), Description:
+ Areas of low clouds, then sun\n* Friday, May 16: Low: 53°F (12°C), High: 64°F (18°C), Description: Partly sunny\n*
+ Saturday, May 17: Low: 52°F (11°C), High: 63°F (17°C), Description: Low clouds breaking for some sun; breezy in
+ the afternoon\n* Sunday, May 18: Low: 51°F (10°C), High: 68°F (20°C), Description: Clouds yielding to sun\n* Monday,
+ May 19: Low: 53°F (12°C), High: 68°F (20°C), Description: Sunny\n* Tuesday, May 20: Low: 52°F (11°C), High: 70°F
+ (21°C), Description: Mostly sunny\n "
+ type: output_text
+ id: msg_682492e36ab08191813ec707a61c272f0e7f27fcb18d04ed
+ role: assistant
+ status: completed
+ type: message
+ parallel_tool_calls: true
+ previous_response_id: null
+ reasoning:
+ effort: null
+ summary: null
+ service_tier: default
+ status: completed
+ store: true
+ temperature: 1.0
+ text:
+ format:
+ type: text
+ tool_choice: auto
+ tools:
+ - search_context_size: medium
+ type: web_search_preview
+ user_location:
+ city: null
+ country: US
+ region: null
+ timezone: null
+ type: approximate
+ top_p: 1.0
+ truncation: disabled
+ usage:
+ input_tokens: 317
+ input_tokens_details:
+ cached_tokens: 0
+ output_tokens: 286
+ output_tokens_details:
+ reasoning_tokens: 0
+ total_tokens: 603
+ user: null
+ status:
+ code: 200
+ message: OK
+version: 1
diff --git a/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_stream.yaml b/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_stream.yaml
new file mode 100644
index 0000000000..fe83fd339a
--- /dev/null
+++ b/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_stream.yaml
@@ -0,0 +1,949 @@
+interactions:
+- request:
+ headers:
+ accept:
+ - application/json
+ accept-encoding:
+ - gzip, deflate
+ connection:
+ - keep-alive
+ content-length:
+ - '251'
+ content-type:
+ - application/json
+ host:
+ - api.openai.com
+ method: POST
+ parsed_body:
+ input:
+ - content: Give me the top 3 news in the world today.
+ role: user
+ instructions: You are a helpful assistant.
+ model: gpt-4o
+ stream: true
+ tool_choice: auto
+ tools:
+ - search_context_size: medium
+ type: web_search_preview
+ uri: https://api.openai.com/v1/responses
+ response:
+ body:
+ string: |+
+ event: response.created
+ data: {"type":"response.created","sequence_number":0,"response":{"id":"resp_68949c6c52a08191b933ed8beea4a0b2004c84cbcf4b67dc","object":"response","created_at":1754569836,"status":"in_progress","background":false,"error":null,"incomplete_details":null,"instructions":"You are a helpful assistant.","max_output_tokens":null,"max_tool_calls":null,"model":"gpt-4o-2024-08-06","output":[],"parallel_tool_calls":true,"previous_response_id":null,"prompt_cache_key":null,"reasoning":{"effort":null,"summary":null},"safety_identifier":null,"service_tier":"auto","store":true,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"auto","tools":[{"type":"web_search_preview","search_context_size":"medium","user_location":{"type":"approximate","city":null,"country":"US","region":null,"timezone":null}}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}}}
+
+ event: response.in_progress
+ data: {"type":"response.in_progress","sequence_number":1,"response":{"id":"resp_68949c6c52a08191b933ed8beea4a0b2004c84cbcf4b67dc","object":"response","created_at":1754569836,"status":"in_progress","background":false,"error":null,"incomplete_details":null,"instructions":"You are a helpful assistant.","max_output_tokens":null,"max_tool_calls":null,"model":"gpt-4o-2024-08-06","output":[],"parallel_tool_calls":true,"previous_response_id":null,"prompt_cache_key":null,"reasoning":{"effort":null,"summary":null},"safety_identifier":null,"service_tier":"auto","store":true,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"auto","tools":[{"type":"web_search_preview","search_context_size":"medium","user_location":{"type":"approximate","city":null,"country":"US","region":null,"timezone":null}}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}}}
+
+ event: response.output_item.added
+ data: {"type":"response.output_item.added","sequence_number":2,"output_index":0,"item":{"id":"ws_68949c6ced3881918178ee4efd4f32a6004c84cbcf4b67dc","type":"web_search_call","status":"in_progress","action":{"type":"search"}}}
+
+ event: response.web_search_call.in_progress
+ data: {"type":"response.web_search_call.in_progress","sequence_number":3,"output_index":0,"item_id":"ws_68949c6ced3881918178ee4efd4f32a6004c84cbcf4b67dc"}
+
+ event: response.web_search_call.searching
+ data: {"type":"response.web_search_call.searching","sequence_number":4,"output_index":0,"item_id":"ws_68949c6ced3881918178ee4efd4f32a6004c84cbcf4b67dc"}
+
+ event: response.web_search_call.completed
+ data: {"type":"response.web_search_call.completed","sequence_number":5,"output_index":0,"item_id":"ws_68949c6ced3881918178ee4efd4f32a6004c84cbcf4b67dc"}
+
+ event: response.output_item.done
+ data: {"type":"response.output_item.done","sequence_number":6,"output_index":0,"item":{"id":"ws_68949c6ced3881918178ee4efd4f32a6004c84cbcf4b67dc","type":"web_search_call","status":"completed","action":{"type":"search","query":"top world news October 14 2023"}}}
+
+ event: response.output_item.added
+ data: {"type":"response.output_item.added","sequence_number":7,"output_index":1,"item":{"id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","type":"message","status":"in_progress","content":[],"role":"assistant"}}
+
+ event: response.content_part.added
+ data: {"type":"response.content_part.added","sequence_number":8,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"part":{"type":"output_text","annotations":[],"logprobs":[],"text":""}}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":9,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"Here","logprobs":[],"obfuscation":"XOocLPppTSMa"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":10,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" are","logprobs":[],"obfuscation":"HkKvYdINRiSU"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":11,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" the","logprobs":[],"obfuscation":"iOJ19DoAdNAc"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":12,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" top","logprobs":[],"obfuscation":"a6g2RpvInIPS"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":13,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" three","logprobs":[],"obfuscation":"BPMNB7YbH4"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":14,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" news","logprobs":[],"obfuscation":"baEdSK9t1Mz"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":15,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" stories","logprobs":[],"obfuscation":"JqIdN8jK"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":16,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" from","logprobs":[],"obfuscation":"4QD1HPqhVbZ"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":17,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" around","logprobs":[],"obfuscation":"qJEgygW7Q"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":18,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" the","logprobs":[],"obfuscation":"RGjRv6ekTWDB"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":19,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" world","logprobs":[],"obfuscation":"c60ywMlQbo"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":20,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" as","logprobs":[],"obfuscation":"43nGgSLRYFtrK"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":21,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" of","logprobs":[],"obfuscation":"pbr5etPzBnk48"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":22,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" August","logprobs":[],"obfuscation":"WNexQnxtV"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":23,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" ","logprobs":[],"obfuscation":"TponxHNRlDhtX2Z"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":24,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"7","logprobs":[],"obfuscation":"BVgd22v9TOip8dN"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":25,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":",","logprobs":[],"obfuscation":"VVFwW7G63fhfIfj"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":26,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" ","logprobs":[],"obfuscation":"zV2SeUh56ANkdcd"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":27,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"202","logprobs":[],"obfuscation":"U6M4VKUWRZzig"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":28,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"5","logprobs":[],"obfuscation":"qtaSpvZGiDRXrwt"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":29,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":":","logprobs":[],"obfuscation":"3z0aFM7uQGZc5gn"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":30,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"\n\n1","logprobs":[],"obfuscation":"PauI9A7beLrwH"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":31,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":".","logprobs":[],"obfuscation":"y2REGE8lQtwO1kz"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":32,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" **","logprobs":[],"obfuscation":"oZH72VxhzSFI3"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":33,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"U","logprobs":[],"obfuscation":"pq3kn0y66HiQqnx"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":34,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":".S","logprobs":[],"obfuscation":"QO2MaQ5OqLrQ5Q"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":35,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":".","logprobs":[],"obfuscation":"Rsec5b3TjIMWjiG"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":36,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" Im","logprobs":[],"obfuscation":"R5ltoFIBpSOqs"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":37,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"poses","logprobs":[],"obfuscation":"wkqScCgAOQK"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":38,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" New","logprobs":[],"obfuscation":"ZTWoelrLH7nY"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":39,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" Tar","logprobs":[],"obfuscation":"GtwnjbgNPJgu"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":40,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"iffs","logprobs":[],"obfuscation":"vXEjdpzXCuzW"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":41,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" Amid","logprobs":[],"obfuscation":"qq4ZubcYRTh"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":42,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" Market","logprobs":[],"obfuscation":"UuR0aygo7"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":43,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" Optim","logprobs":[],"obfuscation":"CVFykPrFgv"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":44,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"ism","logprobs":[],"obfuscation":"eZcMxsipE5Ghg"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":45,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"**","logprobs":[],"obfuscation":"pZmDCm35bbj53i"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":46,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"\n\n The","logprobs":[],"obfuscation":"oHaXYzo9"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":47,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" United","logprobs":[],"obfuscation":"JZfkxd9YG"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":48,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" States","logprobs":[],"obfuscation":"hcpaipMcN"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":49,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" has","logprobs":[],"obfuscation":"fKCoTqYY14RI"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":50,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" implemented","logprobs":[],"obfuscation":"2wbC"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":51,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" new","logprobs":[],"obfuscation":"M0z9VDoyJNHI"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":52,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" tariffs","logprobs":[],"obfuscation":"E1SHjzUe"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":53,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" ranging","logprobs":[],"obfuscation":"WMTzE390"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":54,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" from","logprobs":[],"obfuscation":"I1IYNpSA0lh"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":55,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" ","logprobs":[],"obfuscation":"x0CweL60Lxz81Qk"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":56,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"10","logprobs":[],"obfuscation":"790MMvPhXQeN9e"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":57,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"%","logprobs":[],"obfuscation":"eiGg0GNiyngLF6c"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":58,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" to","logprobs":[],"obfuscation":"GuiIdtQjNaNLs"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":59,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" ","logprobs":[],"obfuscation":"lohPwNnAJGy8FCj"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":60,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"50","logprobs":[],"obfuscation":"NfJK5nRAnmhGfg"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":61,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"%","logprobs":[],"obfuscation":"OzCZb4TR9ApVcIR"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":62,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" on","logprobs":[],"obfuscation":"5TQb3gCc6iAio"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":63,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" imports","logprobs":[],"obfuscation":"TozZUn4Z"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":64,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" from","logprobs":[],"obfuscation":"EB9eiCiVsCU"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":65,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" multiple","logprobs":[],"obfuscation":"DBtwDQa"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":66,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" countries","logprobs":[],"obfuscation":"JWOXkl"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":67,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":".","logprobs":[],"obfuscation":"OmBaS3b8tTUvL4F"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":68,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" ","logprobs":[],"obfuscation":"JAybT5mr2pXF4WL"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":69,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"Despite","logprobs":[],"obfuscation":"6ceHznDEN"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":70,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" this","logprobs":[],"obfuscation":"H4DGgiKf8TA"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":71,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":",","logprobs":[],"obfuscation":"yA8j05JmjD1ULZ6"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":72,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" global","logprobs":[],"obfuscation":"f4H8oCMf3"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":73,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" markets","logprobs":[],"obfuscation":"7MiUE8Za"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":74,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" have","logprobs":[],"obfuscation":"EoJ5EpiTPRh"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":75,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" shown","logprobs":[],"obfuscation":"PK9RDI34xo"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":76,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" resilience","logprobs":[],"obfuscation":"ycaxB"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":77,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":",","logprobs":[],"obfuscation":"0L5q5mDR4lhYSif"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":78,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" buoy","logprobs":[],"obfuscation":"mBxqkmRCUqc"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":79,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"ed","logprobs":[],"obfuscation":"Rordqrf7tNiANP"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":80,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" by","logprobs":[],"obfuscation":"6cCP0QvVboWiB"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":81,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" expectations","logprobs":[],"obfuscation":"sUp"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":82,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" of","logprobs":[],"obfuscation":"392u8dTHeBlb3"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":83,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" interest","logprobs":[],"obfuscation":"h73q42n"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":84,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" rate","logprobs":[],"obfuscation":"2PdTvrL51kF"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":85,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" cuts","logprobs":[],"obfuscation":"2JIMAK8sVCM"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":86,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" and","logprobs":[],"obfuscation":"iNByW0GRSDcG"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":87,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" positive","logprobs":[],"obfuscation":"JWpbdk7"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":88,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" earnings","logprobs":[],"obfuscation":"1gT651Q"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":89,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" reports","logprobs":[],"obfuscation":"xYucuNhw"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":90,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":".","logprobs":[],"obfuscation":"R6VgzK79bMXphho"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":91,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" ","logprobs":[],"obfuscation":"I0R02mVwHhuloHM"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":92,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"Not","logprobs":[],"obfuscation":"JkTND1Rte5NN9"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":93,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"ably","logprobs":[],"obfuscation":"gMJOHbuYA6oz"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":94,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":",","logprobs":[],"obfuscation":"ygujIjcS12qLDPm"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":95,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" exemptions","logprobs":[],"obfuscation":"YQGsY"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":96,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" were","logprobs":[],"obfuscation":"taHIhMAa8B7"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":97,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" granted","logprobs":[],"obfuscation":"eWcGxgvX"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":98,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" to","logprobs":[],"obfuscation":"7GGSFWycBg5Sl"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":99,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" Taiwan","logprobs":[],"obfuscation":"RsR6vyQIQ"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":100,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" and","logprobs":[],"obfuscation":"YYc5Bxd7bwv6"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":101,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" South","logprobs":[],"obfuscation":"ksVFVHy5jz"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":102,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" Korea","logprobs":[],"obfuscation":"4wvjVuYrYm"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":103,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":",","logprobs":[],"obfuscation":"AH6b4BHw35ijDkD"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":104,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" shielding","logprobs":[],"obfuscation":"gLYN6g"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":105,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" major","logprobs":[],"obfuscation":"O6sdwtAlKR"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":106,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" chip","logprobs":[],"obfuscation":"fJWJMR8Qr15"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":107,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"makers","logprobs":[],"obfuscation":"Pm0ID9htko"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":108,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" like","logprobs":[],"obfuscation":"GdYYvMZCsUT"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":109,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" T","logprobs":[],"obfuscation":"8xJjDyOGzbORfZ"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":110,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"SM","logprobs":[],"obfuscation":"zzDkxG3nFqvGec"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":111,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"C","logprobs":[],"obfuscation":"OTLWgz0uIbY7IjW"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":112,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":",","logprobs":[],"obfuscation":"0QQnvOl9OCQ6ayY"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":113,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" Samsung","logprobs":[],"obfuscation":"yhGRSi3J"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":114,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":",","logprobs":[],"obfuscation":"C6ZVL4ALbkxDPg0"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":115,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" and","logprobs":[],"obfuscation":"uiwkljxBa11Q"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":116,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" SK","logprobs":[],"obfuscation":"kiEfbtReEBfmr"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":117,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" H","logprobs":[],"obfuscation":"HkJs1mPq8WY9wE"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":118,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"yn","logprobs":[],"obfuscation":"3cuYHuUX1Uue4e"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":119,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"ix","logprobs":[],"obfuscation":"vXNrcrgpJyGgw7"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":120,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" from","logprobs":[],"obfuscation":"VeIZexAxbYk"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":121,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" the","logprobs":[],"obfuscation":"mogH4Ol7E7Ix"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":122,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" highest","logprobs":[],"obfuscation":"TUonXDvn"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":123,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" lev","logprobs":[],"obfuscation":"107hyQNZ4RlA"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":124,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"ies","logprobs":[],"obfuscation":"cb9LquTe7fsI4"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":125,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":".","logprobs":[],"obfuscation":"H4KG1LDqSP95E5H"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":126,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" ","logprobs":[],"obfuscation":"UH0KzhQroX54EGc"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":127,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"([reuters.com](https://www.reuters.com/business/finance/global-markets-view-usa-2025-08-07/?utm_source=openai))","logprobs":[],"obfuscation":"S"}
+
+ event: response.output_text.annotation.added
+ data: {"type":"response.output_text.annotation.added","sequence_number":128,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"annotation_index":0,"annotation":{"type":"url_citation","end_index":628,"start_index":517,"title":"Morning Bid: Tariffs hit, Apple rises","url":"https://www.reuters.com/business/finance/global-markets-view-usa-2025-08-07/?utm_source=openai"}}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":129,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"\n\n2","logprobs":[],"obfuscation":"XM5Fvvwa1OdKF"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":130,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":".","logprobs":[],"obfuscation":"Jy2wWri293Nebyw"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":131,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" **","logprobs":[],"obfuscation":"ipUXu2FINOnXB"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":132,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"G","logprobs":[],"obfuscation":"FUS2wuVYgIIYv2j"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":133,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"hana","logprobs":[],"obfuscation":"1r2PlDIZOvW9"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":134,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"ian","logprobs":[],"obfuscation":"T6dahmooqKbF1"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":135,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" Ministers","logprobs":[],"obfuscation":"ONcRXN"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":136,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" K","logprobs":[],"obfuscation":"Z5FkS3skjoVa3O"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":137,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"illed","logprobs":[],"obfuscation":"dDowbZljdvj"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":138,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" in","logprobs":[],"obfuscation":"BkGLYtcvs6HBb"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":139,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" Helic","logprobs":[],"obfuscation":"dcplj8Z6tO"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":140,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"opter","logprobs":[],"obfuscation":"khGp39eBGhx"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":141,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" Crash","logprobs":[],"obfuscation":"Yu5raz1mVv"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":142,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"**","logprobs":[],"obfuscation":"XFlfaigpr6vjwI"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":143,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"\n\n G","logprobs":[],"obfuscation":"0WN2Cg4gUp"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":144,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"hana","logprobs":[],"obfuscation":"ziO2g216tRxL"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":145,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"'s","logprobs":[],"obfuscation":"EQcG39LetVpKHe"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":146,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" Defence","logprobs":[],"obfuscation":"tZp2wDY5"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":147,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" Minister","logprobs":[],"obfuscation":"DrOKBJ2"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":148,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" Edward","logprobs":[],"obfuscation":"mXwSytmd8"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":149,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" Om","logprobs":[],"obfuscation":"EWIoOD56mfH5p"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":150,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"ane","logprobs":[],"obfuscation":"Fpr7stxuCiIxs"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":151,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" Bo","logprobs":[],"obfuscation":"GF2tJUeBHR5VS"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":152,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"amah","logprobs":[],"obfuscation":"NJ3E6McxNM8K"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":153,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" and","logprobs":[],"obfuscation":"IrN65Sp1BCqo"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":154,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" Environment","logprobs":[],"obfuscation":"x58i"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":155,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" Minister","logprobs":[],"obfuscation":"bXMvbq3"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":156,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" Ibrahim","logprobs":[],"obfuscation":"XlbVCpaM"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":157,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" M","logprobs":[],"obfuscation":"I1QPRwQBRYsumq"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":158,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"urt","logprobs":[],"obfuscation":"TcNlm9cH4eY1T"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":159,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"ala","logprobs":[],"obfuscation":"532v6xGYOMiIQ"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":160,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" Muh","logprobs":[],"obfuscation":"pH9lYY5LK8j9"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":161,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"ammed","logprobs":[],"obfuscation":"3j78c2rOjri"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":162,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":",","logprobs":[],"obfuscation":"leqz7nvo9Jz4wyB"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":163,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" along","logprobs":[],"obfuscation":"TgcgdeDQ9z"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":164,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" with","logprobs":[],"obfuscation":"pWglzwWHFvM"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":165,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" six","logprobs":[],"obfuscation":"6Tna9wWVohjG"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":166,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" others","logprobs":[],"obfuscation":"1fkiHyLxJ"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":167,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":",","logprobs":[],"obfuscation":"3Iu9G4GUHVrmk4r"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":168,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" have","logprobs":[],"obfuscation":"HB7xF2WZ1r7"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":169,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" died","logprobs":[],"obfuscation":"JDmyFinE0mg"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":170,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" in","logprobs":[],"obfuscation":"6o1SkquQYUl1P"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":171,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" a","logprobs":[],"obfuscation":"aD5SmToispH7WY"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":172,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" military","logprobs":[],"obfuscation":"tNYbn2k"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":173,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" helicopter","logprobs":[],"obfuscation":"7aWsd"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":174,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" crash","logprobs":[],"obfuscation":"xXLd6kr8Mp"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":175,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" in","logprobs":[],"obfuscation":"Blx1qXrhC384r"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":176,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" the","logprobs":[],"obfuscation":"PK4iAxdjFf3w"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":177,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" Ash","logprobs":[],"obfuscation":"h7A0VHNZYeaQ"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":178,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"anti","logprobs":[],"obfuscation":"BtwPGsq2OC7q"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":179,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" region","logprobs":[],"obfuscation":"vN2bV5srm"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":180,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":".","logprobs":[],"obfuscation":"FfZVEbAIalNCCH8"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":181,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" ","logprobs":[],"obfuscation":"totdW2xJQjp3fuu"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":182,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"The","logprobs":[],"obfuscation":"hRrAGkf3dXU61"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":183,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" incident","logprobs":[],"obfuscation":"5mPOsk7"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":184,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" has","logprobs":[],"obfuscation":"ifuAwq6ZqhJt"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":185,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" been","logprobs":[],"obfuscation":"C4fQeJDoZU9"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":186,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" described","logprobs":[],"obfuscation":"pBPYm2"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":187,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" as","logprobs":[],"obfuscation":"Bd6wff1TdMsez"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":188,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" a","logprobs":[],"obfuscation":"tA3eL3L9fzsf6g"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":189,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" \"","logprobs":[],"obfuscation":"N0ijopoxBb3Yok"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":190,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"national","logprobs":[],"obfuscation":"Ck7pg8nu"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":191,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" tragedy","logprobs":[],"obfuscation":"swFUapBz"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":192,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"\"","logprobs":[],"obfuscation":"3N9qDUvqht0kU7q"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":193,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" by","logprobs":[],"obfuscation":"mJlGJivfAlpQC"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":194,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" Chief","logprobs":[],"obfuscation":"TNlLG3gY5V"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":195,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" of","logprobs":[],"obfuscation":"MYRnyXu1N6zCk"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":196,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" Staff","logprobs":[],"obfuscation":"SIp7Bqt6ca"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":197,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" Julius","logprobs":[],"obfuscation":"OMwEcSDc4"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":198,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" Deb","logprobs":[],"obfuscation":"lYDafjj7ypIU"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":199,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"rah","logprobs":[],"obfuscation":"qtcF8YuWxhoKl"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":200,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":".","logprobs":[],"obfuscation":"qbVOyjuY7SjaqpS"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":201,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" ","logprobs":[],"obfuscation":"To5mEq3b6zbE5gZ"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":202,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"([anewz.tv](https://anewz.tv/world/world-news/11722/anewz-morning-brief-7th-august-2025/news?utm_source=openai))","logprobs":[],"obfuscation":""}
+
+ event: response.output_text.annotation.added
+ data: {"type":"response.output_text.annotation.added","sequence_number":203,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"annotation_index":1,"annotation":{"type":"url_citation","end_index":1071,"start_index":959,"title":"AnewZ Morning Brief - 7th August, 2025 | AnewZ","url":"https://anewz.tv/world/world-news/11722/anewz-morning-brief-7th-august-2025/news?utm_source=openai"}}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":204,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"\n\n3","logprobs":[],"obfuscation":"2uE8WC2sz26Uv"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":205,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":".","logprobs":[],"obfuscation":"UT49ksA8ClNxnYP"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":206,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" **","logprobs":[],"obfuscation":"DyTpm2OJeM7ns"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":207,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"Mass","logprobs":[],"obfuscation":"cFxf1VkcZHfT"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":208,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"ive","logprobs":[],"obfuscation":"M3M9tVToH4aF0"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":209,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" Wild","logprobs":[],"obfuscation":"QtLctKuuejP"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":210,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"fire","logprobs":[],"obfuscation":"SO79oZtNfKZY"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":211,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" in","logprobs":[],"obfuscation":"EjQsg7ery5mdk"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":212,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" France","logprobs":[],"obfuscation":"LZ2Z9gnFQ"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":213,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" Claims","logprobs":[],"obfuscation":"uQQiHcf4u"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":214,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" Lives","logprobs":[],"obfuscation":"JsURbf2HDN"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":215,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"**","logprobs":[],"obfuscation":"Wc0JvdqAfSLoiU"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":216,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"\n\n A","logprobs":[],"obfuscation":"B5cZ75yOwZ"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":217,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" significant","logprobs":[],"obfuscation":"o2qQ"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":218,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" wildfire","logprobs":[],"obfuscation":"aCzopN2"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":219,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" in","logprobs":[],"obfuscation":"N5Sj8DgA20ATl"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":220,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" southern","logprobs":[],"obfuscation":"AFY0gTC"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":221,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" France","logprobs":[],"obfuscation":"kzdDaLJQc"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":222,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"'s","logprobs":[],"obfuscation":"komAcUhLQPMrXI"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":223,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" A","logprobs":[],"obfuscation":"cqmm15SzQDFgj0"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":224,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"ude","logprobs":[],"obfuscation":"M3vxXDlyU1v71"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":225,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" region","logprobs":[],"obfuscation":"AZf4xt0iJ"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":226,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" has","logprobs":[],"obfuscation":"zSrkq9kznVfP"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":227,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" resulted","logprobs":[],"obfuscation":"Ai1ri1R"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":228,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" in","logprobs":[],"obfuscation":"ByXbGWluudC3y"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":229,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" at","logprobs":[],"obfuscation":"2G5OwPwdmzPns"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":230,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" least","logprobs":[],"obfuscation":"Yc7FU4sBBJ"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":231,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" one","logprobs":[],"obfuscation":"xH1V0e1NnM60"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":232,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" death","logprobs":[],"obfuscation":"Cj4bJ5vnlR"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":233,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" and","logprobs":[],"obfuscation":"NZ1v5pJEWEMd"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":234,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" nine","logprobs":[],"obfuscation":"xDqGHOFzXrF"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":235,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" injuries","logprobs":[],"obfuscation":"MwptkAo"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":236,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":".","logprobs":[],"obfuscation":"dPxB0BGc3eGjT3k"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":237,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" ","logprobs":[],"obfuscation":"MUrbVy4SKDIk7qy"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":238,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"The","logprobs":[],"obfuscation":"2j4Xh1yVC05dM"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":239,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" fire","logprobs":[],"obfuscation":"V0SwQnbjc5O"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":240,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":",","logprobs":[],"obfuscation":"iqTs03n1tNJP3Ic"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":241,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" which","logprobs":[],"obfuscation":"jbc9Vw5JIx"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":242,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" began","logprobs":[],"obfuscation":"8BtVvBMOsa"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":243,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" on","logprobs":[],"obfuscation":"tIULnoIfoi698"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":244,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" August","logprobs":[],"obfuscation":"o8DbhzloF"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":245,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" ","logprobs":[],"obfuscation":"ZVApeiJRVFAyIJr"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":246,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"6","logprobs":[],"obfuscation":"AiKo19AHyFNNAGc"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":247,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":",","logprobs":[],"obfuscation":"izk6OJS4wR4d1Lt"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":248,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" has","logprobs":[],"obfuscation":"uEI72NMvi37S"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":249,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" destroyed","logprobs":[],"obfuscation":"JukhEE"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":250,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" or","logprobs":[],"obfuscation":"GrH0LWLHeGPh0"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":251,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" damaged","logprobs":[],"obfuscation":"ZUcw65hR"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":252,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" ","logprobs":[],"obfuscation":"y8IUkLOzScXqqE4"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":253,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"25","logprobs":[],"obfuscation":"6bl5qcmGcmqgHY"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":254,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" homes","logprobs":[],"obfuscation":"UOvrpFD5c0"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":255,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":",","logprobs":[],"obfuscation":"hWdvWCvAcGpoRnd"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":256,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" with","logprobs":[],"obfuscation":"8ulfhSoCIrl"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":257,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" over","logprobs":[],"obfuscation":"tyUgOcbhDbd"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":258,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" ","logprobs":[],"obfuscation":"PONCXLwjDT9304m"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":259,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"1","logprobs":[],"obfuscation":"Az6lamcucJ8aOUQ"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":260,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":",","logprobs":[],"obfuscation":"POhn2Xhgxf7tVPa"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":261,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"800","logprobs":[],"obfuscation":"OvQhP2ijQK7wy"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":262,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" firefighters","logprobs":[],"obfuscation":"PHG"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":263,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" working","logprobs":[],"obfuscation":"SZeBP4o9"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":264,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" to","logprobs":[],"obfuscation":"5EqhniuSzXuAF"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":265,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" control","logprobs":[],"obfuscation":"bvL0wCQc"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":266,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" the","logprobs":[],"obfuscation":"xCIN9xqnP0b6"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":267,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" blaze","logprobs":[],"obfuscation":"kGaGamRJSj"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":268,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":".","logprobs":[],"obfuscation":"6Zc8D9H7muZQobb"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":269,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" ","logprobs":[],"obfuscation":"tdZXvvIoSo0Iq5Q"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":270,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"([anewz.tv](https://anewz.tv/world/world-news/11722/anewz-morning-brief-7th-august-2025/news?utm_source=openai))","logprobs":[],"obfuscation":""}
+
+ event: response.output_text.annotation.added
+ data: {"type":"response.output_text.annotation.added","sequence_number":271,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"annotation_index":2,"annotation":{"type":"url_citation","end_index":1475,"start_index":1363,"title":"AnewZ Morning Brief - 7th August, 2025 | AnewZ","url":"https://anewz.tv/world/world-news/11722/anewz-morning-brief-7th-august-2025/news?utm_source=openai"}}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":272,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":"\n\nPlease","logprobs":[],"obfuscation":"HL399uGf"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":273,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" note","logprobs":[],"obfuscation":"pPzWyYWzuq0"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":274,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" that","logprobs":[],"obfuscation":"C2sKLjKrSu1"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":275,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" news","logprobs":[],"obfuscation":"fJSBDVGSqvz"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":276,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" developments","logprobs":[],"obfuscation":"OH9"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":277,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" are","logprobs":[],"obfuscation":"EKfkBxDiDbfe"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":278,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" continually","logprobs":[],"obfuscation":"emU7"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":279,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" evolving","logprobs":[],"obfuscation":"6pbuEM6"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":280,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":".","logprobs":[],"obfuscation":"ZzaCzwUsaH8IzI0"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":281,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" For","logprobs":[],"obfuscation":"1jbq8SKvFwg3"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":282,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" the","logprobs":[],"obfuscation":"pWLCZvhTUBDX"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":283,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" most","logprobs":[],"obfuscation":"Q9PInpY0oCx"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":284,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" current","logprobs":[],"obfuscation":"i2X3VJAL"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":285,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" information","logprobs":[],"obfuscation":"KUbV"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":286,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":",","logprobs":[],"obfuscation":"X2dmdiZF78XW1zg"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":287,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" refer","logprobs":[],"obfuscation":"yCrpM8vK3X"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":288,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" to","logprobs":[],"obfuscation":"LwL3gTOMyCdEe"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":289,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" reputable","logprobs":[],"obfuscation":"whjViC"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":290,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" news","logprobs":[],"obfuscation":"iKTgWL4YHtw"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":291,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" sources","logprobs":[],"obfuscation":"uOv6vNdh"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":292,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":".","logprobs":[],"obfuscation":"1HmDZPCYVUOxskX"}
+
+ event: response.output_text.delta
+ data: {"type":"response.output_text.delta","sequence_number":293,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"delta":" ","logprobs":[],"obfuscation":"AH3MlCiwwz4nzWN"}
+
+ event: response.output_text.done
+ data: {"type":"response.output_text.done","sequence_number":294,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"text":"Here are the top three news stories from around the world as of August 7, 2025:\n\n1. **U.S. Imposes New Tariffs Amid Market Optimism**\n\n The United States has implemented new tariffs ranging from 10% to 50% on imports from multiple countries. Despite this, global markets have shown resilience, buoyed by expectations of interest rate cuts and positive earnings reports. Notably, exemptions were granted to Taiwan and South Korea, shielding major chipmakers like TSMC, Samsung, and SK Hynix from the highest levies. ([reuters.com](https://www.reuters.com/business/finance/global-markets-view-usa-2025-08-07/?utm_source=openai))\n\n2. **Ghanaian Ministers Killed in Helicopter Crash**\n\n Ghana's Defence Minister Edward Omane Boamah and Environment Minister Ibrahim Murtala Muhammed, along with six others, have died in a military helicopter crash in the Ashanti region. The incident has been described as a \"national tragedy\" by Chief of Staff Julius Debrah. ([anewz.tv](https://anewz.tv/world/world-news/11722/anewz-morning-brief-7th-august-2025/news?utm_source=openai))\n\n3. **Massive Wildfire in France Claims Lives**\n\n A significant wildfire in southern France's Aude region has resulted in at least one death and nine injuries. The fire, which began on August 6, has destroyed or damaged 25 homes, with over 1,800 firefighters working to control the blaze. ([anewz.tv](https://anewz.tv/world/world-news/11722/anewz-morning-brief-7th-august-2025/news?utm_source=openai))\n\nPlease note that news developments are continually evolving. For the most current information, refer to reputable news sources. ","logprobs":[]}
+
+ event: response.content_part.done
+ data: {"type":"response.content_part.done","sequence_number":295,"item_id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","output_index":1,"content_index":0,"part":{"type":"output_text","annotations":[{"type":"url_citation","end_index":628,"start_index":517,"title":"Morning Bid: Tariffs hit, Apple rises","url":"https://www.reuters.com/business/finance/global-markets-view-usa-2025-08-07/?utm_source=openai"},{"type":"url_citation","end_index":1071,"start_index":959,"title":"AnewZ Morning Brief - 7th August, 2025 | AnewZ","url":"https://anewz.tv/world/world-news/11722/anewz-morning-brief-7th-august-2025/news?utm_source=openai"},{"type":"url_citation","end_index":1475,"start_index":1363,"title":"AnewZ Morning Brief - 7th August, 2025 | AnewZ","url":"https://anewz.tv/world/world-news/11722/anewz-morning-brief-7th-august-2025/news?utm_source=openai"}],"logprobs":[],"text":"Here are the top three news stories from around the world as of August 7, 2025:\n\n1. **U.S. Imposes New Tariffs Amid Market Optimism**\n\n The United States has implemented new tariffs ranging from 10% to 50% on imports from multiple countries. Despite this, global markets have shown resilience, buoyed by expectations of interest rate cuts and positive earnings reports. Notably, exemptions were granted to Taiwan and South Korea, shielding major chipmakers like TSMC, Samsung, and SK Hynix from the highest levies. ([reuters.com](https://www.reuters.com/business/finance/global-markets-view-usa-2025-08-07/?utm_source=openai))\n\n2. **Ghanaian Ministers Killed in Helicopter Crash**\n\n Ghana's Defence Minister Edward Omane Boamah and Environment Minister Ibrahim Murtala Muhammed, along with six others, have died in a military helicopter crash in the Ashanti region. The incident has been described as a \"national tragedy\" by Chief of Staff Julius Debrah. ([anewz.tv](https://anewz.tv/world/world-news/11722/anewz-morning-brief-7th-august-2025/news?utm_source=openai))\n\n3. **Massive Wildfire in France Claims Lives**\n\n A significant wildfire in southern France's Aude region has resulted in at least one death and nine injuries. The fire, which began on August 6, has destroyed or damaged 25 homes, with over 1,800 firefighters working to control the blaze. ([anewz.tv](https://anewz.tv/world/world-news/11722/anewz-morning-brief-7th-august-2025/news?utm_source=openai))\n\nPlease note that news developments are continually evolving. For the most current information, refer to reputable news sources. "}}
+
+ event: response.output_item.done
+ data: {"type":"response.output_item.done","sequence_number":296,"output_index":1,"item":{"id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","type":"message","status":"completed","content":[{"type":"output_text","annotations":[{"type":"url_citation","end_index":628,"start_index":517,"title":"Morning Bid: Tariffs hit, Apple rises","url":"https://www.reuters.com/business/finance/global-markets-view-usa-2025-08-07/?utm_source=openai"},{"type":"url_citation","end_index":1071,"start_index":959,"title":"AnewZ Morning Brief - 7th August, 2025 | AnewZ","url":"https://anewz.tv/world/world-news/11722/anewz-morning-brief-7th-august-2025/news?utm_source=openai"},{"type":"url_citation","end_index":1475,"start_index":1363,"title":"AnewZ Morning Brief - 7th August, 2025 | AnewZ","url":"https://anewz.tv/world/world-news/11722/anewz-morning-brief-7th-august-2025/news?utm_source=openai"}],"logprobs":[],"text":"Here are the top three news stories from around the world as of August 7, 2025:\n\n1. **U.S. Imposes New Tariffs Amid Market Optimism**\n\n The United States has implemented new tariffs ranging from 10% to 50% on imports from multiple countries. Despite this, global markets have shown resilience, buoyed by expectations of interest rate cuts and positive earnings reports. Notably, exemptions were granted to Taiwan and South Korea, shielding major chipmakers like TSMC, Samsung, and SK Hynix from the highest levies. ([reuters.com](https://www.reuters.com/business/finance/global-markets-view-usa-2025-08-07/?utm_source=openai))\n\n2. **Ghanaian Ministers Killed in Helicopter Crash**\n\n Ghana's Defence Minister Edward Omane Boamah and Environment Minister Ibrahim Murtala Muhammed, along with six others, have died in a military helicopter crash in the Ashanti region. The incident has been described as a \"national tragedy\" by Chief of Staff Julius Debrah. ([anewz.tv](https://anewz.tv/world/world-news/11722/anewz-morning-brief-7th-august-2025/news?utm_source=openai))\n\n3. **Massive Wildfire in France Claims Lives**\n\n A significant wildfire in southern France's Aude region has resulted in at least one death and nine injuries. The fire, which began on August 6, has destroyed or damaged 25 homes, with over 1,800 firefighters working to control the blaze. ([anewz.tv](https://anewz.tv/world/world-news/11722/anewz-morning-brief-7th-august-2025/news?utm_source=openai))\n\nPlease note that news developments are continually evolving. For the most current information, refer to reputable news sources. "}],"role":"assistant"}}
+
+ event: response.completed
+ data: {"type":"response.completed","sequence_number":297,"response":{"id":"resp_68949c6c52a08191b933ed8beea4a0b2004c84cbcf4b67dc","object":"response","created_at":1754569836,"status":"completed","background":false,"error":null,"incomplete_details":null,"instructions":"You are a helpful assistant.","max_output_tokens":null,"max_tool_calls":null,"model":"gpt-4o-2024-08-06","output":[{"id":"ws_68949c6ced3881918178ee4efd4f32a6004c84cbcf4b67dc","type":"web_search_call","status":"completed","action":{"type":"search","query":"top world news October 14 2023"}},{"id":"msg_68949c6f2ec4819180d56b4ad8ce5469004c84cbcf4b67dc","type":"message","status":"completed","content":[{"type":"output_text","annotations":[{"type":"url_citation","end_index":628,"start_index":517,"title":"Morning Bid: Tariffs hit, Apple rises","url":"https://www.reuters.com/business/finance/global-markets-view-usa-2025-08-07/?utm_source=openai"},{"type":"url_citation","end_index":1071,"start_index":959,"title":"AnewZ Morning Brief - 7th August, 2025 | AnewZ","url":"https://anewz.tv/world/world-news/11722/anewz-morning-brief-7th-august-2025/news?utm_source=openai"},{"type":"url_citation","end_index":1475,"start_index":1363,"title":"AnewZ Morning Brief - 7th August, 2025 | AnewZ","url":"https://anewz.tv/world/world-news/11722/anewz-morning-brief-7th-august-2025/news?utm_source=openai"}],"logprobs":[],"text":"Here are the top three news stories from around the world as of August 7, 2025:\n\n1. **U.S. Imposes New Tariffs Amid Market Optimism**\n\n The United States has implemented new tariffs ranging from 10% to 50% on imports from multiple countries. Despite this, global markets have shown resilience, buoyed by expectations of interest rate cuts and positive earnings reports. Notably, exemptions were granted to Taiwan and South Korea, shielding major chipmakers like TSMC, Samsung, and SK Hynix from the highest levies. ([reuters.com](https://www.reuters.com/business/finance/global-markets-view-usa-2025-08-07/?utm_source=openai))\n\n2. **Ghanaian Ministers Killed in Helicopter Crash**\n\n Ghana's Defence Minister Edward Omane Boamah and Environment Minister Ibrahim Murtala Muhammed, along with six others, have died in a military helicopter crash in the Ashanti region. The incident has been described as a \"national tragedy\" by Chief of Staff Julius Debrah. ([anewz.tv](https://anewz.tv/world/world-news/11722/anewz-morning-brief-7th-august-2025/news?utm_source=openai))\n\n3. **Massive Wildfire in France Claims Lives**\n\n A significant wildfire in southern France's Aude region has resulted in at least one death and nine injuries. The fire, which began on August 6, has destroyed or damaged 25 homes, with over 1,800 firefighters working to control the blaze. ([anewz.tv](https://anewz.tv/world/world-news/11722/anewz-morning-brief-7th-august-2025/news?utm_source=openai))\n\nPlease note that news developments are continually evolving. For the most current information, refer to reputable news sources. "}],"role":"assistant"}],"parallel_tool_calls":true,"previous_response_id":null,"prompt_cache_key":null,"reasoning":{"effort":null,"summary":null},"safety_identifier":null,"service_tier":"default","store":true,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"auto","tools":[{"type":"web_search_preview","search_context_size":"medium","user_location":{"type":"approximate","city":null,"country":"US","region":null,"timezone":null}}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":{"input_tokens":323,"input_tokens_details":{"cached_tokens":0},"output_tokens":410,"output_tokens_details":{"reasoning_tokens":0},"total_tokens":733},"user":null,"metadata":{}}}
+
+ headers:
+ alt-svc:
+ - h3=":443"; ma=86400
+ connection:
+ - keep-alive
+ content-type:
+ - text/event-stream; charset=utf-8
+ openai-organization:
+ - pydantic-28gund
+ openai-processing-ms:
+ - '95'
+ openai-project:
+ - proj_dKobscVY9YJxeEaDJen54e3d
+ openai-version:
+ - '2020-10-01'
+ strict-transport-security:
+ - max-age=31536000; includeSubDomains; preload
+ transfer-encoding:
+ - chunked
+ status:
+ code: 200
+ message: OK
+version: 1
+...
diff --git a/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_with_invalid_region.yaml b/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_with_invalid_region.yaml
new file mode 100644
index 0000000000..c2487d0336
--- /dev/null
+++ b/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_with_invalid_region.yaml
@@ -0,0 +1,131 @@
+interactions:
+- request:
+ headers:
+ accept:
+ - application/json
+ accept-encoding:
+ - gzip, deflate
+ connection:
+ - keep-alive
+ content-length:
+ - '315'
+ content-type:
+ - application/json
+ host:
+ - api.openai.com
+ method: POST
+ parsed_body:
+ input:
+ - content: What is the current temperature?
+ role: user
+ instructions: You are a helpful assistant.
+ model: gpt-4o
+ stream: false
+ tool_choice: auto
+ tools:
+ - search_context_size: medium
+ type: web_search_preview
+ user_location:
+ city: Salvador
+ region: BRLO
+ type: approximate
+ uri: https://api.openai.com/v1/responses
+ response:
+ headers:
+ alt-svc:
+ - h3=":443"; ma=86400
+ connection:
+ - keep-alive
+ content-length:
+ - '2769'
+ content-type:
+ - application/json
+ openai-organization:
+ - pydantic-28gund
+ openai-processing-ms:
+ - '5556'
+ openai-project:
+ - proj_dKobscVY9YJxeEaDJen54e3d
+ openai-version:
+ - '2020-10-01'
+ strict-transport-security:
+ - max-age=31536000; includeSubDomains; preload
+ transfer-encoding:
+ - chunked
+ parsed_body:
+ background: false
+ created_at: 1754568948
+ error: null
+ id: resp_689498f4519481a384a50f2cf0271f950b1cd027447c523f
+ incomplete_details: null
+ instructions: You are a helpful assistant.
+ max_output_tokens: null
+ max_tool_calls: null
+ metadata: {}
+ model: gpt-4o-2024-08-06
+ object: response
+ output:
+ - action:
+ query: current temperature
+ type: search
+ id: ws_689498f52d8c81a3b02694a1a734a2fb0b1cd027447c523f
+ status: completed
+ type: web_search_call
+ - content:
+ - annotations:
+ - end_index: 436
+ start_index: 342
+ title: Salvador, Brazil Weather Forecast | AerisWeather
+ type: url_citation
+ url: https://www.aerisweather.com/weather/local/br/salvador?utm_source=openai
+ logprobs: []
+ text: "As of 12:15 PM on Thursday, August 7, 2025, in Salvador, Brazil, the current weather conditions are:\n\n-
+ **Temperature:** 84°F (29°C)\n- **Feels Like:** 88°F (31°C)\n- **Condition:** Sunny\n- **Wind:** East at 16 mph
+ (25 km/h)\n- **Humidity:** 65%\n- **Dew Point:** 71°F (22°C)\n- **Pressure:** 29.88 in (1012 mb)\n- **Visibility:**
+ 8 miles (13 km)\n\n([aerisweather.com](https://www.aerisweather.com/weather/local/br/salvador?utm_source=openai))\n\nThe
+ forecast for today indicates partly cloudy skies with temperatures remaining around 84°F (29°C) this afternoon. "
+ type: output_text
+ id: msg_689498f73d6c81a3b1a202c5cf0b34f90b1cd027447c523f
+ role: assistant
+ status: completed
+ type: message
+ parallel_tool_calls: true
+ previous_response_id: null
+ prompt_cache_key: null
+ reasoning:
+ effort: null
+ summary: null
+ safety_identifier: null
+ service_tier: default
+ status: completed
+ store: true
+ temperature: 1.0
+ text:
+ format:
+ type: text
+ tool_choice: auto
+ tools:
+ - search_context_size: medium
+ type: web_search_preview
+ user_location:
+ city: Salvador
+ country: null
+ region: BRLO
+ timezone: null
+ type: approximate
+ top_logprobs: 0
+ top_p: 1.0
+ truncation: disabled
+ usage:
+ input_tokens: 317
+ input_tokens_details:
+ cached_tokens: 0
+ output_tokens: 180
+ output_tokens_details:
+ reasoning_tokens: 0
+ total_tokens: 497
+ user: null
+ status:
+ code: 200
+ message: OK
+version: 1
diff --git a/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_with_user_location.yaml b/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_with_user_location.yaml
new file mode 100644
index 0000000000..6ad0ff8435
--- /dev/null
+++ b/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_with_user_location.yaml
@@ -0,0 +1,118 @@
+interactions:
+- request:
+ headers:
+ accept:
+ - application/json
+ accept-encoding:
+ - gzip, deflate
+ connection:
+ - keep-alive
+ content-length:
+ - '313'
+ content-type:
+ - application/json
+ host:
+ - api.openai.com
+ method: POST
+ parsed_body:
+ input:
+ - content: What is the current temperature?
+ role: user
+ instructions: You are a helpful assistant.
+ model: gpt-4o
+ stream: false
+ tool_choice: auto
+ tools:
+ - search_context_size: medium
+ type: web_search_preview
+ user_location:
+ city: Utrecht
+ country: NL
+ type: approximate
+ uri: https://api.openai.com/v1/responses
+ response:
+ headers:
+ alt-svc:
+ - h3=":443"; ma=86400
+ connection:
+ - keep-alive
+ content-length:
+ - '2631'
+ content-type:
+ - application/json
+ openai-organization:
+ - pydantic-28gund
+ openai-processing-ms:
+ - '3405'
+ openai-version:
+ - '2020-10-01'
+ strict-transport-security:
+ - max-age=31536000; includeSubDomains; preload
+ transfer-encoding:
+ - chunked
+ parsed_body:
+ created_at: 1747227481
+ error: null
+ id: resp_682493599ce08191a7d279acb969c28b05f032fc13ed3d8b
+ incomplete_details: null
+ instructions: You are a helpful assistant.
+ max_output_tokens: null
+ metadata: {}
+ model: gpt-4o-2024-08-06
+ object: response
+ output:
+ - id: ws_6824935a6ca481918cae37433d3e2f8005f032fc13ed3d8b
+ status: completed
+ type: web_search_call
+ - content:
+ - annotations: []
+ text: "As of 12:58 PM on Wednesday, May 14, 2025, in Utrecht, Netherlands, the weather is sunny with a temperature
+ of 22°C (71°F).\n\n## Weather for Utrecht, Netherlands:\nCurrent Conditions: Sunny, 71°F (22°C)\n\nDaily Forecast:\n*
+ Wednesday, May 14: Low: 48°F (9°C), High: 71°F (22°C), Description: Clouds yielding to sun\n* Thursday, May 15:
+ Low: 43°F (6°C), High: 67°F (20°C), Description: After a cloudy start, sun returns\n* Friday, May 16: Low: 45°F
+ (7°C), High: 64°F (18°C), Description: Mostly sunny\n* Saturday, May 17: Low: 47°F (9°C), High: 68°F (20°C), Description:
+ Mostly sunny\n* Sunday, May 18: Low: 47°F (8°C), High: 68°F (20°C), Description: Some sun\n* Monday, May 19: Low:
+ 49°F (9°C), High: 70°F (21°C), Description: Delightful with partial sunshine\n* Tuesday, May 20: Low: 49°F (10°C),
+ High: 72°F (22°C), Description: Warm with sunshine and a few clouds\n "
+ type: output_text
+ id: msg_6824935c4dfc8191b0abacb1c0fd0a7805f032fc13ed3d8b
+ role: assistant
+ status: completed
+ type: message
+ parallel_tool_calls: true
+ previous_response_id: null
+ reasoning:
+ effort: null
+ summary: null
+ service_tier: default
+ status: completed
+ store: true
+ temperature: 1.0
+ text:
+ format:
+ type: text
+ tool_choice: auto
+ tools:
+ - search_context_size: medium
+ type: web_search_preview
+ user_location:
+ city: Utrecht
+ country: NL
+ region: null
+ timezone: null
+ type: approximate
+ top_p: 1.0
+ truncation: disabled
+ usage:
+ input_tokens: 317
+ input_tokens_details:
+ cached_tokens: 0
+ output_tokens: 300
+ output_tokens_details:
+ reasoning_tokens: 0
+ total_tokens: 617
+ user: null
+ status:
+ code: 200
+ message: OK
+version: 1
diff --git a/tests/models/test_anthropic.py b/tests/models/test_anthropic.py
index 77857e8821..3e1b063018 100644
--- a/tests/models/test_anthropic.py
+++ b/tests/models/test_anthropic.py
@@ -14,12 +14,16 @@
from pydantic import BaseModel
from pydantic_ai import Agent, ModelHTTPError, ModelRetry
+from pydantic_ai.builtin_tools import CodeExecutionTool, WebSearchTool
from pydantic_ai.exceptions import UserError
from pydantic_ai.messages import (
BinaryContent,
+ BuiltinToolCallPart,
+ BuiltinToolReturnPart,
DocumentUrl,
FinalResultEvent,
ImageUrl,
+ ModelMessage,
ModelRequest,
ModelResponse,
PartDeltaEvent,
@@ -39,12 +43,15 @@
from pydantic_ai.settings import ModelSettings
from ..conftest import IsDatetime, IsInstance, IsNow, IsStr, TestEnv, raise_if_exception, try_import
+from ..parts_from_messages import part_types_from_messages
from .mock_async_stream import MockAsyncStream
with try_import() as imports_successful:
from anthropic import NOT_GIVEN, APIStatusError, AsyncAnthropic
from anthropic.resources.beta import AsyncBeta
from anthropic.types.beta import (
+ BetaCodeExecutionResultBlock,
+ BetaCodeExecutionToolResultBlock,
BetaContentBlock,
BetaInputJSONDelta,
BetaMessage,
@@ -56,9 +63,12 @@
BetaRawMessageStartEvent,
BetaRawMessageStopEvent,
BetaRawMessageStreamEvent,
+ BetaServerToolUseBlock,
BetaTextBlock,
BetaToolUseBlock,
BetaUsage,
+ BetaWebSearchResultBlock,
+ BetaWebSearchToolResultBlock,
)
from anthropic.types.beta.beta_raw_message_delta_event import Delta
@@ -1306,18 +1316,284 @@ async def test_anthropic_model_empty_message_on_history(allow_model_requests: No
""")
-async def test_anthropic_empty_content_filtering(env: TestEnv):
- """Test the empty content filtering logic directly."""
+async def test_anthropic_web_search_tool(allow_model_requests: None, anthropic_api_key: str):
+ m = AnthropicModel('claude-3-5-sonnet-latest', provider=AnthropicProvider(api_key=anthropic_api_key))
+ agent = Agent(m, builtin_tools=[WebSearchTool()])
+
+ result = await agent.run('What day is today?')
+ assert (
+ result.all_messages()
+ == snapshot(
+ [
+ ModelRequest(parts=[UserPromptPart(content='What day is today?', timestamp=IsDatetime())]),
+ ModelResponse(
+ parts=[
+ TextPart(content="Let me search for current events to help establish today's date."),
+ BuiltinToolCallPart(
+ tool_name='web_search',
+ args={'query': 'current events news today May 26 2025'},
+ tool_call_id='srvtoolu_01MqVvTi9LWTrMRuZ2KttD3M',
+ provider_name='anthropic',
+ ),
+ BuiltinToolReturnPart(
+ tool_name='web_search_tool_result',
+ content=[
+ BetaWebSearchResultBlock(
+ encrypted_content='EpMiCioIAxgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDKvDne3VjpY5g3aQeBoMBqRxCv1VopKi36P7IjDFVuBBwDs8qCcb4kfueULvT+vRLPtaFQ1K+KA24GZOPotgWCZZLfZ1O+5DsCksHCQqliF9KupRao5rAX3YTh8WugCLz+M5tEf/8ffl+LGyTJNp5y0DOvdhIGX54jDeWZ9vjrAIBylX4gW9rFro2XobjCu2I0eodNsmfsrfLTHEAtar5wJUbeW8CrqxgO8jgmcpCDiIMZ0EsluHcI4zo/Z/XJr5GrV/hQzsW/4kpSZJDUmdzbhYxm0irr+fI2o7ZZ5zYElLFOWcGTilBbreB58P05q+cZNm465Depd+yNKGeSkqbgOURbvYZ3cMwVYLdQ9RatnfNPUbyZmCzkM15ykPt7q9/sRtSeq5eCKIqcOALhpGox7SBGqW+un88dl9M/+ProKeD/RoBUG/SXyS4o5VhM6zXM5gYEW+TbXeex5ob1hFlSMM0IjQ2Uy8aEE6fZfg69Vsc4pc0Lghf4EC9QZSvKyYUDM1ufLzXdjR8YmKSL3MaynV6NrkA3z/Sc4tch1Fn78uzSxyyB8XrfClI4NNi8pmLk9YxFOpxf9+b5fhgyCdmYddGoDzE+945k2LIQmVLpVga4/bFllZpbJ3EOrtlcHfVKf/EP78CBb0y5T+T7XM4IbfwBoqjKuj1f52a694vk12s0DJ8oK+pbPPVwbC6IanpPL/nTsxFfD/xa45vYjZ4Ms8guWHO1ugutkb9Hy3e6bPNhQY864WFn7EfQdLvvMs+xZTZecPv6qXeNy83+3l7EcQOQBt79zfk9J7S98NOzEP9akE4r6jZkl1gK8VKN3PYHnJbM83kgiTnv+kWsPCyuqQCPyVOeUprvLpOcRJTRk0E675v5xaisd8DxJY+mhHM+ppvG1zyEiSn1GeTzWwd9t58x999SYq9aFb/w4QYGEqa9RDoq0i6KqYrCh032yna8uZxpBTpkAJaBd4JVb9XyuRFMZi5RuoTHqSITWnjmCrTA3j2Qu9B0ynU5eTpGY58UQlVhEJx9G/7WGrc0f4R/QEg5mZHhJs8d6Swn4F2ff7lo4V6ulSjdRm9H6JL5Q3pJBZY/meL2rvsbgY4VS4/nGRqA4FaETGQu/fno7fYsnFSPRmTU478lBiSxrycXB+Jo9W6V/gakX6Vsm8dPQfpDIJeKGtgv2n/bfaR1zoo4CqvRKeI3l0q2Cyo+ebNqWYD0cLfs7GyAekG+aKLTn+xsqz6xNu0kWHtoNWUQIyXUvsmEERfX/5FArGkMOpUX60QwwjRvqvZyY86eIYHugcddL0XBhruRD0GZhMBO6N8ymOFaDdsaNLkDmLxYe00ftxMk/BaQIETNB1eRlLJWbKCxSOdzfMA3erzWArlqP31rkI6uzIdrqrb4mUeTdrwheakVLi7Fnrxh+C913ybhetUGfzmgmxjzN/LKFPki2nCx/54q+zr+O7OgCUq7nmME3bRatphaOzhx7tgb5PCaJzCTmKOiIhEuHLob4htdb16K424GPDWadm5eg168UqJyjuzhfi4gTIlWEmzXcptXLQw8UjtI2adla/8joavVAVAGUW6Jene4xDnFDywqnUNDG3DulRfIzf4GcUH4Fj7yYNFzPtlxZHSKj0WMco6MWahRTjLxXA/I43fK5lksm9a91ZFoC3eSdKyhX7N7eImpDMoSNo1vcTBmDPu5u8F/BePVm77D5lmIC3qDDxOYUG4B5hxGgl1BU+J0aWiysrdxCT4NeuoNRZaNXjpSsDNaQ/ypFQ3ElnOY0Yqz8g8H0HUPoSf7gq/g1PmHWcgVZ6aEKevoz417fI69OV/nMmas4h9A3dADg60ER+KJe4r1D/yKqiXb5zVjUrEE1zDBG/kpCWqigWhALNyzpnkRwkF4kVHnTCf/3d7TtQYJntBAc2f+rXHBoYXA61krf2Lu4ooT+Cpu/CjUDg3sGnH2mZ7jD9zOfkBi3JzYBVHpZi6baNUk5aFOcn2Uf4Ygh2PHJ3Nq72Oc1pGt/xk117no7duf1Nr1/PvCeadE0fkjcuEwH/51kZ1h4zrv8HxUOLeibNHWmsAvRzsQiCnFQUK4apBHVsKQog00ncOU8rysPu1cWmacqTY6nNO7i/MB9/2Zj4Fqm+Lq3wfXKOqIU/EUGRpFxTNcRieXDreFlKR9HJgRLuMIAqQ7mVEbh160aMulj9DyOhp/6gLXufYV7M3wM2j7Lxe85/O1rUrGFnnH9vj6fN0eX132ZvcsdU6Fv/Sc6Z3Qgs5oyj+yRm88ek1JLLS7JMwwNK0BXy9NxGEPbtKYfD6hbh8v5FBIp2tOlBiJh4U5cCsX3/6luIVlxvEHpg7bDNfG0RnWJTU2sBi+8B738Jig2ylTaN+Qyav/FYLbb97SCyCOtW4pnfkhJG7Z2q0YOfRcxFnsqKiDkAbJZvnNiMeml86kH1hIeDmSmyn92oVX7ECId/xcQwmq4FAilJi4Fnhl33UTayfAA/VZjzR1IGew/oV6hYzz89QuxlQMYgz0QcvTUx/yPVzAYejW6N5KxEf7JMKmqXNeMXSwenp1w+/r1LUqDAmsUU+bb6M63cqOMsTECGocqscSAH0/PVOLlXiQMPeWZKtHV0q3Yw0nsjJaooKl16EPhA04SQgcGSU89ivH9aiDRm+yk93NvIKPOaXDGYkBfodesXxGoiTJuMYAL4aJDEeL/kUD3ZyRXuXbjgVXPK8MPvXK+fe3A4Qe6YlX//EpvHv8hKQ1R2xNy+6Z/jidWHMFSYk6i9o+tExc6XcPr4lBwSmA23jMmVnba15956U2jBXKSW1oOlC+9DDKI3LEWWHyYI/CdHsMqabe4/iAnwEYmwQeG5KzQpjs46m16WZflArk8IBAomoFKGl4mOjqUUncqcV45Vt4/DFAVVuGjvZzaZsg6tUS0QfAuTgX8Oo4jKj+Ss4L9VcuH637rpPgETZJky38cn1wQJjuMBrM3y5sQZ071KbvjMSw3ywdQIGdOg9yzOEfhST68mjwvgsLb29TylCspNDpnWhAttcLinOW25PCEDUJmST103c/0EJfPqUJjL63PITHz+dgX5iYX7Gb0UVSlf3+6Ygh4QRn1W2md7YP9jwnZp6iM7PPQXBw40hDIX41uhuLoTW6loG/uttmjt4eobLZnTU/2KxFpGXA6DXHbDyXIZtYE71oBQHbDgMsivu/BlEWG/PaEH+vhXB8N5Xbvv+QkhiNx0BpWDmUl8ukmahyw1fcgy/eF741iT0EXorZf9abjKyWNztuJ1Z3gYrKNVCes2pKgQCQ54MZmmoh18QCUs5eJLklRAWw3FSza/OypHJjedUkc5LeF4aOUEWu3Fld4RyOxdhd3yCHfZKnfRfKxPz7mMIfYzA0U/FFZSiH4wHpOWdUcciZSsFNzICC3cYNQ5PMsKToYXjEOFUiuyfuF4+00bgV1PwXOERosP6OToBMd5uV4JGZZqy+Q3QfoZyCyJKFAdFvyZlhEgOkzvTeli6UjnPVMAz6Ujek8upI24OasN+VJoJytUSLTvDs352w225pHC1/iOJdp63TRUVrSnEenDeHNtI46X9JRf8AzdkF7eD0Vd5rTq9GL6BfuzMNUJR6IiLE8UM2NL3c1nGUi1ibd+4oGKhPJPhg3atRbdKDCGLiLkrZeHiu4cZUuxidj/dPGgpaJQy/3kUP0+N7SwbTAPnPpsEX2YBbL95zY4g1ep4StjlXDwhC7JEo54YUATefqT8vBFZJuNSWnsmXyRbTUffGnqPjDp0SxKzEG9k9/6n1tKgboYX3qM+pE59O5o1t1gCJBlxaWcd0yIM7qnCqdHiIsZASaCWooziItiGrA38djUp4s5OcDoFcq3UGtTQRnG8cQEUWX+QzivVP5f3rXGDoxvKHmi64GMEecQheYMS4qXzJp61nxpSL85VzjhRNs92MltYfm8UBTDY0a4c5n+eRm5g/ttlmvkRLspYtncP/FGucnIyWSLtbKqRBnaX9Kj2Hnhq4GthnzUpqngrTpjHakLuP5hZEEnOIyoK/WMJkKNJ5Ndad+kd/UUX269CAlBWZJWNpPCoQ2OmnJrAp9ExQWNP0pTXRr4wUE3j0wewcaLbtNcaLWTZUNWoLTbNwZNi7URRLarEXLd2Uej8fpI0JM8uD6RYEAcFqajs66SHKd3MpsgknlzH+AUfWvuUTaE38XbKufJtNl4W9qa8llC3NCucHYn3DL9mIQB8JYkG/N2/BiQ8oR60OaldgBbRa1J0uCbU54ZSmy1vCE0Sb3nxCSUG1E6VFrJ2oK5N7AOT7UBF3YnBCcxBUml2eEwyjLOw1gjx3KMHiaiE/gEN3DRFD15TdSBBoVvuOykvRP4NeAdZ293YkuQJ6TdeLmopjTNJKVeKb7PYNCcn9bVyYKccoKZ8+TGVPgztdcloyB4liGPQpr7TsXI4kUSu55bqEBm5NKKSlRApNaqm98KN5C1a+oXtArvpsuYp8xIy1gnbn1Iaq5nXQnswSnSDMcCCzZBtuwk59H+gg87ibblWO5NlR9GcgScAKNngfG8XzHQc3lDG5Vfa93fyppJueYjTAfvkmER1xyPiDHXWz2d8ImaGOMOqXw3uHsliOIn847m3MD/uKHrLNLO/dIINLnEpUh/s8WqYBFW6hjKHqCfO9kWkRbXcXFKLVJvM6v1zQUrg70EUc1C+t9k8q3h/bp21p1Dw+kFtkss47IGXHCECV0/WQQmMkRDuf2FTo4rqayjCnWQytlOrJCra3IAtumxc70/t+7oPEuK6pg7zg31wdFalrtD4kgzmREYZeQXodV7zDgtBUql+VK/jgjJoWTzSvgKsLRoKMRq5utivhhCYOJCoFDJW/3b/PpUwY+2n+iwpRQpJV7kM6JrOCWj+tWKI2kivW78q1bcZx3Gpa+mH9NKfDsQ2+yAXapM+BY/DfmirSpiz0vMZCRIzZgxl6avKkqOlLHW5YaMvr+oByeNOTDJAYKKm1UusbnXKcY60+z2T0Dmt9vmUj1Y+GNbvAMtbtaA5ZeP/FTp8iZTk1o1C1PFATuKsWcxn5gr7EX/Aj5JGTU40KyXx6ttzKXI5HmPqHzECyWldjRlnj4VuTBJiSlh782bCy0W3rqQ4HeBfJA2dPHdhZBkxM0Ag3X/x77ag61/as8AiAK3abH/bZDeldz5sshXSNw04QjqAMpNbLx9rtybAxDfg4LnUB7IDpOSCWgv9VzMGj1BWIKmtl3cUrVCzTPVFcYeq7KqA9XUPYncx8UAEyDe4CnZtVvSXBnY0IN2lIEl62FSq3qpvgGHyaT8jAUeqQdzw0OGA/05ht1h3z0JqrnL0E6EKjpZdYpArEw/hlArmDmrgq21XKH87H0r0iqLGrQWAxpPRiioJBpAa/K2r88ptQGJltBkEuIkiE6ySU5pHy7IuUnGQum/Jb66+9KfXDgshxm2p5QlLUoK+r5jk/zCY5o3qoDzc4+5lCc/qlG9k2ZefX1/1qbhPm4DRVQUn3c1NWKuZ/8UrR4vYiCfHtRhwyHQ5EmT2G2U6u8rVVitjpt5q8z9FZ8oPuD8ShFxa4RJRiH2r8vR6LrTU41+uJCUeRj2TR8li+zDkOuzKVCtN4WSzITUNrz+8Sr0Zgg85yjoCTyCpEsrnEzxq94B2BdZM6B9yAGcR06tYtbT/FWSHMrL5Jl/ooX87sdhXUJdUgn+ea2EuqkYImB3dHbV9yNqew+wDtDNnpwn/5nRlIbYjwCjm/x3QNT0tM5f21C6WLCFqFHN7Ji/oCvYXOdsaxiWWS4bGAM=',
+ title='News: U.S. and World News Headlines : NPR',
+ type='web_search_result',
+ url='https://www.npr.org/sections/news/',
+ ),
+ BetaWebSearchResultBlock(
+ encrypted_content='ErwHCioIAxgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDK2W0Qu0wNgI6mf5EhoMNCqr1gVeM/Fj3PSYIjBrgyGKmTOrJLgDCXcOvRtrbigKDeccd5oypMBGnMVhm6h3Ade/9+vNOwI3ByflKmwqvwZqUUdfJ6+k9ZDrmb7VM6ktRqsZ4Z++yOdyubDNbsyM6RdwYuNi+bS5ZUON+rMd8+ZrQYlGYqq7NF43o5klxpac+Dsgx3OlKbu6Hq6eiKOQ3rdPGYlUYKdDouAx6RjypXjhYkqErPrjlFZhNv2lO6cohI0QU66p6b7G8UMVyweqYZ+2QYTFfbwU5VdIAOiQW8PBgNwPC5LRnidfbiT04VY+cEsNW04zOq9coXs4NgFRw2WDCZDBPGTEJex0xv7vD0/D0YpBhfiawNJ8FgBTI6q0gXQ2+YwqelVaZ+BDpu2JeRABLXiXQAMIiBBiayofacvfgJZ4omPY1JRiJwX5IpbLFqLcNz2fWr8veYedwrDZV/lOjyn755WTp2i89GD4Pv53htWrDOH8/YJBQ9u5KA2DFz7zAtRLyPqvPz3YaLMr3ATFvs8m0igrllgC5uaWPWfO/28RU7QNnxyBLGNonF3dtz3Uu2naeNvxjRhqCtUOON5odOahtPrRs5qkjv/UrL2YzlnfsRL4Qb/qsGJE6YWScvLhjBaum29Whk2p6RtYJqzzSqDbk0jxKe/hNatl3s2JF1bAW4L7p9FnsK1v/G7AYSaIYl4RDLGuL1bFOKGKVlUZtohNMws+gvTCYKdhQzfurimTsNIpBP4Ci6aJ+/yACa22AXGhZQqyiOS7yxI6zj3vZdQGFBle1TjDpzveY2Nz/kuuTCPbGsWt5kd9v7BkWvkNacqZ70KijyIk5dVt3H0q4eavyNLU0gF4hSCPDHW7eeWXTmNs1YniKiaHrwmOOqXjw2PCQrZv0i7UQRjDmRQqx9NtuqzMup9DRPbQuZM23b8JwzqA0Qjyxc5pTlWRL9aU+U7ZKOD1OdBszAU54c5N9jOca8S2Plt4TGJcAv2Wy73Bex74GPlkHcKWO8TJYhrV4ZF2nMjssncQEKCltJaZg6TJpazpLKoQ1XmYmgzebbVMRc8RTDXk335AYKkN62xRnfrDd5T5wBhGbPNQeF7PGigtAK/SpSpTna/vmGOBul/cONWOFFKNdY+FtCAGd4AOo3s/N8QUnKR66TEv9ocuVep1UZxV2fJcqIuJukutfT9eWPcou6VImLUzRQMYAw==',
+ page_age='4 days ago',
+ title='The Biggest News Stories Of 2025',
+ type='web_search_result',
+ url='https://92q.com/playlist/the-biggest-news-stories-of-2025/',
+ ),
+ BetaWebSearchResultBlock(
+ encrypted_content='EuYCCioIAxgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDCmLeaYgzUtJ4Mi+fBoMpktwxWvlSdpeNRRlIjDckkEHzeMKWP+vkSJ+7ci91OlLvn1nTU4wG+0am9miZ+68Q8XjsyCBGekIPeSsgpkq6QFTAvqrNhd55GMbj8VQtB/7oV66lwp8PzaymgQlLzCnxBdZ6IRYyEd6XwFOPrWCwyjtlKbwRiM2NIaNsGcrraBVrDfsjCz20qsDPGNsQf587z/TD3zWUSelhjhf+T5nDCEXUkYM2+4MaGP5Ty57Khh3WQr5q6Q46m85jBBF+akWf1uKZEgjgFug1ufj/8TXEEAaKCVY9YeXTXfYH8DocKveCXH4Bp9TNbgx55UrL8NdXiwdtpI/zqY+8hM/SiaVeXXI/Rbmjg3HzFTLfrH4wSrl5awdKWuGwQy8nqRISZlwNVnwFY0e8uc08xgD',
+ title='ABC News – Breaking News, Latest News and Videos',
+ type='web_search_result',
+ url='https://abcnews.go.com/',
+ ),
+ BetaWebSearchResultBlock(
+ encrypted_content='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',
+ title='Breaking News, Latest News and Videos | CNN',
+ type='web_search_result',
+ url='https://www.cnn.com/',
+ ),
+ BetaWebSearchResultBlock(
+ encrypted_content='ErQCCioIAxgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDGPat3RtBffd6jd9uxoMkx9uAfM4hgJRbrR4IjCBVNWqux+TsqDP0poLm+ss84SLrVR4rAcjrQSDPna9ZfR0OFhPjv2ko1ZVuBzeRE4qtwGOPV6my0G/y4nPEH8gNVc3y/8uZzh7O8CBrduzchEMd5RRXLlsC+bU/SjZ+5LBYGzAVwRCfVXIdaJ0/d8RYdJWHo3bvKc5Lu/WFPV6Po9gVHLOU5WVDsyzwmrvqzCYC0UhkUMa0yf5j7WTFaT+kgHZcFcbvYPG53USqNh0seahaaCC5fJRjRBTAvuyj4md+ppTjIXGZEp3rTMG3MTkv8t60MgPzn4ObLGEmBQIQrfES9G2BT1k7lUYAw==', # codespell:ignore
+ title='Philippines Top Stories: Politics, Environment, Education, Trending | Inquirer.net',
+ type='web_search_result',
+ url='https://newsinfo.inquirer.net',
+ ),
+ BetaWebSearchResultBlock(
+ encrypted_content='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',
+ title='Portal:Current events/May 2025 - Wikipedia',
+ type='web_search_result',
+ url='https://en.wikipedia.org/wiki/Portal:Current_events/May_2025',
+ ),
+ BetaWebSearchResultBlock(
+ encrypted_content='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',
+ title='Portal:Current events - Wikipedia',
+ type='web_search_result',
+ url='https://en.wikipedia.org/wiki/Portal:Current_events',
+ ),
+ BetaWebSearchResultBlock(
+ encrypted_content='EsoJCioIAxgCIiQ0NGFlNjc2Yy05NThmLTRkNjgtOTEwOC1lYWU5ZGU3YjM2NmISDAYjLeq1Kci5o2pi8BoMqJacE/46sh+pR01VIjDPMDUx0d3wj2zbUnowpxFwHvCCnCwLoPMxQsQm/dnvm0Fzfga5o6zXqDwWpXvUzhEqzQg/X9w2opL/m5o7bUw/TubgkYaR6l4t2n0oQlGgetbSj1gOEor/WWJ8bWXL3BZnS2xkIzwGrbLdlPDn/NoXICDQZ+P3IlA6B8CVwiijOnNq+x5nTpX0m794VFJIfO5SdupAiWqhWmtqt8XhcWs8W2gnhDDvNsBG6oH2ZsRenxt3n7a7eWo7yRk/KSHdBM9c+L5r3wu3Ul81DW9CuE6KqUdFjjePJfWKL8OvzfkvJjIqcRaqc/3RIRZbSPbimBiRMXtCBZeCYE1yeBs3xLQ7TJXgRM/9ScKromcFWckYpGXBYSGL8SiXXoBUD7pLsuP5FnRnZUkQLCHTLoId0/w4jVbuXmDh3oipIlGUQCSbp3FkogFB/CZFpKz4tY5E9WQ4pBkApGYgAeGgOOStiUW3pE9oCy5TRpCfilrg66RtJozGI+LWM/XYuuOwSK+f+/c6AaUJ7av+LCUSPFI6G1XErfHK/KeBSJp7ZVoRXn/f7yJXlZvybKQXdN6UtxqxRJbil9RnmmXsBc6cesWW/cHbz01V8tkaqcYdrtJdVM/LesICK77C/JYiA6PQsneeg5xdZDCUp7yUO9P/CHMBqhPB8geS9y4dG7UIdJrFbv43cGOiqoSBsBGCLCc7crptYYGydT6YBgKb+ktUJm14MfbF8lzKt6SVYpn8KWL2dyhsDbfi88h51fvZqDV6loTDpyHbMHeJoA4pIxLhkBIriQOLNnEIEwqTGy2XFy326bahzINKJVTY1mMq2v3O0Snl0DNcAZ1X/iHt393xPgdcSy6c2+sDRexvpU4grX1GGFD4E8kg1QP0fErasq17XzRVpnU7Kedk/ntU/X6zeI3aTEeyRNG7IPH67w6GyIF8XmgCh25H6bCBGN87N8hnPSVAy8/qIMcfZYaF1c8W/QB9n7HBWhQgdyZv3relj0Ur0xdRi2osqo+k2c0a9mmIVupbzpLAxfY7LiwU8Edsr+1WY62x1omk+b4XNiGnhHnrF4B2o+f89icgAVSqRo2ydqIUDnZUYewu8jjUg/j+WUI8yKqZHCgCRdkm4fDSOcK8faTeaITl1iI6XFbUicEWZzG87tFykNSv5fz+ueDbMj936cm97rPUhp/qMnS2uloAxmiWLcS2/oV605i97ccR9IlwB0tt259e9iCvltjxzcC6P95vbhLS94+xVNOG2fmQtzE8oyaREZBkwSjVHuJ3lDAxvHDRYY8F+lkuLE4AvLiye3CDAMXNyCrG+/xiQIBNUGs+1aV9edHMmwpCVs99Q+nHO1RBVPljY607Q6u06Wt4VHnY+45+IxzpHHWXxg3Jn8Lh1AuzFKEaRWaI7JDSCgJmYxjIwkUO7988PWjOmFLquOd6mQsQ6iVG/89zSwr019RlAQRDIbMimefHIYhLm4S/Y8TzPhLFXJ6FaxrPFAkkkp2LnLQUoNKlo2h64JaAerGAku2FEwn/vo3hsCXwILg6R4QYAw==',
+ title='Current Affairs Today – Current Affairs – 2025-26 - GKToday',
+ type='web_search_result',
+ url='https://www.gktoday.in/current-affairs/',
+ ),
+ BetaWebSearchResultBlock(
+ encrypted_content='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',
+ page_age='3 weeks ago',
+ title='May 6, 2025: Top news events to look out for today - People Daily',
+ type='web_search_result',
+ url='https://peopledaily.digital/news/may-6-2025-top-news-events-to-look-out-for-today',
+ ),
+ BetaWebSearchResultBlock(
+ encrypted_content='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',
+ page_age='7 hours ago',
+ title='26 May 2025 UPSC Current Affairs - Daily News Headlines',
+ type='web_search_result',
+ url='https://testbook.com/ias-preparation/upsc-current-affairs-for-26-may-2025',
+ ),
+ ],
+ tool_call_id=IsStr(),
+ timestamp=IsDatetime(),
+ provider_name='anthropic',
+ ),
+ TextPart(
+ content="""\
+
+
+Based on the search results, today is Monday, May 26, 2025. This is confirmed by several sources:
+
+1. \
+"""
+ ),
+ TextPart(content="It's Memorial Day today, May 26, 2025"),
+ TextPart(
+ content="""\
+
+
+2. \
+"""
+ ),
+ TextPart(
+ content='May 2025 is the fifth month of the current common year. The month began on a Thursday and will end on a Saturday after 31 days'
+ ),
+ TextPart(
+ content="""\
+
+
+3. \
+"""
+ ),
+ TextPart(
+ content="On May 26, 2025, there are significant developments happening, including India's launch of the Bharat Forecasting System to boost weather prediction and disaster preparedness"
+ ),
+ ],
+ usage=Usage(
+ requests=1,
+ request_tokens=16312,
+ response_tokens=258,
+ total_tokens=16570,
+ details={
+ 'cache_creation_input_tokens': 0,
+ 'cache_read_input_tokens': 0,
+ 'input_tokens': 16312,
+ 'output_tokens': 258,
+ },
+ ),
+ model_name='claude-3-5-sonnet-20241022',
+ timestamp=IsDatetime(),
+ vendor_id=IsStr(),
+ ),
+ ]
+ )
+ )
+
+
+async def test_anthropic_code_execution_tool(allow_model_requests: None, anthropic_api_key: str):
+ m = AnthropicModel('claude-sonnet-4-0', provider=AnthropicProvider(api_key=anthropic_api_key))
+ agent = Agent(m, builtin_tools=[CodeExecutionTool()])
+
+ result = await agent.run('How much is 3 * 12390?')
+ assert result.all_messages() == snapshot(
+ [
+ ModelRequest(parts=[UserPromptPart(content='How much is 3 * 12390?', timestamp=IsDatetime())]),
+ ModelResponse(
+ parts=[
+ TextPart(content="I'll calculate 3 * 12390 for you."),
+ BuiltinToolCallPart(
+ tool_name='code_execution',
+ args={
+ 'code': """\
+result = 3 * 12390
+print(f"3 * 12390 = {result}")\
+"""
+ },
+ tool_call_id=IsStr(),
+ provider_name='anthropic',
+ ),
+ BuiltinToolReturnPart(
+ tool_name='code_execution_tool_result',
+ content=BetaCodeExecutionResultBlock(
+ content=[],
+ return_code=0,
+ stderr='',
+ stdout='3 * 12390 = 37170\n',
+ type='code_execution_result',
+ ),
+ tool_call_id=IsStr(),
+ timestamp=IsDatetime(),
+ provider_name='anthropic',
+ ),
+ TextPart(content='The answer is **37,170**.'),
+ ],
+ usage=Usage(
+ requests=1,
+ request_tokens=1630,
+ response_tokens=105,
+ total_tokens=1735,
+ details={
+ 'cache_creation_input_tokens': 0,
+ 'cache_read_input_tokens': 0,
+ 'input_tokens': 1630,
+ 'output_tokens': 105,
+ },
+ ),
+ model_name='claude-sonnet-4-20250514',
+ timestamp=IsDatetime(),
+ vendor_id=IsStr(),
+ ),
+ ]
+ )
+
+
+async def test_anthropic_server_tool_pass_history_to_another_provider(
+ allow_model_requests: None, anthropic_api_key: str, openai_api_key: str
+):
+ from pydantic_ai.models.openai import OpenAIResponsesModel
+ from pydantic_ai.providers.openai import OpenAIProvider
+
+ openai_model = OpenAIResponsesModel('gpt-4.1', provider=OpenAIProvider(api_key=openai_api_key))
+ anthropic_model = AnthropicModel('claude-3-5-sonnet-latest', provider=AnthropicProvider(api_key=anthropic_api_key))
+ agent = Agent(anthropic_model, builtin_tools=[WebSearchTool()])
+
+ result = await agent.run('What day is today?')
+ assert result.output == snapshot("""\
+Let me search for today's date.
+
+
+
+Based on the search results, \n\
+
+today is Monday, May 26, 2025 (Week 22)
+
+. This is notably \n\
+
+Memorial Day, which was originally known as Decoration Day
+
+. \n\
+
+The year 2025 is a regular year with 365 days
+
+.\
+""")
+ result = await agent.run('What day is tomorrow?', model=openai_model, message_history=result.all_messages())
+ assert result.new_messages() == snapshot(
+ [
+ ModelRequest(parts=[UserPromptPart(content='What day is tomorrow?', timestamp=IsDatetime())]),
+ ModelResponse(
+ parts=[TextPart(content='Tomorrow will be **Tuesday, May 27, 2025**.')],
+ usage=Usage(
+ request_tokens=410,
+ response_tokens=17,
+ total_tokens=427,
+ details={'reasoning_tokens': 0, 'cached_tokens': 0},
+ ),
+ model_name='gpt-4.1-2025-04-14',
+ timestamp=IsDatetime(),
+ vendor_id='resp_6834631faf2481918638284f62855ddf040b4e5d7e74f261',
+ ),
+ ]
+ )
+
+
+async def test_anthropic_server_tool_receive_history_from_another_provider(
+ allow_model_requests: None, anthropic_api_key: str, gemini_api_key: str
+):
+ from pydantic_ai.models.google import GoogleModel
+ from pydantic_ai.providers.google import GoogleProvider
- from pydantic_ai.messages import (
- ModelMessage,
- ModelRequest,
- ModelResponse,
- SystemPromptPart,
- TextPart,
- UserPromptPart,
+ google_model = GoogleModel('gemini-2.0-flash', provider=GoogleProvider(api_key=gemini_api_key))
+ anthropic_model = AnthropicModel('claude-sonnet-4-0', provider=AnthropicProvider(api_key=anthropic_api_key))
+ agent = Agent(builtin_tools=[CodeExecutionTool()])
+
+ result = await agent.run('How much is 3 * 12390?', model=google_model)
+ assert part_types_from_messages(result.all_messages()) == snapshot(
+ [[UserPromptPart], [BuiltinToolCallPart, BuiltinToolReturnPart, TextPart]]
+ )
+
+ result = await agent.run('Multiplied by 12390', model=anthropic_model, message_history=result.all_messages())
+ assert part_types_from_messages(result.all_messages()) == snapshot(
+ [
+ [UserPromptPart],
+ [BuiltinToolCallPart, BuiltinToolReturnPart, TextPart],
+ [UserPromptPart],
+ [BuiltinToolCallPart, BuiltinToolReturnPart, TextPart],
+ ]
)
+
+async def test_anthropic_empty_content_filtering(env: TestEnv):
+ """Test the empty content filtering logic directly."""
+
# Initialize model for all tests
env.set('ANTHROPIC_API_KEY', 'test-key')
model = AnthropicModel('claude-3-5-sonnet-latest', provider='anthropic')
@@ -1723,3 +1999,167 @@ async def get_user_country() -> str:
Mexico City is not only the largest city in Mexico but also one of the largest metropolitan areas in the world, with a metropolitan population of over 21 million people. The city proper has a population of approximately 9 million people and serves as the capital and political, cultural, and economic center of Mexico.\
""")
+
+
+async def test_anthropic_web_search_tool_pass_history_back(env: TestEnv, allow_model_requests: None):
+ """Test passing web search tool history back to Anthropic."""
+ # Create the first mock response with server tool blocks
+ first_response = completion_message(
+ [
+ BetaTextBlock(text='Let me search for the current date.', type='text'),
+ BetaServerToolUseBlock(
+ id='server_tool_123', name='web_search', input={'query': 'current date today'}, type='server_tool_use'
+ ),
+ BetaWebSearchToolResultBlock(
+ tool_use_id='server_tool_123',
+ type='web_search_tool_result',
+ content=[
+ BetaWebSearchResultBlock(
+ title='Current Date and Time',
+ url='https://example.com/date',
+ type='web_search_result',
+ encrypted_content='dummy_encrypted_content',
+ )
+ ],
+ ),
+ BetaTextBlock(text='Today is January 2, 2025.', type='text'),
+ ],
+ BetaUsage(input_tokens=10, output_tokens=20),
+ )
+
+ # Create the second mock response that references the history
+ second_response = completion_message(
+ [BetaTextBlock(text='The web search result showed that today is January 2, 2025.', type='text')],
+ BetaUsage(input_tokens=50, output_tokens=30),
+ )
+
+ mock_client = MockAnthropic.create_mock([first_response, second_response])
+ m = AnthropicModel('claude-3-5-sonnet-latest', provider=AnthropicProvider(anthropic_client=mock_client))
+ agent = Agent(m, builtin_tools=[WebSearchTool()])
+
+ # First run to get server tool history
+ result = await agent.run('What day is today?')
+
+ # Verify we have server tool parts in the history
+ server_tool_calls = [p for m in result.all_messages() for p in m.parts if isinstance(p, BuiltinToolCallPart)]
+ server_tool_returns = [p for m in result.all_messages() for p in m.parts if isinstance(p, BuiltinToolReturnPart)]
+ assert len(server_tool_calls) == 1
+ assert len(server_tool_returns) == 1
+ assert server_tool_calls[0].tool_name == 'web_search'
+ assert server_tool_returns[0].tool_name == 'web_search_tool_result'
+
+ # Pass the history back to another Anthropic agent run
+ agent2 = Agent(m)
+ result2 = await agent2.run('What was the web search result?', message_history=result.all_messages())
+ assert result2.output == 'The web search result showed that today is January 2, 2025.'
+
+
+async def test_anthropic_code_execution_tool_pass_history_back(env: TestEnv, allow_model_requests: None):
+ """Test passing code execution tool history back to Anthropic."""
+ # Create the first mock response with server tool blocks
+ first_response = completion_message(
+ [
+ BetaTextBlock(text='Let me calculate 2 + 2.', type='text'),
+ BetaServerToolUseBlock(
+ id='server_tool_456', name='code_execution', input={'code': 'print(2 + 2)'}, type='server_tool_use'
+ ),
+ BetaCodeExecutionToolResultBlock(
+ tool_use_id='server_tool_456',
+ type='code_execution_tool_result',
+ content=BetaCodeExecutionResultBlock(
+ content=[],
+ return_code=0,
+ stderr='',
+ stdout='4\n',
+ type='code_execution_result',
+ ),
+ ),
+ BetaTextBlock(text='The result is 4.', type='text'),
+ ],
+ BetaUsage(input_tokens=10, output_tokens=20),
+ )
+
+ # Create the second mock response that references the history
+ second_response = completion_message(
+ [BetaTextBlock(text='The code execution returned the result: 4', type='text')],
+ BetaUsage(input_tokens=50, output_tokens=30),
+ )
+
+ mock_client = MockAnthropic.create_mock([first_response, second_response])
+ m = AnthropicModel('claude-3-5-sonnet-latest', provider=AnthropicProvider(anthropic_client=mock_client))
+ agent = Agent(m, builtin_tools=[CodeExecutionTool()])
+
+ # First run to get server tool history
+ result = await agent.run('What is 2 + 2?')
+
+ # Verify we have server tool parts in the history
+ server_tool_calls = [p for m in result.all_messages() for p in m.parts if isinstance(p, BuiltinToolCallPart)]
+ server_tool_returns = [p for m in result.all_messages() for p in m.parts if isinstance(p, BuiltinToolReturnPart)]
+ assert len(server_tool_calls) == 1
+ assert len(server_tool_returns) == 1
+ assert server_tool_calls[0].tool_name == 'code_execution'
+ assert server_tool_returns[0].tool_name == 'code_execution_tool_result'
+
+ # Pass the history back to another Anthropic agent run
+ agent2 = Agent(m)
+ result2 = await agent2.run('What was the code execution result?', message_history=result.all_messages())
+ assert result2.output == 'The code execution returned the result: 4'
+
+
+async def test_anthropic_unsupported_server_tool_name_error(anthropic_api_key: str):
+ """Test that unsupported server tool names raise an error."""
+
+ model = AnthropicModel('claude-3-5-sonnet-latest', provider=AnthropicProvider(api_key=anthropic_api_key))
+
+ # Create a message with an unsupported server tool name
+ messages: list[ModelMessage] = [
+ ModelResponse(
+ parts=[
+ BuiltinToolReturnPart(
+ tool_name='unsupported_tool', # This should trigger the error
+ content='some content',
+ tool_call_id='test_id',
+ provider_name='anthropic', # Need to set provider_name for validation
+ )
+ ]
+ )
+ ]
+
+ # This should raise a ValueError
+ with pytest.raises(ValueError, match='Unsupported tool name: unsupported_tool'):
+ await model._map_message(messages) # type: ignore[attr-defined]
+
+
+async def test_anthropic_web_search_tool_stream(allow_model_requests: None, anthropic_api_key: str):
+ m = AnthropicModel('claude-sonnet-4-0', provider=AnthropicProvider(api_key=anthropic_api_key))
+ agent = Agent(m, instructions='You are a helpful assistant.', builtin_tools=[WebSearchTool()])
+
+ event_parts: list[Any] = []
+ async with agent.iter(user_prompt='Give me the top 3 news in the world today.') as agent_run:
+ async for node in agent_run:
+ if Agent.is_model_request_node(node) or Agent.is_call_tools_node(node):
+ async with node.stream(agent_run.ctx) as request_stream:
+ async for event in request_stream:
+ event_parts.append(event)
+
+ assert event_parts.pop(0) == snapshot(
+ PartStartEvent(index=0, part=TextPart(content="I'll search for the latest world"))
+ )
+ assert event_parts.pop(0) == snapshot(FinalResultEvent(tool_name=None, tool_call_id=None))
+ assert ''.join(event.delta.content_delta for event in event_parts) == snapshot("""\
+ news to get you the top 3 stories from today.Let me search for more specific and recent global news stories from today.Let me search for more specific global news stories from today.Based on my search results, here are the top 3 global news stories from today, July 16, 2025:
+
+## 1. Trump's Ukraine Special Envoy Visits Kyiv
+
+U.S. President Donald Trump's special envoy to Ukraine, retired Lt. Gen. Keith Kellogg, arrived in Kyiv on Monday. This high-profile diplomatic visit comes as tensions continue over the ongoing conflict, with President Trump threatening to punish Russia with heavy tariffs on countries that trade with Moscow if the Kremlin fails to reach a ceasefire deal with Ukraine, while promising Kyiv weapons.
+
+## 2. EU Trade Ministers Meet Over U.S. Tariffs
+
+European trade ministers are meeting in Brussels after U.S. President Donald Trump announced 30% tariffs on the European Union. The EU is America's biggest business partner and the world's largest trading block. The U.S. decision will have repercussions for governments, companies and consumers on both sides of the Atlantic.
+
+## 3. Syria Violence Escalates
+
+Clashes between Druze militias and Sunni Bedouin clans in Syria's Sweida province have killed more than 30 people and injured nearly 100. This represents a significant escalation in sectarian violence in the region.
+
+Additional notable stories include Vietnam's plan to ban fossil-fuel motorcycles in the heart of Hanoi starting July 2026, aiming to cut air pollution and move toward cleaner transport, and ongoing restoration efforts for Copenhagen's Old Stock Exchange, which is taking shape 15 months after a fire destroyed more than half of the 400-year-old building.\
+""")
diff --git a/tests/models/test_cohere.py b/tests/models/test_cohere.py
index c69a8ab261..cce621325f 100644
--- a/tests/models/test_cohere.py
+++ b/tests/models/test_cohere.py
@@ -10,6 +10,8 @@
from inline_snapshot import snapshot
from pydantic_ai import Agent, ModelHTTPError, ModelRetry
+from pydantic_ai.builtin_tools import WebSearchTool
+from pydantic_ai.exceptions import UserError
from pydantic_ai.messages import (
ImageUrl,
ModelRequest,
@@ -508,3 +510,10 @@ async def test_cohere_model_thinking_part(allow_model_requests: None, co_api_key
),
]
)
+
+
+async def test_cohere_model_builtin_tools(allow_model_requests: None, co_api_key: str):
+ m = CohereModel('command-r7b-12-2024', provider=CohereProvider(api_key=co_api_key))
+ agent = Agent(m, builtin_tools=[WebSearchTool()])
+ with pytest.raises(UserError, match='Cohere does not support built-in tools'):
+ await agent.run('Hello')
diff --git a/tests/models/test_fallback.py b/tests/models/test_fallback.py
index 2b5b5a781e..597f34ddce 100644
--- a/tests/models/test_fallback.py
+++ b/tests/models/test_fallback.py
@@ -128,7 +128,7 @@ def test_first_failed_instrumented(capfire: CaptureLogfire) -> None:
'end_time': 3000000000,
'attributes': {
'gen_ai.operation.name': 'chat',
- 'model_request_parameters': '{"function_tools": [], "output_mode": "text", "output_object": null, "output_tools": [], "allow_text_output": true}',
+ 'model_request_parameters': '{"function_tools": [], "builtin_tools": [], "output_mode": "text", "output_object": null, "output_tools": [], "allow_text_output": true}',
'logfire.span_type': 'span',
'logfire.msg': 'chat fallback:function:failure_response:,function:success_response:',
'gen_ai.system': 'function',
@@ -201,7 +201,7 @@ async def test_first_failed_instrumented_stream(capfire: CaptureLogfire) -> None
'end_time': 3000000000,
'attributes': {
'gen_ai.operation.name': 'chat',
- 'model_request_parameters': '{"function_tools": [], "output_mode": "text", "output_object": null, "output_tools": [], "allow_text_output": true}',
+ 'model_request_parameters': '{"function_tools": [], "builtin_tools": [], "output_mode": "text", "output_object": null, "output_tools": [], "allow_text_output": true}',
'logfire.span_type': 'span',
'logfire.msg': 'chat fallback:function::failure_response_stream,function::success_response_stream',
'gen_ai.system': 'function',
@@ -281,7 +281,7 @@ def test_all_failed_instrumented(capfire: CaptureLogfire) -> None:
'gen_ai.operation.name': 'chat',
'gen_ai.system': 'fallback:function,function',
'gen_ai.request.model': 'fallback:function:failure_response:,function:failure_response:',
- 'model_request_parameters': '{"function_tools": [], "output_mode": "text", "output_object": null, "output_tools": [], "allow_text_output": true}',
+ 'model_request_parameters': '{"function_tools": [], "builtin_tools": [], "output_mode": "text", "output_object": null, "output_tools": [], "allow_text_output": true}',
'logfire.json_schema': '{"type": "object", "properties": {"model_request_parameters": {"type": "object"}}}',
'logfire.span_type': 'span',
'logfire.msg': 'chat fallback:function:failure_response:,function:failure_response:',
diff --git a/tests/models/test_google.py b/tests/models/test_google.py
index 7e51b61427..64a493e939 100644
--- a/tests/models/test_google.py
+++ b/tests/models/test_google.py
@@ -11,10 +11,13 @@
from typing_extensions import TypedDict
from pydantic_ai.agent import Agent
+from pydantic_ai.builtin_tools import CodeExecutionTool, WebSearchTool
from pydantic_ai.exceptions import ModelRetry, UnexpectedModelBehavior, UserError
from pydantic_ai.messages import (
AudioUrl,
BinaryContent,
+ BuiltinToolCallPart,
+ BuiltinToolReturnPart,
DocumentUrl,
FinalResultEvent,
FunctionToolCallEvent,
@@ -39,9 +42,10 @@
from pydantic_ai.result import Usage
from ..conftest import IsDatetime, IsInstance, IsStr, try_import
+from ..parts_from_messages import part_types_from_messages
with try_import() as imports_successful:
- from google.genai.types import HarmBlockThreshold, HarmCategory
+ from google.genai.types import CodeExecutionResult, HarmBlockThreshold, HarmCategory, Language, Outcome
from pydantic_ai.models.google import GoogleModel, GoogleModelSettings
from pydantic_ai.providers.google import GoogleProvider
@@ -598,6 +602,293 @@ async def test_google_model_safety_settings(allow_model_requests: None, google_p
await agent.run('Tell me a joke about a Brazilians.')
+async def test_google_model_web_search_tool(allow_model_requests: None, google_provider: GoogleProvider):
+ m = GoogleModel('gemini-2.0-flash', provider=google_provider)
+ agent = Agent(m, system_prompt='You are a helpful chatbot.', builtin_tools=[WebSearchTool()])
+
+ result = await agent.run('What day is today in Utrecht?')
+ assert result.output == snapshot('Today is Wednesday, May 28, 2025, in Utrecht.\n')
+
+
+async def test_google_model_code_execution_tool(allow_model_requests: None, google_provider: GoogleProvider):
+ m = GoogleModel('gemini-2.0-flash', provider=google_provider)
+ agent = Agent(m, system_prompt='You are a helpful chatbot.', builtin_tools=[CodeExecutionTool()])
+
+ result = await agent.run('What day is today in Utrecht?')
+ assert result.all_messages() == snapshot(
+ [
+ ModelRequest(
+ parts=[
+ SystemPromptPart(content='You are a helpful chatbot.', timestamp=IsDatetime()),
+ UserPromptPart(content='What day is today in Utrecht?', timestamp=IsDatetime()),
+ ]
+ ),
+ ModelResponse(
+ parts=[
+ TextPart(
+ content="""\
+To determine the day of the week in Utrecht, I need to know the current date. I will use the python tool to get the current date and time, and then extract the day of the week.
+
+"""
+ ),
+ BuiltinToolCallPart(
+ tool_name='code_execution',
+ args={
+ 'code': """\
+import datetime
+
+now = datetime.datetime.now()
+day_of_week = now.strftime("%A")
+print(f'{day_of_week=}')
+""",
+ 'language': Language.PYTHON,
+ },
+ tool_call_id=IsStr(),
+ provider_name='google',
+ ),
+ BuiltinToolReturnPart(
+ tool_name='code_execution',
+ content=CodeExecutionResult(outcome=Outcome.OUTCOME_OK, output="day_of_week='Thursday'\n"),
+ tool_call_id='not_provided',
+ timestamp=IsDatetime(),
+ provider_name='google',
+ ),
+ TextPart(content='Today is Thursday in Utrecht.\n'),
+ ],
+ usage=Usage(
+ requests=1,
+ request_tokens=13,
+ response_tokens=95,
+ total_tokens=209,
+ details={
+ 'tool_use_prompt_tokens': 101,
+ 'text_candidates_tokens': 95,
+ 'text_prompt_tokens': 13,
+ 'text_tool_use_prompt_tokens': 101,
+ },
+ ),
+ model_name='gemini-2.0-flash',
+ timestamp=IsDatetime(),
+ vendor_details={'finish_reason': 'STOP'},
+ ),
+ ]
+ )
+
+ result = await agent.run('What day is tomorrow?', message_history=result.all_messages())
+ assert result.all_messages() == snapshot(
+ [
+ ModelRequest(
+ parts=[
+ SystemPromptPart(content='You are a helpful chatbot.', timestamp=IsDatetime()),
+ UserPromptPart(content='What day is today in Utrecht?', timestamp=IsDatetime()),
+ ]
+ ),
+ ModelResponse(
+ parts=[
+ TextPart(
+ content="""\
+To determine the day of the week in Utrecht, I need to know the current date. I will use the python tool to get the current date and time, and then extract the day of the week.
+
+"""
+ ),
+ BuiltinToolCallPart(
+ tool_name='code_execution',
+ args={
+ 'code': """\
+import datetime
+
+now = datetime.datetime.now()
+day_of_week = now.strftime("%A")
+print(f'{day_of_week=}')
+""",
+ 'language': Language.PYTHON,
+ },
+ tool_call_id=IsStr(),
+ provider_name='google',
+ ),
+ BuiltinToolReturnPart(
+ tool_name='code_execution',
+ content=CodeExecutionResult(outcome=Outcome.OUTCOME_OK, output="day_of_week='Thursday'\n"),
+ tool_call_id='not_provided',
+ timestamp=IsDatetime(),
+ provider_name='google',
+ ),
+ TextPart(content='Today is Thursday in Utrecht.\n'),
+ ],
+ usage=Usage(
+ requests=1,
+ request_tokens=13,
+ response_tokens=95,
+ total_tokens=209,
+ details={
+ 'tool_use_prompt_tokens': 101,
+ 'text_candidates_tokens': 95,
+ 'text_prompt_tokens': 13,
+ 'text_tool_use_prompt_tokens': 101,
+ },
+ ),
+ model_name='gemini-2.0-flash',
+ timestamp=IsDatetime(),
+ vendor_details={'finish_reason': 'STOP'},
+ ),
+ ModelRequest(parts=[UserPromptPart(content='What day is tomorrow?', timestamp=IsDatetime())]),
+ ModelResponse(
+ parts=[
+ TextPart(
+ content="""\
+To determine what day is tomorrow, I'll use the python tool to calculate tomorrow's date and then find the corresponding day of the week.
+
+"""
+ ),
+ BuiltinToolCallPart(
+ tool_name='code_execution',
+ args={
+ 'code': """\
+import datetime
+
+today = datetime.date.today()
+tomorrow = today + datetime.timedelta(days=1)
+day_of_week = tomorrow.strftime("%A")
+print(f'{day_of_week=}')
+""",
+ 'language': Language.PYTHON,
+ },
+ tool_call_id=IsStr(),
+ provider_name='google',
+ ),
+ BuiltinToolReturnPart(
+ tool_name='code_execution',
+ content=CodeExecutionResult(outcome=Outcome.OUTCOME_OK, output="day_of_week='Friday'\n"),
+ tool_call_id='not_provided',
+ timestamp=IsDatetime(),
+ provider_name='google',
+ ),
+ TextPart(content='Tomorrow is Friday.\n'),
+ ],
+ usage=Usage(
+ requests=1,
+ request_tokens=113,
+ response_tokens=95,
+ total_tokens=411,
+ details={
+ 'tool_use_prompt_tokens': 203,
+ 'text_candidates_tokens': 95,
+ 'text_prompt_tokens': 113,
+ 'text_tool_use_prompt_tokens': 203,
+ },
+ ),
+ model_name='gemini-2.0-flash',
+ timestamp=IsDatetime(),
+ vendor_details={'finish_reason': 'STOP'},
+ ),
+ ]
+ )
+
+
+async def test_google_model_server_tool_receive_history_from_another_provider(
+ allow_model_requests: None, anthropic_api_key: str, gemini_api_key: str
+):
+ from pydantic_ai.models.anthropic import AnthropicModel
+ from pydantic_ai.providers.anthropic import AnthropicProvider
+
+ anthropic_model = AnthropicModel('claude-sonnet-4-0', provider=AnthropicProvider(api_key=anthropic_api_key))
+ google_model = GoogleModel('gemini-2.0-flash', provider=GoogleProvider(api_key=gemini_api_key))
+ agent = Agent(builtin_tools=[CodeExecutionTool()])
+
+ result = await agent.run('How much is 3 * 12390?', model=anthropic_model)
+ assert part_types_from_messages(result.all_messages()) == snapshot(
+ [[UserPromptPart], [TextPart, BuiltinToolCallPart, BuiltinToolReturnPart, TextPart]]
+ )
+
+ result = await agent.run('Multiplied by 12390', model=google_model, message_history=result.all_messages())
+ assert part_types_from_messages(result.all_messages()) == snapshot(
+ [
+ [UserPromptPart],
+ [TextPart, BuiltinToolCallPart, BuiltinToolReturnPart, TextPart],
+ [UserPromptPart],
+ [TextPart, BuiltinToolCallPart, BuiltinToolReturnPart, TextPart],
+ ]
+ )
+
+
+async def test_google_model_receive_web_search_history_from_another_provider(
+ allow_model_requests: None, anthropic_api_key: str, gemini_api_key: str
+):
+ from pydantic_ai.models.anthropic import AnthropicModel
+ from pydantic_ai.providers.anthropic import AnthropicProvider
+
+ anthropic_model = AnthropicModel('claude-sonnet-4-0', provider=AnthropicProvider(api_key=anthropic_api_key))
+ anthropic_agent = Agent(model=anthropic_model, builtin_tools=[WebSearchTool()])
+
+ result = await anthropic_agent.run('What are the latest news in the Netherlands?')
+ assert part_types_from_messages(result.all_messages()) == snapshot(
+ [
+ [UserPromptPart],
+ [
+ BuiltinToolCallPart,
+ BuiltinToolReturnPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ ],
+ ]
+ )
+
+ google_model = GoogleModel('gemini-2.0-flash', provider=GoogleProvider(api_key=gemini_api_key))
+ google_agent = Agent(model=google_model)
+ result = await google_agent.run('What day is tomorrow?', message_history=result.all_messages())
+ assert part_types_from_messages(result.all_messages()) == snapshot(
+ [
+ [UserPromptPart],
+ [
+ BuiltinToolCallPart,
+ BuiltinToolReturnPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ TextPart,
+ ],
+ [UserPromptPart],
+ [TextPart],
+ ]
+ )
+
+
async def test_google_model_empty_user_prompt(allow_model_requests: None, google_provider: GoogleProvider):
m = GoogleModel('gemini-1.5-flash', provider=google_provider)
agent = Agent(m, instructions='You are a helpful assistant.')
diff --git a/tests/models/test_groq.py b/tests/models/test_groq.py
index 4c5de38ee7..43b2ac2df5 100644
--- a/tests/models/test_groq.py
+++ b/tests/models/test_groq.py
@@ -16,8 +16,11 @@
from typing_extensions import TypedDict
from pydantic_ai import Agent, ModelHTTPError, ModelRetry, UnexpectedModelBehavior
+from pydantic_ai.builtin_tools import WebSearchTool
from pydantic_ai.messages import (
BinaryContent,
+ BuiltinToolCallPart,
+ BuiltinToolReturnPart,
FinalResultEvent,
ImageUrl,
ModelRequest,
@@ -527,7 +530,6 @@ async def test_no_delta(allow_model_requests: None):
assert result.is_complete
-@pytest.mark.vcr()
async def test_extra_headers(allow_model_requests: None, groq_api_key: str):
# This test doesn't do anything, it's just here to ensure that calls with `extra_headers` don't cause errors, including type.
m = GroqModel('llama-3.3-70b-versatile', provider=GroqProvider(api_key=groq_api_key))
@@ -535,7 +537,6 @@ async def test_extra_headers(allow_model_requests: None, groq_api_key: str):
await agent.run('hello')
-@pytest.mark.vcr()
async def test_image_url_input(allow_model_requests: None, groq_api_key: str):
m = GroqModel('meta-llama/llama-4-scout-17b-16e-instruct', provider=GroqProvider(api_key=groq_api_key))
agent = Agent(m)
@@ -551,7 +552,6 @@ async def test_image_url_input(allow_model_requests: None, groq_api_key: str):
)
-@pytest.mark.vcr()
async def test_image_as_binary_content_tool_response(
allow_model_requests: None, groq_api_key: str, image_content: BinaryContent
):
@@ -690,6 +690,208 @@ async def test_groq_model_instructions(allow_model_requests: None, groq_api_key:
)
+async def test_groq_model_web_search_tool(allow_model_requests: None, groq_api_key: str):
+ m = GroqModel('compound-beta', provider=GroqProvider(api_key=groq_api_key))
+ agent = Agent(m, builtin_tools=[WebSearchTool()])
+
+ result = await agent.run('What day is today?')
+ assert result.output == snapshot('The current day is Tuesday.')
+ assert result.all_messages() == snapshot(
+ [
+ ModelRequest(parts=[UserPromptPart(content='What day is today?', timestamp=IsDatetime())]),
+ ModelResponse(
+ parts=[
+ BuiltinToolCallPart(
+ tool_name='search',
+ args='{"query": "What is the current date?"}',
+ tool_call_id=IsStr(),
+ provider_name='groq',
+ ),
+ BuiltinToolReturnPart(
+ tool_name='search',
+ content="""\
+Title: Today's Date - Find Out Quickly What's The Date Today ️
+URL: https://calendarhours.com/todays-date/
+Content: The current date in RFC 2822 Format with shortened day of week, numerical date, three-letter month abbreviation, year, time, and time zone is: Tue, 13 May 2025 06:07:56 -0400; The current date in Unix Epoch Format with number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT) is:
+Score: 0.8299
+
+Title: Today's Date | Current date now - MaxTables
+URL: https://maxtables.com/tools/todays-date.html
+Content: The current date, including day of the week, month, day, and year. The exact time, down to seconds. Details on the time zone, its location, and its GMT difference. A tool to select the present date. A visual calendar chart. Why would I need to check Today's Date on this platform instead of my device?
+Score: 0.7223
+
+Title: Current Time and Date - Exact Time!
+URL: https://time-and-calendar.com/
+Content: The actual time is: Mon May 12 2025 22:14:39 GMT-0700 (Pacific Daylight Time) Your computer time is: 22:14:38 The time of your computer is synchronized with our web server. This mean that it is synchronizing in real time with our server clock.
+Score: 0.6799
+
+Title: Today's Date - CalendarDate.com
+URL: https://www.calendardate.com/todays.htm
+Content: Details about today's date with count of days, weeks, and months, Sun and Moon cycles, Zodiac signs and holidays. Monday May 12, 2025 . Home; Calendars. 2025 Calendar; ... Current Season Today: Spring with 40 days until the start of Summer. S. Hemisphere flip seasons - i.e. Winter is Summer.
+Score: 0.6416
+
+Title: What is the date today | Today's Date
+URL: https://www.datetoday.info/
+Content: Master time tracking with Today's Date. Stay updated with real-time information on current date, time, day of the week, days left in the week, current day and remaining days of the year. Explore time in globally accepted formats. Keep up with the current week and month, along with the remaining weeks and months for the year. Embrace efficient time tracking with Today's Date.
+Score: 0.6282
+
+Title: Explore Today's Date, Time Zones, Holidays & More
+URL: https://whatdateis.today/
+Content: Check what date and time it is today (May 8, 2025). View current time across different time zones, upcoming holidays, and use our date calculator. Your one-stop destination for all date and time information.
+Score: 0.6181
+
+Title: Today's Date and Time - Date and Time Tools
+URL: https://todaysdatetime.com/
+Content: Discover today's exact date and time, learn about time zones, date formats, and explore our comprehensive collection of date and time tools including calculators, converters, and calendars. ... Get the exact current date and time, along with powerful calculation tools for all your scheduling needs. 12h. Today. Day 76 of year (366) Yesterday
+Score: 0.5456
+
+Title: Current Time Now - What time is it? - RapidTables.com
+URL: https://www.rapidtables.com/tools/current-time.html
+Content: This page includes the following information: Current time: hours, minutes, seconds. Today's date: day of week, month, day, year. Time zone with location and GMT offset.
+Score: 0.4255
+
+Title: Current Time
+URL: https://www.timeanddate.com/
+Content: Welcome to the world's top site for time, time zones, and astronomy. Organize your life with free online info and tools you can rely on. No sign-up needed. Sign in. News. News Home; Astronomy News; ... Current Time. Monday May 12, 2025 Roanoke Rapids, North Carolina, USA. Set home location. 11:27: 03 pm. World Clock.
+Score: 0.3876
+
+Title: Current local time in the United States - World clock
+URL: https://dateandtime.info/country.php?code=US
+Content: Time and Date of DST Change Time Change; DST started: Sunday, March 9, 2025 at 2:00 AM: The clocks were put forward an hour to 3:00 AM. DST ends: Sunday, November 2, 2025 at 2:00 AM: The clocks will be put back an hour to 1:00 AM. DST starts: Sunday, March 8, 2026 at 2:00 AM: The clocks will be put forward an hour to 3:00 AM.
+Score: 0.3042
+
+Title: Time.is - exact time, any time zone
+URL: https://time.is/
+Content: 7 million locations, 58 languages, synchronized with atomic clock time. Time.is. Get Time.is Ad-free! Exact time now: 05:08:45. Tuesday, 13 May, 2025, week 20. Sun: ↑ 05:09 ↓ 20:45 (15h 36m) - More info - Make London time default - Remove from favorite locations
+Score: 0.2796
+
+Title: Time in United States now
+URL: https://time.is/United_States
+Content: Exact time now, time zone, time difference, sunrise/sunset time and key facts for United States. Time.is. Get Time.is Ad-free! Time in United States now . 11:17:42 PM. Monday, May 12, 2025. United States (incl. dependent territories) has 11 time zones. The time zone for the capital Washington, D.C. is used here.
+Score: 0.2726
+
+Title: Current Local Time in the United States - timeanddate.com
+URL: https://www.timeanddate.com/worldclock/usa
+Content: United States time now. USA time zones and time zone map with current time in each state.
+Score: 0.2519
+
+Title: Current local time in United States - World Time Clock & Map
+URL: https://24timezones.com/United-States/time
+Content: Check the current time in United States and time zone information, the UTC offset and daylight saving time dates in 2025.
+Score: 0.2221
+
+Title: The World Clock — Worldwide - timeanddate.com
+URL: https://www.timeanddate.com/worldclock/
+Content: World time and date for cities in all time zones. International time right now. Takes into account all DST clock changes.
+Score: 0.2134
+
+""",
+ tool_call_id=IsStr(),
+ timestamp=IsDatetime(),
+ provider_name='groq',
+ ),
+ ThinkingPart(
+ content="""\
+
+To determine the current day, I need to access real-time information. I will use the search tool to find out the current date.
+
+
+search(What is the current date?)
+
+
+The current date is Tuesday, May 13, 2025.
+
+
+
+The current day is Tuesday.\
+"""
+ ),
+ TextPart(content='The current day is Tuesday.'),
+ ],
+ usage=Usage(requests=1, request_tokens=4287, response_tokens=117, total_tokens=4404),
+ model_name='compound-beta',
+ timestamp=IsDatetime(),
+ vendor_id='stub',
+ ),
+ ]
+ )
+
+
async def test_groq_model_thinking_part(allow_model_requests: None, groq_api_key: str):
m = GroqModel('deepseek-r1-distill-llama-70b', provider=GroqProvider(api_key=groq_api_key))
settings = GroqModelSettings(groq_reasoning_format='raw')
@@ -703,64 +905,7 @@ async def test_groq_model_thinking_part(allow_model_requests: None, groq_api_key
instructions='You are a chef.',
),
ModelResponse(
- parts=[
- ThinkingPart(content=IsStr()),
- TextPart(
- content="""\
-
-
-To make Uruguayan alfajores, follow these organized steps for a delightful baking experience:
-
-### Ingredients:
-- 2 cups all-purpose flour
-- 1 cup cornstarch
-- 1 tsp baking powder
-- 1/2 tsp salt
-- 1 cup unsalted butter, softened
-- 1 cup powdered sugar
-- 1 egg
-- 1 tsp vanilla extract
-- Dulce de leche (store-bought or homemade)
-- Powdered sugar for coating
-
-### Instructions:
-
-1. **Preheat Oven:**
- - Preheat your oven to 300°F (150°C). Line a baking sheet with parchment paper.
-
-2. **Prepare Dough:**
- - In a bowl, whisk together flour, cornstarch, baking powder, and salt.
- - In another bowl, cream butter and powdered sugar until smooth. Add egg and vanilla, mixing well.
- - Gradually incorporate the dry ingredients into the wet mixture until a dough forms. Wrap and let rest for 30 minutes.
-
-3. **Roll and Cut:**
- - Roll dough to 1/4 inch thickness. Cut into 2-inch circles using a cutter or glass.
-
-4. **Bake:**
- - Place cookies on the prepared baking sheet, bake for 15-20 minutes until edges are lightly golden. Cool on the sheet for 5 minutes, then transfer to a wire rack to cool completely.
-
-5. **Assemble Alfajores:**
- - Spread a layer of dulce de leche on one cookie half. Sandwich with another cookie. Handle gently to avoid breaking.
-
-6. **Coat with Powdered Sugar:**
- - Roll each alfajor in powdered sugar, pressing gently to adhere.
-
-7. **Optional Chocolate Coating:**
- - For a chocolate version, melt chocolate and dip alfajores, then chill to set.
-
-8. **Storage:**
- - Store in an airtight container at room temperature for up to a week. Freeze for longer storage.
-
-### Tips:
-- Ensure butter is softened for smooth creaming.
-- Check cookies after 15 minutes to avoid over-browning.
-- Allow cookies to cool completely before handling.
-- Homemade dulce de leche can be made by heating condensed milk until thickened.
-
-Enjoy your traditional Uruguayan alfajores with a cup of coffee or tea!\
-"""
- ),
- ],
+ parts=[IsInstance(ThinkingPart), IsInstance(TextPart)],
usage=Usage(requests=1, request_tokens=21, response_tokens=1414, total_tokens=1435),
model_name='deepseek-r1-distill-llama-70b',
timestamp=IsDatetime(),
@@ -785,7 +930,7 @@ async def test_groq_model_thinking_part(allow_model_requests: None, groq_api_key
usage=Usage(requests=1, request_tokens=21, response_tokens=1414, total_tokens=1435),
model_name='deepseek-r1-distill-llama-70b',
timestamp=IsDatetime(),
- vendor_id=IsStr(),
+ vendor_id='chatcmpl-9748c1af-1065-410a-969a-d7fb48039fbb',
),
ModelRequest(
parts=[
@@ -797,112 +942,11 @@ async def test_groq_model_thinking_part(allow_model_requests: None, groq_api_key
instructions='You are a chef.',
),
ModelResponse(
- parts=[
- ThinkingPart(
- content="""\
-Alright, so I want to make Argentinian alfajores after successfully making the Uruguayan ones. I know that both countries have their own versions of alfajores, but I'm not entirely sure how they differ. Maybe the ingredients or the preparation steps are slightly different? I should probably start by researching what makes Argentinian alfajores unique compared to the Uruguayan ones.
-
-First, I remember that in the Uruguayan recipe, the cookies were more delicate, and the filling was a generous amount of dulce de leche. The process involved making the dough from scratch, baking the cookies, and then assembling them with the filling and sometimes coating them in powdered sugar or chocolate.
-
-For Argentinian alfajores, I think the cookies might have a different texture—perhaps they're crunchier or have a different flavor profile. Maybe the type of flour used is different, or there's an addition like cocoa powder for a chocolate version. Also, the filling might have variations, like adding caramel or nuts to the dulce de leche.
-
-I should look up some authentic Argentinian recipes to see the differences. Maybe the method of making the dough is slightly different, or the baking time and temperature vary. I also wonder if Argentinian alfajores are typically coated in something else besides powdered sugar, like cinnamon or coconut flakes.
-
-Another thing to consider is the size and shape of the cookies. Uruguayan alfajores might be smaller and rounder, while Argentinian ones could be larger or have a different shape. I should also check if there are any additional steps, like toasting the cookies or adding a layer of meringue.
-
-I need to make sure I have all the necessary ingredients. If the Argentinian version requires something different, like a specific type of flour or a particular flavoring, I'll need to adjust my shopping list. Also, if the filling is different, I might need to prepare it in a different way or add extra ingredients.
-
-I should also think about the assembly process. Maybe Argentinian alfajores are sandwiched with more filling or have a different way of sealing the cookies together. Perhaps they're rolled in coconut after being filled, or there's a step involving dipping them in chocolate.
-
-It would be helpful to watch a video or read a detailed recipe from an Argentinian source to get a better understanding. That way, I can follow the traditional method and ensure that my alfajores turn out authentic. I should also consider any tips or tricks that Argentinian bakers use to make their alfajores special.
-
-Finally, I need to plan the timing. Making alfajores can be a bit time-consuming, especially if you're making the dulce de leche from scratch. I should allocate enough time for preparing the dough, baking the cookies, and assembling the alfajores.
-
-Overall, the key steps I think I'll need to follow are:
-
-1. Research authentic Argentinian alfajores recipes to identify unique ingredients and steps.
-2. Adjust the ingredient list based on the differences from the Uruguayan version.
-3. Prepare the dough according to the Argentinian method, which might involve different mixing techniques or additional ingredients.
-4. Bake the cookies, possibly at a different temperature or for a different duration.
-5. Prepare the filling, which might include variations like caramel or nuts.
-6. Assemble the alfajores, possibly adding extra coatings or layers.
-7. Allow the alfajores to set before serving, to ensure the flavors meld together.
-
-By carefully following these steps and paying attention to the unique aspects of Argentinian alfajores, I should be able to create a delicious and authentic batch that captures the essence of this traditional South American treat.
-"""
- ),
- TextPart(
- content="""\
-To create authentic Argentinian alfajores, follow these organized steps, which highlight the unique characteristics and differences from the Uruguayan version:
-
-### Ingredients:
-- **For the Cookies:**
- - 2 cups all-purpose flour
- - 1/2 cup cornstarch
- - 1/4 cup unsweetened cocoa powder (optional for chocolate version)
- - 1 teaspoon baking powder
- - 1/2 teaspoon salt
- - 1 cup unsalted butter, softened
- - 1 cup powdered sugar
- - 1 egg
- - 1 teaspoon vanilla extract
-
-- **For the Filling:**
- - Dulce de leche (store-bought or homemade)
- - Optional: caramel sauce, chopped nuts, or cinnamon for added flavor
-
-- **For Coating:**
- - Powdered sugar
- - Optional: cinnamon, shredded coconut, or melted chocolate
-
-### Instructions:
-
-1. **Prepare the Dough:**
- - In a large bowl, whisk together the flour, cornstarch, cocoa powder (if using), baking powder, and salt.
- - In another bowl, cream the softened butter and powdered sugar until smooth. Add the egg and vanilla extract, mixing well.
- - Gradually incorporate the dry ingredients into the wet mixture until a dough forms. Wrap the dough in plastic wrap and let it rest for 30 minutes.
-
-2. **Roll and Cut the Cookies:**
- - Roll the dough to about 1/4 inch thickness on a lightly floured surface.
- - Use a round cookie cutter or the rim of a glass to cut out circles of dough. Argentinian alfajores are often slightly larger than their Uruguayan counterparts.
-
-3. **Bake the Cookies:**
- - Preheat the oven to 300°F (150°C). Line a baking sheet with parchment paper.
- - Place the cookie rounds on the prepared baking sheet, leaving about 1 inch of space between each cookie.
- - Bake for 15-20 minutes, or until the edges are lightly golden. Allow the cookies to cool on the baking sheet for 5 minutes before transferring them to a wire rack to cool completely.
-
-4. **Prepare the Filling:**
- - Use store-bought dulce de leche or make your own by heating sweetened condensed milk until thickened.
- - Optional: Stir in caramel sauce or chopped nuts into the dulce de leche for added flavor.
-
-5. **Assemble the Alfajores:**
- - Once the cookies are completely cool, spread a generous amount of dulce de leche on the flat side of one cookie.
- - Sandwich with another cookie, pressing gently to adhere. For an extra touch, roll the edges in chopped nuts or shredded coconut.
-
-6. **Coat with Powdered Sugar or Chocolate:**
- - Roll each alfajor in powdered sugar, pressing gently to ensure it adheres.
- - Optional: Melt chocolate and dip the alfajores, then sprinkle with cinnamon or coconut before the chocolate sets.
-
-7. **Allow to Set:**
- - Let the alfajores sit for about 30 minutes to allow the flavors to meld together.
-
-8. **Serve and Enjoy:**
- - Serve with a cup of coffee or tea. Store any leftovers in an airtight container at room temperature for up to a week.
-
-### Tips:
-- **Dough Handling:** Ensure the butter is softened for a smooth dough, and don't overwork the dough to maintain the cookies' tender texture.
-- **Baking:** Keep an eye on the cookies after 15 minutes to prevent over-browning.
-- **Filling Variations:** Experiment with different fillings like caramel or nuts to create unique flavor profiles.
-- **Coating Options:** Try different coatings such as cinnamon or coconut for a varied texture and taste.
-
-By following these steps, you'll create authentic Argentinian alfajores that capture the rich flavors and traditions of this beloved South American treat.\
-"""
- ),
- ],
+ parts=[IsInstance(ThinkingPart), IsInstance(TextPart)],
usage=Usage(requests=1, request_tokens=524, response_tokens=1590, total_tokens=2114),
model_name='deepseek-r1-distill-llama-70b',
timestamp=IsDatetime(),
- vendor_id=IsStr(),
+ vendor_id='chatcmpl-994aa228-883a-498c-8b20-9655d770b697',
),
]
)
diff --git a/tests/models/test_instrumented.py b/tests/models/test_instrumented.py
index a156bb7fa8..4781a9d788 100644
--- a/tests/models/test_instrumented.py
+++ b/tests/models/test_instrumented.py
@@ -158,7 +158,7 @@ async def test_instrumented_model(capfire: CaptureLogfire):
'gen_ai.request.model': 'my_model',
'server.address': 'example.com',
'server.port': 8000,
- 'model_request_parameters': '{"function_tools": [], "output_mode": "text", "output_object": null, "output_tools": [], "allow_text_output": true}',
+ 'model_request_parameters': '{"function_tools": [], "builtin_tools": [], "output_mode": "text", "output_object": null, "output_tools": [], "allow_text_output": true}',
'logfire.json_schema': '{"type": "object", "properties": {"model_request_parameters": {"type": "object"}}}',
'gen_ai.request.temperature': 1,
'logfire.msg': 'chat my_model',
@@ -376,7 +376,7 @@ async def test_instrumented_model_stream(capfire: CaptureLogfire):
'gen_ai.request.model': 'my_model',
'server.address': 'example.com',
'server.port': 8000,
- 'model_request_parameters': '{"function_tools": [], "output_mode": "text", "output_object": null, "output_tools": [], "allow_text_output": true}',
+ 'model_request_parameters': '{"function_tools": [], "builtin_tools": [], "output_mode": "text", "output_object": null, "output_tools": [], "allow_text_output": true}',
'logfire.json_schema': '{"type": "object", "properties": {"model_request_parameters": {"type": "object"}}}',
'gen_ai.request.temperature': 1,
'logfire.msg': 'chat my_model',
@@ -463,7 +463,7 @@ async def test_instrumented_model_stream_break(capfire: CaptureLogfire):
'gen_ai.request.model': 'my_model',
'server.address': 'example.com',
'server.port': 8000,
- 'model_request_parameters': '{"function_tools": [], "output_mode": "text", "output_object": null, "output_tools": [], "allow_text_output": true}',
+ 'model_request_parameters': '{"function_tools": [], "builtin_tools": [], "output_mode": "text", "output_object": null, "output_tools": [], "allow_text_output": true}',
'logfire.json_schema': '{"type": "object", "properties": {"model_request_parameters": {"type": "object"}}}',
'gen_ai.request.temperature': 1,
'logfire.msg': 'chat my_model',
@@ -565,7 +565,7 @@ async def test_instrumented_model_attributes_mode(capfire: CaptureLogfire):
'gen_ai.request.model': 'my_model',
'server.address': 'example.com',
'server.port': 8000,
- 'model_request_parameters': '{"function_tools": [], "output_mode": "text", "output_object": null, "output_tools": [], "allow_text_output": true}',
+ 'model_request_parameters': '{"function_tools": [], "builtin_tools": [], "output_mode": "text", "output_object": null, "output_tools": [], "allow_text_output": true}',
'gen_ai.request.temperature': 1,
'logfire.msg': 'chat my_model',
'logfire.span_type': 'span',
diff --git a/tests/models/test_model_request_parameters.py b/tests/models/test_model_request_parameters.py
index 98a6d1ccc7..2915796ab1 100644
--- a/tests/models/test_model_request_parameters.py
+++ b/tests/models/test_model_request_parameters.py
@@ -9,6 +9,7 @@ def test_model_request_parameters_are_serializable():
)
assert TypeAdapter(ModelRequestParameters).dump_python(params) == {
'function_tools': [],
+ 'builtin_tools': [],
'output_mode': 'text',
'allow_text_output': True,
'output_tools': [],
diff --git a/tests/models/test_openai.py b/tests/models/test_openai.py
index f8605021d3..02343d6810 100644
--- a/tests/models/test_openai.py
+++ b/tests/models/test_openai.py
@@ -16,6 +16,7 @@
from typing_extensions import NotRequired, TypedDict
from pydantic_ai import Agent, ModelHTTPError, ModelRetry, UnexpectedModelBehavior
+from pydantic_ai.builtin_tools import WebSearchTool
from pydantic_ai.messages import (
AudioUrl,
BinaryContent,
@@ -2145,10 +2146,7 @@ async def test_openai_instructions_with_logprobs(allow_model_requests: None):
'gpt-4o',
provider=OpenAIProvider(openai_client=mock_client),
)
- agent = Agent(
- m,
- instructions='You are a helpful assistant.',
- )
+ agent = Agent(m, instructions='You are a helpful assistant.')
result = await agent.run(
'What is the capital of Minas Gerais?',
model_settings=OpenAIModelSettings(openai_logprobs=True),
@@ -2166,6 +2164,56 @@ async def test_openai_instructions_with_logprobs(allow_model_requests: None):
]
+@pytest.mark.vcr()
+async def test_openai_web_search_tool_model_not_supported(allow_model_requests: None, openai_api_key: str):
+ m = OpenAIModel('gpt-4o', provider=OpenAIProvider(api_key=openai_api_key))
+ agent = Agent(
+ m, instructions='You are a helpful assistant.', builtin_tools=[WebSearchTool(search_context_size='low')]
+ )
+
+ with pytest.raises(ModelHTTPError, match='.*Web search options not supported with this model.*'):
+ await agent.run('What day is today?')
+
+
+@pytest.mark.vcr()
+async def test_openai_web_search_tool(allow_model_requests: None, openai_api_key: str):
+ m = OpenAIModel('gpt-4o-search-preview', provider=OpenAIProvider(api_key=openai_api_key))
+ agent = Agent(
+ m, instructions='You are a helpful assistant.', builtin_tools=[WebSearchTool(search_context_size='low')]
+ )
+
+ result = await agent.run('What day is today?')
+ assert result.output == snapshot('May 14, 2025, 8:51:29 AM ')
+
+
+@pytest.mark.vcr()
+async def test_openai_web_search_tool_with_user_location(allow_model_requests: None, openai_api_key: str):
+ m = OpenAIModel('gpt-4o-search-preview', provider=OpenAIProvider(api_key=openai_api_key))
+ agent = Agent(
+ m,
+ instructions='You are a helpful assistant.',
+ builtin_tools=[WebSearchTool(user_location={'city': 'Utrecht', 'country': 'NL'})],
+ )
+
+ result = await agent.run('What is the current temperature?')
+ assert result.output == snapshot("""\
+Het is momenteel zonnig in Utrecht met een temperatuur van 22°C.
+
+## Weer voor Utrecht, Nederland:
+Huidige omstandigheden: Zonnig, 72°F (22°C)
+
+Dagvoorspelling:
+* woensdag, mei 14: minimum: 48°F (9°C), maximum: 71°F (22°C), beschrijving: Afnemende bewolking
+* donderdag, mei 15: minimum: 43°F (6°C), maximum: 67°F (20°C), beschrijving: Na een bewolkt begin keert de zon terug
+* vrijdag, mei 16: minimum: 45°F (7°C), maximum: 64°F (18°C), beschrijving: Overwegend zonnig
+* zaterdag, mei 17: minimum: 47°F (9°C), maximum: 68°F (20°C), beschrijving: Overwegend zonnig
+* zondag, mei 18: minimum: 47°F (8°C), maximum: 68°F (20°C), beschrijving: Deels zonnig
+* maandag, mei 19: minimum: 49°F (9°C), maximum: 70°F (21°C), beschrijving: Deels zonnig
+* dinsdag, mei 20: minimum: 49°F (10°C), maximum: 72°F (22°C), beschrijving: Zonnig tot gedeeltelijk bewolkt
+ \
+""")
+
+
@pytest.mark.vcr()
async def test_reasoning_model_with_temperature(allow_model_requests: None, openai_api_key: str):
m = OpenAIModel('o3-mini', provider=OpenAIProvider(api_key=openai_api_key))
diff --git a/tests/models/test_openai_responses.py b/tests/models/test_openai_responses.py
index 30e98d70fe..0b6d608434 100644
--- a/tests/models/test_openai_responses.py
+++ b/tests/models/test_openai_responses.py
@@ -1,5 +1,6 @@
import json
from dataclasses import replace
+from typing import Any
import pytest
from inline_snapshot import snapshot
@@ -7,15 +8,20 @@
from typing_extensions import TypedDict
from pydantic_ai.agent import Agent
+from pydantic_ai.builtin_tools import CodeExecutionTool, WebSearchTool
from pydantic_ai.exceptions import ModelHTTPError, ModelRetry
from pydantic_ai.messages import (
BinaryContent,
DocumentUrl,
+ FinalResultEvent,
ImageUrl,
ModelRequest,
ModelResponse,
+ PartDeltaEvent,
+ PartStartEvent,
RetryPromptPart,
TextPart,
+ TextPartDelta,
ToolCallPart,
ToolReturnPart,
UserPromptPart,
@@ -26,6 +32,7 @@
from pydantic_ai.usage import Usage
from ..conftest import IsDatetime, IsStr, TestEnv, try_import
+from ..parts_from_messages import part_types_from_messages
with try_import() as imports_successful:
from pydantic_ai.models.openai import OpenAIModelSettings, OpenAIResponsesModel, OpenAIResponsesModelSettings
@@ -471,6 +478,161 @@ async def test_openai_responses_model_instructions(allow_model_requests: None, o
)
+async def test_openai_responses_model_web_search_tool(allow_model_requests: None, openai_api_key: str):
+ m = OpenAIResponsesModel('gpt-4o', provider=OpenAIProvider(api_key=openai_api_key))
+ agent = Agent(m, instructions='You are a helpful assistant.', builtin_tools=[WebSearchTool()])
+
+ result = await agent.run('What day is it today?')
+ assert result.output == snapshot("""\
+Today is Wednesday, May 14, 2025.
+
+## Weather for San Francisco, CA:
+Current Conditions: Mostly clear, 50°F (10°C)
+
+Daily Forecast:
+* Wednesday, May 14: Low: 51°F (10°C), High: 65°F (18°C), Description: Areas of low clouds early; otherwise, mostly sunny
+* Thursday, May 15: Low: 53°F (12°C), High: 66°F (19°C), Description: Areas of low clouds, then sun
+* Friday, May 16: Low: 53°F (12°C), High: 64°F (18°C), Description: Partly sunny
+* Saturday, May 17: Low: 52°F (11°C), High: 63°F (17°C), Description: Low clouds breaking for some sun; breezy in the afternoon
+* Sunday, May 18: Low: 51°F (10°C), High: 68°F (20°C), Description: Clouds yielding to sun
+* Monday, May 19: Low: 53°F (12°C), High: 68°F (20°C), Description: Sunny
+* Tuesday, May 20: Low: 52°F (11°C), High: 70°F (21°C), Description: Mostly sunny
+ \
+""")
+
+
+async def test_openai_responses_model_web_search_tool_with_user_location(
+ allow_model_requests: None, openai_api_key: str
+):
+ m = OpenAIResponsesModel('gpt-4o', provider=OpenAIProvider(api_key=openai_api_key))
+ agent = Agent(
+ m,
+ instructions='You are a helpful assistant.',
+ builtin_tools=[WebSearchTool(user_location={'city': 'Utrecht', 'region': 'NL'})],
+ )
+
+ result = await agent.run('What is the current temperature?')
+ assert result.output == snapshot("""\
+As of 12:58 PM on Wednesday, May 14, 2025, in Utrecht, Netherlands, the weather is sunny with a temperature of 22°C (71°F).
+
+## Weather for Utrecht, Netherlands:
+Current Conditions: Sunny, 71°F (22°C)
+
+Daily Forecast:
+* Wednesday, May 14: Low: 48°F (9°C), High: 71°F (22°C), Description: Clouds yielding to sun
+* Thursday, May 15: Low: 43°F (6°C), High: 67°F (20°C), Description: After a cloudy start, sun returns
+* Friday, May 16: Low: 45°F (7°C), High: 64°F (18°C), Description: Mostly sunny
+* Saturday, May 17: Low: 47°F (9°C), High: 68°F (20°C), Description: Mostly sunny
+* Sunday, May 18: Low: 47°F (8°C), High: 68°F (20°C), Description: Some sun
+* Monday, May 19: Low: 49°F (9°C), High: 70°F (21°C), Description: Delightful with partial sunshine
+* Tuesday, May 20: Low: 49°F (10°C), High: 72°F (22°C), Description: Warm with sunshine and a few clouds
+ \
+""")
+
+
+async def test_openai_responses_model_web_search_tool_with_invalid_region(
+ allow_model_requests: None, openai_api_key: str
+):
+ m = OpenAIResponsesModel('gpt-4o', provider=OpenAIProvider(api_key=openai_api_key))
+ agent = Agent(
+ m,
+ instructions='You are a helpful assistant.',
+ builtin_tools=[WebSearchTool(user_location={'city': 'Salvador', 'region': 'BRLO'})],
+ )
+
+ result = await agent.run('What is the current temperature?')
+ assert result.output == snapshot("""\
+As of 12:15 PM on Thursday, August 7, 2025, in Salvador, Brazil, the current weather conditions are:
+
+- **Temperature:** 84°F (29°C)
+- **Feels Like:** 88°F (31°C)
+- **Condition:** Sunny
+- **Wind:** East at 16 mph (25 km/h)
+- **Humidity:** 65%
+- **Dew Point:** 71°F (22°C)
+- **Pressure:** 29.88 in (1012 mb)
+- **Visibility:** 8 miles (13 km)
+
+([aerisweather.com](https://www.aerisweather.com/weather/local/br/salvador?utm_source=openai))
+
+The forecast for today indicates partly cloudy skies with temperatures remaining around 84°F (29°C) this afternoon. \
+""")
+
+
+async def test_openai_responses_model_web_search_tool_stream(allow_model_requests: None, openai_api_key: str):
+ m = OpenAIResponsesModel('gpt-4o', provider=OpenAIProvider(api_key=openai_api_key))
+ agent = Agent(m, instructions='You are a helpful assistant.', builtin_tools=[WebSearchTool()])
+
+ event_parts: list[Any] = []
+ async with agent.iter(user_prompt='Give me the top 3 news in the world today.') as agent_run:
+ async for node in agent_run:
+ if Agent.is_model_request_node(node) or Agent.is_call_tools_node(node):
+ async with node.stream(agent_run.ctx) as request_stream:
+ async for event in request_stream:
+ event_parts.append(event)
+
+ assert event_parts.pop(0) == snapshot(PartStartEvent(index=0, part=TextPart(content='Here')))
+ assert event_parts.pop(0) == snapshot(FinalResultEvent(tool_name=None, tool_call_id=None))
+ assert ''.join(event.delta.content_delta for event in event_parts) == snapshot("""\
+ are the top three news stories from around the world as of August 7, 2025:
+
+1. **U.S. Imposes New Tariffs Amid Market Optimism**
+
+ The United States has implemented new tariffs ranging from 10% to 50% on imports from multiple countries. Despite this, global markets have shown resilience, buoyed by expectations of interest rate cuts and positive earnings reports. Notably, exemptions were granted to Taiwan and South Korea, shielding major chipmakers like TSMC, Samsung, and SK Hynix from the highest levies. ([reuters.com](https://www.reuters.com/business/finance/global-markets-view-usa-2025-08-07/?utm_source=openai))
+
+2. **Ghanaian Ministers Killed in Helicopter Crash**
+
+ Ghana's Defence Minister Edward Omane Boamah and Environment Minister Ibrahim Murtala Muhammed, along with six others, have died in a military helicopter crash in the Ashanti region. The incident has been described as a "national tragedy" by Chief of Staff Julius Debrah. ([anewz.tv](https://anewz.tv/world/world-news/11722/anewz-morning-brief-7th-august-2025/news?utm_source=openai))
+
+3. **Massive Wildfire in France Claims Lives**
+
+ A significant wildfire in southern France's Aude region has resulted in at least one death and nine injuries. The fire, which began on August 6, has destroyed or damaged 25 homes, with over 1,800 firefighters working to control the blaze. ([anewz.tv](https://anewz.tv/world/world-news/11722/anewz-morning-brief-7th-august-2025/news?utm_source=openai))
+
+Please note that news developments are continually evolving. For the most current information, refer to reputable news sources. \
+""")
+
+
+async def test_openai_responses_code_execution_tool(allow_model_requests: None, openai_api_key: str):
+ m = OpenAIResponsesModel('gpt-4o', provider=OpenAIProvider(api_key=openai_api_key))
+ agent = Agent(m, instructions='You are a helpful assistant.', builtin_tools=[CodeExecutionTool()])
+
+ result = await agent.run('What is 3 * 12390?')
+ # NOTE: OpenAI doesn't return neither the `BuiltinToolCallPart` nor the `BuiltinToolReturnPart`.
+ assert part_types_from_messages(result.all_messages()) == snapshot([[UserPromptPart], [TextPart]])
+
+
+async def test_openai_responses_code_execution_tool_stream(allow_model_requests: None, openai_api_key: str):
+ m = OpenAIResponsesModel('gpt-4o', provider=OpenAIProvider(api_key=openai_api_key))
+ agent = Agent(m, instructions='You are a helpful assistant.', builtin_tools=[CodeExecutionTool()])
+
+ event_parts: list[Any] = []
+ async with agent.iter(user_prompt='What is 3 * 12390?') as agent_run:
+ async for node in agent_run:
+ if Agent.is_model_request_node(node) or Agent.is_call_tools_node(node):
+ async with node.stream(agent_run.ctx) as request_stream:
+ async for event in request_stream:
+ event_parts.append(event)
+
+ assert event_parts == snapshot(
+ [
+ PartStartEvent(index=0, part=TextPart(content='\\(')),
+ FinalResultEvent(tool_name=None, tool_call_id=None),
+ PartDeltaEvent(index=0, delta=TextPartDelta(content_delta='3')),
+ PartDeltaEvent(index=0, delta=TextPartDelta(content_delta=' \\')),
+ PartDeltaEvent(index=0, delta=TextPartDelta(content_delta='times')),
+ PartDeltaEvent(index=0, delta=TextPartDelta(content_delta=' ')),
+ PartDeltaEvent(index=0, delta=TextPartDelta(content_delta='123')),
+ PartDeltaEvent(index=0, delta=TextPartDelta(content_delta='90')),
+ PartDeltaEvent(index=0, delta=TextPartDelta(content_delta=' =')),
+ PartDeltaEvent(index=0, delta=TextPartDelta(content_delta=' ')),
+ PartDeltaEvent(index=0, delta=TextPartDelta(content_delta='371')),
+ PartDeltaEvent(index=0, delta=TextPartDelta(content_delta='70')),
+ PartDeltaEvent(index=0, delta=TextPartDelta(content_delta='\\')),
+ PartDeltaEvent(index=0, delta=TextPartDelta(content_delta=').')),
+ ]
+ )
+
+
def test_model_profile_strict_not_supported():
my_tool = ToolDefinition(
name='my_tool',
diff --git a/tests/parts_from_messages.py b/tests/parts_from_messages.py
new file mode 100644
index 0000000000..a51fd457c8
--- /dev/null
+++ b/tests/parts_from_messages.py
@@ -0,0 +1,35 @@
+from typing import Any
+
+from pydantic_ai.messages import ModelMessage, ModelRequestPart, ModelResponsePart
+
+
+def part_types_from_messages(messages: list[ModelMessage]) -> list[Any]:
+ """Utility function used when you are not interested in the content of the messages, but only that the part is there.
+
+ As an example, the following messages:
+
+ ```python
+ [
+ ModelRequest(parts=[UserPromptPart(content='')], kind='request'),
+ ModelResponse(parts=[TextPart(content='')], kind='response'),
+ ]
+ ```
+
+ Will return:
+
+ ```python
+ [
+ [UserPromptPart],
+ [TextPart],
+ ]
+ ```
+
+ So each list represents either `ModelRequest` or `ModelResponse` and the parts that are present in the message.
+ """
+ parts: list[Any] = []
+ for message in messages:
+ message_parts: list[type[ModelResponsePart | ModelRequestPart]] = []
+ for part in message.parts:
+ message_parts.append(type(part))
+ parts.append(message_parts)
+ return parts
diff --git a/tests/providers/test_groq.py b/tests/providers/test_groq.py
index 0f059f96de..9da9f6121c 100644
--- a/tests/providers/test_groq.py
+++ b/tests/providers/test_groq.py
@@ -10,6 +10,7 @@
from pydantic_ai.profiles._json_schema import InlineDefsJsonSchemaTransformer
from pydantic_ai.profiles.deepseek import deepseek_model_profile
from pydantic_ai.profiles.google import GoogleJsonSchemaTransformer, google_model_profile
+from pydantic_ai.profiles.groq import GroqModelProfile, groq_model_profile
from pydantic_ai.profiles.meta import meta_model_profile
from pydantic_ai.profiles.mistral import mistral_model_profile
from pydantic_ai.profiles.moonshotai import moonshotai_model_profile
@@ -76,6 +77,7 @@ def test_groq_provider_model_profile(mocker: MockerFixture):
mistral_model_profile_mock = mocker.patch(f'{ns}.mistral_model_profile', wraps=mistral_model_profile)
qwen_model_profile_mock = mocker.patch(f'{ns}.qwen_model_profile', wraps=qwen_model_profile)
moonshotai_model_profile_mock = mocker.patch(f'{ns}.moonshotai_model_profile', wraps=moonshotai_model_profile)
+ groq_model_profile_mock = mocker.patch(f'{ns}.groq_model_profile', wraps=groq_model_profile)
meta_profile = provider.model_profile('meta-llama/Llama-Guard-4-12B')
meta_model_profile_mock.assert_called_with('llama-guard-4-12b')
@@ -105,7 +107,12 @@ def test_groq_provider_model_profile(mocker: MockerFixture):
assert qwen_profile is not None
assert qwen_profile.json_schema_transformer == InlineDefsJsonSchemaTransformer
- # MoonshotAI model should remove the "moonshotai/" prefix before passing to profile
+ qwen_profile = provider.model_profile('compound-beta')
+ groq_model_profile_mock.assert_called_with('compound-beta')
+ assert qwen_profile is not None
+ assert isinstance(qwen_profile, GroqModelProfile)
+ assert qwen_profile.groq_always_has_web_search_builtin_tool is True
+
moonshotai_profile = provider.model_profile('moonshotai/kimi-k2-instruct')
moonshotai_model_profile_mock.assert_called_with('kimi-k2-instruct')
assert moonshotai_profile is None
diff --git a/tests/test_builtin_tools.py b/tests/test_builtin_tools.py
new file mode 100644
index 0000000000..5c67581625
--- /dev/null
+++ b/tests/test_builtin_tools.py
@@ -0,0 +1,42 @@
+from __future__ import annotations
+
+import pytest
+
+from pydantic_ai.agent import Agent
+from pydantic_ai.builtin_tools import CodeExecutionTool, WebSearchTool
+from pydantic_ai.exceptions import UserError
+from pydantic_ai.models import Model
+
+
+@pytest.mark.parametrize('model', ('bedrock', 'mistral', 'cohere', 'huggingface', 'test'), indirect=True)
+async def test_builtin_tools_not_supported_web_search(model: Model, allow_model_requests: None):
+ agent = Agent(model=model, builtin_tools=[WebSearchTool()])
+
+ with pytest.raises(UserError):
+ await agent.run('What day is tomorrow?')
+
+
+@pytest.mark.parametrize('model', ('bedrock', 'mistral', 'huggingface'), indirect=True)
+async def test_builtin_tools_not_supported_web_search_stream(model: Model, allow_model_requests: None):
+ agent = Agent(model=model, builtin_tools=[WebSearchTool()])
+
+ with pytest.raises(UserError):
+ async with agent.run_stream('What day is tomorrow?'):
+ ... # pragma: no cover
+
+
+@pytest.mark.parametrize('model', ('groq', 'openai'), indirect=True)
+async def test_builtin_tools_not_supported_code_execution(model: Model, allow_model_requests: None):
+ agent = Agent(model=model, builtin_tools=[CodeExecutionTool()])
+
+ with pytest.raises(UserError):
+ await agent.run('What day is tomorrow?')
+
+
+@pytest.mark.parametrize('model', ('groq', 'openai'), indirect=True)
+async def test_builtin_tools_not_supported_code_execution_stream(model: Model, allow_model_requests: None):
+ agent = Agent(model=model, builtin_tools=[CodeExecutionTool()])
+
+ with pytest.raises(UserError):
+ async with agent.run_stream('What day is tomorrow?'):
+ ... # pragma: no cover
diff --git a/tests/test_examples.py b/tests/test_examples.py
index 860464f432..fc2c08f0b2 100644
--- a/tests/test_examples.py
+++ b/tests/test_examples.py
@@ -280,6 +280,9 @@ async def call_tool(
text_responses: dict[str, str | ToolCallPart] = {
+ 'Calculate the factorial of 15 and show your work': 'The factorial of 15 is **1,307,674,368,000**.',
+ 'Use the web to get the current time.': "In San Francisco, it's 8:21:41 pm PDT on Wednesday, August 6, 2025.",
+ 'Give me a sentence with the biggest news in AI this week.': 'Scientists have developed a universal AI detector that can identify deepfake videos.',
'How many days between 2000-01-01 and 2025-03-18?': 'There are 9,208 days between January 1, 2000, and March 18, 2025.',
'What is the weather like in West London and in Wiltshire?': (
'The weather in West London is raining, while in Wiltshire it is sunny.'
diff --git a/tests/test_logfire.py b/tests/test_logfire.py
index d12e028fa3..523540da76 100644
--- a/tests/test_logfire.py
+++ b/tests/test_logfire.py
@@ -298,6 +298,7 @@ async def my_ret(x: int) -> str:
'kind': 'function',
}
],
+ 'builtin_tools': [],
'output_mode': 'text',
'output_tools': [],
'output_object': None,
@@ -586,14 +587,44 @@ async def test_feedback(capfire: CaptureLogfire) -> None:
'gen_ai.operation.name': 'chat',
'gen_ai.system': 'test',
'gen_ai.request.model': 'test',
- 'model_request_parameters': '{"function_tools": [], "output_mode": "text", "output_object": null, "output_tools": [], "allow_text_output": true}',
+ 'model_request_parameters': IsJson(
+ {
+ 'function_tools': [],
+ 'builtin_tools': [],
+ 'output_mode': 'text',
+ 'output_object': None,
+ 'output_tools': [],
+ 'allow_text_output': True,
+ }
+ ),
'logfire.span_type': 'span',
'logfire.msg': 'chat test',
'gen_ai.usage.input_tokens': 51,
'gen_ai.usage.output_tokens': 4,
'gen_ai.response.model': 'test',
- 'events': '[{"content": "Hello", "role": "user", "gen_ai.system": "test", "gen_ai.message.index": 0, "event.name": "gen_ai.user.message"}, {"index": 0, "message": {"role": "assistant", "content": "success (no tool calls)"}, "gen_ai.system": "test", "event.name": "gen_ai.choice"}]',
- 'logfire.json_schema': '{"type": "object", "properties": {"events": {"type": "array"}, "model_request_parameters": {"type": "object"}}}',
+ 'events': IsJson(
+ [
+ {
+ 'content': 'Hello',
+ 'role': 'user',
+ 'gen_ai.system': 'test',
+ 'gen_ai.message.index': 0,
+ 'event.name': 'gen_ai.user.message',
+ },
+ {
+ 'index': 0,
+ 'message': {'role': 'assistant', 'content': 'success (no tool calls)'},
+ 'gen_ai.system': 'test',
+ 'event.name': 'gen_ai.choice',
+ },
+ ]
+ ),
+ 'logfire.json_schema': IsJson(
+ {
+ 'type': 'object',
+ 'properties': {'events': {'type': 'array'}, 'model_request_parameters': {'type': 'object'}},
+ }
+ ),
},
},
{
diff --git a/uv.lock b/uv.lock
index b0ddc99b5a..8bc9238ef0 100644
--- a/uv.lock
+++ b/uv.lock
@@ -1437,7 +1437,7 @@ wheels = [
[[package]]
name = "groq"
-version = "0.22.0"
+version = "0.25.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "anyio" },
@@ -1447,9 +1447,9 @@ dependencies = [
{ name = "sniffio" },
{ name = "typing-extensions" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/fd/59/7e03f5b12c097b7af48d5fe847a5bd00c90ccfc04b801c2ae68a043ddf1e/groq-0.22.0.tar.gz", hash = "sha256:9d090fbe4a051655faff649890d18aaacb3121393ad9d55399171fe081f1057b", size = 122956, upload-time = "2025-04-02T20:34:07.722Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/a4/fc/29e9c24ab59602747027f41b9d761d24cf9e5771014c9a731137f51e9cce/groq-0.25.0.tar.gz", hash = "sha256:6e1c7466b0da0130498187b825bd239f86fb77bf7551eacfbfa561d75048746a", size = 128199, upload-time = "2025-05-16T19:57:43.381Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/70/77/e6b60636f648922cc53144c36e1e7b77c9670539aab9e8b84a5fd1a53880/groq-0.22.0-py3-none-any.whl", hash = "sha256:f53d3966dff713aaa635671c2d075ebb932b0d48e3c4031ede9b84a2a6694c79", size = 126685, upload-time = "2025-04-02T20:34:06.637Z" },
+ { url = "https://files.pythonhosted.org/packages/4d/11/1019a6cfdb2e520cb461cf70d859216be8ca122ddf5ad301fc3b0ee45fd4/groq-0.25.0-py3-none-any.whl", hash = "sha256:aadc78b40b1809cdb196b1aa8c7f7293108767df1508cafa3e0d5045d9328e7a", size = 129371, upload-time = "2025-05-16T19:57:41.786Z" },
]
[[package]]
@@ -3506,7 +3506,7 @@ requires-dist = [
{ name = "google-auth", marker = "extra == 'vertexai'", specifier = ">=2.36.0" },
{ name = "google-genai", marker = "extra == 'google'", specifier = ">=1.28.0" },
{ name = "griffe", specifier = ">=1.3.2" },
- { name = "groq", marker = "extra == 'groq'", specifier = ">=0.19.0" },
+ { name = "groq", marker = "extra == 'groq'", specifier = ">=0.25.0" },
{ name = "httpx", specifier = ">=0.27" },
{ name = "huggingface-hub", extras = ["inference"], marker = "extra == 'huggingface'", specifier = ">=0.33.5" },
{ name = "logfire", marker = "extra == 'logfire'", specifier = ">=3.11.0" },