{"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":[]}