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
LLMProviderport (complete(request) → AsyncIterable<chunk>) - Provide
createLLMProvider(config)factory andresolveProviderFromEnv()resolver - Implement Anthropic, OpenAI-compatible, and OpenCode text completion providers
Key Components
| File | Role |
|---|---|
src/ports/provider.ts | LLMProvider interface + LLMProviderConfig / LLMProviderMetadata types |
src/factory.ts | createLLMProvider(config) — dispatches to the correct provider |
src/resolver.ts | resolveProviderFromEnv() / resolveProviderMetadataFromEnv() — env-driven selection |
src/providers/anthropic.ts | Anthropic text completion adapter |
src/providers/openai-compat.ts | OpenAI-compatible text completion adapter |
src/providers/opencode.ts | OpenCode 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