AI Providers
This document describes the provider adapters implemented in
src/facade/ml/adapters/* and their options.
Adapter Set
The built-in adapters (registered by src/facade/ml/adapters/register-builtins.ts)
are, by API tag:
| API tag | Adapter file | Stream fns |
|---|---|---|
mock-ai |
mock.ts |
streamMock, streamSimpleMock |
anthropic-messages |
anthropic.ts |
streamAnthropic, streamSimpleAnthropic |
openai-completions |
openai-completions.ts |
streamOpenAICompletions, streamSimpleOpenAICompletions |
openai-responses |
openai-responses.ts |
streamOpenAIResponses, streamSimpleOpenAIResponses |
azure-openai-responses |
azure-openai-responses.ts |
streamAzureOpenAIResponses, streamSimpleAzureOpenAIResponses |
openai-codex-responses |
openai-codex-responses.ts |
streamOpenAICodexResponses, streamSimpleOpenAICodexResponses |
google-generative-ai |
google.ts |
streamGoogle, streamSimpleGoogle |
google-vertex |
google-vertex.ts |
streamGoogleVertex, streamSimpleGoogleVertex |
bedrock-converse-stream |
amazon-bedrock.ts |
streamBedrock, streamSimpleBedrock |
kimi-openai-compatible |
kimi.ts |
streamKimi, streamSimpleKimi |
nvidia-openai-compatible |
nvidia.ts |
streamNvidia, streamSimpleNvidia |
Shared adapter modules: google-shared.ts, openai-responses-shared.ts,
openai-scaffold.ts (a no-op scaffold), simple-options.ts (reasoning/budget
helpers), and transform-messages.ts (internal message normalization).
Environment Variables
These are read by getEnvApiKey in src/facade/ml/env-api-keys.ts.
OPENAI_API_KEYfor provideropenaiAZURE_OPENAI_API_KEYfor providerazure-openai-responsesGEMINI_API_KEYfor providergoogleGROQ_API_KEYfor providergroqCEREBRAS_API_KEYfor providercerebrasXAI_API_KEYfor providerxaiOPENROUTER_API_KEYfor provideropenrouterAI_GATEWAY_API_KEYfor providervercel-ai-gatewayZAI_API_KEYfor providerzaiMISTRAL_API_KEYfor providermistralMINIMAX_API_KEYfor providerminimaxMINIMAX_CN_API_KEYfor providerminimax-cnOPENCODE_API_KEYfor provideropencodeSARVAM_API_KEYfor providersarvamKRUTRIM_API_KEYfor providerkrutrimNVIDIA_API_KEYfor providernvidiaCOPILOT_GITHUB_TOKEN,GH_TOKEN, orGITHUB_TOKENfor providergithub-copilotANTHROPIC_OAUTH_TOKENorANTHROPIC_API_KEYfor provideranthropicMOONSHOT_API_KEYfor providerkimiKIMI_API_KEYorKIMICODE_API_KEYfor providerkimi-coding
Google Vertex (google-vertex) uses Application Default Credentials and reports
a credentials-present marker when all of the following are configured:
GOOGLE_APPLICATION_CREDENTIALS, or the default ADC file at~/.config/gcloud/application_default_credentials.jsonGOOGLE_CLOUD_PROJECTorGCLOUD_PROJECTGOOGLE_CLOUD_LOCATION
Amazon Bedrock (amazon-bedrock) reports a credentials-present marker when any of
the standard AWS auth sources are present:
AWS_PROFILE, orAWS_ACCESS_KEY_IDplusAWS_SECRET_ACCESS_KEYAWS_BEARER_TOKEN_BEDROCKAWS_CONTAINER_CREDENTIALS_RELATIVE_URIorAWS_CONTAINER_CREDENTIALS_FULL_URIAWS_WEB_IDENTITY_TOKEN_FILE
For providers that authenticate through an SDK credential chain (Bedrock, Vertex),
getEnvApiKey returns the sentinel <sdk-managed-credentials> rather than a
literal key. resolveEnvApiKey reports this via isAuthenticatedMarker.
Anthropic Messages (`anthropic-messages`)
Implementation: adapters/anthropic.ts. Options (AnthropicOptions):
thinkingEnabled?: booleanthinkingBudgetTokens?: numberinterleavedThinking?: booleantoolChoice?: "auto" | "any" | "none" | { type: "tool"; name: string }
Supports API keys and OAuth tokens, tool calls, tool results, and image inputs.
OpenAI Completions (`openai-completions`)
Implementation: adapters/openai-completions.ts. Options (OpenAICompletionsOptions):
toolChoice?: "auto" | "none" | "required" | { type: "function"; function: { name: string } }reasoningEffort?: "minimal" | "low" | "medium" | "high" | "xhigh"retryPolicy?: { maxAttempts?: number; baseDelayMs?: number }
This adapter also serves OpenAI-compatible backends (openrouter, xai, groq,
cerebras, mistral, zai, opencode, and others). Per-endpoint behavior is
inferred from provider/baseUrl or pinned via model.compat (OpenAICompletionsCompat):
supportsStore,supportsDeveloperRole,supportsReasoningEffortsupportsUsageInStreaming,maxTokensFieldrequiresToolResultName,requiresAssistantAfterToolResultrequiresThinkingAsText,requiresMistralToolIdsthinkingFormat("openai" | "zai"),openRouterRouting(OpenRouterRouting)
OpenAI Responses (`openai-responses`)
Implementation: adapters/openai-responses.ts and adapters/openai-responses-shared.ts.
Options (OpenAIResponsesOptions):
reasoningEffort?: "minimal" | "low" | "medium" | "high" | "xhigh"reasoningSummary?: "auto" | "detailed" | "concise" | nullserviceTier?(the Responsesservice_tiervalue)
Exports convertResponsesMessages and convertResponsesTools from the shared module.
Azure OpenAI Responses (`azure-openai-responses`)
Implementation: adapters/azure-openai-responses.ts. Options (AzureOpenAIResponsesOptions):
reasoningEffort?: "minimal" | "low" | "medium" | "high" | "xhigh"reasoningSummary?: "auto" | "detailed" | "concise" | nullazureApiVersion?: stringazureResourceName?: stringazureBaseUrl?: stringazureDeploymentName?: string
OpenAI Codex Responses (`openai-codex-responses`)
Implementation: adapters/openai-codex-responses.ts. Options (OpenAICodexResponsesOptions):
reasoningEffort?: "none" | "minimal" | "low" | "medium" | "high" | "xhigh"reasoningSummary?: "auto" | "concise" | "detailed" | "off" | "on" | nulltextVerbosity?: "low" | "medium" | "high"
Uses the ChatGPT Codex endpoint; sessionId maps to prompt_cache_key.
Amazon Bedrock (`bedrock-converse-stream`)
Implementation: adapters/amazon-bedrock.ts. Options (BedrockOptions):
region?: stringprofile?: stringtoolChoice?: "auto" | "any" | "none" | { type: "tool"; name: string }reasoning?: ThinkingLevelthinkingBudgets?: ThinkingBudgetsinterleavedThinking?: boolean
Uses the AWS SDK Converse streaming API; interleaved thinking is limited to the Claude 4.x family.
Google Generative AI (`google-generative-ai`)
Implementation: adapters/google.ts and adapters/google-shared.ts.
Options (GoogleOptions):
toolChoice?: "auto" | "none" | "any"thinking?: { enabled: boolean; budgetTokens?: number; level?: GoogleThinkingLevel }
Discrete thinking levels resolve to fixed token budgets
(MINIMAL=512, LOW=1500, MEDIUM=6000, HIGH=20000;
THINKING_LEVEL_UNSPECIFIED=-1). The shared module exports executeGoogleRequest,
convertTools, isThinkingPart, retainThoughtSignature, requiresToolCallId,
mapToolChoice, mapStopReason, mapStopReasonString, and the GoogleThinkingLevel type.
Google Vertex (`google-vertex`)
Implementation: adapters/google-vertex.ts and adapters/google-shared.ts.
Options (GoogleVertexOptions):
toolChoice?: "auto" | "none" | "any"thinking?: { enabled: boolean; budgetTokens?: number; level?: GoogleThinkingLevel }project?: stringlocation?: string
Shares message conversion and tool handling with the Generative AI adapter.
Kimi (`kimi-openai-compatible`)
Implementation: adapters/kimi.ts. Options (KimiOptions):
reasoningLevel?: "none" | "low" | "medium" | "high"
OpenAI-compatible chat completions against Moonshot's Kimi API.
NVIDIA (`nvidia-openai-compatible`)
Implementation: adapters/nvidia.ts. Options (NvidiaOptions):
topP?: number
OpenAI-compatible chat completions against NVIDIA's API.
Mock (`mock-ai`)
Implementation: adapters/mock.ts. A test backend that echoes the last user
message; accepts internal mockDelayMs, mockText, and mockToolName options.
