Skip to content

llm-adapters — Architecture

The @mnemose/llm-adapters package provides native, multi-vendor LLM adapters behind the @freeside-collective/agent-runtime ApiClient surface. Unlike @mnemose/llm-provider (a text-only port not on the agent tool-use path), this package produces the ApiClient instances the agent loop actually streams through.

Responsibilities

  • Resolve an ApiClient from an LLM provider config (provider kind, secret ref, model) via createApiClient(config, deps)
  • Implement per-vendor adapters that translate the agent-runtime request stream into vendor SDK calls
  • Resolve secrets from Secret Manager via the secrets dependency and cloud credentials via cloudCredentials

Key Components

FileRole
src/registry.tscreateApiClient() — dispatches to the correct adapter by providerKind
src/adapters/anthropic.tsAnthropic Messages API adapter
src/adapters/vertex.tsVertex AI (Gemini) adapter
src/adapters/openai-compat.tsOpenAI-compatible endpoint adapter (OpenAI, OpenRouter, Azure OpenAI, …)
src/adapters/bedrock.tsAWS Bedrock adapter (Anthropic on Bedrock)
src/adapters/azure.tsAzure OpenAI adapter
src/adapters/_translate.tsShared request/response translation helpers
src/config.tsShared config types (BaseLlmConfig, LlmProviderKind)

Dependencies

  • @mnemose/domain — LlmProviderConfig Zod schemas (secret ref, model, provider kind)
  • @mnemose/cloud-adapters — secret resolution + cloud credentials
  • vendor SDKs (@anthropic-ai/sdk, OpenAI SDK, etc.) behind each adapter

Data Flow

agent loop (services/loop-host)
↓ createApiClient(providerConfig, { secrets, cloudCredentials })
↓ client.stream(request, tools) → AsyncIterable<AssistantEvent>
↓ vendor SDK call (Anthropic / Vertex / OpenAI / Bedrock / Azure)