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>
52 lines
3.3 KiB
TypeScript
Executable File
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 }
|
|
}
|