@jerome-benoit/sap-ai-provider 4.6.6 → 4.6.7
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/dist/{chunk-NXIKTWY3.js → chunk-G4UCVIML.js} +3 -3
- package/dist/{chunk-SWBHSRPT.js → chunk-R76UJOY2.js} +2 -22
- package/dist/{chunk-SWBHSRPT.js.map → chunk-R76UJOY2.js.map} +1 -1
- package/dist/{chunk-OQIELEJP.js → chunk-T2KVPIIB.js} +2 -2
- package/dist/{chunk-26WNWERS.js → chunk-ZUDOGUGK.js} +3 -48
- package/dist/chunk-ZUDOGUGK.js.map +1 -0
- package/dist/{foundation-models-embedding-model-strategy-FVVUOPNF.js → foundation-models-embedding-model-strategy-4OZUE2OH.js} +4 -4
- package/dist/{foundation-models-language-model-strategy-WNNDNZNZ.js → foundation-models-language-model-strategy-JSJHJYMR.js} +4 -4
- package/dist/index.cjs +2 -65
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +0 -6
- package/dist/index.d.ts +0 -6
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/{orchestration-embedding-model-strategy-HV7ACKOY.js → orchestration-embedding-model-strategy-FE2QESSS.js} +4 -4
- package/dist/{orchestration-language-model-strategy-GIWRWQNG.js → orchestration-language-model-strategy-WEN7CMOV.js} +4 -4
- package/package.json +1 -1
- package/dist/chunk-26WNWERS.js.map +0 -1
- /package/dist/{chunk-NXIKTWY3.js.map → chunk-G4UCVIML.js.map} +0 -0
- /package/dist/{chunk-OQIELEJP.js.map → chunk-T2KVPIIB.js.map} +0 -0
- /package/dist/{foundation-models-embedding-model-strategy-FVVUOPNF.js.map → foundation-models-embedding-model-strategy-4OZUE2OH.js.map} +0 -0
- /package/dist/{foundation-models-language-model-strategy-WNNDNZNZ.js.map → foundation-models-language-model-strategy-JSJHJYMR.js.map} +0 -0
- /package/dist/{orchestration-embedding-model-strategy-HV7ACKOY.js.map → orchestration-embedding-model-strategy-FE2QESSS.js.map} +0 -0
- /package/dist/{orchestration-language-model-strategy-GIWRWQNG.js.map → orchestration-language-model-strategy-WEN7CMOV.js.map} +0 -0
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
getProviderName,
|
|
5
5
|
sapAIEmbeddingProviderOptions,
|
|
6
6
|
validateModelParamsWithWarnings
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-R76UJOY2.js";
|
|
8
8
|
|
|
9
9
|
// src/strategy-utils.ts
|
|
10
10
|
import { TooManyEmbeddingValuesForCallError } from "@ai-sdk/provider";
|
|
@@ -682,4 +682,4 @@ export {
|
|
|
682
682
|
normalizeEmbedding,
|
|
683
683
|
prepareEmbeddingCall
|
|
684
684
|
};
|
|
685
|
-
//# sourceMappingURL=chunk-
|
|
685
|
+
//# sourceMappingURL=chunk-T2KVPIIB.js.map
|
|
@@ -9,15 +9,14 @@ import {
|
|
|
9
9
|
createAISDKRequestBodySummary,
|
|
10
10
|
createStreamTransformer,
|
|
11
11
|
mapToolChoice
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-T2KVPIIB.js";
|
|
13
13
|
import {
|
|
14
14
|
VERSION,
|
|
15
15
|
convertToAISDKError,
|
|
16
16
|
getProviderName,
|
|
17
|
-
isPrefillError,
|
|
18
17
|
normalizeHeaders,
|
|
19
18
|
sapAILanguageModelProviderOptions
|
|
20
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-R76UJOY2.js";
|
|
21
20
|
|
|
22
21
|
// src/base-language-model-strategy.ts
|
|
23
22
|
import { parseProviderOptions } from "@ai-sdk/provider-utils";
|
|
@@ -59,15 +58,6 @@ var BaseLanguageModelStrategy = class {
|
|
|
59
58
|
warnings: [...commonParts.warnings, ...warnings]
|
|
60
59
|
});
|
|
61
60
|
} catch (error) {
|
|
62
|
-
if (this.shouldRetryWithoutPrefill(error, settings, options)) {
|
|
63
|
-
const retryPrompt = this.stripTrailingAssistantMessages(options.prompt);
|
|
64
|
-
if (retryPrompt.length > 0) {
|
|
65
|
-
return this.doGenerate(config, settings, {
|
|
66
|
-
...options,
|
|
67
|
-
prompt: retryPrompt
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
61
|
throw convertToAISDKError(error, {
|
|
72
62
|
operation: "doGenerate",
|
|
73
63
|
requestBody: createAISDKRequestBodySummary(options),
|
|
@@ -117,15 +107,6 @@ var BaseLanguageModelStrategy = class {
|
|
|
117
107
|
stream: transformedStream
|
|
118
108
|
};
|
|
119
109
|
} catch (error) {
|
|
120
|
-
if (this.shouldRetryWithoutPrefill(error, settings, options)) {
|
|
121
|
-
const retryPrompt = this.stripTrailingAssistantMessages(options.prompt);
|
|
122
|
-
if (retryPrompt.length > 0) {
|
|
123
|
-
return this.doStream(config, settings, {
|
|
124
|
-
...options,
|
|
125
|
-
prompt: retryPrompt
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
110
|
throw convertToAISDKError(error, {
|
|
130
111
|
operation: "doStream",
|
|
131
112
|
requestBody: createAISDKRequestBodySummary(options),
|
|
@@ -201,35 +182,9 @@ var BaseLanguageModelStrategy = class {
|
|
|
201
182
|
getIncludeReasoning(sapOptions, settings) {
|
|
202
183
|
return sapOptions?.includeReasoning ?? settings.includeReasoning ?? false;
|
|
203
184
|
}
|
|
204
|
-
/**
|
|
205
|
-
* Checks whether a prefill error should trigger a retry without trailing assistant messages.
|
|
206
|
-
* @param error - Caught error from API call.
|
|
207
|
-
* @param settings - Model settings.
|
|
208
|
-
* @param options - Call options containing the prompt.
|
|
209
|
-
* @returns Whether the request should be retried without trailing assistant messages.
|
|
210
|
-
* @internal
|
|
211
|
-
*/
|
|
212
|
-
shouldRetryWithoutPrefill(error, settings, options) {
|
|
213
|
-
const suppress = settings.suppressPrefillErrors ?? true;
|
|
214
|
-
return suppress && isPrefillError(error) && options.prompt.length > 0 && options.prompt.at(-1)?.role === "assistant";
|
|
215
|
-
}
|
|
216
|
-
/**
|
|
217
|
-
* Strips all trailing assistant messages from a prompt for prefill retry.
|
|
218
|
-
* Removes all (not just the last) to guarantee the retry cannot re-trigger.
|
|
219
|
-
* @param prompt - Original prompt array.
|
|
220
|
-
* @returns Prompt with trailing assistant messages removed.
|
|
221
|
-
* @internal
|
|
222
|
-
*/
|
|
223
|
-
stripTrailingAssistantMessages(prompt) {
|
|
224
|
-
let end = prompt.length;
|
|
225
|
-
while (end > 0 && prompt[end - 1]?.role === "assistant") {
|
|
226
|
-
end--;
|
|
227
|
-
}
|
|
228
|
-
return prompt.slice(0, end);
|
|
229
|
-
}
|
|
230
185
|
};
|
|
231
186
|
|
|
232
187
|
export {
|
|
233
188
|
BaseLanguageModelStrategy
|
|
234
189
|
};
|
|
235
|
-
//# sourceMappingURL=chunk-
|
|
190
|
+
//# sourceMappingURL=chunk-ZUDOGUGK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/base-language-model-strategy.ts"],"sourcesContent":["/** Base class for language model strategies using the Template Method pattern. */\nimport type {\n LanguageModelV3CallOptions,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamResult,\n SharedV3Warning,\n} from \"@ai-sdk/provider\";\nimport type { ChatMessage } from \"@sap-ai-sdk/orchestration\";\n\nimport { parseProviderOptions } from \"@ai-sdk/provider-utils\";\n\nimport type { SAPAIModelSettings } from \"./sap-ai-settings.js\";\nimport type { LanguageModelAPIStrategy, LanguageModelStrategyConfig } from \"./sap-ai-strategy.js\";\n\nimport { convertToSAPMessages } from \"./convert-to-sap-messages.js\";\nimport { convertToAISDKError, normalizeHeaders } from \"./sap-ai-error.js\";\nimport { getProviderName, sapAILanguageModelProviderOptions } from \"./sap-ai-provider-options.js\";\nimport {\n buildGenerateResult,\n buildModelParams,\n createAISDKRequestBodySummary,\n createStreamTransformer,\n mapToolChoice,\n type ParamMapping,\n type SAPToolChoice,\n type SDKCitation,\n type SDKResponse,\n type SDKStreamChunk,\n type SDKTokenUsage,\n StreamIdGenerator,\n} from \"./strategy-utils.js\";\nimport { VERSION } from \"./version.js\";\n\n/**\n * Result of building common parts for a language model request.\n * @template TMessages - The message array type (e.g., `ChatMessage[]`, `AzureOpenAiChatCompletionRequestMessage[]`)\n * @template TToolChoice - The tool choice type (e.g., `SAPToolChoice`)\n * @internal\n */\nexport interface CommonBuildResult<TMessages extends unknown[] = unknown[], TToolChoice = unknown> {\n readonly messages: TMessages;\n readonly modelParams: Record<string, unknown>;\n readonly providerName: string;\n readonly sapOptions: Record<string, unknown> | undefined;\n readonly toolChoice: TToolChoice;\n readonly warnings: SharedV3Warning[];\n}\n\n/**\n * Stream response shape returned by executeStreamCall.\n * @internal\n */\nexport interface StreamCallResponse {\n readonly getCitations?: () => SDKCitation[] | undefined;\n readonly getFinishReason: () => null | string | undefined;\n readonly getIntermediateFailures?: () => undefined | unknown[];\n readonly getTokenUsage: () => null | SDKTokenUsage | undefined;\n readonly responseHeaders?: Record<string, string>;\n /** Server-provided completion ID extracted from _data, if available. */\n readonly responseId?: string;\n readonly stream: AsyncIterable<SDKStreamChunk>;\n}\n\n/**\n * Abstract base class for language model strategies using the Template Method pattern.\n * @template TClient - The SDK client type (e.g., AzureOpenAiChatClient, OrchestrationClient).\n * @template TRequest - The API request type (e.g., AzureOpenAiChatCompletionParameters).\n * @template TSettings - The model settings type extending SAPAIModelSettings.\n * @internal\n */\nexport abstract class BaseLanguageModelStrategy<\n TClient,\n TRequest,\n TSettings extends SAPAIModelSettings = SAPAIModelSettings,\n> implements LanguageModelAPIStrategy<TSettings> {\n /**\n * Common parameter mappings for language model APIs.\n * @internal\n */\n static readonly COMMON_PARAM_MAPPINGS: readonly ParamMapping[] = [\n { camelCaseKey: \"maxTokens\", optionKey: \"maxOutputTokens\", outputKey: \"max_tokens\" },\n { camelCaseKey: \"temperature\", optionKey: \"temperature\", outputKey: \"temperature\" },\n { camelCaseKey: \"topP\", optionKey: \"topP\", outputKey: \"top_p\" },\n {\n camelCaseKey: \"frequencyPenalty\",\n optionKey: \"frequencyPenalty\",\n outputKey: \"frequency_penalty\",\n },\n {\n camelCaseKey: \"presencePenalty\",\n optionKey: \"presencePenalty\",\n outputKey: \"presence_penalty\",\n },\n { camelCaseKey: \"seed\", optionKey: \"seed\", outputKey: \"seed\" },\n { camelCaseKey: \"parallel_tool_calls\", outputKey: \"parallel_tool_calls\" },\n ] as const;\n\n async doGenerate(\n config: LanguageModelStrategyConfig,\n settings: TSettings,\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\n try {\n const commonParts = await this.buildCommonParts(config, settings, options);\n const { request, warnings } = this.buildRequest(config, settings, options, commonParts);\n\n const client = this.createClient(config, settings, commonParts);\n\n const response = await this.executeApiCall(client, request, options.abortSignal ?? undefined);\n\n return buildGenerateResult({\n modelId: config.modelId,\n providerName: commonParts.providerName,\n requestBody: request,\n response,\n responseHeaders: normalizeHeaders(response.rawResponse.headers),\n version: VERSION,\n warnings: [...commonParts.warnings, ...warnings],\n });\n } catch (error) {\n throw convertToAISDKError(error, {\n operation: \"doGenerate\",\n requestBody: createAISDKRequestBodySummary(options),\n url: this.getUrl(),\n });\n }\n }\n\n async doStream(\n config: LanguageModelStrategyConfig,\n settings: TSettings,\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\n try {\n const commonParts = await this.buildCommonParts(config, settings, options);\n const { request, warnings } = this.buildRequest(config, settings, options, commonParts);\n\n const client = this.createClient(config, settings, commonParts);\n\n const streamResponse = await this.executeStreamCall(\n client,\n request,\n options.abortSignal ?? undefined,\n settings,\n );\n\n const idGenerator = new StreamIdGenerator();\n const responseId = streamResponse.responseId ?? idGenerator.generateResponseId();\n\n const streamWarnings = this.collectStreamWarnings(settings, commonParts.sapOptions);\n\n const transformedStream = createStreamTransformer({\n convertToAISDKError,\n idGenerator,\n includeRawChunks: options.includeRawChunks ?? false,\n modelId: config.modelId,\n options,\n providerName: commonParts.providerName,\n responseHeaders: streamResponse.responseHeaders,\n responseId,\n sdkStream: streamResponse.stream,\n streamResponseGetCitations: streamResponse.getCitations,\n streamResponseGetFinishReason: streamResponse.getFinishReason,\n streamResponseGetIntermediateFailures: streamResponse.getIntermediateFailures,\n streamResponseGetTokenUsage: streamResponse.getTokenUsage,\n url: this.getUrl(),\n version: VERSION,\n warnings: [...commonParts.warnings, ...warnings, ...streamWarnings],\n });\n\n return {\n request: {\n body: request,\n },\n response: {\n headers: streamResponse.responseHeaders,\n },\n stream: transformedStream,\n };\n } catch (error) {\n throw convertToAISDKError(error, {\n operation: \"doStream\",\n requestBody: createAISDKRequestBodySummary(options),\n url: this.getUrl(),\n });\n }\n }\n\n /**\n * Builds common parts shared between doGenerate and doStream.\n * @param config - Strategy configuration.\n * @param settings - Model settings.\n * @param options - AI SDK call options.\n * @returns Common build result with typed messages and tool choice.\n * @internal\n */\n protected async buildCommonParts(\n config: LanguageModelStrategyConfig,\n settings: TSettings,\n options: LanguageModelV3CallOptions,\n ): Promise<CommonBuildResult<ChatMessage[], SAPToolChoice | undefined>> {\n const providerName = getProviderName(config.provider);\n\n const sapOptions = await parseProviderOptions({\n provider: providerName,\n providerOptions: options.providerOptions,\n schema: sapAILanguageModelProviderOptions,\n });\n\n const warnings: SharedV3Warning[] = [];\n\n const messages = convertToSAPMessages(options.prompt, {\n escapeTemplatePlaceholders: this.getEscapeTemplatePlaceholders(sapOptions, settings),\n includeReasoning: this.getIncludeReasoning(sapOptions, settings),\n });\n\n const { modelParams, warnings: paramWarnings } = buildModelParams({\n options,\n paramMappings: this.getParamMappings(),\n providerModelParams: sapOptions?.modelParams as Record<string, unknown> | undefined,\n settingsModelParams: settings.modelParams as Record<string, unknown> | undefined,\n });\n warnings.push(...paramWarnings);\n\n const toolChoice = mapToolChoice(options.toolChoice);\n\n return {\n messages,\n modelParams,\n providerName,\n sapOptions,\n toolChoice,\n warnings,\n };\n }\n\n /**\n * Builds the API-specific request body.\n * @param config - Strategy configuration.\n * @param settings - Model settings.\n * @param options - AI SDK call options.\n * @param commonParts - Common build result from base class.\n * @returns Request body and accumulated warnings.\n * @internal\n */\n protected abstract buildRequest(\n config: LanguageModelStrategyConfig,\n settings: TSettings,\n options: LanguageModelV3CallOptions,\n commonParts: CommonBuildResult<ChatMessage[], SAPToolChoice | undefined>,\n ): { readonly request: TRequest; readonly warnings: SharedV3Warning[] };\n\n /**\n * Collects stream-specific warnings.\n * Override in subclasses to add API-specific streaming warnings.\n * @param _settings - Model settings (unused in base implementation).\n * @param _sapOptions - Provider options (unused in base implementation).\n * @returns Array of warnings for streaming operations.\n * @internal\n */\n protected collectStreamWarnings(\n _settings: TSettings,\n _sapOptions?: Record<string, unknown>,\n ): SharedV3Warning[] {\n return [];\n }\n\n /**\n * Creates the appropriate SDK client for this API.\n * @param config - Strategy configuration.\n * @param settings - Model settings.\n * @param commonParts - Common build result (messages, options, etc.).\n * @returns SDK client instance.\n * @internal\n */\n protected abstract createClient(\n config: LanguageModelStrategyConfig,\n settings: TSettings,\n commonParts: CommonBuildResult<ChatMessage[], SAPToolChoice | undefined>,\n ): TClient;\n\n /**\n * Executes the non-streaming API call.\n * @param client - SDK client instance.\n * @param request - Request body.\n * @param abortSignal - Optional abort signal.\n * @returns SDK response.\n * @internal\n */\n protected abstract executeApiCall(\n client: TClient,\n request: TRequest,\n abortSignal: AbortSignal | undefined,\n ): Promise<SDKResponse>;\n\n /**\n * Executes the streaming API call.\n * @param client - SDK client instance.\n * @param request - Request body.\n * @param abortSignal - Optional abort signal.\n * @param settings - Model settings for API-specific stream options.\n * @returns Stream response with accessors.\n * @internal\n */\n protected abstract executeStreamCall(\n client: TClient,\n request: TRequest,\n abortSignal: AbortSignal | undefined,\n settings: TSettings,\n ): Promise<StreamCallResponse>;\n\n /**\n * Returns whether to escape template placeholders for this API.\n * @param _sapOptions - Parsed provider options (unused in base implementation).\n * @param _settings - Model settings (unused in base implementation).\n * @returns false by default; Orchestration strategy overrides to return true.\n * @internal\n */\n protected getEscapeTemplatePlaceholders(\n _sapOptions: Record<string, unknown> | undefined,\n _settings: TSettings,\n ): boolean {\n return false;\n }\n\n /**\n * Returns whether to include reasoning in the response.\n * @param sapOptions - Parsed provider options.\n * @param settings - Model settings.\n * @returns Whether to include reasoning (checks sapOptions then settings, defaults to false).\n * @internal\n */\n protected getIncludeReasoning(\n sapOptions: Record<string, unknown> | undefined,\n settings: TSettings,\n ): boolean {\n return (\n (sapOptions?.includeReasoning as boolean | undefined) ??\n (settings as SAPAIModelSettings & { includeReasoning?: boolean }).includeReasoning ??\n false\n );\n }\n\n /**\n * Returns the parameter mappings specific to this API strategy.\n * @returns Array of parameter mappings.\n * @internal\n */\n protected abstract getParamMappings(): readonly ParamMapping[];\n\n /**\n * Returns the URL identifier for this API (used in error messages).\n * @returns URL string identifier.\n * @internal\n */\n protected abstract getUrl(): string;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {createRequire as __createRequire} from 'module';var require=__createRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
BaseEmbeddingModelStrategy
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-G4UCVIML.js";
|
|
5
5
|
import {
|
|
6
6
|
buildModelDeployment,
|
|
7
7
|
hasKeys,
|
|
8
8
|
normalizeEmbedding
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-T2KVPIIB.js";
|
|
10
|
+
import "./chunk-R76UJOY2.js";
|
|
11
11
|
|
|
12
12
|
// src/foundation-models-embedding-model-strategy.ts
|
|
13
13
|
var FoundationModelsEmbeddingModelStrategy = class extends BaseEmbeddingModelStrategy {
|
|
@@ -51,4 +51,4 @@ var FoundationModelsEmbeddingModelStrategy = class extends BaseEmbeddingModelStr
|
|
|
51
51
|
export {
|
|
52
52
|
FoundationModelsEmbeddingModelStrategy
|
|
53
53
|
};
|
|
54
|
-
//# sourceMappingURL=foundation-models-embedding-model-strategy-
|
|
54
|
+
//# sourceMappingURL=foundation-models-embedding-model-strategy-4OZUE2OH.js.map
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import {createRequire as __createRequire} from 'module';var require=__createRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
BaseLanguageModelStrategy
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-ZUDOGUGK.js";
|
|
5
5
|
import "./chunk-IIBSUXGT.js";
|
|
6
6
|
import {
|
|
7
7
|
buildModelDeployment,
|
|
8
8
|
convertResponseFormat,
|
|
9
9
|
convertToolsToSAPFormat
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-T2KVPIIB.js";
|
|
11
11
|
import {
|
|
12
12
|
normalizeHeaders
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-R76UJOY2.js";
|
|
14
14
|
|
|
15
15
|
// src/foundation-models-language-model-strategy.ts
|
|
16
16
|
var FOUNDATION_MODELS_PARAM_MAPPINGS = [
|
|
@@ -89,4 +89,4 @@ var FoundationModelsLanguageModelStrategy = class extends BaseLanguageModelStrat
|
|
|
89
89
|
export {
|
|
90
90
|
FoundationModelsLanguageModelStrategy
|
|
91
91
|
};
|
|
92
|
-
//# sourceMappingURL=foundation-models-language-model-strategy-
|
|
92
|
+
//# sourceMappingURL=foundation-models-language-model-strategy-JSJHJYMR.js.map
|
package/dist/index.cjs
CHANGED
|
@@ -30244,10 +30244,6 @@ See: https://help.sap.com/docs/sap-ai-core/sap-ai-core-service-guide/create-depl
|
|
|
30244
30244
|
context
|
|
30245
30245
|
);
|
|
30246
30246
|
}
|
|
30247
|
-
function isPrefillError(error) {
|
|
30248
|
-
const message = extractSAPErrorMessage(error)?.toLowerCase();
|
|
30249
|
-
return message !== void 0 && PREFILL_ERROR_KEYWORDS.some((kw) => message.includes(kw));
|
|
30250
|
-
}
|
|
30251
30247
|
function normalizeHeaders(headers) {
|
|
30252
30248
|
if (!headers || typeof headers !== "object") return void 0;
|
|
30253
30249
|
const record = headers;
|
|
@@ -30323,17 +30319,6 @@ function extractModelIdentifier(message, location) {
|
|
|
30323
30319
|
}
|
|
30324
30320
|
return void 0;
|
|
30325
30321
|
}
|
|
30326
|
-
function extractSAPErrorMessage(error) {
|
|
30327
|
-
const errorResponse = findStructuredErrorResponse(error);
|
|
30328
|
-
if (errorResponse) {
|
|
30329
|
-
return extractErrorFields(errorResponse).message;
|
|
30330
|
-
}
|
|
30331
|
-
const rootError = getRootError(error);
|
|
30332
|
-
if (rootError instanceof Error) {
|
|
30333
|
-
return rootError.message;
|
|
30334
|
-
}
|
|
30335
|
-
return typeof rootError === "string" ? rootError : void 0;
|
|
30336
|
-
}
|
|
30337
30322
|
function findStructuredErrorResponse(error) {
|
|
30338
30323
|
const rootError = getRootError(error);
|
|
30339
30324
|
if (isStructuredErrorResponse(rootError)) {
|
|
@@ -30460,7 +30445,7 @@ function tryExtractSAPErrorFromMessage(message) {
|
|
|
30460
30445
|
return null;
|
|
30461
30446
|
}
|
|
30462
30447
|
}
|
|
30463
|
-
var import_provider2, import_util, HTTP_STATUS, ERROR_MATCHERS, AUTHENTICATION_ERROR_KEYWORDS, DEPLOYMENT_ERROR_KEYWORDS, ApiSwitchError, UnsupportedFeatureError
|
|
30448
|
+
var import_provider2, import_util, HTTP_STATUS, ERROR_MATCHERS, AUTHENTICATION_ERROR_KEYWORDS, DEPLOYMENT_ERROR_KEYWORDS, ApiSwitchError, UnsupportedFeatureError;
|
|
30464
30449
|
var init_sap_ai_error = __esm({
|
|
30465
30450
|
"src/sap-ai-error.ts"() {
|
|
30466
30451
|
"use strict";
|
|
@@ -30619,10 +30604,6 @@ The model's response was blocked by content safety filters. Try a different prom
|
|
|
30619
30604
|
this.name = "UnsupportedFeatureError";
|
|
30620
30605
|
}
|
|
30621
30606
|
};
|
|
30622
|
-
PREFILL_ERROR_KEYWORDS = [
|
|
30623
|
-
"does not support assistant message prefill",
|
|
30624
|
-
"conversation must end with a user message"
|
|
30625
|
-
];
|
|
30626
30607
|
}
|
|
30627
30608
|
});
|
|
30628
30609
|
|
|
@@ -31301,7 +31282,7 @@ var VERSION;
|
|
|
31301
31282
|
var init_version = __esm({
|
|
31302
31283
|
"src/version.ts"() {
|
|
31303
31284
|
"use strict";
|
|
31304
|
-
VERSION = true ? "4.6.
|
|
31285
|
+
VERSION = true ? "4.6.7" : "0.0.0-test";
|
|
31305
31286
|
}
|
|
31306
31287
|
});
|
|
31307
31288
|
|
|
@@ -31516,15 +31497,6 @@ var init_base_language_model_strategy = __esm({
|
|
|
31516
31497
|
warnings: [...commonParts.warnings, ...warnings]
|
|
31517
31498
|
});
|
|
31518
31499
|
} catch (error) {
|
|
31519
|
-
if (this.shouldRetryWithoutPrefill(error, settings, options)) {
|
|
31520
|
-
const retryPrompt = this.stripTrailingAssistantMessages(options.prompt);
|
|
31521
|
-
if (retryPrompt.length > 0) {
|
|
31522
|
-
return this.doGenerate(config, settings, {
|
|
31523
|
-
...options,
|
|
31524
|
-
prompt: retryPrompt
|
|
31525
|
-
});
|
|
31526
|
-
}
|
|
31527
|
-
}
|
|
31528
31500
|
throw convertToAISDKError(error, {
|
|
31529
31501
|
operation: "doGenerate",
|
|
31530
31502
|
requestBody: createAISDKRequestBodySummary(options),
|
|
@@ -31574,15 +31546,6 @@ var init_base_language_model_strategy = __esm({
|
|
|
31574
31546
|
stream: transformedStream
|
|
31575
31547
|
};
|
|
31576
31548
|
} catch (error) {
|
|
31577
|
-
if (this.shouldRetryWithoutPrefill(error, settings, options)) {
|
|
31578
|
-
const retryPrompt = this.stripTrailingAssistantMessages(options.prompt);
|
|
31579
|
-
if (retryPrompt.length > 0) {
|
|
31580
|
-
return this.doStream(config, settings, {
|
|
31581
|
-
...options,
|
|
31582
|
-
prompt: retryPrompt
|
|
31583
|
-
});
|
|
31584
|
-
}
|
|
31585
|
-
}
|
|
31586
31549
|
throw convertToAISDKError(error, {
|
|
31587
31550
|
operation: "doStream",
|
|
31588
31551
|
requestBody: createAISDKRequestBodySummary(options),
|
|
@@ -31658,32 +31621,6 @@ var init_base_language_model_strategy = __esm({
|
|
|
31658
31621
|
getIncludeReasoning(sapOptions, settings) {
|
|
31659
31622
|
return sapOptions?.includeReasoning ?? settings.includeReasoning ?? false;
|
|
31660
31623
|
}
|
|
31661
|
-
/**
|
|
31662
|
-
* Checks whether a prefill error should trigger a retry without trailing assistant messages.
|
|
31663
|
-
* @param error - Caught error from API call.
|
|
31664
|
-
* @param settings - Model settings.
|
|
31665
|
-
* @param options - Call options containing the prompt.
|
|
31666
|
-
* @returns Whether the request should be retried without trailing assistant messages.
|
|
31667
|
-
* @internal
|
|
31668
|
-
*/
|
|
31669
|
-
shouldRetryWithoutPrefill(error, settings, options) {
|
|
31670
|
-
const suppress = settings.suppressPrefillErrors ?? true;
|
|
31671
|
-
return suppress && isPrefillError(error) && options.prompt.length > 0 && options.prompt.at(-1)?.role === "assistant";
|
|
31672
|
-
}
|
|
31673
|
-
/**
|
|
31674
|
-
* Strips all trailing assistant messages from a prompt for prefill retry.
|
|
31675
|
-
* Removes all (not just the last) to guarantee the retry cannot re-trigger.
|
|
31676
|
-
* @param prompt - Original prompt array.
|
|
31677
|
-
* @returns Prompt with trailing assistant messages removed.
|
|
31678
|
-
* @internal
|
|
31679
|
-
*/
|
|
31680
|
-
stripTrailingAssistantMessages(prompt) {
|
|
31681
|
-
let end = prompt.length;
|
|
31682
|
-
while (end > 0 && prompt[end - 1]?.role === "assistant") {
|
|
31683
|
-
end--;
|
|
31684
|
-
}
|
|
31685
|
-
return prompt.slice(0, end);
|
|
31686
|
-
}
|
|
31687
31624
|
};
|
|
31688
31625
|
}
|
|
31689
31626
|
});
|