@jerome-benoit/sap-ai-provider 4.7.0 → 4.8.0

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 (35) hide show
  1. package/README.md +26 -31
  2. package/dist/{chunk-TVXWNZQT.js → chunk-3ZSXTKOK.js} +607 -210
  3. package/dist/chunk-3ZSXTKOK.js.map +1 -0
  4. package/dist/{chunk-GMMX46AH.js → chunk-BVDSJ4IZ.js} +10 -4
  5. package/dist/chunk-BVDSJ4IZ.js.map +1 -0
  6. package/dist/{chunk-36DFHUVQ.js → chunk-H5KD4EPO.js} +8 -2
  7. package/dist/chunk-H5KD4EPO.js.map +1 -0
  8. package/dist/{chunk-WDUOKIKD.js → chunk-KVOLFUQJ.js} +4 -2
  9. package/dist/chunk-KVOLFUQJ.js.map +1 -0
  10. package/dist/{chunk-BZZJKLDG.js → chunk-TQXCNZBC.js} +11 -5
  11. package/dist/chunk-TQXCNZBC.js.map +1 -0
  12. package/dist/{foundation-models-embedding-model-strategy-YWPDIJEN.js → foundation-models-embedding-model-strategy-SWRJNFD4.js} +7 -6
  13. package/dist/foundation-models-embedding-model-strategy-SWRJNFD4.js.map +1 -0
  14. package/dist/{foundation-models-language-model-strategy-WDSQWU64.js → foundation-models-language-model-strategy-LRAC25ZY.js} +14 -9
  15. package/dist/foundation-models-language-model-strategy-LRAC25ZY.js.map +1 -0
  16. package/dist/index.cjs +658 -228
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.cts +24 -1
  19. package/dist/index.d.ts +24 -1
  20. package/dist/index.js +14 -10
  21. package/dist/index.js.map +1 -1
  22. package/dist/{orchestration-embedding-model-strategy-66QYAO64.js → orchestration-embedding-model-strategy-C5G735Q2.js} +8 -7
  23. package/dist/orchestration-embedding-model-strategy-C5G735Q2.js.map +1 -0
  24. package/dist/{orchestration-language-model-strategy-4TKRZK7U.js → orchestration-language-model-strategy-NUHYRIXH.js} +17 -10
  25. package/dist/orchestration-language-model-strategy-NUHYRIXH.js.map +1 -0
  26. package/package.json +19 -21
  27. package/dist/chunk-36DFHUVQ.js.map +0 -1
  28. package/dist/chunk-BZZJKLDG.js.map +0 -1
  29. package/dist/chunk-GMMX46AH.js.map +0 -1
  30. package/dist/chunk-TVXWNZQT.js.map +0 -1
  31. package/dist/chunk-WDUOKIKD.js.map +0 -1
  32. package/dist/foundation-models-embedding-model-strategy-YWPDIJEN.js.map +0 -1
  33. package/dist/foundation-models-language-model-strategy-WDSQWU64.js.map +0 -1
  34. package/dist/orchestration-embedding-model-strategy-66QYAO64.js.map +0 -1
  35. package/dist/orchestration-language-model-strategy-4TKRZK7U.js.map +0 -1
package/dist/index.d.cts CHANGED
@@ -1,6 +1,9 @@
1
1
  import { EmbeddingModelV3, EmbeddingModelV3CallOptions, EmbeddingModelV3Result, LanguageModelV3, LanguageModelV3CallOptions, LanguageModelV3GenerateResult, LanguageModelV3StreamResult, ProviderV3 } from '@ai-sdk/provider';
2
2
  import { DeploymentIdConfig, ResourceGroupConfig } from '@sap-ai-sdk/ai-api/internal.js';
3
+ import { CustomRequestConfig } from '@sap-ai-sdk/core';
4
+ export { CustomRequestConfig } from '@sap-ai-sdk/core';
3
5
  import { HttpDestinationOrFetchOptions } from '@sap-cloud-sdk/connectivity';
6
+ export { HttpDestinationOrFetchOptions } from '@sap-cloud-sdk/connectivity';
4
7
  import { AzureOpenAiChatCompletionParameters } from '@sap-ai-sdk/foundation-models';
5
8
  import { OrchestrationModuleConfig, FilteringModule, GroundingModule, MaskingModule, OrchestrationConfigRef, ChatCompletionTool, TranslationModule, ChatModel } from '@sap-ai-sdk/orchestration';
6
9
  export { AssistantChatMessage, ChatCompletionRequest, ChatCompletionTool, ChatMessage, ChatMessageContent, ChatMessages, Citation, DeveloperChatMessage, DocumentTranslationApplyToSelector, FileContent, FilteringModule, FunctionObject, GroundingModule, ImageContentUrl, LlmModelDetails, LlmModelParams, MaskingModule, OrchestrationClient, OrchestrationConfigRef, OrchestrationEmbeddingClient, OrchestrationEmbeddingResponse, OrchestrationError, OrchestrationErrorResponse, OrchestrationModuleConfig, OrchestrationModuleConfigList, OrchestrationResponse, OrchestrationStream, OrchestrationStreamChunkResponse, OrchestrationStreamResponse, PromptTemplatingModule, SystemChatMessage, ToolChatMessage, TranslationApplyToCategory, TranslationInputParameters, TranslationModule, TranslationOutputParameters, TranslationTargetLanguage, UserChatMessage, UserChatMessageContent, UserChatMessageContentItem, buildAzureContentSafetyFilter, buildDocumentGroundingConfig, buildDpiMaskingProvider, buildLlamaGuard38BFilter, buildTranslationConfig } from '@sap-ai-sdk/orchestration';
@@ -289,7 +292,7 @@ interface SAPAIEmbeddingSettings {
289
292
  *
290
293
  * Model availability depends on tenant configuration and region.
291
294
  * Common values include: `'gpt-4.1'`, `'gpt-4.1-mini'`, `'anthropic--claude-4.5-sonnet'`, `'gemini-2.5-pro'`.
292
- * @see {@link https://help.sap.com/docs/sap-ai-core/sap-ai-core-service-guide/models-and-scenarios-in-generative-ai-hub|SAP AI Core Models}
295
+ * @see {@link https://help.sap.com/docs/sap-ai-core/sap-ai-core-service-guide/models-and-scenarios-in-generative-ai-hub | SAP AI Core Models}
293
296
  */
294
297
  type SAPAIModelId = ChatModel;
295
298
  /**
@@ -310,6 +313,8 @@ interface SAPAISettings {
310
313
  /** @default true */
311
314
  readonly escapeTemplatePlaceholders?: boolean;
312
315
  /** Orchestration API only. */
316
+ readonly fallbackModuleConfigs?: OrchestrationModuleConfig[];
317
+ /** Orchestration API only. */
313
318
  readonly filtering?: FilteringModule;
314
319
  /** Orchestration API only. */
315
320
  readonly grounding?: GroundingModule;
@@ -362,6 +367,7 @@ interface SAPAIEmbeddingModelConfig {
362
367
  readonly destination?: HttpDestinationOrFetchOptions;
363
368
  readonly provider: string;
364
369
  readonly providerApi?: SAPAIApiType;
370
+ readonly requestConfig?: CustomRequestConfig;
365
371
  }
366
372
  /**
367
373
  * SAP AI Core Embedding Model implementing Vercel AI SDK EmbeddingModelV3.
@@ -480,6 +486,7 @@ interface SAPAILanguageModelConfig {
480
486
  readonly destination?: HttpDestinationOrFetchOptions;
481
487
  readonly provider: string;
482
488
  readonly providerApi?: SAPAIApiType;
489
+ readonly requestConfig?: CustomRequestConfig;
483
490
  }
484
491
  /**
485
492
  * SAP AI Language Model implementing Vercel AI SDK LanguageModelV3.
@@ -590,6 +597,21 @@ interface SAPAIProviderSettings {
590
597
  * @default 'sap-ai'
591
598
  */
592
599
  readonly name?: string;
600
+ /**
601
+ * Custom request configuration forwarded to the underlying SAP AI SDK client on every
602
+ * call created from this provider.
603
+ *
604
+ * Provider-level only (not overridable per-call via `providerOptions['sap-ai']`). The
605
+ * AI SDK `abortSignal` option always wins over any `signal` on `requestConfig`; the
606
+ * latter is dropped before the request is forwarded. Node-only knobs (`httpAgent`,
607
+ * `httpsAgent`) are silently ignored on Edge / Cloudflare Workers runtimes.
608
+ *
609
+ * See the "Note on `requestConfig`" section under `SAPAIProviderSettings` in
610
+ * `API_REFERENCE.md` for the full SAP AI Core `AI-*` header guidance.
611
+ * @see {@link https://sap.github.io/ai-sdk/docs/js/getting-started | SAP Cloud SDK for AI (JS)}
612
+ * @see {@link https://github.com/jerome-benoit/sap-ai-provider/blob/main/API_REFERENCE.md#requestconfig-note | Note on `requestConfig` (API_REFERENCE.md)}
613
+ */
614
+ readonly requestConfig?: CustomRequestConfig;
593
615
  /**
594
616
  * SAP AI Core resource group for resource isolation and access control.
595
617
  * @default 'default'
@@ -611,6 +633,7 @@ interface SAPAIProviderSettings {
611
633
  * @param options.destination - Custom SAP Cloud SDK destination configuration.
612
634
  * @param options.logLevel - Log level for SAP Cloud SDK loggers (`'debug'`, `'info'`, `'warn'`, `'error'`).
613
635
  * @param options.name - Provider name used as key in `providerOptions` (default: `'sap-ai'`).
636
+ * @param options.requestConfig - Provider-level custom request configuration. See {@link SAPAIProviderSettings.requestConfig} for scope, portability, and abort semantics.
614
637
  * @param options.resourceGroup - SAP AI Core resource group (default: `'default'`).
615
638
  * @param options.warnOnAmbiguousConfig - Whether to warn when both deploymentId and resourceGroup are set.
616
639
  * @returns A configured SAP AI provider instance that can be used as a callable or via methods.
package/dist/index.d.ts CHANGED
@@ -1,6 +1,9 @@
1
1
  import { EmbeddingModelV3, EmbeddingModelV3CallOptions, EmbeddingModelV3Result, LanguageModelV3, LanguageModelV3CallOptions, LanguageModelV3GenerateResult, LanguageModelV3StreamResult, ProviderV3 } from '@ai-sdk/provider';
2
2
  import { DeploymentIdConfig, ResourceGroupConfig } from '@sap-ai-sdk/ai-api/internal.js';
3
+ import { CustomRequestConfig } from '@sap-ai-sdk/core';
4
+ export { CustomRequestConfig } from '@sap-ai-sdk/core';
3
5
  import { HttpDestinationOrFetchOptions } from '@sap-cloud-sdk/connectivity';
6
+ export { HttpDestinationOrFetchOptions } from '@sap-cloud-sdk/connectivity';
4
7
  import { AzureOpenAiChatCompletionParameters } from '@sap-ai-sdk/foundation-models';
5
8
  import { OrchestrationModuleConfig, FilteringModule, GroundingModule, MaskingModule, OrchestrationConfigRef, ChatCompletionTool, TranslationModule, ChatModel } from '@sap-ai-sdk/orchestration';
6
9
  export { AssistantChatMessage, ChatCompletionRequest, ChatCompletionTool, ChatMessage, ChatMessageContent, ChatMessages, Citation, DeveloperChatMessage, DocumentTranslationApplyToSelector, FileContent, FilteringModule, FunctionObject, GroundingModule, ImageContentUrl, LlmModelDetails, LlmModelParams, MaskingModule, OrchestrationClient, OrchestrationConfigRef, OrchestrationEmbeddingClient, OrchestrationEmbeddingResponse, OrchestrationError, OrchestrationErrorResponse, OrchestrationModuleConfig, OrchestrationModuleConfigList, OrchestrationResponse, OrchestrationStream, OrchestrationStreamChunkResponse, OrchestrationStreamResponse, PromptTemplatingModule, SystemChatMessage, ToolChatMessage, TranslationApplyToCategory, TranslationInputParameters, TranslationModule, TranslationOutputParameters, TranslationTargetLanguage, UserChatMessage, UserChatMessageContent, UserChatMessageContentItem, buildAzureContentSafetyFilter, buildDocumentGroundingConfig, buildDpiMaskingProvider, buildLlamaGuard38BFilter, buildTranslationConfig } from '@sap-ai-sdk/orchestration';
@@ -289,7 +292,7 @@ interface SAPAIEmbeddingSettings {
289
292
  *
290
293
  * Model availability depends on tenant configuration and region.
291
294
  * Common values include: `'gpt-4.1'`, `'gpt-4.1-mini'`, `'anthropic--claude-4.5-sonnet'`, `'gemini-2.5-pro'`.
292
- * @see {@link https://help.sap.com/docs/sap-ai-core/sap-ai-core-service-guide/models-and-scenarios-in-generative-ai-hub|SAP AI Core Models}
295
+ * @see {@link https://help.sap.com/docs/sap-ai-core/sap-ai-core-service-guide/models-and-scenarios-in-generative-ai-hub | SAP AI Core Models}
293
296
  */
294
297
  type SAPAIModelId = ChatModel;
295
298
  /**
@@ -310,6 +313,8 @@ interface SAPAISettings {
310
313
  /** @default true */
311
314
  readonly escapeTemplatePlaceholders?: boolean;
312
315
  /** Orchestration API only. */
316
+ readonly fallbackModuleConfigs?: OrchestrationModuleConfig[];
317
+ /** Orchestration API only. */
313
318
  readonly filtering?: FilteringModule;
314
319
  /** Orchestration API only. */
315
320
  readonly grounding?: GroundingModule;
@@ -362,6 +367,7 @@ interface SAPAIEmbeddingModelConfig {
362
367
  readonly destination?: HttpDestinationOrFetchOptions;
363
368
  readonly provider: string;
364
369
  readonly providerApi?: SAPAIApiType;
370
+ readonly requestConfig?: CustomRequestConfig;
365
371
  }
366
372
  /**
367
373
  * SAP AI Core Embedding Model implementing Vercel AI SDK EmbeddingModelV3.
@@ -480,6 +486,7 @@ interface SAPAILanguageModelConfig {
480
486
  readonly destination?: HttpDestinationOrFetchOptions;
481
487
  readonly provider: string;
482
488
  readonly providerApi?: SAPAIApiType;
489
+ readonly requestConfig?: CustomRequestConfig;
483
490
  }
484
491
  /**
485
492
  * SAP AI Language Model implementing Vercel AI SDK LanguageModelV3.
@@ -590,6 +597,21 @@ interface SAPAIProviderSettings {
590
597
  * @default 'sap-ai'
591
598
  */
592
599
  readonly name?: string;
600
+ /**
601
+ * Custom request configuration forwarded to the underlying SAP AI SDK client on every
602
+ * call created from this provider.
603
+ *
604
+ * Provider-level only (not overridable per-call via `providerOptions['sap-ai']`). The
605
+ * AI SDK `abortSignal` option always wins over any `signal` on `requestConfig`; the
606
+ * latter is dropped before the request is forwarded. Node-only knobs (`httpAgent`,
607
+ * `httpsAgent`) are silently ignored on Edge / Cloudflare Workers runtimes.
608
+ *
609
+ * See the "Note on `requestConfig`" section under `SAPAIProviderSettings` in
610
+ * `API_REFERENCE.md` for the full SAP AI Core `AI-*` header guidance.
611
+ * @see {@link https://sap.github.io/ai-sdk/docs/js/getting-started | SAP Cloud SDK for AI (JS)}
612
+ * @see {@link https://github.com/jerome-benoit/sap-ai-provider/blob/main/API_REFERENCE.md#requestconfig-note | Note on `requestConfig` (API_REFERENCE.md)}
613
+ */
614
+ readonly requestConfig?: CustomRequestConfig;
593
615
  /**
594
616
  * SAP AI Core resource group for resource isolation and access control.
595
617
  * @default 'default'
@@ -611,6 +633,7 @@ interface SAPAIProviderSettings {
611
633
  * @param options.destination - Custom SAP Cloud SDK destination configuration.
612
634
  * @param options.logLevel - Log level for SAP Cloud SDK loggers (`'debug'`, `'info'`, `'warn'`, `'error'`).
613
635
  * @param options.name - Provider name used as key in `providerOptions` (default: `'sap-ai'`).
636
+ * @param options.requestConfig - Provider-level custom request configuration. See {@link SAPAIProviderSettings.requestConfig} for scope, portability, and abort semantics.
614
637
  * @param options.resourceGroup - SAP AI Core resource group (default: `'default'`).
615
638
  * @param options.warnOnAmbiguousConfig - Whether to warn when both deploymentId and resourceGroup are set.
616
639
  * @returns A configured SAP AI provider instance that can be used as a callable or via methods.
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  mergeSettingsWithApi,
4
4
  resolveApi,
5
5
  validateSettings
6
- } from "./chunk-WDUOKIKD.js";
6
+ } from "./chunk-KVOLFUQJ.js";
7
7
  import {
8
8
  escapeOrchestrationPlaceholders,
9
9
  unescapeOrchestrationPlaceholders
@@ -20,7 +20,7 @@ import {
20
20
  sapAILanguageModelProviderOptions,
21
21
  validateEmbeddingModelParamsSettings,
22
22
  validateModelParamsSettings
23
- } from "./chunk-TVXWNZQT.js";
23
+ } from "./chunk-3ZSXTKOK.js";
24
24
 
25
25
  // src/sap-ai-embedding-model.ts
26
26
  import { parseProviderOptions } from "@ai-sdk/provider-utils";
@@ -55,21 +55,21 @@ function getOrCreateLanguageModelStrategy(api) {
55
55
  async function createEmbeddingModelStrategy(api) {
56
56
  if (api === "foundation-models") {
57
57
  const { AzureOpenAiEmbeddingClient } = await import("@sap-ai-sdk/foundation-models");
58
- const { FoundationModelsEmbeddingModelStrategy } = await import("./foundation-models-embedding-model-strategy-YWPDIJEN.js");
58
+ const { FoundationModelsEmbeddingModelStrategy } = await import("./foundation-models-embedding-model-strategy-SWRJNFD4.js");
59
59
  return new FoundationModelsEmbeddingModelStrategy(AzureOpenAiEmbeddingClient);
60
60
  }
61
61
  const { OrchestrationEmbeddingClient: OrchestrationEmbeddingClient2 } = await import("@sap-ai-sdk/orchestration");
62
- const { OrchestrationEmbeddingModelStrategy } = await import("./orchestration-embedding-model-strategy-66QYAO64.js");
62
+ const { OrchestrationEmbeddingModelStrategy } = await import("./orchestration-embedding-model-strategy-C5G735Q2.js");
63
63
  return new OrchestrationEmbeddingModelStrategy(OrchestrationEmbeddingClient2);
64
64
  }
65
65
  async function createLanguageModelStrategy(api) {
66
66
  if (api === "foundation-models") {
67
67
  const { AzureOpenAiChatClient } = await import("@sap-ai-sdk/foundation-models");
68
- const { FoundationModelsLanguageModelStrategy } = await import("./foundation-models-language-model-strategy-WDSQWU64.js");
68
+ const { FoundationModelsLanguageModelStrategy } = await import("./foundation-models-language-model-strategy-LRAC25ZY.js");
69
69
  return new FoundationModelsLanguageModelStrategy(AzureOpenAiChatClient);
70
70
  }
71
71
  const { OrchestrationClient: OrchestrationClient2 } = await import("@sap-ai-sdk/orchestration");
72
- const { OrchestrationLanguageModelStrategy } = await import("./orchestration-language-model-strategy-4TKRZK7U.js");
72
+ const { OrchestrationLanguageModelStrategy } = await import("./orchestration-language-model-strategy-NUHYRIXH.js");
73
73
  return new OrchestrationLanguageModelStrategy(OrchestrationClient2);
74
74
  }
75
75
 
@@ -118,7 +118,8 @@ var SAPAIEmbeddingModel = class {
118
118
  deploymentConfig: this.config.deploymentConfig,
119
119
  destination: this.config.destination,
120
120
  modelId: this.modelId,
121
- provider: this.config.provider
121
+ provider: this.config.provider,
122
+ requestConfig: this.config.requestConfig
122
123
  };
123
124
  return strategy.doEmbed(strategyConfig, this.settings, options, this.maxEmbeddingsPerCall);
124
125
  }
@@ -201,7 +202,8 @@ var SAPAILanguageModel = class {
201
202
  deploymentConfig: this.config.deploymentConfig,
202
203
  destination: this.config.destination,
203
204
  modelId: this.modelId,
204
- provider: this.config.provider
205
+ provider: this.config.provider,
206
+ requestConfig: this.config.requestConfig
205
207
  };
206
208
  return { strategy, strategyConfig };
207
209
  }
@@ -241,7 +243,8 @@ function createSAPAIProvider(options = {}) {
241
243
  deploymentConfig,
242
244
  destination: options.destination,
243
245
  provider: `${providerName}.chat`,
244
- providerApi
246
+ providerApi,
247
+ requestConfig: options.requestConfig
245
248
  });
246
249
  };
247
250
  const createEmbeddingModel = (modelId, settings = {}) => {
@@ -257,7 +260,8 @@ function createSAPAIProvider(options = {}) {
257
260
  deploymentConfig,
258
261
  destination: options.destination,
259
262
  provider: `${providerName}.embedding`,
260
- providerApi
263
+ providerApi,
264
+ requestConfig: options.requestConfig
261
265
  });
262
266
  };
263
267
  const provider = function(modelId, settings) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/sap-ai-embedding-model.ts","../src/sap-ai-strategy.ts","../src/sap-ai-language-model.ts","../src/sap-ai-provider.ts","../src/sap-ai-settings.ts","../src/index.ts"],"sourcesContent":["/**\n * SAP AI Embedding Model - Vercel AI SDK EmbeddingModelV3 implementation for SAP AI Core.\n *\n * This module provides the embedding model implementation that connects to SAP AI Core\n * services (Orchestration API or Foundation Models API) to generate vector embeddings.\n * @see {@link https://sdk.vercel.ai/docs/reference/ai-sdk-core/embed | Vercel AI SDK embed()}\n * @see {@link https://sdk.vercel.ai/docs/reference/ai-sdk-core/embed-many | Vercel AI SDK embedMany()}\n */\nimport type {\n EmbeddingModelV3,\n EmbeddingModelV3CallOptions,\n EmbeddingModelV3Result,\n} from \"@ai-sdk/provider\";\nimport type { DeploymentIdConfig, ResourceGroupConfig } from \"@sap-ai-sdk/ai-api/internal.js\";\nimport type { HttpDestinationOrFetchOptions } from \"@sap-cloud-sdk/connectivity\";\n\nimport { parseProviderOptions } from \"@ai-sdk/provider-utils\";\n\nimport type { SAPAIApiType, SAPAIEmbeddingSettings } from \"./sap-ai-settings.js\";\n\nimport {\n getProviderName,\n sapAIEmbeddingProviderOptions,\n validateEmbeddingModelParamsSettings,\n} from \"./sap-ai-provider-options.js\";\nimport {\n type EmbeddingModelStrategyConfig,\n getOrCreateEmbeddingModelStrategy,\n} from \"./sap-ai-strategy.js\";\nimport { resolveApi, validateSettings } from \"./sap-ai-validation.js\";\n\nconst DEFAULT_MAX_EMBEDDINGS_PER_CALL = 2048;\n\n/**\n * Model identifier for SAP AI embedding models.\n *\n * Common embedding model IDs include:\n * - `\"text-embedding-3-small\"` - OpenAI small embedding model (recommended)\n * - `\"text-embedding-3-large\"` - OpenAI large embedding model\n *\n * The actual available models depend on your SAP AI Core deployment configuration.\n * @see {@link https://help.sap.com/docs/sap-ai-core | SAP AI Core Documentation}\n */\nexport type SAPAIEmbeddingModelId = string;\n\n/** @internal */\ninterface SAPAIEmbeddingModelConfig {\n readonly deploymentConfig: DeploymentIdConfig | ResourceGroupConfig;\n readonly destination?: HttpDestinationOrFetchOptions;\n readonly provider: string;\n readonly providerApi?: SAPAIApiType;\n}\n\n/**\n * SAP AI Core Embedding Model implementing Vercel AI SDK EmbeddingModelV3.\n *\n * This class provides embedding generation capabilities through SAP AI Core,\n * supporting both the Orchestration API and Foundation Models API.\n *\n * Users typically don't instantiate this class directly. Instead, use the\n * {@link createSAPAIProvider} factory function:\n * @example\n * ```typescript\n * import { createSAPAIProvider } from \"@jerome-benoit/sap-ai-provider\";\n * import { embed, embedMany } from \"ai\";\n *\n * const provider = createSAPAIProvider();\n * const embeddingModel = provider.embedding(\"text-embedding-3-small\");\n *\n * // Single embedding\n * const { embedding } = await embed({\n * model: embeddingModel,\n * value: \"Hello, world!\",\n * });\n *\n * // Multiple embeddings\n * const { embeddings } = await embedMany({\n * model: embeddingModel,\n * values: [\"Hello\", \"World\"],\n * });\n * ```\n * @see {@link https://sdk.vercel.ai/docs/ai-sdk-core/embeddings | Vercel AI SDK Embeddings}\n * @see {@link createSAPAIProvider} - Factory function to create provider instances\n */\nexport class SAPAIEmbeddingModel implements EmbeddingModelV3 {\n readonly maxEmbeddingsPerCall: number;\n readonly modelId: string;\n readonly provider: string;\n readonly specificationVersion = \"v3\" as const;\n readonly supportsParallelCalls: boolean = true;\n\n private readonly config: SAPAIEmbeddingModelConfig;\n private readonly settings: SAPAIEmbeddingSettings;\n\n /**\n * @param modelId - Model identifier.\n * @param settings - Model settings.\n * @param config - Model configuration.\n * @internal\n */\n constructor(\n modelId: SAPAIEmbeddingModelId,\n settings: SAPAIEmbeddingSettings = {},\n config: SAPAIEmbeddingModelConfig,\n ) {\n if (settings.modelParams) {\n validateEmbeddingModelParamsSettings(settings.modelParams);\n }\n this.modelId = modelId;\n this.settings = settings;\n this.config = config;\n this.provider = config.provider;\n this.maxEmbeddingsPerCall = settings.maxEmbeddingsPerCall ?? DEFAULT_MAX_EMBEDDINGS_PER_CALL;\n }\n\n async doEmbed(options: EmbeddingModelV3CallOptions): Promise<EmbeddingModelV3Result> {\n const providerName = getProviderName(this.config.provider);\n const sapOptions = await parseProviderOptions({\n provider: providerName,\n providerOptions: options.providerOptions,\n schema: sapAIEmbeddingProviderOptions,\n });\n\n const effectiveApi = resolveApi(this.config.providerApi, this.settings.api, sapOptions?.api);\n\n validateSettings({\n api: effectiveApi,\n embeddingSettings: this.settings,\n invocationSettings: sapOptions ? { api: sapOptions.api } : undefined,\n modelApi: this.settings.api,\n });\n\n const strategy = await getOrCreateEmbeddingModelStrategy(effectiveApi);\n\n const strategyConfig: EmbeddingModelStrategyConfig = {\n deploymentConfig: this.config.deploymentConfig,\n destination: this.config.destination,\n modelId: this.modelId,\n provider: this.config.provider,\n };\n\n return strategy.doEmbed(strategyConfig, this.settings, options, this.maxEmbeddingsPerCall);\n }\n}\n","/** Strategy pattern infrastructure for SAP AI Core API support. */\nimport type {\n EmbeddingModelV3CallOptions,\n EmbeddingModelV3Result,\n LanguageModelV3CallOptions,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamResult,\n} from \"@ai-sdk/provider\";\nimport type { DeploymentIdConfig, ResourceGroupConfig } from \"@sap-ai-sdk/ai-api/internal.js\";\nimport type { HttpDestinationOrFetchOptions } from \"@sap-cloud-sdk/connectivity\";\n\nimport type {\n SAPAIApiType,\n SAPAIEmbeddingSettings,\n SAPAIModelSettings,\n} from \"./sap-ai-settings.js\";\n\n/** @internal */\nexport interface EmbeddingModelAPIStrategy {\n doEmbed(\n config: EmbeddingModelStrategyConfig,\n settings: SAPAIEmbeddingSettings,\n options: EmbeddingModelV3CallOptions,\n maxEmbeddingsPerCall: number,\n ): Promise<EmbeddingModelV3Result>;\n}\n\n/** @internal */\nexport interface EmbeddingModelStrategyConfig {\n readonly deploymentConfig: DeploymentIdConfig | ResourceGroupConfig;\n readonly destination?: HttpDestinationOrFetchOptions;\n readonly modelId: string;\n readonly provider: string;\n}\n\n/**\n * Strategy interface for language model API implementations.\n * @template TSettings - The model settings type, defaults to SAPAIModelSettings for backward compatibility\n * @internal\n */\nexport interface LanguageModelAPIStrategy<\n TSettings extends SAPAIModelSettings = SAPAIModelSettings,\n> {\n doGenerate(\n config: LanguageModelStrategyConfig,\n settings: TSettings,\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult>;\n\n doStream(\n config: LanguageModelStrategyConfig,\n settings: TSettings,\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult>;\n}\n\n/** @internal */\nexport interface LanguageModelStrategyConfig {\n readonly deploymentConfig: DeploymentIdConfig | ResourceGroupConfig;\n readonly destination?: HttpDestinationOrFetchOptions;\n readonly modelId: string;\n readonly provider: string;\n}\n\n/** @internal */\nconst languageModelStrategyCache = new Map<SAPAIApiType, Promise<LanguageModelAPIStrategy>>();\n\n/** @internal */\nconst embeddingModelStrategyCache = new Map<SAPAIApiType, Promise<EmbeddingModelAPIStrategy>>();\n\n/** @internal */\nexport function clearStrategyCaches(): void {\n languageModelStrategyCache.clear();\n embeddingModelStrategyCache.clear();\n}\n\n/**\n * @returns Embedding model strategy cache size.\n * @internal\n */\nexport function getEmbeddingModelStrategyCacheSize(): number {\n return embeddingModelStrategyCache.size;\n}\n\n/**\n * @returns Language model strategy cache size.\n * @internal\n */\nexport function getLanguageModelStrategyCacheSize(): number {\n return languageModelStrategyCache.size;\n}\n\n/**\n * @param api - SAP AI API type.\n * @returns Embedding model strategy.\n * @internal\n */\nexport function getOrCreateEmbeddingModelStrategy(\n api: SAPAIApiType,\n): Promise<EmbeddingModelAPIStrategy> {\n const cached = embeddingModelStrategyCache.get(api);\n if (cached) {\n return cached;\n }\n\n // Cache the Promise synchronously before any await to prevent race conditions\n const strategyPromise = createEmbeddingModelStrategy(api);\n embeddingModelStrategyCache.set(api, strategyPromise);\n\n strategyPromise.catch(() => {\n embeddingModelStrategyCache.delete(api);\n });\n\n return strategyPromise;\n}\n\n/**\n * @param api - SAP AI API type.\n * @returns Language model strategy.\n * @internal\n */\nexport function getOrCreateLanguageModelStrategy(\n api: SAPAIApiType,\n): Promise<LanguageModelAPIStrategy> {\n const cached = languageModelStrategyCache.get(api);\n if (cached) {\n return cached;\n }\n\n // Cache the Promise synchronously before any await to prevent race conditions\n const strategyPromise = createLanguageModelStrategy(api);\n languageModelStrategyCache.set(api, strategyPromise);\n\n strategyPromise.catch(() => {\n languageModelStrategyCache.delete(api);\n });\n\n return strategyPromise;\n}\n\n/**\n * @param api - SAP AI API type.\n * @returns Embedding model strategy.\n */\nasync function createEmbeddingModelStrategy(api: SAPAIApiType): Promise<EmbeddingModelAPIStrategy> {\n if (api === \"foundation-models\") {\n const { AzureOpenAiEmbeddingClient } = await import(\"@sap-ai-sdk/foundation-models\");\n const { FoundationModelsEmbeddingModelStrategy } =\n await import(\"./foundation-models-embedding-model-strategy.js\");\n return new FoundationModelsEmbeddingModelStrategy(AzureOpenAiEmbeddingClient);\n }\n\n const { OrchestrationEmbeddingClient } = await import(\"@sap-ai-sdk/orchestration\");\n const { OrchestrationEmbeddingModelStrategy } =\n await import(\"./orchestration-embedding-model-strategy.js\");\n return new OrchestrationEmbeddingModelStrategy(OrchestrationEmbeddingClient);\n}\n\n/**\n * @param api - SAP AI API type.\n * @returns Language model strategy.\n */\nasync function createLanguageModelStrategy(api: SAPAIApiType): Promise<LanguageModelAPIStrategy> {\n if (api === \"foundation-models\") {\n const { AzureOpenAiChatClient } = await import(\"@sap-ai-sdk/foundation-models\");\n const { FoundationModelsLanguageModelStrategy } =\n await import(\"./foundation-models-language-model-strategy.js\");\n return new FoundationModelsLanguageModelStrategy(AzureOpenAiChatClient);\n }\n\n const { OrchestrationClient } = await import(\"@sap-ai-sdk/orchestration\");\n const { OrchestrationLanguageModelStrategy } =\n await import(\"./orchestration-language-model-strategy.js\");\n return new OrchestrationLanguageModelStrategy(OrchestrationClient);\n}\n","/**\n * SAP AI Language Model - Vercel AI SDK LanguageModelV3 implementation for SAP AI Core.\n *\n * This module provides the language model implementation that connects to SAP AI Core\n * services (Orchestration API or Foundation Models API) for chat completions and streaming.\n * @see {@link https://sdk.vercel.ai/docs/reference/ai-sdk-core/generate-text | Vercel AI SDK generateText()}\n * @see {@link https://sdk.vercel.ai/docs/reference/ai-sdk-core/stream-text | Vercel AI SDK streamText()}\n */\nimport type {\n LanguageModelV3,\n LanguageModelV3CallOptions,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamResult,\n} from \"@ai-sdk/provider\";\nimport type { DeploymentIdConfig, ResourceGroupConfig } from \"@sap-ai-sdk/ai-api/internal.js\";\nimport type { HttpDestinationOrFetchOptions } from \"@sap-cloud-sdk/connectivity\";\n\nimport { parseProviderOptions } from \"@ai-sdk/provider-utils\";\n\nimport type { SAPAIApiType, SAPAIModelId, SAPAISettings } from \"./sap-ai-settings.js\";\n\nimport {\n getProviderName,\n sapAILanguageModelProviderOptions,\n validateModelParamsSettings,\n} from \"./sap-ai-provider-options.js\";\nimport {\n getOrCreateLanguageModelStrategy,\n type LanguageModelAPIStrategy,\n type LanguageModelStrategyConfig,\n} from \"./sap-ai-strategy.js\";\nimport { resolveApi, validateSettings } from \"./sap-ai-validation.js\";\n\n/** @internal */\ninterface SAPAILanguageModelConfig {\n readonly deploymentConfig: DeploymentIdConfig | ResourceGroupConfig;\n readonly destination?: HttpDestinationOrFetchOptions;\n readonly provider: string;\n readonly providerApi?: SAPAIApiType;\n}\n\n/**\n * SAP AI Language Model implementing Vercel AI SDK LanguageModelV3.\n *\n * This class provides chat completion and streaming capabilities through SAP AI Core,\n * supporting both the Orchestration API (with content filtering, grounding, masking,\n * and translation) and Foundation Models API (direct Azure OpenAI access).\n *\n * Users typically don't instantiate this class directly. Instead, use the\n * {@link createSAPAIProvider} factory function:\n * @example\n * ```typescript\n * import { createSAPAIProvider } from \"@jerome-benoit/sap-ai-provider\";\n * import { generateText, streamText } from \"ai\";\n *\n * const provider = createSAPAIProvider();\n * const model = provider(\"gpt-4.1\");\n *\n * // Non-streaming\n * const { text } = await generateText({\n * model,\n * prompt: \"Hello!\",\n * });\n *\n * // Streaming\n * const result = streamText({\n * model,\n * prompt: \"Tell me a story\",\n * });\n *\n * for await (const chunk of result.textStream) {\n * process.stdout.write(chunk);\n * }\n * ```\n * @see {@link https://sdk.vercel.ai/docs/ai-sdk-core/generating-text | Vercel AI SDK Text Generation}\n * @see {@link createSAPAIProvider} - Factory function to create provider instances\n */\nexport class SAPAILanguageModel implements LanguageModelV3 {\n readonly modelId: SAPAIModelId;\n readonly specificationVersion = \"v3\";\n\n get provider(): string {\n return this.config.provider;\n }\n\n get supportedUrls(): Record<string, RegExp[]> {\n return {\n \"image/*\": [/^https:\\/\\/.+$/i, /^data:image\\/.*$/],\n };\n }\n\n /** @internal */\n private readonly config: SAPAILanguageModelConfig;\n\n /** @internal */\n private readonly settings: SAPAISettings;\n\n /**\n * @param modelId - Model identifier.\n * @param settings - Model settings.\n * @param config - Model configuration.\n * @internal\n */\n constructor(modelId: SAPAIModelId, settings: SAPAISettings, config: SAPAILanguageModelConfig) {\n if (settings.modelParams) {\n validateModelParamsSettings(settings.modelParams);\n }\n this.settings = settings;\n this.config = config;\n this.modelId = modelId;\n }\n\n async doGenerate(options: LanguageModelV3CallOptions): Promise<LanguageModelV3GenerateResult> {\n const { strategy, strategyConfig } = await this.prepareInvocation(options);\n return strategy.doGenerate(strategyConfig, this.settings, options);\n }\n\n async doStream(options: LanguageModelV3CallOptions): Promise<LanguageModelV3StreamResult> {\n const { strategy, strategyConfig } = await this.prepareInvocation(options);\n return strategy.doStream(strategyConfig, this.settings, options);\n }\n\n supportsUrl(url: URL): boolean {\n if (url.protocol === \"https:\") return true;\n if (url.protocol === \"data:\") {\n return /^data:image\\//i.test(url.href);\n }\n return false;\n }\n\n /**\n * Prepares common invocation context for doGenerate and doStream.\n * @param options - AI SDK call options.\n * @returns Strategy and configuration for the invocation.\n * @internal\n */\n private async prepareInvocation(options: LanguageModelV3CallOptions): Promise<{\n strategy: LanguageModelAPIStrategy;\n strategyConfig: LanguageModelStrategyConfig;\n }> {\n const providerName = getProviderName(this.config.provider);\n const sapOptions = await parseProviderOptions({\n provider: providerName,\n providerOptions: options.providerOptions,\n schema: sapAILanguageModelProviderOptions,\n });\n\n const effectiveApi = resolveApi(this.config.providerApi, this.settings.api, sapOptions?.api);\n\n validateSettings({\n api: effectiveApi,\n invocationSettings: sapOptions\n ? {\n api: sapOptions.api,\n escapeTemplatePlaceholders: sapOptions.escapeTemplatePlaceholders,\n orchestrationConfigRef: sapOptions.orchestrationConfigRef,\n placeholderValues: sapOptions.placeholderValues,\n promptTemplateRef: sapOptions.promptTemplateRef,\n }\n : undefined,\n modelApi: this.settings.api,\n modelSettings: this.settings,\n });\n\n const strategy = await getOrCreateLanguageModelStrategy(effectiveApi);\n\n const strategyConfig: LanguageModelStrategyConfig = {\n deploymentConfig: this.config.deploymentConfig,\n destination: this.config.destination,\n modelId: this.modelId,\n provider: this.config.provider,\n };\n\n return { strategy, strategyConfig };\n }\n}\n","import type { DeploymentIdConfig, ResourceGroupConfig } from \"@sap-ai-sdk/ai-api/internal.js\";\nimport type { HttpDestinationOrFetchOptions } from \"@sap-cloud-sdk/connectivity\";\n\nimport { NoSuchModelError, ProviderV3 } from \"@ai-sdk/provider\";\nimport { setGlobalLogLevel } from \"@sap-cloud-sdk/util\";\n\nimport { SAPAIEmbeddingModel, SAPAIEmbeddingModelId } from \"./sap-ai-embedding-model.js\";\nimport { SAPAILanguageModel } from \"./sap-ai-language-model.js\";\nimport {\n SAP_AI_PROVIDER_NAME,\n validateEmbeddingModelParamsSettings,\n validateModelParamsSettings,\n} from \"./sap-ai-provider-options.js\";\nimport {\n SAPAIApiType,\n SAPAIEmbeddingSettings,\n SAPAIModelId,\n SAPAISettings,\n} from \"./sap-ai-settings.js\";\nimport { mergeSettingsWithApi } from \"./sap-ai-validation.js\";\n\n/** SAP AI Core deployment configuration: either a deployment ID or a resource group. */\nexport type DeploymentConfig = DeploymentIdConfig | ResourceGroupConfig;\n\n/** SAP AI Provider interface extending Vercel AI SDK ProviderV3. */\nexport interface SAPAIProvider extends ProviderV3 {\n (modelId: SAPAIModelId, settings?: SAPAISettings): SAPAILanguageModel;\n chat(modelId: SAPAIModelId, settings?: SAPAISettings): SAPAILanguageModel;\n embedding(modelId: SAPAIEmbeddingModelId, settings?: SAPAIEmbeddingSettings): SAPAIEmbeddingModel;\n embeddingModel(\n modelId: SAPAIEmbeddingModelId,\n settings?: SAPAIEmbeddingSettings,\n ): SAPAIEmbeddingModel;\n /** Always throws - SAP AI Core does not support image generation. */\n imageModel(modelId: string): never;\n languageModel(modelId: SAPAIModelId, settings?: SAPAISettings): SAPAILanguageModel;\n /** @deprecated Use `embeddingModel()` instead. */\n textEmbeddingModel(\n modelId: SAPAIEmbeddingModelId,\n settings?: SAPAIEmbeddingSettings,\n ): SAPAIEmbeddingModel;\n}\n\n/**\n * Configuration settings for the SAP AI Provider.\n * See {@link createSAPAIProvider} for authentication details.\n */\nexport interface SAPAIProviderSettings {\n /**\n * SAP AI Core API to use for all models created by this provider.\n * Can be overridden at model creation time or per-call via providerOptions.\n * - `'orchestration'` (default): SAP AI Core Orchestration API - supports filtering, grounding, masking, translation\n * - `'foundation-models'`: SAP AI Core Foundation Models API - supports dataSources, logprobs, seed, etc.\n * @default 'orchestration'\n */\n readonly api?: SAPAIApiType;\n\n /** Default model settings applied to every model instance. Per-call settings override these. */\n readonly defaultSettings?: SAPAISettings;\n\n /** SAP AI Core deployment ID. If not provided, the SDK resolves deployment automatically. */\n readonly deploymentId?: string;\n\n /** Custom destination configuration for SAP AI Core. */\n readonly destination?: HttpDestinationOrFetchOptions;\n\n /**\n * Log level for SAP Cloud SDK loggers.\n * Controls verbosity of internal SAP SDK logging (e.g., authentication, service binding).\n * Note: SAP_CLOUD_SDK_LOG_LEVEL environment variable takes precedence if set.\n * @default 'warn'\n */\n readonly logLevel?: \"debug\" | \"error\" | \"info\" | \"warn\";\n\n /**\n * Provider name used as key for `providerOptions` and `providerMetadata`.\n * @default 'sap-ai'\n */\n readonly name?: string;\n\n /**\n * SAP AI Core resource group for resource isolation and access control.\n * @default 'default'\n */\n readonly resourceGroup?: string;\n\n /** Whether to emit warnings for ambiguous configurations (e.g. both deploymentId and resourceGroup). */\n readonly warnOnAmbiguousConfig?: boolean;\n}\n\n/**\n * Creates an SAP AI Provider instance for use with the Vercel AI SDK.\n *\n * Uses the official SAP AI SDK (`@sap-ai-sdk/orchestration` and\n * `@sap-ai-sdk/foundation-models`) for API communication. Authentication is automatic via service binding\n * (VCAP_SERVICES on SAP BTP) or AICORE_SERVICE_KEY environment variable.\n * @param options - Provider configuration options.\n * @param options.api - Default API type: `'orchestration'` (default) or `'foundation-models'`.\n * @param options.defaultSettings - Default model settings applied to every model instance.\n * @param options.deploymentId - SAP AI Core deployment ID for automatic deployment resolution.\n * @param options.destination - Custom SAP Cloud SDK destination configuration.\n * @param options.logLevel - Log level for SAP Cloud SDK loggers (`'debug'`, `'info'`, `'warn'`, `'error'`).\n * @param options.name - Provider name used as key in `providerOptions` (default: `'sap-ai'`).\n * @param options.resourceGroup - SAP AI Core resource group (default: `'default'`).\n * @param options.warnOnAmbiguousConfig - Whether to warn when both deploymentId and resourceGroup are set.\n * @returns A configured SAP AI provider instance that can be used as a callable or via methods.\n * @example\n * // Basic usage with defaults\n * const provider = createSAPAIProvider();\n * const model = provider('gpt-4.1');\n * @example\n * // With custom configuration\n * const provider = createSAPAIProvider({\n * api: 'foundation-models',\n * resourceGroup: 'production',\n * defaultSettings: { modelParams: { temperature: 0.7 } },\n * });\n * @example\n * // Using provider methods\n * const chatModel = provider.chat('gpt-4.1');\n * const embeddingModel = provider.embedding('text-embedding-3-small');\n * @throws {Error} When provider function is called with the `new` keyword.\n * @throws {NoSuchModelError} When `imageModel()` is called (image generation not supported).\n * @see {@link SAPAIProviderSettings} for all configuration options.\n * @see {@link SAPAIProvider} for the provider interface.\n */\nexport function createSAPAIProvider(options: SAPAIProviderSettings = {}): SAPAIProvider {\n if (options.defaultSettings?.modelParams) {\n validateModelParamsSettings(options.defaultSettings.modelParams);\n }\n\n const providerName = options.name ?? SAP_AI_PROVIDER_NAME;\n\n const resourceGroup = options.resourceGroup ?? \"default\";\n\n const warnOnAmbiguousConfig = options.warnOnAmbiguousConfig ?? true;\n\n if (warnOnAmbiguousConfig && options.deploymentId && options.resourceGroup) {\n console.warn(\n \"createSAPAIProvider: both 'deploymentId' and 'resourceGroup' were provided; using 'deploymentId' and ignoring 'resourceGroup'.\",\n );\n }\n\n if (!process.env.SAP_CLOUD_SDK_LOG_LEVEL) {\n const logLevel = options.logLevel ?? \"warn\";\n setGlobalLogLevel(logLevel);\n }\n\n const providerApi = options.api ?? \"orchestration\";\n\n const deploymentConfig: DeploymentConfig = options.deploymentId\n ? { deploymentId: options.deploymentId }\n : { resourceGroup };\n\n const createModel = (modelId: SAPAIModelId, settings: SAPAISettings = {}) => {\n if (settings.modelParams) {\n validateModelParamsSettings(settings.modelParams);\n }\n\n const mergedSettings = mergeSettingsWithApi(\n options.defaultSettings as Record<string, unknown> | undefined,\n settings,\n providerApi,\n );\n\n return new SAPAILanguageModel(modelId, mergedSettings, {\n deploymentConfig,\n destination: options.destination,\n provider: `${providerName}.chat`,\n providerApi,\n });\n };\n\n const createEmbeddingModel = (\n modelId: SAPAIEmbeddingModelId,\n settings: SAPAIEmbeddingSettings = {},\n ): SAPAIEmbeddingModel => {\n if (settings.modelParams) {\n validateEmbeddingModelParamsSettings(settings.modelParams);\n }\n\n const mergedSettings = mergeSettingsWithApi(\n options.defaultSettings as Record<string, unknown> | undefined,\n settings,\n providerApi,\n );\n\n return new SAPAIEmbeddingModel(modelId, mergedSettings, {\n deploymentConfig,\n destination: options.destination,\n provider: `${providerName}.embedding`,\n providerApi,\n });\n };\n\n const provider = function (modelId: SAPAIModelId, settings?: SAPAISettings) {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (new.target) {\n throw new Error(\"The SAP AI provider function cannot be called with the new keyword.\");\n }\n\n return createModel(modelId, settings);\n };\n\n provider.specificationVersion = \"v3\";\n provider.chat = createModel;\n provider.languageModel = createModel;\n provider.embedding = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.embeddingModel = createEmbeddingModel;\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({\n message: `SAP AI Core does not support image generation. Model '${modelId}' is not available.`,\n modelId,\n modelType: \"imageModel\",\n });\n };\n\n return provider as SAPAIProvider;\n}\n\n/** Default SAP AI provider instance with automatic authentication via SAP AI SDK. */\nexport const sapai = createSAPAIProvider();\n","import type { AzureOpenAiChatCompletionParameters } from \"@sap-ai-sdk/foundation-models\";\nimport type {\n ChatCompletionTool,\n ChatModel,\n FilteringModule,\n GroundingModule,\n MaskingModule,\n OrchestrationConfigRef,\n OrchestrationModuleConfig,\n TranslationModule,\n} from \"@sap-ai-sdk/orchestration\";\n\n/** Azure OpenAI chat extension configuration for \"On Your Data\" RAG scenarios. */\nexport type AzureOpenAiChatExtensionConfiguration = NonNullable<\n AzureOpenAiChatCompletionParameters[\"data_sources\"]\n>[number];\n\n/**\n * Common model parameters shared between both APIs.\n *\n * These parameters control text generation behavior and are validated by Zod schemas\n * when passed via `providerOptions`.\n */\nexport interface CommonModelParams {\n /**\n * Frequency penalty to reduce repetition of token sequences.\n * Range: -2.0 to 2.0\n */\n readonly frequencyPenalty?: number;\n /**\n * Maximum number of tokens to generate.\n * Range: Positive integer\n */\n readonly maxTokens?: number;\n /**\n * Number of completions to generate.\n * Not supported by Amazon/Anthropic models.\n * Range: Positive integer\n */\n readonly n?: number;\n /** Whether to enable parallel tool calls when multiple tools are available. */\n readonly parallel_tool_calls?: boolean;\n /**\n * Presence penalty to encourage talking about new topics.\n * Range: -2.0 to 2.0\n */\n readonly presencePenalty?: number;\n /** Index signature for additional model-specific parameters. */\n readonly [key: string]: unknown;\n /**\n * Sampling temperature controlling randomness.\n * Higher values (e.g., 1.0) make output more random, lower values (e.g., 0.2) more deterministic.\n * Range: 0 to 2\n */\n readonly temperature?: number;\n /**\n * Nucleus sampling parameter. Only tokens with cumulative probability up to `topP` are considered.\n * Range: 0 to 1\n */\n readonly topP?: number;\n}\n\n/** Default settings configuration when using Foundation Models API. */\nexport interface FoundationModelsDefaultSettings {\n readonly api: \"foundation-models\";\n readonly settings?: FoundationModelsModelSettings;\n}\n\n/** Model parameters for Foundation Models Embedding API. */\nexport interface FoundationModelsEmbeddingParams {\n readonly dimensions?: number;\n readonly encoding_format?: \"base64\" | \"float\";\n readonly user?: string;\n}\n\n/** Model parameters for Foundation Models API with Azure OpenAI-specific extensions. */\nexport interface FoundationModelsModelParams extends CommonModelParams {\n readonly logit_bias?: AzureOpenAiChatCompletionParameters[\"logit_bias\"];\n readonly logprobs?: AzureOpenAiChatCompletionParameters[\"logprobs\"];\n readonly seed?: AzureOpenAiChatCompletionParameters[\"seed\"];\n readonly stop?: AzureOpenAiChatCompletionParameters[\"stop\"];\n /** Requires logprobs=true. */\n readonly top_logprobs?: AzureOpenAiChatCompletionParameters[\"top_logprobs\"];\n readonly user?: AzureOpenAiChatCompletionParameters[\"user\"];\n}\n\n/** Model settings when using Foundation Models API. */\nexport interface FoundationModelsModelSettings {\n readonly api: \"foundation-models\";\n /** Azure OpenAI \"On Your Data\" configuration for RAG scenarios. */\n readonly dataSources?: AzureOpenAiChatExtensionConfiguration[];\n /** @default false */\n readonly includeReasoning?: boolean;\n readonly modelParams?: FoundationModelsModelParams;\n readonly modelVersion?: string;\n readonly responseFormat?: ResponseFormat;\n}\n\n/** Default settings configuration when using Orchestration API. */\nexport interface OrchestrationDefaultSettings {\n readonly api?: \"orchestration\";\n readonly settings?: OrchestrationModelSettings;\n}\n\n/** Model parameters for Orchestration API. */\nexport type OrchestrationModelParams = CommonModelParams;\n\n/** Model settings when using Orchestration API with filtering, grounding, masking, and translation. */\nexport interface OrchestrationModelSettings {\n readonly api?: \"orchestration\";\n /** @default true */\n readonly escapeTemplatePlaceholders?: boolean;\n /**\n * Additional module configurations for prompt module fallback.\n * The SDK tries the primary configuration first, then each fallback in order until one succeeds.\n * Each entry is a full `OrchestrationModuleConfig` with its own model, prompt, and modules.\n * @example\n * ```ts\n * fallbackModuleConfigs: [\n * {\n * promptTemplating: {\n * model: { name: \"gpt-4.1-mini\" },\n * prompt: { template: [] },\n * },\n * },\n * ]\n * ```\n */\n readonly fallbackModuleConfigs?: OrchestrationModuleConfig[];\n readonly filtering?: FilteringModule;\n readonly grounding?: GroundingModule;\n /** @default false */\n readonly includeReasoning?: boolean;\n readonly masking?: MaskingModule | { providers: MaskingModule[\"masking_providers\"] };\n readonly modelParams?: OrchestrationModelParams;\n readonly modelVersion?: string;\n /**\n * Reference to a complete orchestration configuration stored in SAP AI Core Prompt Registry.\n * When provided, local module settings (filtering, masking, grounding, translation, tools,\n * promptTemplateRef, responseFormat) are ignored as the full configuration is managed\n * by the referenced config. Only `placeholderValues` and messages are passed through.\n * @example { id: \"f47ac10b-58cc-4372-a567-0e02b2c3d479\" }\n * @example { scenario: \"customer-support\", name: \"prod-config\", version: \"1.0.0\" }\n */\n readonly orchestrationConfigRef?: OrchestrationConfigRef;\n readonly placeholderValues?: Record<string, string>;\n readonly promptTemplateRef?: PromptTemplateRef;\n readonly responseFormat?: ResponseFormat;\n /**\n * Options for streaming behavior with post-LLM modules.\n * Only applies when using `streamText()` with orchestration modules.\n */\n readonly streamOptions?: OrchestrationStreamOptions;\n readonly tools?: ChatCompletionTool[];\n readonly translation?: TranslationModule;\n}\n\n/**\n * Stream options for orchestration post-LLM module processing.\n * Controls chunking behavior for translation, filtering, and other modules during streaming.\n */\nexport interface OrchestrationStreamOptions {\n /**\n * Minimum number of characters per chunk for post-LLM modules.\n * Valid range: 1-10000. Defaults to 100.\n */\n readonly chunkSize?: number;\n /**\n * Delimiters for splitting stream into chunks (e.g., sentence boundaries).\n * Required when translation module is configured.\n * @example [\"\\n\", \".\", \"?\", \"!\"]\n */\n readonly delimiters?: readonly string[];\n /**\n * Additional characters from previous chunks sent to output filtering for context.\n * Valid range: 0-10000.\n */\n readonly outputFilteringOverlap?: number;\n}\n\n/** Reference to a template in SAP AI Core's Prompt Registry. */\nexport type PromptTemplateRef = PromptTemplateRefByID | PromptTemplateRefByScenarioNameVersion;\n\n/** Reference to a Prompt Registry template by ID. */\nexport interface PromptTemplateRefByID {\n readonly id: string;\n readonly scope?: PromptTemplateScope;\n}\n\n/** Reference to a Prompt Registry template by scenario, name, and version. */\nexport interface PromptTemplateRefByScenarioNameVersion {\n readonly name: string;\n readonly scenario: string;\n readonly scope?: PromptTemplateScope;\n readonly version: string;\n}\n\n/** Scope for Prompt Registry templates: 'tenant' (default) or 'resource_group'. */\nexport type PromptTemplateScope = \"resource_group\" | \"tenant\";\n\n/** Response format for structured output (OpenAI-compatible). */\nexport type ResponseFormat = AzureOpenAiChatCompletionParameters[\"response_format\"];\n\n/**\n * Supported API types for SAP AI Core.\n *\n * - `'orchestration'` - Full-featured API with data masking, content filtering, document grounding, and translation.\n * - `'foundation-models'` - Direct model access with Azure OpenAI-specific parameters like `logprobs`, `seed`, and `dataSources`.\n */\nexport type SAPAIApiType = \"foundation-models\" | \"orchestration\";\n\n/** Union type for API-specific default settings configuration. */\nexport type SAPAIDefaultSettingsConfig =\n | FoundationModelsDefaultSettings\n | OrchestrationDefaultSettings;\n\n/** Settings for the SAP AI Embedding Model. */\nexport interface SAPAIEmbeddingSettings {\n readonly api?: SAPAIApiType;\n /** Orchestration API only. */\n readonly masking?: MaskingModule | { providers: MaskingModule[\"masking_providers\"] };\n /** @default 2048 */\n readonly maxEmbeddingsPerCall?: number;\n readonly modelParams?: FoundationModelsEmbeddingParams | Record<string, unknown>;\n readonly modelVersion?: string;\n readonly [key: string]: unknown;\n /** @default 'text' */\n readonly type?: \"document\" | \"query\" | \"text\";\n}\n\n/**\n * Supported model IDs in SAP AI Core.\n *\n * Model availability depends on tenant configuration and region.\n * Common values include: `'gpt-4.1'`, `'gpt-4.1-mini'`, `'anthropic--claude-4.5-sonnet'`, `'gemini-2.5-pro'`.\n * @see {@link https://help.sap.com/docs/sap-ai-core/sap-ai-core-service-guide/models-and-scenarios-in-generative-ai-hub|SAP AI Core Models}\n */\nexport type SAPAIModelId = ChatModel;\n\n/**\n * Union type for model settings - supports both APIs.\n *\n * Use `FoundationModelsModelSettings` for Foundation Models API features (dataSources, logprobs, seed).\n * Use `OrchestrationModelSettings` for Orchestration API features (filtering, grounding, masking, translation).\n */\nexport type SAPAIModelSettings = FoundationModelsModelSettings | OrchestrationModelSettings;\n\n/** Re-exported Azure OpenAI types from `@sap-ai-sdk/foundation-models`. */\nexport type {\n AzureOpenAiChatCompletionParameters,\n AzureOpenAiChatCompletionRequestAssistantMessage,\n AzureOpenAiChatCompletionRequestMessage,\n AzureOpenAiChatCompletionRequestSystemMessage,\n AzureOpenAiChatCompletionRequestToolMessage,\n AzureOpenAiChatCompletionRequestUserMessage,\n AzureOpenAiChatCompletionTool,\n AzureOpenAiEmbeddingParameters,\n AzureOpenAiFunctionObject,\n} from \"@sap-ai-sdk/foundation-models\";\n\n/** Re-exported SAP AI SDK orchestration types. */\nexport type {\n FilteringModule,\n GroundingModule,\n MaskingModule,\n TranslationModule,\n} from \"@sap-ai-sdk/orchestration\";\n\nexport {\n buildAzureContentSafetyFilter,\n buildDocumentGroundingConfig,\n buildDpiMaskingProvider,\n buildLlamaGuard38BFilter,\n buildTranslationConfig,\n} from \"@sap-ai-sdk/orchestration\";\n\n/**\n * Settings for configuring SAP AI Core model behavior.\n * Legacy interface maintained for backward compatibility - prefer OrchestrationModelSettings\n * or FoundationModelsModelSettings for API-specific type safety.\n */\nexport interface SAPAISettings {\n readonly api?: SAPAIApiType;\n /** @default true */\n readonly escapeTemplatePlaceholders?: boolean;\n /** Orchestration API only. */\n readonly filtering?: FilteringModule;\n /** Orchestration API only. */\n readonly grounding?: GroundingModule;\n /** @default false */\n readonly includeReasoning?: boolean;\n /** Orchestration API only. */\n readonly masking?: MaskingModule | { providers: MaskingModule[\"masking_providers\"] };\n readonly modelParams?: CommonModelParams;\n readonly modelVersion?: string;\n /** Orchestration API only. */\n readonly orchestrationConfigRef?: OrchestrationConfigRef;\n /** Orchestration API only. */\n readonly placeholderValues?: Record<string, string>;\n /** Orchestration API only. */\n readonly promptTemplateRef?: PromptTemplateRef;\n readonly responseFormat?: ResponseFormat;\n /** Orchestration API only. */\n readonly streamOptions?: OrchestrationStreamOptions;\n /** Orchestration API only. */\n readonly tools?: ChatCompletionTool[];\n /** Orchestration API only. */\n readonly translation?: TranslationModule;\n}\n\nexport type {\n AssistantChatMessage,\n ChatCompletionRequest,\n ChatCompletionTool,\n ChatMessage,\n ChatMessageContent,\n ChatMessages,\n Citation,\n DeveloperChatMessage,\n DocumentTranslationApplyToSelector,\n FileContent,\n FunctionObject,\n ImageContentUrl,\n LlmModelDetails,\n LlmModelParams,\n OrchestrationConfigRef,\n OrchestrationError,\n OrchestrationModuleConfig,\n OrchestrationModuleConfigList,\n PromptTemplatingModule,\n SystemChatMessage,\n ToolChatMessage,\n TranslationApplyToCategory,\n TranslationInputParameters,\n TranslationOutputParameters,\n TranslationTargetLanguage,\n UserChatMessage,\n UserChatMessageContent,\n UserChatMessageContentItem,\n} from \"@sap-ai-sdk/orchestration\";\n\nexport {\n OrchestrationEmbeddingResponse,\n OrchestrationResponse,\n OrchestrationStream,\n OrchestrationStreamChunkResponse,\n OrchestrationStreamResponse,\n} from \"@sap-ai-sdk/orchestration\";\n","/**\n * `@jerome-benoit/sap-ai-provider`\n *\n * Vercel AI SDK provider for SAP AI Core.\n * Wraps the SAP AI SDK to provide Vercel AI SDK-compatible interfaces.\n */\n\n/**\n * Utility functions for escaping template delimiters (`{{`, `{%`, `{#`) in orchestration content.\n */\nexport {\n escapeOrchestrationPlaceholders,\n unescapeOrchestrationPlaceholders,\n} from \"./convert-to-sap-messages.js\";\n\n/**\n * Embedding model class for generating vector embeddings via SAP AI Core.\n */\nexport { SAPAIEmbeddingModel } from \"./sap-ai-embedding-model.js\";\n\nexport type { SAPAIEmbeddingModelId } from \"./sap-ai-embedding-model.js\";\n\n/**\n * Custom error classes for Foundation Models API support.\n * - `UnsupportedFeatureError`: Thrown when a feature is used with an incompatible API.\n * - `ApiSwitchError`: Thrown when attempting to switch APIs at invocation time with conflicting settings.\n */\nexport { ApiSwitchError, UnsupportedFeatureError } from \"./sap-ai-error.js\";\n\n/**\n * Language model class for chat/text completions via SAP AI Core.\n */\nexport { SAPAILanguageModel } from \"./sap-ai-language-model.js\";\n\n/**\n * Provider options for per-call configuration.\n *\n * These schemas and types enable runtime validation of provider options\n * passed via `providerOptions['sap-ai']` in Vercel AI SDK calls.\n */\nexport {\n getProviderName,\n SAP_AI_PROVIDER_NAME,\n sapAIEmbeddingProviderOptions,\n sapAILanguageModelProviderOptions,\n} from \"./sap-ai-provider-options.js\";\n\nexport type {\n SAPAIEmbeddingProviderOptions,\n SAPAILanguageModelProviderOptions,\n} from \"./sap-ai-provider-options.js\";\n\n/**\n * Provider factory function and pre-configured default instance.\n */\nexport { createSAPAIProvider, sapai } from \"./sap-ai-provider.js\";\n\nexport type { DeploymentConfig, SAPAIProvider, SAPAIProviderSettings } from \"./sap-ai-provider.js\";\n\n/**\n * Model settings types and model identifier type definitions.\n */\nexport type {\n AzureOpenAiChatExtensionConfiguration,\n CommonModelParams,\n FoundationModelsDefaultSettings,\n FoundationModelsEmbeddingParams,\n FoundationModelsModelParams,\n FoundationModelsModelSettings,\n OrchestrationDefaultSettings,\n OrchestrationModelParams,\n OrchestrationModelSettings,\n OrchestrationStreamOptions,\n PromptTemplateRef,\n PromptTemplateRefByID,\n PromptTemplateRefByScenarioNameVersion,\n PromptTemplateScope,\n ResponseFormat,\n SAPAIApiType,\n SAPAIDefaultSettingsConfig,\n SAPAIEmbeddingSettings,\n SAPAIModelId,\n SAPAIModelSettings,\n SAPAISettings,\n} from \"./sap-ai-settings.js\";\n\n/**\n * SAP AI SDK types and utilities.\n *\n * Re-exported for convenience and advanced usage scenarios.\n */\nexport type {\n AssistantChatMessage,\n ChatCompletionRequest,\n ChatCompletionTool,\n ChatMessage,\n ChatMessageContent,\n ChatMessages,\n Citation,\n DeveloperChatMessage,\n DocumentTranslationApplyToSelector,\n FileContent,\n FilteringModule,\n FunctionObject,\n GroundingModule,\n ImageContentUrl,\n LlmModelDetails,\n LlmModelParams,\n MaskingModule,\n OrchestrationConfigRef,\n OrchestrationError,\n OrchestrationModuleConfig,\n OrchestrationModuleConfigList,\n PromptTemplatingModule,\n SystemChatMessage,\n ToolChatMessage,\n TranslationApplyToCategory,\n TranslationInputParameters,\n TranslationModule,\n TranslationOutputParameters,\n TranslationTargetLanguage,\n UserChatMessage,\n UserChatMessageContent,\n UserChatMessageContentItem,\n} from \"./sap-ai-settings.js\";\n\n/**\n * Helper functions for building configurations.\n */\nexport {\n buildAzureContentSafetyFilter,\n buildDocumentGroundingConfig,\n buildDpiMaskingProvider,\n buildLlamaGuard38BFilter,\n buildTranslationConfig,\n} from \"./sap-ai-settings.js\";\n\n/**\n * Response classes from the SAP AI SDK for orchestration results.\n */\nexport {\n OrchestrationEmbeddingResponse,\n OrchestrationResponse,\n OrchestrationStream,\n OrchestrationStreamChunkResponse,\n OrchestrationStreamResponse,\n} from \"./sap-ai-settings.js\";\n\n/**\n * Validation utilities for API selection and feature compatibility.\n * - `resolveApi`: Resolves API type from provider/model/invocation precedence chain.\n * - `validateSettings`: Validates settings are compatible with the selected API.\n */\nexport { resolveApi, validateSettings } from \"./sap-ai-validation.js\";\n\n/**\n * Package version, injected at build time.\n */\nexport { VERSION } from \"./version.js\";\n\n/**\n * Error handling types and classes for SAP AI Core error responses.\n */\nexport type { OrchestrationErrorResponse } from \"@sap-ai-sdk/orchestration\";\n\n/**\n * Direct access to SAP AI SDK OrchestrationClient.\n *\n * For advanced users who need to use the SAP AI SDK directly.\n */\nexport { OrchestrationClient, OrchestrationEmbeddingClient } from \"@sap-ai-sdk/orchestration\";\n"],"mappings":"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","names":["OrchestrationEmbeddingClient","OrchestrationClient","parseProviderOptions","parseProviderOptions"]}
1
+ {"version":3,"sources":["../src/sap-ai-embedding-model.ts","../src/sap-ai-strategy.ts","../src/sap-ai-language-model.ts","../src/sap-ai-provider.ts","../src/sap-ai-settings.ts","../src/index.ts"],"sourcesContent":["/**\n * SAP AI Embedding Model - Vercel AI SDK EmbeddingModelV3 implementation for SAP AI Core.\n *\n * This module provides the embedding model implementation that connects to SAP AI Core\n * services (Orchestration API or Foundation Models API) to generate vector embeddings.\n * @see {@link https://sdk.vercel.ai/docs/reference/ai-sdk-core/embed | Vercel AI SDK embed()}\n * @see {@link https://sdk.vercel.ai/docs/reference/ai-sdk-core/embed-many | Vercel AI SDK embedMany()}\n */\nimport type {\n EmbeddingModelV3,\n EmbeddingModelV3CallOptions,\n EmbeddingModelV3Result,\n} from \"@ai-sdk/provider\";\nimport type { DeploymentIdConfig, ResourceGroupConfig } from \"@sap-ai-sdk/ai-api/internal.js\";\nimport type { CustomRequestConfig } from \"@sap-ai-sdk/core\";\nimport type { HttpDestinationOrFetchOptions } from \"@sap-cloud-sdk/connectivity\";\n\nimport { parseProviderOptions } from \"@ai-sdk/provider-utils\";\n\nimport type { SAPAIApiType, SAPAIEmbeddingSettings } from \"./sap-ai-settings.js\";\n\nimport {\n getProviderName,\n sapAIEmbeddingProviderOptions,\n validateEmbeddingModelParamsSettings,\n} from \"./sap-ai-provider-options.js\";\nimport {\n type EmbeddingModelStrategyConfig,\n getOrCreateEmbeddingModelStrategy,\n} from \"./sap-ai-strategy.js\";\nimport { resolveApi, validateSettings } from \"./sap-ai-validation.js\";\n\nconst DEFAULT_MAX_EMBEDDINGS_PER_CALL = 2048;\n\n/**\n * Model identifier for SAP AI embedding models.\n *\n * Common embedding model IDs include:\n * - `\"text-embedding-3-small\"` - OpenAI small embedding model (recommended)\n * - `\"text-embedding-3-large\"` - OpenAI large embedding model\n *\n * The actual available models depend on your SAP AI Core deployment configuration.\n * @see {@link https://help.sap.com/docs/sap-ai-core | SAP AI Core Documentation}\n */\nexport type SAPAIEmbeddingModelId = string;\n\n/** @internal */\ninterface SAPAIEmbeddingModelConfig {\n readonly deploymentConfig: DeploymentIdConfig | ResourceGroupConfig;\n readonly destination?: HttpDestinationOrFetchOptions;\n readonly provider: string;\n readonly providerApi?: SAPAIApiType;\n readonly requestConfig?: CustomRequestConfig;\n}\n\n/**\n * SAP AI Core Embedding Model implementing Vercel AI SDK EmbeddingModelV3.\n *\n * This class provides embedding generation capabilities through SAP AI Core,\n * supporting both the Orchestration API and Foundation Models API.\n *\n * Users typically don't instantiate this class directly. Instead, use the\n * {@link createSAPAIProvider} factory function:\n * @example\n * ```typescript\n * import { createSAPAIProvider } from \"@jerome-benoit/sap-ai-provider\";\n * import { embed, embedMany } from \"ai\";\n *\n * const provider = createSAPAIProvider();\n * const embeddingModel = provider.embedding(\"text-embedding-3-small\");\n *\n * // Single embedding\n * const { embedding } = await embed({\n * model: embeddingModel,\n * value: \"Hello, world!\",\n * });\n *\n * // Multiple embeddings\n * const { embeddings } = await embedMany({\n * model: embeddingModel,\n * values: [\"Hello\", \"World\"],\n * });\n * ```\n * @see {@link https://sdk.vercel.ai/docs/ai-sdk-core/embeddings | Vercel AI SDK Embeddings}\n * @see {@link createSAPAIProvider} - Factory function to create provider instances\n */\nexport class SAPAIEmbeddingModel implements EmbeddingModelV3 {\n readonly maxEmbeddingsPerCall: number;\n readonly modelId: string;\n readonly provider: string;\n readonly specificationVersion = \"v3\" as const;\n readonly supportsParallelCalls: boolean = true;\n\n private readonly config: SAPAIEmbeddingModelConfig;\n private readonly settings: SAPAIEmbeddingSettings;\n\n /**\n * @param modelId - Model identifier.\n * @param settings - Model settings.\n * @param config - Model configuration.\n * @internal\n */\n constructor(\n modelId: SAPAIEmbeddingModelId,\n settings: SAPAIEmbeddingSettings = {},\n config: SAPAIEmbeddingModelConfig,\n ) {\n if (settings.modelParams) {\n validateEmbeddingModelParamsSettings(settings.modelParams);\n }\n this.modelId = modelId;\n this.settings = settings;\n this.config = config;\n this.provider = config.provider;\n this.maxEmbeddingsPerCall = settings.maxEmbeddingsPerCall ?? DEFAULT_MAX_EMBEDDINGS_PER_CALL;\n }\n\n async doEmbed(options: EmbeddingModelV3CallOptions): Promise<EmbeddingModelV3Result> {\n const providerName = getProviderName(this.config.provider);\n const sapOptions = await parseProviderOptions({\n provider: providerName,\n providerOptions: options.providerOptions,\n schema: sapAIEmbeddingProviderOptions,\n });\n\n const effectiveApi = resolveApi(this.config.providerApi, this.settings.api, sapOptions?.api);\n\n validateSettings({\n api: effectiveApi,\n embeddingSettings: this.settings,\n invocationSettings: sapOptions ? { api: sapOptions.api } : undefined,\n modelApi: this.settings.api,\n });\n\n const strategy = await getOrCreateEmbeddingModelStrategy(effectiveApi);\n\n const strategyConfig: EmbeddingModelStrategyConfig = {\n deploymentConfig: this.config.deploymentConfig,\n destination: this.config.destination,\n modelId: this.modelId,\n provider: this.config.provider,\n requestConfig: this.config.requestConfig,\n };\n\n return strategy.doEmbed(strategyConfig, this.settings, options, this.maxEmbeddingsPerCall);\n }\n}\n","/** Strategy pattern infrastructure for SAP AI Core API support. */\nimport type {\n EmbeddingModelV3CallOptions,\n EmbeddingModelV3Result,\n LanguageModelV3CallOptions,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamResult,\n} from \"@ai-sdk/provider\";\nimport type { DeploymentIdConfig, ResourceGroupConfig } from \"@sap-ai-sdk/ai-api/internal.js\";\nimport type { CustomRequestConfig } from \"@sap-ai-sdk/core\";\nimport type { HttpDestinationOrFetchOptions } from \"@sap-cloud-sdk/connectivity\";\n\nimport type {\n SAPAIApiType,\n SAPAIEmbeddingSettings,\n SAPAIModelSettings,\n} from \"./sap-ai-settings.js\";\n\n/** @internal */\nexport interface EmbeddingModelAPIStrategy {\n doEmbed(\n config: EmbeddingModelStrategyConfig,\n settings: SAPAIEmbeddingSettings,\n options: EmbeddingModelV3CallOptions,\n maxEmbeddingsPerCall: number,\n ): Promise<EmbeddingModelV3Result>;\n}\n\n/** @internal */\nexport interface EmbeddingModelStrategyConfig {\n readonly deploymentConfig: DeploymentIdConfig | ResourceGroupConfig;\n readonly destination?: HttpDestinationOrFetchOptions;\n readonly modelId: string;\n readonly provider: string;\n readonly requestConfig?: CustomRequestConfig;\n}\n\n/**\n * Strategy interface for language model API implementations.\n * @template TSettings - The model settings type, defaults to SAPAIModelSettings for backward compatibility\n * @internal\n */\nexport interface LanguageModelAPIStrategy<\n TSettings extends SAPAIModelSettings = SAPAIModelSettings,\n> {\n doGenerate(\n config: LanguageModelStrategyConfig,\n settings: TSettings,\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult>;\n\n doStream(\n config: LanguageModelStrategyConfig,\n settings: TSettings,\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult>;\n}\n\n/** @internal */\nexport interface LanguageModelStrategyConfig {\n readonly deploymentConfig: DeploymentIdConfig | ResourceGroupConfig;\n readonly destination?: HttpDestinationOrFetchOptions;\n readonly modelId: string;\n readonly provider: string;\n readonly requestConfig?: CustomRequestConfig;\n}\n\n/** @internal */\nconst languageModelStrategyCache = new Map<SAPAIApiType, Promise<LanguageModelAPIStrategy>>();\n\n/** @internal */\nconst embeddingModelStrategyCache = new Map<SAPAIApiType, Promise<EmbeddingModelAPIStrategy>>();\n\n/** @internal */\nexport function clearStrategyCaches(): void {\n languageModelStrategyCache.clear();\n embeddingModelStrategyCache.clear();\n}\n\n/**\n * @returns Embedding model strategy cache size.\n * @internal\n */\nexport function getEmbeddingModelStrategyCacheSize(): number {\n return embeddingModelStrategyCache.size;\n}\n\n/**\n * @returns Language model strategy cache size.\n * @internal\n */\nexport function getLanguageModelStrategyCacheSize(): number {\n return languageModelStrategyCache.size;\n}\n\n/**\n * @param api - SAP AI API type.\n * @returns Embedding model strategy.\n * @internal\n */\nexport function getOrCreateEmbeddingModelStrategy(\n api: SAPAIApiType,\n): Promise<EmbeddingModelAPIStrategy> {\n const cached = embeddingModelStrategyCache.get(api);\n if (cached) {\n return cached;\n }\n\n // Cache the Promise synchronously before any await to prevent race conditions\n const strategyPromise = createEmbeddingModelStrategy(api);\n embeddingModelStrategyCache.set(api, strategyPromise);\n\n strategyPromise.catch(() => {\n embeddingModelStrategyCache.delete(api);\n });\n\n return strategyPromise;\n}\n\n/**\n * @param api - SAP AI API type.\n * @returns Language model strategy.\n * @internal\n */\nexport function getOrCreateLanguageModelStrategy(\n api: SAPAIApiType,\n): Promise<LanguageModelAPIStrategy> {\n const cached = languageModelStrategyCache.get(api);\n if (cached) {\n return cached;\n }\n\n // Cache the Promise synchronously before any await to prevent race conditions\n const strategyPromise = createLanguageModelStrategy(api);\n languageModelStrategyCache.set(api, strategyPromise);\n\n strategyPromise.catch(() => {\n languageModelStrategyCache.delete(api);\n });\n\n return strategyPromise;\n}\n\n/**\n * @param api - SAP AI API type.\n * @returns Embedding model strategy.\n */\nasync function createEmbeddingModelStrategy(api: SAPAIApiType): Promise<EmbeddingModelAPIStrategy> {\n if (api === \"foundation-models\") {\n const { AzureOpenAiEmbeddingClient } = await import(\"@sap-ai-sdk/foundation-models\");\n const { FoundationModelsEmbeddingModelStrategy } =\n await import(\"./foundation-models-embedding-model-strategy.js\");\n return new FoundationModelsEmbeddingModelStrategy(AzureOpenAiEmbeddingClient);\n }\n\n const { OrchestrationEmbeddingClient } = await import(\"@sap-ai-sdk/orchestration\");\n const { OrchestrationEmbeddingModelStrategy } =\n await import(\"./orchestration-embedding-model-strategy.js\");\n return new OrchestrationEmbeddingModelStrategy(OrchestrationEmbeddingClient);\n}\n\n/**\n * @param api - SAP AI API type.\n * @returns Language model strategy.\n */\nasync function createLanguageModelStrategy(api: SAPAIApiType): Promise<LanguageModelAPIStrategy> {\n if (api === \"foundation-models\") {\n const { AzureOpenAiChatClient } = await import(\"@sap-ai-sdk/foundation-models\");\n const { FoundationModelsLanguageModelStrategy } =\n await import(\"./foundation-models-language-model-strategy.js\");\n return new FoundationModelsLanguageModelStrategy(AzureOpenAiChatClient);\n }\n\n const { OrchestrationClient } = await import(\"@sap-ai-sdk/orchestration\");\n const { OrchestrationLanguageModelStrategy } =\n await import(\"./orchestration-language-model-strategy.js\");\n return new OrchestrationLanguageModelStrategy(OrchestrationClient);\n}\n","/**\n * SAP AI Language Model - Vercel AI SDK LanguageModelV3 implementation for SAP AI Core.\n *\n * This module provides the language model implementation that connects to SAP AI Core\n * services (Orchestration API or Foundation Models API) for chat completions and streaming.\n * @see {@link https://sdk.vercel.ai/docs/reference/ai-sdk-core/generate-text | Vercel AI SDK generateText()}\n * @see {@link https://sdk.vercel.ai/docs/reference/ai-sdk-core/stream-text | Vercel AI SDK streamText()}\n */\nimport type {\n LanguageModelV3,\n LanguageModelV3CallOptions,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamResult,\n} from \"@ai-sdk/provider\";\nimport type { DeploymentIdConfig, ResourceGroupConfig } from \"@sap-ai-sdk/ai-api/internal.js\";\nimport type { CustomRequestConfig } from \"@sap-ai-sdk/core\";\nimport type { HttpDestinationOrFetchOptions } from \"@sap-cloud-sdk/connectivity\";\n\nimport { parseProviderOptions } from \"@ai-sdk/provider-utils\";\n\nimport type { SAPAIApiType, SAPAIModelId, SAPAISettings } from \"./sap-ai-settings.js\";\n\nimport {\n getProviderName,\n sapAILanguageModelProviderOptions,\n validateModelParamsSettings,\n} from \"./sap-ai-provider-options.js\";\nimport {\n getOrCreateLanguageModelStrategy,\n type LanguageModelAPIStrategy,\n type LanguageModelStrategyConfig,\n} from \"./sap-ai-strategy.js\";\nimport { resolveApi, validateSettings } from \"./sap-ai-validation.js\";\n\n/** @internal */\ninterface SAPAILanguageModelConfig {\n readonly deploymentConfig: DeploymentIdConfig | ResourceGroupConfig;\n readonly destination?: HttpDestinationOrFetchOptions;\n readonly provider: string;\n readonly providerApi?: SAPAIApiType;\n readonly requestConfig?: CustomRequestConfig;\n}\n\n/**\n * SAP AI Language Model implementing Vercel AI SDK LanguageModelV3.\n *\n * This class provides chat completion and streaming capabilities through SAP AI Core,\n * supporting both the Orchestration API (with content filtering, grounding, masking,\n * and translation) and Foundation Models API (direct Azure OpenAI access).\n *\n * Users typically don't instantiate this class directly. Instead, use the\n * {@link createSAPAIProvider} factory function:\n * @example\n * ```typescript\n * import { createSAPAIProvider } from \"@jerome-benoit/sap-ai-provider\";\n * import { generateText, streamText } from \"ai\";\n *\n * const provider = createSAPAIProvider();\n * const model = provider(\"gpt-4.1\");\n *\n * // Non-streaming\n * const { text } = await generateText({\n * model,\n * prompt: \"Hello!\",\n * });\n *\n * // Streaming\n * const result = streamText({\n * model,\n * prompt: \"Tell me a story\",\n * });\n *\n * for await (const chunk of result.textStream) {\n * process.stdout.write(chunk);\n * }\n * ```\n * @see {@link https://sdk.vercel.ai/docs/ai-sdk-core/generating-text | Vercel AI SDK Text Generation}\n * @see {@link createSAPAIProvider} - Factory function to create provider instances\n */\nexport class SAPAILanguageModel implements LanguageModelV3 {\n readonly modelId: SAPAIModelId;\n readonly specificationVersion = \"v3\";\n\n get provider(): string {\n return this.config.provider;\n }\n\n get supportedUrls(): Record<string, RegExp[]> {\n return {\n \"image/*\": [/^https:\\/\\/.+$/i, /^data:image\\/.*$/],\n };\n }\n\n /** @internal */\n private readonly config: SAPAILanguageModelConfig;\n\n /** @internal */\n private readonly settings: SAPAISettings;\n\n /**\n * @param modelId - Model identifier.\n * @param settings - Model settings.\n * @param config - Model configuration.\n * @internal\n */\n constructor(modelId: SAPAIModelId, settings: SAPAISettings, config: SAPAILanguageModelConfig) {\n if (settings.modelParams) {\n validateModelParamsSettings(settings.modelParams);\n }\n this.settings = settings;\n this.config = config;\n this.modelId = modelId;\n }\n\n async doGenerate(options: LanguageModelV3CallOptions): Promise<LanguageModelV3GenerateResult> {\n const { strategy, strategyConfig } = await this.prepareInvocation(options);\n return strategy.doGenerate(strategyConfig, this.settings, options);\n }\n\n async doStream(options: LanguageModelV3CallOptions): Promise<LanguageModelV3StreamResult> {\n const { strategy, strategyConfig } = await this.prepareInvocation(options);\n return strategy.doStream(strategyConfig, this.settings, options);\n }\n\n supportsUrl(url: URL): boolean {\n if (url.protocol === \"https:\") return true;\n if (url.protocol === \"data:\") {\n return /^data:image\\//i.test(url.href);\n }\n return false;\n }\n\n /**\n * Prepares common invocation context for doGenerate and doStream.\n * @param options - AI SDK call options.\n * @returns Strategy and configuration for the invocation.\n * @internal\n */\n private async prepareInvocation(options: LanguageModelV3CallOptions): Promise<{\n strategy: LanguageModelAPIStrategy;\n strategyConfig: LanguageModelStrategyConfig;\n }> {\n const providerName = getProviderName(this.config.provider);\n const sapOptions = await parseProviderOptions({\n provider: providerName,\n providerOptions: options.providerOptions,\n schema: sapAILanguageModelProviderOptions,\n });\n\n const effectiveApi = resolveApi(this.config.providerApi, this.settings.api, sapOptions?.api);\n\n validateSettings({\n api: effectiveApi,\n invocationSettings: sapOptions\n ? {\n api: sapOptions.api,\n escapeTemplatePlaceholders: sapOptions.escapeTemplatePlaceholders,\n orchestrationConfigRef: sapOptions.orchestrationConfigRef,\n placeholderValues: sapOptions.placeholderValues,\n promptTemplateRef: sapOptions.promptTemplateRef,\n }\n : undefined,\n modelApi: this.settings.api,\n modelSettings: this.settings,\n });\n\n const strategy = await getOrCreateLanguageModelStrategy(effectiveApi);\n\n const strategyConfig: LanguageModelStrategyConfig = {\n deploymentConfig: this.config.deploymentConfig,\n destination: this.config.destination,\n modelId: this.modelId,\n provider: this.config.provider,\n requestConfig: this.config.requestConfig,\n };\n\n return { strategy, strategyConfig };\n }\n}\n","import type { DeploymentIdConfig, ResourceGroupConfig } from \"@sap-ai-sdk/ai-api/internal.js\";\nimport type { CustomRequestConfig } from \"@sap-ai-sdk/core\";\nimport type { HttpDestinationOrFetchOptions } from \"@sap-cloud-sdk/connectivity\";\n\nimport { NoSuchModelError, ProviderV3 } from \"@ai-sdk/provider\";\nimport { setGlobalLogLevel } from \"@sap-cloud-sdk/util\";\n\nimport { SAPAIEmbeddingModel, SAPAIEmbeddingModelId } from \"./sap-ai-embedding-model.js\";\nimport { SAPAILanguageModel } from \"./sap-ai-language-model.js\";\nimport {\n SAP_AI_PROVIDER_NAME,\n validateEmbeddingModelParamsSettings,\n validateModelParamsSettings,\n} from \"./sap-ai-provider-options.js\";\nimport {\n SAPAIApiType,\n SAPAIEmbeddingSettings,\n SAPAIModelId,\n SAPAISettings,\n} from \"./sap-ai-settings.js\";\nimport { mergeSettingsWithApi } from \"./sap-ai-validation.js\";\n\n/** SAP AI Core deployment configuration: either a deployment ID or a resource group. */\nexport type DeploymentConfig = DeploymentIdConfig | ResourceGroupConfig;\n\n/** SAP AI Provider interface extending Vercel AI SDK ProviderV3. */\nexport interface SAPAIProvider extends ProviderV3 {\n (modelId: SAPAIModelId, settings?: SAPAISettings): SAPAILanguageModel;\n chat(modelId: SAPAIModelId, settings?: SAPAISettings): SAPAILanguageModel;\n embedding(modelId: SAPAIEmbeddingModelId, settings?: SAPAIEmbeddingSettings): SAPAIEmbeddingModel;\n embeddingModel(\n modelId: SAPAIEmbeddingModelId,\n settings?: SAPAIEmbeddingSettings,\n ): SAPAIEmbeddingModel;\n /** Always throws - SAP AI Core does not support image generation. */\n imageModel(modelId: string): never;\n languageModel(modelId: SAPAIModelId, settings?: SAPAISettings): SAPAILanguageModel;\n /** @deprecated Use `embeddingModel()` instead. */\n textEmbeddingModel(\n modelId: SAPAIEmbeddingModelId,\n settings?: SAPAIEmbeddingSettings,\n ): SAPAIEmbeddingModel;\n}\n\n/**\n * Configuration settings for the SAP AI Provider.\n * See {@link createSAPAIProvider} for authentication details.\n */\nexport interface SAPAIProviderSettings {\n /**\n * SAP AI Core API to use for all models created by this provider.\n * Can be overridden at model creation time or per-call via providerOptions.\n * - `'orchestration'` (default): SAP AI Core Orchestration API - supports filtering, grounding, masking, translation\n * - `'foundation-models'`: SAP AI Core Foundation Models API - supports dataSources, logprobs, seed, etc.\n * @default 'orchestration'\n */\n readonly api?: SAPAIApiType;\n\n /** Default model settings applied to every model instance. Per-call settings override these. */\n readonly defaultSettings?: SAPAISettings;\n\n /** SAP AI Core deployment ID. If not provided, the SDK resolves deployment automatically. */\n readonly deploymentId?: string;\n\n /** Custom destination configuration for SAP AI Core. */\n readonly destination?: HttpDestinationOrFetchOptions;\n\n /**\n * Log level for SAP Cloud SDK loggers.\n * Controls verbosity of internal SAP SDK logging (e.g., authentication, service binding).\n * Note: SAP_CLOUD_SDK_LOG_LEVEL environment variable takes precedence if set.\n * @default 'warn'\n */\n readonly logLevel?: \"debug\" | \"error\" | \"info\" | \"warn\";\n\n /**\n * Provider name used as key for `providerOptions` and `providerMetadata`.\n * @default 'sap-ai'\n */\n readonly name?: string;\n\n /**\n * Custom request configuration forwarded to the underlying SAP AI SDK client on every\n * call created from this provider.\n *\n * Provider-level only (not overridable per-call via `providerOptions['sap-ai']`). The\n * AI SDK `abortSignal` option always wins over any `signal` on `requestConfig`; the\n * latter is dropped before the request is forwarded. Node-only knobs (`httpAgent`,\n * `httpsAgent`) are silently ignored on Edge / Cloudflare Workers runtimes.\n *\n * See the \"Note on `requestConfig`\" section under `SAPAIProviderSettings` in\n * `API_REFERENCE.md` for the full SAP AI Core `AI-*` header guidance.\n * @see {@link https://sap.github.io/ai-sdk/docs/js/getting-started | SAP Cloud SDK for AI (JS)}\n * @see {@link https://github.com/jerome-benoit/sap-ai-provider/blob/main/API_REFERENCE.md#requestconfig-note | Note on `requestConfig` (API_REFERENCE.md)}\n */\n readonly requestConfig?: CustomRequestConfig;\n\n /**\n * SAP AI Core resource group for resource isolation and access control.\n * @default 'default'\n */\n readonly resourceGroup?: string;\n\n /** Whether to emit warnings for ambiguous configurations (e.g. both deploymentId and resourceGroup). */\n readonly warnOnAmbiguousConfig?: boolean;\n}\n\n/**\n * Creates an SAP AI Provider instance for use with the Vercel AI SDK.\n *\n * Uses the official SAP AI SDK (`@sap-ai-sdk/orchestration` and\n * `@sap-ai-sdk/foundation-models`) for API communication. Authentication is automatic via service binding\n * (VCAP_SERVICES on SAP BTP) or AICORE_SERVICE_KEY environment variable.\n * @param options - Provider configuration options.\n * @param options.api - Default API type: `'orchestration'` (default) or `'foundation-models'`.\n * @param options.defaultSettings - Default model settings applied to every model instance.\n * @param options.deploymentId - SAP AI Core deployment ID for automatic deployment resolution.\n * @param options.destination - Custom SAP Cloud SDK destination configuration.\n * @param options.logLevel - Log level for SAP Cloud SDK loggers (`'debug'`, `'info'`, `'warn'`, `'error'`).\n * @param options.name - Provider name used as key in `providerOptions` (default: `'sap-ai'`).\n * @param options.requestConfig - Provider-level custom request configuration. See {@link SAPAIProviderSettings.requestConfig} for scope, portability, and abort semantics.\n * @param options.resourceGroup - SAP AI Core resource group (default: `'default'`).\n * @param options.warnOnAmbiguousConfig - Whether to warn when both deploymentId and resourceGroup are set.\n * @returns A configured SAP AI provider instance that can be used as a callable or via methods.\n * @example\n * // Basic usage with defaults\n * const provider = createSAPAIProvider();\n * const model = provider('gpt-4.1');\n * @example\n * // With custom configuration\n * const provider = createSAPAIProvider({\n * api: 'foundation-models',\n * resourceGroup: 'production',\n * defaultSettings: { modelParams: { temperature: 0.7 } },\n * });\n * @example\n * // Using provider methods\n * const chatModel = provider.chat('gpt-4.1');\n * const embeddingModel = provider.embedding('text-embedding-3-small');\n * @throws {Error} When provider function is called with the `new` keyword.\n * @throws {NoSuchModelError} When `imageModel()` is called (image generation not supported).\n * @see {@link SAPAIProviderSettings} for all configuration options.\n * @see {@link SAPAIProvider} for the provider interface.\n */\nexport function createSAPAIProvider(options: SAPAIProviderSettings = {}): SAPAIProvider {\n if (options.defaultSettings?.modelParams) {\n validateModelParamsSettings(options.defaultSettings.modelParams);\n }\n\n const providerName = options.name ?? SAP_AI_PROVIDER_NAME;\n\n const resourceGroup = options.resourceGroup ?? \"default\";\n\n const warnOnAmbiguousConfig = options.warnOnAmbiguousConfig ?? true;\n\n if (warnOnAmbiguousConfig && options.deploymentId && options.resourceGroup) {\n console.warn(\n \"createSAPAIProvider: both 'deploymentId' and 'resourceGroup' were provided; using 'deploymentId' and ignoring 'resourceGroup'.\",\n );\n }\n\n if (!process.env.SAP_CLOUD_SDK_LOG_LEVEL) {\n const logLevel = options.logLevel ?? \"warn\";\n setGlobalLogLevel(logLevel);\n }\n\n const providerApi = options.api ?? \"orchestration\";\n\n const deploymentConfig: DeploymentConfig = options.deploymentId\n ? { deploymentId: options.deploymentId }\n : { resourceGroup };\n\n const createModel = (modelId: SAPAIModelId, settings: SAPAISettings = {}) => {\n if (settings.modelParams) {\n validateModelParamsSettings(settings.modelParams);\n }\n\n const mergedSettings = mergeSettingsWithApi(\n options.defaultSettings as Record<string, unknown> | undefined,\n settings,\n providerApi,\n );\n\n return new SAPAILanguageModel(modelId, mergedSettings, {\n deploymentConfig,\n destination: options.destination,\n provider: `${providerName}.chat`,\n providerApi,\n requestConfig: options.requestConfig,\n });\n };\n\n const createEmbeddingModel = (\n modelId: SAPAIEmbeddingModelId,\n settings: SAPAIEmbeddingSettings = {},\n ): SAPAIEmbeddingModel => {\n if (settings.modelParams) {\n validateEmbeddingModelParamsSettings(settings.modelParams);\n }\n\n const mergedSettings = mergeSettingsWithApi(\n options.defaultSettings as Record<string, unknown> | undefined,\n settings,\n providerApi,\n );\n\n return new SAPAIEmbeddingModel(modelId, mergedSettings, {\n deploymentConfig,\n destination: options.destination,\n provider: `${providerName}.embedding`,\n providerApi,\n requestConfig: options.requestConfig,\n });\n };\n\n const provider = function (modelId: SAPAIModelId, settings?: SAPAISettings) {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (new.target) {\n throw new Error(\"The SAP AI provider function cannot be called with the new keyword.\");\n }\n\n return createModel(modelId, settings);\n };\n\n provider.specificationVersion = \"v3\";\n provider.chat = createModel;\n provider.languageModel = createModel;\n provider.embedding = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.embeddingModel = createEmbeddingModel;\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({\n message: `SAP AI Core does not support image generation. Model '${modelId}' is not available.`,\n modelId,\n modelType: \"imageModel\",\n });\n };\n\n return provider as SAPAIProvider;\n}\n\n/** Default SAP AI provider instance with automatic authentication via SAP AI SDK. */\nexport const sapai = createSAPAIProvider();\n","import type { AzureOpenAiChatCompletionParameters } from \"@sap-ai-sdk/foundation-models\";\nimport type {\n ChatCompletionTool,\n ChatModel,\n FilteringModule,\n GroundingModule,\n MaskingModule,\n OrchestrationConfigRef,\n OrchestrationModuleConfig,\n TranslationModule,\n} from \"@sap-ai-sdk/orchestration\";\n\n/** Azure OpenAI chat extension configuration for \"On Your Data\" RAG scenarios. */\nexport type AzureOpenAiChatExtensionConfiguration = NonNullable<\n AzureOpenAiChatCompletionParameters[\"data_sources\"]\n>[number];\n\n/**\n * Common model parameters shared between both APIs.\n *\n * These parameters control text generation behavior and are validated by Zod schemas\n * when passed via `providerOptions`.\n */\nexport interface CommonModelParams {\n /**\n * Frequency penalty to reduce repetition of token sequences.\n * Range: -2.0 to 2.0\n */\n readonly frequencyPenalty?: number;\n /**\n * Maximum number of tokens to generate.\n * Range: Positive integer\n */\n readonly maxTokens?: number;\n /**\n * Number of completions to generate.\n * Not supported by Amazon/Anthropic models.\n * Range: Positive integer\n */\n readonly n?: number;\n /** Whether to enable parallel tool calls when multiple tools are available. */\n readonly parallel_tool_calls?: boolean;\n /**\n * Presence penalty to encourage talking about new topics.\n * Range: -2.0 to 2.0\n */\n readonly presencePenalty?: number;\n /** Index signature for additional model-specific parameters. */\n readonly [key: string]: unknown;\n /**\n * Sampling temperature controlling randomness.\n * Higher values (e.g., 1.0) make output more random, lower values (e.g., 0.2) more deterministic.\n * Range: 0 to 2\n */\n readonly temperature?: number;\n /**\n * Nucleus sampling parameter. Only tokens with cumulative probability up to `topP` are considered.\n * Range: 0 to 1\n */\n readonly topP?: number;\n}\n\n/** Default settings configuration when using Foundation Models API. */\nexport interface FoundationModelsDefaultSettings {\n readonly api: \"foundation-models\";\n readonly settings?: FoundationModelsModelSettings;\n}\n\n/** Model parameters for Foundation Models Embedding API. */\nexport interface FoundationModelsEmbeddingParams {\n readonly dimensions?: number;\n readonly encoding_format?: \"base64\" | \"float\";\n readonly user?: string;\n}\n\n/** Model parameters for Foundation Models API with Azure OpenAI-specific extensions. */\nexport interface FoundationModelsModelParams extends CommonModelParams {\n readonly logit_bias?: AzureOpenAiChatCompletionParameters[\"logit_bias\"];\n readonly logprobs?: AzureOpenAiChatCompletionParameters[\"logprobs\"];\n readonly seed?: AzureOpenAiChatCompletionParameters[\"seed\"];\n readonly stop?: AzureOpenAiChatCompletionParameters[\"stop\"];\n /** Requires logprobs=true. */\n readonly top_logprobs?: AzureOpenAiChatCompletionParameters[\"top_logprobs\"];\n readonly user?: AzureOpenAiChatCompletionParameters[\"user\"];\n}\n\n/** Model settings when using Foundation Models API. */\nexport interface FoundationModelsModelSettings {\n readonly api: \"foundation-models\";\n /** Azure OpenAI \"On Your Data\" configuration for RAG scenarios. */\n readonly dataSources?: AzureOpenAiChatExtensionConfiguration[];\n /** @default false */\n readonly includeReasoning?: boolean;\n readonly modelParams?: FoundationModelsModelParams;\n readonly modelVersion?: string;\n readonly responseFormat?: ResponseFormat;\n}\n\n/** Default settings configuration when using Orchestration API. */\nexport interface OrchestrationDefaultSettings {\n readonly api?: \"orchestration\";\n readonly settings?: OrchestrationModelSettings;\n}\n\n/** Model parameters for Orchestration API. */\nexport type OrchestrationModelParams = CommonModelParams;\n\n/** Model settings when using Orchestration API with filtering, grounding, masking, and translation. */\nexport interface OrchestrationModelSettings {\n readonly api?: \"orchestration\";\n /** @default true */\n readonly escapeTemplatePlaceholders?: boolean;\n /**\n * Additional module configurations for prompt module fallback.\n * The SDK tries the primary configuration first, then each fallback in order until one succeeds.\n * Each entry is a full `OrchestrationModuleConfig` with its own model, prompt, and modules.\n * @example\n * ```ts\n * fallbackModuleConfigs: [\n * {\n * promptTemplating: {\n * model: { name: \"gpt-4.1-mini\" },\n * prompt: { template: [] },\n * },\n * },\n * ]\n * ```\n */\n readonly fallbackModuleConfigs?: OrchestrationModuleConfig[];\n readonly filtering?: FilteringModule;\n readonly grounding?: GroundingModule;\n /** @default false */\n readonly includeReasoning?: boolean;\n readonly masking?: MaskingModule | { providers: MaskingModule[\"masking_providers\"] };\n readonly modelParams?: OrchestrationModelParams;\n readonly modelVersion?: string;\n /**\n * Reference to a complete orchestration configuration stored in SAP AI Core Prompt Registry.\n * When provided, local module settings (filtering, masking, grounding, translation, tools,\n * promptTemplateRef, responseFormat) are ignored as the full configuration is managed\n * by the referenced config. Only `placeholderValues` and messages are passed through.\n * @example { id: \"f47ac10b-58cc-4372-a567-0e02b2c3d479\" }\n * @example { scenario: \"customer-support\", name: \"prod-config\", version: \"1.0.0\" }\n */\n readonly orchestrationConfigRef?: OrchestrationConfigRef;\n readonly placeholderValues?: Record<string, string>;\n readonly promptTemplateRef?: PromptTemplateRef;\n readonly responseFormat?: ResponseFormat;\n /**\n * Options for streaming behavior with post-LLM modules.\n * Only applies when using `streamText()` with orchestration modules.\n */\n readonly streamOptions?: OrchestrationStreamOptions;\n readonly tools?: ChatCompletionTool[];\n readonly translation?: TranslationModule;\n}\n\n/**\n * Stream options for orchestration post-LLM module processing.\n * Controls chunking behavior for translation, filtering, and other modules during streaming.\n */\nexport interface OrchestrationStreamOptions {\n /**\n * Minimum number of characters per chunk for post-LLM modules.\n * Valid range: 1-10000. Defaults to 100.\n */\n readonly chunkSize?: number;\n /**\n * Delimiters for splitting stream into chunks (e.g., sentence boundaries).\n * Required when translation module is configured.\n * @example [\"\\n\", \".\", \"?\", \"!\"]\n */\n readonly delimiters?: readonly string[];\n /**\n * Additional characters from previous chunks sent to output filtering for context.\n * Valid range: 0-10000.\n */\n readonly outputFilteringOverlap?: number;\n}\n\n/** Reference to a template in SAP AI Core's Prompt Registry. */\nexport type PromptTemplateRef = PromptTemplateRefByID | PromptTemplateRefByScenarioNameVersion;\n\n/** Reference to a Prompt Registry template by ID. */\nexport interface PromptTemplateRefByID {\n readonly id: string;\n readonly scope?: PromptTemplateScope;\n}\n\n/** Reference to a Prompt Registry template by scenario, name, and version. */\nexport interface PromptTemplateRefByScenarioNameVersion {\n readonly name: string;\n readonly scenario: string;\n readonly scope?: PromptTemplateScope;\n readonly version: string;\n}\n\n/** Scope for Prompt Registry templates: 'tenant' (default) or 'resource_group'. */\nexport type PromptTemplateScope = \"resource_group\" | \"tenant\";\n\n/** Response format for structured output (OpenAI-compatible). */\nexport type ResponseFormat = AzureOpenAiChatCompletionParameters[\"response_format\"];\n\n/**\n * Supported API types for SAP AI Core.\n *\n * - `'orchestration'` - Full-featured API with data masking, content filtering, document grounding, and translation.\n * - `'foundation-models'` - Direct model access with Azure OpenAI-specific parameters like `logprobs`, `seed`, and `dataSources`.\n */\nexport type SAPAIApiType = \"foundation-models\" | \"orchestration\";\n\n/** Union type for API-specific default settings configuration. */\nexport type SAPAIDefaultSettingsConfig =\n FoundationModelsDefaultSettings | OrchestrationDefaultSettings;\n\n/** Settings for the SAP AI Embedding Model. */\nexport interface SAPAIEmbeddingSettings {\n readonly api?: SAPAIApiType;\n /** Orchestration API only. */\n readonly masking?: MaskingModule | { providers: MaskingModule[\"masking_providers\"] };\n /** @default 2048 */\n readonly maxEmbeddingsPerCall?: number;\n readonly modelParams?: FoundationModelsEmbeddingParams | Record<string, unknown>;\n readonly modelVersion?: string;\n readonly [key: string]: unknown;\n /** @default 'text' */\n readonly type?: \"document\" | \"query\" | \"text\";\n}\n\n/**\n * Supported model IDs in SAP AI Core.\n *\n * Model availability depends on tenant configuration and region.\n * Common values include: `'gpt-4.1'`, `'gpt-4.1-mini'`, `'anthropic--claude-4.5-sonnet'`, `'gemini-2.5-pro'`.\n * @see {@link https://help.sap.com/docs/sap-ai-core/sap-ai-core-service-guide/models-and-scenarios-in-generative-ai-hub | SAP AI Core Models}\n */\nexport type SAPAIModelId = ChatModel;\n\n/**\n * Union type for model settings - supports both APIs.\n *\n * Use `FoundationModelsModelSettings` for Foundation Models API features (dataSources, logprobs, seed).\n * Use `OrchestrationModelSettings` for Orchestration API features (filtering, grounding, masking, translation).\n */\nexport type SAPAIModelSettings = FoundationModelsModelSettings | OrchestrationModelSettings;\n\n/** Re-exported Azure OpenAI types from `@sap-ai-sdk/foundation-models`. */\nexport type {\n AzureOpenAiChatCompletionParameters,\n AzureOpenAiChatCompletionRequestAssistantMessage,\n AzureOpenAiChatCompletionRequestMessage,\n AzureOpenAiChatCompletionRequestSystemMessage,\n AzureOpenAiChatCompletionRequestToolMessage,\n AzureOpenAiChatCompletionRequestUserMessage,\n AzureOpenAiChatCompletionTool,\n AzureOpenAiEmbeddingParameters,\n AzureOpenAiFunctionObject,\n} from \"@sap-ai-sdk/foundation-models\";\n\n/** Re-exported SAP AI SDK orchestration types. */\nexport type {\n FilteringModule,\n GroundingModule,\n MaskingModule,\n TranslationModule,\n} from \"@sap-ai-sdk/orchestration\";\n\nexport {\n buildAzureContentSafetyFilter,\n buildDocumentGroundingConfig,\n buildDpiMaskingProvider,\n buildLlamaGuard38BFilter,\n buildTranslationConfig,\n} from \"@sap-ai-sdk/orchestration\";\n\n/**\n * Settings for configuring SAP AI Core model behavior.\n * Legacy interface maintained for backward compatibility - prefer OrchestrationModelSettings\n * or FoundationModelsModelSettings for API-specific type safety.\n */\nexport interface SAPAISettings {\n readonly api?: SAPAIApiType;\n /** @default true */\n readonly escapeTemplatePlaceholders?: boolean;\n /** Orchestration API only. */\n readonly fallbackModuleConfigs?: OrchestrationModuleConfig[];\n /** Orchestration API only. */\n readonly filtering?: FilteringModule;\n /** Orchestration API only. */\n readonly grounding?: GroundingModule;\n /** @default false */\n readonly includeReasoning?: boolean;\n /** Orchestration API only. */\n readonly masking?: MaskingModule | { providers: MaskingModule[\"masking_providers\"] };\n readonly modelParams?: CommonModelParams;\n readonly modelVersion?: string;\n /** Orchestration API only. */\n readonly orchestrationConfigRef?: OrchestrationConfigRef;\n /** Orchestration API only. */\n readonly placeholderValues?: Record<string, string>;\n /** Orchestration API only. */\n readonly promptTemplateRef?: PromptTemplateRef;\n readonly responseFormat?: ResponseFormat;\n /** Orchestration API only. */\n readonly streamOptions?: OrchestrationStreamOptions;\n /** Orchestration API only. */\n readonly tools?: ChatCompletionTool[];\n /** Orchestration API only. */\n readonly translation?: TranslationModule;\n}\n\nexport type {\n AssistantChatMessage,\n ChatCompletionRequest,\n ChatCompletionTool,\n ChatMessage,\n ChatMessageContent,\n ChatMessages,\n Citation,\n DeveloperChatMessage,\n DocumentTranslationApplyToSelector,\n FileContent,\n FunctionObject,\n ImageContentUrl,\n LlmModelDetails,\n LlmModelParams,\n OrchestrationConfigRef,\n OrchestrationError,\n OrchestrationModuleConfig,\n OrchestrationModuleConfigList,\n PromptTemplatingModule,\n SystemChatMessage,\n ToolChatMessage,\n TranslationApplyToCategory,\n TranslationInputParameters,\n TranslationOutputParameters,\n TranslationTargetLanguage,\n UserChatMessage,\n UserChatMessageContent,\n UserChatMessageContentItem,\n} from \"@sap-ai-sdk/orchestration\";\n\nexport {\n OrchestrationEmbeddingResponse,\n OrchestrationResponse,\n OrchestrationStream,\n OrchestrationStreamChunkResponse,\n OrchestrationStreamResponse,\n} from \"@sap-ai-sdk/orchestration\";\n","/**\n * `@jerome-benoit/sap-ai-provider`\n *\n * Vercel AI SDK provider for SAP AI Core.\n * Wraps the SAP AI SDK to provide Vercel AI SDK-compatible interfaces.\n */\n\n/**\n * Utility functions for escaping template delimiters (`{{`, `{%`, `{#`) in orchestration content.\n */\nexport {\n escapeOrchestrationPlaceholders,\n unescapeOrchestrationPlaceholders,\n} from \"./convert-to-sap-messages.js\";\n\n/**\n * Embedding model class for generating vector embeddings via SAP AI Core.\n */\nexport { SAPAIEmbeddingModel } from \"./sap-ai-embedding-model.js\";\n\nexport type { SAPAIEmbeddingModelId } from \"./sap-ai-embedding-model.js\";\n\n/**\n * Custom error classes for Foundation Models API support.\n * - `UnsupportedFeatureError`: Thrown when a feature is used with an incompatible API.\n * - `ApiSwitchError`: Thrown when attempting to switch APIs at invocation time with conflicting settings.\n */\nexport { ApiSwitchError, UnsupportedFeatureError } from \"./sap-ai-error.js\";\n\n/**\n * Language model class for chat/text completions via SAP AI Core.\n */\nexport { SAPAILanguageModel } from \"./sap-ai-language-model.js\";\n\n/**\n * Provider options for per-call configuration.\n *\n * These schemas and types enable runtime validation of provider options\n * passed via `providerOptions['sap-ai']` in Vercel AI SDK calls.\n */\nexport {\n getProviderName,\n SAP_AI_PROVIDER_NAME,\n sapAIEmbeddingProviderOptions,\n sapAILanguageModelProviderOptions,\n} from \"./sap-ai-provider-options.js\";\n\nexport type {\n SAPAIEmbeddingProviderOptions,\n SAPAILanguageModelProviderOptions,\n} from \"./sap-ai-provider-options.js\";\n\n/**\n * Provider factory function and pre-configured default instance.\n */\nexport { createSAPAIProvider, sapai } from \"./sap-ai-provider.js\";\n\nexport type { DeploymentConfig, SAPAIProvider, SAPAIProviderSettings } from \"./sap-ai-provider.js\";\n\n/**\n * Model settings types and model identifier type definitions.\n */\nexport type {\n AzureOpenAiChatExtensionConfiguration,\n CommonModelParams,\n FoundationModelsDefaultSettings,\n FoundationModelsEmbeddingParams,\n FoundationModelsModelParams,\n FoundationModelsModelSettings,\n OrchestrationDefaultSettings,\n OrchestrationModelParams,\n OrchestrationModelSettings,\n OrchestrationStreamOptions,\n PromptTemplateRef,\n PromptTemplateRefByID,\n PromptTemplateRefByScenarioNameVersion,\n PromptTemplateScope,\n ResponseFormat,\n SAPAIApiType,\n SAPAIDefaultSettingsConfig,\n SAPAIEmbeddingSettings,\n SAPAIModelId,\n SAPAIModelSettings,\n SAPAISettings,\n} from \"./sap-ai-settings.js\";\n\n/**\n * SAP AI SDK types and utilities.\n *\n * Re-exported for convenience and advanced usage scenarios.\n */\nexport type {\n AssistantChatMessage,\n ChatCompletionRequest,\n ChatCompletionTool,\n ChatMessage,\n ChatMessageContent,\n ChatMessages,\n Citation,\n DeveloperChatMessage,\n DocumentTranslationApplyToSelector,\n FileContent,\n FilteringModule,\n FunctionObject,\n GroundingModule,\n ImageContentUrl,\n LlmModelDetails,\n LlmModelParams,\n MaskingModule,\n OrchestrationConfigRef,\n OrchestrationError,\n OrchestrationModuleConfig,\n OrchestrationModuleConfigList,\n PromptTemplatingModule,\n SystemChatMessage,\n ToolChatMessage,\n TranslationApplyToCategory,\n TranslationInputParameters,\n TranslationModule,\n TranslationOutputParameters,\n TranslationTargetLanguage,\n UserChatMessage,\n UserChatMessageContent,\n UserChatMessageContentItem,\n} from \"./sap-ai-settings.js\";\n\n/**\n * Helper functions for building configurations.\n */\nexport {\n buildAzureContentSafetyFilter,\n buildDocumentGroundingConfig,\n buildDpiMaskingProvider,\n buildLlamaGuard38BFilter,\n buildTranslationConfig,\n} from \"./sap-ai-settings.js\";\n\n/**\n * Response classes from the SAP AI SDK for orchestration results.\n */\nexport {\n OrchestrationEmbeddingResponse,\n OrchestrationResponse,\n OrchestrationStream,\n OrchestrationStreamChunkResponse,\n OrchestrationStreamResponse,\n} from \"./sap-ai-settings.js\";\n\n/**\n * Validation utilities for API selection and feature compatibility.\n * - `resolveApi`: Resolves API type from provider/model/invocation precedence chain.\n * - `validateSettings`: Validates settings are compatible with the selected API.\n */\nexport { resolveApi, validateSettings } from \"./sap-ai-validation.js\";\n\n/**\n * Package version, injected at build time.\n */\nexport { VERSION } from \"./version.js\";\n\n/**\n * SAP AI SDK request configuration type for {@link SAPAIProviderSettings.requestConfig}.\n *\n * Re-exported so consumers can type provider options without a direct dependency on\n * `@sap-ai-sdk/core`. The shape tracks `@sap-ai-sdk/core` versioning and is inherited\n * transitively; upstream changes to `CustomRequestConfig` propagate here without a\n * release of this package.\n */\nexport type { CustomRequestConfig } from \"@sap-ai-sdk/core\";\n\n/**\n * Error handling types and classes for SAP AI Core error responses.\n */\nexport type { OrchestrationErrorResponse } from \"@sap-ai-sdk/orchestration\";\n\n/**\n * Direct access to SAP AI SDK OrchestrationClient.\n *\n * For advanced users who need to use the SAP AI SDK directly.\n */\nexport { OrchestrationClient, OrchestrationEmbeddingClient } from \"@sap-ai-sdk/orchestration\";\n\n/**\n * SAP Cloud SDK destination type for {@link SAPAIProviderSettings.destination}.\n *\n * Re-exported so consumers can type provider options without a direct dependency on\n * `@sap-cloud-sdk/connectivity`. The shape tracks `@sap-cloud-sdk/connectivity`\n * versioning and is inherited transitively.\n */\nexport type { HttpDestinationOrFetchOptions } from \"@sap-cloud-sdk/connectivity\";\n"],"mappings":"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","names":["OrchestrationEmbeddingClient","OrchestrationClient","parseProviderOptions","parseProviderOptions"]}
@@ -1,16 +1,17 @@
1
1
  import {createRequire as __createRequire} from 'module';var require=__createRequire(import.meta.url);
2
2
  import {
3
3
  BaseEmbeddingModelStrategy
4
- } from "./chunk-GMMX46AH.js";
4
+ } from "./chunk-BVDSJ4IZ.js";
5
5
  import {
6
6
  validateMaskingProvidersDeprecation
7
- } from "./chunk-WDUOKIKD.js";
7
+ } from "./chunk-KVOLFUQJ.js";
8
8
  import {
9
9
  extractResponseMetadata,
10
10
  hasKeys,
11
+ mergeRequestConfig,
11
12
  normalizeEmbedding
12
- } from "./chunk-36DFHUVQ.js";
13
- import "./chunk-TVXWNZQT.js";
13
+ } from "./chunk-H5KD4EPO.js";
14
+ import "./chunk-3ZSXTKOK.js";
14
15
 
15
16
  // src/orchestration-embedding-model-strategy.ts
16
17
  var OrchestrationEmbeddingModelStrategy = class extends BaseEmbeddingModelStrategy {
@@ -34,10 +35,10 @@ var OrchestrationEmbeddingModelStrategy = class extends BaseEmbeddingModelStrate
34
35
  };
35
36
  return new this.ClientClass(moduleConfig, config.deploymentConfig, config.destination);
36
37
  }
37
- async executeCall(client, values, embeddingType, abortSignal) {
38
+ async executeCall(client, values, embeddingType, abortSignal, requestConfig) {
38
39
  return client.embed(
39
40
  { input: values, type: embeddingType },
40
- abortSignal ? { signal: abortSignal } : void 0
41
+ mergeRequestConfig(requestConfig, abortSignal)
41
42
  );
42
43
  }
43
44
  extractEmbeddings(response) {
@@ -62,4 +63,4 @@ var OrchestrationEmbeddingModelStrategy = class extends BaseEmbeddingModelStrate
62
63
  export {
63
64
  OrchestrationEmbeddingModelStrategy
64
65
  };
65
- //# sourceMappingURL=orchestration-embedding-model-strategy-66QYAO64.js.map
66
+ //# sourceMappingURL=orchestration-embedding-model-strategy-C5G735Q2.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, SharedV3Warning } from \"@ai-sdk/provider\";\nimport type { CustomRequestConfig } from \"@sap-ai-sdk/core\";\nimport type {\n EmbeddingModelConfig,\n EmbeddingModuleConfig,\n MaskingModule,\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 { validateMaskingProvidersDeprecation } from \"./sap-ai-validation.js\";\nimport {\n type EmbeddingProviderOptions,\n extractResponseMetadata,\n hasKeys,\n mergeRequestConfig,\n normalizeEmbedding,\n type ResponseMetadata,\n} 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)\n ? { masking: settings.masking as MaskingModule }\n : {}),\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 | undefined,\n requestConfig: CustomRequestConfig | undefined,\n ): Promise<OrchestrationEmbeddingResponse> {\n return client.embed(\n { input: values, type: embeddingType },\n mergeRequestConfig(requestConfig, abortSignal),\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 override extractResponseMetadata(\n response: OrchestrationEmbeddingResponse,\n ): ResponseMetadata {\n return extractResponseMetadata(response, \"response\");\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 protected override resolveWarnings(\n settings: SAPAIEmbeddingSettings,\n warnings: SharedV3Warning[],\n ): void {\n validateMaskingProvidersDeprecation(settings, warnings);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAoCO,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,IAC5C,EAAE,SAAS,SAAS,QAAyB,IAC7C,CAAC;AAAA,IACP;AAEA,WAAO,IAAI,KAAK,YAAY,cAAc,OAAO,kBAAkB,OAAO,WAAW;AAAA,EACvF;AAAA,EAEA,MAAgB,YACd,QACA,QACA,eACA,aACA,eACyC;AACzC,WAAO,OAAO;AAAA,MACZ,EAAE,OAAO,QAAQ,MAAM,cAAc;AAAA,MACrC,mBAAmB,eAAe,WAAW;AAAA,IAC/C;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,EAEmB,wBACjB,UACkB;AAClB,WAAO,wBAAwB,UAAU,UAAU;AAAA,EACrD;AAAA,EAEU,kBAAkB,UAAkD;AAC5E,UAAM,aAAa,SAAS,cAAc;AAC1C,WAAO,WAAW;AAAA,EACpB;AAAA,EAEU,SAAiB;AACzB,WAAO;AAAA,EACT;AAAA,EAEmB,gBACjB,UACA,UACM;AACN,wCAAoC,UAAU,QAAQ;AAAA,EACxD;AACF;","names":[]}
@@ -1,21 +1,22 @@
1
1
  import {createRequire as __createRequire} from 'module';var require=__createRequire(import.meta.url);
2
2
  import {
3
3
  validateMaskingProvidersDeprecation
4
- } from "./chunk-WDUOKIKD.js";
4
+ } from "./chunk-KVOLFUQJ.js";
5
5
  import {
6
6
  BaseLanguageModelStrategy
7
- } from "./chunk-BZZJKLDG.js";
7
+ } from "./chunk-TQXCNZBC.js";
8
8
  import "./chunk-4JIMBRMV.js";
9
9
  import {
10
10
  convertResponseFormat,
11
11
  convertToolsToSAPFormat,
12
- hasKeys
13
- } from "./chunk-36DFHUVQ.js";
12
+ hasKeys,
13
+ mergeRequestConfig
14
+ } from "./chunk-H5KD4EPO.js";
14
15
  import {
15
16
  deepMerge,
16
17
  orchestrationConfigRefSchema,
17
18
  parseSAPPartProviderOptions
18
- } from "./chunk-TVXWNZQT.js";
19
+ } from "./chunk-3ZSXTKOK.js";
19
20
 
20
21
  // src/orchestration-language-model-strategy.ts
21
22
  function buildTemplateRefObject(ref) {
@@ -42,6 +43,7 @@ function resolvePlaceholderValues(settings, sapOptions) {
42
43
  var ORCHESTRATION_MODULE_KEYS = ["masking", "filtering", "grounding", "translation"];
43
44
  var CONFIG_REF_IGNORED_MODULES = [
44
45
  ...ORCHESTRATION_MODULE_KEYS,
46
+ "fallbackModuleConfigs",
45
47
  "promptTemplateRef",
46
48
  "responseFormat",
47
49
  "tools",
@@ -125,10 +127,10 @@ var OrchestrationLanguageModelStrategy = class extends BaseLanguageModelStrategy
125
127
  }
126
128
  return new this.ClientClass(clientConfig, config.deploymentConfig, config.destination);
127
129
  }
128
- async executeApiCall(client, request, abortSignal) {
130
+ async executeApiCall(client, request, abortSignal, requestConfig) {
129
131
  const response = await client.chatCompletion(
130
132
  request,
131
- abortSignal ? { signal: abortSignal } : void 0
133
+ mergeRequestConfig(requestConfig, abortSignal)
132
134
  );
133
135
  const { requestId, responseId } = this.extractMetadata(response);
134
136
  return {
@@ -144,9 +146,14 @@ var OrchestrationLanguageModelStrategy = class extends BaseLanguageModelStrategy
144
146
  responseId
145
147
  };
146
148
  }
147
- async executeStreamCall(client, request, abortSignal, settings) {
149
+ async executeStreamCall(client, request, abortSignal, settings, requestConfig) {
148
150
  const sdkStreamOptions = this.buildSdkStreamOptions(settings.streamOptions);
149
- const streamResponse = await client.stream(request, abortSignal, sdkStreamOptions);
151
+ const streamResponse = await client.stream(
152
+ request,
153
+ abortSignal,
154
+ sdkStreamOptions,
155
+ mergeRequestConfig(requestConfig, void 0)
156
+ );
150
157
  const { requestId, responseHeaders, responseId } = this.extractMetadata(streamResponse);
151
158
  return {
152
159
  getCitations: () => streamResponse.getCitations?.(),
@@ -480,4 +487,4 @@ var OrchestrationLanguageModelStrategy = class extends BaseLanguageModelStrategy
480
487
  export {
481
488
  OrchestrationLanguageModelStrategy
482
489
  };
483
- //# sourceMappingURL=orchestration-language-model-strategy-4TKRZK7U.js.map
490
+ //# sourceMappingURL=orchestration-language-model-strategy-NUHYRIXH.js.map