Files
Aether/src/api/handlers/__init__.py
2025-12-10 20:52:44 +08:00

100 lines
3.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
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}")