diff --git a/.changeset/polite-fishes-clap.md b/.changeset/polite-fishes-clap.md new file mode 100644 index 000000000000..d2269385c814 --- /dev/null +++ b/.changeset/polite-fishes-clap.md @@ -0,0 +1,22 @@ +--- +'@ai-sdk/mistral': patch +--- + +feat(provider/mistral): `MistralLanguageModelOptions` type + +```ts +import { mistral, type MistralLanguageModelOptions } from '@ai-sdk/mistral'; +import { generateText } from 'ai'; + +await generateText({ + model: mistral('open-mistral-7b'), + prompt: 'Invent a new holiday and describe its traditions.', + providerOptions: { + mistral: { + safePrompt: true, + documentImageLimit: 5, + documentPageLimit: 10, + } satisfies MistralLanguageModelOptions, + }, +}); +``` diff --git a/content/providers/01-ai-sdk-providers/20-mistral.mdx b/content/providers/01-ai-sdk-providers/20-mistral.mdx index e272f499d349..99b972ce110f 100644 --- a/content/providers/01-ai-sdk-providers/20-mistral.mdx +++ b/content/providers/01-ai-sdk-providers/20-mistral.mdx @@ -80,9 +80,10 @@ const model = mistral('mistral-large-latest'); ``` Mistral chat models also support additional model settings that are not part of the [standard call settings](/docs/ai-sdk-core/settings). -You can pass them as an options argument: +You can pass them as an options argument and utilize `MistralLanguageModelOptions` for typing: ```ts +import { mistral, type MistralLanguageModelOptions } from '@ai-sdk/mistral'; const model = mistral('mistral-large-latest'); await generateText({ @@ -90,7 +91,7 @@ await generateText({ providerOptions: { mistral: { safePrompt: true, // optional safety prompt injection - }, + } satisfies MistralLanguageModelOptions, }, }); ``` diff --git a/examples/ai-core/src/generate-text/mistral-provider-options.ts b/examples/ai-core/src/generate-text/mistral-provider-options.ts new file mode 100644 index 000000000000..6538b428421d --- /dev/null +++ b/examples/ai-core/src/generate-text/mistral-provider-options.ts @@ -0,0 +1,26 @@ +import { mistral, type MistralLanguageModelOptions } from '@ai-sdk/mistral'; +import { generateText } from 'ai'; +import 'dotenv/config'; + +async function main() { + const result = await generateText({ + model: mistral('open-mistral-7b'), + prompt: 'Invent a new holiday and describe its traditions.', + providerOptions: { + mistral: { + safePrompt: true, + documentImageLimit: 5, + documentPageLimit: 10, + // @ts-expect-error + invalidOption: 0, + } satisfies MistralLanguageModelOptions, + }, + }); + + console.log(result.text); + console.log(); + console.log('Token usage:', result.usage); + console.log('Finish reason:', result.finishReason); +} + +main().catch(console.error); diff --git a/packages/mistral/src/index.ts b/packages/mistral/src/index.ts index 8e5413ba38a2..1a634dc3b650 100644 --- a/packages/mistral/src/index.ts +++ b/packages/mistral/src/index.ts @@ -3,3 +3,4 @@ export type { MistralProvider, MistralProviderSettings, } from './mistral-provider'; +export type { MistralLanguageModelOptions } from './mistral-chat-options'; diff --git a/packages/mistral/src/mistral-chat-language-model.ts b/packages/mistral/src/mistral-chat-language-model.ts index 8af1cb4b3aa8..d62975d91e3e 100644 --- a/packages/mistral/src/mistral-chat-language-model.ts +++ b/packages/mistral/src/mistral-chat-language-model.ts @@ -23,7 +23,7 @@ import { getResponseMetadata } from './get-response-metadata'; import { mapMistralFinishReason } from './map-mistral-finish-reason'; import { MistralChatModelId, - mistralProviderOptions, + mistralLanguageModelOptions, } from './mistral-chat-options'; import { mistralFailedResponseHandler } from './mistral-error'; import { prepareTools } from './mistral-prepare-tools'; @@ -79,7 +79,7 @@ export class MistralChatLanguageModel implements LanguageModelV2 { (await parseProviderOptions({ provider: 'mistral', providerOptions, - schema: mistralProviderOptions, + schema: mistralLanguageModelOptions, })) ?? {}; if (topK != null) { diff --git a/packages/mistral/src/mistral-chat-options.ts b/packages/mistral/src/mistral-chat-options.ts index 6f5af4280d1b..23c5b39ecd73 100644 --- a/packages/mistral/src/mistral-chat-options.ts +++ b/packages/mistral/src/mistral-chat-options.ts @@ -24,7 +24,7 @@ export type MistralChatModelId = | 'open-mixtral-8x22b' | (string & {}); -export const mistralProviderOptions = z.object({ +export const mistralLanguageModelOptions = z.object({ /** Whether to inject a safety prompt before all conversations. @@ -36,4 +36,6 @@ Defaults to `false`. documentPageLimit: z.number().optional(), }); -export type MistralProviderOptions = z.infer; +export type MistralLanguageModelOptions = z.infer< + typeof mistralLanguageModelOptions +>;