Skip to content

Providers

OpenCorvus LLM provider configuration and model selection.

OpenCorvus’s LLM layer sits on top of Vercel AI SDK, using @ai-sdk/* packages for each provider.

Built-in providers

From packages/opencorvus/package.json:

ProviderPackage
Anthropic@ai-sdk/anthropic
OpenAI / compatible@ai-sdk/openai + @ai-sdk/openai-compatible
Google@ai-sdk/google + @ai-sdk/google-vertex
Amazon Bedrock@ai-sdk/amazon-bedrock
Azure OpenAI@ai-sdk/azure
Cerebras / Cohere / DeepInfra / Groq / Mistral / Perplexity / TogetherAI / Vercel / xAI@ai-sdk/*
GitLab AI@gitlab/gitlab-ai-provider
OpenRouter@openrouter/ai-sdk-provider
Vercel Gatewayai-gateway-provider

China-region aliases (declared in channel-runtime/.env.example):

AliasUnderlying
alibaba-cnDashScope
alibaba-coding-plan-cnDashScope Coding Plan
moonshotai-cnMoonshot
deepseekDeepSeek

Configuration

A. Environment variables

Each provider’s canonical key name works out of the box:

Terminal window
export ANTHROPIC_API_KEY=sk-ant-...
export OPENAI_API_KEY=sk-...
export GOOGLE_GENERATIVE_AI_API_KEY=...
export DEEPSEEK_API_KEY=...
export OPENROUTER_API_KEY=...
# Alibaba DashScope
export DASHSCOPE_API_KEY=sk-... # alibaba-cn and shared DashScope key
export ALIBABA_CODING_PLAN_API_KEY=sk-sp-... # alibaba-coding-plan-cn

B. Custom provider (OpenAI-compatible)

In opencorvus.jsonc:

{
"provider": {
"myhub": {
"api": "https://your-gateway/v1",
"env": ["MYHUB_API_KEY"],
"models": {
"custom-1": { "name": "Custom 1", "tool_call": true },
},
},
},
"model": "myhub/custom-1",
}

env declares required env names; missing keys fail loud — no fallback. Provider base URLs come from the model database; key prefixes do not override provider routing.

Model selection

Model selection has explicit identity layers:

ScenarioConfig
Project defaultmodel
Fixed Primary/Helper/Host identityagent.<fixed-id>.model
Worker templateruntime_templates.<base-role>.model
Exact projected workerexpert_squads.<squad-id>.agents.<agent-id>.runtime.model
Vision / screenshot understandingOPENCORVUS_VISION_MODEL

Splitting planning from execution lets you plan with a strong/slow model and execute with a fast/cheaper one:

{
"model": "openai/gpt-5.5",
"agent": {
"coding": { "model": "anthropic/claude-sonnet-4-6" },
},
"runtime_templates": {
"architect": { "model": "anthropic/claude-sonnet-4-6" },
},
}

Reasoning-model constraints

For Claude reasoning, qwq, o1, and similar:

  1. Must use streamTextgenerateText hangs while reasoning tokens stream.
  2. Must use toolChoice: "auto", not "required".
  3. Prompt caching matters (5-minute TTL for Anthropic reasoning models). Reuse system prompts across turns.

Excluding a provider

To avoid using a provider, simply don’t configure its env — OpenCorvus removes keyless providers from the available list. Do not rely on heuristic filtering.