mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 01:10:23 +08:00
refactor: Claude 适配器改用认证头区分 CLI/Chat 模式
将 build_claude_adapter 的判断依据从 x-app 自定义头改为标准认证头: Bearer token (无 x-api-key) 走 CLI 模式,x-api-key 走 Chat 模式。 移除 ClaudeCliAdapter.get_cli_extra_headers 中不再需要的 x-app 头注入。
This commit is contained in:
@@ -264,9 +264,17 @@ class ClaudeChatAdapter(ChatAdapterBase):
|
||||
# build_request_body 使用基类实现,通过 format_conversion_registry 自动转换 OPENAI -> CLAUDE
|
||||
|
||||
|
||||
def build_claude_adapter(x_app_header: str | None) -> Any:
|
||||
"""根据 x-app 头部构造 Chat 或 Claude Code 适配器。"""
|
||||
if x_app_header and x_app_header.lower() == "cli":
|
||||
def build_claude_adapter(request: Request) -> Any:
|
||||
"""根据认证头构造 Chat 或 Claude Code 适配器。
|
||||
|
||||
- Authorization: Bearer (且无 x-api-key) -> CLI 模式
|
||||
- x-api-key -> Chat 模式
|
||||
"""
|
||||
auth_header = request.headers.get("authorization", "")
|
||||
has_bearer = auth_header.lower().startswith("bearer ")
|
||||
has_api_key = bool(request.headers.get("x-api-key"))
|
||||
|
||||
if has_bearer and not has_api_key:
|
||||
from src.api.handlers.claude_cli.adapter import ClaudeCliAdapter
|
||||
|
||||
return ClaudeCliAdapter()
|
||||
|
||||
@@ -138,12 +138,5 @@ class ClaudeCliAdapter(CliAdapterBase):
|
||||
"""获取Claude CLI User-Agent"""
|
||||
return config.internal_user_agent_claude_cli
|
||||
|
||||
@classmethod
|
||||
def get_cli_extra_headers(cls, *, base_url: str | None = None) -> dict[str, str]:
|
||||
"""获取Claude CLI额外请求头,包含 x-app: cli 标识"""
|
||||
headers = super().get_cli_extra_headers(base_url=base_url)
|
||||
headers["x-app"] = "cli" # 标识 CLI 模式,让上游使用正确的认证方式
|
||||
return headers
|
||||
|
||||
|
||||
__all__ = ["ClaudeCliAdapter"]
|
||||
|
||||
@@ -32,9 +32,9 @@ async def create_message(
|
||||
Claude Messages API
|
||||
|
||||
兼容 Anthropic Claude Messages API 格式的代理接口。
|
||||
根据请求头 `x-app` 自动在标准 API 和 Claude Code CLI 模式之间切换。
|
||||
|
||||
**认证方式**: x-api-key 请求头
|
||||
根据认证头自动在标准 API 和 Claude Code CLI 模式之间切换:
|
||||
- x-api-key -> Chat 模式
|
||||
- Authorization: Bearer -> CLI 模式
|
||||
|
||||
**请求格式**:
|
||||
```json
|
||||
@@ -44,12 +44,8 @@ async def create_message(
|
||||
"messages": [{"role": "user", "content": "Hello"}]
|
||||
}
|
||||
```
|
||||
|
||||
**必需请求头**:
|
||||
- `x-api-key`: API 密钥
|
||||
- `anthropic-version`: API 版本(如 2023-06-01)
|
||||
"""
|
||||
adapter = build_claude_adapter(http_request.headers.get("x-app", ""))
|
||||
adapter = build_claude_adapter(http_request)
|
||||
return await pipeline.run(
|
||||
adapter=adapter,
|
||||
http_request=http_request,
|
||||
|
||||
Reference in New Issue
Block a user