{"version":3,"sources":["../src/mistral_llms.ts"],"sourcesContent":["/**\n * Copyright 2024 Bloom Labs Inc\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Message, Part, StreamingCallback } from 'genkit';\nimport {\n  CandidateData,\n  GenerateRequest,\n  GenerateResponseChunkData,\n  MessageData,\n  ModelAction,\n  Role,\n  ToolDefinition,\n} from 'genkit/model';\nimport { GenerationCommonConfigSchema, modelRef } from 'genkit/model';\nimport {\n  Tool,\n  FunctionT,\n  ChatCompletionChoice,\n  CompletionChunk,\n  ToolCall,\n  ChatCompletionRequest,\n  ChatCompletionResponse,\n  ContentChunk,\n} from '@mistralai/mistralai/models/components/index.js';\nimport { Genkit } from 'genkit';\nimport { z } from 'genkit';\nimport { Mistral } from '@mistralai/mistralai';\n\nexport const MistralConfigSchema = GenerationCommonConfigSchema.extend({\n  visualDetailLevel: z.enum(['auto', 'low', 'high']).optional(),\n});\n\nexport const openMistral7B = modelRef({\n  name: 'mistral/open-mistral-7b',\n  info: {\n    versions: ['mistral-tiny-2312'],\n    label: 'Mistral - Mistral 7B',\n    supports: {\n      multiturn: true,\n      tools: false,\n      media: false,\n      systemRole: true,\n      output: ['text', 'json'],\n    },\n  },\n  configSchema: GenerationCommonConfigSchema,\n});\n\nexport const openMinistral3B = modelRef({\n  name: 'mistral/ministral-3b',\n  info: {\n    versions: ['ministral-3b-latest', 'ministral-3b-2410'],\n    label: 'Mistral - Ministral 3B',\n    supports: {\n      multiturn: true,\n      tools: false,\n      media: false,\n      systemRole: true,\n      output: ['text', 'json'],\n    },\n  },\n  configSchema: GenerationCommonConfigSchema,\n});\n\nexport const openMinistral8B = modelRef({\n  name: 'mistral/ministral-8b',\n  info: {\n    versions: ['ministral-8b-latest', 'ministral-8b-2410'],\n    label: 'Mistral - Ministral 8B',\n    supports: {\n      multiturn: true,\n      tools: false,\n      media: false,\n      systemRole: true,\n      output: ['text', 'json'],\n    },\n  },\n  configSchema: GenerationCommonConfigSchema,\n});\n\nexport const openMistralNemo = modelRef({\n  name: 'mistral/open-mistral-nemo',\n  info: {\n    versions: ['open-mistral-nemo', 'pen-mistral-nemo-2407'],\n    label: 'Mistral - Nemo Model',\n    supports: {\n      multiturn: true,\n      tools: false,\n      media: false,\n      systemRole: true,\n      output: ['text', 'json'],\n    },\n  },\n  configSchema: GenerationCommonConfigSchema,\n});\n\nexport const openMistralSaba = modelRef({\n  name: 'mistral/mistral-saba',\n  info: {\n    versions: ['mistral-saba-latest', 'mistral-saba-2502'],\n    label: 'Mistral - Saba Model',\n    supports: {\n      multiturn: true,\n      tools: false,\n      media: false,\n      systemRole: true,\n      output: ['text', 'json'],\n    },\n  },\n  configSchema: GenerationCommonConfigSchema,\n});\n\nexport const openCodestralMambda = modelRef({\n  name: 'mistral/open-codestral-mamba',\n  info: {\n    versions: ['open-codestral-mamba'],\n    label: 'Mistral - Codestral Mamba',\n    supports: {\n      multiturn: true,\n      tools: false,\n      media: false,\n      systemRole: true,\n      output: ['text', 'json'],\n    },\n  },\n  configSchema: GenerationCommonConfigSchema,\n});\n\nexport const openCodestral = modelRef({\n  name: 'mistral/codestral',\n  info: {\n    versions: ['codestral-latest', 'codestral-2501'],\n    label: 'Mistral - Codestral',\n    supports: {\n      multiturn: true,\n      tools: false,\n      media: false,\n      systemRole: true,\n      output: ['text', 'json'],\n    },\n  },\n  configSchema: GenerationCommonConfigSchema,\n});\n\nexport const openMistral8x7B = modelRef({\n  name: 'mistral/open-mixtral-8x7b',\n  info: {\n    versions: ['open-mixtral-8x7b'],\n    label: 'Mistral - Mistral 8x7B',\n    supports: {\n      multiturn: true,\n      tools: false,\n      media: false,\n      systemRole: true,\n      output: ['text', 'json'],\n    },\n  },\n  configSchema: GenerationCommonConfigSchema,\n});\n\nexport const openMixtral8x22B = modelRef({\n  name: 'mistral/open-mixtral-8x22b',\n  info: {\n    versions: ['open-mixtral-8x22b'],\n    label: 'Mistral - Mistral 8x22B',\n    supports: {\n      multiturn: true,\n      tools: true,\n      media: false,\n      systemRole: true,\n      output: ['text', 'json'],\n    },\n  },\n  configSchema: GenerationCommonConfigSchema,\n});\n\nexport const openMistralSmall = modelRef({\n  name: 'mistral/mistral-small',\n  info: {\n    versions: [\n      'mistral-small-latest',\n      'mistral-small-2402',\n      'mistral-small-2501',\n    ],\n    label: 'Mistral - Mistral Small',\n    supports: {\n      multiturn: true,\n      tools: false,\n      media: false,\n      systemRole: true,\n      output: ['text', 'json'],\n    },\n  },\n  configSchema: GenerationCommonConfigSchema,\n});\n\nexport const openMistralMedium = modelRef({\n  name: 'mistral/mistral-medium',\n  info: {\n    versions: ['mistral-medium-2312'],\n    label: 'Mistral - Mistral Medium',\n    supports: {\n      multiturn: true,\n      tools: false,\n      media: false,\n      systemRole: true,\n      output: ['text', 'json'],\n    },\n  },\n  configSchema: GenerationCommonConfigSchema,\n});\n\nexport const openMistralLarge = modelRef({\n  name: 'mistral/mistral-large',\n  info: {\n    versions: [\n      'mistral-large-latest',\n      'mistral-large-2402',\n      'mistral-large-2407',\n    ],\n    label: 'Mistral - Mistral Large',\n    supports: {\n      multiturn: true,\n      tools: false,\n      media: false,\n      systemRole: true,\n      output: ['text', 'json'],\n    },\n  },\n  configSchema: GenerationCommonConfigSchema,\n});\n\nexport const openPixtralLarge = modelRef({\n  name: 'mistral/pixtral-large',\n  info: {\n    versions: ['pixtral-large-latest', 'pixtral-large-2411'],\n    label: 'Mistral - Pixtral Large',\n    supports: {\n      multiturn: true,\n      tools: false,\n      media: true,\n      systemRole: true,\n      output: ['text', 'json'],\n    },\n  },\n  configSchema: GenerationCommonConfigSchema,\n});\n\nexport const openPixtral = modelRef({\n  name: 'mistral/pixtral',\n  info: {\n    versions: ['pixtral-12b-2409'],\n    label: 'Mistral - Pixtral',\n    supports: {\n      multiturn: true,\n      tools: false,\n      media: true,\n      systemRole: true,\n      output: ['text', 'json'],\n    },\n  },\n  configSchema: GenerationCommonConfigSchema,\n});\n\nfunction toMistralRole(role: Role): 'system' | 'user' | 'assistant' | 'tool' {\n  switch (role) {\n    case 'user':\n      return 'user';\n    case 'model':\n      return 'assistant';\n    case 'system':\n      return 'system';\n    case 'tool':\n      return 'assistant';\n    default:\n      throw new Error(`Role ${role} doesn't map to a Mistral role.`);\n  }\n}\n\nfunction toMistralTool(tool: ToolDefinition): Tool {\n  return {\n    type: 'function',\n    function: {\n      name: tool.name,\n      parameters: tool.inputSchema,\n      description: tool.description,\n    } as FunctionT,\n  };\n}\n\n/**\n * Converts a Genkit Part to the corresponding Mistral ChatCompletionContentPart.\n * @param part The Genkit Part to convert.\n * @param visualDetailLevel The visual detail level to use for media parts.\n * @returns The corresponding Mistral ChatCompletionContentPart.\n * @throws Error if the part contains unsupported fields for the current message role.\n */\nexport function toMistralTextAndMedia(part: Part): ContentChunk {\n  if (part.text) {\n    return {\n      type: 'text',\n      text: part.text,\n    };\n  } else if (part.media) {\n    return {\n      type: 'image_url',\n      imageUrl: {\n        url: part.media.url,\n      },\n    };\n  }\n  throw Error(\n    `Unsupported genkit part fields encountered for current message role: ${JSON.stringify(part)}.`\n  );\n}\n\nexport function toMistralMessages(\n  messages: MessageData[]\n): ChatCompletionRequest['messages'] {\n  const mistralMsgs: ChatCompletionRequest['messages'] = [];\n  for (const message of messages) {\n    const msg = new Message(message);\n    const role = toMistralRole(message.role);\n\n    // Build the appropriate message type based on the role\n    if (role === 'system') {\n      mistralMsgs.push({\n        role: 'system',\n        content: msg.text || '',\n      });\n    } else if (role === 'user') {\n      mistralMsgs.push({\n        role: 'user',\n        content: msg.content.map((part) => toMistralTextAndMedia(part)),\n      });\n    } else if (role === 'assistant') {\n      mistralMsgs.push({\n        role: 'assistant',\n        content: msg.content.map((part) => toMistralTextAndMedia(part)),\n      });\n    } else if (role === 'tool') {\n      mistralMsgs.push({\n        role: 'tool',\n        content: msg.content.map((part) => toMistralTextAndMedia(part)),\n      });\n    }\n  }\n  return mistralMsgs;\n}\n\nconst finishReasonMap: Record<\n  NonNullable<string>,\n  CandidateData['finishReason']\n> = {\n  length: 'length',\n  stop: 'stop',\n  tool_calls: 'stop',\n  content_filter: 'blocked',\n};\n\nexport const SUPPORTED_MISTRAL_MODELS = {\n  'open-mistral-7b': openMistral7B,\n  'open-mixtral-8x7b': openMistral8x7B,\n  'open-mixtral-8x22b': openMixtral8x22B,\n  'mistral-small': openMistralSmall,\n  'mistral-medium': openMistralMedium,\n  'mistral-large': openMistralLarge,\n  'ministral-3b': openMinistral3B,\n  'ministral-8b': openMinistral8B,\n  'open-mistral-nemo': openMistralNemo,\n  'open-codestral-mamba': openCodestralMambda,\n  codestral: openCodestral,\n  'mistral-saba': openMistralSaba,\n  'pixtral-large': openPixtralLarge,\n  pixtral: openPixtral,\n};\n\nfunction fromMistralToolCall(toolCall: ToolCall) {\n  if (!toolCall.function) {\n    throw Error(\n      `Unexpected mistral chunk choice. tool_calls was provided but one or more tool_calls is missing.`\n    );\n  }\n  const f = toolCall.function;\n  return {\n    toolRequest: {\n      name: f.name,\n      ref: toolCall.id,\n      input:\n        typeof f.arguments === 'string' ? JSON.parse(f.arguments) : f.arguments,\n    },\n  };\n}\n\nfunction fromMistralChoice(choice: ChatCompletionChoice): CandidateData {\n  const toolRequestParts = choice.message.toolCalls?.map(fromMistralToolCall);\n  return {\n    index: choice.index,\n    finishReason: finishReasonMap[choice.finishReason] || 'other',\n    message: {\n      role: 'model',\n      content: toolRequestParts\n        ? toolRequestParts\n        : [\n            {\n              text:\n                typeof choice.message.content === 'string'\n                  ? choice.message.content\n                  : '',\n            },\n          ],\n    },\n    custom: {},\n  };\n}\n\nfunction fromMistralChunkChoice(\n  choice: CompletionChunk['choices'][0]\n): CandidateData {\n  return {\n    index: choice.index,\n    finishReason: choice.finishReason\n      ? finishReasonMap[choice.finishReason] || 'other'\n      : 'unknown',\n    message: {\n      role: 'model',\n      content: [\n        {\n          text:\n            typeof choice.delta.content === 'string'\n              ? choice.delta.content\n              : '',\n        },\n      ],\n    },\n    custom: {},\n  };\n}\n\nexport function toMistralRequestBody(\n  modelName: string,\n  request: GenerateRequest<typeof GenerationCommonConfigSchema>\n) {\n  const model = SUPPORTED_MISTRAL_MODELS[modelName];\n  if (!model) throw new Error(`Unsupported model: ${modelName}`);\n  const mistralMessages = toMistralMessages(request.messages);\n  const mappedModelName = request.config?.version || model.version || modelName;\n\n  let responseFormat;\n  if (request.output?.format === 'json') {\n    responseFormat = { type: 'json_object' };\n  } else {\n    responseFormat = null;\n  }\n  const body: ChatCompletionRequest = {\n    messages: mistralMessages,\n    tools: request.tools?.map(toMistralTool),\n    model: mappedModelName,\n    maxTokens: request.config?.maxOutputTokens,\n    temperature: request.config?.temperature,\n    topP: request.config?.topP,\n    n: request.candidates,\n    stop: request.config?.stopSequences,\n    responseFormat: responseFormat,\n  };\n\n  for (const key in body) {\n    if (!body[key] || (Array.isArray(body[key]) && !body[key].length))\n      delete body[key];\n  }\n  return body;\n}\n\nexport function mistralModel(\n  ai: Genkit,\n  name: string,\n  client: Mistral\n): ModelAction<typeof GenerationCommonConfigSchema> {\n  //Ugly any type, should be MistralClient but cannot import it here\n  const modelId = `mistral/${name}`;\n  const model = SUPPORTED_MISTRAL_MODELS[name];\n  if (!model) throw new Error(`Unsupported model: ${name}`);\n\n  return ai.defineModel(\n    {\n      name: modelId,\n      ...model.info,\n      configSchema: SUPPORTED_MISTRAL_MODELS[name].configSchema,\n    },\n    async (\n      request,\n      streamingCallback?: StreamingCallback<GenerateResponseChunkData>\n    ) => {\n      let response: ChatCompletionResponse | CompletionChunk;\n      const body = toMistralRequestBody(name, request);\n      if (streamingCallback) {\n        const stream = await client.chat.stream(body);\n        for await (const chunk of stream) {\n          chunk.data.choices?.forEach((choice) => {\n            const c = fromMistralChunkChoice(choice);\n            streamingCallback({\n              index: c.index,\n              content: c.message.content,\n            });\n          });\n        }\n\n        response = await client.chat.complete(body);\n      } else {\n        response = await client.chat.complete(body);\n      }\n      return {\n        candidates: response.choices?.map((c) => fromMistralChoice(c)) || [],\n        usage: {\n          inputTokens: response.usage?.promptTokens,\n          outputTokens: response.usage?.completionTokens,\n          totalTokens: response.usage?.totalTokens,\n        },\n        custom: response,\n      };\n    }\n  );\n}\n"],"mappings":"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","names":[]}