Repository Public
1import type { Provider } from '@aos/shared';2import { createAnthropicAdapter } from './anthropic.js';3import { createOpenAIAdapter } from './openai.js';4import type { ProviderAdapter } from './types.js';56export type { AdapterOptions, ModelDelta, ModelRequest, PriceDb, ProviderAdapter, ProviderResponse, ToolDef } from './types.js';7export { ProviderError, parseRetryAfter, type ProviderErrorInit } from './errors.js';8export {9 CATALOGUE, PRICE_TABLE, PRICE_EFFECTIVE_FROM, catalogueEntry, priceRow, priceUsage, promptTokens, seedPrices,10 type PriceRow, type PriceTier, type TokenUsage,11} from './catalogue.js';12export {13 INVALID_TOOL_INPUT_PREFIX, invalidToolInputMessage, markInvalidToolInput, parseInvalidToolInput,14 stripNullOptionals, toStrictSchema, validateToolInput, type InvalidToolInput,15} from './schema.js';16export {17 ANTHROPIC_DEFAULT_MAX_TOKENS, ANTHROPIC_FALLBACK_BETA, ANTHROPIC_STRICT_UNION_LIMIT, buildAnthropicRequest, countUnionParams, createAnthropicAdapter,18} from './anthropic.js';19export { OPENAI_DEFAULT_MAX_OUTPUT_TOKENS, TOOL_ERROR_PREFIX, buildOpenAIRequest, createOpenAIAdapter } from './openai.js';2021const adapters = new Map<Provider, ProviderAdapter>();2223/** Process-wide adapter for a provider. API keys are read from the environment on first use, never at import. */24export function getProvider(id: Provider): ProviderAdapter {25 let adapter = adapters.get(id);26 if (!adapter) {27 adapter = id === 'anthropic' ? createAnthropicAdapter() : createOpenAIAdapter();28 adapters.set(id, adapter);29 }30 return adapter;31}32