import { describe, expect, it } from "vitest"; import { expectProviderOnboardMergedLegacyConfig, expectProviderOnboardPrimaryAndFallbacks, } from "../../test/helpers/plugins/provider-onboard.js"; import { buildMistralModelDefinition as buildBundledMistralModelDefinition } from "./model-definitions.js"; import { applyMistralConfig, applyMistralProviderConfig, MISTRAL_DEFAULT_MODEL_REF, } from "./onboard.js"; describe("mistral onboard", () => { it("adds Mistral provider with correct settings", () => { const cfg = applyMistralConfig({}); expect(cfg.models?.providers?.mistral).toMatchObject({ baseUrl: "https://api.mistral.ai/v1", api: "openai-completions", }); expectProviderOnboardPrimaryAndFallbacks({ applyConfig: applyMistralConfig, modelRef: MISTRAL_DEFAULT_MODEL_REF, }); }); it("merges Mistral models and keeps existing provider overrides", () => { const provider = expectProviderOnboardMergedLegacyConfig({ applyProviderConfig: applyMistralProviderConfig, providerId: "mistral", providerApi: "openai-completions", baseUrl: "https://api.mistral.ai/v1", legacyApi: "anthropic-messages", legacyModelId: "custom-model", legacyModelName: "Custom", }); expect(provider?.models.map((m) => m.id)).toEqual(["custom-model", "mistral-large-latest"]); const mistralDefault = provider?.models.find((model) => model.id === "mistral-large-latest"); expect(mistralDefault?.contextWindow).toBe(262144); expect(mistralDefault?.maxTokens).toBe(16384); }); it("uses the bundled mistral default model definition", () => { const bundled = buildBundledMistralModelDefinition(); const cfg = applyMistralProviderConfig({}); const defaultModel = cfg.models?.providers?.mistral?.models.find( (model) => model.id === bundled.id, ); expect(defaultModel).toMatchObject({ id: bundled.id, contextWindow: bundled.contextWindow, maxTokens: bundled.maxTokens, }); }); it("adds the expected alias for the default model", () => { const cfg = applyMistralProviderConfig({}); expect(cfg.agents?.defaults?.models?.[MISTRAL_DEFAULT_MODEL_REF]?.alias).toBe("Mistral"); }); });