@drover/model

pi-ai wrapper. Alias resolution, reasoning gates, per-provider env keys.

resolveModel

ts
function resolveModel(
  spec: ModelSpec,
  opts: { runId: string; aliases?: AliasMap; env?: Env },
): Effect<ResolvedModel, ModelError>;

interface ResolvedModel {
  model: Model<KnownApi>;        // pi-ai's typed model record
  apiKey: string;
  reasoning?: ReasoningLevel;
  temperature?: number;
  maxTokens?: number;
}

Lookup order:

  1. Alias map (custom ∪ DEFAULT_ALIASES).
  2. Provider-prefixed slug provider:modelId.
  3. Search every pi-ai provider for a model whose id equals name.

Failure modes (all ModelError):

  • routing_miss: name not found.
  • auth: provider’s env vars unset.
  • provider_error: pi-ai threw.

Reasoning slug

"name:reasoning" parses cleanly. Valid reasoning levels: minimal | low | medium | high | xhigh.

For models that declare reasoning: true in pi-ai’s registry, omitting a level defaults to "medium" (verified necessary for gpt-5-mini and similar — without it the model returns no final text).

DEFAULT_ALIASES

aliasresolves to$/Mtok in/out
default / cheap / flashopenrouter/google/gemini-3.1-flash-lite-preview0.25 / 1.50
grokopenrouter/x-ai/grok-4-fast0.20 / 0.50
miniopenrouter/openai/gpt-5-mini0.25 / 2.00
nanoopenrouter/openai/gpt-5-nano0.05 / 0.40
haikuopenrouter/anthropic/claude-haiku-4.51.00 / 5.00
sonnetopenrouter/anthropic/claude-sonnet-4.6(frontier)
deepseekopenrouter/deepseek/deepseek-v3.20.25 / 0.38
glmopenrouter/z-ai/glm-4.70.38 / 1.74

All routed through OpenRouter. Override the map per project via withAliases({...}) or replace entirely.

withAliases

ts
function withAliases(
  ...layers: ReadonlyArray<AliasMap>
): AliasMap;

Merge user overrides on top of DEFAULT_ALIASES. Later layers win.

Provider env keys

providerenv var(s)
openrouterOPENROUTER_API_KEY
openaiOPENAI_API_KEY
anthropicANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN
googleGOOGLE_API_KEY, GEMINI_API_KEY
groqGROQ_API_KEY
deepseekDEEPSEEK_API_KEY
mistralMISTRAL_API_KEY
cerebrasCEREBRAS_API_KEY

First match wins. To add a provider, set the env var and reference it in your spec / alias.

Type to search…

↑↓ navigate open esc close