mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-29 10:02:04 +00:00
fix web search fallback explicitness
This commit is contained in:
@@ -503,6 +503,49 @@ describe("web search runtime", () => {
|
||||
).rejects.toThrow('Unknown web_search provider "missing-id".');
|
||||
});
|
||||
|
||||
it("still falls back when config names an unknown provider id", async () => {
|
||||
resolveRuntimeWebSearchProvidersMock.mockReturnValue([
|
||||
createProvider({
|
||||
pluginId: "google",
|
||||
id: "google",
|
||||
credentialPath: "tools.web.search.google.apiKey",
|
||||
autoDetectOrder: 1,
|
||||
getCredentialValue: () => "configured",
|
||||
createTool: () => {
|
||||
throw new Error("google aborted");
|
||||
},
|
||||
}),
|
||||
createProvider({
|
||||
pluginId: "duckduckgo",
|
||||
id: "duckduckgo",
|
||||
credentialPath: "",
|
||||
autoDetectOrder: 100,
|
||||
requiresCredential: false,
|
||||
}),
|
||||
]);
|
||||
|
||||
await expect(
|
||||
runWebSearch({
|
||||
config: {
|
||||
tools: {
|
||||
web: {
|
||||
search: {
|
||||
provider: "missing-id",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
args: { query: "config-typo" },
|
||||
}),
|
||||
).resolves.toMatchObject({
|
||||
provider: "duckduckgo",
|
||||
result: expect.objectContaining({
|
||||
provider: "duckduckgo",
|
||||
query: "config-typo",
|
||||
}),
|
||||
});
|
||||
});
|
||||
|
||||
it("honors preferRuntimeProviders during execution", async () => {
|
||||
const configuredProvider = createProvider({
|
||||
pluginId: "google",
|
||||
|
||||
@@ -265,19 +265,36 @@ function hasExplicitWebSearchSelection(params: {
|
||||
search?: WebSearchConfig;
|
||||
runtimeWebSearch?: RuntimeWebSearchMetadata;
|
||||
providerId?: string;
|
||||
providers?: PluginWebSearchProviderEntry[];
|
||||
}): boolean {
|
||||
if (params.providerId?.trim()) {
|
||||
return true;
|
||||
}
|
||||
if (
|
||||
const availableProviderIds = new Set(
|
||||
(params.providers ?? []).map((provider) => provider.id.trim().toLowerCase()),
|
||||
);
|
||||
const configuredProviderId =
|
||||
params.search &&
|
||||
"provider" in params.search &&
|
||||
typeof params.search.provider === "string" &&
|
||||
params.search.provider.trim()
|
||||
typeof params.search.provider === "string"
|
||||
? params.search.provider.trim().toLowerCase()
|
||||
: "";
|
||||
if (configuredProviderId && availableProviderIds.has(configuredProviderId)) {
|
||||
return true;
|
||||
}
|
||||
const runtimeConfiguredId = (
|
||||
params.runtimeWebSearch?.selectedProvider ?? params.runtimeWebSearch?.providerConfigured
|
||||
)
|
||||
?.trim()
|
||||
.toLowerCase();
|
||||
if (
|
||||
params.runtimeWebSearch?.providerSource === "configured" &&
|
||||
runtimeConfiguredId &&
|
||||
availableProviderIds.has(runtimeConfiguredId)
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
return params.runtimeWebSearch?.providerSource === "configured";
|
||||
return false;
|
||||
}
|
||||
|
||||
export async function runWebSearch(
|
||||
@@ -297,6 +314,7 @@ export async function runWebSearch(
|
||||
search,
|
||||
runtimeWebSearch,
|
||||
providerId: params.providerId,
|
||||
providers: candidates,
|
||||
});
|
||||
let lastError: unknown;
|
||||
let sawUnavailableProvider = false;
|
||||
|
||||
Reference in New Issue
Block a user