fix: align Anthropic endpoints for Claude Code compatibility

Add /v1/messages/count_tokens and switch /v1/models to Anthropic-style key auth so Claude Code probes succeed consistently.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
GitHub Actions
2026-04-18 20:05:24 +08:00
parent 0b08dc6573
commit e977dbeace

View File

@@ -149,6 +149,10 @@ def auth_guard(request: Request):
require_bearer(request, settings.api_keys) require_bearer(request, settings.api_keys)
def anthropic_auth_guard(request: Request):
require_anthropic_key(request, settings.api_keys)
def metrics_auth_guard(request: Request): def metrics_auth_guard(request: Request):
require_metrics_access( require_metrics_access(
request, request,
@@ -314,7 +318,7 @@ def _last_user_text(messages: list[dict]) -> str:
return "" return ""
@app.get("/v1/models", dependencies=[Depends(auth_guard)]) @app.get("/v1/models", dependencies=[Depends(anthropic_auth_guard)])
async def v1_models(): async def v1_models():
p = _require_pool() p = _require_pool()
inst = p.pick() inst = p.pick()
@@ -642,6 +646,22 @@ def _anthropic_stop_reason(completion_tokens: int, max_tokens: int) -> str:
return "end_turn" return "end_turn"
@app.post("/v1/messages/count_tokens")
async def v1_messages_count_tokens(req: AnthropicMessagesRequest, request: Request):
"""Anthropic-compatible token counting endpoint.
Claude Code may probe this endpoint; return Anthropic-shaped response.
"""
try:
require_anthropic_key(request, settings.api_keys)
except AnthropicAuthError as exc:
return _anthropic_error(exc.status_code, exc.error_type, exc.message)
messages_dump = anthropic_to_internal_messages(req)
prompt = _messages_to_prompt(messages_dump)
return JSONResponse(content={"input_tokens": estimate_tokens(prompt)})
@app.post("/v1/messages") @app.post("/v1/messages")
async def v1_messages(req: AnthropicMessagesRequest, request: Request): async def v1_messages(req: AnthropicMessagesRequest, request: Request):
"""Anthropic Messages API compatible endpoint. """Anthropic Messages API compatible endpoint.