Files
openclaw/extensions/mistral/realtime-transcription-provider.test.ts
2026-06-04 21:02:07 -04:00

63 lines
2.0 KiB
TypeScript

// Mistral tests cover realtime transcription provider plugin behavior.
import type { OpenClawConfig } from "openclaw/plugin-sdk/config-contracts";
import { afterEach, describe, expect, it, vi } from "vitest";
import {
testing,
buildMistralRealtimeTranscriptionProvider,
} from "./realtime-transcription-provider.js";
describe("buildMistralRealtimeTranscriptionProvider", () => {
afterEach(() => {
vi.unstubAllEnvs();
});
it("normalizes nested provider config", () => {
const provider = buildMistralRealtimeTranscriptionProvider();
const resolved = provider.resolveConfig?.({
cfg: {} as OpenClawConfig,
rawConfig: {
providers: {
mistral: {
apiKey: "mistral-key",
model: "voxtral-mini-transcribe-realtime-2602",
encoding: "g711_ulaw",
sample_rate: "8000",
target_streaming_delay_ms: "240",
},
},
},
});
expect(resolved).toEqual({
apiKey: "mistral-key",
baseUrl: undefined,
model: "voxtral-mini-transcribe-realtime-2602",
encoding: "pcm_mulaw",
sampleRate: 8000,
targetStreamingDelayMs: 240,
});
});
it("builds a Mistral realtime websocket URL", () => {
const url = testing.toMistralRealtimeWsUrl({
apiKey: "mistral-key",
baseUrl: "https://api.mistral.ai/v1",
model: "voxtral-mini-transcribe-realtime-2602",
providerConfig: {},
sampleRate: 8000,
encoding: "pcm_mulaw",
targetStreamingDelayMs: 800,
});
expect(url).toContain("wss://api.mistral.ai/v1/audio/transcriptions/realtime?");
expect(url).toContain("model=voxtral-mini-transcribe-realtime-2602");
expect(url).toContain("target_streaming_delay_ms=800");
});
it("requires an API key when creating sessions", () => {
vi.stubEnv("MISTRAL_API_KEY", "");
const provider = buildMistralRealtimeTranscriptionProvider();
expect(() => provider.createSession({ providerConfig: {} })).toThrow("Mistral API key missing");
});
});