@jerome-benoit/sap-ai-provider 4.6.8 → 4.6.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/dist/{chunk-M3AV2YUV.js → chunk-4RRRJBEL.js} +33 -28
  2. package/dist/chunk-4RRRJBEL.js.map +1 -0
  3. package/dist/{chunk-6BVUDEKZ.js → chunk-DYFBCE2W.js} +4 -4
  4. package/dist/{chunk-6BVUDEKZ.js.map → chunk-DYFBCE2W.js.map} +1 -1
  5. package/dist/{chunk-IIBSUXGT.js → chunk-EXOXZ5OU.js} +1 -1
  6. package/dist/{chunk-IIBSUXGT.js.map → chunk-EXOXZ5OU.js.map} +1 -1
  7. package/dist/{chunk-7OGNFVGC.js → chunk-F4MUYVQJ.js} +5890 -7071
  8. package/dist/chunk-F4MUYVQJ.js.map +1 -0
  9. package/dist/{chunk-X66RDDSB.js → chunk-NQJIUL3F.js} +3 -3
  10. package/dist/chunk-NQJIUL3F.js.map +1 -0
  11. package/dist/{foundation-models-embedding-model-strategy-GXJRGM4X.js → foundation-models-embedding-model-strategy-3MMM3QDC.js} +4 -4
  12. package/dist/{foundation-models-embedding-model-strategy-GXJRGM4X.js.map → foundation-models-embedding-model-strategy-3MMM3QDC.js.map} +1 -1
  13. package/dist/{foundation-models-language-model-strategy-FGUGQPBL.js → foundation-models-language-model-strategy-OPGTN6DA.js} +6 -8
  14. package/dist/foundation-models-language-model-strategy-OPGTN6DA.js.map +1 -0
  15. package/dist/index.cjs +5918 -7096
  16. package/dist/index.cjs.map +1 -1
  17. package/dist/index.js +6 -6
  18. package/dist/{orchestration-embedding-model-strategy-663QYZL7.js → orchestration-embedding-model-strategy-R6G6VVU6.js} +4 -4
  19. package/dist/orchestration-embedding-model-strategy-R6G6VVU6.js.map +1 -0
  20. package/dist/{orchestration-language-model-strategy-X3LKHORW.js → orchestration-language-model-strategy-KFW3CFRY.js} +5 -5
  21. package/dist/orchestration-language-model-strategy-KFW3CFRY.js.map +1 -0
  22. package/package.json +18 -18
  23. package/dist/chunk-7OGNFVGC.js.map +0 -1
  24. package/dist/chunk-M3AV2YUV.js.map +0 -1
  25. package/dist/chunk-X66RDDSB.js.map +0 -1
  26. package/dist/foundation-models-language-model-strategy-FGUGQPBL.js.map +0 -1
  27. package/dist/orchestration-embedding-model-strategy-663QYZL7.js.map +0 -1
  28. package/dist/orchestration-language-model-strategy-X3LKHORW.js.map +0 -1
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ import {createRequire as __createRequire} from 'module';var require=__createRequ
2
2
  import {
3
3
  escapeOrchestrationPlaceholders,
4
4
  unescapeOrchestrationPlaceholders
5
- } from "./chunk-IIBSUXGT.js";
5
+ } from "./chunk-EXOXZ5OU.js";
6
6
  import {
7
7
  ApiSwitchError,
8
8
  SAP_AI_PROVIDER_NAME,
@@ -16,7 +16,7 @@ import {
16
16
  sapAILanguageModelProviderOptions,
17
17
  validateEmbeddingModelParamsSettings,
18
18
  validateModelParamsSettings
19
- } from "./chunk-7OGNFVGC.js";
19
+ } from "./chunk-F4MUYVQJ.js";
20
20
 
21
21
  // src/sap-ai-embedding-model.ts
22
22
  import { parseProviderOptions } from "@ai-sdk/provider-utils";
@@ -51,21 +51,21 @@ function getOrCreateLanguageModelStrategy(api) {
51
51
  async function createEmbeddingModelStrategy(api) {
52
52
  if (api === "foundation-models") {
53
53
  const { AzureOpenAiEmbeddingClient } = await import("@sap-ai-sdk/foundation-models");
54
- const { FoundationModelsEmbeddingModelStrategy } = await import("./foundation-models-embedding-model-strategy-GXJRGM4X.js");
54
+ const { FoundationModelsEmbeddingModelStrategy } = await import("./foundation-models-embedding-model-strategy-3MMM3QDC.js");
55
55
  return new FoundationModelsEmbeddingModelStrategy(AzureOpenAiEmbeddingClient);
56
56
  }
57
57
  const { OrchestrationEmbeddingClient: OrchestrationEmbeddingClient2 } = await import("@sap-ai-sdk/orchestration");
58
- const { OrchestrationEmbeddingModelStrategy } = await import("./orchestration-embedding-model-strategy-663QYZL7.js");
58
+ const { OrchestrationEmbeddingModelStrategy } = await import("./orchestration-embedding-model-strategy-R6G6VVU6.js");
59
59
  return new OrchestrationEmbeddingModelStrategy(OrchestrationEmbeddingClient2);
60
60
  }
61
61
  async function createLanguageModelStrategy(api) {
62
62
  if (api === "foundation-models") {
63
63
  const { AzureOpenAiChatClient } = await import("@sap-ai-sdk/foundation-models");
64
- const { FoundationModelsLanguageModelStrategy } = await import("./foundation-models-language-model-strategy-FGUGQPBL.js");
64
+ const { FoundationModelsLanguageModelStrategy } = await import("./foundation-models-language-model-strategy-OPGTN6DA.js");
65
65
  return new FoundationModelsLanguageModelStrategy(AzureOpenAiChatClient);
66
66
  }
67
67
  const { OrchestrationClient: OrchestrationClient2 } = await import("@sap-ai-sdk/orchestration");
68
- const { OrchestrationLanguageModelStrategy } = await import("./orchestration-language-model-strategy-X3LKHORW.js");
68
+ const { OrchestrationLanguageModelStrategy } = await import("./orchestration-language-model-strategy-KFW3CFRY.js");
69
69
  return new OrchestrationLanguageModelStrategy(OrchestrationClient2);
70
70
  }
71
71
 
@@ -1,12 +1,12 @@
1
1
  import {createRequire as __createRequire} from 'module';var require=__createRequire(import.meta.url);
2
2
  import {
3
3
  BaseEmbeddingModelStrategy
4
- } from "./chunk-X66RDDSB.js";
4
+ } from "./chunk-NQJIUL3F.js";
5
5
  import {
6
6
  hasKeys,
7
7
  normalizeEmbedding
8
- } from "./chunk-M3AV2YUV.js";
9
- import "./chunk-7OGNFVGC.js";
8
+ } from "./chunk-4RRRJBEL.js";
9
+ import "./chunk-F4MUYVQJ.js";
10
10
 
11
11
  // src/orchestration-embedding-model-strategy.ts
12
12
  var OrchestrationEmbeddingModelStrategy = class extends BaseEmbeddingModelStrategy {
@@ -52,4 +52,4 @@ var OrchestrationEmbeddingModelStrategy = class extends BaseEmbeddingModelStrate
52
52
  export {
53
53
  OrchestrationEmbeddingModelStrategy
54
54
  };
55
- //# sourceMappingURL=orchestration-embedding-model-strategy-663QYZL7.js.map
55
+ //# sourceMappingURL=orchestration-embedding-model-strategy-R6G6VVU6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/orchestration-embedding-model-strategy.ts"],"sourcesContent":["/** Orchestration embedding model strategy using `@sap-ai-sdk/orchestration`. */\nimport type { EmbeddingModelV3Embedding } from \"@ai-sdk/provider\";\nimport type {\n EmbeddingModelConfig,\n EmbeddingModuleConfig,\n OrchestrationEmbeddingClient,\n OrchestrationEmbeddingResponse,\n} from \"@sap-ai-sdk/orchestration\";\n\nimport type { SAPAIEmbeddingSettings } from \"./sap-ai-settings.js\";\nimport type { EmbeddingModelStrategyConfig } from \"./sap-ai-strategy.js\";\n\nimport { BaseEmbeddingModelStrategy } from \"./base-embedding-model-strategy.js\";\nimport { type EmbeddingProviderOptions, hasKeys, normalizeEmbedding } from \"./strategy-utils.js\";\n\n/** @internal */\ntype OrchestrationEmbeddingClientClass = typeof OrchestrationEmbeddingClient;\n\n/**\n * Embedding model strategy for the Orchestration API.\n *\n * Provides support for:\n * - Data masking\n * - Model parameters configuration\n * @internal\n */\nexport class OrchestrationEmbeddingModelStrategy extends BaseEmbeddingModelStrategy<\n OrchestrationEmbeddingClient,\n OrchestrationEmbeddingResponse\n> {\n private readonly ClientClass: OrchestrationEmbeddingClientClass;\n\n constructor(ClientClass: OrchestrationEmbeddingClientClass) {\n super();\n this.ClientClass = ClientClass;\n }\n\n protected createClient(\n config: EmbeddingModelStrategyConfig,\n settings: SAPAIEmbeddingSettings,\n embeddingOptions: EmbeddingProviderOptions | undefined,\n ): OrchestrationEmbeddingClient {\n const mergedParams = this.mergeModelParams(settings, embeddingOptions);\n\n const embeddingConfig: EmbeddingModelConfig = {\n model: {\n name: config.modelId,\n ...(hasKeys(mergedParams) ? { params: mergedParams } : {}),\n ...(settings.modelVersion ? { version: settings.modelVersion } : {}),\n },\n };\n\n const moduleConfig: EmbeddingModuleConfig = {\n embeddings: embeddingConfig,\n ...(settings.masking && hasKeys(settings.masking) ? { masking: settings.masking } : {}),\n };\n\n return new this.ClientClass(moduleConfig, config.deploymentConfig, config.destination);\n }\n\n protected async executeCall(\n client: OrchestrationEmbeddingClient,\n values: string[],\n embeddingType: \"document\" | \"query\" | \"text\" | undefined,\n abortSignal?: AbortSignal,\n ): Promise<OrchestrationEmbeddingResponse> {\n return client.embed(\n { input: values, type: embeddingType },\n abortSignal ? { signal: abortSignal } : undefined,\n );\n }\n\n protected extractEmbeddings(\n response: OrchestrationEmbeddingResponse,\n ): EmbeddingModelV3Embedding[] {\n const embeddingData = response.getEmbeddings();\n const sortedEmbeddings = [...embeddingData].sort((a, b) => a.index - b.index);\n return sortedEmbeddings.map((data) => normalizeEmbedding(data.embedding));\n }\n\n protected extractTokenCount(response: OrchestrationEmbeddingResponse): number {\n const tokenUsage = response.getTokenUsage();\n return tokenUsage.total_tokens;\n }\n\n protected getUrl(): string {\n return \"sap-ai:orchestration/embeddings\";\n }\n}\n"],"mappings":";;;;;;;;;;;AA0BO,IAAM,sCAAN,cAAkD,2BAGvD;AAAA,EACiB;AAAA,EAEjB,YAAY,aAAgD;AAC1D,UAAM;AACN,SAAK,cAAc;AAAA,EACrB;AAAA,EAEU,aACR,QACA,UACA,kBAC8B;AAC9B,UAAM,eAAe,KAAK,iBAAiB,UAAU,gBAAgB;AAErE,UAAM,kBAAwC;AAAA,MAC5C,OAAO;AAAA,QACL,MAAM,OAAO;AAAA,QACb,GAAI,QAAQ,YAAY,IAAI,EAAE,QAAQ,aAAa,IAAI,CAAC;AAAA,QACxD,GAAI,SAAS,eAAe,EAAE,SAAS,SAAS,aAAa,IAAI,CAAC;AAAA,MACpE;AAAA,IACF;AAEA,UAAM,eAAsC;AAAA,MAC1C,YAAY;AAAA,MACZ,GAAI,SAAS,WAAW,QAAQ,SAAS,OAAO,IAAI,EAAE,SAAS,SAAS,QAAQ,IAAI,CAAC;AAAA,IACvF;AAEA,WAAO,IAAI,KAAK,YAAY,cAAc,OAAO,kBAAkB,OAAO,WAAW;AAAA,EACvF;AAAA,EAEA,MAAgB,YACd,QACA,QACA,eACA,aACyC;AACzC,WAAO,OAAO;AAAA,MACZ,EAAE,OAAO,QAAQ,MAAM,cAAc;AAAA,MACrC,cAAc,EAAE,QAAQ,YAAY,IAAI;AAAA,IAC1C;AAAA,EACF;AAAA,EAEU,kBACR,UAC6B;AAC7B,UAAM,gBAAgB,SAAS,cAAc;AAC7C,UAAM,mBAAmB,CAAC,GAAG,aAAa,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AAC5E,WAAO,iBAAiB,IAAI,CAAC,SAAS,mBAAmB,KAAK,SAAS,CAAC;AAAA,EAC1E;AAAA,EAEU,kBAAkB,UAAkD;AAC5E,UAAM,aAAa,SAAS,cAAc;AAC1C,WAAO,WAAW;AAAA,EACpB;AAAA,EAEU,SAAiB;AACzB,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -1,24 +1,24 @@
1
1
  import {createRequire as __createRequire} from 'module';var require=__createRequire(import.meta.url);
2
2
  import {
3
3
  BaseLanguageModelStrategy
4
- } from "./chunk-6BVUDEKZ.js";
4
+ } from "./chunk-DYFBCE2W.js";
5
5
  import {
6
6
  convertToSAPMessages
7
- } from "./chunk-IIBSUXGT.js";
7
+ } from "./chunk-EXOXZ5OU.js";
8
8
  import {
9
9
  buildModelParams,
10
10
  convertResponseFormat,
11
11
  convertToolsToSAPFormat,
12
12
  hasKeys,
13
13
  mapToolChoice
14
- } from "./chunk-M3AV2YUV.js";
14
+ } from "./chunk-4RRRJBEL.js";
15
15
  import {
16
16
  deepMerge,
17
17
  getProviderName,
18
18
  normalizeHeaders,
19
19
  orchestrationConfigRefSchema,
20
20
  sapAILanguageModelProviderOptions
21
- } from "./chunk-7OGNFVGC.js";
21
+ } from "./chunk-F4MUYVQJ.js";
22
22
 
23
23
  // src/orchestration-language-model-strategy.ts
24
24
  import { parseProviderOptions } from "@ai-sdk/provider-utils";
@@ -505,4 +505,4 @@ var OrchestrationLanguageModelStrategy = class extends BaseLanguageModelStrategy
505
505
  export {
506
506
  OrchestrationLanguageModelStrategy
507
507
  };
508
- //# sourceMappingURL=orchestration-language-model-strategy-X3LKHORW.js.map
508
+ //# sourceMappingURL=orchestration-language-model-strategy-KFW3CFRY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/orchestration-language-model-strategy.ts"],"sourcesContent":["/** Orchestration language model strategy using `@sap-ai-sdk/orchestration`. */\nimport type { LanguageModelV3CallOptions, SharedV3Warning } from \"@ai-sdk/provider\";\nimport type {\n ChatCompletionTool,\n ChatMessage,\n LlmModelParams,\n OrchestrationClient,\n OrchestrationConfigRef,\n OrchestrationModuleConfig,\n OrchestrationModuleConfigList,\n} from \"@sap-ai-sdk/orchestration\";\n\nimport { parseProviderOptions } from \"@ai-sdk/provider-utils\";\n\nimport type {\n OrchestrationModelSettings,\n PromptTemplateRef,\n PromptTemplateRefByID,\n} from \"./sap-ai-settings.js\";\nimport type { LanguageModelStrategyConfig } from \"./sap-ai-strategy.js\";\n\nimport {\n BaseLanguageModelStrategy,\n type CommonBuildResult,\n type StreamCallResponse,\n} from \"./base-language-model-strategy.js\";\nimport { convertToSAPMessages } from \"./convert-to-sap-messages.js\";\nimport { deepMerge } from \"./deep-merge.js\";\nimport { normalizeHeaders } from \"./sap-ai-error.js\";\nimport {\n getProviderName,\n orchestrationConfigRefSchema,\n sapAILanguageModelProviderOptions,\n} from \"./sap-ai-provider-options.js\";\nimport {\n buildModelParams,\n convertResponseFormat,\n convertToolsToSAPFormat,\n hasKeys,\n mapToolChoice,\n type ParamMapping,\n type SAPToolChoice,\n type SDKCitation,\n type SDKResponse,\n type SDKStreamChunk,\n} from \"./strategy-utils.js\";\n\n/**\n * Internal key for storing resolved configRef in sapOptions.\n * @internal\n */\nconst RESOLVED_CONFIG_REF_KEY = \"_resolvedConfigRef\" as const;\n\n/**\n * Internal key for storing resolved promptTemplateRef in sapOptions.\n * @internal\n */\nconst RESOLVED_PROMPT_TEMPLATE_REF_KEY = \"_resolvedPromptTemplateRef\" as const;\n\n/**\n * Internal key for storing resolved tools in sapOptions.\n * @internal\n */\nconst RESOLVED_TOOLS_KEY = \"_resolvedTools\" as const;\n\n/**\n * Extended prompt templating interface for type-safe access.\n * @internal\n */\ninterface ExtendedPromptTemplating {\n prompt: {\n response_format?: unknown;\n template?: unknown[];\n template_ref?: unknown;\n tools?: unknown;\n };\n}\n\n/** @internal */\ntype OrchestrationClientInstance = InstanceType<typeof OrchestrationClient>;\n\n/**\n * Orchestration request body type.\n * @internal\n */\ntype OrchestrationRequest = Record<string, unknown>;\n\n/**\n * SAP model parameters with orchestration-specific fields.\n * @internal\n */\ntype SAPModelParams = LlmModelParams & {\n parallel_tool_calls?: boolean;\n seed?: number;\n stop?: string[];\n top_k?: number;\n};\n\n/**\n * Builds the template_ref object from a PromptTemplateRef.\n * @param ref - Template reference (by ID or by name/scenario/version).\n * @returns The template_ref object for SDK consumption.\n * @internal\n */\nfunction buildTemplateRefObject(ref: PromptTemplateRef): Record<string, unknown> {\n return isTemplateRefById(ref)\n ? {\n id: ref.id,\n ...(ref.scope && { scope: ref.scope }),\n }\n : {\n name: ref.name,\n scenario: ref.scenario,\n version: ref.version,\n ...(ref.scope && { scope: ref.scope }),\n };\n}\n\n/**\n * Type guard for template reference by ID.\n * @param ref - Template reference.\n * @returns True if reference is by ID.\n * @internal\n */\nfunction isTemplateRefById(ref: PromptTemplateRef): ref is PromptTemplateRefByID {\n return \"id\" in ref;\n}\n\n/**\n * Merges and resolves placeholder values from settings and provider options.\n * @param settings - Model settings containing placeholderValues.\n * @param sapOptions - Provider options containing placeholderValues.\n * @returns Merged placeholder values or undefined if empty.\n * @internal\n */\nfunction resolvePlaceholderValues(\n settings: OrchestrationModelSettings,\n sapOptions: Record<string, unknown> | undefined,\n): Record<string, string> | undefined {\n const merged = deepMerge(\n settings.placeholderValues as Record<string, unknown> | undefined,\n sapOptions?.placeholderValues as Record<string, unknown> | undefined,\n ) as Record<string, string>;\n\n return hasKeys(merged) ? merged : undefined;\n}\n\n/**\n * Module keys for orchestration configuration.\n * @internal\n */\nconst ORCHESTRATION_MODULE_KEYS = [\"masking\", \"filtering\", \"grounding\", \"translation\"] as const;\n\n/**\n * Module settings that are ignored when using orchestrationConfigRef.\n * @internal\n */\nconst CONFIG_REF_IGNORED_MODULES = [\n ...ORCHESTRATION_MODULE_KEYS,\n \"promptTemplateRef\",\n \"responseFormat\",\n \"tools\",\n \"modelParams\",\n \"modelVersion\",\n] as const;\n\n/**\n * Provider options that are ignored when using orchestrationConfigRef.\n * Subset of CONFIG_REF_IGNORED_MODULES that can be passed via providerOptions.\n * @internal\n */\nconst CONFIG_REF_IGNORED_PROVIDER_OPTIONS = [\"promptTemplateRef\", \"modelParams\"] as const;\n\n/**\n * Copies non-empty orchestration modules from source to target.\n * @param target - Target object to copy modules into.\n * @param source - Source object containing module configurations.\n * @internal\n */\nfunction copyOrchestrationModules(\n target: Record<string, unknown>,\n source: Record<string, unknown>,\n): void {\n for (const key of ORCHESTRATION_MODULE_KEYS) {\n const value = source[key];\n if (value && hasKeys(value)) {\n target[key] = value;\n }\n }\n}\n\n/**\n * Checks if a value is a valid OrchestrationConfigRef.\n * @param value - The value to check.\n * @returns True if the value is a valid OrchestrationConfigRef.\n * @internal\n */\nfunction isOrchestrationConfigRef(value: unknown): value is OrchestrationConfigRef {\n return orchestrationConfigRefSchema.safeParse(value).success;\n}\n\n/**\n * Orchestration API parameter mappings.\n * @internal\n */\nconst ORCHESTRATION_PARAM_MAPPINGS: readonly ParamMapping[] = [\n ...BaseLanguageModelStrategy.COMMON_PARAM_MAPPINGS,\n { camelCaseKey: \"topK\", optionKey: \"topK\", outputKey: \"top_k\" },\n] as const;\n\n/**\n * Language model strategy for the Orchestration API.\n *\n * Provides support for:\n * - Content filtering\n * - Data masking\n * - Document grounding\n * - Translation\n * - Prompt templates\n * - Orchestration config references\n * @internal\n */\nexport class OrchestrationLanguageModelStrategy extends BaseLanguageModelStrategy<\n OrchestrationClientInstance,\n OrchestrationRequest,\n OrchestrationModelSettings\n> {\n private readonly ClientClass: typeof OrchestrationClient;\n\n constructor(ClientClass: typeof OrchestrationClient) {\n super();\n this.ClientClass = ClientClass;\n }\n\n /**\n * Builds common parts with orchestration-specific configRef resolution.\n *\n * Resolves configRef once and stores it in sapOptions for use by\n * createClient and buildRequest, avoiding duplicate resolution.\n * @param config - Strategy configuration.\n * @param settings - Model settings.\n * @param options - AI SDK call options.\n * @returns Common build result with resolved configRef in sapOptions.\n * @internal\n */\n protected override async buildCommonParts(\n config: LanguageModelStrategyConfig,\n settings: OrchestrationModelSettings,\n options: LanguageModelV3CallOptions,\n ): Promise<CommonBuildResult<ChatMessage[], SAPToolChoice | undefined>> {\n const providerName = getProviderName(config.provider);\n\n const sapOptions = await parseProviderOptions({\n provider: providerName,\n providerOptions: options.providerOptions,\n schema: sapAILanguageModelProviderOptions,\n });\n\n const configRef = this.resolveConfigRef(sapOptions, settings);\n const promptTemplateRef = this.resolvePromptTemplateRef(sapOptions, settings);\n\n const warnings: SharedV3Warning[] = [];\n\n const messages = convertToSAPMessages(options.prompt, {\n escapeTemplatePlaceholders: this.getEscapeTemplatePlaceholders(sapOptions, settings),\n includeReasoning: this.getIncludeReasoning(sapOptions, settings),\n });\n\n // In configRef mode, modelParams from settings/options are ignored (server-side config)\n // But we still build them to generate warnings for ignored settings\n const { modelParams, warnings: paramWarnings } = buildModelParams({\n options,\n paramMappings: this.getParamMappings(),\n providerModelParams: sapOptions?.modelParams,\n settingsModelParams: settings.modelParams,\n });\n warnings.push(...paramWarnings);\n\n const toolChoice = mapToolChoice(options.toolChoice);\n\n const tools = this.resolveTools(settings, options, warnings);\n\n return {\n messages,\n modelParams,\n providerName,\n sapOptions: {\n ...sapOptions,\n [RESOLVED_CONFIG_REF_KEY]: configRef,\n [RESOLVED_PROMPT_TEMPLATE_REF_KEY]: promptTemplateRef,\n [RESOLVED_TOOLS_KEY]: tools,\n },\n toolChoice,\n warnings,\n };\n }\n\n protected buildRequest(\n config: LanguageModelStrategyConfig,\n settings: OrchestrationModelSettings,\n options: LanguageModelV3CallOptions,\n commonParts: CommonBuildResult<ChatMessage[], SAPToolChoice | undefined>,\n ): { readonly request: OrchestrationRequest; readonly warnings: SharedV3Warning[] } {\n const warnings: SharedV3Warning[] = [];\n\n const configRef = commonParts.sapOptions?.[RESOLVED_CONFIG_REF_KEY] as\n | OrchestrationConfigRef\n | undefined;\n\n if (configRef) {\n return this.buildConfigRefRequest(settings, options, commonParts, configRef, warnings);\n }\n\n return this.buildStandardRequest(config, settings, options, commonParts, warnings);\n }\n\n /**\n * Collects stream-specific warnings for orchestration.\n * @param settings - Model settings.\n * @param sapOptions - Provider options.\n * @returns Array of warnings for streaming operations.\n * @internal\n */\n protected override collectStreamWarnings(\n settings: OrchestrationModelSettings,\n sapOptions?: Record<string, unknown>,\n ): SharedV3Warning[] {\n const warnings: SharedV3Warning[] = [];\n\n // Skip warning if a valid orchestrationConfigRef is set in settings or providerOptions\n // (local module settings are ignored when using server-side config)\n const configRefCandidate =\n sapOptions?.orchestrationConfigRef ?? settings.orchestrationConfigRef;\n if (configRefCandidate && isOrchestrationConfigRef(configRefCandidate)) {\n return warnings;\n }\n\n if (settings.translation && hasKeys(settings.translation)) {\n if (!settings.streamOptions?.delimiters || settings.streamOptions.delimiters.length === 0) {\n warnings.push({\n message:\n \"Translation module is configured but streamOptions.delimiters is not set. \" +\n \"For proper sentence boundary detection during streaming with translation, \" +\n \"consider setting delimiters (e.g., ['.', '!', '?', '\\\\n']).\",\n type: \"other\",\n });\n }\n }\n\n return warnings;\n }\n\n protected createClient(\n config: LanguageModelStrategyConfig,\n settings: OrchestrationModelSettings,\n commonParts: CommonBuildResult<ChatMessage[], SAPToolChoice | undefined>,\n ): OrchestrationClientInstance {\n const configRef = commonParts.sapOptions?.[RESOLVED_CONFIG_REF_KEY] as\n | OrchestrationConfigRef\n | undefined;\n\n if (configRef) {\n return new this.ClientClass(configRef, config.deploymentConfig, config.destination);\n }\n\n const promptTemplateRef = commonParts.sapOptions?.[RESOLVED_PROMPT_TEMPLATE_REF_KEY] as\n | PromptTemplateRef\n | undefined;\n\n const tools = commonParts.sapOptions?.[RESOLVED_TOOLS_KEY] as ChatCompletionTool[] | undefined;\n\n const promptConfig = promptTemplateRef\n ? this.buildTemplateRefPromptConfig(promptTemplateRef, tools)\n : this.buildInlineTemplateConfig(tools, undefined);\n\n const clientConfig: OrchestrationModuleConfig = {\n promptTemplating: {\n model: {\n name: config.modelId,\n ...(settings.modelVersion ? { version: settings.modelVersion } : {}),\n },\n prompt: promptConfig,\n },\n };\n\n if (settings.fallbackModuleConfigs && settings.fallbackModuleConfigs.length > 0) {\n const configList = [\n clientConfig,\n ...settings.fallbackModuleConfigs,\n ] as OrchestrationModuleConfigList;\n return new this.ClientClass(configList, config.deploymentConfig, config.destination);\n }\n\n return new this.ClientClass(clientConfig, config.deploymentConfig, config.destination);\n }\n\n protected async executeApiCall(\n client: OrchestrationClientInstance,\n request: OrchestrationRequest,\n abortSignal: AbortSignal | undefined,\n ): Promise<SDKResponse> {\n const response = await client.chatCompletion(\n request,\n abortSignal ? { signal: abortSignal } : undefined,\n );\n\n // Extract completion ID from SDK internal data (chatcmpl-xxx style).\n // Falls back to the pipeline request ID if not available.\n const completionId =\n (response as { _data?: { final_result?: { id?: string } } })._data?.final_result?.id ??\n response.getRequestId();\n\n return {\n getCitations: () =>\n (response as { getCitations?: () => SDKCitation[] | undefined }).getCitations?.(),\n getContent: () => response.getContent(),\n getFinishReason: () => response.getFinishReason(),\n getIntermediateFailures: () =>\n (\n response as { getIntermediateFailures?: () => undefined | unknown[] }\n ).getIntermediateFailures?.(),\n getTokenUsage: () => response.getTokenUsage(),\n getToolCalls: () => response.getToolCalls(),\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- SAP SDK types headers as any\n rawResponse: { headers: response.rawResponse.headers },\n responseId: completionId,\n };\n }\n\n protected async executeStreamCall(\n client: OrchestrationClientInstance,\n request: OrchestrationRequest,\n abortSignal: AbortSignal | undefined,\n settings: OrchestrationModelSettings,\n ): Promise<StreamCallResponse> {\n const sdkStreamOptions = this.buildSdkStreamOptions(settings.streamOptions);\n const streamResponse = await client.stream(request, abortSignal, sdkStreamOptions);\n\n // _data starts as {} and is populated during stream consumption;\n // final_result.id is undefined before the stream is consumed.\n const streamCompletionId = (streamResponse as { _data?: { final_result?: { id?: string } } })\n ._data?.final_result?.id;\n\n return {\n getCitations: () =>\n (streamResponse as { getCitations?: () => SDKCitation[] | undefined }).getCitations?.(),\n getFinishReason: () => streamResponse.getFinishReason(),\n getIntermediateFailures: () =>\n (\n streamResponse as { getIntermediateFailures?: () => undefined | unknown[] }\n ).getIntermediateFailures?.(),\n getTokenUsage: () => streamResponse.getTokenUsage(),\n responseHeaders: normalizeHeaders(streamResponse.rawResponse.headers),\n responseId: streamCompletionId,\n stream: streamResponse.stream as AsyncIterable<SDKStreamChunk>,\n };\n }\n\n protected getEscapeTemplatePlaceholders(\n sapOptions: Record<string, unknown> | undefined,\n settings: OrchestrationModelSettings,\n ): boolean {\n return (\n (sapOptions?.escapeTemplatePlaceholders as boolean | undefined) ??\n settings.escapeTemplatePlaceholders ??\n true\n );\n }\n\n protected getParamMappings(): readonly ParamMapping[] {\n return ORCHESTRATION_PARAM_MAPPINGS;\n }\n\n protected getUrl(): string {\n return \"sap-ai:orchestration\";\n }\n\n /**\n * Builds request for orchestrationConfigRef mode.\n *\n * In configRef mode, the full configuration is managed server-side.\n * We only send messages and placeholderValues.\n * @param settings - Model settings.\n * @param options - Call options.\n * @param commonParts - Common build result.\n * @param _configRef - The config reference (unused, passed for signature consistency).\n * @param warnings - Warnings array to populate.\n * @returns Request body and warnings.\n * @internal\n */\n private buildConfigRefRequest(\n settings: OrchestrationModelSettings,\n options: LanguageModelV3CallOptions,\n commonParts: CommonBuildResult<ChatMessage[], SAPToolChoice | undefined>,\n _configRef: OrchestrationConfigRef,\n warnings: SharedV3Warning[],\n ): { readonly request: OrchestrationRequest; readonly warnings: SharedV3Warning[] } {\n warnings.push(\n ...this.collectConfigRefIgnoredWarnings(settings, options, commonParts.sapOptions),\n );\n\n const placeholderValues = resolvePlaceholderValues(settings, commonParts.sapOptions);\n\n // In configRef mode, SDK uses messagesHistory (not messages)\n const request: OrchestrationRequest = {\n messagesHistory: commonParts.messages,\n ...(placeholderValues ? { placeholderValues } : {}),\n };\n\n return { request, warnings };\n }\n\n /**\n * Builds inline template configuration.\n * @param tools - Optional tools.\n * @param responseFormat - Optional response format.\n * @returns Prompt configuration.\n * @internal\n */\n private buildInlineTemplateConfig(\n tools: ChatCompletionTool[] | undefined,\n responseFormat: unknown,\n ): Record<string, unknown> {\n return {\n template: [],\n ...(tools && tools.length > 0 ? { tools } : {}),\n ...(responseFormat ? { response_format: responseFormat } : {}),\n };\n }\n\n /**\n * Builds the orchestration module configuration.\n * @param config - Strategy configuration.\n * @param settings - Model settings.\n * @param params - Build parameters.\n * @param params.modelParams - LLM model parameters.\n * @param params.promptTemplateRef - Optional prompt template reference.\n * @param params.responseFormat - Optional response format specification.\n * @param params.toolChoice - Optional tool choice specification.\n * @param params.tools - Optional tools for function calling.\n * @returns Orchestration module configuration.\n * @internal\n */\n private buildOrchestrationModuleConfig(\n config: LanguageModelStrategyConfig,\n settings: OrchestrationModelSettings,\n params: {\n readonly modelParams: SAPModelParams;\n readonly promptTemplateRef?: PromptTemplateRef;\n readonly responseFormat?: unknown;\n readonly toolChoice?: SAPToolChoice;\n readonly tools?: ChatCompletionTool[];\n },\n ): OrchestrationModuleConfig {\n const { modelParams, promptTemplateRef, responseFormat, toolChoice, tools } = params;\n\n const promptConfig = promptTemplateRef\n ? this.buildTemplateRefPromptConfig(promptTemplateRef, tools, responseFormat)\n : this.buildInlineTemplateConfig(tools, responseFormat);\n\n // Include tool_choice in model.params because the SDK filters request-level options.\n // Workaround for SAP AI SDK issue (may be fixed in future SDK versions).\n // See: https://github.com/SAP/ai-sdk-js/issues/1500\n const effectiveModelParams = toolChoice\n ? { ...modelParams, tool_choice: toolChoice }\n : modelParams;\n\n const moduleConfig: OrchestrationModuleConfig = {\n promptTemplating: {\n model: {\n name: config.modelId,\n params: effectiveModelParams,\n ...(settings.modelVersion ? { version: settings.modelVersion } : {}),\n },\n prompt: promptConfig,\n },\n };\n\n copyOrchestrationModules(\n moduleConfig as unknown as Record<string, unknown>,\n settings as unknown as Record<string, unknown>,\n );\n\n return moduleConfig;\n }\n\n /**\n * Builds the final request body for the orchestration API.\n * @param messages - Chat messages.\n * @param orchestrationConfig - Module configuration.\n * @param placeholderValues - Optional placeholder values.\n * @param hasTemplateRef - Whether template_ref mode is active.\n * @returns Request body.\n * @internal\n */\n private buildRequestBody(\n messages: ChatMessage[],\n orchestrationConfig: OrchestrationModuleConfig,\n placeholderValues: Record<string, string> | undefined,\n hasTemplateRef: boolean,\n ): Record<string, unknown> {\n const promptTemplating = orchestrationConfig.promptTemplating as ExtendedPromptTemplating;\n\n // In template_ref mode, SDK uses messagesHistory (not messages)\n // In inline template mode, SDK adds messages to the template array\n const messagesField = hasTemplateRef ? { messagesHistory: messages } : { messages };\n\n // Note: tool_choice is passed via model.params (not request level) because the SDK\n // filters out request-level options. Workaround may be removed when SDK is fixed.\n // See: https://github.com/SAP/ai-sdk-js/issues/1500\n const requestBody: Record<string, unknown> = {\n ...messagesField,\n model: {\n ...orchestrationConfig.promptTemplating.model,\n },\n ...(placeholderValues ? { placeholderValues } : {}),\n ...(promptTemplating.prompt.tools ? { tools: promptTemplating.prompt.tools } : {}),\n ...(promptTemplating.prompt.response_format\n ? { response_format: promptTemplating.prompt.response_format }\n : {}),\n };\n\n copyOrchestrationModules(\n requestBody,\n orchestrationConfig as unknown as Record<string, unknown>,\n );\n\n return requestBody;\n }\n\n /**\n * Builds SAP SDK stream options from user-facing stream options.\n * @param streamOptions - User-provided stream options.\n * @returns SDK-compatible stream options object.\n * @internal\n */\n private buildSdkStreamOptions(streamOptions: OrchestrationModelSettings[\"streamOptions\"]): {\n global?: { chunk_size?: number; delimiters?: string[] };\n outputFiltering?: { overlap: number };\n promptTemplating: { include_usage: boolean };\n } {\n const delimiters = streamOptions?.delimiters;\n const hasNonEmptyDelimiters = Array.isArray(delimiters) && delimiters.length > 0;\n const hasGlobalOptions = streamOptions?.chunkSize !== undefined || hasNonEmptyDelimiters;\n\n return {\n promptTemplating: { include_usage: true },\n ...(hasGlobalOptions && {\n global: {\n ...(streamOptions?.chunkSize !== undefined && { chunk_size: streamOptions.chunkSize }),\n ...(hasNonEmptyDelimiters && {\n delimiters: Array.from(delimiters),\n }),\n },\n }),\n ...(streamOptions?.outputFilteringOverlap !== undefined && {\n outputFiltering: { overlap: streamOptions.outputFilteringOverlap },\n }),\n };\n }\n\n /**\n * Builds request for standard (non-configRef) mode.\n * @param config - Strategy configuration.\n * @param settings - Model settings.\n * @param options - Call options.\n * @param commonParts - Common build result.\n * @param warnings - Warnings array to populate.\n * @returns Request body and warnings.\n * @internal\n */\n private buildStandardRequest(\n config: LanguageModelStrategyConfig,\n settings: OrchestrationModelSettings,\n options: LanguageModelV3CallOptions,\n commonParts: CommonBuildResult<ChatMessage[], SAPToolChoice | undefined>,\n warnings: SharedV3Warning[],\n ): { readonly request: OrchestrationRequest; readonly warnings: SharedV3Warning[] } {\n const tools = commonParts.sapOptions?.[RESOLVED_TOOLS_KEY] as ChatCompletionTool[] | undefined;\n\n const { responseFormat, warning: responseFormatWarning } = convertResponseFormat(\n options.responseFormat,\n settings.responseFormat,\n );\n if (responseFormatWarning) {\n warnings.push(responseFormatWarning);\n }\n\n const { toolChoice } = commonParts;\n\n const promptTemplateRef = commonParts.sapOptions?.[RESOLVED_PROMPT_TEMPLATE_REF_KEY] as\n | PromptTemplateRef\n | undefined;\n\n const orchestrationConfig = this.buildOrchestrationModuleConfig(config, settings, {\n modelParams: commonParts.modelParams,\n promptTemplateRef,\n responseFormat,\n toolChoice,\n tools,\n });\n\n const placeholderValues = resolvePlaceholderValues(settings, commonParts.sapOptions);\n\n const request = this.buildRequestBody(\n commonParts.messages,\n orchestrationConfig,\n placeholderValues,\n Boolean(promptTemplateRef),\n );\n\n return { request, warnings };\n }\n\n /**\n * Builds prompt configuration for template reference with optional tools/response_format.\n * @param ref - Template reference.\n * @param tools - Optional tools.\n * @param responseFormat - Optional response format.\n * @returns Prompt configuration.\n * @internal\n */\n private buildTemplateRefPromptConfig(\n ref: PromptTemplateRef,\n tools?: ChatCompletionTool[],\n responseFormat?: unknown,\n ): Record<string, unknown> {\n return {\n template_ref: buildTemplateRefObject(ref),\n ...(tools && tools.length > 0 ? { tools } : {}),\n ...(responseFormat ? { response_format: responseFormat } : {}),\n };\n }\n\n /**\n * Collects warnings for settings that will be ignored when using orchestrationConfigRef.\n * @param settings - The orchestration model settings.\n * @param options - The call options (for tools and responseFormat).\n * @param sapOptions - Parsed provider options (for promptTemplateRef in providerOptions).\n * @returns Array of warnings for ignored settings.\n * @internal\n */\n private collectConfigRefIgnoredWarnings(\n settings: OrchestrationModelSettings,\n options: LanguageModelV3CallOptions,\n sapOptions: Record<string, unknown> | undefined,\n ): SharedV3Warning[] {\n const warnings: SharedV3Warning[] = [];\n const ignoredSettings: string[] = [];\n\n for (const key of CONFIG_REF_IGNORED_MODULES) {\n const value = settings[key as keyof OrchestrationModelSettings];\n if (value !== undefined) {\n if (typeof value === \"object\" && Object.keys(value).length === 0) {\n continue; // Skip empty objects\n }\n ignoredSettings.push(key);\n }\n }\n\n for (const key of CONFIG_REF_IGNORED_PROVIDER_OPTIONS) {\n if (sapOptions?.[key] && !settings[key as keyof OrchestrationModelSettings]) {\n ignoredSettings.push(`providerOptions.${key}`);\n }\n }\n\n if (options.tools && options.tools.length > 0) {\n ignoredSettings.push(\"options.tools\");\n }\n if (options.responseFormat) {\n ignoredSettings.push(\"options.responseFormat\");\n }\n if (options.toolChoice) {\n ignoredSettings.push(\"options.toolChoice\");\n }\n\n if (ignoredSettings.length > 0) {\n warnings.push({\n message: `orchestrationConfigRef is set; the following local settings are ignored: ${ignoredSettings.join(\", \")}. The full configuration is managed by the referenced config.`,\n type: \"other\",\n });\n }\n\n return warnings;\n }\n\n /**\n * Resolves the orchestrationConfigRef from provider options or settings.\n * Provider options take priority over settings.\n * @param sapOptions - Parsed provider options from commonParts.\n * @param settings - The model settings.\n * @returns The resolved config reference or undefined.\n * @internal\n */\n private resolveConfigRef(\n sapOptions: Record<string, unknown> | undefined,\n settings: OrchestrationModelSettings,\n ): OrchestrationConfigRef | undefined {\n const configRefCandidate =\n sapOptions?.orchestrationConfigRef ?? settings.orchestrationConfigRef;\n\n if (configRefCandidate && isOrchestrationConfigRef(configRefCandidate)) {\n return configRefCandidate;\n }\n\n return undefined;\n }\n\n /**\n * Resolves promptTemplateRef from provider options or settings.\n *\n * Provider options take priority over settings.\n * @param sapOptions - Parsed provider options from commonParts.\n * @param settings - The model settings.\n * @returns The resolved prompt template reference or undefined.\n * @internal\n */\n private resolvePromptTemplateRef(\n sapOptions: Record<string, unknown> | undefined,\n settings: OrchestrationModelSettings,\n ): PromptTemplateRef | undefined {\n const rawTemplateRef = sapOptions?.promptTemplateRef ?? settings.promptTemplateRef;\n\n if (\n rawTemplateRef &&\n typeof rawTemplateRef === \"object\" &&\n (\"id\" in rawTemplateRef || \"name\" in rawTemplateRef)\n ) {\n return rawTemplateRef as PromptTemplateRef;\n }\n\n return undefined;\n }\n\n /**\n * Resolves tools from settings or options with orchestration-specific priority.\n *\n * Orchestration allows tools to be defined in settings (unlike Foundation Models),\n * with options.tools taking priority.\n * @param settings - Model settings.\n * @param options - Call options.\n * @param warnings - Warnings array to populate.\n * @returns Resolved tools or undefined.\n * @internal\n */\n private resolveTools(\n settings: OrchestrationModelSettings,\n options: LanguageModelV3CallOptions,\n warnings: SharedV3Warning[],\n ): ChatCompletionTool[] | undefined {\n const settingsTools = settings.tools;\n const optionsTools = options.tools;\n\n if (settingsTools && settingsTools.length > 0 && optionsTools && optionsTools.length > 0) {\n warnings.push({\n message:\n \"Both settings.tools and call options.tools were provided; preferring call options.tools.\",\n type: \"other\",\n });\n }\n\n // Use settingsTools directly if available and no optionsTools\n // (settingsTools are already in SAP format)\n if (settingsTools && settingsTools.length > 0 && (!optionsTools || optionsTools.length === 0)) {\n return settingsTools;\n }\n\n if (optionsTools && optionsTools.length > 0) {\n const result = convertToolsToSAPFormat<ChatCompletionTool>(optionsTools);\n warnings.push(...result.warnings);\n return result.tools;\n }\n\n return undefined;\n }\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jerome-benoit/sap-ai-provider",
3
- "version": "4.6.8",
3
+ "version": "4.6.9",
4
4
  "type": "module",
5
5
  "description": "SAP AI Provider for Vercel AI SDK (powered by @sap-ai-sdk/orchestration and @sap-ai-sdk/foundation-models)",
6
6
  "keywords": [
@@ -27,7 +27,7 @@
27
27
  "license": "Apache-2.0",
28
28
  "author": "jerome-benoit",
29
29
  "volta": {
30
- "node": "24.14.1"
30
+ "node": "24.15.0"
31
31
  },
32
32
  "main": "./dist/index.cjs",
33
33
  "module": "./dist/index.js",
@@ -76,31 +76,31 @@
76
76
  "type-check": "tsc --noEmit"
77
77
  },
78
78
  "dependencies": {
79
- "@ai-sdk/provider": "^3.0.8",
80
- "@ai-sdk/provider-utils": "^4.0.23",
81
- "@sap-ai-sdk/foundation-models": "^2.9.0",
82
- "@sap-ai-sdk/orchestration": "^2.9.0",
83
- "zod": "^4.3.6"
79
+ "@ai-sdk/provider": "^3.0.10",
80
+ "@ai-sdk/provider-utils": "^4.0.26",
81
+ "@sap-ai-sdk/foundation-models": "^2.10.0",
82
+ "@sap-ai-sdk/orchestration": "^2.10.0",
83
+ "zod": "^4.4.2"
84
84
  },
85
85
  "devDependencies": {
86
86
  "@edge-runtime/vm": "^5.0.0",
87
87
  "@eslint/js": "^10.0.1",
88
- "@types/node": "^25.5.2",
89
- "@vitest/coverage-v8": "^4.1.3",
90
- "dotenv": "^17.4.1",
91
- "eslint": "^10.2.0",
88
+ "@types/node": "^25.6.0",
89
+ "@vitest/coverage-v8": "^4.1.5",
90
+ "dotenv": "^17.4.2",
91
+ "eslint": "^10.3.0",
92
92
  "eslint-plugin-jsdoc": "^62.9.0",
93
- "eslint-plugin-perfectionist": "^5.8.0",
94
- "globals": "^17.4.0",
93
+ "eslint-plugin-perfectionist": "^5.9.0",
94
+ "globals": "^17.6.0",
95
95
  "markdown-link-check": "^3.14.2",
96
- "markdownlint-cli2": "^0.22.0",
96
+ "markdownlint-cli2": "^0.22.1",
97
97
  "mermaid-validate": "^1.3.2",
98
- "prettier": "^3.8.1",
98
+ "prettier": "^3.8.3",
99
99
  "tsup": "^8.5.1",
100
100
  "tsx": "^4.21.0",
101
- "typescript": "^6.0.2",
102
- "typescript-eslint": "^8.58.0",
103
- "vitest": "^4.1.3"
101
+ "typescript": "^6.0.3",
102
+ "typescript-eslint": "^8.59.1",
103
+ "vitest": "^4.1.5"
104
104
  },
105
105
  "peerDependencies": {
106
106
  "ai": "^5.0.0 || ^6.0.0"