mirror of
https://github.com/fawney19/Aether.git
synced 2026-01-12 04:28:28 +08:00
100 lines
3.2 KiB
Python
100 lines
3.2 KiB
Python
|
|
"""
|
|||
|
|
API Handlers - 请求处理器
|
|||
|
|
|
|||
|
|
按 API 格式组织的 Adapter 和 Handler:
|
|||
|
|
- Adapter: 请求验证、格式转换、错误处理
|
|||
|
|
- Handler: 业务逻辑、调用 Provider、记录用量
|
|||
|
|
|
|||
|
|
支持的格式:
|
|||
|
|
- claude: Claude Chat API (/v1/messages)
|
|||
|
|
- claude_cli: Claude CLI 透传模式
|
|||
|
|
- openai: OpenAI Chat API (/v1/chat/completions)
|
|||
|
|
- openai_cli: OpenAI CLI 透传模式
|
|||
|
|
|
|||
|
|
注意:Handler 基类和具体 Handler 使用延迟导入以避免循环依赖。
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
# Adapter 基类(不会引起循环导入,可以直接导入)
|
|||
|
|
from src.api.handlers.base import (
|
|||
|
|
ChatAdapterBase,
|
|||
|
|
CliAdapterBase,
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
__all__ = [
|
|||
|
|
# Adapter 基类
|
|||
|
|
"ChatAdapterBase",
|
|||
|
|
"CliAdapterBase",
|
|||
|
|
# Handler 基类(延迟导入)
|
|||
|
|
"ChatHandlerBase",
|
|||
|
|
"CliMessageHandlerBase",
|
|||
|
|
"BaseMessageHandler",
|
|||
|
|
"MessageHandlerProtocol",
|
|||
|
|
"MessageTelemetry",
|
|||
|
|
"StreamContext",
|
|||
|
|
# Claude
|
|||
|
|
"ClaudeChatAdapter",
|
|||
|
|
"ClaudeTokenCountAdapter",
|
|||
|
|
"build_claude_adapter",
|
|||
|
|
"ClaudeChatHandler",
|
|||
|
|
# Claude CLI
|
|||
|
|
"ClaudeCliAdapter",
|
|||
|
|
"ClaudeCliMessageHandler",
|
|||
|
|
# OpenAI
|
|||
|
|
"OpenAIChatAdapter",
|
|||
|
|
"OpenAIChatHandler",
|
|||
|
|
# OpenAI CLI
|
|||
|
|
"OpenAICliAdapter",
|
|||
|
|
"OpenAICliMessageHandler",
|
|||
|
|
]
|
|||
|
|
|
|||
|
|
# 延迟导入映射表
|
|||
|
|
_LAZY_IMPORTS = {
|
|||
|
|
# Handler 基类
|
|||
|
|
"ChatHandlerBase": ("src.api.handlers.base.chat_handler_base", "ChatHandlerBase"),
|
|||
|
|
"CliMessageHandlerBase": (
|
|||
|
|
"src.api.handlers.base.cli_handler_base",
|
|||
|
|
"CliMessageHandlerBase",
|
|||
|
|
),
|
|||
|
|
"StreamContext": ("src.api.handlers.base.cli_handler_base", "StreamContext"),
|
|||
|
|
"BaseMessageHandler": ("src.api.handlers.base.base_handler", "BaseMessageHandler"),
|
|||
|
|
"MessageHandlerProtocol": (
|
|||
|
|
"src.api.handlers.base.base_handler",
|
|||
|
|
"MessageHandlerProtocol",
|
|||
|
|
),
|
|||
|
|
"MessageTelemetry": ("src.api.handlers.base.base_handler", "MessageTelemetry"),
|
|||
|
|
# Claude
|
|||
|
|
"ClaudeChatAdapter": ("src.api.handlers.claude.adapter", "ClaudeChatAdapter"),
|
|||
|
|
"ClaudeTokenCountAdapter": (
|
|||
|
|
"src.api.handlers.claude.adapter",
|
|||
|
|
"ClaudeTokenCountAdapter",
|
|||
|
|
),
|
|||
|
|
"build_claude_adapter": ("src.api.handlers.claude.adapter", "build_claude_adapter"),
|
|||
|
|
"ClaudeChatHandler": ("src.api.handlers.claude.handler", "ClaudeChatHandler"),
|
|||
|
|
# Claude CLI
|
|||
|
|
"ClaudeCliAdapter": ("src.api.handlers.claude_cli.adapter", "ClaudeCliAdapter"),
|
|||
|
|
"ClaudeCliMessageHandler": (
|
|||
|
|
"src.api.handlers.claude_cli.handler",
|
|||
|
|
"ClaudeCliMessageHandler",
|
|||
|
|
),
|
|||
|
|
# OpenAI
|
|||
|
|
"OpenAIChatAdapter": ("src.api.handlers.openai.adapter", "OpenAIChatAdapter"),
|
|||
|
|
"OpenAIChatHandler": ("src.api.handlers.openai.handler", "OpenAIChatHandler"),
|
|||
|
|
# OpenAI CLI
|
|||
|
|
"OpenAICliAdapter": ("src.api.handlers.openai_cli.adapter", "OpenAICliAdapter"),
|
|||
|
|
"OpenAICliMessageHandler": (
|
|||
|
|
"src.api.handlers.openai_cli.handler",
|
|||
|
|
"OpenAICliMessageHandler",
|
|||
|
|
),
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
def __getattr__(name: str):
|
|||
|
|
"""延迟导入以避免循环依赖"""
|
|||
|
|
if name in _LAZY_IMPORTS:
|
|||
|
|
module_path, attr_name = _LAZY_IMPORTS[name]
|
|||
|
|
import importlib
|
|||
|
|
|
|||
|
|
module = importlib.import_module(module_path)
|
|||
|
|
return getattr(module, attr_name)
|
|||
|
|
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|