CogitaveLearn

Choose a provider

Namzu keeps model vendors out of the kernel. Each vendor is a driver in its own package; you install the one you use and register it once. Everything after the registration line is vendor-neutral, so switching is a change to one import and one call.

The drivers

PackageUse it for
@namzu/ollamaLocal inference. Zero-config default, no key, no network egress.
@namzu/lmstudioLocal inference over LM Studio's WebSocket interface.
@namzu/openaiOpenAI Chat Completions.
@namzu/anthropicAnthropic Messages API.
@namzu/bedrockAWS Bedrock Converse - useful when the account boundary matters.
@namzu/openrouterAggregated access to many models behind one key.
@namzu/httpAny OpenAI- or Anthropic-compatible endpoint. Zero dependencies.
(none)MockLLMProvider, pre-registered with the kernel. No network.

Register one

Registration is two lines, and the shape is the same for every driver:

typescript
import { ProviderRegistry } from '@namzu/sdk'
import { registerOllama } from '@namzu/ollama'

registerOllama()

const { provider } = ProviderRegistry.create({
  type: 'ollama',
  host: 'http://localhost:11434',
})

To move to a hosted vendor, change the import and the type:

typescript
import { registerAnthropic } from '@namzu/anthropic'

registerAnthropic()

const { provider } = ProviderRegistry.create({ type: 'anthropic' })

Your agent code does not change.

Which one to start with

  • Developing, or writing tests? Install nothing extra. The kernel's MockLLMProvider is already registered and needs no network, which makes test runs deterministic and free.
  • Working offline, or keeping data on your machine? @namzu/ollama. It is the local-first default for a reason: no key, no egress.
  • Running in production against a frontier model? @namzu/openai, @namzu/anthropic, or @namzu/bedrock. Pick on the account and compliance boundary you need, not on the API - the kernel hides the API difference.
  • Comparing many models cheaply? @namzu/openrouter.
  • Serving your own weights, or a gateway in front of them? @namzu/http, pointed at your endpoint.

TIP

Register the mock in tests and the real driver in production from the same code path. Because the response shape is identical, a test that passes against the mock is exercising the same contract the vendor will satisfy.

What stays the same across drivers

Every provider returns:

typescript
{ id, model, message: { role, content, toolCalls? }, finishReason, usage }

That is the contract. A driver that cannot satisfy it is a bug in the driver, not something your agent has to work around.

Next steps