mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-06 02:48:13 +00:00
Adds a 'passthrough' feature row to the Claude Code compat matrix that
drives the real claude CLI in each cloud's native mode against
LiteLLM's passthrough routes (the LLM-gateway setup from
code.claude.com/docs/en/gateway) instead of the /v1/messages
translation layer:
- anthropic: ANTHROPIC_BASE_URL={proxy}/anthropic, forwarded verbatim
to api.anthropic.com
- bedrock_invoke: CLAUDE_CODE_USE_BEDROCK=1 against {proxy}/bedrock;
the router resolves the alias in /model/{alias}/invoke-with-response-stream
- vertex_ai: CLAUDE_CODE_USE_VERTEX=1 against {proxy}/vertex_ai/v1;
alias, project, location and credentials resolve from the deployment,
which now sets use_in_pass_through: true (and the canonical
vertex_project/vertex_location param names) in test_config.yaml
- azure: CLAUDE_CODE_USE_FOUNDRY=1 against {proxy}/azure via the
AZURE_API_BASE/AZURE_API_KEY fallback (documented in the cron env
example)
- bedrock_converse: not_applicable; Claude Code has no Converse-wire
client
The shared cell body lives in _passthrough.py with injectable runner
and env (no monkeypatching), unit-covered in
_driver_unit_tests/test_passthrough.py including pins on the per-mode
CLI env contracts captured from a real claude CLI (2.1.210) run
against a request-logging sink.
42 lines
1.6 KiB
Python
42 lines
1.6 KiB
Python
"""passthrough x Bedrock (Invoke).
|
|
|
|
Drive the real `claude` CLI in bedrock mode (CLAUDE_CODE_USE_BEDROCK=1)
|
|
with ANTHROPIC_BEDROCK_BASE_URL aimed at the proxy's `/bedrock`
|
|
passthrough route. The CLI speaks the native InvokeModel wire --
|
|
`POST /model/{model}/invoke-with-response-stream` -- with the proxy
|
|
alias in the model segment; the proxy resolves the alias through its
|
|
router, rewrites the path to the deployment's upstream model id, and
|
|
SigV4-signs the forwarded request with its own AWS credentials
|
|
(CLAUDE_CODE_SKIP_BEDROCK_AUTH=1 keeps the CLI from signing).
|
|
|
|
The (feature, provider) for this cell is inferred from the file path by
|
|
`tests/e2e/claude_code/conftest.py`:
|
|
|
|
tests/e2e/claude_code/passthrough/test_bedrock_invoke.py
|
|
^^^^^^^^^^^ ^^^^^^^^^^^^^^
|
|
feature_id provider
|
|
|
|
The CLI also fires a best-effort `GET /bedrock/inference-profiles`
|
|
listing at startup; its failure is non-fatal and does not gate this
|
|
cell.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from claude_code._passthrough import bedrock_extra_env, run_passthrough_cell
|
|
|
|
BEDROCK_INVOKE_MODELS = [
|
|
"claude-haiku-4-5-bedrock-invoke",
|
|
"claude-sonnet-4-6-bedrock-invoke",
|
|
"claude-opus-4-7-bedrock-invoke",
|
|
]
|
|
|
|
|
|
def test_passthrough_bedrock_invoke(compat_result):
|
|
"""Drive the `claude` CLI through `{proxy}/bedrock` and assert a reply."""
|
|
run_passthrough_cell(
|
|
compat_result=compat_result,
|
|
models=BEDROCK_INVOKE_MODELS,
|
|
prompt="Reply with the single word 'pong' and nothing else.",
|
|
build_extra_env=bedrock_extra_env,
|
|
)
|