






















@@ -318,6 +318,7 @@ describe("web search runtime", () => {
318318it("falls back to another provider when auto-selected search execution fails", async () => {
319319resolveRuntimeWebSearchProvidersMock.mockReturnValue([
320320createGoogleSearchProvider({
321+requiresCredential: false,
321322createTool: () => ({
322323description: "google",
323324parameters: {},
@@ -340,6 +341,63 @@ describe("web search runtime", () => {
340341});
341342});
342343344+it("falls back when an auto-selected provider returns a structured error payload", async () => {
345+resolveRuntimeWebSearchProvidersMock.mockReturnValue([
346+createGoogleSearchProvider({
347+requiresCredential: false,
348+createTool: () => ({
349+description: "google",
350+parameters: {},
351+execute: async () => ({
352+error: "missing_google_api_key",
353+message: "google key missing",
354+}),
355+}),
356+}),
357+createDuckDuckGoSearchProvider(),
358+]);
359+360+await expect(
361+runWebSearch({
362+config: {},
363+args: { query: "fallback-structured-error" },
364+}),
365+).resolves.toEqual({
366+provider: "duckduckgo",
367+result: { query: "fallback-structured-error", provider: "duckduckgo" },
368+});
369+});
370+371+it("does not fall back when an auto-selected provider returns a validation error payload", async () => {
372+resolveRuntimeWebSearchProvidersMock.mockReturnValue([
373+createGoogleSearchProvider({
374+requiresCredential: false,
375+createTool: () => ({
376+description: "google",
377+parameters: {},
378+execute: async () => ({
379+error: "invalid_freshness",
380+message: "freshness must be day, week, month, or year.",
381+}),
382+}),
383+}),
384+createDuckDuckGoSearchProvider(),
385+]);
386+387+await expect(
388+runWebSearch({
389+config: {},
390+args: { query: "fallback-validation-error", freshness: "forever" },
391+}),
392+).resolves.toEqual({
393+provider: "google",
394+result: {
395+error: "invalid_freshness",
396+message: "freshness must be day, week, month, or year.",
397+},
398+});
399+});
400+343401it("does not prebuild fallback provider tools before attempting the selected provider", async () => {
344402resolveRuntimeWebSearchProvidersMock.mockReturnValue([
345403createGoogleSearchProvider(),
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。