Skip to content

Hermes Provider 抽象

设计哲学

Hermes 以 OpenAI-compatible Chat Completions 为窄腰,特殊 provider 通过 transport/adapter 适配:

AIAgent (runtime)

OpenAI SDK (默认 transport)

ProviderTransport (可选特殊 transport)

HTTP request

ProviderTransport

text
agent/transports/base.py
python
class ProviderTransport(ABC):
    """A transport owns the data path for one api_mode."""

    @abstractmethod
    def convert_messages(self, messages): ...

    @abstractmethod
    def convert_tools(self, tools): ...

    @abstractmethod
    def build_kwargs(self, messages, tools, ...): ...

    @abstractmethod
    def normalize_response(self, response): ...

Transport 实现

Transport文件api_mode
Chat Completionstransports/chat_completions.pychat_completions
Anthropictransports/anthropic.pyanthropic_messages
Bedrocktransports/bedrock.pybedrock_converse
Codextransports/codex.pycodex_responses

Transport 不负责的事

text
TRANSPORT OWNS:           RUNTIME OWNS (AIAgent):
  convert_messages          client construction
  convert_tools            streaming
  build_kwargs              credential refresh
  normalize_response        prompt caching
                            interrupt handling
                            retry logic

api_mode

python
# 不同 api_mode 用不同 transport
if api_mode == 'codex_responses':
    transport = CodexResponsesTransport()
elif api_mode == 'anthropic_messages':
    transport = AnthropicMessagesTransport()
elif api_mode == 'bedrock_converse':
    transport = BedrockConverseTransport()
else:
    transport = ChatCompletionsTransport()  # default

与 OpenCode Route 分解对比

维度HermesOpenCode
核心抽象ProviderTransportRoute (Protocol+Endpoint+Auth+Framing)
默认假设OpenAI SDKEffect fetch
消息转换convert_messagesProtocol.toRequest
响应转换normalize_responseProtocol.fromResponse + Framing.parse
新增 Providertransport 类5-15 行 Route.make()
认证API key on AIAgentRoute.auth per-request
复杂度高(更灵活)

Powered by VitePress