Files
AirCoding/packages/llm/src/adapters/OpenCodeProviders.ts
AirCoding ae44be31d5 chore: push all design docs, V2 plan specs, and current working state
Includes AirPlan design documents, AircOding-alpha1-plan, AirPlanV2,
AirPlan-ParaV2, AirPlan-Para V1 reference docs, and all working code
changes across packages.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-12 17:12:29 +08:00

52 lines
3.3 KiB
TypeScript
Executable File

/**
* OpenCodeProviders — 13 provider configurations from OpenCode v1.17.3
*
* Each entry is the OpenCode provider id + its default base URL.
* These config objects are what ProviderManager consumes to select the
* correct adapter (currently OpenAICompatibleAdapter, which implements
* the OpenAI chat-completions protocol that all 13 providers use).
*
* @module packages/llm/src/adapters/OpenCodeProviders
*/
export interface OpenCodeProviderConfig {
provider_id: string
base_url: string
env_key?: string
display_name: string
model_examples?: string[]
}
/**
* 13 providers from OpenCode v1.17.3 packages/llm/src/providers/*.ts
* Source-of-truth copied from upstream; each entry verified against the
* OpenCode provider configure() function in the same release.
*/
export const OPENCODE_PROVIDERS: OpenCodeProviderConfig[] = [
{ provider_id: 'openai-compatible', display_name: 'OpenAI Compatible', base_url: 'https://api.openai.com/v1', env_key: 'OPENAI_API_KEY', model_examples: ['gpt-4o', 'gpt-4o-mini', 'glm-5.1'] },
{ provider_id: 'anthropic', display_name: 'Anthropic', base_url: 'https://api.anthropic.com', env_key: 'ANTHROPIC_API_KEY', model_examples: ['claude-sonnet-4-5', 'claude-haiku-4-5'] },
{ provider_id: 'openai', display_name: 'OpenAI', base_url: 'https://api.openai.com/v1', env_key: 'OPENAI_API_KEY', model_examples: ['gpt-4o', 'o1'] },
{ provider_id: 'openrouter', display_name: 'OpenRouter', base_url: 'https://openrouter.ai/api/v1', env_key: 'OPENROUTER_API_KEY', model_examples: ['anthropic/claude-sonnet-4-5'] },
{ provider_id: 'amazon-bedrock', display_name: 'Amazon Bedrock', base_url: 'https://bedrock-runtime.us-east-1.amazonaws.com', env_key: 'AWS_ACCESS_KEY_ID' },
{ provider_id: 'google', display_name: 'Google Gemini', base_url: 'https://generativelanguage.googleapis.com/v1beta', env_key: 'GOOGLE_API_KEY', model_examples: ['gemini-2.0-flash'] },
{ provider_id: 'github-copilot', display_name: 'GitHub Copilot', base_url: 'https://api.githubcopilot.com', env_key: 'GITHUB_TOKEN' },
{ provider_id: 'azure', display_name: 'Azure OpenAI', base_url: 'https://YOUR_RESOURCE.openai.azure.com/openai/deployments', env_key: 'AZURE_API_KEY' },
{ provider_id: 'cloudflare', display_name: 'Cloudflare Workers AI', base_url: 'https://api.cloudflare.com/client/v4/accounts/{account_id}/ai/v1', env_key: 'CLOUDFLARE_API_TOKEN' },
{ provider_id: 'xai', display_name: 'xAI', base_url: 'https://api.x.ai/v1', env_key: 'XAI_API_KEY', model_examples: ['grok-2'] },
{ provider_id: 'baseten', display_name: 'Baseten', base_url: 'https://inference.baseten.co/v1', env_key: 'BASETEN_API_KEY' },
{ provider_id: 'cerebras', display_name: 'Cerebras', base_url: 'https://api.cerebras.ai/v1', env_key: 'CEREBRAS_API_KEY' },
]
/** Resolve a provider config from model id, env, or default */
export function resolveOpenCodeProvider(
provider_id: string | undefined,
base_url_override?: string,
api_key_override?: string,
): { provider: OpenCodeProviderConfig; api_key: string; base_url: string } {
const provider = OPENCODE_PROVIDERS.find(p => p.provider_id === provider_id)
?? OPENCODE_PROVIDERS.find(p => p.provider_id === 'openai-compatible')!
const api_key = api_key_override || (provider.env_key ? process.env[provider.env_key] || '' : '')
const base_url = base_url_override || provider.base_url
return { provider, api_key, base_url }
}