













@@ -14,6 +14,34 @@ const { postTranscriptionRequestMock } = vi.hoisted(() => ({
1414),
1515}));
161617+function requireFirstPostTranscriptionCall(): {
18+url?: string;
19+timeoutMs?: number;
20+auditContext?: string;
21+headers: Headers;
22+body: BodyInit;
23+} {
24+const params = (
25+postTranscriptionRequestMock.mock.calls as unknown as Array<[unknown]>
26+)[0]?.[0] as
27+| {
28+url?: string;
29+timeoutMs?: number;
30+auditContext?: string;
31+headers?: Headers;
32+body?: BodyInit;
33+}
34+| undefined;
35+if (!params?.headers || !params.body) {
36+throw new Error("Expected transcription request params");
37+}
38+return {
39+ ...params,
40+headers: params.headers,
41+body: params.body,
42+};
43+}
44+1745vi.mock("openclaw/plugin-sdk/provider-http", async (importOriginal) => {
1846const actual = await importOriginal<typeof import("openclaw/plugin-sdk/provider-http")>();
1947return {
@@ -37,29 +65,24 @@ describe("xai stt", () => {
3765});
38663967expect(result).toEqual({ text: "hello from audio", model: XAI_DEFAULT_STT_MODEL });
40-expect(postTranscriptionRequestMock).toHaveBeenCalledWith(
41-expect.objectContaining({
42-url: "https://api.x.ai/v1/stt",
43-timeoutMs: 10_000,
44-auditContext: "xai stt",
45-}),
46-);
47-const call = postTranscriptionRequestMock.mock.calls[0]?.[0];
48-expect(call?.headers.get("authorization")).toBe("Bearer xai-key");
49-expect(call?.body).toBeInstanceOf(FormData);
50-const form = call?.body as FormData;
68+const call = requireFirstPostTranscriptionCall();
69+expect(call.url).toBe("https://api.x.ai/v1/stt");
70+expect(call.timeoutMs).toBe(10_000);
71+expect(call.auditContext).toBe("xai stt");
72+expect(call.headers.get("authorization")).toBe("Bearer xai-key");
73+expect(call.body).toBeInstanceOf(FormData);
74+const form = call.body as FormData;
5175expect(form.get("model")).toBe(XAI_DEFAULT_STT_MODEL);
5276expect(form.get("language")).toBe("en");
5377expect(form.get("prompt")).toBeNull();
5478expect(form.get("file")).toBeInstanceOf(Blob);
5579});
56805781it("registers as an audio media-understanding provider", () => {
58-expect(buildXaiMediaUnderstandingProvider()).toMatchObject({
59-id: "xai",
60-capabilities: ["audio"],
61-defaultModels: { audio: XAI_DEFAULT_STT_MODEL },
62-autoPriority: { audio: 25 },
63-});
82+const provider = buildXaiMediaUnderstandingProvider();
83+expect(provider.id).toBe("xai");
84+expect(provider.capabilities).toEqual(["audio"]);
85+expect(provider.defaultModels).toEqual({ audio: XAI_DEFAULT_STT_MODEL });
86+expect(provider.autoPriority).toEqual({ audio: 25 });
6487});
6588});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。