






















@@ -6,6 +6,7 @@ import { describe, expect, it, vi } from "vitest";
66import { resolveXaiCatalogEntry } from "./model-definitions.js";
77import { isModernXaiModel, resolveXaiForwardCompatModel } from "./provider-models.js";
88import { resolveFallbackXaiAuth } from "./src/tool-auth-shared.js";
9+import { wrapXaiWebSearchError } from "./src/web-search-shared.js";
910import { __testing } from "./test-api.js";
1011import { createXaiWebSearchProvider } from "./web-search.js";
1112@@ -15,6 +16,7 @@ const {
1516 resolveXaiToolSearchConfig,
1617 resolveXaiWebSearchCredential,
1718 resolveXaiWebSearchModel,
19+ resolveXaiWebSearchTimeoutSeconds,
1820} = __testing;
19212022describe("xai web search config resolution", () => {
@@ -253,6 +255,12 @@ describe("xai web search config resolution", () => {
253255expect(resolveXaiWebSearchModel(undefined)).toBe("grok-4-1-fast");
254256});
255257258+it("uses a Grok-specific 60s default timeout while preserving overrides", () => {
259+expect(resolveXaiWebSearchTimeoutSeconds({})).toBe(60);
260+expect(resolveXaiWebSearchTimeoutSeconds(undefined)).toBe(60);
261+expect(resolveXaiWebSearchTimeoutSeconds({ timeoutSeconds: 15 })).toBe(15);
262+});
263+256264it("uses config model when provided", () => {
257265expect(resolveXaiWebSearchModel({ grok: { model: "grok-4-fast-reasoning" } })).toBe(
258266"grok-4-fast",
@@ -301,6 +309,20 @@ describe("xai web search config resolution", () => {
301309externalContent: expect.objectContaining({ wrapped: true }),
302310});
303311});
312+313+it("converts internal xAI timeout aborts into structured tool errors", () => {
314+const abort = new DOMException("This operation was aborted", "AbortError");
315+316+expect(() => wrapXaiWebSearchError(abort, 60)).toThrow("xAI web search timed out after 60s");
317+318+try {
319+wrapXaiWebSearchError(abort, 60);
320+} catch (error) {
321+expect(error).toBeInstanceOf(Error);
322+expect((error as Error).name).toBe("Error");
323+expect((error as Error).cause).toBe(abort);
324+}
325+});
304326});
305327306328describe("xai web search response parsing", () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。