@jerome-benoit/sap-ai-provider 4.1.2 → 4.2.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.
package/README.md CHANGED
@@ -548,6 +548,7 @@ authentication, model parameters, data masking, content filtering, and more.
548
548
 
549
549
  **Common Configuration:**
550
550
 
551
+ - `name`: Provider base name (default: 'sap-ai').
551
552
  - `resourceGroup`: SAP AI Core resource group (default: 'default')
552
553
  - `deploymentId`: Specific deployment ID (auto-resolved if not set)
553
554
  - `modelParams`: Temperature, maxTokens, topP, and other generation parameters
package/dist/index.cjs CHANGED
@@ -29750,6 +29750,7 @@ __export(index_exports, {
29750
29750
  buildLlamaGuard38BFilter: () => import_orchestration3.buildLlamaGuard38BFilter,
29751
29751
  buildTranslationConfig: () => import_orchestration3.buildTranslationConfig,
29752
29752
  createSAPAIProvider: () => createSAPAIProvider,
29753
+ getBaseProviderName: () => getBaseProviderName,
29753
29754
  isConfigReference: () => import_orchestration3.isConfigReference,
29754
29755
  sapAIEmbeddingProviderOptions: () => sapAIEmbeddingProviderOptions,
29755
29756
  sapAILanguageModelProviderOptions: () => sapAILanguageModelProviderOptions,
@@ -30154,6 +30155,10 @@ function tryExtractSAPErrorFromMessage(message) {
30154
30155
  var import_provider_utils = require("@ai-sdk/provider-utils");
30155
30156
  var import_zod = require("zod");
30156
30157
  var SAP_AI_PROVIDER_NAME = "sap-ai";
30158
+ function getBaseProviderName(provider) {
30159
+ const dotIndex = provider.indexOf(".");
30160
+ return dotIndex === -1 ? provider : provider.slice(0, dotIndex);
30161
+ }
30157
30162
  var modelParamsSchema = import_zod.z.object({
30158
30163
  /**
30159
30164
  * Frequency penalty between -2.0 and 2.0.
@@ -30328,6 +30333,7 @@ var SAPAIEmbeddingModel = class {
30328
30333
  * the SAP AI SDK's OrchestrationEmbeddingClient.
30329
30334
  * @param options - The embedding request options
30330
30335
  * @returns Promise resolving to embeddings and usage information
30336
+ * @since 1.0.0
30331
30337
  * @example
30332
30338
  * ```typescript
30333
30339
  * const result = await model.doEmbed({
@@ -30340,8 +30346,9 @@ var SAPAIEmbeddingModel = class {
30340
30346
  */
30341
30347
  async doEmbed(options) {
30342
30348
  const { abortSignal, providerOptions, values } = options;
30349
+ const baseProviderName = getBaseProviderName(this.config.provider);
30343
30350
  const sapOptions = await (0, import_provider_utils2.parseProviderOptions)({
30344
- provider: SAP_AI_PROVIDER_NAME,
30351
+ provider: baseProviderName,
30345
30352
  providerOptions,
30346
30353
  schema: sapAIEmbeddingProviderOptions
30347
30354
  });
@@ -30371,7 +30378,7 @@ var SAPAIEmbeddingModel = class {
30371
30378
  (data) => this.normalizeEmbedding(data.embedding)
30372
30379
  );
30373
30380
  const providerMetadata = {
30374
- "sap-ai": {
30381
+ [baseProviderName]: {
30375
30382
  model: this.modelId
30376
30383
  }
30377
30384
  };
@@ -30432,6 +30439,9 @@ var SAPAIEmbeddingModel = class {
30432
30439
  }
30433
30440
  };
30434
30441
 
30442
+ // src/sap-ai-provider.ts
30443
+ var import_provider4 = require("@ai-sdk/provider");
30444
+
30435
30445
  // src/sap-ai-language-model.ts
30436
30446
  var import_provider_utils3 = require("@ai-sdk/provider-utils");
30437
30447
  var import_orchestration2 = require("@sap-ai-sdk/orchestration");
@@ -30811,11 +30821,12 @@ var SAPAILanguageModel = class {
30811
30821
  tokenUsage,
30812
30822
  toolCalls
30813
30823
  };
30824
+ const baseProviderName = getBaseProviderName(this.config.provider);
30814
30825
  return {
30815
30826
  content,
30816
30827
  finishReason,
30817
30828
  providerMetadata: {
30818
- "sap-ai": {
30829
+ [baseProviderName]: {
30819
30830
  finishReason: finishReasonRaw ?? "unknown",
30820
30831
  finishReasonMapped: finishReason,
30821
30832
  ...typeof responseHeaders?.["x-request-id"] === "string" ? { requestId: responseHeaders["x-request-id"] } : {}
@@ -30946,6 +30957,7 @@ var SAPAILanguageModel = class {
30946
30957
  const toolCallsInProgress = /* @__PURE__ */ new Map();
30947
30958
  const sdkStream = streamResponse.stream;
30948
30959
  const modelId = this.modelId;
30960
+ const baseProviderName = getBaseProviderName(this.config.provider);
30949
30961
  const warningsSnapshot = [...warnings];
30950
30962
  const warningsOut = [...warningsSnapshot];
30951
30963
  const transformedStream = new ReadableStream({
@@ -31134,7 +31146,7 @@ var SAPAILanguageModel = class {
31134
31146
  controller.enqueue({
31135
31147
  finishReason: streamState.finishReason,
31136
31148
  providerMetadata: {
31137
- "sap-ai": {
31149
+ [baseProviderName]: {
31138
31150
  finishReason: streamState.finishReason.raw,
31139
31151
  responseId
31140
31152
  }
@@ -31190,8 +31202,9 @@ var SAPAILanguageModel = class {
31190
31202
  * @internal
31191
31203
  */
31192
31204
  async buildOrchestrationConfig(options) {
31205
+ const baseProviderName = getBaseProviderName(this.config.provider);
31193
31206
  const sapOptions = await (0, import_provider_utils3.parseProviderOptions)({
31194
- provider: SAP_AI_PROVIDER_NAME,
31207
+ provider: baseProviderName,
31195
31208
  providerOptions: options.providerOptions,
31196
31209
  schema: sapAILanguageModelProviderOptions
31197
31210
  });
@@ -31313,21 +31326,26 @@ var SAPAILanguageModel = class {
31313
31326
  type: "unsupported"
31314
31327
  });
31315
31328
  }
31329
+ let responseFormat;
31316
31330
  if (options.responseFormat?.type === "json") {
31331
+ responseFormat = options.responseFormat.schema ? {
31332
+ json_schema: {
31333
+ description: options.responseFormat.description,
31334
+ name: options.responseFormat.name ?? "response",
31335
+ schema: options.responseFormat.schema,
31336
+ strict: null
31337
+ },
31338
+ type: "json_schema"
31339
+ } : { type: "json_object" };
31340
+ } else if (this.settings.responseFormat) {
31341
+ responseFormat = this.settings.responseFormat;
31342
+ }
31343
+ if (responseFormat && responseFormat.type !== "text") {
31317
31344
  warnings.push({
31318
31345
  message: "responseFormat JSON mode is forwarded to the underlying model; support and schema adherence depend on the model/deployment.",
31319
31346
  type: "other"
31320
31347
  });
31321
31348
  }
31322
- const responseFormat = options.responseFormat?.type === "json" ? options.responseFormat.schema ? {
31323
- json_schema: {
31324
- description: options.responseFormat.description,
31325
- name: options.responseFormat.name ?? "response",
31326
- schema: options.responseFormat.schema,
31327
- strict: null
31328
- },
31329
- type: "json_schema"
31330
- } : { type: "json_object" } : void 0;
31331
31349
  const orchestrationConfig = {
31332
31350
  promptTemplating: {
31333
31351
  model: {
@@ -31451,6 +31469,7 @@ function createSAPAIProvider(options = {}) {
31451
31469
  if (options.defaultSettings?.modelParams) {
31452
31470
  validateModelParamsSettings(options.defaultSettings.modelParams);
31453
31471
  }
31472
+ const providerName = options.name ?? SAP_AI_PROVIDER_NAME;
31454
31473
  const resourceGroup = options.resourceGroup ?? "default";
31455
31474
  const warnOnAmbiguousConfig = options.warnOnAmbiguousConfig ?? true;
31456
31475
  if (warnOnAmbiguousConfig && options.deploymentId && options.resourceGroup) {
@@ -31475,14 +31494,14 @@ function createSAPAIProvider(options = {}) {
31475
31494
  return new SAPAILanguageModel(modelId, mergedSettings, {
31476
31495
  deploymentConfig,
31477
31496
  destination: options.destination,
31478
- provider: "sap-ai"
31497
+ provider: `${providerName}.chat`
31479
31498
  });
31480
31499
  };
31481
31500
  const createEmbeddingModel = (modelId, settings = {}) => {
31482
31501
  return new SAPAIEmbeddingModel(modelId, settings, {
31483
31502
  deploymentConfig,
31484
31503
  destination: options.destination,
31485
- provider: "sap-ai"
31504
+ provider: `${providerName}.embedding`
31486
31505
  });
31487
31506
  };
31488
31507
  const provider = function(modelId, settings) {
@@ -31491,9 +31510,19 @@ function createSAPAIProvider(options = {}) {
31491
31510
  }
31492
31511
  return createModel(modelId, settings);
31493
31512
  };
31513
+ provider.specificationVersion = "v3";
31494
31514
  provider.chat = createModel;
31515
+ provider.languageModel = createModel;
31495
31516
  provider.embedding = createEmbeddingModel;
31496
31517
  provider.textEmbeddingModel = createEmbeddingModel;
31518
+ provider.embeddingModel = createEmbeddingModel;
31519
+ provider.imageModel = (modelId) => {
31520
+ throw new import_provider4.NoSuchModelError({
31521
+ message: `SAP AI Core Orchestration Service does not support image generation. Model '${modelId}' is not available.`,
31522
+ modelId,
31523
+ modelType: "imageModel"
31524
+ });
31525
+ };
31497
31526
  return provider;
31498
31527
  }
31499
31528
  var sapai = createSAPAIProvider();
@@ -31519,6 +31548,7 @@ var import_orchestration5 = require("@sap-ai-sdk/orchestration");
31519
31548
  buildLlamaGuard38BFilter,
31520
31549
  buildTranslationConfig,
31521
31550
  createSAPAIProvider,
31551
+ getBaseProviderName,
31522
31552
  isConfigReference,
31523
31553
  sapAIEmbeddingProviderOptions,
31524
31554
  sapAILanguageModelProviderOptions,