@ai-sdk/moonshotai 2.0.46 → 2.0.48

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 CHANGED
@@ -1,5 +1,18 @@
1
1
  # @ai-sdk/moonshotai
2
2
 
3
+ ## 2.0.48
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [2d172fb]
8
+ - @ai-sdk/provider-utils@4.0.47
9
+
10
+ ## 2.0.47
11
+
12
+ ### Patch Changes
13
+
14
+ - c01944c: feat(provider/moonshotai): normalize tool schemas for Moonshot's MFJS validator. Tuple `items` arrays become `prefixItems`, `type` next to `anyOf` moves into the branches, and non-`object` root schemas fail with a clear client-side error instead of Moonshot's opaque 400. Everything else passes through unchanged; the original schema is still used for AI SDK result validation.
15
+
3
16
  ## 2.0.46
4
17
 
5
18
  ### Patch Changes
package/dist/index.js CHANGED
@@ -26,11 +26,11 @@ __export(index_exports, {
26
26
  module.exports = __toCommonJS(index_exports);
27
27
 
28
28
  // src/moonshotai-provider.ts
29
- var import_provider4 = require("@ai-sdk/provider");
29
+ var import_provider5 = require("@ai-sdk/provider");
30
30
  var import_provider_utils4 = require("@ai-sdk/provider-utils");
31
31
 
32
32
  // src/moonshotai-chat-language-model.ts
33
- var import_provider3 = require("@ai-sdk/provider");
33
+ var import_provider4 = require("@ai-sdk/provider");
34
34
  var import_provider_utils3 = require("@ai-sdk/provider-utils");
35
35
 
36
36
  // src/convert-to-moonshotai-chat-messages.ts
@@ -347,7 +347,92 @@ function getModelThinkingKeepSupport(modelId) {
347
347
  }
348
348
 
349
349
  // src/moonshotai-prepare-tools.ts
350
+ var import_provider3 = require("@ai-sdk/provider");
351
+
352
+ // src/normalize-json-schema-for-mfjs.ts
350
353
  var import_provider2 = require("@ai-sdk/provider");
354
+ function isRecord(value) {
355
+ return typeof value === "object" && value !== null && !Array.isArray(value);
356
+ }
357
+ var SCHEMA_ARRAY_KEYS = ["allOf", "anyOf", "oneOf", "prefixItems"];
358
+ var SCHEMA_MAP_KEYS = [
359
+ "properties",
360
+ "patternProperties",
361
+ "$defs",
362
+ "dependentSchemas"
363
+ ];
364
+ var SCHEMA_SINGLE_KEYS = [
365
+ "additionalProperties",
366
+ "propertyNames",
367
+ "items",
368
+ "contains",
369
+ "not",
370
+ "if",
371
+ "then",
372
+ "else"
373
+ ];
374
+ function normalizeJsonSchemaForMFJS(schema) {
375
+ return normalizeDefinition(schema, true);
376
+ }
377
+ function normalizeDefinition(definition, isRoot) {
378
+ if (typeof definition === "boolean" || !isRecord(definition)) {
379
+ if (isRoot) {
380
+ throw new import_provider2.UnsupportedFunctionalityError({
381
+ functionality: 'tool parameters must be a JSON Schema object with type "object" for moonshotai (MFJS)'
382
+ });
383
+ }
384
+ return definition;
385
+ }
386
+ if (isRoot && definition.type !== "object") {
387
+ throw new import_provider2.UnsupportedFunctionalityError({
388
+ functionality: 'tool parameters must be a JSON Schema object with type "object" for moonshotai (MFJS)'
389
+ });
390
+ }
391
+ const result = { ...definition };
392
+ if (Array.isArray(result.items)) {
393
+ const tuple = result.items;
394
+ result.prefixItems = [
395
+ ...Array.isArray(result.prefixItems) ? result.prefixItems : [],
396
+ ...tuple.map((item) => normalizeDefinition(item, false))
397
+ ];
398
+ delete result.items;
399
+ } else if (isRecord(result.items)) {
400
+ result.items = normalizeDefinition(result.items, false);
401
+ }
402
+ if (typeof result.type === "string" && Array.isArray(result.anyOf)) {
403
+ const parentType = result.type;
404
+ delete result.type;
405
+ result.anyOf = result.anyOf.map(
406
+ (branch) => isRecord(branch) && branch.type == null ? { type: parentType, ...branch } : branch
407
+ );
408
+ }
409
+ for (const key of SCHEMA_ARRAY_KEYS) {
410
+ const value = result[key];
411
+ if (Array.isArray(value)) {
412
+ result[key] = value.map((item) => normalizeDefinition(item, false));
413
+ }
414
+ }
415
+ for (const key of SCHEMA_MAP_KEYS) {
416
+ const value = result[key];
417
+ if (isRecord(value)) {
418
+ result[key] = Object.fromEntries(
419
+ Object.entries(value).map(([k, v]) => [
420
+ k,
421
+ normalizeDefinition(v, false)
422
+ ])
423
+ );
424
+ }
425
+ }
426
+ for (const key of SCHEMA_SINGLE_KEYS) {
427
+ const value = result[key];
428
+ if (isRecord(value) || typeof value === "boolean") {
429
+ result[key] = normalizeDefinition(value, false);
430
+ }
431
+ }
432
+ return result;
433
+ }
434
+
435
+ // src/moonshotai-prepare-tools.ts
351
436
  function prepareTools({
352
437
  tools,
353
438
  toolChoice
@@ -370,7 +455,7 @@ function prepareTools({
370
455
  function: {
371
456
  name: tool.name,
372
457
  description: tool.description,
373
- parameters: tool.inputSchema,
458
+ parameters: normalizeJsonSchemaForMFJS(tool.inputSchema),
374
459
  ...tool.strict != null ? { strict: tool.strict } : {}
375
460
  }
376
461
  });
@@ -396,7 +481,7 @@ function prepareTools({
396
481
  };
397
482
  default: {
398
483
  const _exhaustiveCheck = type;
399
- throw new import_provider2.UnsupportedFunctionalityError({
484
+ throw new import_provider3.UnsupportedFunctionalityError({
400
485
  functionality: `tool choice type: ${_exhaustiveCheck}`
401
486
  });
402
487
  }
@@ -704,13 +789,13 @@ var MoonshotAIChatLanguageModel = class {
704
789
  const index = toolCallDelta.index;
705
790
  if (toolCalls[index] == null) {
706
791
  if (toolCallDelta.id == null) {
707
- throw new import_provider3.InvalidResponseDataError({
792
+ throw new import_provider4.InvalidResponseDataError({
708
793
  data: toolCallDelta,
709
794
  message: `Expected 'id' to be a string.`
710
795
  });
711
796
  }
712
797
  if (((_a2 = toolCallDelta.function) == null ? void 0 : _a2.name) == null) {
713
- throw new import_provider3.InvalidResponseDataError({
798
+ throw new import_provider4.InvalidResponseDataError({
714
799
  data: toolCallDelta,
715
800
  message: `Expected 'function.name' to be a string.`
716
801
  });
@@ -790,7 +875,7 @@ var MoonshotAIChatLanguageModel = class {
790
875
  };
791
876
 
792
877
  // src/version.ts
793
- var VERSION = true ? "2.0.46" : "0.0.0-test";
878
+ var VERSION = true ? "2.0.48" : "0.0.0-test";
794
879
 
795
880
  // src/moonshotai-provider.ts
796
881
  var defaultBaseURL = "https://api.moonshot.ai/v1";
@@ -827,10 +912,10 @@ function createMoonshotAI(options = {}) {
827
912
  provider.chatModel = createChatModel;
828
913
  provider.languageModel = createChatModel;
829
914
  provider.embeddingModel = (modelId) => {
830
- throw new import_provider4.NoSuchModelError({ modelId, modelType: "embeddingModel" });
915
+ throw new import_provider5.NoSuchModelError({ modelId, modelType: "embeddingModel" });
831
916
  };
832
917
  provider.imageModel = (modelId) => {
833
- throw new import_provider4.NoSuchModelError({ modelId, modelType: "imageModel" });
918
+ throw new import_provider5.NoSuchModelError({ modelId, modelType: "imageModel" });
834
919
  };
835
920
  return provider;
836
921
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/moonshotai-provider.ts","../src/moonshotai-chat-language-model.ts","../src/convert-to-moonshotai-chat-messages.ts","../src/convert-moonshotai-chat-usage.ts","../src/get-response-metadata.ts","../src/map-moonshotai-finish-reason.ts","../src/moonshotai-chat-api-types.ts","../src/moonshotai-chat-options.ts","../src/moonshotai-prepare-tools.ts","../src/version.ts"],"sourcesContent":["export { createMoonshotAI, moonshotai } from './moonshotai-provider';\nexport type {\n MoonshotAIProvider,\n MoonshotAIProviderSettings,\n} from './moonshotai-provider';\nexport type {\n MoonshotAIChatModelId,\n MoonshotAILanguageModelOptions,\n /** @deprecated Use `MoonshotAILanguageModelOptions` instead. */\n MoonshotAILanguageModelOptions as MoonshotAIProviderOptions,\n} from './moonshotai-chat-options';\n","import {\n NoSuchModelError,\n type LanguageModelV3,\n type ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { MoonshotAIChatLanguageModel } from './moonshotai-chat-language-model';\nimport type { MoonshotAIChatModelId } from './moonshotai-chat-options';\nimport { VERSION } from './version';\n\nexport type { MoonshotAIErrorData } from './moonshotai-chat-api-types';\n\nexport interface MoonshotAIProviderSettings {\n /**\n * Moonshot API key. Default value is taken from the `MOONSHOT_API_KEY`\n * environment variable.\n */\n apiKey?: string;\n /**\n * Base URL for the API calls.\n */\n baseURL?: string;\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\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 MoonshotAIProvider extends ProviderV3 {\n /**\n * Creates a model for text generation.\n */\n (modelId: MoonshotAIChatModelId): LanguageModelV3;\n\n /**\n * Creates a chat model for text generation.\n */\n chatModel(modelId: MoonshotAIChatModelId): LanguageModelV3;\n\n /**\n * Creates a language model for text generation.\n */\n languageModel(modelId: MoonshotAIChatModelId): LanguageModelV3;\n}\n\nconst defaultBaseURL = 'https://api.moonshot.ai/v1';\n\nexport function getModelStructuredOutputSupport(\n modelId: MoonshotAIChatModelId,\n): boolean {\n if (modelId.startsWith('kimi-k')) return true;\n return false;\n}\n\nexport function createMoonshotAI(\n options: MoonshotAIProviderSettings = {},\n): MoonshotAIProvider {\n const baseURL = withoutTrailingSlash(options.baseURL ?? defaultBaseURL);\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'MOONSHOT_API_KEY',\n description: 'Moonshot API key',\n })}`,\n ...options.headers,\n },\n `ai-sdk/moonshotai/${VERSION}`,\n );\n\n const createChatModel = (modelId: MoonshotAIChatModelId) => {\n return new MoonshotAIChatLanguageModel(modelId, {\n provider: 'moonshotai.chat',\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n includeUsage: true,\n supportsStructuredOutputs: getModelStructuredOutputSupport(modelId),\n });\n };\n\n const provider = (modelId: MoonshotAIChatModelId) => createChatModel(modelId);\n\n provider.specificationVersion = 'v3' as const;\n provider.chatModel = createChatModel;\n provider.languageModel = createChatModel;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\nexport const moonshotai = createMoonshotAI();\n","import {\n InvalidResponseDataError,\n type APICallError,\n type LanguageModelV3,\n type LanguageModelV3CallOptions,\n type LanguageModelV3Content,\n type LanguageModelV3FinishReason,\n type LanguageModelV3GenerateResult,\n type LanguageModelV3StreamPart,\n type LanguageModelV3StreamResult,\n type SharedV3Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n generateId,\n parseProviderOptions,\n postJsonToApi,\n type FetchFunction,\n type InferSchema,\n type ParseResult,\n type ResponseHandler,\n} from '@ai-sdk/provider-utils';\nimport { convertToMoonshotAIChatMessages } from './convert-to-moonshotai-chat-messages';\nimport { convertMoonshotAIChatUsage } from './convert-moonshotai-chat-usage';\nimport { getResponseMetadata } from './get-response-metadata';\nimport { mapMoonshotAIFinishReason } from './map-moonshotai-finish-reason';\nimport {\n moonshotAIChatChunkSchema,\n moonshotAIChatResponseSchema,\n moonshotAIErrorSchema,\n type MoonshotAIChatTokenUsage,\n} from './moonshotai-chat-api-types';\nimport {\n getModelThinkingKeepSupport,\n moonshotaiLanguageModelOptions,\n type MoonshotAIChatModelId,\n} from './moonshotai-chat-options';\nimport { prepareTools } from './moonshotai-prepare-tools';\n\nexport type MoonshotAIChatConfig = {\n provider: string;\n headers?: () => Record<string, string | undefined>;\n url: (options: { modelId: string; path: string }) => string;\n fetch?: FetchFunction;\n includeUsage?: boolean;\n supportsStructuredOutputs?: boolean;\n};\n\nexport class MoonshotAIChatLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = 'v3';\n\n readonly modelId: MoonshotAIChatModelId;\n\n // Moonshot AI does not fetch external URLs; the AI SDK downloads and\n // inlines URL file parts instead. ms:// file references from the Moonshot\n // Files API are passed through natively.\n readonly supportedUrls = {\n 'image/*': [/^ms:\\/\\//],\n 'video/*': [/^ms:\\/\\//],\n };\n\n private readonly config: MoonshotAIChatConfig;\n private readonly failedResponseHandler: ResponseHandler<APICallError>;\n\n constructor(modelId: MoonshotAIChatModelId, config: MoonshotAIChatConfig) {\n this.modelId = modelId;\n this.config = config;\n\n this.failedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: moonshotAIErrorSchema,\n errorToMessage: error => 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 seed,\n toolChoice,\n tools,\n }: LanguageModelV3CallOptions) {\n const moonshotOptions =\n (await parseProviderOptions({\n provider: this.providerOptionsName,\n providerOptions,\n schema: moonshotaiLanguageModelOptions,\n })) ?? {};\n\n const messages = convertToMoonshotAIChatMessages(prompt);\n\n const allWarnings: SharedV3Warning[] = [];\n if (topK != null) {\n allWarnings.push({ type: 'unsupported', feature: 'topK' });\n }\n if (seed != null) {\n allWarnings.push({ type: 'unsupported', feature: 'seed' });\n }\n\n const {\n tools: moonshotTools,\n toolChoice: moonshotToolChoice,\n toolWarnings,\n } = prepareTools({ tools, toolChoice });\n\n // Thinking is configured through explicit provider options only.\n const thinking = moonshotOptions.thinking;\n\n // Moonshot has no reasoning_history field; the API silently ignores it\n // (verified against the live API). Preserved Thinking maps to\n // thinking.keep, which only accepts 'all' and only on some models\n // (verified: k2.6, k2.7-code, k3 accept it; k2.5 rejects it). Other\n // reasoningHistory values use the server default.\n let keep: 'all' | undefined;\n if (moonshotOptions.reasoningHistory === 'preserved') {\n if (getModelThinkingKeepSupport(this.modelId)) {\n keep = 'all';\n } else {\n allWarnings.push({\n type: 'unsupported',\n feature: `reasoningHistory 'preserved' is not supported by model \"${this.modelId}\"`,\n });\n }\n }\n\n let response_format: Record<string, unknown> | undefined;\n if (responseFormat?.type === 'json') {\n if (\n this.config.supportsStructuredOutputs === true &&\n responseFormat.schema != null\n ) {\n // kimi-k2.5 produces nonsensical output when the top-level `$schema`\n // keyword injected by the AI SDK is present, even though it otherwise\n // supports structured outputs. Strip it from the schema sent to\n // Moonshot; the full original schema is still used for result\n // validation.\n const { $schema: _$schema, ...schemaWithoutDollarSchema } =\n responseFormat.schema;\n response_format = {\n type: 'json_schema',\n json_schema: {\n name: responseFormat.name ?? 'response',\n schema: schemaWithoutDollarSchema,\n ...(responseFormat.description != null && {\n description: responseFormat.description,\n }),\n },\n };\n } else {\n response_format = { type: 'json_object' };\n }\n }\n\n return {\n args: {\n model: this.modelId,\n max_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n frequency_penalty: frequencyPenalty,\n presence_penalty: presencePenalty,\n response_format,\n stop: stopSequences,\n messages,\n tools: moonshotTools,\n tool_choice: moonshotToolChoice,\n ...(thinking != null || keep != null\n ? {\n thinking: {\n ...(thinking?.type != null && { type: thinking.type }),\n ...(thinking?.budgetTokens !== undefined && {\n budget_tokens: thinking.budgetTokens,\n }),\n ...(keep != null && { keep }),\n },\n }\n : {}),\n ...(moonshotOptions.reasoningEffort != null && {\n reasoning_effort: moonshotOptions.reasoningEffort,\n }),\n ...(moonshotOptions.promptCacheKey != null && {\n prompt_cache_key: moonshotOptions.promptCacheKey,\n }),\n ...(moonshotOptions.safetyIdentifier != null && {\n safety_identifier: moonshotOptions.safetyIdentifier,\n }),\n },\n warnings: [...allWarnings, ...toolWarnings],\n };\n }\n\n async doGenerate(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\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 moonshotAIChatResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const choice = responseBody.choices[0];\n const content: Array<LanguageModelV3Content> = [];\n\n // reasoning content (before text):\n const reasoning = choice.message.reasoning_content;\n if (reasoning != null && reasoning.length > 0) {\n content.push({ type: 'reasoning', text: reasoning });\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: {\n unified: mapMoonshotAIFinishReason(choice.finish_reason),\n raw: choice.finish_reason ?? undefined,\n },\n usage: convertMoonshotAIChatUsage(responseBody.usage),\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: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\n const { args, warnings } = await this.getArgs({ ...options });\n\n const body = {\n ...args,\n stream: true,\n ...(this.config.includeUsage && {\n stream_options: { include_usage: true },\n }),\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 moonshotAIChatChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n hasFinished: boolean;\n }> = [];\n\n let finishReason: LanguageModelV3FinishReason = {\n unified: 'other',\n raw: undefined,\n };\n let usage: MoonshotAIChatTokenUsage | undefined = undefined;\n let isFirstChunk = true;\n let isActiveReasoning = false;\n let isActiveText = false;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<InferSchema<typeof moonshotAIChatChunkSchema>>,\n LanguageModelV3StreamPart\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 = { unified: 'error', raw: undefined };\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 = { unified: 'error', raw: undefined };\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 const choice = value.choices[0];\n\n if (choice?.finish_reason != null) {\n finishReason = {\n unified: mapMoonshotAIFinishReason(choice.finish_reason),\n raw: choice.finish_reason,\n };\n }\n\n if (choice?.delta == null) {\n return;\n }\n\n const delta = choice.delta;\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) {\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 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 toolCall.function.arguments.length > 0\n ) {\n // send delta if the argument text has already started:\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCall.function.arguments,\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 }\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,\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage: convertMoonshotAIChatUsage(usage),\n });\n },\n }),\n ),\n request: { body },\n response: { headers: responseHeaders },\n };\n }\n}\n","import {\n UnsupportedFunctionalityError,\n type LanguageModelV3Prompt,\n} from '@ai-sdk/provider';\nimport {\n convertBase64ToUint8Array,\n convertToBase64,\n} from '@ai-sdk/provider-utils';\n\nimport type { MoonshotAIMessages } from './moonshotai-chat-api-types';\n\n// Moonshot AI chat completions accepts text, image_url, and video_url content\n// parts only. Anything else (audio, PDF, other file types) throws here rather\n// than being rejected by the API with a 400.\nexport function convertToMoonshotAIChatMessages(\n prompt: LanguageModelV3Prompt,\n): MoonshotAIMessages {\n const messages: MoonshotAIMessages = [];\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n messages.push({ role: 'system', content });\n break;\n }\n\n case 'user': {\n if (content.length === 1 && content[0].type === 'text') {\n messages.push({\n role: 'user',\n content: content[0].text,\n });\n break;\n }\n\n messages.push({\n role: 'user',\n content: content.map(part => {\n switch (part.type) {\n case 'text': {\n return { type: 'text', text: part.text };\n }\n case 'file': {\n if (part.mediaType.startsWith('image/')) {\n const mediaType =\n part.mediaType === 'image/*'\n ? 'image/jpeg'\n : part.mediaType;\n\n return {\n type: 'image_url' as const,\n image_url: {\n url:\n part.data instanceof URL\n ? part.data.toString()\n : `data:${mediaType};base64,${convertToBase64(part.data)}`,\n },\n };\n }\n\n if (part.mediaType.startsWith('video/')) {\n const mediaType =\n part.mediaType === 'video/*' ? 'video/mp4' : part.mediaType;\n\n return {\n type: 'video_url' as const,\n video_url: {\n url:\n part.data instanceof URL\n ? part.data.toString()\n : `data:${mediaType};base64,${convertToBase64(part.data)}`,\n },\n };\n }\n\n if (part.mediaType.startsWith('text/')) {\n const textContent =\n part.data instanceof URL\n ? part.data.toString()\n : typeof part.data === 'string'\n ? new TextDecoder().decode(\n convertBase64ToUint8Array(part.data),\n )\n : new TextDecoder().decode(part.data);\n\n return {\n type: 'text' as const,\n text: textContent,\n };\n }\n\n throw new UnsupportedFunctionalityError({\n functionality: `file part media type ${part.mediaType}`,\n });\n }\n }\n }),\n });\n\n break;\n }\n\n case 'assistant': {\n let text = '';\n let reasoning = '';\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 reasoning += part.text;\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 messages.push({\n role: 'assistant',\n content: toolCalls.length > 0 ? text || null : text,\n ...(reasoning.length > 0 ? { reasoning_content: reasoning } : {}),\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n });\n\n break;\n }\n\n case 'tool': {\n for (const toolResponse of content) {\n if (toolResponse.type === 'tool-approval-response') {\n continue;\n }\n\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 'execution-denied':\n contentValue = output.reason ?? 'Tool call execution denied.';\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 const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n","import type { LanguageModelV3Usage } from '@ai-sdk/provider';\n\nexport function convertMoonshotAIChatUsage(\n usage:\n | {\n prompt_tokens?: number | null;\n completion_tokens?: number | null;\n cached_tokens?: number | null;\n prompt_tokens_details?: {\n cached_tokens?: number | null;\n } | null;\n completion_tokens_details?: {\n reasoning_tokens?: number | null;\n } | null;\n }\n | undefined\n | null,\n): LanguageModelV3Usage {\n if (usage == null) {\n return {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n raw: undefined,\n };\n }\n\n const promptTokens = usage.prompt_tokens ?? 0;\n const completionTokens = usage.completion_tokens ?? 0;\n\n const cacheReadTokens =\n usage.cached_tokens ?? usage.prompt_tokens_details?.cached_tokens ?? 0;\n\n const reasoningTokens =\n usage.completion_tokens_details?.reasoning_tokens ?? 0;\n\n return {\n inputTokens: {\n total: promptTokens,\n noCache: promptTokens - cacheReadTokens,\n cacheRead: cacheReadTokens,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: completionTokens,\n text: completionTokens - reasoningTokens,\n reasoning: reasoningTokens,\n },\n raw: usage,\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 { LanguageModelV3FinishReason } from '@ai-sdk/provider';\n\nexport function mapMoonshotAIFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV3FinishReason['unified'] {\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 'function_call':\n case 'tool_calls':\n return 'tool-calls';\n default:\n return 'other';\n }\n}\n","import { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport type MoonshotAIMessages = Array<MoonshotAIMessage>;\n\nexport type MoonshotAIMessage =\n | MoonshotAISystemMessage\n | MoonshotAIUserMessage\n | MoonshotAIAssistantMessage\n | MoonshotAIToolMessage;\n\nexport interface MoonshotAISystemMessage {\n role: 'system';\n content: string;\n}\n\nexport interface MoonshotAIUserMessage {\n role: 'user';\n content: string | Array<MoonshotAIContentPart>;\n}\n\nexport type MoonshotAIContentPart =\n | MoonshotAIContentPartText\n | MoonshotAIContentPartImage\n | MoonshotAIContentPartVideo;\n\nexport interface MoonshotAIContentPartText {\n type: 'text';\n text: string;\n}\n\nexport interface MoonshotAIContentPartImage {\n type: 'image_url';\n image_url: { url: string };\n}\n\nexport interface MoonshotAIContentPartVideo {\n type: 'video_url';\n video_url: { url: string };\n}\n\nexport interface MoonshotAIAssistantMessage {\n role: 'assistant';\n content?: string | null;\n reasoning_content?: string;\n tool_calls?: Array<MoonshotAIMessageToolCall>;\n}\n\nexport interface MoonshotAIMessageToolCall {\n type: 'function';\n id: string;\n function: {\n arguments: string;\n name: string;\n };\n}\n\nexport interface MoonshotAIToolMessage {\n role: 'tool';\n content: string;\n tool_call_id: string;\n}\n\n// Schemas below are limited versions focused on what the implementation\n// needs. This limits breakages when the API changes and increases efficiency.\n\nconst tokenUsageSchema = z\n .object({\n prompt_tokens: z.number().nullish(),\n completion_tokens: z.number().nullish(),\n cached_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 MoonshotAIChatTokenUsage = z.infer<typeof tokenUsageSchema>;\n\nexport const moonshotAIErrorSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string().nullish(),\n }),\n});\n\nexport type MoonshotAIErrorData = z.infer<typeof moonshotAIErrorSchema>;\n\nexport const moonshotAIChatResponseSchema = z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\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 function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .nullish(),\n }),\n finish_reason: z.string().nullish(),\n }),\n ),\n usage: tokenUsageSchema,\n});\n\nexport const moonshotAIChatChunkSchema = 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 choices: z.array(\n z.object({\n delta: z\n .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 index: z.number(),\n id: z.string().nullish(),\n function: z.object({\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n }),\n }),\n )\n .nullish(),\n })\n .nullish(),\n finish_reason: z.string().nullish(),\n }),\n ),\n usage: tokenUsageSchema,\n }),\n moonshotAIErrorSchema,\n ]),\n ),\n);\n","import { z } from 'zod/v4';\n\nexport type MoonshotAIChatModelId =\n | 'moonshot-v1-8k'\n | 'moonshot-v1-32k'\n | 'moonshot-v1-128k'\n | 'kimi-k2'\n | 'kimi-k2-0905'\n | 'kimi-k2-thinking'\n | 'kimi-k2-thinking-turbo'\n | 'kimi-k2-turbo'\n | 'kimi-k2.5'\n | 'kimi-k3'\n | (string & {});\n\nexport const moonshotaiLanguageModelOptions = z.object({\n /**\n * Reasoning effort for Kimi K3.\n */\n reasoningEffort: z.enum(['low', 'high', 'max']).optional(),\n\n thinking: z\n .object({\n type: z.enum(['enabled', 'disabled']).optional(),\n budgetTokens: z.number().int().min(1024).optional(),\n })\n .optional(),\n\n reasoningHistory: z.enum(['disabled', 'interleaved', 'preserved']).optional(),\n\n /**\n * Used to cache responses for similar requests to optimize cache hit rates.\n * Typically a session or task id.\n */\n promptCacheKey: z.string().optional(),\n\n /**\n * A stable identifier used to help Moonshot detect users violating usage\n * policies. Recommended to hash the username or email address.\n */\n safetyIdentifier: z.string().optional(),\n});\n\nexport type MoonshotAILanguageModelOptions = z.infer<\n typeof moonshotaiLanguageModelOptions\n>;\n\n/**\n * Whether the model accepts `thinking.keep` (Preserved Thinking). Verified\n * against the live API: kimi-k2.6, kimi-k2.7-code(+highspeed), and kimi-k3\n * accept `keep: 'all'`; other models reject it with a 400.\n */\nexport function getModelThinkingKeepSupport(\n modelId: MoonshotAIChatModelId,\n): boolean {\n return (\n modelId === 'kimi-k2.6' ||\n modelId === 'kimi-k3' ||\n modelId.startsWith('kimi-k2.7-code')\n );\n}\n","import {\n UnsupportedFunctionalityError,\n type LanguageModelV3CallOptions,\n type SharedV3Warning,\n} from '@ai-sdk/provider';\n\nexport function prepareTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV3CallOptions['tools'];\n toolChoice?: LanguageModelV3CallOptions['toolChoice'];\n}): {\n tools:\n | undefined\n | Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n strict?: boolean;\n };\n }>;\n toolChoice:\n | { type: 'function'; function: { name: string } }\n | 'auto'\n | 'none'\n | 'required'\n | undefined;\n toolWarnings: SharedV3Warning[];\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: SharedV3Warning[] = [];\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined, toolWarnings };\n }\n\n const moonshotTools: Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n strict?: boolean;\n };\n }> = [];\n\n for (const tool of tools) {\n if (tool.type === 'provider') {\n toolWarnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n });\n } else {\n moonshotTools.push({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n ...(tool.strict != null ? { strict: tool.strict } : {}),\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: moonshotTools, 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: moonshotTools, toolChoice: type, toolWarnings };\n case 'tool':\n return {\n tools: moonshotTools,\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","// 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_provider_utils","import_v4","import_provider","_a","_b","toolCall"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/moonshotai-provider.ts","../src/moonshotai-chat-language-model.ts","../src/convert-to-moonshotai-chat-messages.ts","../src/convert-moonshotai-chat-usage.ts","../src/get-response-metadata.ts","../src/map-moonshotai-finish-reason.ts","../src/moonshotai-chat-api-types.ts","../src/moonshotai-chat-options.ts","../src/moonshotai-prepare-tools.ts","../src/normalize-json-schema-for-mfjs.ts","../src/version.ts"],"sourcesContent":["export { createMoonshotAI, moonshotai } from './moonshotai-provider';\nexport type {\n MoonshotAIProvider,\n MoonshotAIProviderSettings,\n} from './moonshotai-provider';\nexport type {\n MoonshotAIChatModelId,\n MoonshotAILanguageModelOptions,\n /** @deprecated Use `MoonshotAILanguageModelOptions` instead. */\n MoonshotAILanguageModelOptions as MoonshotAIProviderOptions,\n} from './moonshotai-chat-options';\n","import {\n NoSuchModelError,\n type LanguageModelV3,\n type ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { MoonshotAIChatLanguageModel } from './moonshotai-chat-language-model';\nimport type { MoonshotAIChatModelId } from './moonshotai-chat-options';\nimport { VERSION } from './version';\n\nexport type { MoonshotAIErrorData } from './moonshotai-chat-api-types';\n\nexport interface MoonshotAIProviderSettings {\n /**\n * Moonshot API key. Default value is taken from the `MOONSHOT_API_KEY`\n * environment variable.\n */\n apiKey?: string;\n /**\n * Base URL for the API calls.\n */\n baseURL?: string;\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\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 MoonshotAIProvider extends ProviderV3 {\n /**\n * Creates a model for text generation.\n */\n (modelId: MoonshotAIChatModelId): LanguageModelV3;\n\n /**\n * Creates a chat model for text generation.\n */\n chatModel(modelId: MoonshotAIChatModelId): LanguageModelV3;\n\n /**\n * Creates a language model for text generation.\n */\n languageModel(modelId: MoonshotAIChatModelId): LanguageModelV3;\n}\n\nconst defaultBaseURL = 'https://api.moonshot.ai/v1';\n\nexport function getModelStructuredOutputSupport(\n modelId: MoonshotAIChatModelId,\n): boolean {\n if (modelId.startsWith('kimi-k')) return true;\n return false;\n}\n\nexport function createMoonshotAI(\n options: MoonshotAIProviderSettings = {},\n): MoonshotAIProvider {\n const baseURL = withoutTrailingSlash(options.baseURL ?? defaultBaseURL);\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'MOONSHOT_API_KEY',\n description: 'Moonshot API key',\n })}`,\n ...options.headers,\n },\n `ai-sdk/moonshotai/${VERSION}`,\n );\n\n const createChatModel = (modelId: MoonshotAIChatModelId) => {\n return new MoonshotAIChatLanguageModel(modelId, {\n provider: 'moonshotai.chat',\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n includeUsage: true,\n supportsStructuredOutputs: getModelStructuredOutputSupport(modelId),\n });\n };\n\n const provider = (modelId: MoonshotAIChatModelId) => createChatModel(modelId);\n\n provider.specificationVersion = 'v3' as const;\n provider.chatModel = createChatModel;\n provider.languageModel = createChatModel;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\nexport const moonshotai = createMoonshotAI();\n","import {\n InvalidResponseDataError,\n type APICallError,\n type LanguageModelV3,\n type LanguageModelV3CallOptions,\n type LanguageModelV3Content,\n type LanguageModelV3FinishReason,\n type LanguageModelV3GenerateResult,\n type LanguageModelV3StreamPart,\n type LanguageModelV3StreamResult,\n type SharedV3Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n generateId,\n parseProviderOptions,\n postJsonToApi,\n type FetchFunction,\n type InferSchema,\n type ParseResult,\n type ResponseHandler,\n} from '@ai-sdk/provider-utils';\nimport { convertToMoonshotAIChatMessages } from './convert-to-moonshotai-chat-messages';\nimport { convertMoonshotAIChatUsage } from './convert-moonshotai-chat-usage';\nimport { getResponseMetadata } from './get-response-metadata';\nimport { mapMoonshotAIFinishReason } from './map-moonshotai-finish-reason';\nimport {\n moonshotAIChatChunkSchema,\n moonshotAIChatResponseSchema,\n moonshotAIErrorSchema,\n type MoonshotAIChatTokenUsage,\n} from './moonshotai-chat-api-types';\nimport {\n getModelThinkingKeepSupport,\n moonshotaiLanguageModelOptions,\n type MoonshotAIChatModelId,\n} from './moonshotai-chat-options';\nimport { prepareTools } from './moonshotai-prepare-tools';\n\nexport type MoonshotAIChatConfig = {\n provider: string;\n headers?: () => Record<string, string | undefined>;\n url: (options: { modelId: string; path: string }) => string;\n fetch?: FetchFunction;\n includeUsage?: boolean;\n supportsStructuredOutputs?: boolean;\n};\n\nexport class MoonshotAIChatLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = 'v3';\n\n readonly modelId: MoonshotAIChatModelId;\n\n // Moonshot AI does not fetch external URLs; the AI SDK downloads and\n // inlines URL file parts instead. ms:// file references from the Moonshot\n // Files API are passed through natively.\n readonly supportedUrls = {\n 'image/*': [/^ms:\\/\\//],\n 'video/*': [/^ms:\\/\\//],\n };\n\n private readonly config: MoonshotAIChatConfig;\n private readonly failedResponseHandler: ResponseHandler<APICallError>;\n\n constructor(modelId: MoonshotAIChatModelId, config: MoonshotAIChatConfig) {\n this.modelId = modelId;\n this.config = config;\n\n this.failedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: moonshotAIErrorSchema,\n errorToMessage: error => 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 seed,\n toolChoice,\n tools,\n }: LanguageModelV3CallOptions) {\n const moonshotOptions =\n (await parseProviderOptions({\n provider: this.providerOptionsName,\n providerOptions,\n schema: moonshotaiLanguageModelOptions,\n })) ?? {};\n\n const messages = convertToMoonshotAIChatMessages(prompt);\n\n const allWarnings: SharedV3Warning[] = [];\n if (topK != null) {\n allWarnings.push({ type: 'unsupported', feature: 'topK' });\n }\n if (seed != null) {\n allWarnings.push({ type: 'unsupported', feature: 'seed' });\n }\n\n const {\n tools: moonshotTools,\n toolChoice: moonshotToolChoice,\n toolWarnings,\n } = prepareTools({ tools, toolChoice });\n\n // Thinking is configured through explicit provider options only.\n const thinking = moonshotOptions.thinking;\n\n // Moonshot has no reasoning_history field; the API silently ignores it\n // (verified against the live API). Preserved Thinking maps to\n // thinking.keep, which only accepts 'all' and only on some models\n // (verified: k2.6, k2.7-code, k3 accept it; k2.5 rejects it). Other\n // reasoningHistory values use the server default.\n let keep: 'all' | undefined;\n if (moonshotOptions.reasoningHistory === 'preserved') {\n if (getModelThinkingKeepSupport(this.modelId)) {\n keep = 'all';\n } else {\n allWarnings.push({\n type: 'unsupported',\n feature: `reasoningHistory 'preserved' is not supported by model \"${this.modelId}\"`,\n });\n }\n }\n\n let response_format: Record<string, unknown> | undefined;\n if (responseFormat?.type === 'json') {\n if (\n this.config.supportsStructuredOutputs === true &&\n responseFormat.schema != null\n ) {\n // kimi-k2.5 produces nonsensical output when the top-level `$schema`\n // keyword injected by the AI SDK is present, even though it otherwise\n // supports structured outputs. Strip it from the schema sent to\n // Moonshot; the full original schema is still used for result\n // validation.\n const { $schema: _$schema, ...schemaWithoutDollarSchema } =\n responseFormat.schema;\n response_format = {\n type: 'json_schema',\n json_schema: {\n name: responseFormat.name ?? 'response',\n schema: schemaWithoutDollarSchema,\n ...(responseFormat.description != null && {\n description: responseFormat.description,\n }),\n },\n };\n } else {\n response_format = { type: 'json_object' };\n }\n }\n\n return {\n args: {\n model: this.modelId,\n max_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n frequency_penalty: frequencyPenalty,\n presence_penalty: presencePenalty,\n response_format,\n stop: stopSequences,\n messages,\n tools: moonshotTools,\n tool_choice: moonshotToolChoice,\n ...(thinking != null || keep != null\n ? {\n thinking: {\n ...(thinking?.type != null && { type: thinking.type }),\n ...(thinking?.budgetTokens !== undefined && {\n budget_tokens: thinking.budgetTokens,\n }),\n ...(keep != null && { keep }),\n },\n }\n : {}),\n ...(moonshotOptions.reasoningEffort != null && {\n reasoning_effort: moonshotOptions.reasoningEffort,\n }),\n ...(moonshotOptions.promptCacheKey != null && {\n prompt_cache_key: moonshotOptions.promptCacheKey,\n }),\n ...(moonshotOptions.safetyIdentifier != null && {\n safety_identifier: moonshotOptions.safetyIdentifier,\n }),\n },\n warnings: [...allWarnings, ...toolWarnings],\n };\n }\n\n async doGenerate(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\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 moonshotAIChatResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const choice = responseBody.choices[0];\n const content: Array<LanguageModelV3Content> = [];\n\n // reasoning content (before text):\n const reasoning = choice.message.reasoning_content;\n if (reasoning != null && reasoning.length > 0) {\n content.push({ type: 'reasoning', text: reasoning });\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: {\n unified: mapMoonshotAIFinishReason(choice.finish_reason),\n raw: choice.finish_reason ?? undefined,\n },\n usage: convertMoonshotAIChatUsage(responseBody.usage),\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: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\n const { args, warnings } = await this.getArgs({ ...options });\n\n const body = {\n ...args,\n stream: true,\n ...(this.config.includeUsage && {\n stream_options: { include_usage: true },\n }),\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 moonshotAIChatChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n hasFinished: boolean;\n }> = [];\n\n let finishReason: LanguageModelV3FinishReason = {\n unified: 'other',\n raw: undefined,\n };\n let usage: MoonshotAIChatTokenUsage | undefined = undefined;\n let isFirstChunk = true;\n let isActiveReasoning = false;\n let isActiveText = false;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<InferSchema<typeof moonshotAIChatChunkSchema>>,\n LanguageModelV3StreamPart\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 = { unified: 'error', raw: undefined };\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 = { unified: 'error', raw: undefined };\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 const choice = value.choices[0];\n\n if (choice?.finish_reason != null) {\n finishReason = {\n unified: mapMoonshotAIFinishReason(choice.finish_reason),\n raw: choice.finish_reason,\n };\n }\n\n if (choice?.delta == null) {\n return;\n }\n\n const delta = choice.delta;\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) {\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 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 toolCall.function.arguments.length > 0\n ) {\n // send delta if the argument text has already started:\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCall.function.arguments,\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 }\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,\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage: convertMoonshotAIChatUsage(usage),\n });\n },\n }),\n ),\n request: { body },\n response: { headers: responseHeaders },\n };\n }\n}\n","import {\n UnsupportedFunctionalityError,\n type LanguageModelV3Prompt,\n} from '@ai-sdk/provider';\nimport {\n convertBase64ToUint8Array,\n convertToBase64,\n} from '@ai-sdk/provider-utils';\n\nimport type { MoonshotAIMessages } from './moonshotai-chat-api-types';\n\n// Moonshot AI chat completions accepts text, image_url, and video_url content\n// parts only. Anything else (audio, PDF, other file types) throws here rather\n// than being rejected by the API with a 400.\nexport function convertToMoonshotAIChatMessages(\n prompt: LanguageModelV3Prompt,\n): MoonshotAIMessages {\n const messages: MoonshotAIMessages = [];\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n messages.push({ role: 'system', content });\n break;\n }\n\n case 'user': {\n if (content.length === 1 && content[0].type === 'text') {\n messages.push({\n role: 'user',\n content: content[0].text,\n });\n break;\n }\n\n messages.push({\n role: 'user',\n content: content.map(part => {\n switch (part.type) {\n case 'text': {\n return { type: 'text', text: part.text };\n }\n case 'file': {\n if (part.mediaType.startsWith('image/')) {\n const mediaType =\n part.mediaType === 'image/*'\n ? 'image/jpeg'\n : part.mediaType;\n\n return {\n type: 'image_url' as const,\n image_url: {\n url:\n part.data instanceof URL\n ? part.data.toString()\n : `data:${mediaType};base64,${convertToBase64(part.data)}`,\n },\n };\n }\n\n if (part.mediaType.startsWith('video/')) {\n const mediaType =\n part.mediaType === 'video/*' ? 'video/mp4' : part.mediaType;\n\n return {\n type: 'video_url' as const,\n video_url: {\n url:\n part.data instanceof URL\n ? part.data.toString()\n : `data:${mediaType};base64,${convertToBase64(part.data)}`,\n },\n };\n }\n\n if (part.mediaType.startsWith('text/')) {\n const textContent =\n part.data instanceof URL\n ? part.data.toString()\n : typeof part.data === 'string'\n ? new TextDecoder().decode(\n convertBase64ToUint8Array(part.data),\n )\n : new TextDecoder().decode(part.data);\n\n return {\n type: 'text' as const,\n text: textContent,\n };\n }\n\n throw new UnsupportedFunctionalityError({\n functionality: `file part media type ${part.mediaType}`,\n });\n }\n }\n }),\n });\n\n break;\n }\n\n case 'assistant': {\n let text = '';\n let reasoning = '';\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 reasoning += part.text;\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 messages.push({\n role: 'assistant',\n content: toolCalls.length > 0 ? text || null : text,\n ...(reasoning.length > 0 ? { reasoning_content: reasoning } : {}),\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n });\n\n break;\n }\n\n case 'tool': {\n for (const toolResponse of content) {\n if (toolResponse.type === 'tool-approval-response') {\n continue;\n }\n\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 'execution-denied':\n contentValue = output.reason ?? 'Tool call execution denied.';\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 const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n","import type { LanguageModelV3Usage } from '@ai-sdk/provider';\n\nexport function convertMoonshotAIChatUsage(\n usage:\n | {\n prompt_tokens?: number | null;\n completion_tokens?: number | null;\n cached_tokens?: number | null;\n prompt_tokens_details?: {\n cached_tokens?: number | null;\n } | null;\n completion_tokens_details?: {\n reasoning_tokens?: number | null;\n } | null;\n }\n | undefined\n | null,\n): LanguageModelV3Usage {\n if (usage == null) {\n return {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n raw: undefined,\n };\n }\n\n const promptTokens = usage.prompt_tokens ?? 0;\n const completionTokens = usage.completion_tokens ?? 0;\n\n const cacheReadTokens =\n usage.cached_tokens ?? usage.prompt_tokens_details?.cached_tokens ?? 0;\n\n const reasoningTokens =\n usage.completion_tokens_details?.reasoning_tokens ?? 0;\n\n return {\n inputTokens: {\n total: promptTokens,\n noCache: promptTokens - cacheReadTokens,\n cacheRead: cacheReadTokens,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: completionTokens,\n text: completionTokens - reasoningTokens,\n reasoning: reasoningTokens,\n },\n raw: usage,\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 { LanguageModelV3FinishReason } from '@ai-sdk/provider';\n\nexport function mapMoonshotAIFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV3FinishReason['unified'] {\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 'function_call':\n case 'tool_calls':\n return 'tool-calls';\n default:\n return 'other';\n }\n}\n","import { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport type MoonshotAIMessages = Array<MoonshotAIMessage>;\n\nexport type MoonshotAIMessage =\n | MoonshotAISystemMessage\n | MoonshotAIUserMessage\n | MoonshotAIAssistantMessage\n | MoonshotAIToolMessage;\n\nexport interface MoonshotAISystemMessage {\n role: 'system';\n content: string;\n}\n\nexport interface MoonshotAIUserMessage {\n role: 'user';\n content: string | Array<MoonshotAIContentPart>;\n}\n\nexport type MoonshotAIContentPart =\n | MoonshotAIContentPartText\n | MoonshotAIContentPartImage\n | MoonshotAIContentPartVideo;\n\nexport interface MoonshotAIContentPartText {\n type: 'text';\n text: string;\n}\n\nexport interface MoonshotAIContentPartImage {\n type: 'image_url';\n image_url: { url: string };\n}\n\nexport interface MoonshotAIContentPartVideo {\n type: 'video_url';\n video_url: { url: string };\n}\n\nexport interface MoonshotAIAssistantMessage {\n role: 'assistant';\n content?: string | null;\n reasoning_content?: string;\n tool_calls?: Array<MoonshotAIMessageToolCall>;\n}\n\nexport interface MoonshotAIMessageToolCall {\n type: 'function';\n id: string;\n function: {\n arguments: string;\n name: string;\n };\n}\n\nexport interface MoonshotAIToolMessage {\n role: 'tool';\n content: string;\n tool_call_id: string;\n}\n\n// Schemas below are limited versions focused on what the implementation\n// needs. This limits breakages when the API changes and increases efficiency.\n\nconst tokenUsageSchema = z\n .object({\n prompt_tokens: z.number().nullish(),\n completion_tokens: z.number().nullish(),\n cached_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 MoonshotAIChatTokenUsage = z.infer<typeof tokenUsageSchema>;\n\nexport const moonshotAIErrorSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string().nullish(),\n }),\n});\n\nexport type MoonshotAIErrorData = z.infer<typeof moonshotAIErrorSchema>;\n\nexport const moonshotAIChatResponseSchema = z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\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 function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .nullish(),\n }),\n finish_reason: z.string().nullish(),\n }),\n ),\n usage: tokenUsageSchema,\n});\n\nexport const moonshotAIChatChunkSchema = 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 choices: z.array(\n z.object({\n delta: z\n .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 index: z.number(),\n id: z.string().nullish(),\n function: z.object({\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n }),\n }),\n )\n .nullish(),\n })\n .nullish(),\n finish_reason: z.string().nullish(),\n }),\n ),\n usage: tokenUsageSchema,\n }),\n moonshotAIErrorSchema,\n ]),\n ),\n);\n","import { z } from 'zod/v4';\n\nexport type MoonshotAIChatModelId =\n | 'moonshot-v1-8k'\n | 'moonshot-v1-32k'\n | 'moonshot-v1-128k'\n | 'kimi-k2'\n | 'kimi-k2-0905'\n | 'kimi-k2-thinking'\n | 'kimi-k2-thinking-turbo'\n | 'kimi-k2-turbo'\n | 'kimi-k2.5'\n | 'kimi-k3'\n | (string & {});\n\nexport const moonshotaiLanguageModelOptions = z.object({\n /**\n * Reasoning effort for Kimi K3.\n */\n reasoningEffort: z.enum(['low', 'high', 'max']).optional(),\n\n thinking: z\n .object({\n type: z.enum(['enabled', 'disabled']).optional(),\n budgetTokens: z.number().int().min(1024).optional(),\n })\n .optional(),\n\n reasoningHistory: z.enum(['disabled', 'interleaved', 'preserved']).optional(),\n\n /**\n * Used to cache responses for similar requests to optimize cache hit rates.\n * Typically a session or task id.\n */\n promptCacheKey: z.string().optional(),\n\n /**\n * A stable identifier used to help Moonshot detect users violating usage\n * policies. Recommended to hash the username or email address.\n */\n safetyIdentifier: z.string().optional(),\n});\n\nexport type MoonshotAILanguageModelOptions = z.infer<\n typeof moonshotaiLanguageModelOptions\n>;\n\n/**\n * Whether the model accepts `thinking.keep` (Preserved Thinking). Verified\n * against the live API: kimi-k2.6, kimi-k2.7-code(+highspeed), and kimi-k3\n * accept `keep: 'all'`; other models reject it with a 400.\n */\nexport function getModelThinkingKeepSupport(\n modelId: MoonshotAIChatModelId,\n): boolean {\n return (\n modelId === 'kimi-k2.6' ||\n modelId === 'kimi-k3' ||\n modelId.startsWith('kimi-k2.7-code')\n );\n}\n","import {\n UnsupportedFunctionalityError,\n type LanguageModelV3CallOptions,\n type SharedV3Warning,\n} from '@ai-sdk/provider';\nimport { normalizeJsonSchemaForMFJS } from './normalize-json-schema-for-mfjs';\n\nexport function prepareTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV3CallOptions['tools'];\n toolChoice?: LanguageModelV3CallOptions['toolChoice'];\n}): {\n tools:\n | undefined\n | Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n strict?: boolean;\n };\n }>;\n toolChoice:\n | { type: 'function'; function: { name: string } }\n | 'auto'\n | 'none'\n | 'required'\n | undefined;\n toolWarnings: SharedV3Warning[];\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: SharedV3Warning[] = [];\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined, toolWarnings };\n }\n\n const moonshotTools: Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n strict?: boolean;\n };\n }> = [];\n\n for (const tool of tools) {\n if (tool.type === 'provider') {\n toolWarnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n });\n } else {\n moonshotTools.push({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: normalizeJsonSchemaForMFJS(tool.inputSchema),\n ...(tool.strict != null ? { strict: tool.strict } : {}),\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: moonshotTools, 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: moonshotTools, toolChoice: type, toolWarnings };\n case 'tool':\n return {\n tools: moonshotTools,\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","import { UnsupportedFunctionalityError } from '@ai-sdk/provider';\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nconst SCHEMA_ARRAY_KEYS = ['allOf', 'anyOf', 'oneOf', 'prefixItems'] as const;\nconst SCHEMA_MAP_KEYS = [\n 'properties',\n 'patternProperties',\n '$defs',\n 'dependentSchemas',\n] as const;\nconst SCHEMA_SINGLE_KEYS = [\n 'additionalProperties',\n 'propertyNames',\n 'items',\n 'contains',\n 'not',\n 'if',\n 'then',\n 'else',\n] as const;\n\n/**\n * Normalizes a JSON Schema to the subset Moonshot's MFJS validator accepts:\n * `object` root required, tuple `items` become `prefixItems`, and `type` next\n * to `anyOf` moves into the branches. Everything else passes through. The\n * full original schema is still used for AI SDK result validation.\n */\nexport function normalizeJsonSchemaForMFJS(schema: unknown): unknown {\n return normalizeDefinition(schema, true);\n}\n\nfunction normalizeDefinition(definition: unknown, isRoot: boolean): unknown {\n if (typeof definition === 'boolean' || !isRecord(definition)) {\n if (isRoot) {\n throw new UnsupportedFunctionalityError({\n functionality:\n 'tool parameters must be a JSON Schema object with type \"object\" for moonshotai (MFJS)',\n });\n }\n return definition;\n }\n\n if (isRoot && definition.type !== 'object') {\n throw new UnsupportedFunctionalityError({\n functionality:\n 'tool parameters must be a JSON Schema object with type \"object\" for moonshotai (MFJS)',\n });\n }\n\n const result: Record<string, unknown> = { ...definition };\n\n // Existing prefixItems stay first (they are positional).\n if (Array.isArray(result.items)) {\n const tuple = result.items;\n result.prefixItems = [\n ...(Array.isArray(result.prefixItems) ? result.prefixItems : []),\n ...tuple.map(item => normalizeDefinition(item, false)),\n ];\n delete result.items;\n } else if (isRecord(result.items)) {\n result.items = normalizeDefinition(result.items, false);\n }\n\n // MFJS requires type to live inside anyOf items.\n if (typeof result.type === 'string' && Array.isArray(result.anyOf)) {\n const parentType = result.type;\n delete result.type;\n result.anyOf = result.anyOf.map(branch =>\n isRecord(branch) && branch.type == null\n ? { type: parentType, ...branch }\n : branch,\n );\n }\n\n for (const key of SCHEMA_ARRAY_KEYS) {\n const value = result[key];\n if (Array.isArray(value)) {\n result[key] = value.map(item => normalizeDefinition(item, false));\n }\n }\n\n for (const key of SCHEMA_MAP_KEYS) {\n const value = result[key];\n if (isRecord(value)) {\n result[key] = Object.fromEntries(\n Object.entries(value).map(([k, v]) => [\n k,\n normalizeDefinition(v, false),\n ]),\n );\n }\n }\n\n for (const key of SCHEMA_SINGLE_KEYS) {\n const value = result[key];\n if (isRecord(value) || typeof value === 'boolean') {\n result[key] = normalizeDefinition(value, false);\n }\n }\n\n return result;\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;;;ACAA,IAAAA,mBAIO;AACP,IAAAC,yBAKO;;;ACVP,IAAAC,mBAWO;AACP,IAAAC,yBAYO;;;ACxBP,sBAGO;AACP,4BAGO;AAOA,SAAS,gCACd,QACoB;AAhBtB;AAiBE,QAAM,WAA+B,CAAC;AACtC,aAAW,EAAE,MAAM,QAAQ,KAAK,QAAQ;AACtC,YAAQ,MAAM;AAAA,MACZ,KAAK,UAAU;AACb,iBAAS,KAAK,EAAE,MAAM,UAAU,QAAQ,CAAC;AACzC;AAAA,MACF;AAAA,MAEA,KAAK,QAAQ;AACX,YAAI,QAAQ,WAAW,KAAK,QAAQ,CAAC,EAAE,SAAS,QAAQ;AACtD,mBAAS,KAAK;AAAA,YACZ,MAAM;AAAA,YACN,SAAS,QAAQ,CAAC,EAAE;AAAA,UACtB,CAAC;AACD;AAAA,QACF;AAEA,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS,QAAQ,IAAI,UAAQ;AAC3B,oBAAQ,KAAK,MAAM;AAAA,cACjB,KAAK,QAAQ;AACX,uBAAO,EAAE,MAAM,QAAQ,MAAM,KAAK,KAAK;AAAA,cACzC;AAAA,cACA,KAAK,QAAQ;AACX,oBAAI,KAAK,UAAU,WAAW,QAAQ,GAAG;AACvC,wBAAM,YACJ,KAAK,cAAc,YACf,eACA,KAAK;AAEX,yBAAO;AAAA,oBACL,MAAM;AAAA,oBACN,WAAW;AAAA,sBACT,KACE,KAAK,gBAAgB,MACjB,KAAK,KAAK,SAAS,IACnB,QAAQ,SAAS,eAAW,uCAAgB,KAAK,IAAI,CAAC;AAAA,oBAC9D;AAAA,kBACF;AAAA,gBACF;AAEA,oBAAI,KAAK,UAAU,WAAW,QAAQ,GAAG;AACvC,wBAAM,YACJ,KAAK,cAAc,YAAY,cAAc,KAAK;AAEpD,yBAAO;AAAA,oBACL,MAAM;AAAA,oBACN,WAAW;AAAA,sBACT,KACE,KAAK,gBAAgB,MACjB,KAAK,KAAK,SAAS,IACnB,QAAQ,SAAS,eAAW,uCAAgB,KAAK,IAAI,CAAC;AAAA,oBAC9D;AAAA,kBACF;AAAA,gBACF;AAEA,oBAAI,KAAK,UAAU,WAAW,OAAO,GAAG;AACtC,wBAAM,cACJ,KAAK,gBAAgB,MACjB,KAAK,KAAK,SAAS,IACnB,OAAO,KAAK,SAAS,WACnB,IAAI,YAAY,EAAE;AAAA,wBAChB,iDAA0B,KAAK,IAAI;AAAA,kBACrC,IACA,IAAI,YAAY,EAAE,OAAO,KAAK,IAAI;AAE1C,yBAAO;AAAA,oBACL,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,gBACF;AAEA,sBAAM,IAAI,8CAA8B;AAAA,kBACtC,eAAe,wBAAwB,KAAK,SAAS;AAAA,gBACvD,CAAC;AAAA,cACH;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH,CAAC;AAED;AAAA,MACF;AAAA,MAEA,KAAK,aAAa;AAChB,YAAI,OAAO;AACX,YAAI,YAAY;AAChB,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;AAChB,2BAAa,KAAK;AAClB;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;AAEA,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS,UAAU,SAAS,IAAI,QAAQ,OAAO;AAAA,UAC/C,GAAI,UAAU,SAAS,IAAI,EAAE,mBAAmB,UAAU,IAAI,CAAC;AAAA,UAC/D,YAAY,UAAU,SAAS,IAAI,YAAY;AAAA,QACjD,CAAC;AAED;AAAA,MACF;AAAA,MAEA,KAAK,QAAQ;AACX,mBAAW,gBAAgB,SAAS;AAClC,cAAI,aAAa,SAAS,0BAA0B;AAClD;AAAA,UACF;AAEA,gBAAM,SAAS,aAAa;AAE5B,cAAI;AACJ,kBAAQ,OAAO,MAAM;AAAA,YACnB,KAAK;AAAA,YACL,KAAK;AACH,6BAAe,OAAO;AACtB;AAAA,YACF,KAAK;AACH,8BAAe,YAAO,WAAP,YAAiB;AAChC;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,cAAM,mBAA0B;AAChC,cAAM,IAAI,MAAM,qBAAqB,gBAAgB,EAAE;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;;;ACvLO,SAAS,2BACd,OAcsB;AAjBxB;AAkBE,MAAI,SAAS,MAAM;AACjB,WAAO;AAAA,MACL,aAAa;AAAA,QACX,OAAO;AAAA,QACP,SAAS;AAAA,QACT,WAAW;AAAA,QACX,YAAY;AAAA,MACd;AAAA,MACA,cAAc;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,WAAW;AAAA,MACb;AAAA,MACA,KAAK;AAAA,IACP;AAAA,EACF;AAEA,QAAM,gBAAe,WAAM,kBAAN,YAAuB;AAC5C,QAAM,oBAAmB,WAAM,sBAAN,YAA2B;AAEpD,QAAM,mBACJ,iBAAM,kBAAN,aAAuB,WAAM,0BAAN,mBAA6B,kBAApD,YAAqE;AAEvE,QAAM,mBACJ,iBAAM,8BAAN,mBAAiC,qBAAjC,YAAqD;AAEvD,SAAO;AAAA,IACL,aAAa;AAAA,MACX,OAAO;AAAA,MACP,SAAS,eAAe;AAAA,MACxB,WAAW;AAAA,MACX,YAAY;AAAA,IACd;AAAA,IACA,cAAc;AAAA,MACZ,OAAO;AAAA,MACP,MAAM,mBAAmB;AAAA,MACzB,WAAW;AAAA,IACb;AAAA,IACA,KAAK;AAAA,EACP;AACF;;;AC1DO,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,0BACd,cACwC;AACxC,UAAQ,cAAc;AAAA,IACpB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;;;AClBA,IAAAC,yBAAsC;AACtC,gBAAkB;AAiElB,IAAM,mBAAmB,YACtB,OAAO;AAAA,EACN,eAAe,YAAE,OAAO,EAAE,QAAQ;AAAA,EAClC,mBAAmB,YAAE,OAAO,EAAE,QAAQ;AAAA,EACtC,eAAe,YAAE,OAAO,EAAE,QAAQ;AAAA,EAClC,cAAc,YAAE,OAAO,EAAE,QAAQ;AAAA,EACjC,uBAAuB,YACpB,OAAO;AAAA,IACN,eAAe,YAAE,OAAO,EAAE,QAAQ;AAAA,EACpC,CAAC,EACA,QAAQ;AAAA,EACX,2BAA2B,YACxB,OAAO;AAAA,IACN,kBAAkB,YAAE,OAAO,EAAE,QAAQ;AAAA,EACvC,CAAC,EACA,QAAQ;AACb,CAAC,EACA,QAAQ;AAIJ,IAAM,wBAAwB,YAAE,OAAO;AAAA,EAC5C,OAAO,YAAE,OAAO;AAAA,IACd,SAAS,YAAE,OAAO;AAAA,IAClB,MAAM,YAAE,OAAO,EAAE,QAAQ;AAAA,EAC3B,CAAC;AACH,CAAC;AAIM,IAAM,+BAA+B,YAAE,OAAO;AAAA,EACnD,IAAI,YAAE,OAAO,EAAE,QAAQ;AAAA,EACvB,SAAS,YAAE,OAAO,EAAE,QAAQ;AAAA,EAC5B,OAAO,YAAE,OAAO,EAAE,QAAQ;AAAA,EAC1B,SAAS,YAAE;AAAA,IACT,YAAE,OAAO;AAAA,MACP,SAAS,YAAE,OAAO;AAAA,QAChB,MAAM,YAAE,QAAQ,WAAW,EAAE,QAAQ;AAAA,QACrC,SAAS,YAAE,OAAO,EAAE,QAAQ;AAAA,QAC5B,mBAAmB,YAAE,OAAO,EAAE,QAAQ;AAAA,QACtC,YAAY,YACT;AAAA,UACC,YAAE,OAAO;AAAA,YACP,IAAI,YAAE,OAAO,EAAE,QAAQ;AAAA,YACvB,UAAU,YAAE,OAAO;AAAA,cACjB,MAAM,YAAE,OAAO;AAAA,cACf,WAAW,YAAE,OAAO;AAAA,YACtB,CAAC;AAAA,UACH,CAAC;AAAA,QACH,EACC,QAAQ;AAAA,MACb,CAAC;AAAA,MACD,eAAe,YAAE,OAAO,EAAE,QAAQ;AAAA,IACpC,CAAC;AAAA,EACH;AAAA,EACA,OAAO;AACT,CAAC;AAEM,IAAM,gCAA4B;AAAA,EAAW,UAClD;AAAA,IACE,YAAE,MAAM;AAAA,MACN,YAAE,OAAO;AAAA,QACP,IAAI,YAAE,OAAO,EAAE,QAAQ;AAAA,QACvB,SAAS,YAAE,OAAO,EAAE,QAAQ;AAAA,QAC5B,OAAO,YAAE,OAAO,EAAE,QAAQ;AAAA,QAC1B,SAAS,YAAE;AAAA,UACT,YAAE,OAAO;AAAA,YACP,OAAO,YACJ,OAAO;AAAA,cACN,MAAM,YAAE,QAAQ,WAAW,EAAE,QAAQ;AAAA,cACrC,SAAS,YAAE,OAAO,EAAE,QAAQ;AAAA,cAC5B,mBAAmB,YAAE,OAAO,EAAE,QAAQ;AAAA,cACtC,YAAY,YACT;AAAA,gBACC,YAAE,OAAO;AAAA,kBACP,OAAO,YAAE,OAAO;AAAA,kBAChB,IAAI,YAAE,OAAO,EAAE,QAAQ;AAAA,kBACvB,UAAU,YAAE,OAAO;AAAA,oBACjB,MAAM,YAAE,OAAO,EAAE,QAAQ;AAAA,oBACzB,WAAW,YAAE,OAAO,EAAE,QAAQ;AAAA,kBAChC,CAAC;AAAA,gBACH,CAAC;AAAA,cACH,EACC,QAAQ;AAAA,YACb,CAAC,EACA,QAAQ;AAAA,YACX,eAAe,YAAE,OAAO,EAAE,QAAQ;AAAA,UACpC,CAAC;AAAA,QACH;AAAA,QACA,OAAO;AAAA,MACT,CAAC;AAAA,MACD;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;AChKA,IAAAC,aAAkB;AAeX,IAAM,iCAAiC,aAAE,OAAO;AAAA;AAAA;AAAA;AAAA,EAIrD,iBAAiB,aAAE,KAAK,CAAC,OAAO,QAAQ,KAAK,CAAC,EAAE,SAAS;AAAA,EAEzD,UAAU,aACP,OAAO;AAAA,IACN,MAAM,aAAE,KAAK,CAAC,WAAW,UAAU,CAAC,EAAE,SAAS;AAAA,IAC/C,cAAc,aAAE,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,SAAS;AAAA,EACpD,CAAC,EACA,SAAS;AAAA,EAEZ,kBAAkB,aAAE,KAAK,CAAC,YAAY,eAAe,WAAW,CAAC,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,EAM5E,gBAAgB,aAAE,OAAO,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,EAMpC,kBAAkB,aAAE,OAAO,EAAE,SAAS;AACxC,CAAC;AAWM,SAAS,4BACd,SACS;AACT,SACE,YAAY,eACZ,YAAY,aACZ,QAAQ,WAAW,gBAAgB;AAEvC;;;AC5DA,IAAAC,mBAIO;;;ACJP,IAAAC,mBAA8C;AAE9C,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,IAAM,oBAAoB,CAAC,SAAS,SAAS,SAAS,aAAa;AACnE,IAAM,kBAAkB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAM,qBAAqB;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAQO,SAAS,2BAA2B,QAA0B;AACnE,SAAO,oBAAoB,QAAQ,IAAI;AACzC;AAEA,SAAS,oBAAoB,YAAqB,QAA0B;AAC1E,MAAI,OAAO,eAAe,aAAa,CAAC,SAAS,UAAU,GAAG;AAC5D,QAAI,QAAQ;AACV,YAAM,IAAI,+CAA8B;AAAA,QACtC,eACE;AAAA,MACJ,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAEA,MAAI,UAAU,WAAW,SAAS,UAAU;AAC1C,UAAM,IAAI,+CAA8B;AAAA,MACtC,eACE;AAAA,IACJ,CAAC;AAAA,EACH;AAEA,QAAM,SAAkC,EAAE,GAAG,WAAW;AAGxD,MAAI,MAAM,QAAQ,OAAO,KAAK,GAAG;AAC/B,UAAM,QAAQ,OAAO;AACrB,WAAO,cAAc;AAAA,MACnB,GAAI,MAAM,QAAQ,OAAO,WAAW,IAAI,OAAO,cAAc,CAAC;AAAA,MAC9D,GAAG,MAAM,IAAI,UAAQ,oBAAoB,MAAM,KAAK,CAAC;AAAA,IACvD;AACA,WAAO,OAAO;AAAA,EAChB,WAAW,SAAS,OAAO,KAAK,GAAG;AACjC,WAAO,QAAQ,oBAAoB,OAAO,OAAO,KAAK;AAAA,EACxD;AAGA,MAAI,OAAO,OAAO,SAAS,YAAY,MAAM,QAAQ,OAAO,KAAK,GAAG;AAClE,UAAM,aAAa,OAAO;AAC1B,WAAO,OAAO;AACd,WAAO,QAAQ,OAAO,MAAM;AAAA,MAAI,YAC9B,SAAS,MAAM,KAAK,OAAO,QAAQ,OAC/B,EAAE,MAAM,YAAY,GAAG,OAAO,IAC9B;AAAA,IACN;AAAA,EACF;AAEA,aAAW,OAAO,mBAAmB;AACnC,UAAM,QAAQ,OAAO,GAAG;AACxB,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,aAAO,GAAG,IAAI,MAAM,IAAI,UAAQ,oBAAoB,MAAM,KAAK,CAAC;AAAA,IAClE;AAAA,EACF;AAEA,aAAW,OAAO,iBAAiB;AACjC,UAAM,QAAQ,OAAO,GAAG;AACxB,QAAI,SAAS,KAAK,GAAG;AACnB,aAAO,GAAG,IAAI,OAAO;AAAA,QACnB,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM;AAAA,UACpC;AAAA,UACA,oBAAoB,GAAG,KAAK;AAAA,QAC9B,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,aAAW,OAAO,oBAAoB;AACpC,UAAM,QAAQ,OAAO,GAAG;AACxB,QAAI,SAAS,KAAK,KAAK,OAAO,UAAU,WAAW;AACjD,aAAO,GAAG,IAAI,oBAAoB,OAAO,KAAK;AAAA,IAChD;AAAA,EACF;AAEA,SAAO;AACT;;;ADjGO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AACF,GAsBE;AAEA,WAAQ,+BAAO,UAAS,QAAQ;AAEhC,QAAM,eAAkC,CAAC;AAEzC,MAAI,SAAS,MAAM;AACjB,WAAO,EAAE,OAAO,QAAW,YAAY,QAAW,aAAa;AAAA,EACjE;AAEA,QAAM,gBAQD,CAAC;AAEN,aAAW,QAAQ,OAAO;AACxB,QAAI,KAAK,SAAS,YAAY;AAC5B,mBAAa,KAAK;AAAA,QAChB,MAAM;AAAA,QACN,SAAS,yBAAyB,KAAK,EAAE;AAAA,MAC3C,CAAC;AAAA,IACH,OAAO;AACL,oBAAc,KAAK;AAAA,QACjB,MAAM;AAAA,QACN,UAAU;AAAA,UACR,MAAM,KAAK;AAAA,UACX,aAAa,KAAK;AAAA,UAClB,YAAY,2BAA2B,KAAK,WAAW;AAAA,UACvD,GAAI,KAAK,UAAU,OAAO,EAAE,QAAQ,KAAK,OAAO,IAAI,CAAC;AAAA,QACvD;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;;;AP/CO,IAAM,8BAAN,MAA6D;AAAA,EAgBlE,YAAY,SAAgC,QAA8B;AAf1E,SAAS,uBAAuB;AAOhC;AAAA;AAAA;AAAA,SAAS,gBAAgB;AAAA,MACvB,WAAW,CAAC,UAAU;AAAA,MACtB,WAAW,CAAC,UAAU;AAAA,IACxB;AAME,SAAK,UAAU;AACf,SAAK,SAAS;AAEd,SAAK,4BAAwB,uDAA+B;AAAA,MAC1D,aAAa;AAAA,MACb,gBAAgB,WAAS,MAAM,MAAM;AAAA,IACvC,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,GAA+B;AAnGjC;AAoGI,UAAM,mBACH,eAAM,6CAAqB;AAAA,MAC1B,UAAU,KAAK;AAAA,MACf;AAAA,MACA,QAAQ;AAAA,IACV,CAAC,MAJA,YAIM,CAAC;AAEV,UAAM,WAAW,gCAAgC,MAAM;AAEvD,UAAM,cAAiC,CAAC;AACxC,QAAI,QAAQ,MAAM;AAChB,kBAAY,KAAK,EAAE,MAAM,eAAe,SAAS,OAAO,CAAC;AAAA,IAC3D;AACA,QAAI,QAAQ,MAAM;AAChB,kBAAY,KAAK,EAAE,MAAM,eAAe,SAAS,OAAO,CAAC;AAAA,IAC3D;AAEA,UAAM;AAAA,MACJ,OAAO;AAAA,MACP,YAAY;AAAA,MACZ;AAAA,IACF,IAAI,aAAa,EAAE,OAAO,WAAW,CAAC;AAGtC,UAAM,WAAW,gBAAgB;AAOjC,QAAI;AACJ,QAAI,gBAAgB,qBAAqB,aAAa;AACpD,UAAI,4BAA4B,KAAK,OAAO,GAAG;AAC7C,eAAO;AAAA,MACT,OAAO;AACL,oBAAY,KAAK;AAAA,UACf,MAAM;AAAA,UACN,SAAS,2DAA2D,KAAK,OAAO;AAAA,QAClF,CAAC;AAAA,MACH;AAAA,IACF;AAEA,QAAI;AACJ,SAAI,iDAAgB,UAAS,QAAQ;AACnC,UACE,KAAK,OAAO,8BAA8B,QAC1C,eAAe,UAAU,MACzB;AAMA,cAAM,EAAE,SAAS,UAAU,GAAG,0BAA0B,IACtD,eAAe;AACjB,0BAAkB;AAAA,UAChB,MAAM;AAAA,UACN,aAAa;AAAA,YACX,OAAM,oBAAe,SAAf,YAAuB;AAAA,YAC7B,QAAQ;AAAA,YACR,GAAI,eAAe,eAAe,QAAQ;AAAA,cACxC,aAAa,eAAe;AAAA,YAC9B;AAAA,UACF;AAAA,QACF;AAAA,MACF,OAAO;AACL,0BAAkB,EAAE,MAAM,cAAc;AAAA,MAC1C;AAAA,IACF;AAEA,WAAO;AAAA,MACL,MAAM;AAAA,QACJ,OAAO,KAAK;AAAA,QACZ,YAAY;AAAA,QACZ;AAAA,QACA,OAAO;AAAA,QACP,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB;AAAA,QACA,MAAM;AAAA,QACN;AAAA,QACA,OAAO;AAAA,QACP,aAAa;AAAA,QACb,GAAI,YAAY,QAAQ,QAAQ,OAC5B;AAAA,UACE,UAAU;AAAA,YACR,IAAI,qCAAU,SAAQ,QAAQ,EAAE,MAAM,SAAS,KAAK;AAAA,YACpD,IAAI,qCAAU,kBAAiB,UAAa;AAAA,cAC1C,eAAe,SAAS;AAAA,YAC1B;AAAA,YACA,GAAI,QAAQ,QAAQ,EAAE,KAAK;AAAA,UAC7B;AAAA,QACF,IACA,CAAC;AAAA,QACL,GAAI,gBAAgB,mBAAmB,QAAQ;AAAA,UAC7C,kBAAkB,gBAAgB;AAAA,QACpC;AAAA,QACA,GAAI,gBAAgB,kBAAkB,QAAQ;AAAA,UAC5C,kBAAkB,gBAAgB;AAAA,QACpC;AAAA,QACA,GAAI,gBAAgB,oBAAoB,QAAQ;AAAA,UAC9C,mBAAmB,gBAAgB;AAAA,QACrC;AAAA,MACF;AAAA,MACA,UAAU,CAAC,GAAG,aAAa,GAAG,YAAY;AAAA,IAC5C;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,SACwC;AAnN5C;AAoNI,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,wCAAe,gBAAK,QAAO,YAAZ,6BAAyB,QAAQ,OAAO;AAAA,MAChE,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,EAAE,MAAM,aAAa,MAAM,UAAU,CAAC;AAAA,IACrD;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,QAAO,cAAS,SAAS,cAAlB,YAA+B;AAAA,QACxC,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;AAAA,QACZ,SAAS,0BAA0B,OAAO,aAAa;AAAA,QACvD,MAAK,YAAO,kBAAP,YAAwB;AAAA,MAC/B;AAAA,MACA,OAAO,2BAA2B,aAAa,KAAK;AAAA,MACpD,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,SACsC;AAvR1C;AAwRI,UAAM,EAAE,MAAM,SAAS,IAAI,MAAM,KAAK,QAAQ,EAAE,GAAG,QAAQ,CAAC;AAE5D,UAAM,OAAO;AAAA,MACX,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,GAAI,KAAK,OAAO,gBAAgB;AAAA,QAC9B,gBAAgB,EAAE,eAAe,KAAK;AAAA,MACxC;AAAA,IACF;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,wCAAe,gBAAK,QAAO,YAAZ,6BAAyB,QAAQ,OAAO;AAAA,MAChE;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,YAKD,CAAC;AAEN,QAAI,eAA4C;AAAA,MAC9C,SAAS;AAAA,MACT,KAAK;AAAA,IACP;AACA,QAAI,QAA8C;AAClD,QAAI,eAAe;AACnB,QAAI,oBAAoB;AACxB,QAAI,eAAe;AAEnB,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;AA3UvC,gBAAAC,KAAAC,KAAA;AA6UY,gBAAI,QAAQ,kBAAkB;AAC5B,yBAAW,QAAQ,EAAE,MAAM,OAAO,UAAU,MAAM,SAAS,CAAC;AAAA,YAC9D;AAGA,gBAAI,CAAC,MAAM,SAAS;AAClB,6BAAe,EAAE,SAAS,SAAS,KAAK,OAAU;AAClD,yBAAW,QAAQ,EAAE,MAAM,SAAS,OAAO,MAAM,MAAM,CAAC;AACxD;AAAA,YACF;AACA,kBAAM,QAAQ,MAAM;AAGpB,gBAAI,WAAW,OAAO;AACpB,6BAAe,EAAE,SAAS,SAAS,KAAK,OAAU;AAClD,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,kBAAM,SAAS,MAAM,QAAQ,CAAC;AAE9B,iBAAI,iCAAQ,kBAAiB,MAAM;AACjC,6BAAe;AAAA,gBACb,SAAS,0BAA0B,OAAO,aAAa;AAAA,gBACvD,KAAK,OAAO;AAAA,cACd;AAAA,YACF;AAEA,iBAAI,iCAAQ,UAAS,MAAM;AACzB;AAAA,YACF;AAEA,kBAAM,QAAQ,OAAO;AAGrB,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,MAAM;AAE5B,kBAAI,mBAAmB;AACrB,2BAAW,QAAQ;AAAA,kBACjB,MAAM;AAAA,kBACN,IAAI;AAAA,gBACN,CAAC;AACD,oCAAoB;AAAA,cACtB;AAEA,yBAAW,iBAAiB,MAAM,YAAY;AAC5C,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,wBAAID,MAAA,cAAc,aAAd,gBAAAA,IAAwB,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,YAAWC,MAAA,cAAc,SAAS,cAAvB,OAAAA,MAAoC;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,QAChCA,UAAS,SAAS,UAAU,SAAS,GACrC;AAEA,+BAAW,QAAQ;AAAA,sBACjB,MAAM;AAAA,sBACN,IAAIA,UAAS;AAAA,sBACb,OAAOA,UAAS,SAAS;AAAA,oBAC3B,CAAC;AAAA,kBACH;AAEA;AAAA,gBACF;AAGA,sBAAM,WAAW,UAAU,KAAK;AAEhC,oBAAI,SAAS,aAAa;AACxB;AAAA,gBACF;AAEA,sBAAI,mBAAc,aAAd,mBAAwB,cAAa,MAAM;AAC7C,2BAAS,SAAS,aAChB,cAAc,SAAS;AAAA,gBAC3B;AAGA,2BAAW,QAAQ;AAAA,kBACjB,MAAM;AAAA,kBACN,IAAI,SAAS;AAAA,kBACb,QAAO,mBAAc,SAAS,cAAvB,YAAoC;AAAA,gBAC7C,CAAC;AAAA,cACH;AAAA,YACF;AAAA,UACF;AAAA,UAEA,MAAM,YAAY;AAChB,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,YAAY,SAAS;AAAA,gBACrB,UAAU,SAAS,SAAS;AAAA,gBAC5B,OAAO,SAAS,SAAS;AAAA,cAC3B,CAAC;AAAA,YACH;AAEA,uBAAW,QAAQ;AAAA,cACjB,MAAM;AAAA,cACN;AAAA,cACA,OAAO,2BAA2B,KAAK;AAAA,YACzC,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA,SAAS,EAAE,KAAK;AAAA,MAChB,UAAU,EAAE,SAAS,gBAAgB;AAAA,IACvC;AAAA,EACF;AACF;;;AS5hBO,IAAM,UACX,OACI,WACA;;;AVkDN,IAAM,iBAAiB;AAEhB,SAAS,gCACd,SACS;AACT,MAAI,QAAQ,WAAW,QAAQ,EAAG,QAAO;AACzC,SAAO;AACT;AAEO,SAAS,iBACd,UAAsC,CAAC,GACnB;AAlEtB;AAmEE,QAAM,cAAU,8CAAqB,aAAQ,YAAR,YAAmB,cAAc;AACtE,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,qBAAqB,OAAO;AAAA,EAC9B;AAEF,QAAM,kBAAkB,CAAC,YAAmC;AAC1D,WAAO,IAAI,4BAA4B,SAAS;AAAA,MAC9C,UAAU;AAAA,MACV,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAAA,MACpC,SAAS;AAAA,MACT,OAAO,QAAQ;AAAA,MACf,cAAc;AAAA,MACd,2BAA2B,gCAAgC,OAAO;AAAA,IACpE,CAAC;AAAA,EACH;AAEA,QAAM,WAAW,CAAC,YAAmC,gBAAgB,OAAO;AAE5E,WAAS,uBAAuB;AAChC,WAAS,YAAY;AACrB,WAAS,gBAAgB;AAEzB,WAAS,iBAAiB,CAAC,YAAoB;AAC7C,UAAM,IAAI,kCAAiB,EAAE,SAAS,WAAW,iBAAiB,CAAC;AAAA,EACrE;AAEA,WAAS,aAAa,CAAC,YAAoB;AACzC,UAAM,IAAI,kCAAiB,EAAE,SAAS,WAAW,aAAa,CAAC;AAAA,EACjE;AAEA,SAAO;AACT;AAEO,IAAM,aAAa,iBAAiB;","names":["import_provider","import_provider_utils","import_provider","import_provider_utils","import_provider_utils","import_v4","import_provider","import_provider","_a","_b","toolCall"]}
package/dist/index.mjs CHANGED
@@ -342,8 +342,93 @@ function getModelThinkingKeepSupport(modelId) {
342
342
 
343
343
  // src/moonshotai-prepare-tools.ts
344
344
  import {
345
- UnsupportedFunctionalityError as UnsupportedFunctionalityError2
345
+ UnsupportedFunctionalityError as UnsupportedFunctionalityError3
346
346
  } from "@ai-sdk/provider";
347
+
348
+ // src/normalize-json-schema-for-mfjs.ts
349
+ import { UnsupportedFunctionalityError as UnsupportedFunctionalityError2 } from "@ai-sdk/provider";
350
+ function isRecord(value) {
351
+ return typeof value === "object" && value !== null && !Array.isArray(value);
352
+ }
353
+ var SCHEMA_ARRAY_KEYS = ["allOf", "anyOf", "oneOf", "prefixItems"];
354
+ var SCHEMA_MAP_KEYS = [
355
+ "properties",
356
+ "patternProperties",
357
+ "$defs",
358
+ "dependentSchemas"
359
+ ];
360
+ var SCHEMA_SINGLE_KEYS = [
361
+ "additionalProperties",
362
+ "propertyNames",
363
+ "items",
364
+ "contains",
365
+ "not",
366
+ "if",
367
+ "then",
368
+ "else"
369
+ ];
370
+ function normalizeJsonSchemaForMFJS(schema) {
371
+ return normalizeDefinition(schema, true);
372
+ }
373
+ function normalizeDefinition(definition, isRoot) {
374
+ if (typeof definition === "boolean" || !isRecord(definition)) {
375
+ if (isRoot) {
376
+ throw new UnsupportedFunctionalityError2({
377
+ functionality: 'tool parameters must be a JSON Schema object with type "object" for moonshotai (MFJS)'
378
+ });
379
+ }
380
+ return definition;
381
+ }
382
+ if (isRoot && definition.type !== "object") {
383
+ throw new UnsupportedFunctionalityError2({
384
+ functionality: 'tool parameters must be a JSON Schema object with type "object" for moonshotai (MFJS)'
385
+ });
386
+ }
387
+ const result = { ...definition };
388
+ if (Array.isArray(result.items)) {
389
+ const tuple = result.items;
390
+ result.prefixItems = [
391
+ ...Array.isArray(result.prefixItems) ? result.prefixItems : [],
392
+ ...tuple.map((item) => normalizeDefinition(item, false))
393
+ ];
394
+ delete result.items;
395
+ } else if (isRecord(result.items)) {
396
+ result.items = normalizeDefinition(result.items, false);
397
+ }
398
+ if (typeof result.type === "string" && Array.isArray(result.anyOf)) {
399
+ const parentType = result.type;
400
+ delete result.type;
401
+ result.anyOf = result.anyOf.map(
402
+ (branch) => isRecord(branch) && branch.type == null ? { type: parentType, ...branch } : branch
403
+ );
404
+ }
405
+ for (const key of SCHEMA_ARRAY_KEYS) {
406
+ const value = result[key];
407
+ if (Array.isArray(value)) {
408
+ result[key] = value.map((item) => normalizeDefinition(item, false));
409
+ }
410
+ }
411
+ for (const key of SCHEMA_MAP_KEYS) {
412
+ const value = result[key];
413
+ if (isRecord(value)) {
414
+ result[key] = Object.fromEntries(
415
+ Object.entries(value).map(([k, v]) => [
416
+ k,
417
+ normalizeDefinition(v, false)
418
+ ])
419
+ );
420
+ }
421
+ }
422
+ for (const key of SCHEMA_SINGLE_KEYS) {
423
+ const value = result[key];
424
+ if (isRecord(value) || typeof value === "boolean") {
425
+ result[key] = normalizeDefinition(value, false);
426
+ }
427
+ }
428
+ return result;
429
+ }
430
+
431
+ // src/moonshotai-prepare-tools.ts
347
432
  function prepareTools({
348
433
  tools,
349
434
  toolChoice
@@ -366,7 +451,7 @@ function prepareTools({
366
451
  function: {
367
452
  name: tool.name,
368
453
  description: tool.description,
369
- parameters: tool.inputSchema,
454
+ parameters: normalizeJsonSchemaForMFJS(tool.inputSchema),
370
455
  ...tool.strict != null ? { strict: tool.strict } : {}
371
456
  }
372
457
  });
@@ -392,7 +477,7 @@ function prepareTools({
392
477
  };
393
478
  default: {
394
479
  const _exhaustiveCheck = type;
395
- throw new UnsupportedFunctionalityError2({
480
+ throw new UnsupportedFunctionalityError3({
396
481
  functionality: `tool choice type: ${_exhaustiveCheck}`
397
482
  });
398
483
  }
@@ -786,7 +871,7 @@ var MoonshotAIChatLanguageModel = class {
786
871
  };
787
872
 
788
873
  // src/version.ts
789
- var VERSION = true ? "2.0.46" : "0.0.0-test";
874
+ var VERSION = true ? "2.0.48" : "0.0.0-test";
790
875
 
791
876
  // src/moonshotai-provider.ts
792
877
  var defaultBaseURL = "https://api.moonshot.ai/v1";
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/moonshotai-provider.ts","../src/moonshotai-chat-language-model.ts","../src/convert-to-moonshotai-chat-messages.ts","../src/convert-moonshotai-chat-usage.ts","../src/get-response-metadata.ts","../src/map-moonshotai-finish-reason.ts","../src/moonshotai-chat-api-types.ts","../src/moonshotai-chat-options.ts","../src/moonshotai-prepare-tools.ts","../src/version.ts"],"sourcesContent":["import {\n NoSuchModelError,\n type LanguageModelV3,\n type ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { MoonshotAIChatLanguageModel } from './moonshotai-chat-language-model';\nimport type { MoonshotAIChatModelId } from './moonshotai-chat-options';\nimport { VERSION } from './version';\n\nexport type { MoonshotAIErrorData } from './moonshotai-chat-api-types';\n\nexport interface MoonshotAIProviderSettings {\n /**\n * Moonshot API key. Default value is taken from the `MOONSHOT_API_KEY`\n * environment variable.\n */\n apiKey?: string;\n /**\n * Base URL for the API calls.\n */\n baseURL?: string;\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\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 MoonshotAIProvider extends ProviderV3 {\n /**\n * Creates a model for text generation.\n */\n (modelId: MoonshotAIChatModelId): LanguageModelV3;\n\n /**\n * Creates a chat model for text generation.\n */\n chatModel(modelId: MoonshotAIChatModelId): LanguageModelV3;\n\n /**\n * Creates a language model for text generation.\n */\n languageModel(modelId: MoonshotAIChatModelId): LanguageModelV3;\n}\n\nconst defaultBaseURL = 'https://api.moonshot.ai/v1';\n\nexport function getModelStructuredOutputSupport(\n modelId: MoonshotAIChatModelId,\n): boolean {\n if (modelId.startsWith('kimi-k')) return true;\n return false;\n}\n\nexport function createMoonshotAI(\n options: MoonshotAIProviderSettings = {},\n): MoonshotAIProvider {\n const baseURL = withoutTrailingSlash(options.baseURL ?? defaultBaseURL);\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'MOONSHOT_API_KEY',\n description: 'Moonshot API key',\n })}`,\n ...options.headers,\n },\n `ai-sdk/moonshotai/${VERSION}`,\n );\n\n const createChatModel = (modelId: MoonshotAIChatModelId) => {\n return new MoonshotAIChatLanguageModel(modelId, {\n provider: 'moonshotai.chat',\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n includeUsage: true,\n supportsStructuredOutputs: getModelStructuredOutputSupport(modelId),\n });\n };\n\n const provider = (modelId: MoonshotAIChatModelId) => createChatModel(modelId);\n\n provider.specificationVersion = 'v3' as const;\n provider.chatModel = createChatModel;\n provider.languageModel = createChatModel;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\nexport const moonshotai = createMoonshotAI();\n","import {\n InvalidResponseDataError,\n type APICallError,\n type LanguageModelV3,\n type LanguageModelV3CallOptions,\n type LanguageModelV3Content,\n type LanguageModelV3FinishReason,\n type LanguageModelV3GenerateResult,\n type LanguageModelV3StreamPart,\n type LanguageModelV3StreamResult,\n type SharedV3Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n generateId,\n parseProviderOptions,\n postJsonToApi,\n type FetchFunction,\n type InferSchema,\n type ParseResult,\n type ResponseHandler,\n} from '@ai-sdk/provider-utils';\nimport { convertToMoonshotAIChatMessages } from './convert-to-moonshotai-chat-messages';\nimport { convertMoonshotAIChatUsage } from './convert-moonshotai-chat-usage';\nimport { getResponseMetadata } from './get-response-metadata';\nimport { mapMoonshotAIFinishReason } from './map-moonshotai-finish-reason';\nimport {\n moonshotAIChatChunkSchema,\n moonshotAIChatResponseSchema,\n moonshotAIErrorSchema,\n type MoonshotAIChatTokenUsage,\n} from './moonshotai-chat-api-types';\nimport {\n getModelThinkingKeepSupport,\n moonshotaiLanguageModelOptions,\n type MoonshotAIChatModelId,\n} from './moonshotai-chat-options';\nimport { prepareTools } from './moonshotai-prepare-tools';\n\nexport type MoonshotAIChatConfig = {\n provider: string;\n headers?: () => Record<string, string | undefined>;\n url: (options: { modelId: string; path: string }) => string;\n fetch?: FetchFunction;\n includeUsage?: boolean;\n supportsStructuredOutputs?: boolean;\n};\n\nexport class MoonshotAIChatLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = 'v3';\n\n readonly modelId: MoonshotAIChatModelId;\n\n // Moonshot AI does not fetch external URLs; the AI SDK downloads and\n // inlines URL file parts instead. ms:// file references from the Moonshot\n // Files API are passed through natively.\n readonly supportedUrls = {\n 'image/*': [/^ms:\\/\\//],\n 'video/*': [/^ms:\\/\\//],\n };\n\n private readonly config: MoonshotAIChatConfig;\n private readonly failedResponseHandler: ResponseHandler<APICallError>;\n\n constructor(modelId: MoonshotAIChatModelId, config: MoonshotAIChatConfig) {\n this.modelId = modelId;\n this.config = config;\n\n this.failedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: moonshotAIErrorSchema,\n errorToMessage: error => 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 seed,\n toolChoice,\n tools,\n }: LanguageModelV3CallOptions) {\n const moonshotOptions =\n (await parseProviderOptions({\n provider: this.providerOptionsName,\n providerOptions,\n schema: moonshotaiLanguageModelOptions,\n })) ?? {};\n\n const messages = convertToMoonshotAIChatMessages(prompt);\n\n const allWarnings: SharedV3Warning[] = [];\n if (topK != null) {\n allWarnings.push({ type: 'unsupported', feature: 'topK' });\n }\n if (seed != null) {\n allWarnings.push({ type: 'unsupported', feature: 'seed' });\n }\n\n const {\n tools: moonshotTools,\n toolChoice: moonshotToolChoice,\n toolWarnings,\n } = prepareTools({ tools, toolChoice });\n\n // Thinking is configured through explicit provider options only.\n const thinking = moonshotOptions.thinking;\n\n // Moonshot has no reasoning_history field; the API silently ignores it\n // (verified against the live API). Preserved Thinking maps to\n // thinking.keep, which only accepts 'all' and only on some models\n // (verified: k2.6, k2.7-code, k3 accept it; k2.5 rejects it). Other\n // reasoningHistory values use the server default.\n let keep: 'all' | undefined;\n if (moonshotOptions.reasoningHistory === 'preserved') {\n if (getModelThinkingKeepSupport(this.modelId)) {\n keep = 'all';\n } else {\n allWarnings.push({\n type: 'unsupported',\n feature: `reasoningHistory 'preserved' is not supported by model \"${this.modelId}\"`,\n });\n }\n }\n\n let response_format: Record<string, unknown> | undefined;\n if (responseFormat?.type === 'json') {\n if (\n this.config.supportsStructuredOutputs === true &&\n responseFormat.schema != null\n ) {\n // kimi-k2.5 produces nonsensical output when the top-level `$schema`\n // keyword injected by the AI SDK is present, even though it otherwise\n // supports structured outputs. Strip it from the schema sent to\n // Moonshot; the full original schema is still used for result\n // validation.\n const { $schema: _$schema, ...schemaWithoutDollarSchema } =\n responseFormat.schema;\n response_format = {\n type: 'json_schema',\n json_schema: {\n name: responseFormat.name ?? 'response',\n schema: schemaWithoutDollarSchema,\n ...(responseFormat.description != null && {\n description: responseFormat.description,\n }),\n },\n };\n } else {\n response_format = { type: 'json_object' };\n }\n }\n\n return {\n args: {\n model: this.modelId,\n max_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n frequency_penalty: frequencyPenalty,\n presence_penalty: presencePenalty,\n response_format,\n stop: stopSequences,\n messages,\n tools: moonshotTools,\n tool_choice: moonshotToolChoice,\n ...(thinking != null || keep != null\n ? {\n thinking: {\n ...(thinking?.type != null && { type: thinking.type }),\n ...(thinking?.budgetTokens !== undefined && {\n budget_tokens: thinking.budgetTokens,\n }),\n ...(keep != null && { keep }),\n },\n }\n : {}),\n ...(moonshotOptions.reasoningEffort != null && {\n reasoning_effort: moonshotOptions.reasoningEffort,\n }),\n ...(moonshotOptions.promptCacheKey != null && {\n prompt_cache_key: moonshotOptions.promptCacheKey,\n }),\n ...(moonshotOptions.safetyIdentifier != null && {\n safety_identifier: moonshotOptions.safetyIdentifier,\n }),\n },\n warnings: [...allWarnings, ...toolWarnings],\n };\n }\n\n async doGenerate(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\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 moonshotAIChatResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const choice = responseBody.choices[0];\n const content: Array<LanguageModelV3Content> = [];\n\n // reasoning content (before text):\n const reasoning = choice.message.reasoning_content;\n if (reasoning != null && reasoning.length > 0) {\n content.push({ type: 'reasoning', text: reasoning });\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: {\n unified: mapMoonshotAIFinishReason(choice.finish_reason),\n raw: choice.finish_reason ?? undefined,\n },\n usage: convertMoonshotAIChatUsage(responseBody.usage),\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: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\n const { args, warnings } = await this.getArgs({ ...options });\n\n const body = {\n ...args,\n stream: true,\n ...(this.config.includeUsage && {\n stream_options: { include_usage: true },\n }),\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 moonshotAIChatChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n hasFinished: boolean;\n }> = [];\n\n let finishReason: LanguageModelV3FinishReason = {\n unified: 'other',\n raw: undefined,\n };\n let usage: MoonshotAIChatTokenUsage | undefined = undefined;\n let isFirstChunk = true;\n let isActiveReasoning = false;\n let isActiveText = false;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<InferSchema<typeof moonshotAIChatChunkSchema>>,\n LanguageModelV3StreamPart\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 = { unified: 'error', raw: undefined };\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 = { unified: 'error', raw: undefined };\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 const choice = value.choices[0];\n\n if (choice?.finish_reason != null) {\n finishReason = {\n unified: mapMoonshotAIFinishReason(choice.finish_reason),\n raw: choice.finish_reason,\n };\n }\n\n if (choice?.delta == null) {\n return;\n }\n\n const delta = choice.delta;\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) {\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 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 toolCall.function.arguments.length > 0\n ) {\n // send delta if the argument text has already started:\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCall.function.arguments,\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 }\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,\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage: convertMoonshotAIChatUsage(usage),\n });\n },\n }),\n ),\n request: { body },\n response: { headers: responseHeaders },\n };\n }\n}\n","import {\n UnsupportedFunctionalityError,\n type LanguageModelV3Prompt,\n} from '@ai-sdk/provider';\nimport {\n convertBase64ToUint8Array,\n convertToBase64,\n} from '@ai-sdk/provider-utils';\n\nimport type { MoonshotAIMessages } from './moonshotai-chat-api-types';\n\n// Moonshot AI chat completions accepts text, image_url, and video_url content\n// parts only. Anything else (audio, PDF, other file types) throws here rather\n// than being rejected by the API with a 400.\nexport function convertToMoonshotAIChatMessages(\n prompt: LanguageModelV3Prompt,\n): MoonshotAIMessages {\n const messages: MoonshotAIMessages = [];\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n messages.push({ role: 'system', content });\n break;\n }\n\n case 'user': {\n if (content.length === 1 && content[0].type === 'text') {\n messages.push({\n role: 'user',\n content: content[0].text,\n });\n break;\n }\n\n messages.push({\n role: 'user',\n content: content.map(part => {\n switch (part.type) {\n case 'text': {\n return { type: 'text', text: part.text };\n }\n case 'file': {\n if (part.mediaType.startsWith('image/')) {\n const mediaType =\n part.mediaType === 'image/*'\n ? 'image/jpeg'\n : part.mediaType;\n\n return {\n type: 'image_url' as const,\n image_url: {\n url:\n part.data instanceof URL\n ? part.data.toString()\n : `data:${mediaType};base64,${convertToBase64(part.data)}`,\n },\n };\n }\n\n if (part.mediaType.startsWith('video/')) {\n const mediaType =\n part.mediaType === 'video/*' ? 'video/mp4' : part.mediaType;\n\n return {\n type: 'video_url' as const,\n video_url: {\n url:\n part.data instanceof URL\n ? part.data.toString()\n : `data:${mediaType};base64,${convertToBase64(part.data)}`,\n },\n };\n }\n\n if (part.mediaType.startsWith('text/')) {\n const textContent =\n part.data instanceof URL\n ? part.data.toString()\n : typeof part.data === 'string'\n ? new TextDecoder().decode(\n convertBase64ToUint8Array(part.data),\n )\n : new TextDecoder().decode(part.data);\n\n return {\n type: 'text' as const,\n text: textContent,\n };\n }\n\n throw new UnsupportedFunctionalityError({\n functionality: `file part media type ${part.mediaType}`,\n });\n }\n }\n }),\n });\n\n break;\n }\n\n case 'assistant': {\n let text = '';\n let reasoning = '';\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 reasoning += part.text;\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 messages.push({\n role: 'assistant',\n content: toolCalls.length > 0 ? text || null : text,\n ...(reasoning.length > 0 ? { reasoning_content: reasoning } : {}),\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n });\n\n break;\n }\n\n case 'tool': {\n for (const toolResponse of content) {\n if (toolResponse.type === 'tool-approval-response') {\n continue;\n }\n\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 'execution-denied':\n contentValue = output.reason ?? 'Tool call execution denied.';\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 const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n","import type { LanguageModelV3Usage } from '@ai-sdk/provider';\n\nexport function convertMoonshotAIChatUsage(\n usage:\n | {\n prompt_tokens?: number | null;\n completion_tokens?: number | null;\n cached_tokens?: number | null;\n prompt_tokens_details?: {\n cached_tokens?: number | null;\n } | null;\n completion_tokens_details?: {\n reasoning_tokens?: number | null;\n } | null;\n }\n | undefined\n | null,\n): LanguageModelV3Usage {\n if (usage == null) {\n return {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n raw: undefined,\n };\n }\n\n const promptTokens = usage.prompt_tokens ?? 0;\n const completionTokens = usage.completion_tokens ?? 0;\n\n const cacheReadTokens =\n usage.cached_tokens ?? usage.prompt_tokens_details?.cached_tokens ?? 0;\n\n const reasoningTokens =\n usage.completion_tokens_details?.reasoning_tokens ?? 0;\n\n return {\n inputTokens: {\n total: promptTokens,\n noCache: promptTokens - cacheReadTokens,\n cacheRead: cacheReadTokens,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: completionTokens,\n text: completionTokens - reasoningTokens,\n reasoning: reasoningTokens,\n },\n raw: usage,\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 { LanguageModelV3FinishReason } from '@ai-sdk/provider';\n\nexport function mapMoonshotAIFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV3FinishReason['unified'] {\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 'function_call':\n case 'tool_calls':\n return 'tool-calls';\n default:\n return 'other';\n }\n}\n","import { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport type MoonshotAIMessages = Array<MoonshotAIMessage>;\n\nexport type MoonshotAIMessage =\n | MoonshotAISystemMessage\n | MoonshotAIUserMessage\n | MoonshotAIAssistantMessage\n | MoonshotAIToolMessage;\n\nexport interface MoonshotAISystemMessage {\n role: 'system';\n content: string;\n}\n\nexport interface MoonshotAIUserMessage {\n role: 'user';\n content: string | Array<MoonshotAIContentPart>;\n}\n\nexport type MoonshotAIContentPart =\n | MoonshotAIContentPartText\n | MoonshotAIContentPartImage\n | MoonshotAIContentPartVideo;\n\nexport interface MoonshotAIContentPartText {\n type: 'text';\n text: string;\n}\n\nexport interface MoonshotAIContentPartImage {\n type: 'image_url';\n image_url: { url: string };\n}\n\nexport interface MoonshotAIContentPartVideo {\n type: 'video_url';\n video_url: { url: string };\n}\n\nexport interface MoonshotAIAssistantMessage {\n role: 'assistant';\n content?: string | null;\n reasoning_content?: string;\n tool_calls?: Array<MoonshotAIMessageToolCall>;\n}\n\nexport interface MoonshotAIMessageToolCall {\n type: 'function';\n id: string;\n function: {\n arguments: string;\n name: string;\n };\n}\n\nexport interface MoonshotAIToolMessage {\n role: 'tool';\n content: string;\n tool_call_id: string;\n}\n\n// Schemas below are limited versions focused on what the implementation\n// needs. This limits breakages when the API changes and increases efficiency.\n\nconst tokenUsageSchema = z\n .object({\n prompt_tokens: z.number().nullish(),\n completion_tokens: z.number().nullish(),\n cached_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 MoonshotAIChatTokenUsage = z.infer<typeof tokenUsageSchema>;\n\nexport const moonshotAIErrorSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string().nullish(),\n }),\n});\n\nexport type MoonshotAIErrorData = z.infer<typeof moonshotAIErrorSchema>;\n\nexport const moonshotAIChatResponseSchema = z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\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 function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .nullish(),\n }),\n finish_reason: z.string().nullish(),\n }),\n ),\n usage: tokenUsageSchema,\n});\n\nexport const moonshotAIChatChunkSchema = 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 choices: z.array(\n z.object({\n delta: z\n .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 index: z.number(),\n id: z.string().nullish(),\n function: z.object({\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n }),\n }),\n )\n .nullish(),\n })\n .nullish(),\n finish_reason: z.string().nullish(),\n }),\n ),\n usage: tokenUsageSchema,\n }),\n moonshotAIErrorSchema,\n ]),\n ),\n);\n","import { z } from 'zod/v4';\n\nexport type MoonshotAIChatModelId =\n | 'moonshot-v1-8k'\n | 'moonshot-v1-32k'\n | 'moonshot-v1-128k'\n | 'kimi-k2'\n | 'kimi-k2-0905'\n | 'kimi-k2-thinking'\n | 'kimi-k2-thinking-turbo'\n | 'kimi-k2-turbo'\n | 'kimi-k2.5'\n | 'kimi-k3'\n | (string & {});\n\nexport const moonshotaiLanguageModelOptions = z.object({\n /**\n * Reasoning effort for Kimi K3.\n */\n reasoningEffort: z.enum(['low', 'high', 'max']).optional(),\n\n thinking: z\n .object({\n type: z.enum(['enabled', 'disabled']).optional(),\n budgetTokens: z.number().int().min(1024).optional(),\n })\n .optional(),\n\n reasoningHistory: z.enum(['disabled', 'interleaved', 'preserved']).optional(),\n\n /**\n * Used to cache responses for similar requests to optimize cache hit rates.\n * Typically a session or task id.\n */\n promptCacheKey: z.string().optional(),\n\n /**\n * A stable identifier used to help Moonshot detect users violating usage\n * policies. Recommended to hash the username or email address.\n */\n safetyIdentifier: z.string().optional(),\n});\n\nexport type MoonshotAILanguageModelOptions = z.infer<\n typeof moonshotaiLanguageModelOptions\n>;\n\n/**\n * Whether the model accepts `thinking.keep` (Preserved Thinking). Verified\n * against the live API: kimi-k2.6, kimi-k2.7-code(+highspeed), and kimi-k3\n * accept `keep: 'all'`; other models reject it with a 400.\n */\nexport function getModelThinkingKeepSupport(\n modelId: MoonshotAIChatModelId,\n): boolean {\n return (\n modelId === 'kimi-k2.6' ||\n modelId === 'kimi-k3' ||\n modelId.startsWith('kimi-k2.7-code')\n );\n}\n","import {\n UnsupportedFunctionalityError,\n type LanguageModelV3CallOptions,\n type SharedV3Warning,\n} from '@ai-sdk/provider';\n\nexport function prepareTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV3CallOptions['tools'];\n toolChoice?: LanguageModelV3CallOptions['toolChoice'];\n}): {\n tools:\n | undefined\n | Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n strict?: boolean;\n };\n }>;\n toolChoice:\n | { type: 'function'; function: { name: string } }\n | 'auto'\n | 'none'\n | 'required'\n | undefined;\n toolWarnings: SharedV3Warning[];\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: SharedV3Warning[] = [];\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined, toolWarnings };\n }\n\n const moonshotTools: Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n strict?: boolean;\n };\n }> = [];\n\n for (const tool of tools) {\n if (tool.type === 'provider') {\n toolWarnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n });\n } else {\n moonshotTools.push({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n ...(tool.strict != null ? { strict: tool.strict } : {}),\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: moonshotTools, 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: moonshotTools, toolChoice: type, toolWarnings };\n case 'tool':\n return {\n tools: moonshotTools,\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","// 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":["z","UnsupportedFunctionalityError","_a","_b","toolCall"]}
1
+ {"version":3,"sources":["../src/moonshotai-provider.ts","../src/moonshotai-chat-language-model.ts","../src/convert-to-moonshotai-chat-messages.ts","../src/convert-moonshotai-chat-usage.ts","../src/get-response-metadata.ts","../src/map-moonshotai-finish-reason.ts","../src/moonshotai-chat-api-types.ts","../src/moonshotai-chat-options.ts","../src/moonshotai-prepare-tools.ts","../src/normalize-json-schema-for-mfjs.ts","../src/version.ts"],"sourcesContent":["import {\n NoSuchModelError,\n type LanguageModelV3,\n type ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { MoonshotAIChatLanguageModel } from './moonshotai-chat-language-model';\nimport type { MoonshotAIChatModelId } from './moonshotai-chat-options';\nimport { VERSION } from './version';\n\nexport type { MoonshotAIErrorData } from './moonshotai-chat-api-types';\n\nexport interface MoonshotAIProviderSettings {\n /**\n * Moonshot API key. Default value is taken from the `MOONSHOT_API_KEY`\n * environment variable.\n */\n apiKey?: string;\n /**\n * Base URL for the API calls.\n */\n baseURL?: string;\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\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 MoonshotAIProvider extends ProviderV3 {\n /**\n * Creates a model for text generation.\n */\n (modelId: MoonshotAIChatModelId): LanguageModelV3;\n\n /**\n * Creates a chat model for text generation.\n */\n chatModel(modelId: MoonshotAIChatModelId): LanguageModelV3;\n\n /**\n * Creates a language model for text generation.\n */\n languageModel(modelId: MoonshotAIChatModelId): LanguageModelV3;\n}\n\nconst defaultBaseURL = 'https://api.moonshot.ai/v1';\n\nexport function getModelStructuredOutputSupport(\n modelId: MoonshotAIChatModelId,\n): boolean {\n if (modelId.startsWith('kimi-k')) return true;\n return false;\n}\n\nexport function createMoonshotAI(\n options: MoonshotAIProviderSettings = {},\n): MoonshotAIProvider {\n const baseURL = withoutTrailingSlash(options.baseURL ?? defaultBaseURL);\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'MOONSHOT_API_KEY',\n description: 'Moonshot API key',\n })}`,\n ...options.headers,\n },\n `ai-sdk/moonshotai/${VERSION}`,\n );\n\n const createChatModel = (modelId: MoonshotAIChatModelId) => {\n return new MoonshotAIChatLanguageModel(modelId, {\n provider: 'moonshotai.chat',\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n includeUsage: true,\n supportsStructuredOutputs: getModelStructuredOutputSupport(modelId),\n });\n };\n\n const provider = (modelId: MoonshotAIChatModelId) => createChatModel(modelId);\n\n provider.specificationVersion = 'v3' as const;\n provider.chatModel = createChatModel;\n provider.languageModel = createChatModel;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\nexport const moonshotai = createMoonshotAI();\n","import {\n InvalidResponseDataError,\n type APICallError,\n type LanguageModelV3,\n type LanguageModelV3CallOptions,\n type LanguageModelV3Content,\n type LanguageModelV3FinishReason,\n type LanguageModelV3GenerateResult,\n type LanguageModelV3StreamPart,\n type LanguageModelV3StreamResult,\n type SharedV3Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n generateId,\n parseProviderOptions,\n postJsonToApi,\n type FetchFunction,\n type InferSchema,\n type ParseResult,\n type ResponseHandler,\n} from '@ai-sdk/provider-utils';\nimport { convertToMoonshotAIChatMessages } from './convert-to-moonshotai-chat-messages';\nimport { convertMoonshotAIChatUsage } from './convert-moonshotai-chat-usage';\nimport { getResponseMetadata } from './get-response-metadata';\nimport { mapMoonshotAIFinishReason } from './map-moonshotai-finish-reason';\nimport {\n moonshotAIChatChunkSchema,\n moonshotAIChatResponseSchema,\n moonshotAIErrorSchema,\n type MoonshotAIChatTokenUsage,\n} from './moonshotai-chat-api-types';\nimport {\n getModelThinkingKeepSupport,\n moonshotaiLanguageModelOptions,\n type MoonshotAIChatModelId,\n} from './moonshotai-chat-options';\nimport { prepareTools } from './moonshotai-prepare-tools';\n\nexport type MoonshotAIChatConfig = {\n provider: string;\n headers?: () => Record<string, string | undefined>;\n url: (options: { modelId: string; path: string }) => string;\n fetch?: FetchFunction;\n includeUsage?: boolean;\n supportsStructuredOutputs?: boolean;\n};\n\nexport class MoonshotAIChatLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = 'v3';\n\n readonly modelId: MoonshotAIChatModelId;\n\n // Moonshot AI does not fetch external URLs; the AI SDK downloads and\n // inlines URL file parts instead. ms:// file references from the Moonshot\n // Files API are passed through natively.\n readonly supportedUrls = {\n 'image/*': [/^ms:\\/\\//],\n 'video/*': [/^ms:\\/\\//],\n };\n\n private readonly config: MoonshotAIChatConfig;\n private readonly failedResponseHandler: ResponseHandler<APICallError>;\n\n constructor(modelId: MoonshotAIChatModelId, config: MoonshotAIChatConfig) {\n this.modelId = modelId;\n this.config = config;\n\n this.failedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: moonshotAIErrorSchema,\n errorToMessage: error => 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 seed,\n toolChoice,\n tools,\n }: LanguageModelV3CallOptions) {\n const moonshotOptions =\n (await parseProviderOptions({\n provider: this.providerOptionsName,\n providerOptions,\n schema: moonshotaiLanguageModelOptions,\n })) ?? {};\n\n const messages = convertToMoonshotAIChatMessages(prompt);\n\n const allWarnings: SharedV3Warning[] = [];\n if (topK != null) {\n allWarnings.push({ type: 'unsupported', feature: 'topK' });\n }\n if (seed != null) {\n allWarnings.push({ type: 'unsupported', feature: 'seed' });\n }\n\n const {\n tools: moonshotTools,\n toolChoice: moonshotToolChoice,\n toolWarnings,\n } = prepareTools({ tools, toolChoice });\n\n // Thinking is configured through explicit provider options only.\n const thinking = moonshotOptions.thinking;\n\n // Moonshot has no reasoning_history field; the API silently ignores it\n // (verified against the live API). Preserved Thinking maps to\n // thinking.keep, which only accepts 'all' and only on some models\n // (verified: k2.6, k2.7-code, k3 accept it; k2.5 rejects it). Other\n // reasoningHistory values use the server default.\n let keep: 'all' | undefined;\n if (moonshotOptions.reasoningHistory === 'preserved') {\n if (getModelThinkingKeepSupport(this.modelId)) {\n keep = 'all';\n } else {\n allWarnings.push({\n type: 'unsupported',\n feature: `reasoningHistory 'preserved' is not supported by model \"${this.modelId}\"`,\n });\n }\n }\n\n let response_format: Record<string, unknown> | undefined;\n if (responseFormat?.type === 'json') {\n if (\n this.config.supportsStructuredOutputs === true &&\n responseFormat.schema != null\n ) {\n // kimi-k2.5 produces nonsensical output when the top-level `$schema`\n // keyword injected by the AI SDK is present, even though it otherwise\n // supports structured outputs. Strip it from the schema sent to\n // Moonshot; the full original schema is still used for result\n // validation.\n const { $schema: _$schema, ...schemaWithoutDollarSchema } =\n responseFormat.schema;\n response_format = {\n type: 'json_schema',\n json_schema: {\n name: responseFormat.name ?? 'response',\n schema: schemaWithoutDollarSchema,\n ...(responseFormat.description != null && {\n description: responseFormat.description,\n }),\n },\n };\n } else {\n response_format = { type: 'json_object' };\n }\n }\n\n return {\n args: {\n model: this.modelId,\n max_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n frequency_penalty: frequencyPenalty,\n presence_penalty: presencePenalty,\n response_format,\n stop: stopSequences,\n messages,\n tools: moonshotTools,\n tool_choice: moonshotToolChoice,\n ...(thinking != null || keep != null\n ? {\n thinking: {\n ...(thinking?.type != null && { type: thinking.type }),\n ...(thinking?.budgetTokens !== undefined && {\n budget_tokens: thinking.budgetTokens,\n }),\n ...(keep != null && { keep }),\n },\n }\n : {}),\n ...(moonshotOptions.reasoningEffort != null && {\n reasoning_effort: moonshotOptions.reasoningEffort,\n }),\n ...(moonshotOptions.promptCacheKey != null && {\n prompt_cache_key: moonshotOptions.promptCacheKey,\n }),\n ...(moonshotOptions.safetyIdentifier != null && {\n safety_identifier: moonshotOptions.safetyIdentifier,\n }),\n },\n warnings: [...allWarnings, ...toolWarnings],\n };\n }\n\n async doGenerate(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\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 moonshotAIChatResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const choice = responseBody.choices[0];\n const content: Array<LanguageModelV3Content> = [];\n\n // reasoning content (before text):\n const reasoning = choice.message.reasoning_content;\n if (reasoning != null && reasoning.length > 0) {\n content.push({ type: 'reasoning', text: reasoning });\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: {\n unified: mapMoonshotAIFinishReason(choice.finish_reason),\n raw: choice.finish_reason ?? undefined,\n },\n usage: convertMoonshotAIChatUsage(responseBody.usage),\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: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\n const { args, warnings } = await this.getArgs({ ...options });\n\n const body = {\n ...args,\n stream: true,\n ...(this.config.includeUsage && {\n stream_options: { include_usage: true },\n }),\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 moonshotAIChatChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n hasFinished: boolean;\n }> = [];\n\n let finishReason: LanguageModelV3FinishReason = {\n unified: 'other',\n raw: undefined,\n };\n let usage: MoonshotAIChatTokenUsage | undefined = undefined;\n let isFirstChunk = true;\n let isActiveReasoning = false;\n let isActiveText = false;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<InferSchema<typeof moonshotAIChatChunkSchema>>,\n LanguageModelV3StreamPart\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 = { unified: 'error', raw: undefined };\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 = { unified: 'error', raw: undefined };\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 const choice = value.choices[0];\n\n if (choice?.finish_reason != null) {\n finishReason = {\n unified: mapMoonshotAIFinishReason(choice.finish_reason),\n raw: choice.finish_reason,\n };\n }\n\n if (choice?.delta == null) {\n return;\n }\n\n const delta = choice.delta;\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) {\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 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 toolCall.function.arguments.length > 0\n ) {\n // send delta if the argument text has already started:\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCall.function.arguments,\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 }\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,\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage: convertMoonshotAIChatUsage(usage),\n });\n },\n }),\n ),\n request: { body },\n response: { headers: responseHeaders },\n };\n }\n}\n","import {\n UnsupportedFunctionalityError,\n type LanguageModelV3Prompt,\n} from '@ai-sdk/provider';\nimport {\n convertBase64ToUint8Array,\n convertToBase64,\n} from '@ai-sdk/provider-utils';\n\nimport type { MoonshotAIMessages } from './moonshotai-chat-api-types';\n\n// Moonshot AI chat completions accepts text, image_url, and video_url content\n// parts only. Anything else (audio, PDF, other file types) throws here rather\n// than being rejected by the API with a 400.\nexport function convertToMoonshotAIChatMessages(\n prompt: LanguageModelV3Prompt,\n): MoonshotAIMessages {\n const messages: MoonshotAIMessages = [];\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n messages.push({ role: 'system', content });\n break;\n }\n\n case 'user': {\n if (content.length === 1 && content[0].type === 'text') {\n messages.push({\n role: 'user',\n content: content[0].text,\n });\n break;\n }\n\n messages.push({\n role: 'user',\n content: content.map(part => {\n switch (part.type) {\n case 'text': {\n return { type: 'text', text: part.text };\n }\n case 'file': {\n if (part.mediaType.startsWith('image/')) {\n const mediaType =\n part.mediaType === 'image/*'\n ? 'image/jpeg'\n : part.mediaType;\n\n return {\n type: 'image_url' as const,\n image_url: {\n url:\n part.data instanceof URL\n ? part.data.toString()\n : `data:${mediaType};base64,${convertToBase64(part.data)}`,\n },\n };\n }\n\n if (part.mediaType.startsWith('video/')) {\n const mediaType =\n part.mediaType === 'video/*' ? 'video/mp4' : part.mediaType;\n\n return {\n type: 'video_url' as const,\n video_url: {\n url:\n part.data instanceof URL\n ? part.data.toString()\n : `data:${mediaType};base64,${convertToBase64(part.data)}`,\n },\n };\n }\n\n if (part.mediaType.startsWith('text/')) {\n const textContent =\n part.data instanceof URL\n ? part.data.toString()\n : typeof part.data === 'string'\n ? new TextDecoder().decode(\n convertBase64ToUint8Array(part.data),\n )\n : new TextDecoder().decode(part.data);\n\n return {\n type: 'text' as const,\n text: textContent,\n };\n }\n\n throw new UnsupportedFunctionalityError({\n functionality: `file part media type ${part.mediaType}`,\n });\n }\n }\n }),\n });\n\n break;\n }\n\n case 'assistant': {\n let text = '';\n let reasoning = '';\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 reasoning += part.text;\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 messages.push({\n role: 'assistant',\n content: toolCalls.length > 0 ? text || null : text,\n ...(reasoning.length > 0 ? { reasoning_content: reasoning } : {}),\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n });\n\n break;\n }\n\n case 'tool': {\n for (const toolResponse of content) {\n if (toolResponse.type === 'tool-approval-response') {\n continue;\n }\n\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 'execution-denied':\n contentValue = output.reason ?? 'Tool call execution denied.';\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 const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n","import type { LanguageModelV3Usage } from '@ai-sdk/provider';\n\nexport function convertMoonshotAIChatUsage(\n usage:\n | {\n prompt_tokens?: number | null;\n completion_tokens?: number | null;\n cached_tokens?: number | null;\n prompt_tokens_details?: {\n cached_tokens?: number | null;\n } | null;\n completion_tokens_details?: {\n reasoning_tokens?: number | null;\n } | null;\n }\n | undefined\n | null,\n): LanguageModelV3Usage {\n if (usage == null) {\n return {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n raw: undefined,\n };\n }\n\n const promptTokens = usage.prompt_tokens ?? 0;\n const completionTokens = usage.completion_tokens ?? 0;\n\n const cacheReadTokens =\n usage.cached_tokens ?? usage.prompt_tokens_details?.cached_tokens ?? 0;\n\n const reasoningTokens =\n usage.completion_tokens_details?.reasoning_tokens ?? 0;\n\n return {\n inputTokens: {\n total: promptTokens,\n noCache: promptTokens - cacheReadTokens,\n cacheRead: cacheReadTokens,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: completionTokens,\n text: completionTokens - reasoningTokens,\n reasoning: reasoningTokens,\n },\n raw: usage,\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 { LanguageModelV3FinishReason } from '@ai-sdk/provider';\n\nexport function mapMoonshotAIFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV3FinishReason['unified'] {\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 'function_call':\n case 'tool_calls':\n return 'tool-calls';\n default:\n return 'other';\n }\n}\n","import { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport type MoonshotAIMessages = Array<MoonshotAIMessage>;\n\nexport type MoonshotAIMessage =\n | MoonshotAISystemMessage\n | MoonshotAIUserMessage\n | MoonshotAIAssistantMessage\n | MoonshotAIToolMessage;\n\nexport interface MoonshotAISystemMessage {\n role: 'system';\n content: string;\n}\n\nexport interface MoonshotAIUserMessage {\n role: 'user';\n content: string | Array<MoonshotAIContentPart>;\n}\n\nexport type MoonshotAIContentPart =\n | MoonshotAIContentPartText\n | MoonshotAIContentPartImage\n | MoonshotAIContentPartVideo;\n\nexport interface MoonshotAIContentPartText {\n type: 'text';\n text: string;\n}\n\nexport interface MoonshotAIContentPartImage {\n type: 'image_url';\n image_url: { url: string };\n}\n\nexport interface MoonshotAIContentPartVideo {\n type: 'video_url';\n video_url: { url: string };\n}\n\nexport interface MoonshotAIAssistantMessage {\n role: 'assistant';\n content?: string | null;\n reasoning_content?: string;\n tool_calls?: Array<MoonshotAIMessageToolCall>;\n}\n\nexport interface MoonshotAIMessageToolCall {\n type: 'function';\n id: string;\n function: {\n arguments: string;\n name: string;\n };\n}\n\nexport interface MoonshotAIToolMessage {\n role: 'tool';\n content: string;\n tool_call_id: string;\n}\n\n// Schemas below are limited versions focused on what the implementation\n// needs. This limits breakages when the API changes and increases efficiency.\n\nconst tokenUsageSchema = z\n .object({\n prompt_tokens: z.number().nullish(),\n completion_tokens: z.number().nullish(),\n cached_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 MoonshotAIChatTokenUsage = z.infer<typeof tokenUsageSchema>;\n\nexport const moonshotAIErrorSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string().nullish(),\n }),\n});\n\nexport type MoonshotAIErrorData = z.infer<typeof moonshotAIErrorSchema>;\n\nexport const moonshotAIChatResponseSchema = z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\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 function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .nullish(),\n }),\n finish_reason: z.string().nullish(),\n }),\n ),\n usage: tokenUsageSchema,\n});\n\nexport const moonshotAIChatChunkSchema = 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 choices: z.array(\n z.object({\n delta: z\n .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 index: z.number(),\n id: z.string().nullish(),\n function: z.object({\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n }),\n }),\n )\n .nullish(),\n })\n .nullish(),\n finish_reason: z.string().nullish(),\n }),\n ),\n usage: tokenUsageSchema,\n }),\n moonshotAIErrorSchema,\n ]),\n ),\n);\n","import { z } from 'zod/v4';\n\nexport type MoonshotAIChatModelId =\n | 'moonshot-v1-8k'\n | 'moonshot-v1-32k'\n | 'moonshot-v1-128k'\n | 'kimi-k2'\n | 'kimi-k2-0905'\n | 'kimi-k2-thinking'\n | 'kimi-k2-thinking-turbo'\n | 'kimi-k2-turbo'\n | 'kimi-k2.5'\n | 'kimi-k3'\n | (string & {});\n\nexport const moonshotaiLanguageModelOptions = z.object({\n /**\n * Reasoning effort for Kimi K3.\n */\n reasoningEffort: z.enum(['low', 'high', 'max']).optional(),\n\n thinking: z\n .object({\n type: z.enum(['enabled', 'disabled']).optional(),\n budgetTokens: z.number().int().min(1024).optional(),\n })\n .optional(),\n\n reasoningHistory: z.enum(['disabled', 'interleaved', 'preserved']).optional(),\n\n /**\n * Used to cache responses for similar requests to optimize cache hit rates.\n * Typically a session or task id.\n */\n promptCacheKey: z.string().optional(),\n\n /**\n * A stable identifier used to help Moonshot detect users violating usage\n * policies. Recommended to hash the username or email address.\n */\n safetyIdentifier: z.string().optional(),\n});\n\nexport type MoonshotAILanguageModelOptions = z.infer<\n typeof moonshotaiLanguageModelOptions\n>;\n\n/**\n * Whether the model accepts `thinking.keep` (Preserved Thinking). Verified\n * against the live API: kimi-k2.6, kimi-k2.7-code(+highspeed), and kimi-k3\n * accept `keep: 'all'`; other models reject it with a 400.\n */\nexport function getModelThinkingKeepSupport(\n modelId: MoonshotAIChatModelId,\n): boolean {\n return (\n modelId === 'kimi-k2.6' ||\n modelId === 'kimi-k3' ||\n modelId.startsWith('kimi-k2.7-code')\n );\n}\n","import {\n UnsupportedFunctionalityError,\n type LanguageModelV3CallOptions,\n type SharedV3Warning,\n} from '@ai-sdk/provider';\nimport { normalizeJsonSchemaForMFJS } from './normalize-json-schema-for-mfjs';\n\nexport function prepareTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV3CallOptions['tools'];\n toolChoice?: LanguageModelV3CallOptions['toolChoice'];\n}): {\n tools:\n | undefined\n | Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n strict?: boolean;\n };\n }>;\n toolChoice:\n | { type: 'function'; function: { name: string } }\n | 'auto'\n | 'none'\n | 'required'\n | undefined;\n toolWarnings: SharedV3Warning[];\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: SharedV3Warning[] = [];\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined, toolWarnings };\n }\n\n const moonshotTools: Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n strict?: boolean;\n };\n }> = [];\n\n for (const tool of tools) {\n if (tool.type === 'provider') {\n toolWarnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n });\n } else {\n moonshotTools.push({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: normalizeJsonSchemaForMFJS(tool.inputSchema),\n ...(tool.strict != null ? { strict: tool.strict } : {}),\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: moonshotTools, 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: moonshotTools, toolChoice: type, toolWarnings };\n case 'tool':\n return {\n tools: moonshotTools,\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","import { UnsupportedFunctionalityError } from '@ai-sdk/provider';\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nconst SCHEMA_ARRAY_KEYS = ['allOf', 'anyOf', 'oneOf', 'prefixItems'] as const;\nconst SCHEMA_MAP_KEYS = [\n 'properties',\n 'patternProperties',\n '$defs',\n 'dependentSchemas',\n] as const;\nconst SCHEMA_SINGLE_KEYS = [\n 'additionalProperties',\n 'propertyNames',\n 'items',\n 'contains',\n 'not',\n 'if',\n 'then',\n 'else',\n] as const;\n\n/**\n * Normalizes a JSON Schema to the subset Moonshot's MFJS validator accepts:\n * `object` root required, tuple `items` become `prefixItems`, and `type` next\n * to `anyOf` moves into the branches. Everything else passes through. The\n * full original schema is still used for AI SDK result validation.\n */\nexport function normalizeJsonSchemaForMFJS(schema: unknown): unknown {\n return normalizeDefinition(schema, true);\n}\n\nfunction normalizeDefinition(definition: unknown, isRoot: boolean): unknown {\n if (typeof definition === 'boolean' || !isRecord(definition)) {\n if (isRoot) {\n throw new UnsupportedFunctionalityError({\n functionality:\n 'tool parameters must be a JSON Schema object with type \"object\" for moonshotai (MFJS)',\n });\n }\n return definition;\n }\n\n if (isRoot && definition.type !== 'object') {\n throw new UnsupportedFunctionalityError({\n functionality:\n 'tool parameters must be a JSON Schema object with type \"object\" for moonshotai (MFJS)',\n });\n }\n\n const result: Record<string, unknown> = { ...definition };\n\n // Existing prefixItems stay first (they are positional).\n if (Array.isArray(result.items)) {\n const tuple = result.items;\n result.prefixItems = [\n ...(Array.isArray(result.prefixItems) ? result.prefixItems : []),\n ...tuple.map(item => normalizeDefinition(item, false)),\n ];\n delete result.items;\n } else if (isRecord(result.items)) {\n result.items = normalizeDefinition(result.items, false);\n }\n\n // MFJS requires type to live inside anyOf items.\n if (typeof result.type === 'string' && Array.isArray(result.anyOf)) {\n const parentType = result.type;\n delete result.type;\n result.anyOf = result.anyOf.map(branch =>\n isRecord(branch) && branch.type == null\n ? { type: parentType, ...branch }\n : branch,\n );\n }\n\n for (const key of SCHEMA_ARRAY_KEYS) {\n const value = result[key];\n if (Array.isArray(value)) {\n result[key] = value.map(item => normalizeDefinition(item, false));\n }\n }\n\n for (const key of SCHEMA_MAP_KEYS) {\n const value = result[key];\n if (isRecord(value)) {\n result[key] = Object.fromEntries(\n Object.entries(value).map(([k, v]) => [\n k,\n normalizeDefinition(v, false),\n ]),\n );\n }\n }\n\n for (const key of SCHEMA_SINGLE_KEYS) {\n const value = result[key];\n if (isRecord(value) || typeof value === 'boolean') {\n result[key] = normalizeDefinition(value, false);\n }\n }\n\n return result;\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":["z","UnsupportedFunctionalityError","UnsupportedFunctionalityError","UnsupportedFunctionalityError","_a","_b","toolCall"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/moonshotai",
3
- "version": "2.0.46",
3
+ "version": "2.0.48",
4
4
  "license": "Apache-2.0",
5
5
  "sideEffects": false,
6
6
  "main": "./dist/index.js",
@@ -26,7 +26,7 @@
26
26
  },
27
27
  "dependencies": {
28
28
  "@ai-sdk/provider": "3.0.15",
29
- "@ai-sdk/provider-utils": "4.0.46"
29
+ "@ai-sdk/provider-utils": "4.0.47"
30
30
  },
31
31
  "devDependencies": {
32
32
  "@types/node": "20.17.24",
@@ -3,6 +3,7 @@ import {
3
3
  type LanguageModelV3CallOptions,
4
4
  type SharedV3Warning,
5
5
  } from '@ai-sdk/provider';
6
+ import { normalizeJsonSchemaForMFJS } from './normalize-json-schema-for-mfjs';
6
7
 
7
8
  export function prepareTools({
8
9
  tools,
@@ -61,7 +62,7 @@ export function prepareTools({
61
62
  function: {
62
63
  name: tool.name,
63
64
  description: tool.description,
64
- parameters: tool.inputSchema,
65
+ parameters: normalizeJsonSchemaForMFJS(tool.inputSchema),
65
66
  ...(tool.strict != null ? { strict: tool.strict } : {}),
66
67
  },
67
68
  });
@@ -0,0 +1,105 @@
1
+ import { UnsupportedFunctionalityError } from '@ai-sdk/provider';
2
+
3
+ function isRecord(value: unknown): value is Record<string, unknown> {
4
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
5
+ }
6
+
7
+ const SCHEMA_ARRAY_KEYS = ['allOf', 'anyOf', 'oneOf', 'prefixItems'] as const;
8
+ const SCHEMA_MAP_KEYS = [
9
+ 'properties',
10
+ 'patternProperties',
11
+ '$defs',
12
+ 'dependentSchemas',
13
+ ] as const;
14
+ const SCHEMA_SINGLE_KEYS = [
15
+ 'additionalProperties',
16
+ 'propertyNames',
17
+ 'items',
18
+ 'contains',
19
+ 'not',
20
+ 'if',
21
+ 'then',
22
+ 'else',
23
+ ] as const;
24
+
25
+ /**
26
+ * Normalizes a JSON Schema to the subset Moonshot's MFJS validator accepts:
27
+ * `object` root required, tuple `items` become `prefixItems`, and `type` next
28
+ * to `anyOf` moves into the branches. Everything else passes through. The
29
+ * full original schema is still used for AI SDK result validation.
30
+ */
31
+ export function normalizeJsonSchemaForMFJS(schema: unknown): unknown {
32
+ return normalizeDefinition(schema, true);
33
+ }
34
+
35
+ function normalizeDefinition(definition: unknown, isRoot: boolean): unknown {
36
+ if (typeof definition === 'boolean' || !isRecord(definition)) {
37
+ if (isRoot) {
38
+ throw new UnsupportedFunctionalityError({
39
+ functionality:
40
+ 'tool parameters must be a JSON Schema object with type "object" for moonshotai (MFJS)',
41
+ });
42
+ }
43
+ return definition;
44
+ }
45
+
46
+ if (isRoot && definition.type !== 'object') {
47
+ throw new UnsupportedFunctionalityError({
48
+ functionality:
49
+ 'tool parameters must be a JSON Schema object with type "object" for moonshotai (MFJS)',
50
+ });
51
+ }
52
+
53
+ const result: Record<string, unknown> = { ...definition };
54
+
55
+ // Existing prefixItems stay first (they are positional).
56
+ if (Array.isArray(result.items)) {
57
+ const tuple = result.items;
58
+ result.prefixItems = [
59
+ ...(Array.isArray(result.prefixItems) ? result.prefixItems : []),
60
+ ...tuple.map(item => normalizeDefinition(item, false)),
61
+ ];
62
+ delete result.items;
63
+ } else if (isRecord(result.items)) {
64
+ result.items = normalizeDefinition(result.items, false);
65
+ }
66
+
67
+ // MFJS requires type to live inside anyOf items.
68
+ if (typeof result.type === 'string' && Array.isArray(result.anyOf)) {
69
+ const parentType = result.type;
70
+ delete result.type;
71
+ result.anyOf = result.anyOf.map(branch =>
72
+ isRecord(branch) && branch.type == null
73
+ ? { type: parentType, ...branch }
74
+ : branch,
75
+ );
76
+ }
77
+
78
+ for (const key of SCHEMA_ARRAY_KEYS) {
79
+ const value = result[key];
80
+ if (Array.isArray(value)) {
81
+ result[key] = value.map(item => normalizeDefinition(item, false));
82
+ }
83
+ }
84
+
85
+ for (const key of SCHEMA_MAP_KEYS) {
86
+ const value = result[key];
87
+ if (isRecord(value)) {
88
+ result[key] = Object.fromEntries(
89
+ Object.entries(value).map(([k, v]) => [
90
+ k,
91
+ normalizeDefinition(v, false),
92
+ ]),
93
+ );
94
+ }
95
+ }
96
+
97
+ for (const key of SCHEMA_SINGLE_KEYS) {
98
+ const value = result[key];
99
+ if (isRecord(value) || typeof value === 'boolean') {
100
+ result[key] = normalizeDefinition(value, false);
101
+ }
102
+ }
103
+
104
+ return result;
105
+ }