fix(web_search): Fix invalid model name sent to Perplexity (#12795)

* fix(web_search): Fix invalid model name sent to Perplexity

* chore: Only apply fix to direct Perplexity calls

* fix(web_search): normalize direct Perplexity model IDs

* fix: add changelog note for perplexity model normalization (#12795) (thanks @cdorsey)

* fix: align tests and fetch type for gate stability (#12795) (thanks @cdorsey)

* chore: keep #12795 scoped to web_search changes

---------

Co-authored-by: Sebastian <19554889+sebslight@users.noreply.github.com>
This commit is contained in:
Chase Dorsey
2026-02-09 13:43:57 -05:00
committed by GitHub
parent 40b11db80e
commit 512b2053c5
4 changed files with 66 additions and 2 deletions

View File

@@ -4,6 +4,8 @@ import { __testing } from "./web-search.js";
const {
inferPerplexityBaseUrlFromApiKey,
resolvePerplexityBaseUrl,
isDirectPerplexityBaseUrl,
resolvePerplexityRequestModel,
normalizeFreshness,
resolveGrokApiKey,
resolveGrokModel,
@@ -58,6 +60,32 @@ describe("web_search perplexity baseUrl defaults", () => {
});
});
describe("web_search perplexity model normalization", () => {
it("detects direct Perplexity host", () => {
expect(isDirectPerplexityBaseUrl("https://api.perplexity.ai")).toBe(true);
expect(isDirectPerplexityBaseUrl("https://api.perplexity.ai/")).toBe(true);
expect(isDirectPerplexityBaseUrl("https://openrouter.ai/api/v1")).toBe(false);
});
it("strips provider prefix for direct Perplexity", () => {
expect(resolvePerplexityRequestModel("https://api.perplexity.ai", "perplexity/sonar-pro")).toBe(
"sonar-pro",
);
});
it("keeps prefixed model for OpenRouter", () => {
expect(
resolvePerplexityRequestModel("https://openrouter.ai/api/v1", "perplexity/sonar-pro"),
).toBe("perplexity/sonar-pro");
});
it("keeps model unchanged when URL is invalid", () => {
expect(resolvePerplexityRequestModel("not-a-url", "perplexity/sonar-pro")).toBe(
"perplexity/sonar-pro",
);
});
});
describe("web_search freshness normalization", () => {
it("accepts Brave shortcut values", () => {
expect(normalizeFreshness("pd")).toBe("pd");