mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-03 01:40:21 +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
|
# build_request_body 使用基类实现,通过 format_conversion_registry 自动转换 OPENAI -> CLAUDE
|
||||||
|
|
||||||
|
|
||||||
def build_claude_adapter(x_app_header: str | None) -> Any:
|
def build_claude_adapter(request: Request) -> Any:
|
||||||
"""根据 x-app 头部构造 Chat 或 Claude Code 适配器。"""
|
"""根据认证头构造 Chat 或 Claude Code 适配器。
|
||||||
if x_app_header and x_app_header.lower() == "cli":
|
|
||||||
|
- 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
|
from src.api.handlers.claude_cli.adapter import ClaudeCliAdapter
|
||||||
|
|
||||||
return ClaudeCliAdapter()
|
return ClaudeCliAdapter()
|
||||||
|
|||||||
@@ -138,12 +138,5 @@ class ClaudeCliAdapter(CliAdapterBase):
|
|||||||
"""获取Claude CLI User-Agent"""
|
"""获取Claude CLI User-Agent"""
|
||||||
return config.internal_user_agent_claude_cli
|
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"]
|
__all__ = ["ClaudeCliAdapter"]
|
||||||
|
|||||||
@@ -32,9 +32,9 @@ async def create_message(
|
|||||||
Claude Messages API
|
Claude Messages API
|
||||||
|
|
||||||
兼容 Anthropic Claude Messages API 格式的代理接口。
|
兼容 Anthropic Claude Messages API 格式的代理接口。
|
||||||
根据请求头 `x-app` 自动在标准 API 和 Claude Code CLI 模式之间切换。
|
根据认证头自动在标准 API 和 Claude Code CLI 模式之间切换:
|
||||||
|
- x-api-key -> Chat 模式
|
||||||
**认证方式**: x-api-key 请求头
|
- Authorization: Bearer -> CLI 模式
|
||||||
|
|
||||||
**请求格式**:
|
**请求格式**:
|
||||||
```json
|
```json
|
||||||
@@ -44,12 +44,8 @@ async def create_message(
|
|||||||
"messages": [{"role": "user", "content": "Hello"}]
|
"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(
|
return await pipeline.run(
|
||||||
adapter=adapter,
|
adapter=adapter,
|
||||||
http_request=http_request,
|
http_request=http_request,
|
||||||
|
|||||||
Reference in New Issue
Block a user