@ai-sdk/deepseek 1.0.60 → 1.0.61
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/CHANGELOG.md +6 -0
- package/dist/index.js +18 -9
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +18 -9
- package/dist/index.mjs.map +1 -1
- package/dist/internal/index.js +17 -8
- package/dist/internal/index.js.map +1 -1
- package/dist/internal/index.mjs +17 -8
- package/dist/internal/index.mjs.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
package/dist/index.js
CHANGED
|
@@ -407,6 +407,9 @@ var tokenUsageSchema = import_v43.z.object({
|
|
|
407
407
|
prompt_cache_hit_tokens: import_v43.z.number().nullish(),
|
|
408
408
|
prompt_cache_miss_tokens: import_v43.z.number().nullish(),
|
|
409
409
|
total_tokens: import_v43.z.number().nullish(),
|
|
410
|
+
prompt_tokens_details: import_v43.z.object({
|
|
411
|
+
cached_tokens: import_v43.z.number().nullish()
|
|
412
|
+
}).nullish(),
|
|
410
413
|
completion_tokens_details: import_v43.z.object({
|
|
411
414
|
reasoning_tokens: import_v43.z.number().nullish()
|
|
412
415
|
}).nullish()
|
|
@@ -592,6 +595,10 @@ function mapDeepSeekFinishReason(finishReason) {
|
|
|
592
595
|
}
|
|
593
596
|
|
|
594
597
|
// src/chat/deepseek-chat-language-model.ts
|
|
598
|
+
function getDeepSeekCacheReadTokens(usage) {
|
|
599
|
+
var _a, _b, _c;
|
|
600
|
+
return (_c = (_b = usage == null ? void 0 : usage.prompt_cache_hit_tokens) != null ? _b : (_a = usage == null ? void 0 : usage.prompt_tokens_details) == null ? void 0 : _a.cached_tokens) != null ? _c : void 0;
|
|
601
|
+
}
|
|
595
602
|
function mapDeepSeekProviderReasoningEffort({
|
|
596
603
|
reasoningEffort,
|
|
597
604
|
warnings
|
|
@@ -747,7 +754,7 @@ var DeepSeekChatLanguageModel = class {
|
|
|
747
754
|
};
|
|
748
755
|
}
|
|
749
756
|
async doGenerate(options) {
|
|
750
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l
|
|
757
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
|
|
751
758
|
const { args, warnings } = await this.getArgs({ ...options });
|
|
752
759
|
const {
|
|
753
760
|
responseHeaders,
|
|
@@ -790,6 +797,7 @@ var DeepSeekChatLanguageModel = class {
|
|
|
790
797
|
if (text != null && text.length > 0) {
|
|
791
798
|
content.push({ type: "text", text });
|
|
792
799
|
}
|
|
800
|
+
const cacheReadTokens = getDeepSeekCacheReadTokens(responseBody.usage);
|
|
793
801
|
return {
|
|
794
802
|
content,
|
|
795
803
|
finishReason: mapDeepSeekFinishReason(choice.finish_reason),
|
|
@@ -798,12 +806,12 @@ var DeepSeekChatLanguageModel = class {
|
|
|
798
806
|
outputTokens: (_e = (_d = responseBody.usage) == null ? void 0 : _d.completion_tokens) != null ? _e : void 0,
|
|
799
807
|
totalTokens: (_g = (_f = responseBody.usage) == null ? void 0 : _f.total_tokens) != null ? _g : void 0,
|
|
800
808
|
reasoningTokens: (_j = (_i = (_h = responseBody.usage) == null ? void 0 : _h.completion_tokens_details) == null ? void 0 : _i.reasoning_tokens) != null ? _j : void 0,
|
|
801
|
-
cachedInputTokens:
|
|
809
|
+
cachedInputTokens: cacheReadTokens
|
|
802
810
|
},
|
|
803
811
|
providerMetadata: {
|
|
804
812
|
[this.providerOptionsName]: {
|
|
805
|
-
promptCacheHitTokens:
|
|
806
|
-
promptCacheMissTokens: (
|
|
813
|
+
promptCacheHitTokens: cacheReadTokens != null ? cacheReadTokens : null,
|
|
814
|
+
promptCacheMissTokens: (_l = (_k = responseBody.usage) == null ? void 0 : _k.prompt_cache_miss_tokens) != null ? _l : null,
|
|
807
815
|
...responseBody.object != null && {
|
|
808
816
|
responseObject: responseBody.object
|
|
809
817
|
},
|
|
@@ -1049,7 +1057,7 @@ var DeepSeekChatLanguageModel = class {
|
|
|
1049
1057
|
}
|
|
1050
1058
|
},
|
|
1051
1059
|
flush(controller) {
|
|
1052
|
-
var _a, _b, _c, _d, _e, _f, _g
|
|
1060
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
1053
1061
|
if (isActiveReasoning) {
|
|
1054
1062
|
controller.enqueue({ type: "reasoning-end", id: "reasoning-0" });
|
|
1055
1063
|
}
|
|
@@ -1070,6 +1078,7 @@ var DeepSeekChatLanguageModel = class {
|
|
|
1070
1078
|
input: toolCall.function.arguments
|
|
1071
1079
|
});
|
|
1072
1080
|
}
|
|
1081
|
+
const cacheReadTokens = getDeepSeekCacheReadTokens(usage);
|
|
1073
1082
|
controller.enqueue({
|
|
1074
1083
|
type: "finish",
|
|
1075
1084
|
finishReason,
|
|
@@ -1078,12 +1087,12 @@ var DeepSeekChatLanguageModel = class {
|
|
|
1078
1087
|
outputTokens: (_c = usage == null ? void 0 : usage.completion_tokens) != null ? _c : void 0,
|
|
1079
1088
|
totalTokens: (_d = usage == null ? void 0 : usage.total_tokens) != null ? _d : void 0,
|
|
1080
1089
|
reasoningTokens: (_f = (_e = usage == null ? void 0 : usage.completion_tokens_details) == null ? void 0 : _e.reasoning_tokens) != null ? _f : void 0,
|
|
1081
|
-
cachedInputTokens:
|
|
1090
|
+
cachedInputTokens: cacheReadTokens
|
|
1082
1091
|
},
|
|
1083
1092
|
providerMetadata: {
|
|
1084
1093
|
[providerOptionsName]: {
|
|
1085
|
-
promptCacheHitTokens:
|
|
1086
|
-
promptCacheMissTokens: (
|
|
1094
|
+
promptCacheHitTokens: cacheReadTokens != null ? cacheReadTokens : null,
|
|
1095
|
+
promptCacheMissTokens: (_g = usage == null ? void 0 : usage.prompt_cache_miss_tokens) != null ? _g : null,
|
|
1087
1096
|
...responseObject != null && { responseObject },
|
|
1088
1097
|
...choiceIndex != null && { choiceIndex },
|
|
1089
1098
|
...messageRole != null && { messageRole },
|
|
@@ -1114,7 +1123,7 @@ var DeepSeekChatLanguageModel = class {
|
|
|
1114
1123
|
};
|
|
1115
1124
|
|
|
1116
1125
|
// src/version.ts
|
|
1117
|
-
var VERSION = true ? "1.0.
|
|
1126
|
+
var VERSION = true ? "1.0.61" : "0.0.0-test";
|
|
1118
1127
|
|
|
1119
1128
|
// src/deepseek-provider.ts
|
|
1120
1129
|
function createDeepSeek(options = {}) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/deepseek-provider.ts","../src/chat/deepseek-chat-language-model.ts","../src/chat/convert-to-deepseek-chat-messages.ts","../src/chat/deepseek-chat-options.ts","../src/chat/deepseek-file-part-options.ts","../src/chat/is-deepseek-v4-model.ts","../src/chat/deepseek-chat-api-types.ts","../src/chat/deepseek-prepare-tools.ts","../src/chat/get-response-metadata.ts","../src/chat/map-deepseek-finish-reason.ts","../src/version.ts"],"sourcesContent":["export { createDeepSeek, deepseek } from './deepseek-provider';\nexport type {\n DeepSeekProvider,\n DeepSeekProviderSettings,\n} from './deepseek-provider';\nexport { VERSION } from './version';\nexport type {\n DeepSeekAssistantMessageProviderOptions,\n DeepSeekChatOptions,\n DeepSeekMessageProviderOptions,\n} from './chat/deepseek-chat-options';\nexport type { DeepSeekErrorData } from './chat/deepseek-chat-api-types';\nexport type { DeepSeekFilePartProviderOptions } from './chat/deepseek-file-part-options';\n","import {\n type LanguageModelV2,\n type ProviderV2,\n NoSuchModelError,\n} from '@ai-sdk/provider';\nimport {\n type FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport type { DeepSeekChatModelId } from './chat/deepseek-chat-options';\nimport { DeepSeekChatLanguageModel } from './chat/deepseek-chat-language-model';\nimport { VERSION } from './version';\n\nexport interface DeepSeekProviderSettings {\n /**\n * DeepSeek API key.\n */\n apiKey?: string;\n\n /**\n * Base URL for the API calls.\n */\n baseURL?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\nexport interface DeepSeekProvider extends ProviderV2 {\n /**\nCreates a DeepSeek model for text generation.\n*/\n (modelId: DeepSeekChatModelId): LanguageModelV2;\n\n /**\nCreates a DeepSeek model for text generation.\n*/\n languageModel(modelId: DeepSeekChatModelId): LanguageModelV2;\n\n /**\nCreates a DeepSeek chat model for text generation.\n*/\n chat(modelId: DeepSeekChatModelId): LanguageModelV2;\n}\n\nexport function createDeepSeek(\n options: DeepSeekProviderSettings = {},\n): DeepSeekProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ?? 'https://api.deepseek.com';\n\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'DEEPSEEK_API_KEY',\n description: 'DeepSeek API key',\n })}`,\n ...options.headers,\n },\n `ai-sdk/deepseek/${VERSION}`,\n );\n\n const createLanguageModel = (modelId: DeepSeekChatModelId) => {\n return new DeepSeekChatLanguageModel(modelId, {\n provider: `deepseek.chat`,\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n supportsAssistantPrefixCompletion: baseURL.endsWith('/beta'),\n });\n };\n\n const provider = (modelId: DeepSeekChatModelId) =>\n createLanguageModel(modelId);\n\n provider.languageModel = createLanguageModel;\n provider.chat = createLanguageModel;\n\n provider.textEmbeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'textEmbeddingModel' });\n };\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\nexport const deepseek = createDeepSeek();\n","import {\n type APICallError,\n type LanguageModelV2,\n type LanguageModelV2CallWarning,\n type LanguageModelV2Content,\n type LanguageModelV2FinishReason,\n type LanguageModelV2StreamPart,\n InvalidResponseDataError,\n} from '@ai-sdk/provider';\nimport {\n type FetchFunction,\n type InferSchema,\n type ParseResult,\n type ResponseHandler,\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n generateId,\n isParsableJson,\n parseProviderOptions,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { convertToDeepSeekChatMessages } from './convert-to-deepseek-chat-messages';\nimport {\n type DeepSeekChatTokenUsage,\n deepseekChatChunkSchema,\n deepseekChatResponseSchema,\n deepSeekErrorSchema,\n type DeepSeekChatLogprob,\n} from './deepseek-chat-api-types';\nimport {\n type DeepSeekChatModelId,\n deepseekChatOptions,\n} from './deepseek-chat-options';\nimport { prepareTools } from './deepseek-prepare-tools';\nimport { getResponseMetadata } from './get-response-metadata';\nimport { isDeepSeekV4Model } from './is-deepseek-v4-model';\nimport { mapDeepSeekFinishReason } from './map-deepseek-finish-reason';\n\nexport type DeepSeekChatConfig = {\n provider: string;\n headers: () => Record<string, string | undefined>;\n url: (options: { modelId: string; path: string }) => string;\n fetch?: FetchFunction;\n supportsAssistantPrefixCompletion?: boolean;\n supportsPenaltySampling?: boolean;\n supportsThinking?: boolean;\n supportsStructuredOutputs?: boolean;\n};\n\nfunction mapDeepSeekProviderReasoningEffort({\n reasoningEffort,\n warnings,\n}: {\n reasoningEffort: 'low' | 'medium' | 'high' | 'xhigh' | 'max';\n warnings: LanguageModelV2CallWarning[];\n}): 'low' | 'high' | 'max' {\n const mapped =\n reasoningEffort === 'medium'\n ? 'high'\n : reasoningEffort === 'xhigh'\n ? 'max'\n : reasoningEffort;\n\n if (mapped !== reasoningEffort) {\n warnings.push({\n type: 'other',\n message: `reasoningEffort \"${reasoningEffort}\" is not a canonical DeepSeek value. mapped to \"${mapped}\".`,\n });\n }\n\n return mapped;\n}\n\nexport class DeepSeekChatLanguageModel implements LanguageModelV2 {\n readonly specificationVersion = 'v2';\n\n readonly modelId: DeepSeekChatModelId;\n\n readonly supportedUrls = {\n 'image/*': [/^https?:\\/\\/.*$/],\n };\n\n private readonly config: DeepSeekChatConfig;\n private readonly failedResponseHandler: ResponseHandler<APICallError>;\n\n constructor(modelId: DeepSeekChatModelId, config: DeepSeekChatConfig) {\n this.modelId = modelId;\n this.config = config;\n\n this.failedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: deepSeekErrorSchema,\n errorToMessage: (error: InferSchema<typeof deepSeekErrorSchema>) =>\n error.error.message,\n });\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n private get providerOptionsName(): string {\n return this.config.provider.split('.')[0].trim();\n }\n\n private async getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n providerOptions,\n stopSequences,\n responseFormat,\n tools,\n toolChoice,\n seed,\n }: Parameters<LanguageModelV2['doGenerate']>[0]) {\n const deepseekOptions =\n (await parseProviderOptions({\n provider: this.providerOptionsName,\n providerOptions,\n schema: deepseekChatOptions,\n })) ?? {};\n\n const supportsStructuredOutputs =\n this.config.supportsStructuredOutputs === true;\n const supportsPenaltySampling =\n this.config.supportsPenaltySampling === true;\n\n const { messages, warnings } = await convertToDeepSeekChatMessages({\n prompt,\n responseFormat,\n modelId: this.modelId,\n providerOptionsName: this.providerOptionsName,\n supportsAssistantPrefixCompletion:\n this.config.supportsAssistantPrefixCompletion,\n supportsStructuredOutputs,\n });\n const allWarnings = [...warnings];\n\n if (topK != null) {\n allWarnings.push({ type: 'unsupported-setting', setting: 'topK' });\n }\n\n if (seed != null) {\n allWarnings.push({ type: 'unsupported-setting', setting: 'seed' });\n }\n\n if (!supportsPenaltySampling && frequencyPenalty != null) {\n allWarnings.push({\n type: 'other',\n message:\n 'frequencyPenalty is deprecated by DeepSeek and has been omitted. Remove frequencyPenalty from the request.',\n });\n }\n\n if (!supportsPenaltySampling && presencePenalty != null) {\n allWarnings.push({\n type: 'other',\n message:\n 'presencePenalty is deprecated by DeepSeek and has been omitted. Remove presencePenalty from the request.',\n });\n }\n\n const {\n tools: deepseekTools,\n toolChoice: deepseekToolChoices,\n toolWarnings,\n } = prepareTools({\n tools,\n toolChoice,\n });\n allWarnings.push(...toolWarnings);\n\n const thinkingType = deepseekOptions.thinking?.type;\n if (thinkingType === 'adaptive') {\n allWarnings.push({\n type: 'other',\n message:\n 'thinking.type \"adaptive\" is not a canonical DeepSeek value. mapped to \"enabled\".',\n });\n }\n\n const thinking =\n this.config.supportsThinking === false\n ? undefined\n : thinkingType != null\n ? { type: thinkingType === 'adaptive' ? 'enabled' : thinkingType }\n : undefined;\n\n const isThinkingEnabled =\n this.config.supportsThinking !== false &&\n thinking?.type !== 'disabled' &&\n (thinking != null ||\n this.modelId === 'deepseek-reasoner' ||\n isDeepSeekV4Model(this.modelId));\n\n if (isThinkingEnabled && temperature != null) {\n allWarnings.push({\n type: 'unsupported-setting',\n setting: 'temperature',\n details:\n \"temperature has no effect when DeepSeek thinking is enabled. Set providerOptions.deepseek.thinking.type to 'disabled' to use temperature.\",\n });\n }\n\n if (isThinkingEnabled && topP != null) {\n allWarnings.push({\n type: 'unsupported-setting',\n setting: 'topP',\n details:\n \"topP has no effect when DeepSeek thinking is enabled. Set providerOptions.deepseek.thinking.type to 'disabled' to use topP.\",\n });\n }\n\n const reasoningEffort =\n deepseekOptions.reasoningEffort != null\n ? mapDeepSeekProviderReasoningEffort({\n reasoningEffort: deepseekOptions.reasoningEffort,\n warnings: allWarnings,\n })\n : undefined;\n\n return {\n args: {\n model: this.modelId,\n ...((deepseekOptions.logprobs === true ||\n deepseekOptions.topLogprobs != null) && { logprobs: true }),\n ...(deepseekOptions.topLogprobs != null && {\n top_logprobs: deepseekOptions.topLogprobs,\n }),\n max_tokens: maxOutputTokens,\n temperature: isThinkingEnabled ? undefined : temperature,\n top_p: isThinkingEnabled ? undefined : topP,\n frequency_penalty: supportsPenaltySampling\n ? frequencyPenalty\n : undefined,\n presence_penalty: supportsPenaltySampling ? presencePenalty : undefined,\n response_format:\n responseFormat?.type === 'json'\n ? supportsStructuredOutputs && responseFormat.schema != null\n ? {\n type: 'json_schema',\n json_schema: {\n schema: responseFormat.schema,\n strict: deepseekOptions.strictJsonSchema ?? true,\n name: responseFormat.name ?? 'response',\n description: responseFormat.description,\n },\n }\n : { type: 'json_object' }\n : undefined,\n stop: stopSequences,\n messages,\n tools: deepseekTools,\n tool_choice: deepseekToolChoices,\n thinking,\n ...(deepseekOptions.userId != null && {\n user_id: deepseekOptions.userId,\n }),\n ...(thinking?.type !== 'disabled' &&\n reasoningEffort != null && {\n reasoning_effort: reasoningEffort,\n }),\n },\n warnings: allWarnings,\n };\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV2['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV2['doGenerate']>>> {\n const { args, warnings } = await this.getArgs({ ...options });\n\n const {\n responseHeaders,\n value: responseBody,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url({\n path: '/chat/completions',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: this.failedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n deepseekChatResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const choice = responseBody.choices[0];\n const content: Array<LanguageModelV2Content> = [];\n\n // reasoning content (before text):\n const reasoning = choice.message.reasoning_content;\n if (reasoning != null && reasoning.length > 0) {\n content.push({\n type: 'reasoning',\n text: reasoning,\n });\n }\n\n // tool calls:\n if (choice.message.tool_calls != null) {\n for (const toolCall of choice.message.tool_calls) {\n content.push({\n type: 'tool-call',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments!,\n });\n }\n }\n\n // text content:\n const text = choice.message.content;\n if (text != null && text.length > 0) {\n content.push({ type: 'text', text });\n }\n\n return {\n content,\n finishReason: mapDeepSeekFinishReason(choice.finish_reason),\n usage: {\n inputTokens: responseBody.usage?.prompt_tokens ?? undefined,\n outputTokens: responseBody.usage?.completion_tokens ?? undefined,\n totalTokens: responseBody.usage?.total_tokens ?? undefined,\n reasoningTokens:\n responseBody.usage?.completion_tokens_details?.reasoning_tokens ??\n undefined,\n cachedInputTokens:\n responseBody.usage?.prompt_cache_hit_tokens ?? undefined,\n },\n providerMetadata: {\n [this.providerOptionsName]: {\n promptCacheHitTokens:\n responseBody.usage?.prompt_cache_hit_tokens ?? null,\n promptCacheMissTokens:\n responseBody.usage?.prompt_cache_miss_tokens ?? null,\n ...(responseBody.object != null && {\n responseObject: responseBody.object,\n }),\n ...(choice.index != null && { choiceIndex: choice.index }),\n ...(choice.message.role != null && {\n messageRole: choice.message.role,\n }),\n ...(choice.message.tool_calls != null && {\n toolCallTypes: choice.message.tool_calls\n .map(toolCall => toolCall.type)\n .filter(type => type != null),\n }),\n ...(choice.logprobs != null && { logprobs: choice.logprobs }),\n ...(responseBody.system_fingerprint != null && {\n systemFingerprint: responseBody.system_fingerprint,\n }),\n },\n },\n request: { body: args },\n response: {\n ...getResponseMetadata(responseBody),\n headers: responseHeaders,\n body: rawResponse,\n },\n warnings,\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV2['doStream']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV2['doStream']>>> {\n const { args, warnings } = await this.getArgs({ ...options });\n\n const body = {\n ...args,\n stream: true,\n stream_options: { include_usage: true },\n };\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: this.config.url({\n path: '/chat/completions',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: this.failedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n deepseekChatChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n hasFinished: boolean;\n }> = [];\n\n let finishReason: LanguageModelV2FinishReason = 'unknown';\n let usage: DeepSeekChatTokenUsage | undefined = undefined;\n let systemFingerprint: string | undefined = undefined;\n let isFirstChunk = true;\n const providerOptionsName = this.providerOptionsName;\n let isActiveReasoning = false;\n let isActiveText = false;\n let responseObject: 'chat.completion.chunk' | undefined;\n let choiceIndex: number | undefined;\n let messageRole: 'assistant' | undefined;\n const toolCallTypes = new Map<number, 'function'>();\n const contentLogprobs: DeepSeekChatLogprob[] = [];\n const reasoningLogprobs: DeepSeekChatLogprob[] = [];\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<InferSchema<typeof deepseekChatChunkSchema>>,\n LanguageModelV2StreamPart\n >({\n start(controller) {\n controller.enqueue({ type: 'stream-start', warnings });\n },\n\n transform(chunk, controller) {\n // Emit raw chunk if requested (before anything else)\n if (options.includeRawChunks) {\n controller.enqueue({ type: 'raw', rawValue: chunk.rawValue });\n }\n\n // handle failed chunk parsing / validation:\n if (!chunk.success) {\n finishReason = 'error';\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n const value = chunk.value;\n\n // handle error chunks:\n if ('error' in value) {\n finishReason = 'error';\n controller.enqueue({ type: 'error', error: value.error.message });\n return;\n }\n\n if (isFirstChunk) {\n isFirstChunk = false;\n\n controller.enqueue({\n type: 'response-metadata',\n ...getResponseMetadata(value),\n });\n }\n\n if (value.usage != null) {\n usage = value.usage;\n }\n\n if (value.object != null) {\n responseObject = value.object;\n }\n\n // The fingerprint is repeated on stream chunks; keep the latest\n // non-null value in case it changes during the response.\n if (value.system_fingerprint != null) {\n systemFingerprint = value.system_fingerprint;\n }\n\n const choice = value.choices[0];\n\n if (choice?.index != null) {\n choiceIndex = choice.index;\n }\n\n if (choice?.finish_reason != null) {\n finishReason = mapDeepSeekFinishReason(choice.finish_reason);\n }\n\n if (choice?.logprobs?.content != null) {\n contentLogprobs.push(...choice.logprobs.content);\n }\n\n if (choice?.logprobs?.reasoning_content != null) {\n reasoningLogprobs.push(...choice.logprobs.reasoning_content);\n }\n\n if (choice?.delta == null) {\n return;\n }\n\n const delta = choice.delta;\n\n if (delta.role != null) {\n messageRole = delta.role;\n }\n\n // enqueue reasoning before text deltas:\n const reasoningContent = delta.reasoning_content;\n if (reasoningContent) {\n if (!isActiveReasoning) {\n controller.enqueue({\n type: 'reasoning-start',\n id: 'reasoning-0',\n });\n isActiveReasoning = true;\n }\n\n controller.enqueue({\n type: 'reasoning-delta',\n id: 'reasoning-0',\n delta: reasoningContent,\n });\n }\n\n if (delta.content) {\n if (!isActiveText) {\n controller.enqueue({ type: 'text-start', id: 'txt-0' });\n isActiveText = true;\n }\n\n // end reasoning when text starts:\n if (isActiveReasoning) {\n controller.enqueue({\n type: 'reasoning-end',\n id: 'reasoning-0',\n });\n isActiveReasoning = false;\n }\n\n controller.enqueue({\n type: 'text-delta',\n id: 'txt-0',\n delta: delta.content,\n });\n }\n\n if (delta.tool_calls != null && delta.tool_calls.length > 0) {\n // end reasoning when tool calls start:\n if (isActiveReasoning) {\n controller.enqueue({\n type: 'reasoning-end',\n id: 'reasoning-0',\n });\n isActiveReasoning = false;\n }\n\n for (const toolCallDelta of delta.tool_calls) {\n if (toolCallDelta.type != null) {\n toolCallTypes.set(toolCallDelta.index, toolCallDelta.type);\n }\n\n const index = toolCallDelta.index;\n\n if (toolCalls[index] == null) {\n if (toolCallDelta.id == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'id' to be a string.`,\n });\n }\n\n if (toolCallDelta.function?.name == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function.name' to be a string.`,\n });\n }\n\n controller.enqueue({\n type: 'tool-input-start',\n id: toolCallDelta.id,\n toolName: toolCallDelta.function.name,\n });\n\n toolCalls[index] = {\n id: toolCallDelta.id,\n type: 'function',\n function: {\n name: toolCallDelta.function.name,\n arguments: toolCallDelta.function.arguments ?? '',\n },\n hasFinished: false,\n };\n\n const toolCall = toolCalls[index];\n\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null\n ) {\n // send delta if the argument text has already started:\n if (toolCall.function.arguments.length > 0) {\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCall.function.arguments,\n });\n }\n\n // check if tool call is complete\n // (some providers send the full tool call in one chunk):\n if (isParsableJson(toolCall.function.arguments)) {\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n toolCall.hasFinished = true;\n }\n }\n\n continue;\n }\n\n // existing tool call, merge if not finished\n const toolCall = toolCalls[index];\n\n if (toolCall.hasFinished) {\n continue;\n }\n\n if (toolCallDelta.function?.arguments != null) {\n toolCall.function!.arguments +=\n toolCallDelta.function?.arguments ?? '';\n }\n\n // send delta\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCallDelta.function.arguments ?? '',\n });\n\n // check if tool call is complete\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null &&\n isParsableJson(toolCall.function.arguments)\n ) {\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n toolCall.hasFinished = true;\n }\n }\n }\n },\n\n flush(controller) {\n if (isActiveReasoning) {\n controller.enqueue({ type: 'reasoning-end', id: 'reasoning-0' });\n }\n\n if (isActiveText) {\n controller.enqueue({ type: 'text-end', id: 'txt-0' });\n }\n\n // go through all tool calls and send the ones that are not finished\n for (const toolCall of toolCalls.filter(\n toolCall => !toolCall.hasFinished,\n )) {\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage: {\n inputTokens: usage?.prompt_tokens ?? undefined,\n outputTokens: usage?.completion_tokens ?? undefined,\n totalTokens: usage?.total_tokens ?? undefined,\n reasoningTokens:\n usage?.completion_tokens_details?.reasoning_tokens ??\n undefined,\n cachedInputTokens: usage?.prompt_cache_hit_tokens ?? undefined,\n },\n providerMetadata: {\n [providerOptionsName]: {\n promptCacheHitTokens: usage?.prompt_cache_hit_tokens ?? null,\n promptCacheMissTokens:\n usage?.prompt_cache_miss_tokens ?? null,\n ...(responseObject != null && { responseObject }),\n ...(choiceIndex != null && { choiceIndex }),\n ...(messageRole != null && { messageRole }),\n ...(toolCallTypes.size > 0 && {\n toolCallTypes: [...toolCallTypes.entries()]\n .sort(([left], [right]) => left - right)\n .map(([, type]) => type),\n }),\n ...((contentLogprobs.length > 0 ||\n reasoningLogprobs.length > 0) && {\n logprobs: {\n ...(contentLogprobs.length > 0 && {\n content: contentLogprobs,\n }),\n ...(reasoningLogprobs.length > 0 && {\n reasoning_content: reasoningLogprobs,\n }),\n },\n }),\n ...(systemFingerprint != null && { systemFingerprint }),\n },\n },\n });\n },\n }),\n ),\n request: { body },\n response: { headers: responseHeaders },\n };\n }\n}\n","import {\n InvalidPromptError,\n UnsupportedFunctionalityError,\n type LanguageModelV2CallOptions,\n type LanguageModelV2CallWarning,\n type LanguageModelV2Prompt,\n} from '@ai-sdk/provider';\nimport { convertToBase64, parseProviderOptions } from '@ai-sdk/provider-utils';\nimport type {\n DeepSeekChatPrompt,\n DeepSeekContentPart,\n} from './deepseek-chat-api-types';\nimport { deepseekAssistantMessageProviderOptions } from './deepseek-chat-options';\nimport { deepseekFilePartProviderOptions } from './deepseek-file-part-options';\nimport { isDeepSeekV4Model } from './is-deepseek-v4-model';\n\nconst supportedImageMediaTypes = new Set([\n 'image/gif',\n 'image/jpeg',\n 'image/jpg',\n 'image/png',\n 'image/webp',\n]);\n\nexport async function convertToDeepSeekChatMessages({\n prompt,\n responseFormat,\n modelId,\n providerOptionsName = 'deepseek',\n supportsAssistantPrefixCompletion = false,\n supportsStructuredOutputs = false,\n}: {\n prompt: LanguageModelV2Prompt;\n responseFormat: LanguageModelV2CallOptions['responseFormat'];\n modelId: string;\n providerOptionsName?: string;\n supportsAssistantPrefixCompletion?: boolean;\n supportsStructuredOutputs?: boolean;\n}): Promise<{\n messages: DeepSeekChatPrompt;\n warnings: Array<LanguageModelV2CallWarning>;\n}> {\n const isDeepSeekV4 = isDeepSeekV4Model(modelId);\n const messages: DeepSeekChatPrompt = [];\n const warnings: Array<LanguageModelV2CallWarning> = [];\n\n // Inject system message if response format is JSON\n if (responseFormat?.type === 'json') {\n if (responseFormat.schema == null) {\n messages.push({\n role: 'system',\n content: 'Return JSON.',\n });\n } else if (!supportsStructuredOutputs) {\n messages.push({\n role: 'system',\n content:\n 'Return JSON that conforms to the following schema: ' +\n JSON.stringify(responseFormat.schema),\n });\n }\n }\n\n // TODO use findLastIndex once we use ES2023\n let lastUserMessageIndex = -1;\n for (let i = prompt.length - 1; i >= 0; i--) {\n if (prompt[i].role === 'user') {\n lastUserMessageIndex = i;\n break;\n }\n }\n\n let index = -1;\n for (const { role, content, providerOptions } of prompt) {\n index++;\n\n // The assistant schema extends the common message schema, so one parse\n // validates names for every role and the assistant-only prefix option.\n const deepseekMessageOptions = await parseProviderOptions({\n provider: providerOptionsName,\n providerOptions,\n schema: deepseekAssistantMessageProviderOptions,\n });\n\n if (deepseekMessageOptions?.prefix === true && role !== 'assistant') {\n throw new InvalidPromptError({\n prompt,\n message:\n 'DeepSeek assistant prefix completion requires `prefix: true` on an assistant message.',\n });\n }\n\n switch (role) {\n case 'system': {\n messages.push({\n role: 'system',\n content,\n ...(deepseekMessageOptions?.name != null && {\n name: deepseekMessageOptions.name,\n }),\n });\n break;\n }\n\n case 'user': {\n const hasImagePart = content.some(\n part =>\n part.type === 'file' &&\n (part.mediaType === 'image' || part.mediaType.startsWith('image/')),\n );\n\n if (!hasImagePart) {\n let userContent = '';\n for (const part of content) {\n if (part.type === 'text') {\n userContent += part.text;\n } else {\n warnings.push({\n type: 'other',\n message: `Unsupported user message part type: ${part.type}`,\n });\n }\n }\n\n messages.push({\n role: 'user',\n content: userContent,\n ...(deepseekMessageOptions?.name != null && {\n name: deepseekMessageOptions.name,\n }),\n });\n break;\n }\n\n const userContent: Array<DeepSeekContentPart> = [];\n for (const part of content) {\n if (part.type === 'text') {\n userContent.push({ type: 'text', text: part.text });\n } else if (\n part.type === 'file' &&\n (part.mediaType === 'image' || part.mediaType.startsWith('image/'))\n ) {\n const filePartOptions = await parseProviderOptions({\n provider: providerOptionsName,\n providerOptions: part.providerOptions,\n schema: deepseekFilePartProviderOptions,\n });\n\n const resolvedMediaType =\n part.mediaType === 'image' || part.mediaType === 'image/*'\n ? 'image/jpeg'\n : part.mediaType;\n\n if (!supportedImageMediaTypes.has(resolvedMediaType)) {\n throw new UnsupportedFunctionalityError({\n functionality: `DeepSeek image media type ${resolvedMediaType}`,\n message:\n 'DeepSeek supports JPEG, PNG, GIF, and WebP image inputs.',\n });\n }\n\n if (part.data instanceof URL) {\n const url = part.data.toString();\n\n if (url.length > 8192) {\n throw new InvalidPromptError({\n prompt,\n message:\n 'DeepSeek image URLs must not exceed 8192 characters.',\n });\n }\n\n if (filePartOptions?.fileData === true) {\n throw new InvalidPromptError({\n prompt,\n message:\n 'DeepSeek `fileData` image parts require inline data, not a URL.',\n });\n }\n\n userContent.push({\n type: 'image_url',\n image_url: {\n url,\n ...(filePartOptions?.imageDetail != null && {\n detail: filePartOptions.imageDetail,\n }),\n },\n });\n } else {\n const dataUrl = `data:${\n resolvedMediaType === 'image/jpg'\n ? 'image/jpeg'\n : resolvedMediaType\n };base64,${convertToBase64(part.data)}`;\n\n if (filePartOptions?.fileData === true) {\n if (filePartOptions.imageDetail != null) {\n throw new InvalidPromptError({\n prompt,\n message:\n 'DeepSeek `imageDetail` cannot be combined with `fileData`.',\n });\n }\n\n userContent.push({\n type: 'file',\n file_data: dataUrl,\n ...(part.filename != null && { filename: part.filename }),\n });\n } else {\n userContent.push({\n type: 'image_url',\n image_url: {\n url: dataUrl,\n ...(filePartOptions?.imageDetail != null && {\n detail: filePartOptions.imageDetail,\n }),\n },\n });\n }\n }\n } else {\n warnings.push({\n type: 'other',\n message: `Unsupported user message part type: ${part.type}`,\n });\n }\n }\n\n messages.push({\n role: 'user',\n content: userContent,\n ...(deepseekMessageOptions?.name != null && {\n name: deepseekMessageOptions.name,\n }),\n });\n\n break;\n }\n case 'assistant': {\n if (deepseekMessageOptions?.prefix === true) {\n if (index !== prompt.length - 1) {\n throw new InvalidPromptError({\n prompt,\n message:\n 'DeepSeek assistant prefix completion requires the prefixed assistant message to be the final message.',\n });\n }\n\n if (!supportsAssistantPrefixCompletion) {\n throw new UnsupportedFunctionalityError({\n functionality: 'DeepSeek assistant prefix completion',\n message:\n 'DeepSeek assistant prefix completion requires a beta base URL ending in `/beta`.',\n });\n }\n }\n\n let text = '';\n let reasoning: string | undefined;\n\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n }> = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n text += part.text;\n break;\n }\n case 'reasoning': {\n // R1 must not receive prior reasoning; V4 requires it.\n if (index <= lastUserMessageIndex && !isDeepSeekV4) {\n break;\n }\n\n if (reasoning == null) {\n reasoning = part.text;\n } else {\n reasoning += part.text;\n }\n break;\n }\n case 'tool-call': {\n toolCalls.push({\n id: part.toolCallId,\n type: 'function',\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.input),\n },\n });\n break;\n }\n }\n }\n\n // V4 demands the field on every assistant turn — back-fill an empty\n // string when the source message had no reasoning part at all.\n messages.push({\n role: 'assistant',\n content: text,\n ...(deepseekMessageOptions?.name != null && {\n name: deepseekMessageOptions.name,\n }),\n ...(deepseekMessageOptions?.prefix === true && {\n prefix: true,\n }),\n reasoning_content: reasoning ?? (isDeepSeekV4 ? '' : undefined),\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n });\n\n break;\n }\n\n case 'tool': {\n if (deepseekMessageOptions?.name != null) {\n warnings.push({\n type: 'other',\n message:\n 'DeepSeek does not support message names on tool messages. The name has been omitted.',\n });\n }\n\n for (const toolResponse of content) {\n const output = toolResponse.output;\n\n let contentValue: string;\n switch (output.type) {\n case 'text':\n case 'error-text':\n contentValue = output.value;\n break;\n case 'content':\n case 'json':\n case 'error-json':\n contentValue = JSON.stringify(output.value);\n break;\n }\n\n messages.push({\n role: 'tool',\n tool_call_id: toolResponse.toolCallId,\n content: contentValue,\n });\n }\n break;\n }\n\n default: {\n warnings.push({\n type: 'other',\n message: `Unsupported message role: ${role}`,\n });\n break;\n }\n }\n }\n\n return { messages, warnings };\n}\n","import { z } from 'zod/v4';\n\n// https://api-docs.deepseek.com/quick_start/pricing\nexport type DeepSeekChatModelId =\n | 'deepseek-flash'\n | 'deepseek-v4-flash'\n | 'deepseek-v4-pro'\n | 'deepseek-v4-flash-vision-exp'\n // Retired aliases remain assignable through the string escape hatch, but are\n // intentionally omitted from first-class editor suggestions.\n | (string & {});\n\nexport const deepseekChatOptions = z.object({\n /**\n * Whether to return log probabilities for generated tokens.\n */\n logprobs: z.boolean().optional(),\n\n /**\n * Number of most likely tokens to return at each token position.\n *\n * Setting this option automatically enables `logprobs`.\n */\n topLogprobs: z.number().int().min(0).max(20).optional(),\n\n /**\n * An opaque identifier for the end user. DeepSeek uses this identifier for\n * content-safety tracing and request isolation.\n *\n * Must contain only ASCII letters, numbers, underscores, and hyphens, and\n * must be at most 512 characters long.\n */\n userId: z\n .string()\n .regex(/^[a-zA-Z0-9_-]+$/, 'userId must match /^[a-zA-Z0-9_-]+$/')\n .max(512, 'userId must be at most 512 characters long')\n .optional(),\n\n /**\n * Type of thinking to use. Defaults to `enabled`.\n */\n thinking: z\n .object({\n // `adaptive` is accepted at runtime for backwards compatibility and\n // mapped to `enabled`, but is intentionally excluded from the exported\n // provider options type.\n type: z.enum(['adaptive', 'enabled', 'disabled']).optional(),\n })\n .optional(),\n\n /**\n * Controls the thinking strength for DeepSeek V4 reasoning models.\n */\n // `medium` and `xhigh` are accepted at runtime for backwards compatibility\n // and mapped to canonical DeepSeek values, but are intentionally excluded\n // from the exported provider options type.\n reasoningEffort: z.enum(['low', 'medium', 'high', 'xhigh', 'max']).optional(),\n\n /**\n * Whether to use strict JSON schema validation for structured outputs.\n * Only applies when the serving endpoint supports JSON schema response\n * formats (e.g. Azure). Defaults to `true`.\n */\n strictJsonSchema: z.boolean().optional(),\n});\n\nexport type DeepSeekChatOptions = {\n /**\n * Whether to return log probabilities for generated tokens.\n */\n logprobs?: boolean;\n\n /**\n * Number of most likely tokens to return at each token position.\n *\n * Setting this option automatically enables `logprobs`.\n */\n topLogprobs?: number;\n\n /**\n * An opaque identifier for the end user. DeepSeek uses this identifier for\n * content-safety tracing and request isolation.\n *\n * Must contain only ASCII letters, numbers, underscores, and hyphens, and\n * must be at most 512 characters long.\n */\n userId?: string;\n\n /**\n * Controls whether thinking mode is enabled. Defaults to `enabled`.\n */\n thinking?: {\n type?: 'enabled' | 'disabled';\n };\n\n /**\n * Controls the thinking strength for DeepSeek V4 reasoning models.\n */\n reasoningEffort?: 'low' | 'high' | 'max';\n\n /**\n * Whether to use strict JSON schema validation for structured outputs.\n * Only applies when the serving endpoint supports JSON schema response\n * formats (e.g. Azure). Defaults to `true`.\n */\n strictJsonSchema?: boolean;\n};\n\nexport const deepseekMessageProviderOptions = z.object({\n /**\n * The name of the participant represented by the message.\n *\n * Supported on system, user, and assistant messages.\n */\n name: z.string().optional(),\n});\n\nexport type DeepSeekMessageProviderOptions = z.infer<\n typeof deepseekMessageProviderOptions\n>;\n\nexport const deepseekAssistantMessageProviderOptions =\n deepseekMessageProviderOptions.extend({\n /**\n * Whether the assistant message content is a prefix that DeepSeek should\n * continue. This beta feature is only supported on the final assistant\n * message when using a beta base URL.\n */\n prefix: z.literal(true).optional(),\n });\n\nexport type DeepSeekAssistantMessageProviderOptions = z.infer<\n typeof deepseekAssistantMessageProviderOptions\n>;\n","import { z } from 'zod/v4';\n\nexport const deepseekFilePartProviderOptions = z.object({\n /**\n * Controls how DeepSeek processes an image sent as an `image_url` part.\n *\n * @see https://api-docs.deepseek.com/api/create-chat-completion/\n */\n imageDetail: z.enum(['low', 'high', 'original', 'auto']).optional(),\n\n /**\n * Sends inline image data as a DeepSeek `file` part using `file_data`\n * instead of an `image_url` data URL. When set, the file part's filename\n * is preserved.\n *\n * This option only applies to inline image data. It cannot be combined\n * with `imageDetail`.\n */\n fileData: z.literal(true).optional(),\n});\n\nexport type DeepSeekFilePartProviderOptions = z.infer<\n typeof deepseekFilePartProviderOptions\n>;\n","/**\n * Whether a model id is a DeepSeek V4-generation model (thinking mode on by\n * default, `reasoning_content` required on every assistant turn).\n *\n * DeepSeek publishes V4 models under both versioned ids (`deepseek-v4-pro`,\n * `deepseek-v4-flash-*`) and unversioned aliases (`deepseek-flash`, currently\n * serving V4.1 Flash). Only the legacy `deepseek-chat` / `deepseek-reasoner`\n * ids predate V4.\n */\nexport function isDeepSeekV4Model(modelId: string): boolean {\n return (\n modelId.includes('deepseek-v4') ||\n modelId.startsWith('deepseek-flash') ||\n modelId.startsWith('deepseek-pro')\n );\n}\n","import { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport type DeepSeekChatPrompt = Array<DeepSeekMessage>;\n\nexport type DeepSeekMessage =\n | DeepSeekSystemMessage\n | DeepSeekUserMessage\n | DeepSeekAssistantMessage\n | DeepSeekToolMessage;\n\nexport interface DeepSeekSystemMessage {\n role: 'system';\n content: string;\n name?: string;\n}\n\nexport interface DeepSeekUserMessage {\n role: 'user';\n content: string | Array<DeepSeekContentPart>;\n name?: string;\n}\n\nexport type DeepSeekContentPart =\n | DeepSeekContentPartText\n | DeepSeekContentPartImage\n | DeepSeekContentPartFile;\n\nexport interface DeepSeekContentPartText {\n type: 'text';\n text: string;\n}\n\nexport interface DeepSeekContentPartImage {\n type: 'image_url';\n image_url: {\n url: string;\n detail?: 'low' | 'high' | 'original' | 'auto';\n };\n}\n\nexport interface DeepSeekContentPartFile {\n type: 'file';\n file_data: string;\n filename?: string;\n}\nexport interface DeepSeekAssistantMessage {\n role: 'assistant';\n content?: string | null;\n name?: string;\n prefix?: true;\n reasoning_content?: string;\n tool_calls?: Array<DeepSeekMessageToolCall>;\n}\n\nexport interface DeepSeekMessageToolCall {\n type: 'function';\n id: string;\n function: {\n arguments: string;\n name: string;\n };\n}\n\nexport interface DeepSeekToolMessage {\n role: 'tool';\n content: string;\n tool_call_id: string;\n}\n\nconst tokenUsageSchema = z\n .object({\n prompt_tokens: z.number().nullish(),\n completion_tokens: z.number().nullish(),\n prompt_cache_hit_tokens: z.number().nullish(),\n prompt_cache_miss_tokens: z.number().nullish(),\n total_tokens: z.number().nullish(),\n completion_tokens_details: z\n .object({\n reasoning_tokens: z.number().nullish(),\n })\n .nullish(),\n })\n .nullish();\n\nexport type DeepSeekChatTokenUsage = z.infer<typeof tokenUsageSchema>;\n\nexport const deepSeekErrorSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string().nullish(),\n param: z.any().nullish(),\n code: z.union([z.string(), z.number()]).nullish(),\n }),\n});\n\nexport type DeepSeekErrorData = z.infer<typeof deepSeekErrorSchema>;\n\nconst deepseekChatLogprobSchema = z.object({\n token: z.string(),\n logprob: z.number(),\n bytes: z.array(z.number()).nullable(),\n top_logprobs: z.array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n bytes: z.array(z.number()).nullable(),\n }),\n ),\n});\n\nconst deepseekChatLogprobsSchema = z\n .object({\n content: z.array(deepseekChatLogprobSchema).nullish(),\n reasoning_content: z.array(deepseekChatLogprobSchema).nullish(),\n })\n .nullish();\n\nexport type DeepSeekChatLogprob = z.infer<typeof deepseekChatLogprobSchema>;\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nexport const deepseekChatResponseSchema = z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n object: z.literal('chat.completion').nullish(),\n system_fingerprint: z.string().nullish(),\n choices: z.array(\n z.object({\n index: z.number().nullish(),\n message: z.object({\n role: z.literal('assistant').nullish(),\n content: z.string().nullish(),\n reasoning_content: z.string().nullish(),\n tool_calls: z\n .array(\n z.object({\n id: z.string().nullish(),\n type: z.literal('function').nullish(),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .nullish(),\n }),\n logprobs: deepseekChatLogprobsSchema,\n finish_reason: z.string().nullish(),\n }),\n ),\n usage: tokenUsageSchema,\n});\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nexport const deepseekChatChunkSchema = lazySchema(() =>\n zodSchema(\n z.union([\n z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n object: z.literal('chat.completion.chunk').nullish(),\n system_fingerprint: z.string().nullish(),\n choices: z.array(\n z.object({\n index: z.number().nullish(),\n delta: z\n .object({\n role: z.enum(['assistant']).nullish(),\n content: z.string().nullish(),\n reasoning_content: z.string().nullish(),\n tool_calls: z\n .array(\n z.object({\n index: z.number(),\n id: z.string().nullish(),\n type: z.literal('function').nullish(),\n function: z.object({\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n }),\n }),\n )\n .nullish(),\n })\n .nullish(),\n logprobs: deepseekChatLogprobsSchema,\n finish_reason: z.string().nullish(),\n }),\n ),\n usage: tokenUsageSchema,\n }),\n deepSeekErrorSchema,\n ]),\n ),\n);\n","import {\n type LanguageModelV2CallOptions,\n type LanguageModelV2CallWarning,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\n\nexport function prepareTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV2CallOptions['tools'];\n toolChoice?: LanguageModelV2CallOptions['toolChoice'];\n}): {\n tools:\n | undefined\n | Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }>;\n toolChoice:\n | { type: 'function'; function: { name: string } }\n | 'auto'\n | 'none'\n | 'required'\n | undefined;\n toolWarnings: LanguageModelV2CallWarning[];\n} {\n // when the tools array is empty, change it to undefined to prevent errors:\n tools = tools?.length ? tools : undefined;\n\n const toolWarnings: LanguageModelV2CallWarning[] = [];\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined, toolWarnings };\n }\n\n const deepseekTools: Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }> = [];\n\n for (const tool of tools) {\n if (tool.type === 'provider-defined') {\n toolWarnings.push({\n type: 'unsupported-tool',\n tool,\n });\n } else {\n deepseekTools.push({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: deepseekTools, toolChoice: undefined, toolWarnings };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n case 'none':\n case 'required':\n return { tools: deepseekTools, toolChoice: type, toolWarnings };\n case 'tool':\n return {\n tools: deepseekTools,\n toolChoice: {\n type: 'function',\n function: { name: toolChoice.toolName },\n },\n toolWarnings,\n };\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `tool choice type: ${_exhaustiveCheck}`,\n });\n }\n }\n}\n","export function getResponseMetadata({\n id,\n model,\n created,\n}: {\n id?: string | undefined | null;\n created?: number | undefined | null;\n model?: string | undefined | null;\n}) {\n return {\n id: id ?? undefined,\n modelId: model ?? undefined,\n timestamp: created != null ? new Date(created * 1000) : undefined,\n };\n}\n","import type { LanguageModelV2FinishReason } from '@ai-sdk/provider';\n\nexport function mapDeepSeekFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV2FinishReason {\n switch (finishReason) {\n case 'stop':\n return 'stop';\n case 'length':\n return 'length';\n case 'content_filter':\n return 'content-filter';\n case 'tool_calls':\n return 'tool-calls';\n case 'insufficient_system_resource':\n return 'error';\n default:\n return 'unknown';\n }\n}\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,mBAIO;AACP,IAAAC,yBAKO;;;ACVP,IAAAC,mBAQO;AACP,IAAAC,yBAaO;;;ACtBP,sBAMO;AACP,4BAAsD;;;ACPtD,gBAAkB;AAYX,IAAM,sBAAsB,YAAE,OAAO;AAAA;AAAA;AAAA;AAAA,EAI1C,UAAU,YAAE,QAAQ,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO/B,aAAa,YAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAStD,QAAQ,YACL,OAAO,EACP,MAAM,oBAAoB,sCAAsC,EAChE,IAAI,KAAK,4CAA4C,EACrD,SAAS;AAAA;AAAA;AAAA;AAAA,EAKZ,UAAU,YACP,OAAO;AAAA;AAAA;AAAA;AAAA,IAIN,MAAM,YAAE,KAAK,CAAC,YAAY,WAAW,UAAU,CAAC,EAAE,SAAS;AAAA,EAC7D,CAAC,EACA,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQZ,iBAAiB,YAAE,KAAK,CAAC,OAAO,UAAU,QAAQ,SAAS,KAAK,CAAC,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO5E,kBAAkB,YAAE,QAAQ,EAAE,SAAS;AACzC,CAAC;AA4CM,IAAM,iCAAiC,YAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMrD,MAAM,YAAE,OAAO,EAAE,SAAS;AAC5B,CAAC;AAMM,IAAM,0CACX,+BAA+B,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMpC,QAAQ,YAAE,QAAQ,IAAI,EAAE,SAAS;AACnC,CAAC;;;ACjIH,IAAAC,aAAkB;AAEX,IAAM,kCAAkC,aAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMtD,aAAa,aAAE,KAAK,CAAC,OAAO,QAAQ,YAAY,MAAM,CAAC,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUlE,UAAU,aAAE,QAAQ,IAAI,EAAE,SAAS;AACrC,CAAC;;;ACVM,SAAS,kBAAkB,SAA0B;AAC1D,SACE,QAAQ,SAAS,aAAa,KAC9B,QAAQ,WAAW,gBAAgB,KACnC,QAAQ,WAAW,cAAc;AAErC;;;AHCA,IAAM,2BAA2B,oBAAI,IAAI;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,eAAsB,8BAA8B;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AAAA,EACA,sBAAsB;AAAA,EACtB,oCAAoC;AAAA,EACpC,4BAA4B;AAC9B,GAUG;AACD,QAAM,eAAe,kBAAkB,OAAO;AAC9C,QAAM,WAA+B,CAAC;AACtC,QAAM,WAA8C,CAAC;AAGrD,OAAI,iDAAgB,UAAS,QAAQ;AACnC,QAAI,eAAe,UAAU,MAAM;AACjC,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAAA,IACH,WAAW,CAAC,2BAA2B;AACrC,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SACE,wDACA,KAAK,UAAU,eAAe,MAAM;AAAA,MACxC,CAAC;AAAA,IACH;AAAA,EACF;AAGA,MAAI,uBAAuB;AAC3B,WAAS,IAAI,OAAO,SAAS,GAAG,KAAK,GAAG,KAAK;AAC3C,QAAI,OAAO,CAAC,EAAE,SAAS,QAAQ;AAC7B,6BAAuB;AACvB;AAAA,IACF;AAAA,EACF;AAEA,MAAI,QAAQ;AACZ,aAAW,EAAE,MAAM,SAAS,gBAAgB,KAAK,QAAQ;AACvD;AAIA,UAAM,yBAAyB,UAAM,4CAAqB;AAAA,MACxD,UAAU;AAAA,MACV;AAAA,MACA,QAAQ;AAAA,IACV,CAAC;AAED,SAAI,iEAAwB,YAAW,QAAQ,SAAS,aAAa;AACnE,YAAM,IAAI,mCAAmB;AAAA,QAC3B;AAAA,QACA,SACE;AAAA,MACJ,CAAC;AAAA,IACH;AAEA,YAAQ,MAAM;AAAA,MACZ,KAAK,UAAU;AACb,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN;AAAA,UACA,IAAI,iEAAwB,SAAQ,QAAQ;AAAA,YAC1C,MAAM,uBAAuB;AAAA,UAC/B;AAAA,QACF,CAAC;AACD;AAAA,MACF;AAAA,MAEA,KAAK,QAAQ;AACX,cAAM,eAAe,QAAQ;AAAA,UAC3B,UACE,KAAK,SAAS,WACb,KAAK,cAAc,WAAW,KAAK,UAAU,WAAW,QAAQ;AAAA,QACrE;AAEA,YAAI,CAAC,cAAc;AACjB,cAAIC,eAAc;AAClB,qBAAW,QAAQ,SAAS;AAC1B,gBAAI,KAAK,SAAS,QAAQ;AACxB,cAAAA,gBAAe,KAAK;AAAA,YACtB,OAAO;AACL,uBAAS,KAAK;AAAA,gBACZ,MAAM;AAAA,gBACN,SAAS,uCAAuC,KAAK,IAAI;AAAA,cAC3D,CAAC;AAAA,YACH;AAAA,UACF;AAEA,mBAAS,KAAK;AAAA,YACZ,MAAM;AAAA,YACN,SAASA;AAAA,YACT,IAAI,iEAAwB,SAAQ,QAAQ;AAAA,cAC1C,MAAM,uBAAuB;AAAA,YAC/B;AAAA,UACF,CAAC;AACD;AAAA,QACF;AAEA,cAAM,cAA0C,CAAC;AACjD,mBAAW,QAAQ,SAAS;AAC1B,cAAI,KAAK,SAAS,QAAQ;AACxB,wBAAY,KAAK,EAAE,MAAM,QAAQ,MAAM,KAAK,KAAK,CAAC;AAAA,UACpD,WACE,KAAK,SAAS,WACb,KAAK,cAAc,WAAW,KAAK,UAAU,WAAW,QAAQ,IACjE;AACA,kBAAM,kBAAkB,UAAM,4CAAqB;AAAA,cACjD,UAAU;AAAA,cACV,iBAAiB,KAAK;AAAA,cACtB,QAAQ;AAAA,YACV,CAAC;AAED,kBAAM,oBACJ,KAAK,cAAc,WAAW,KAAK,cAAc,YAC7C,eACA,KAAK;AAEX,gBAAI,CAAC,yBAAyB,IAAI,iBAAiB,GAAG;AACpD,oBAAM,IAAI,8CAA8B;AAAA,gBACtC,eAAe,6BAA6B,iBAAiB;AAAA,gBAC7D,SACE;AAAA,cACJ,CAAC;AAAA,YACH;AAEA,gBAAI,KAAK,gBAAgB,KAAK;AAC5B,oBAAM,MAAM,KAAK,KAAK,SAAS;AAE/B,kBAAI,IAAI,SAAS,MAAM;AACrB,sBAAM,IAAI,mCAAmB;AAAA,kBAC3B;AAAA,kBACA,SACE;AAAA,gBACJ,CAAC;AAAA,cACH;AAEA,mBAAI,mDAAiB,cAAa,MAAM;AACtC,sBAAM,IAAI,mCAAmB;AAAA,kBAC3B;AAAA,kBACA,SACE;AAAA,gBACJ,CAAC;AAAA,cACH;AAEA,0BAAY,KAAK;AAAA,gBACf,MAAM;AAAA,gBACN,WAAW;AAAA,kBACT;AAAA,kBACA,IAAI,mDAAiB,gBAAe,QAAQ;AAAA,oBAC1C,QAAQ,gBAAgB;AAAA,kBAC1B;AAAA,gBACF;AAAA,cACF,CAAC;AAAA,YACH,OAAO;AACL,oBAAM,UAAU,QACd,sBAAsB,cAClB,eACA,iBACN,eAAW,uCAAgB,KAAK,IAAI,CAAC;AAErC,mBAAI,mDAAiB,cAAa,MAAM;AACtC,oBAAI,gBAAgB,eAAe,MAAM;AACvC,wBAAM,IAAI,mCAAmB;AAAA,oBAC3B;AAAA,oBACA,SACE;AAAA,kBACJ,CAAC;AAAA,gBACH;AAEA,4BAAY,KAAK;AAAA,kBACf,MAAM;AAAA,kBACN,WAAW;AAAA,kBACX,GAAI,KAAK,YAAY,QAAQ,EAAE,UAAU,KAAK,SAAS;AAAA,gBACzD,CAAC;AAAA,cACH,OAAO;AACL,4BAAY,KAAK;AAAA,kBACf,MAAM;AAAA,kBACN,WAAW;AAAA,oBACT,KAAK;AAAA,oBACL,IAAI,mDAAiB,gBAAe,QAAQ;AAAA,sBAC1C,QAAQ,gBAAgB;AAAA,oBAC1B;AAAA,kBACF;AAAA,gBACF,CAAC;AAAA,cACH;AAAA,YACF;AAAA,UACF,OAAO;AACL,qBAAS,KAAK;AAAA,cACZ,MAAM;AAAA,cACN,SAAS,uCAAuC,KAAK,IAAI;AAAA,YAC3D,CAAC;AAAA,UACH;AAAA,QACF;AAEA,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS;AAAA,UACT,IAAI,iEAAwB,SAAQ,QAAQ;AAAA,YAC1C,MAAM,uBAAuB;AAAA,UAC/B;AAAA,QACF,CAAC;AAED;AAAA,MACF;AAAA,MACA,KAAK,aAAa;AAChB,aAAI,iEAAwB,YAAW,MAAM;AAC3C,cAAI,UAAU,OAAO,SAAS,GAAG;AAC/B,kBAAM,IAAI,mCAAmB;AAAA,cAC3B;AAAA,cACA,SACE;AAAA,YACJ,CAAC;AAAA,UACH;AAEA,cAAI,CAAC,mCAAmC;AACtC,kBAAM,IAAI,8CAA8B;AAAA,cACtC,eAAe;AAAA,cACf,SACE;AAAA,YACJ,CAAC;AAAA,UACH;AAAA,QACF;AAEA,YAAI,OAAO;AACX,YAAI;AAEJ,cAAM,YAID,CAAC;AAEN,mBAAW,QAAQ,SAAS;AAC1B,kBAAQ,KAAK,MAAM;AAAA,YACjB,KAAK,QAAQ;AACX,sBAAQ,KAAK;AACb;AAAA,YACF;AAAA,YACA,KAAK,aAAa;AAEhB,kBAAI,SAAS,wBAAwB,CAAC,cAAc;AAClD;AAAA,cACF;AAEA,kBAAI,aAAa,MAAM;AACrB,4BAAY,KAAK;AAAA,cACnB,OAAO;AACL,6BAAa,KAAK;AAAA,cACpB;AACA;AAAA,YACF;AAAA,YACA,KAAK,aAAa;AAChB,wBAAU,KAAK;AAAA,gBACb,IAAI,KAAK;AAAA,gBACT,MAAM;AAAA,gBACN,UAAU;AAAA,kBACR,MAAM,KAAK;AAAA,kBACX,WAAW,KAAK,UAAU,KAAK,KAAK;AAAA,gBACtC;AAAA,cACF,CAAC;AACD;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAIA,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS;AAAA,UACT,IAAI,iEAAwB,SAAQ,QAAQ;AAAA,YAC1C,MAAM,uBAAuB;AAAA,UAC/B;AAAA,UACA,IAAI,iEAAwB,YAAW,QAAQ;AAAA,YAC7C,QAAQ;AAAA,UACV;AAAA,UACA,mBAAmB,gCAAc,eAAe,KAAK;AAAA,UACrD,YAAY,UAAU,SAAS,IAAI,YAAY;AAAA,QACjD,CAAC;AAED;AAAA,MACF;AAAA,MAEA,KAAK,QAAQ;AACX,aAAI,iEAAwB,SAAQ,MAAM;AACxC,mBAAS,KAAK;AAAA,YACZ,MAAM;AAAA,YACN,SACE;AAAA,UACJ,CAAC;AAAA,QACH;AAEA,mBAAW,gBAAgB,SAAS;AAClC,gBAAM,SAAS,aAAa;AAE5B,cAAI;AACJ,kBAAQ,OAAO,MAAM;AAAA,YACnB,KAAK;AAAA,YACL,KAAK;AACH,6BAAe,OAAO;AACtB;AAAA,YACF,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AACH,6BAAe,KAAK,UAAU,OAAO,KAAK;AAC1C;AAAA,UACJ;AAEA,mBAAS,KAAK;AAAA,YACZ,MAAM;AAAA,YACN,cAAc,aAAa;AAAA,YAC3B,SAAS;AAAA,UACX,CAAC;AAAA,QACH;AACA;AAAA,MACF;AAAA,MAEA,SAAS;AACP,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS,6BAA6B,IAAI;AAAA,QAC5C,CAAC;AACD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,UAAU,SAAS;AAC9B;;;AI5WA,IAAAC,yBAAsC;AACtC,IAAAC,aAAkB;AAqElB,IAAM,mBAAmB,aACtB,OAAO;AAAA,EACN,eAAe,aAAE,OAAO,EAAE,QAAQ;AAAA,EAClC,mBAAmB,aAAE,OAAO,EAAE,QAAQ;AAAA,EACtC,yBAAyB,aAAE,OAAO,EAAE,QAAQ;AAAA,EAC5C,0BAA0B,aAAE,OAAO,EAAE,QAAQ;AAAA,EAC7C,cAAc,aAAE,OAAO,EAAE,QAAQ;AAAA,EACjC,2BAA2B,aACxB,OAAO;AAAA,IACN,kBAAkB,aAAE,OAAO,EAAE,QAAQ;AAAA,EACvC,CAAC,EACA,QAAQ;AACb,CAAC,EACA,QAAQ;AAIJ,IAAM,sBAAsB,aAAE,OAAO;AAAA,EAC1C,OAAO,aAAE,OAAO;AAAA,IACd,SAAS,aAAE,OAAO;AAAA,IAClB,MAAM,aAAE,OAAO,EAAE,QAAQ;AAAA,IACzB,OAAO,aAAE,IAAI,EAAE,QAAQ;AAAA,IACvB,MAAM,aAAE,MAAM,CAAC,aAAE,OAAO,GAAG,aAAE,OAAO,CAAC,CAAC,EAAE,QAAQ;AAAA,EAClD,CAAC;AACH,CAAC;AAID,IAAM,4BAA4B,aAAE,OAAO;AAAA,EACzC,OAAO,aAAE,OAAO;AAAA,EAChB,SAAS,aAAE,OAAO;AAAA,EAClB,OAAO,aAAE,MAAM,aAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACpC,cAAc,aAAE;AAAA,IACd,aAAE,OAAO;AAAA,MACP,OAAO,aAAE,OAAO;AAAA,MAChB,SAAS,aAAE,OAAO;AAAA,MAClB,OAAO,aAAE,MAAM,aAAE,OAAO,CAAC,EAAE,SAAS;AAAA,IACtC,CAAC;AAAA,EACH;AACF,CAAC;AAED,IAAM,6BAA6B,aAChC,OAAO;AAAA,EACN,SAAS,aAAE,MAAM,yBAAyB,EAAE,QAAQ;AAAA,EACpD,mBAAmB,aAAE,MAAM,yBAAyB,EAAE,QAAQ;AAChE,CAAC,EACA,QAAQ;AAMJ,IAAM,6BAA6B,aAAE,OAAO;AAAA,EACjD,IAAI,aAAE,OAAO,EAAE,QAAQ;AAAA,EACvB,SAAS,aAAE,OAAO,EAAE,QAAQ;AAAA,EAC5B,OAAO,aAAE,OAAO,EAAE,QAAQ;AAAA,EAC1B,QAAQ,aAAE,QAAQ,iBAAiB,EAAE,QAAQ;AAAA,EAC7C,oBAAoB,aAAE,OAAO,EAAE,QAAQ;AAAA,EACvC,SAAS,aAAE;AAAA,IACT,aAAE,OAAO;AAAA,MACP,OAAO,aAAE,OAAO,EAAE,QAAQ;AAAA,MAC1B,SAAS,aAAE,OAAO;AAAA,QAChB,MAAM,aAAE,QAAQ,WAAW,EAAE,QAAQ;AAAA,QACrC,SAAS,aAAE,OAAO,EAAE,QAAQ;AAAA,QAC5B,mBAAmB,aAAE,OAAO,EAAE,QAAQ;AAAA,QACtC,YAAY,aACT;AAAA,UACC,aAAE,OAAO;AAAA,YACP,IAAI,aAAE,OAAO,EAAE,QAAQ;AAAA,YACvB,MAAM,aAAE,QAAQ,UAAU,EAAE,QAAQ;AAAA,YACpC,UAAU,aAAE,OAAO;AAAA,cACjB,MAAM,aAAE,OAAO;AAAA,cACf,WAAW,aAAE,OAAO;AAAA,YACtB,CAAC;AAAA,UACH,CAAC;AAAA,QACH,EACC,QAAQ;AAAA,MACb,CAAC;AAAA,MACD,UAAU;AAAA,MACV,eAAe,aAAE,OAAO,EAAE,QAAQ;AAAA,IACpC,CAAC;AAAA,EACH;AAAA,EACA,OAAO;AACT,CAAC;AAIM,IAAM,8BAA0B;AAAA,EAAW,UAChD;AAAA,IACE,aAAE,MAAM;AAAA,MACN,aAAE,OAAO;AAAA,QACP,IAAI,aAAE,OAAO,EAAE,QAAQ;AAAA,QACvB,SAAS,aAAE,OAAO,EAAE,QAAQ;AAAA,QAC5B,OAAO,aAAE,OAAO,EAAE,QAAQ;AAAA,QAC1B,QAAQ,aAAE,QAAQ,uBAAuB,EAAE,QAAQ;AAAA,QACnD,oBAAoB,aAAE,OAAO,EAAE,QAAQ;AAAA,QACvC,SAAS,aAAE;AAAA,UACT,aAAE,OAAO;AAAA,YACP,OAAO,aAAE,OAAO,EAAE,QAAQ;AAAA,YAC1B,OAAO,aACJ,OAAO;AAAA,cACN,MAAM,aAAE,KAAK,CAAC,WAAW,CAAC,EAAE,QAAQ;AAAA,cACpC,SAAS,aAAE,OAAO,EAAE,QAAQ;AAAA,cAC5B,mBAAmB,aAAE,OAAO,EAAE,QAAQ;AAAA,cACtC,YAAY,aACT;AAAA,gBACC,aAAE,OAAO;AAAA,kBACP,OAAO,aAAE,OAAO;AAAA,kBAChB,IAAI,aAAE,OAAO,EAAE,QAAQ;AAAA,kBACvB,MAAM,aAAE,QAAQ,UAAU,EAAE,QAAQ;AAAA,kBACpC,UAAU,aAAE,OAAO;AAAA,oBACjB,MAAM,aAAE,OAAO,EAAE,QAAQ;AAAA,oBACzB,WAAW,aAAE,OAAO,EAAE,QAAQ;AAAA,kBAChC,CAAC;AAAA,gBACH,CAAC;AAAA,cACH,EACC,QAAQ;AAAA,YACb,CAAC,EACA,QAAQ;AAAA,YACX,UAAU;AAAA,YACV,eAAe,aAAE,OAAO,EAAE,QAAQ;AAAA,UACpC,CAAC;AAAA,QACH;AAAA,QACA,OAAO;AAAA,MACT,CAAC;AAAA,MACD;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;ACtMA,IAAAC,mBAIO;AAEA,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AACF,GAqBE;AAEA,WAAQ,+BAAO,UAAS,QAAQ;AAEhC,QAAM,eAA6C,CAAC;AAEpD,MAAI,SAAS,MAAM;AACjB,WAAO,EAAE,OAAO,QAAW,YAAY,QAAW,aAAa;AAAA,EACjE;AAEA,QAAM,gBAOD,CAAC;AAEN,aAAW,QAAQ,OAAO;AACxB,QAAI,KAAK,SAAS,oBAAoB;AACpC,mBAAa,KAAK;AAAA,QAChB,MAAM;AAAA,QACN;AAAA,MACF,CAAC;AAAA,IACH,OAAO;AACL,oBAAc,KAAK;AAAA,QACjB,MAAM;AAAA,QACN,UAAU;AAAA,UACR,MAAM,KAAK;AAAA,UACX,aAAa,KAAK;AAAA,UAClB,YAAY,KAAK;AAAA,QACnB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,cAAc,MAAM;AACtB,WAAO,EAAE,OAAO,eAAe,YAAY,QAAW,aAAa;AAAA,EACrE;AAEA,QAAM,OAAO,WAAW;AAExB,UAAQ,MAAM;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,EAAE,OAAO,eAAe,YAAY,MAAM,aAAa;AAAA,IAChE,KAAK;AACH,aAAO;AAAA,QACL,OAAO;AAAA,QACP,YAAY;AAAA,UACV,MAAM;AAAA,UACN,UAAU,EAAE,MAAM,WAAW,SAAS;AAAA,QACxC;AAAA,QACA;AAAA,MACF;AAAA,IACF,SAAS;AACP,YAAM,mBAA0B;AAChC,YAAM,IAAI,+CAA8B;AAAA,QACtC,eAAe,qBAAqB,gBAAgB;AAAA,MACtD,CAAC;AAAA,IACH;AAAA,EACF;AACF;;;AC9FO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,SAAO;AAAA,IACL,IAAI,kBAAM;AAAA,IACV,SAAS,wBAAS;AAAA,IAClB,WAAW,WAAW,OAAO,IAAI,KAAK,UAAU,GAAI,IAAI;AAAA,EAC1D;AACF;;;ACZO,SAAS,wBACd,cAC6B;AAC7B,UAAQ,cAAc;AAAA,IACpB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;;;ARgCA,SAAS,mCAAmC;AAAA,EAC1C;AAAA,EACA;AACF,GAG2B;AACzB,QAAM,SACJ,oBAAoB,WAChB,SACA,oBAAoB,UAClB,QACA;AAER,MAAI,WAAW,iBAAiB;AAC9B,aAAS,KAAK;AAAA,MACZ,MAAM;AAAA,MACN,SAAS,oBAAoB,eAAe,mDAAmD,MAAM;AAAA,IACvG,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEO,IAAM,4BAAN,MAA2D;AAAA,EAYhE,YAAY,SAA8B,QAA4B;AAXtE,SAAS,uBAAuB;AAIhC,SAAS,gBAAgB;AAAA,MACvB,WAAW,CAAC,iBAAiB;AAAA,IAC/B;AAME,SAAK,UAAU;AACf,SAAK,SAAS;AAEd,SAAK,4BAAwB,uDAA+B;AAAA,MAC1D,aAAa;AAAA,MACb,gBAAgB,CAAC,UACf,MAAM,MAAM;AAAA,IAChB,CAAC;AAAA,EACH;AAAA,EAEA,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,IAAY,sBAA8B;AACxC,WAAO,KAAK,OAAO,SAAS,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK;AAAA,EACjD;AAAA,EAEA,MAAc,QAAQ;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAiD;AAxHnD;AAyHI,UAAM,mBACH,eAAM,6CAAqB;AAAA,MAC1B,UAAU,KAAK;AAAA,MACf;AAAA,MACA,QAAQ;AAAA,IACV,CAAC,MAJA,YAIM,CAAC;AAEV,UAAM,4BACJ,KAAK,OAAO,8BAA8B;AAC5C,UAAM,0BACJ,KAAK,OAAO,4BAA4B;AAE1C,UAAM,EAAE,UAAU,SAAS,IAAI,MAAM,8BAA8B;AAAA,MACjE;AAAA,MACA;AAAA,MACA,SAAS,KAAK;AAAA,MACd,qBAAqB,KAAK;AAAA,MAC1B,mCACE,KAAK,OAAO;AAAA,MACd;AAAA,IACF,CAAC;AACD,UAAM,cAAc,CAAC,GAAG,QAAQ;AAEhC,QAAI,QAAQ,MAAM;AAChB,kBAAY,KAAK,EAAE,MAAM,uBAAuB,SAAS,OAAO,CAAC;AAAA,IACnE;AAEA,QAAI,QAAQ,MAAM;AAChB,kBAAY,KAAK,EAAE,MAAM,uBAAuB,SAAS,OAAO,CAAC;AAAA,IACnE;AAEA,QAAI,CAAC,2BAA2B,oBAAoB,MAAM;AACxD,kBAAY,KAAK;AAAA,QACf,MAAM;AAAA,QACN,SACE;AAAA,MACJ,CAAC;AAAA,IACH;AAEA,QAAI,CAAC,2BAA2B,mBAAmB,MAAM;AACvD,kBAAY,KAAK;AAAA,QACf,MAAM;AAAA,QACN,SACE;AAAA,MACJ,CAAC;AAAA,IACH;AAEA,UAAM;AAAA,MACJ,OAAO;AAAA,MACP,YAAY;AAAA,MACZ;AAAA,IACF,IAAI,aAAa;AAAA,MACf;AAAA,MACA;AAAA,IACF,CAAC;AACD,gBAAY,KAAK,GAAG,YAAY;AAEhC,UAAM,gBAAe,qBAAgB,aAAhB,mBAA0B;AAC/C,QAAI,iBAAiB,YAAY;AAC/B,kBAAY,KAAK;AAAA,QACf,MAAM;AAAA,QACN,SACE;AAAA,MACJ,CAAC;AAAA,IACH;AAEA,UAAM,WACJ,KAAK,OAAO,qBAAqB,QAC7B,SACA,gBAAgB,OACd,EAAE,MAAM,iBAAiB,aAAa,YAAY,aAAa,IAC/D;AAER,UAAM,oBACJ,KAAK,OAAO,qBAAqB,UACjC,qCAAU,UAAS,eAClB,YAAY,QACX,KAAK,YAAY,uBACjB,kBAAkB,KAAK,OAAO;AAElC,QAAI,qBAAqB,eAAe,MAAM;AAC5C,kBAAY,KAAK;AAAA,QACf,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SACE;AAAA,MACJ,CAAC;AAAA,IACH;AAEA,QAAI,qBAAqB,QAAQ,MAAM;AACrC,kBAAY,KAAK;AAAA,QACf,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SACE;AAAA,MACJ,CAAC;AAAA,IACH;AAEA,UAAM,kBACJ,gBAAgB,mBAAmB,OAC/B,mCAAmC;AAAA,MACjC,iBAAiB,gBAAgB;AAAA,MACjC,UAAU;AAAA,IACZ,CAAC,IACD;AAEN,WAAO;AAAA,MACL,MAAM;AAAA,QACJ,OAAO,KAAK;AAAA,QACZ,IAAK,gBAAgB,aAAa,QAChC,gBAAgB,eAAe,SAAS,EAAE,UAAU,KAAK;AAAA,QAC3D,GAAI,gBAAgB,eAAe,QAAQ;AAAA,UACzC,cAAc,gBAAgB;AAAA,QAChC;AAAA,QACA,YAAY;AAAA,QACZ,aAAa,oBAAoB,SAAY;AAAA,QAC7C,OAAO,oBAAoB,SAAY;AAAA,QACvC,mBAAmB,0BACf,mBACA;AAAA,QACJ,kBAAkB,0BAA0B,kBAAkB;AAAA,QAC9D,kBACE,iDAAgB,UAAS,SACrB,6BAA6B,eAAe,UAAU,OACpD;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,YACX,QAAQ,eAAe;AAAA,YACvB,SAAQ,qBAAgB,qBAAhB,YAAoC;AAAA,YAC5C,OAAM,oBAAe,SAAf,YAAuB;AAAA,YAC7B,aAAa,eAAe;AAAA,UAC9B;AAAA,QACF,IACA,EAAE,MAAM,cAAc,IACxB;AAAA,QACN,MAAM;AAAA,QACN;AAAA,QACA,OAAO;AAAA,QACP,aAAa;AAAA,QACb;AAAA,QACA,GAAI,gBAAgB,UAAU,QAAQ;AAAA,UACpC,SAAS,gBAAgB;AAAA,QAC3B;AAAA,QACA,IAAI,qCAAU,UAAS,cACrB,mBAAmB,QAAQ;AAAA,UACzB,kBAAkB;AAAA,QACpB;AAAA,MACJ;AAAA,MACA,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,SAC6D;AAnRjE;AAoRI,UAAM,EAAE,MAAM,SAAS,IAAI,MAAM,KAAK,QAAQ,EAAE,GAAG,QAAQ,CAAC;AAE5D,UAAM;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,MACP,UAAU;AAAA,IACZ,IAAI,UAAM,sCAAc;AAAA,MACtB,KAAK,KAAK,OAAO,IAAI;AAAA,QACnB,MAAM;AAAA,QACN,SAAS,KAAK;AAAA,MAChB,CAAC;AAAA,MACD,aAAS,uCAAe,KAAK,OAAO,QAAQ,GAAG,QAAQ,OAAO;AAAA,MAC9D,MAAM;AAAA,MACN,uBAAuB,KAAK;AAAA,MAC5B,+BAA2B;AAAA,QACzB;AAAA,MACF;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,UAAM,SAAS,aAAa,QAAQ,CAAC;AACrC,UAAM,UAAyC,CAAC;AAGhD,UAAM,YAAY,OAAO,QAAQ;AACjC,QAAI,aAAa,QAAQ,UAAU,SAAS,GAAG;AAC7C,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AAGA,QAAI,OAAO,QAAQ,cAAc,MAAM;AACrC,iBAAW,YAAY,OAAO,QAAQ,YAAY;AAChD,gBAAQ,KAAK;AAAA,UACX,MAAM;AAAA,UACN,aAAY,cAAS,OAAT,gBAAe,mCAAW;AAAA,UACtC,UAAU,SAAS,SAAS;AAAA,UAC5B,OAAO,SAAS,SAAS;AAAA,QAC3B,CAAC;AAAA,MACH;AAAA,IACF;AAGA,UAAM,OAAO,OAAO,QAAQ;AAC5B,QAAI,QAAQ,QAAQ,KAAK,SAAS,GAAG;AACnC,cAAQ,KAAK,EAAE,MAAM,QAAQ,KAAK,CAAC;AAAA,IACrC;AAEA,WAAO;AAAA,MACL;AAAA,MACA,cAAc,wBAAwB,OAAO,aAAa;AAAA,MAC1D,OAAO;AAAA,QACL,cAAa,wBAAa,UAAb,mBAAoB,kBAApB,YAAqC;AAAA,QAClD,eAAc,wBAAa,UAAb,mBAAoB,sBAApB,YAAyC;AAAA,QACvD,cAAa,wBAAa,UAAb,mBAAoB,iBAApB,YAAoC;AAAA,QACjD,kBACE,8BAAa,UAAb,mBAAoB,8BAApB,mBAA+C,qBAA/C,YACA;AAAA,QACF,oBACE,wBAAa,UAAb,mBAAoB,4BAApB,YAA+C;AAAA,MACnD;AAAA,MACA,kBAAkB;AAAA,QAChB,CAAC,KAAK,mBAAmB,GAAG;AAAA,UAC1B,uBACE,wBAAa,UAAb,mBAAoB,4BAApB,YAA+C;AAAA,UACjD,wBACE,wBAAa,UAAb,mBAAoB,6BAApB,YAAgD;AAAA,UAClD,GAAI,aAAa,UAAU,QAAQ;AAAA,YACjC,gBAAgB,aAAa;AAAA,UAC/B;AAAA,UACA,GAAI,OAAO,SAAS,QAAQ,EAAE,aAAa,OAAO,MAAM;AAAA,UACxD,GAAI,OAAO,QAAQ,QAAQ,QAAQ;AAAA,YACjC,aAAa,OAAO,QAAQ;AAAA,UAC9B;AAAA,UACA,GAAI,OAAO,QAAQ,cAAc,QAAQ;AAAA,YACvC,eAAe,OAAO,QAAQ,WAC3B,IAAI,cAAY,SAAS,IAAI,EAC7B,OAAO,UAAQ,QAAQ,IAAI;AAAA,UAChC;AAAA,UACA,GAAI,OAAO,YAAY,QAAQ,EAAE,UAAU,OAAO,SAAS;AAAA,UAC3D,GAAI,aAAa,sBAAsB,QAAQ;AAAA,YAC7C,mBAAmB,aAAa;AAAA,UAClC;AAAA,QACF;AAAA,MACF;AAAA,MACA,SAAS,EAAE,MAAM,KAAK;AAAA,MACtB,UAAU;AAAA,QACR,GAAG,oBAAoB,YAAY;AAAA,QACnC,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,SACJ,SAC2D;AAC3D,UAAM,EAAE,MAAM,SAAS,IAAI,MAAM,KAAK,QAAQ,EAAE,GAAG,QAAQ,CAAC;AAE5D,UAAM,OAAO;AAAA,MACX,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,gBAAgB,EAAE,eAAe,KAAK;AAAA,IACxC;AAEA,UAAM,EAAE,iBAAiB,OAAO,SAAS,IAAI,UAAM,sCAAc;AAAA,MAC/D,KAAK,KAAK,OAAO,IAAI;AAAA,QACnB,MAAM;AAAA,QACN,SAAS,KAAK;AAAA,MAChB,CAAC;AAAA,MACD,aAAS,uCAAe,KAAK,OAAO,QAAQ,GAAG,QAAQ,OAAO;AAAA,MAC9D;AAAA,MACA,uBAAuB,KAAK;AAAA,MAC5B,+BAA2B;AAAA,QACzB;AAAA,MACF;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,UAAM,YAQD,CAAC;AAEN,QAAI,eAA4C;AAChD,QAAI,QAA4C;AAChD,QAAI,oBAAwC;AAC5C,QAAI,eAAe;AACnB,UAAM,sBAAsB,KAAK;AACjC,QAAI,oBAAoB;AACxB,QAAI,eAAe;AACnB,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,UAAM,gBAAgB,oBAAI,IAAwB;AAClD,UAAM,kBAAyC,CAAC;AAChD,UAAM,oBAA2C,CAAC;AAElD,WAAO;AAAA,MACL,QAAQ,SAAS;AAAA,QACf,IAAI,gBAGF;AAAA,UACA,MAAM,YAAY;AAChB,uBAAW,QAAQ,EAAE,MAAM,gBAAgB,SAAS,CAAC;AAAA,UACvD;AAAA,UAEA,UAAU,OAAO,YAAY;AAlbvC;AAobY,gBAAI,QAAQ,kBAAkB;AAC5B,yBAAW,QAAQ,EAAE,MAAM,OAAO,UAAU,MAAM,SAAS,CAAC;AAAA,YAC9D;AAGA,gBAAI,CAAC,MAAM,SAAS;AAClB,6BAAe;AACf,yBAAW,QAAQ,EAAE,MAAM,SAAS,OAAO,MAAM,MAAM,CAAC;AACxD;AAAA,YACF;AACA,kBAAM,QAAQ,MAAM;AAGpB,gBAAI,WAAW,OAAO;AACpB,6BAAe;AACf,yBAAW,QAAQ,EAAE,MAAM,SAAS,OAAO,MAAM,MAAM,QAAQ,CAAC;AAChE;AAAA,YACF;AAEA,gBAAI,cAAc;AAChB,6BAAe;AAEf,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,GAAG,oBAAoB,KAAK;AAAA,cAC9B,CAAC;AAAA,YACH;AAEA,gBAAI,MAAM,SAAS,MAAM;AACvB,sBAAQ,MAAM;AAAA,YAChB;AAEA,gBAAI,MAAM,UAAU,MAAM;AACxB,+BAAiB,MAAM;AAAA,YACzB;AAIA,gBAAI,MAAM,sBAAsB,MAAM;AACpC,kCAAoB,MAAM;AAAA,YAC5B;AAEA,kBAAM,SAAS,MAAM,QAAQ,CAAC;AAE9B,iBAAI,iCAAQ,UAAS,MAAM;AACzB,4BAAc,OAAO;AAAA,YACvB;AAEA,iBAAI,iCAAQ,kBAAiB,MAAM;AACjC,6BAAe,wBAAwB,OAAO,aAAa;AAAA,YAC7D;AAEA,kBAAI,sCAAQ,aAAR,mBAAkB,YAAW,MAAM;AACrC,8BAAgB,KAAK,GAAG,OAAO,SAAS,OAAO;AAAA,YACjD;AAEA,kBAAI,sCAAQ,aAAR,mBAAkB,sBAAqB,MAAM;AAC/C,gCAAkB,KAAK,GAAG,OAAO,SAAS,iBAAiB;AAAA,YAC7D;AAEA,iBAAI,iCAAQ,UAAS,MAAM;AACzB;AAAA,YACF;AAEA,kBAAM,QAAQ,OAAO;AAErB,gBAAI,MAAM,QAAQ,MAAM;AACtB,4BAAc,MAAM;AAAA,YACtB;AAGA,kBAAM,mBAAmB,MAAM;AAC/B,gBAAI,kBAAkB;AACpB,kBAAI,CAAC,mBAAmB;AACtB,2BAAW,QAAQ;AAAA,kBACjB,MAAM;AAAA,kBACN,IAAI;AAAA,gBACN,CAAC;AACD,oCAAoB;AAAA,cACtB;AAEA,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,IAAI;AAAA,gBACJ,OAAO;AAAA,cACT,CAAC;AAAA,YACH;AAEA,gBAAI,MAAM,SAAS;AACjB,kBAAI,CAAC,cAAc;AACjB,2BAAW,QAAQ,EAAE,MAAM,cAAc,IAAI,QAAQ,CAAC;AACtD,+BAAe;AAAA,cACjB;AAGA,kBAAI,mBAAmB;AACrB,2BAAW,QAAQ;AAAA,kBACjB,MAAM;AAAA,kBACN,IAAI;AAAA,gBACN,CAAC;AACD,oCAAoB;AAAA,cACtB;AAEA,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,IAAI;AAAA,gBACJ,OAAO,MAAM;AAAA,cACf,CAAC;AAAA,YACH;AAEA,gBAAI,MAAM,cAAc,QAAQ,MAAM,WAAW,SAAS,GAAG;AAE3D,kBAAI,mBAAmB;AACrB,2BAAW,QAAQ;AAAA,kBACjB,MAAM;AAAA,kBACN,IAAI;AAAA,gBACN,CAAC;AACD,oCAAoB;AAAA,cACtB;AAEA,yBAAW,iBAAiB,MAAM,YAAY;AAC5C,oBAAI,cAAc,QAAQ,MAAM;AAC9B,gCAAc,IAAI,cAAc,OAAO,cAAc,IAAI;AAAA,gBAC3D;AAEA,sBAAM,QAAQ,cAAc;AAE5B,oBAAI,UAAU,KAAK,KAAK,MAAM;AAC5B,sBAAI,cAAc,MAAM,MAAM;AAC5B,0BAAM,IAAI,0CAAyB;AAAA,sBACjC,MAAM;AAAA,sBACN,SAAS;AAAA,oBACX,CAAC;AAAA,kBACH;AAEA,wBAAI,mBAAc,aAAd,mBAAwB,SAAQ,MAAM;AACxC,0BAAM,IAAI,0CAAyB;AAAA,sBACjC,MAAM;AAAA,sBACN,SAAS;AAAA,oBACX,CAAC;AAAA,kBACH;AAEA,6BAAW,QAAQ;AAAA,oBACjB,MAAM;AAAA,oBACN,IAAI,cAAc;AAAA,oBAClB,UAAU,cAAc,SAAS;AAAA,kBACnC,CAAC;AAED,4BAAU,KAAK,IAAI;AAAA,oBACjB,IAAI,cAAc;AAAA,oBAClB,MAAM;AAAA,oBACN,UAAU;AAAA,sBACR,MAAM,cAAc,SAAS;AAAA,sBAC7B,YAAW,mBAAc,SAAS,cAAvB,YAAoC;AAAA,oBACjD;AAAA,oBACA,aAAa;AAAA,kBACf;AAEA,wBAAMC,YAAW,UAAU,KAAK;AAEhC,wBACE,KAAAA,UAAS,aAAT,mBAAmB,SAAQ,UAC3B,KAAAA,UAAS,aAAT,mBAAmB,cAAa,MAChC;AAEA,wBAAIA,UAAS,SAAS,UAAU,SAAS,GAAG;AAC1C,iCAAW,QAAQ;AAAA,wBACjB,MAAM;AAAA,wBACN,IAAIA,UAAS;AAAA,wBACb,OAAOA,UAAS,SAAS;AAAA,sBAC3B,CAAC;AAAA,oBACH;AAIA,4BAAI,uCAAeA,UAAS,SAAS,SAAS,GAAG;AAC/C,iCAAW,QAAQ;AAAA,wBACjB,MAAM;AAAA,wBACN,IAAIA,UAAS;AAAA,sBACf,CAAC;AAED,iCAAW,QAAQ;AAAA,wBACjB,MAAM;AAAA,wBACN,aAAY,KAAAA,UAAS,OAAT,gBAAe,mCAAW;AAAA,wBACtC,UAAUA,UAAS,SAAS;AAAA,wBAC5B,OAAOA,UAAS,SAAS;AAAA,sBAC3B,CAAC;AACD,sBAAAA,UAAS,cAAc;AAAA,oBACzB;AAAA,kBACF;AAEA;AAAA,gBACF;AAGA,sBAAM,WAAW,UAAU,KAAK;AAEhC,oBAAI,SAAS,aAAa;AACxB;AAAA,gBACF;AAEA,sBAAI,mBAAc,aAAd,mBAAwB,cAAa,MAAM;AAC7C,2BAAS,SAAU,cACjB,yBAAc,aAAd,mBAAwB,cAAxB,YAAqC;AAAA,gBACzC;AAGA,2BAAW,QAAQ;AAAA,kBACjB,MAAM;AAAA,kBACN,IAAI,SAAS;AAAA,kBACb,QAAO,mBAAc,SAAS,cAAvB,YAAoC;AAAA,gBAC7C,CAAC;AAGD,sBACE,cAAS,aAAT,mBAAmB,SAAQ,UAC3B,cAAS,aAAT,mBAAmB,cAAa,YAChC,uCAAe,SAAS,SAAS,SAAS,GAC1C;AACA,6BAAW,QAAQ;AAAA,oBACjB,MAAM;AAAA,oBACN,IAAI,SAAS;AAAA,kBACf,CAAC;AAED,6BAAW,QAAQ;AAAA,oBACjB,MAAM;AAAA,oBACN,aAAY,cAAS,OAAT,gBAAe,mCAAW;AAAA,oBACtC,UAAU,SAAS,SAAS;AAAA,oBAC5B,OAAO,SAAS,SAAS;AAAA,kBAC3B,CAAC;AACD,2BAAS,cAAc;AAAA,gBACzB;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UAEA,MAAM,YAAY;AAhqB5B;AAiqBY,gBAAI,mBAAmB;AACrB,yBAAW,QAAQ,EAAE,MAAM,iBAAiB,IAAI,cAAc,CAAC;AAAA,YACjE;AAEA,gBAAI,cAAc;AAChB,yBAAW,QAAQ,EAAE,MAAM,YAAY,IAAI,QAAQ,CAAC;AAAA,YACtD;AAGA,uBAAW,YAAY,UAAU;AAAA,cAC/B,CAAAA,cAAY,CAACA,UAAS;AAAA,YACxB,GAAG;AACD,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,IAAI,SAAS;AAAA,cACf,CAAC;AAED,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,aAAY,cAAS,OAAT,gBAAe,mCAAW;AAAA,gBACtC,UAAU,SAAS,SAAS;AAAA,gBAC5B,OAAO,SAAS,SAAS;AAAA,cAC3B,CAAC;AAAA,YACH;AAEA,uBAAW,QAAQ;AAAA,cACjB,MAAM;AAAA,cACN;AAAA,cACA,OAAO;AAAA,gBACL,cAAa,oCAAO,kBAAP,YAAwB;AAAA,gBACrC,eAAc,oCAAO,sBAAP,YAA4B;AAAA,gBAC1C,cAAa,oCAAO,iBAAP,YAAuB;AAAA,gBACpC,kBACE,0CAAO,8BAAP,mBAAkC,qBAAlC,YACA;AAAA,gBACF,oBAAmB,oCAAO,4BAAP,YAAkC;AAAA,cACvD;AAAA,cACA,kBAAkB;AAAA,gBAChB,CAAC,mBAAmB,GAAG;AAAA,kBACrB,uBAAsB,oCAAO,4BAAP,YAAkC;AAAA,kBACxD,wBACE,oCAAO,6BAAP,YAAmC;AAAA,kBACrC,GAAI,kBAAkB,QAAQ,EAAE,eAAe;AAAA,kBAC/C,GAAI,eAAe,QAAQ,EAAE,YAAY;AAAA,kBACzC,GAAI,eAAe,QAAQ,EAAE,YAAY;AAAA,kBACzC,GAAI,cAAc,OAAO,KAAK;AAAA,oBAC5B,eAAe,CAAC,GAAG,cAAc,QAAQ,CAAC,EACvC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,MAAM,OAAO,KAAK,EACtC,IAAI,CAAC,CAAC,EAAE,IAAI,MAAM,IAAI;AAAA,kBAC3B;AAAA,kBACA,IAAK,gBAAgB,SAAS,KAC5B,kBAAkB,SAAS,MAAM;AAAA,oBACjC,UAAU;AAAA,sBACR,GAAI,gBAAgB,SAAS,KAAK;AAAA,wBAChC,SAAS;AAAA,sBACX;AAAA,sBACA,GAAI,kBAAkB,SAAS,KAAK;AAAA,wBAClC,mBAAmB;AAAA,sBACrB;AAAA,oBACF;AAAA,kBACF;AAAA,kBACA,GAAI,qBAAqB,QAAQ,EAAE,kBAAkB;AAAA,gBACvD;AAAA,cACF;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA,SAAS,EAAE,KAAK;AAAA,MAChB,UAAU,EAAE,SAAS,gBAAgB;AAAA,IACvC;AAAA,EACF;AACF;;;ASvuBO,IAAM,UACX,OACI,WACA;;;AVkDC,SAAS,eACd,UAAoC,CAAC,GACnB;AAzDpB;AA0DE,QAAM,WACJ,sDAAqB,QAAQ,OAAO,MAApC,YAAyC;AAE3C,QAAM,aAAa,UACjB;AAAA,IACE;AAAA,MACE,eAAe,cAAU,mCAAW;AAAA,QAClC,QAAQ,QAAQ;AAAA,QAChB,yBAAyB;AAAA,QACzB,aAAa;AAAA,MACf,CAAC,CAAC;AAAA,MACF,GAAG,QAAQ;AAAA,IACb;AAAA,IACA,mBAAmB,OAAO;AAAA,EAC5B;AAEF,QAAM,sBAAsB,CAAC,YAAiC;AAC5D,WAAO,IAAI,0BAA0B,SAAS;AAAA,MAC5C,UAAU;AAAA,MACV,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAAA,MACpC,SAAS;AAAA,MACT,OAAO,QAAQ;AAAA,MACf,mCAAmC,QAAQ,SAAS,OAAO;AAAA,IAC7D,CAAC;AAAA,EACH;AAEA,QAAM,WAAW,CAAC,YAChB,oBAAoB,OAAO;AAE7B,WAAS,gBAAgB;AACzB,WAAS,OAAO;AAEhB,WAAS,qBAAqB,CAAC,YAAoB;AACjD,UAAM,IAAI,kCAAiB,EAAE,SAAS,WAAW,qBAAqB,CAAC;AAAA,EACzE;AACA,WAAS,aAAa,CAAC,YAAoB;AACzC,UAAM,IAAI,kCAAiB,EAAE,SAAS,WAAW,aAAa,CAAC;AAAA,EACjE;AAEA,SAAO;AACT;AAEO,IAAM,WAAW,eAAe;","names":["import_provider","import_provider_utils","import_provider","import_provider_utils","import_v4","userContent","import_provider_utils","import_v4","import_provider","toolCall"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/deepseek-provider.ts","../src/chat/deepseek-chat-language-model.ts","../src/chat/convert-to-deepseek-chat-messages.ts","../src/chat/deepseek-chat-options.ts","../src/chat/deepseek-file-part-options.ts","../src/chat/is-deepseek-v4-model.ts","../src/chat/deepseek-chat-api-types.ts","../src/chat/deepseek-prepare-tools.ts","../src/chat/get-response-metadata.ts","../src/chat/map-deepseek-finish-reason.ts","../src/version.ts"],"sourcesContent":["export { createDeepSeek, deepseek } from './deepseek-provider';\nexport type {\n DeepSeekProvider,\n DeepSeekProviderSettings,\n} from './deepseek-provider';\nexport { VERSION } from './version';\nexport type {\n DeepSeekAssistantMessageProviderOptions,\n DeepSeekChatOptions,\n DeepSeekMessageProviderOptions,\n} from './chat/deepseek-chat-options';\nexport type { DeepSeekErrorData } from './chat/deepseek-chat-api-types';\nexport type { DeepSeekFilePartProviderOptions } from './chat/deepseek-file-part-options';\n","import {\n type LanguageModelV2,\n type ProviderV2,\n NoSuchModelError,\n} from '@ai-sdk/provider';\nimport {\n type FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport type { DeepSeekChatModelId } from './chat/deepseek-chat-options';\nimport { DeepSeekChatLanguageModel } from './chat/deepseek-chat-language-model';\nimport { VERSION } from './version';\n\nexport interface DeepSeekProviderSettings {\n /**\n * DeepSeek API key.\n */\n apiKey?: string;\n\n /**\n * Base URL for the API calls.\n */\n baseURL?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\nexport interface DeepSeekProvider extends ProviderV2 {\n /**\nCreates a DeepSeek model for text generation.\n*/\n (modelId: DeepSeekChatModelId): LanguageModelV2;\n\n /**\nCreates a DeepSeek model for text generation.\n*/\n languageModel(modelId: DeepSeekChatModelId): LanguageModelV2;\n\n /**\nCreates a DeepSeek chat model for text generation.\n*/\n chat(modelId: DeepSeekChatModelId): LanguageModelV2;\n}\n\nexport function createDeepSeek(\n options: DeepSeekProviderSettings = {},\n): DeepSeekProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ?? 'https://api.deepseek.com';\n\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'DEEPSEEK_API_KEY',\n description: 'DeepSeek API key',\n })}`,\n ...options.headers,\n },\n `ai-sdk/deepseek/${VERSION}`,\n );\n\n const createLanguageModel = (modelId: DeepSeekChatModelId) => {\n return new DeepSeekChatLanguageModel(modelId, {\n provider: `deepseek.chat`,\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n supportsAssistantPrefixCompletion: baseURL.endsWith('/beta'),\n });\n };\n\n const provider = (modelId: DeepSeekChatModelId) =>\n createLanguageModel(modelId);\n\n provider.languageModel = createLanguageModel;\n provider.chat = createLanguageModel;\n\n provider.textEmbeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'textEmbeddingModel' });\n };\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\nexport const deepseek = createDeepSeek();\n","import {\n type APICallError,\n type LanguageModelV2,\n type LanguageModelV2CallWarning,\n type LanguageModelV2Content,\n type LanguageModelV2FinishReason,\n type LanguageModelV2StreamPart,\n InvalidResponseDataError,\n} from '@ai-sdk/provider';\nimport {\n type FetchFunction,\n type InferSchema,\n type ParseResult,\n type ResponseHandler,\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n generateId,\n isParsableJson,\n parseProviderOptions,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { convertToDeepSeekChatMessages } from './convert-to-deepseek-chat-messages';\nimport {\n type DeepSeekChatTokenUsage,\n deepseekChatChunkSchema,\n deepseekChatResponseSchema,\n deepSeekErrorSchema,\n type DeepSeekChatLogprob,\n} from './deepseek-chat-api-types';\nimport {\n type DeepSeekChatModelId,\n deepseekChatOptions,\n} from './deepseek-chat-options';\nimport { prepareTools } from './deepseek-prepare-tools';\nimport { getResponseMetadata } from './get-response-metadata';\nimport { isDeepSeekV4Model } from './is-deepseek-v4-model';\nimport { mapDeepSeekFinishReason } from './map-deepseek-finish-reason';\n\nexport type DeepSeekChatConfig = {\n provider: string;\n headers: () => Record<string, string | undefined>;\n url: (options: { modelId: string; path: string }) => string;\n fetch?: FetchFunction;\n supportsAssistantPrefixCompletion?: boolean;\n supportsPenaltySampling?: boolean;\n supportsThinking?: boolean;\n supportsStructuredOutputs?: boolean;\n};\n\nfunction getDeepSeekCacheReadTokens(\n usage: DeepSeekChatTokenUsage | undefined | null,\n): number | undefined {\n return (\n usage?.prompt_cache_hit_tokens ??\n usage?.prompt_tokens_details?.cached_tokens ??\n undefined\n );\n}\n\nfunction mapDeepSeekProviderReasoningEffort({\n reasoningEffort,\n warnings,\n}: {\n reasoningEffort: 'low' | 'medium' | 'high' | 'xhigh' | 'max';\n warnings: LanguageModelV2CallWarning[];\n}): 'low' | 'high' | 'max' {\n const mapped =\n reasoningEffort === 'medium'\n ? 'high'\n : reasoningEffort === 'xhigh'\n ? 'max'\n : reasoningEffort;\n\n if (mapped !== reasoningEffort) {\n warnings.push({\n type: 'other',\n message: `reasoningEffort \"${reasoningEffort}\" is not a canonical DeepSeek value. mapped to \"${mapped}\".`,\n });\n }\n\n return mapped;\n}\n\nexport class DeepSeekChatLanguageModel implements LanguageModelV2 {\n readonly specificationVersion = 'v2';\n\n readonly modelId: DeepSeekChatModelId;\n\n readonly supportedUrls = {\n 'image/*': [/^https?:\\/\\/.*$/],\n };\n\n private readonly config: DeepSeekChatConfig;\n private readonly failedResponseHandler: ResponseHandler<APICallError>;\n\n constructor(modelId: DeepSeekChatModelId, config: DeepSeekChatConfig) {\n this.modelId = modelId;\n this.config = config;\n\n this.failedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: deepSeekErrorSchema,\n errorToMessage: (error: InferSchema<typeof deepSeekErrorSchema>) =>\n error.error.message,\n });\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n private get providerOptionsName(): string {\n return this.config.provider.split('.')[0].trim();\n }\n\n private async getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n providerOptions,\n stopSequences,\n responseFormat,\n tools,\n toolChoice,\n seed,\n }: Parameters<LanguageModelV2['doGenerate']>[0]) {\n const deepseekOptions =\n (await parseProviderOptions({\n provider: this.providerOptionsName,\n providerOptions,\n schema: deepseekChatOptions,\n })) ?? {};\n\n const supportsStructuredOutputs =\n this.config.supportsStructuredOutputs === true;\n const supportsPenaltySampling =\n this.config.supportsPenaltySampling === true;\n\n const { messages, warnings } = await convertToDeepSeekChatMessages({\n prompt,\n responseFormat,\n modelId: this.modelId,\n providerOptionsName: this.providerOptionsName,\n supportsAssistantPrefixCompletion:\n this.config.supportsAssistantPrefixCompletion,\n supportsStructuredOutputs,\n });\n const allWarnings = [...warnings];\n\n if (topK != null) {\n allWarnings.push({ type: 'unsupported-setting', setting: 'topK' });\n }\n\n if (seed != null) {\n allWarnings.push({ type: 'unsupported-setting', setting: 'seed' });\n }\n\n if (!supportsPenaltySampling && frequencyPenalty != null) {\n allWarnings.push({\n type: 'other',\n message:\n 'frequencyPenalty is deprecated by DeepSeek and has been omitted. Remove frequencyPenalty from the request.',\n });\n }\n\n if (!supportsPenaltySampling && presencePenalty != null) {\n allWarnings.push({\n type: 'other',\n message:\n 'presencePenalty is deprecated by DeepSeek and has been omitted. Remove presencePenalty from the request.',\n });\n }\n\n const {\n tools: deepseekTools,\n toolChoice: deepseekToolChoices,\n toolWarnings,\n } = prepareTools({\n tools,\n toolChoice,\n });\n allWarnings.push(...toolWarnings);\n\n const thinkingType = deepseekOptions.thinking?.type;\n if (thinkingType === 'adaptive') {\n allWarnings.push({\n type: 'other',\n message:\n 'thinking.type \"adaptive\" is not a canonical DeepSeek value. mapped to \"enabled\".',\n });\n }\n\n const thinking =\n this.config.supportsThinking === false\n ? undefined\n : thinkingType != null\n ? { type: thinkingType === 'adaptive' ? 'enabled' : thinkingType }\n : undefined;\n\n const isThinkingEnabled =\n this.config.supportsThinking !== false &&\n thinking?.type !== 'disabled' &&\n (thinking != null ||\n this.modelId === 'deepseek-reasoner' ||\n isDeepSeekV4Model(this.modelId));\n\n if (isThinkingEnabled && temperature != null) {\n allWarnings.push({\n type: 'unsupported-setting',\n setting: 'temperature',\n details:\n \"temperature has no effect when DeepSeek thinking is enabled. Set providerOptions.deepseek.thinking.type to 'disabled' to use temperature.\",\n });\n }\n\n if (isThinkingEnabled && topP != null) {\n allWarnings.push({\n type: 'unsupported-setting',\n setting: 'topP',\n details:\n \"topP has no effect when DeepSeek thinking is enabled. Set providerOptions.deepseek.thinking.type to 'disabled' to use topP.\",\n });\n }\n\n const reasoningEffort =\n deepseekOptions.reasoningEffort != null\n ? mapDeepSeekProviderReasoningEffort({\n reasoningEffort: deepseekOptions.reasoningEffort,\n warnings: allWarnings,\n })\n : undefined;\n\n return {\n args: {\n model: this.modelId,\n ...((deepseekOptions.logprobs === true ||\n deepseekOptions.topLogprobs != null) && { logprobs: true }),\n ...(deepseekOptions.topLogprobs != null && {\n top_logprobs: deepseekOptions.topLogprobs,\n }),\n max_tokens: maxOutputTokens,\n temperature: isThinkingEnabled ? undefined : temperature,\n top_p: isThinkingEnabled ? undefined : topP,\n frequency_penalty: supportsPenaltySampling\n ? frequencyPenalty\n : undefined,\n presence_penalty: supportsPenaltySampling ? presencePenalty : undefined,\n response_format:\n responseFormat?.type === 'json'\n ? supportsStructuredOutputs && responseFormat.schema != null\n ? {\n type: 'json_schema',\n json_schema: {\n schema: responseFormat.schema,\n strict: deepseekOptions.strictJsonSchema ?? true,\n name: responseFormat.name ?? 'response',\n description: responseFormat.description,\n },\n }\n : { type: 'json_object' }\n : undefined,\n stop: stopSequences,\n messages,\n tools: deepseekTools,\n tool_choice: deepseekToolChoices,\n thinking,\n ...(deepseekOptions.userId != null && {\n user_id: deepseekOptions.userId,\n }),\n ...(thinking?.type !== 'disabled' &&\n reasoningEffort != null && {\n reasoning_effort: reasoningEffort,\n }),\n },\n warnings: allWarnings,\n };\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV2['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV2['doGenerate']>>> {\n const { args, warnings } = await this.getArgs({ ...options });\n\n const {\n responseHeaders,\n value: responseBody,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url({\n path: '/chat/completions',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: this.failedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n deepseekChatResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const choice = responseBody.choices[0];\n const content: Array<LanguageModelV2Content> = [];\n\n // reasoning content (before text):\n const reasoning = choice.message.reasoning_content;\n if (reasoning != null && reasoning.length > 0) {\n content.push({\n type: 'reasoning',\n text: reasoning,\n });\n }\n\n // tool calls:\n if (choice.message.tool_calls != null) {\n for (const toolCall of choice.message.tool_calls) {\n content.push({\n type: 'tool-call',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments!,\n });\n }\n }\n\n // text content:\n const text = choice.message.content;\n if (text != null && text.length > 0) {\n content.push({ type: 'text', text });\n }\n\n const cacheReadTokens = getDeepSeekCacheReadTokens(responseBody.usage);\n\n return {\n content,\n finishReason: mapDeepSeekFinishReason(choice.finish_reason),\n usage: {\n inputTokens: responseBody.usage?.prompt_tokens ?? undefined,\n outputTokens: responseBody.usage?.completion_tokens ?? undefined,\n totalTokens: responseBody.usage?.total_tokens ?? undefined,\n reasoningTokens:\n responseBody.usage?.completion_tokens_details?.reasoning_tokens ??\n undefined,\n cachedInputTokens: cacheReadTokens,\n },\n providerMetadata: {\n [this.providerOptionsName]: {\n promptCacheHitTokens: cacheReadTokens ?? null,\n promptCacheMissTokens:\n responseBody.usage?.prompt_cache_miss_tokens ?? null,\n ...(responseBody.object != null && {\n responseObject: responseBody.object,\n }),\n ...(choice.index != null && { choiceIndex: choice.index }),\n ...(choice.message.role != null && {\n messageRole: choice.message.role,\n }),\n ...(choice.message.tool_calls != null && {\n toolCallTypes: choice.message.tool_calls\n .map(toolCall => toolCall.type)\n .filter(type => type != null),\n }),\n ...(choice.logprobs != null && { logprobs: choice.logprobs }),\n ...(responseBody.system_fingerprint != null && {\n systemFingerprint: responseBody.system_fingerprint,\n }),\n },\n },\n request: { body: args },\n response: {\n ...getResponseMetadata(responseBody),\n headers: responseHeaders,\n body: rawResponse,\n },\n warnings,\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV2['doStream']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV2['doStream']>>> {\n const { args, warnings } = await this.getArgs({ ...options });\n\n const body = {\n ...args,\n stream: true,\n stream_options: { include_usage: true },\n };\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: this.config.url({\n path: '/chat/completions',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: this.failedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n deepseekChatChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n hasFinished: boolean;\n }> = [];\n\n let finishReason: LanguageModelV2FinishReason = 'unknown';\n let usage: DeepSeekChatTokenUsage | undefined = undefined;\n let systemFingerprint: string | undefined = undefined;\n let isFirstChunk = true;\n const providerOptionsName = this.providerOptionsName;\n let isActiveReasoning = false;\n let isActiveText = false;\n let responseObject: 'chat.completion.chunk' | undefined;\n let choiceIndex: number | undefined;\n let messageRole: 'assistant' | undefined;\n const toolCallTypes = new Map<number, 'function'>();\n const contentLogprobs: DeepSeekChatLogprob[] = [];\n const reasoningLogprobs: DeepSeekChatLogprob[] = [];\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<InferSchema<typeof deepseekChatChunkSchema>>,\n LanguageModelV2StreamPart\n >({\n start(controller) {\n controller.enqueue({ type: 'stream-start', warnings });\n },\n\n transform(chunk, controller) {\n // Emit raw chunk if requested (before anything else)\n if (options.includeRawChunks) {\n controller.enqueue({ type: 'raw', rawValue: chunk.rawValue });\n }\n\n // handle failed chunk parsing / validation:\n if (!chunk.success) {\n finishReason = 'error';\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n const value = chunk.value;\n\n // handle error chunks:\n if ('error' in value) {\n finishReason = 'error';\n controller.enqueue({ type: 'error', error: value.error.message });\n return;\n }\n\n if (isFirstChunk) {\n isFirstChunk = false;\n\n controller.enqueue({\n type: 'response-metadata',\n ...getResponseMetadata(value),\n });\n }\n\n if (value.usage != null) {\n usage = value.usage;\n }\n\n if (value.object != null) {\n responseObject = value.object;\n }\n\n // The fingerprint is repeated on stream chunks; keep the latest\n // non-null value in case it changes during the response.\n if (value.system_fingerprint != null) {\n systemFingerprint = value.system_fingerprint;\n }\n\n const choice = value.choices[0];\n\n if (choice?.index != null) {\n choiceIndex = choice.index;\n }\n\n if (choice?.finish_reason != null) {\n finishReason = mapDeepSeekFinishReason(choice.finish_reason);\n }\n\n if (choice?.logprobs?.content != null) {\n contentLogprobs.push(...choice.logprobs.content);\n }\n\n if (choice?.logprobs?.reasoning_content != null) {\n reasoningLogprobs.push(...choice.logprobs.reasoning_content);\n }\n\n if (choice?.delta == null) {\n return;\n }\n\n const delta = choice.delta;\n\n if (delta.role != null) {\n messageRole = delta.role;\n }\n\n // enqueue reasoning before text deltas:\n const reasoningContent = delta.reasoning_content;\n if (reasoningContent) {\n if (!isActiveReasoning) {\n controller.enqueue({\n type: 'reasoning-start',\n id: 'reasoning-0',\n });\n isActiveReasoning = true;\n }\n\n controller.enqueue({\n type: 'reasoning-delta',\n id: 'reasoning-0',\n delta: reasoningContent,\n });\n }\n\n if (delta.content) {\n if (!isActiveText) {\n controller.enqueue({ type: 'text-start', id: 'txt-0' });\n isActiveText = true;\n }\n\n // end reasoning when text starts:\n if (isActiveReasoning) {\n controller.enqueue({\n type: 'reasoning-end',\n id: 'reasoning-0',\n });\n isActiveReasoning = false;\n }\n\n controller.enqueue({\n type: 'text-delta',\n id: 'txt-0',\n delta: delta.content,\n });\n }\n\n if (delta.tool_calls != null && delta.tool_calls.length > 0) {\n // end reasoning when tool calls start:\n if (isActiveReasoning) {\n controller.enqueue({\n type: 'reasoning-end',\n id: 'reasoning-0',\n });\n isActiveReasoning = false;\n }\n\n for (const toolCallDelta of delta.tool_calls) {\n if (toolCallDelta.type != null) {\n toolCallTypes.set(toolCallDelta.index, toolCallDelta.type);\n }\n\n const index = toolCallDelta.index;\n\n if (toolCalls[index] == null) {\n if (toolCallDelta.id == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'id' to be a string.`,\n });\n }\n\n if (toolCallDelta.function?.name == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function.name' to be a string.`,\n });\n }\n\n controller.enqueue({\n type: 'tool-input-start',\n id: toolCallDelta.id,\n toolName: toolCallDelta.function.name,\n });\n\n toolCalls[index] = {\n id: toolCallDelta.id,\n type: 'function',\n function: {\n name: toolCallDelta.function.name,\n arguments: toolCallDelta.function.arguments ?? '',\n },\n hasFinished: false,\n };\n\n const toolCall = toolCalls[index];\n\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null\n ) {\n // send delta if the argument text has already started:\n if (toolCall.function.arguments.length > 0) {\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCall.function.arguments,\n });\n }\n\n // check if tool call is complete\n // (some providers send the full tool call in one chunk):\n if (isParsableJson(toolCall.function.arguments)) {\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n toolCall.hasFinished = true;\n }\n }\n\n continue;\n }\n\n // existing tool call, merge if not finished\n const toolCall = toolCalls[index];\n\n if (toolCall.hasFinished) {\n continue;\n }\n\n if (toolCallDelta.function?.arguments != null) {\n toolCall.function!.arguments +=\n toolCallDelta.function?.arguments ?? '';\n }\n\n // send delta\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCallDelta.function.arguments ?? '',\n });\n\n // check if tool call is complete\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null &&\n isParsableJson(toolCall.function.arguments)\n ) {\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n toolCall.hasFinished = true;\n }\n }\n }\n },\n\n flush(controller) {\n if (isActiveReasoning) {\n controller.enqueue({ type: 'reasoning-end', id: 'reasoning-0' });\n }\n\n if (isActiveText) {\n controller.enqueue({ type: 'text-end', id: 'txt-0' });\n }\n\n // go through all tool calls and send the ones that are not finished\n for (const toolCall of toolCalls.filter(\n toolCall => !toolCall.hasFinished,\n )) {\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n }\n\n const cacheReadTokens = getDeepSeekCacheReadTokens(usage);\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage: {\n inputTokens: usage?.prompt_tokens ?? undefined,\n outputTokens: usage?.completion_tokens ?? undefined,\n totalTokens: usage?.total_tokens ?? undefined,\n reasoningTokens:\n usage?.completion_tokens_details?.reasoning_tokens ??\n undefined,\n cachedInputTokens: cacheReadTokens,\n },\n providerMetadata: {\n [providerOptionsName]: {\n promptCacheHitTokens: cacheReadTokens ?? null,\n promptCacheMissTokens:\n usage?.prompt_cache_miss_tokens ?? null,\n ...(responseObject != null && { responseObject }),\n ...(choiceIndex != null && { choiceIndex }),\n ...(messageRole != null && { messageRole }),\n ...(toolCallTypes.size > 0 && {\n toolCallTypes: [...toolCallTypes.entries()]\n .sort(([left], [right]) => left - right)\n .map(([, type]) => type),\n }),\n ...((contentLogprobs.length > 0 ||\n reasoningLogprobs.length > 0) && {\n logprobs: {\n ...(contentLogprobs.length > 0 && {\n content: contentLogprobs,\n }),\n ...(reasoningLogprobs.length > 0 && {\n reasoning_content: reasoningLogprobs,\n }),\n },\n }),\n ...(systemFingerprint != null && { systemFingerprint }),\n },\n },\n });\n },\n }),\n ),\n request: { body },\n response: { headers: responseHeaders },\n };\n }\n}\n","import {\n InvalidPromptError,\n UnsupportedFunctionalityError,\n type LanguageModelV2CallOptions,\n type LanguageModelV2CallWarning,\n type LanguageModelV2Prompt,\n} from '@ai-sdk/provider';\nimport { convertToBase64, parseProviderOptions } from '@ai-sdk/provider-utils';\nimport type {\n DeepSeekChatPrompt,\n DeepSeekContentPart,\n} from './deepseek-chat-api-types';\nimport { deepseekAssistantMessageProviderOptions } from './deepseek-chat-options';\nimport { deepseekFilePartProviderOptions } from './deepseek-file-part-options';\nimport { isDeepSeekV4Model } from './is-deepseek-v4-model';\n\nconst supportedImageMediaTypes = new Set([\n 'image/gif',\n 'image/jpeg',\n 'image/jpg',\n 'image/png',\n 'image/webp',\n]);\n\nexport async function convertToDeepSeekChatMessages({\n prompt,\n responseFormat,\n modelId,\n providerOptionsName = 'deepseek',\n supportsAssistantPrefixCompletion = false,\n supportsStructuredOutputs = false,\n}: {\n prompt: LanguageModelV2Prompt;\n responseFormat: LanguageModelV2CallOptions['responseFormat'];\n modelId: string;\n providerOptionsName?: string;\n supportsAssistantPrefixCompletion?: boolean;\n supportsStructuredOutputs?: boolean;\n}): Promise<{\n messages: DeepSeekChatPrompt;\n warnings: Array<LanguageModelV2CallWarning>;\n}> {\n const isDeepSeekV4 = isDeepSeekV4Model(modelId);\n const messages: DeepSeekChatPrompt = [];\n const warnings: Array<LanguageModelV2CallWarning> = [];\n\n // Inject system message if response format is JSON\n if (responseFormat?.type === 'json') {\n if (responseFormat.schema == null) {\n messages.push({\n role: 'system',\n content: 'Return JSON.',\n });\n } else if (!supportsStructuredOutputs) {\n messages.push({\n role: 'system',\n content:\n 'Return JSON that conforms to the following schema: ' +\n JSON.stringify(responseFormat.schema),\n });\n }\n }\n\n // TODO use findLastIndex once we use ES2023\n let lastUserMessageIndex = -1;\n for (let i = prompt.length - 1; i >= 0; i--) {\n if (prompt[i].role === 'user') {\n lastUserMessageIndex = i;\n break;\n }\n }\n\n let index = -1;\n for (const { role, content, providerOptions } of prompt) {\n index++;\n\n // The assistant schema extends the common message schema, so one parse\n // validates names for every role and the assistant-only prefix option.\n const deepseekMessageOptions = await parseProviderOptions({\n provider: providerOptionsName,\n providerOptions,\n schema: deepseekAssistantMessageProviderOptions,\n });\n\n if (deepseekMessageOptions?.prefix === true && role !== 'assistant') {\n throw new InvalidPromptError({\n prompt,\n message:\n 'DeepSeek assistant prefix completion requires `prefix: true` on an assistant message.',\n });\n }\n\n switch (role) {\n case 'system': {\n messages.push({\n role: 'system',\n content,\n ...(deepseekMessageOptions?.name != null && {\n name: deepseekMessageOptions.name,\n }),\n });\n break;\n }\n\n case 'user': {\n const hasImagePart = content.some(\n part =>\n part.type === 'file' &&\n (part.mediaType === 'image' || part.mediaType.startsWith('image/')),\n );\n\n if (!hasImagePart) {\n let userContent = '';\n for (const part of content) {\n if (part.type === 'text') {\n userContent += part.text;\n } else {\n warnings.push({\n type: 'other',\n message: `Unsupported user message part type: ${part.type}`,\n });\n }\n }\n\n messages.push({\n role: 'user',\n content: userContent,\n ...(deepseekMessageOptions?.name != null && {\n name: deepseekMessageOptions.name,\n }),\n });\n break;\n }\n\n const userContent: Array<DeepSeekContentPart> = [];\n for (const part of content) {\n if (part.type === 'text') {\n userContent.push({ type: 'text', text: part.text });\n } else if (\n part.type === 'file' &&\n (part.mediaType === 'image' || part.mediaType.startsWith('image/'))\n ) {\n const filePartOptions = await parseProviderOptions({\n provider: providerOptionsName,\n providerOptions: part.providerOptions,\n schema: deepseekFilePartProviderOptions,\n });\n\n const resolvedMediaType =\n part.mediaType === 'image' || part.mediaType === 'image/*'\n ? 'image/jpeg'\n : part.mediaType;\n\n if (!supportedImageMediaTypes.has(resolvedMediaType)) {\n throw new UnsupportedFunctionalityError({\n functionality: `DeepSeek image media type ${resolvedMediaType}`,\n message:\n 'DeepSeek supports JPEG, PNG, GIF, and WebP image inputs.',\n });\n }\n\n if (part.data instanceof URL) {\n const url = part.data.toString();\n\n if (url.length > 8192) {\n throw new InvalidPromptError({\n prompt,\n message:\n 'DeepSeek image URLs must not exceed 8192 characters.',\n });\n }\n\n if (filePartOptions?.fileData === true) {\n throw new InvalidPromptError({\n prompt,\n message:\n 'DeepSeek `fileData` image parts require inline data, not a URL.',\n });\n }\n\n userContent.push({\n type: 'image_url',\n image_url: {\n url,\n ...(filePartOptions?.imageDetail != null && {\n detail: filePartOptions.imageDetail,\n }),\n },\n });\n } else {\n const dataUrl = `data:${\n resolvedMediaType === 'image/jpg'\n ? 'image/jpeg'\n : resolvedMediaType\n };base64,${convertToBase64(part.data)}`;\n\n if (filePartOptions?.fileData === true) {\n if (filePartOptions.imageDetail != null) {\n throw new InvalidPromptError({\n prompt,\n message:\n 'DeepSeek `imageDetail` cannot be combined with `fileData`.',\n });\n }\n\n userContent.push({\n type: 'file',\n file_data: dataUrl,\n ...(part.filename != null && { filename: part.filename }),\n });\n } else {\n userContent.push({\n type: 'image_url',\n image_url: {\n url: dataUrl,\n ...(filePartOptions?.imageDetail != null && {\n detail: filePartOptions.imageDetail,\n }),\n },\n });\n }\n }\n } else {\n warnings.push({\n type: 'other',\n message: `Unsupported user message part type: ${part.type}`,\n });\n }\n }\n\n messages.push({\n role: 'user',\n content: userContent,\n ...(deepseekMessageOptions?.name != null && {\n name: deepseekMessageOptions.name,\n }),\n });\n\n break;\n }\n case 'assistant': {\n if (deepseekMessageOptions?.prefix === true) {\n if (index !== prompt.length - 1) {\n throw new InvalidPromptError({\n prompt,\n message:\n 'DeepSeek assistant prefix completion requires the prefixed assistant message to be the final message.',\n });\n }\n\n if (!supportsAssistantPrefixCompletion) {\n throw new UnsupportedFunctionalityError({\n functionality: 'DeepSeek assistant prefix completion',\n message:\n 'DeepSeek assistant prefix completion requires a beta base URL ending in `/beta`.',\n });\n }\n }\n\n let text = '';\n let reasoning: string | undefined;\n\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n }> = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n text += part.text;\n break;\n }\n case 'reasoning': {\n // R1 must not receive prior reasoning; V4 requires it.\n if (index <= lastUserMessageIndex && !isDeepSeekV4) {\n break;\n }\n\n if (reasoning == null) {\n reasoning = part.text;\n } else {\n reasoning += part.text;\n }\n break;\n }\n case 'tool-call': {\n toolCalls.push({\n id: part.toolCallId,\n type: 'function',\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.input),\n },\n });\n break;\n }\n }\n }\n\n // V4 demands the field on every assistant turn — back-fill an empty\n // string when the source message had no reasoning part at all.\n messages.push({\n role: 'assistant',\n content: text,\n ...(deepseekMessageOptions?.name != null && {\n name: deepseekMessageOptions.name,\n }),\n ...(deepseekMessageOptions?.prefix === true && {\n prefix: true,\n }),\n reasoning_content: reasoning ?? (isDeepSeekV4 ? '' : undefined),\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n });\n\n break;\n }\n\n case 'tool': {\n if (deepseekMessageOptions?.name != null) {\n warnings.push({\n type: 'other',\n message:\n 'DeepSeek does not support message names on tool messages. The name has been omitted.',\n });\n }\n\n for (const toolResponse of content) {\n const output = toolResponse.output;\n\n let contentValue: string;\n switch (output.type) {\n case 'text':\n case 'error-text':\n contentValue = output.value;\n break;\n case 'content':\n case 'json':\n case 'error-json':\n contentValue = JSON.stringify(output.value);\n break;\n }\n\n messages.push({\n role: 'tool',\n tool_call_id: toolResponse.toolCallId,\n content: contentValue,\n });\n }\n break;\n }\n\n default: {\n warnings.push({\n type: 'other',\n message: `Unsupported message role: ${role}`,\n });\n break;\n }\n }\n }\n\n return { messages, warnings };\n}\n","import { z } from 'zod/v4';\n\n// https://api-docs.deepseek.com/quick_start/pricing\nexport type DeepSeekChatModelId =\n | 'deepseek-flash'\n | 'deepseek-v4-flash'\n | 'deepseek-v4-pro'\n | 'deepseek-v4-flash-vision-exp'\n // Retired aliases remain assignable through the string escape hatch, but are\n // intentionally omitted from first-class editor suggestions.\n | (string & {});\n\nexport const deepseekChatOptions = z.object({\n /**\n * Whether to return log probabilities for generated tokens.\n */\n logprobs: z.boolean().optional(),\n\n /**\n * Number of most likely tokens to return at each token position.\n *\n * Setting this option automatically enables `logprobs`.\n */\n topLogprobs: z.number().int().min(0).max(20).optional(),\n\n /**\n * An opaque identifier for the end user. DeepSeek uses this identifier for\n * content-safety tracing and request isolation.\n *\n * Must contain only ASCII letters, numbers, underscores, and hyphens, and\n * must be at most 512 characters long.\n */\n userId: z\n .string()\n .regex(/^[a-zA-Z0-9_-]+$/, 'userId must match /^[a-zA-Z0-9_-]+$/')\n .max(512, 'userId must be at most 512 characters long')\n .optional(),\n\n /**\n * Type of thinking to use. Defaults to `enabled`.\n */\n thinking: z\n .object({\n // `adaptive` is accepted at runtime for backwards compatibility and\n // mapped to `enabled`, but is intentionally excluded from the exported\n // provider options type.\n type: z.enum(['adaptive', 'enabled', 'disabled']).optional(),\n })\n .optional(),\n\n /**\n * Controls the thinking strength for DeepSeek V4 reasoning models.\n */\n // `medium` and `xhigh` are accepted at runtime for backwards compatibility\n // and mapped to canonical DeepSeek values, but are intentionally excluded\n // from the exported provider options type.\n reasoningEffort: z.enum(['low', 'medium', 'high', 'xhigh', 'max']).optional(),\n\n /**\n * Whether to use strict JSON schema validation for structured outputs.\n * Only applies when the serving endpoint supports JSON schema response\n * formats (e.g. Azure). Defaults to `true`.\n */\n strictJsonSchema: z.boolean().optional(),\n});\n\nexport type DeepSeekChatOptions = {\n /**\n * Whether to return log probabilities for generated tokens.\n */\n logprobs?: boolean;\n\n /**\n * Number of most likely tokens to return at each token position.\n *\n * Setting this option automatically enables `logprobs`.\n */\n topLogprobs?: number;\n\n /**\n * An opaque identifier for the end user. DeepSeek uses this identifier for\n * content-safety tracing and request isolation.\n *\n * Must contain only ASCII letters, numbers, underscores, and hyphens, and\n * must be at most 512 characters long.\n */\n userId?: string;\n\n /**\n * Controls whether thinking mode is enabled. Defaults to `enabled`.\n */\n thinking?: {\n type?: 'enabled' | 'disabled';\n };\n\n /**\n * Controls the thinking strength for DeepSeek V4 reasoning models.\n */\n reasoningEffort?: 'low' | 'high' | 'max';\n\n /**\n * Whether to use strict JSON schema validation for structured outputs.\n * Only applies when the serving endpoint supports JSON schema response\n * formats (e.g. Azure). Defaults to `true`.\n */\n strictJsonSchema?: boolean;\n};\n\nexport const deepseekMessageProviderOptions = z.object({\n /**\n * The name of the participant represented by the message.\n *\n * Supported on system, user, and assistant messages.\n */\n name: z.string().optional(),\n});\n\nexport type DeepSeekMessageProviderOptions = z.infer<\n typeof deepseekMessageProviderOptions\n>;\n\nexport const deepseekAssistantMessageProviderOptions =\n deepseekMessageProviderOptions.extend({\n /**\n * Whether the assistant message content is a prefix that DeepSeek should\n * continue. This beta feature is only supported on the final assistant\n * message when using a beta base URL.\n */\n prefix: z.literal(true).optional(),\n });\n\nexport type DeepSeekAssistantMessageProviderOptions = z.infer<\n typeof deepseekAssistantMessageProviderOptions\n>;\n","import { z } from 'zod/v4';\n\nexport const deepseekFilePartProviderOptions = z.object({\n /**\n * Controls how DeepSeek processes an image sent as an `image_url` part.\n *\n * @see https://api-docs.deepseek.com/api/create-chat-completion/\n */\n imageDetail: z.enum(['low', 'high', 'original', 'auto']).optional(),\n\n /**\n * Sends inline image data as a DeepSeek `file` part using `file_data`\n * instead of an `image_url` data URL. When set, the file part's filename\n * is preserved.\n *\n * This option only applies to inline image data. It cannot be combined\n * with `imageDetail`.\n */\n fileData: z.literal(true).optional(),\n});\n\nexport type DeepSeekFilePartProviderOptions = z.infer<\n typeof deepseekFilePartProviderOptions\n>;\n","/**\n * Whether a model id is a DeepSeek V4-generation model (thinking mode on by\n * default, `reasoning_content` required on every assistant turn).\n *\n * DeepSeek publishes V4 models under both versioned ids (`deepseek-v4-pro`,\n * `deepseek-v4-flash-*`) and unversioned aliases (`deepseek-flash`, currently\n * serving V4.1 Flash). Only the legacy `deepseek-chat` / `deepseek-reasoner`\n * ids predate V4.\n */\nexport function isDeepSeekV4Model(modelId: string): boolean {\n return (\n modelId.includes('deepseek-v4') ||\n modelId.startsWith('deepseek-flash') ||\n modelId.startsWith('deepseek-pro')\n );\n}\n","import { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport type DeepSeekChatPrompt = Array<DeepSeekMessage>;\n\nexport type DeepSeekMessage =\n | DeepSeekSystemMessage\n | DeepSeekUserMessage\n | DeepSeekAssistantMessage\n | DeepSeekToolMessage;\n\nexport interface DeepSeekSystemMessage {\n role: 'system';\n content: string;\n name?: string;\n}\n\nexport interface DeepSeekUserMessage {\n role: 'user';\n content: string | Array<DeepSeekContentPart>;\n name?: string;\n}\n\nexport type DeepSeekContentPart =\n | DeepSeekContentPartText\n | DeepSeekContentPartImage\n | DeepSeekContentPartFile;\n\nexport interface DeepSeekContentPartText {\n type: 'text';\n text: string;\n}\n\nexport interface DeepSeekContentPartImage {\n type: 'image_url';\n image_url: {\n url: string;\n detail?: 'low' | 'high' | 'original' | 'auto';\n };\n}\n\nexport interface DeepSeekContentPartFile {\n type: 'file';\n file_data: string;\n filename?: string;\n}\nexport interface DeepSeekAssistantMessage {\n role: 'assistant';\n content?: string | null;\n name?: string;\n prefix?: true;\n reasoning_content?: string;\n tool_calls?: Array<DeepSeekMessageToolCall>;\n}\n\nexport interface DeepSeekMessageToolCall {\n type: 'function';\n id: string;\n function: {\n arguments: string;\n name: string;\n };\n}\n\nexport interface DeepSeekToolMessage {\n role: 'tool';\n content: string;\n tool_call_id: string;\n}\n\nconst tokenUsageSchema = z\n .object({\n prompt_tokens: z.number().nullish(),\n completion_tokens: z.number().nullish(),\n prompt_cache_hit_tokens: z.number().nullish(),\n prompt_cache_miss_tokens: z.number().nullish(),\n total_tokens: z.number().nullish(),\n prompt_tokens_details: z\n .object({\n cached_tokens: z.number().nullish(),\n })\n .nullish(),\n completion_tokens_details: z\n .object({\n reasoning_tokens: z.number().nullish(),\n })\n .nullish(),\n })\n .nullish();\n\nexport type DeepSeekChatTokenUsage = z.infer<typeof tokenUsageSchema>;\n\nexport const deepSeekErrorSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string().nullish(),\n param: z.any().nullish(),\n code: z.union([z.string(), z.number()]).nullish(),\n }),\n});\n\nexport type DeepSeekErrorData = z.infer<typeof deepSeekErrorSchema>;\n\nconst deepseekChatLogprobSchema = z.object({\n token: z.string(),\n logprob: z.number(),\n bytes: z.array(z.number()).nullable(),\n top_logprobs: z.array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n bytes: z.array(z.number()).nullable(),\n }),\n ),\n});\n\nconst deepseekChatLogprobsSchema = z\n .object({\n content: z.array(deepseekChatLogprobSchema).nullish(),\n reasoning_content: z.array(deepseekChatLogprobSchema).nullish(),\n })\n .nullish();\n\nexport type DeepSeekChatLogprob = z.infer<typeof deepseekChatLogprobSchema>;\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nexport const deepseekChatResponseSchema = z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n object: z.literal('chat.completion').nullish(),\n system_fingerprint: z.string().nullish(),\n choices: z.array(\n z.object({\n index: z.number().nullish(),\n message: z.object({\n role: z.literal('assistant').nullish(),\n content: z.string().nullish(),\n reasoning_content: z.string().nullish(),\n tool_calls: z\n .array(\n z.object({\n id: z.string().nullish(),\n type: z.literal('function').nullish(),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .nullish(),\n }),\n logprobs: deepseekChatLogprobsSchema,\n finish_reason: z.string().nullish(),\n }),\n ),\n usage: tokenUsageSchema,\n});\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nexport const deepseekChatChunkSchema = lazySchema(() =>\n zodSchema(\n z.union([\n z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n object: z.literal('chat.completion.chunk').nullish(),\n system_fingerprint: z.string().nullish(),\n choices: z.array(\n z.object({\n index: z.number().nullish(),\n delta: z\n .object({\n role: z.enum(['assistant']).nullish(),\n content: z.string().nullish(),\n reasoning_content: z.string().nullish(),\n tool_calls: z\n .array(\n z.object({\n index: z.number(),\n id: z.string().nullish(),\n type: z.literal('function').nullish(),\n function: z.object({\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n }),\n }),\n )\n .nullish(),\n })\n .nullish(),\n logprobs: deepseekChatLogprobsSchema,\n finish_reason: z.string().nullish(),\n }),\n ),\n usage: tokenUsageSchema,\n }),\n deepSeekErrorSchema,\n ]),\n ),\n);\n","import {\n type LanguageModelV2CallOptions,\n type LanguageModelV2CallWarning,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\n\nexport function prepareTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV2CallOptions['tools'];\n toolChoice?: LanguageModelV2CallOptions['toolChoice'];\n}): {\n tools:\n | undefined\n | Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }>;\n toolChoice:\n | { type: 'function'; function: { name: string } }\n | 'auto'\n | 'none'\n | 'required'\n | undefined;\n toolWarnings: LanguageModelV2CallWarning[];\n} {\n // when the tools array is empty, change it to undefined to prevent errors:\n tools = tools?.length ? tools : undefined;\n\n const toolWarnings: LanguageModelV2CallWarning[] = [];\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined, toolWarnings };\n }\n\n const deepseekTools: Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }> = [];\n\n for (const tool of tools) {\n if (tool.type === 'provider-defined') {\n toolWarnings.push({\n type: 'unsupported-tool',\n tool,\n });\n } else {\n deepseekTools.push({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: deepseekTools, toolChoice: undefined, toolWarnings };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n case 'none':\n case 'required':\n return { tools: deepseekTools, toolChoice: type, toolWarnings };\n case 'tool':\n return {\n tools: deepseekTools,\n toolChoice: {\n type: 'function',\n function: { name: toolChoice.toolName },\n },\n toolWarnings,\n };\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `tool choice type: ${_exhaustiveCheck}`,\n });\n }\n }\n}\n","export function getResponseMetadata({\n id,\n model,\n created,\n}: {\n id?: string | undefined | null;\n created?: number | undefined | null;\n model?: string | undefined | null;\n}) {\n return {\n id: id ?? undefined,\n modelId: model ?? undefined,\n timestamp: created != null ? new Date(created * 1000) : undefined,\n };\n}\n","import type { LanguageModelV2FinishReason } from '@ai-sdk/provider';\n\nexport function mapDeepSeekFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV2FinishReason {\n switch (finishReason) {\n case 'stop':\n return 'stop';\n case 'length':\n return 'length';\n case 'content_filter':\n return 'content-filter';\n case 'tool_calls':\n return 'tool-calls';\n case 'insufficient_system_resource':\n return 'error';\n default:\n return 'unknown';\n }\n}\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":["import_provider","import_provider_utils","import_provider","import_provider_utils","import_v4","userContent","import_provider_utils","import_v4","import_provider","toolCall"]}
|
package/dist/index.mjs
CHANGED
|
@@ -399,6 +399,9 @@ var tokenUsageSchema = z3.object({
|
|
|
399
399
|
prompt_cache_hit_tokens: z3.number().nullish(),
|
|
400
400
|
prompt_cache_miss_tokens: z3.number().nullish(),
|
|
401
401
|
total_tokens: z3.number().nullish(),
|
|
402
|
+
prompt_tokens_details: z3.object({
|
|
403
|
+
cached_tokens: z3.number().nullish()
|
|
404
|
+
}).nullish(),
|
|
402
405
|
completion_tokens_details: z3.object({
|
|
403
406
|
reasoning_tokens: z3.number().nullish()
|
|
404
407
|
}).nullish()
|
|
@@ -586,6 +589,10 @@ function mapDeepSeekFinishReason(finishReason) {
|
|
|
586
589
|
}
|
|
587
590
|
|
|
588
591
|
// src/chat/deepseek-chat-language-model.ts
|
|
592
|
+
function getDeepSeekCacheReadTokens(usage) {
|
|
593
|
+
var _a, _b, _c;
|
|
594
|
+
return (_c = (_b = usage == null ? void 0 : usage.prompt_cache_hit_tokens) != null ? _b : (_a = usage == null ? void 0 : usage.prompt_tokens_details) == null ? void 0 : _a.cached_tokens) != null ? _c : void 0;
|
|
595
|
+
}
|
|
589
596
|
function mapDeepSeekProviderReasoningEffort({
|
|
590
597
|
reasoningEffort,
|
|
591
598
|
warnings
|
|
@@ -741,7 +748,7 @@ var DeepSeekChatLanguageModel = class {
|
|
|
741
748
|
};
|
|
742
749
|
}
|
|
743
750
|
async doGenerate(options) {
|
|
744
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l
|
|
751
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
|
|
745
752
|
const { args, warnings } = await this.getArgs({ ...options });
|
|
746
753
|
const {
|
|
747
754
|
responseHeaders,
|
|
@@ -784,6 +791,7 @@ var DeepSeekChatLanguageModel = class {
|
|
|
784
791
|
if (text != null && text.length > 0) {
|
|
785
792
|
content.push({ type: "text", text });
|
|
786
793
|
}
|
|
794
|
+
const cacheReadTokens = getDeepSeekCacheReadTokens(responseBody.usage);
|
|
787
795
|
return {
|
|
788
796
|
content,
|
|
789
797
|
finishReason: mapDeepSeekFinishReason(choice.finish_reason),
|
|
@@ -792,12 +800,12 @@ var DeepSeekChatLanguageModel = class {
|
|
|
792
800
|
outputTokens: (_e = (_d = responseBody.usage) == null ? void 0 : _d.completion_tokens) != null ? _e : void 0,
|
|
793
801
|
totalTokens: (_g = (_f = responseBody.usage) == null ? void 0 : _f.total_tokens) != null ? _g : void 0,
|
|
794
802
|
reasoningTokens: (_j = (_i = (_h = responseBody.usage) == null ? void 0 : _h.completion_tokens_details) == null ? void 0 : _i.reasoning_tokens) != null ? _j : void 0,
|
|
795
|
-
cachedInputTokens:
|
|
803
|
+
cachedInputTokens: cacheReadTokens
|
|
796
804
|
},
|
|
797
805
|
providerMetadata: {
|
|
798
806
|
[this.providerOptionsName]: {
|
|
799
|
-
promptCacheHitTokens:
|
|
800
|
-
promptCacheMissTokens: (
|
|
807
|
+
promptCacheHitTokens: cacheReadTokens != null ? cacheReadTokens : null,
|
|
808
|
+
promptCacheMissTokens: (_l = (_k = responseBody.usage) == null ? void 0 : _k.prompt_cache_miss_tokens) != null ? _l : null,
|
|
801
809
|
...responseBody.object != null && {
|
|
802
810
|
responseObject: responseBody.object
|
|
803
811
|
},
|
|
@@ -1043,7 +1051,7 @@ var DeepSeekChatLanguageModel = class {
|
|
|
1043
1051
|
}
|
|
1044
1052
|
},
|
|
1045
1053
|
flush(controller) {
|
|
1046
|
-
var _a, _b, _c, _d, _e, _f, _g
|
|
1054
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
1047
1055
|
if (isActiveReasoning) {
|
|
1048
1056
|
controller.enqueue({ type: "reasoning-end", id: "reasoning-0" });
|
|
1049
1057
|
}
|
|
@@ -1064,6 +1072,7 @@ var DeepSeekChatLanguageModel = class {
|
|
|
1064
1072
|
input: toolCall.function.arguments
|
|
1065
1073
|
});
|
|
1066
1074
|
}
|
|
1075
|
+
const cacheReadTokens = getDeepSeekCacheReadTokens(usage);
|
|
1067
1076
|
controller.enqueue({
|
|
1068
1077
|
type: "finish",
|
|
1069
1078
|
finishReason,
|
|
@@ -1072,12 +1081,12 @@ var DeepSeekChatLanguageModel = class {
|
|
|
1072
1081
|
outputTokens: (_c = usage == null ? void 0 : usage.completion_tokens) != null ? _c : void 0,
|
|
1073
1082
|
totalTokens: (_d = usage == null ? void 0 : usage.total_tokens) != null ? _d : void 0,
|
|
1074
1083
|
reasoningTokens: (_f = (_e = usage == null ? void 0 : usage.completion_tokens_details) == null ? void 0 : _e.reasoning_tokens) != null ? _f : void 0,
|
|
1075
|
-
cachedInputTokens:
|
|
1084
|
+
cachedInputTokens: cacheReadTokens
|
|
1076
1085
|
},
|
|
1077
1086
|
providerMetadata: {
|
|
1078
1087
|
[providerOptionsName]: {
|
|
1079
|
-
promptCacheHitTokens:
|
|
1080
|
-
promptCacheMissTokens: (
|
|
1088
|
+
promptCacheHitTokens: cacheReadTokens != null ? cacheReadTokens : null,
|
|
1089
|
+
promptCacheMissTokens: (_g = usage == null ? void 0 : usage.prompt_cache_miss_tokens) != null ? _g : null,
|
|
1081
1090
|
...responseObject != null && { responseObject },
|
|
1082
1091
|
...choiceIndex != null && { choiceIndex },
|
|
1083
1092
|
...messageRole != null && { messageRole },
|
|
@@ -1108,7 +1117,7 @@ var DeepSeekChatLanguageModel = class {
|
|
|
1108
1117
|
};
|
|
1109
1118
|
|
|
1110
1119
|
// src/version.ts
|
|
1111
|
-
var VERSION = true ? "1.0.
|
|
1120
|
+
var VERSION = true ? "1.0.61" : "0.0.0-test";
|
|
1112
1121
|
|
|
1113
1122
|
// src/deepseek-provider.ts
|
|
1114
1123
|
function createDeepSeek(options = {}) {
|