mirror of
https://github.com/BerriAI/litellm.git
synced 2026-09-13 23:11:40 +00:00
test(e2e): drop the bedrock web search server-tool test
The test can only pass on a gateway whose config.yaml declares the websearch_interception callback, its params block, and a search_tools backend. An e2e test that depends on editing the deployed proxy config is not one we can keep green: it has been red in the nightly since it landed, and it fails with the gateway's own BadRequestError telling us interception is off rather than with anything about the behavior under test. The registry row stays, so the cell reads as an uncovered gap instead of silently disappearing.
This commit is contained in:
parent
bea31871fc
commit
8e8321eba2
1 changed files with 0 additions and 102 deletions
|
|
@ -1,102 +0,0 @@
|
|||
"""Live e2e: the Anthropic web_search server tool over Bedrock Invoke.
|
||||
|
||||
Bedrock hosts none of Anthropic's ``web_search_*`` server tools, so a
|
||||
``/v1/messages`` request carrying one is rejected outright with
|
||||
400 "The provided request is not valid" if it reaches AWS unchanged. What makes
|
||||
it work is web-search interception: the hooks rewrite the native tool into
|
||||
LiteLLM's own search tool before the upstream call, Bedrock calls that tool, the
|
||||
gateway runs the search, and the agentic loop feeds the results back for the
|
||||
model to synthesize. The response is then rebuilt in the native shape, so a
|
||||
client's citations panel sees ``server_tool_use`` and ``web_search_tool_result``
|
||||
exactly as it would from Anthropic direct.
|
||||
|
||||
This cell pins that whole path. Nothing else covers it: the ``web_search`` cells
|
||||
in the Claude Code compat matrix drive the CLI's *client-side* ``WebSearch``
|
||||
tool, an ordinary custom tool the CLI executes and feeds back as a
|
||||
``tool_result``, and the CLI never emits a ``web_search_20250305`` definition.
|
||||
|
||||
Prerequisites beyond AWS credentials: the proxy config must switch interception
|
||||
on and declare a search backend. The callback entry is load-bearing; the params
|
||||
block alone does not activate it.
|
||||
|
||||
litellm_settings:
|
||||
callbacks: ["websearch_interception"]
|
||||
websearch_interception_params:
|
||||
enabled_providers: ["bedrock"]
|
||||
search_tool_name: e2e-search
|
||||
search_tools:
|
||||
- search_tool_name: e2e-search
|
||||
litellm_params:
|
||||
search_provider: searxng
|
||||
api_base: http://127.0.0.1:8391
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import pytest
|
||||
|
||||
from e2e_config import unique_marker
|
||||
from e2e_http import unwrap
|
||||
from endpoints_client import EndpointsClient
|
||||
from lifecycle import ResourceManager
|
||||
from models import (
|
||||
AnthropicMessagesBody,
|
||||
AnthropicWebSearchTool,
|
||||
ChatMessage,
|
||||
LiteLLMParamsBody,
|
||||
)
|
||||
|
||||
pytestmark = pytest.mark.e2e
|
||||
|
||||
BEDROCK_INVOKE_BACKEND = "bedrock/invoke/us.anthropic.claude-haiku-4-5-20251001-v1:0"
|
||||
|
||||
WEB_SEARCH_TOOL = AnthropicWebSearchTool(
|
||||
type="web_search_20250305",
|
||||
name="web_search",
|
||||
max_uses=3,
|
||||
)
|
||||
|
||||
SEARCH_PROMPT = "Use web search to tell me one recent news headline about Anthropic."
|
||||
|
||||
|
||||
class TestBedrockWebSearchServerTool:
|
||||
@pytest.mark.covers("llm.messages.bedrock_invoke.web_search_server_tool.nonstream.works")
|
||||
def test_web_search_server_tool_is_served(
|
||||
self, endpoints_client: EndpointsClient, resources: ResourceManager
|
||||
) -> None:
|
||||
"""A bedrock deployment must answer a web_search server-tool request
|
||||
instead of handing the tool to AWS and returning its 400."""
|
||||
model = f"e2e-bedrock-websearch-{unique_marker()}"
|
||||
model_id = endpoints_client.create_model(
|
||||
model,
|
||||
LiteLLMParamsBody(
|
||||
model=BEDROCK_INVOKE_BACKEND,
|
||||
aws_region_name="us-east-1",
|
||||
),
|
||||
)
|
||||
resources.defer(lambda: endpoints_client.delete_model(model_id))
|
||||
key = resources.key()
|
||||
|
||||
response = unwrap(
|
||||
endpoints_client.proxy.messages(
|
||||
key,
|
||||
AnthropicMessagesBody(
|
||||
model=model,
|
||||
max_tokens=512,
|
||||
tools=[WEB_SEARCH_TOOL],
|
||||
messages=[ChatMessage(role="user", content=SEARCH_PROMPT)],
|
||||
),
|
||||
)
|
||||
)
|
||||
|
||||
assert response.content, f"no content blocks in response: {response}"
|
||||
block_types = [block.type for block in response.content]
|
||||
assert "web_search_tool_result" in block_types, (
|
||||
"the answer carries no web_search_tool_result block, so the search "
|
||||
"either never ran or its results were not returned in the native shape "
|
||||
f"a citations panel reads. blocks={block_types}"
|
||||
)
|
||||
assert "text" in block_types, (
|
||||
"the model never synthesized an answer over the search results, so the "
|
||||
f"agentic loop stopped early. blocks={block_types}"
|
||||
)
|
||||
Loading…
Add table
Reference in a new issue