@nyrra/foundry-ai
Version:
Thin Palantir Foundry provider adapters and model catalog for the Vercel AI SDK.
1 lines • 6.75 kB
Source Map (JSON)
{"version":3,"sources":["../../src/providers/anthropic.ts"],"sourcesContent":["import { createAnthropic } from '@ai-sdk/anthropic';\nimport { NoSuchModelError } from 'ai';\nimport { resolveFoundryConfig } from '../config.js';\nimport {\n type FoundryCallOptions,\n type FoundryLanguageModel,\n wrapFoundryLanguageModel,\n} from '../middleware.js';\nimport type { AnthropicModelId } from '../models/anthropic-models.js';\nimport { resolveModelTarget } from '../models/catalog.js';\nimport type { FoundryConfig } from '../types.js';\n\ntype FoundryFunctionTool = NonNullable<FoundryCallOptions['tools']>[number];\n\nexport interface FoundryAnthropicProvider {\n (modelId: AnthropicModelId): FoundryLanguageModel;\n specificationVersion: FoundryLanguageModel['specificationVersion'];\n languageModel(modelId: AnthropicModelId): FoundryLanguageModel;\n chat(modelId: AnthropicModelId): FoundryLanguageModel;\n messages(modelId: AnthropicModelId): FoundryLanguageModel;\n embeddingModel(modelId: string): never;\n imageModel(modelId: string): never;\n}\n\nexport function createFoundryAnthropic(config: FoundryConfig): FoundryAnthropicProvider {\n const providerId = 'foundry-anthropic';\n const resolvedConfig = resolveFoundryConfig(config, 'createFoundryAnthropic');\n const headers =\n resolvedConfig.attributionRid || resolvedConfig.traceParent || resolvedConfig.traceState\n ? {\n ...(resolvedConfig.attributionRid ? { attribution: resolvedConfig.attributionRid } : {}),\n ...(resolvedConfig.traceParent ? { traceParent: resolvedConfig.traceParent } : {}),\n ...(resolvedConfig.traceState ? { traceState: resolvedConfig.traceState } : {}),\n }\n : undefined;\n const baseProvider = createAnthropic({\n authToken: resolvedConfig.token,\n baseURL: `${resolvedConfig.foundryUrl}/api/v2/llm/proxy/anthropic/v1`,\n headers,\n name: providerId,\n });\n\n const createLanguageModel = (modelId: AnthropicModelId): FoundryLanguageModel => {\n const resolvedModel = resolveModelTarget(modelId);\n\n return wrapFoundryLanguageModel(baseProvider(resolvedModel.rid), {\n modelId,\n providerId,\n transformParams: applyAnthropicCompat,\n });\n };\n\n function provider(modelId: AnthropicModelId): FoundryLanguageModel {\n return createLanguageModel(modelId);\n }\n\n const callableProvider = provider as FoundryAnthropicProvider;\n\n callableProvider.specificationVersion = baseProvider.specificationVersion;\n callableProvider.languageModel = createLanguageModel;\n callableProvider.chat = createLanguageModel;\n callableProvider.messages = createLanguageModel;\n callableProvider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n callableProvider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return callableProvider;\n}\n\nfunction applyAnthropicCompat(params: FoundryCallOptions): FoundryCallOptions {\n const anthropicOptions = asRecord(params.providerOptions?.anthropic);\n const foundryAnthropicOptions = asRecord(params.providerOptions?.['foundry-anthropic']);\n\n if (anthropicOptions.toolStreaming === true || foundryAnthropicOptions.toolStreaming === true) {\n throw new Error(\n 'Foundry Anthropic does not support toolStreaming=true in Anthropic provider options. Remove the option or set it to false.',\n );\n }\n\n return {\n ...params,\n providerOptions: {\n ...(params.providerOptions ?? {}),\n anthropic: {\n ...anthropicOptions,\n structuredOutputMode: 'jsonTool',\n toolStreaming: false,\n },\n ...(params.providerOptions?.['foundry-anthropic'] != null\n ? {\n 'foundry-anthropic': {\n ...foundryAnthropicOptions,\n structuredOutputMode: 'jsonTool',\n toolStreaming: false,\n },\n }\n : {}),\n },\n ...(params.tools != null\n ? { tools: params.tools.map(rejectAnthropicEagerInputStreaming) }\n : {}),\n };\n}\n\nfunction rejectAnthropicEagerInputStreaming(tool: FoundryFunctionTool): FoundryFunctionTool {\n if (tool.type !== 'function') {\n return tool;\n }\n\n const anthropicOptions = asRecord(tool.providerOptions?.anthropic);\n\n if (anthropicOptions.eagerInputStreaming === true) {\n throw new Error(\n 'Foundry Anthropic does not support tool providerOptions.anthropic.eagerInputStreaming=true. Remove the option or set it to false.',\n );\n }\n\n return tool;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return {};\n }\n\n return value as Record<string, unknown>;\n}\n"],"mappings":";;;;;;;;;AAAA,SAAS,uBAAuB;AAChC,SAAS,wBAAwB;AAuB1B,SAAS,uBAAuB,QAAiD;AACtF,QAAM,aAAa;AACnB,QAAM,iBAAiB,qBAAqB,QAAQ,wBAAwB;AAC5E,QAAM,UACJ,eAAe,kBAAkB,eAAe,eAAe,eAAe,aAC1E;AAAA,IACE,GAAI,eAAe,iBAAiB,EAAE,aAAa,eAAe,eAAe,IAAI,CAAC;AAAA,IACtF,GAAI,eAAe,cAAc,EAAE,aAAa,eAAe,YAAY,IAAI,CAAC;AAAA,IAChF,GAAI,eAAe,aAAa,EAAE,YAAY,eAAe,WAAW,IAAI,CAAC;AAAA,EAC/E,IACA;AACN,QAAM,eAAe,gBAAgB;AAAA,IACnC,WAAW,eAAe;AAAA,IAC1B,SAAS,GAAG,eAAe,UAAU;AAAA,IACrC;AAAA,IACA,MAAM;AAAA,EACR,CAAC;AAED,QAAM,sBAAsB,CAAC,YAAoD;AAC/E,UAAM,gBAAgB,mBAAmB,OAAO;AAEhD,WAAO,yBAAyB,aAAa,cAAc,GAAG,GAAG;AAAA,MAC/D;AAAA,MACA;AAAA,MACA,iBAAiB;AAAA,IACnB,CAAC;AAAA,EACH;AAEA,WAAS,SAAS,SAAiD;AACjE,WAAO,oBAAoB,OAAO;AAAA,EACpC;AAEA,QAAM,mBAAmB;AAEzB,mBAAiB,uBAAuB,aAAa;AACrD,mBAAiB,gBAAgB;AACjC,mBAAiB,OAAO;AACxB,mBAAiB,WAAW;AAC5B,mBAAiB,iBAAiB,CAAC,YAAoB;AACrD,UAAM,IAAI,iBAAiB,EAAE,SAAS,WAAW,iBAAiB,CAAC;AAAA,EACrE;AACA,mBAAiB,aAAa,CAAC,YAAoB;AACjD,UAAM,IAAI,iBAAiB,EAAE,SAAS,WAAW,aAAa,CAAC;AAAA,EACjE;AAEA,SAAO;AACT;AAEA,SAAS,qBAAqB,QAAgD;AAC5E,QAAM,mBAAmB,SAAS,OAAO,iBAAiB,SAAS;AACnE,QAAM,0BAA0B,SAAS,OAAO,kBAAkB,mBAAmB,CAAC;AAEtF,MAAI,iBAAiB,kBAAkB,QAAQ,wBAAwB,kBAAkB,MAAM;AAC7F,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,iBAAiB;AAAA,MACf,GAAI,OAAO,mBAAmB,CAAC;AAAA,MAC/B,WAAW;AAAA,QACT,GAAG;AAAA,QACH,sBAAsB;AAAA,QACtB,eAAe;AAAA,MACjB;AAAA,MACA,GAAI,OAAO,kBAAkB,mBAAmB,KAAK,OACjD;AAAA,QACE,qBAAqB;AAAA,UACnB,GAAG;AAAA,UACH,sBAAsB;AAAA,UACtB,eAAe;AAAA,QACjB;AAAA,MACF,IACA,CAAC;AAAA,IACP;AAAA,IACA,GAAI,OAAO,SAAS,OAChB,EAAE,OAAO,OAAO,MAAM,IAAI,kCAAkC,EAAE,IAC9D,CAAC;AAAA,EACP;AACF;AAEA,SAAS,mCAAmC,MAAgD;AAC1F,MAAI,KAAK,SAAS,YAAY;AAC5B,WAAO;AAAA,EACT;AAEA,QAAM,mBAAmB,SAAS,KAAK,iBAAiB,SAAS;AAEjE,MAAI,iBAAiB,wBAAwB,MAAM;AACjD,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,SAAS,OAAyC;AACzD,MAAI,SAAS,QAAQ,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;AACtE,WAAO,CAAC;AAAA,EACV;AAEA,SAAO;AACT;","names":[]}