Skip to content

llm-provider — Architecture

The @mnemose/llm-provider package defines the abstract LLMProvider port and built-in text-only implementations (Anthropic, OpenAI-compatible, OpenCode). It is the simpler LLM surface — it is not on the agent tool-use path (that is @mnemose/llm-adapters); it powers standalone text completion where tool streaming is not needed.

Responsibilities

  • Define the LLMProvider port (complete(request) → AsyncIterable<chunk>)
  • Provide createLLMProvider(config) factory and resolveProviderFromEnv() resolver
  • Implement Anthropic, OpenAI-compatible, and OpenCode text completion providers

Key Components

FileRole
src/ports/provider.tsLLMProvider interface + LLMProviderConfig / LLMProviderMetadata types
src/factory.tscreateLLMProvider(config) — dispatches to the correct provider
src/resolver.tsresolveProviderFromEnv() / resolveProviderMetadataFromEnv() — env-driven selection
src/providers/anthropic.tsAnthropic text completion adapter
src/providers/openai-compat.tsOpenAI-compatible text completion adapter
src/providers/opencode.tsOpenCode text completion adapter

Dependencies

  • zod
  • vendor SDKs behind each provider implementation

Data Flow

caller
↓ resolveProviderFromEnv() → LLMProvider (or null)
↓ provider.complete({ messages }) → AsyncIterable<{ content }>
↓ vendor SDK text completion call