mirror of
https://github.com/Nezumi-2711/9router.git
synced 2026-09-22 13:38:31 +00:00
refactor(open-sse): registry consolidation + DRY media/oauth/adhoc cleanup
- Single-source registry: oauth clientId/tokenUrl, usage URLs, image/embed configs, search defaultModel, codex fixedPort, google token url derive. - Remove 29 unused OmniRoute providers (registry 100→71); media intact. - De-adhoc: codex literals → registry format/oauth flags; reasoningInject, image/embed openrouter headers + xai bodyFields config-driven. - Add REGISTRY_TEMPLATE.js + expand PROVIDER_DEFAULTS/schema JSDoc. - Baselines updated; PROVIDERS 62 + alias 90 byte-for-byte, golden snapshots. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
// Locks edge cases flagged in docs 11 §1/§4 that were only covered indirectly.
|
||||
import { describe, it, expect } from "vitest";
|
||||
import { normalizeClaudePassthrough } from "../../open-sse/translator/helpers/claudeHelper.js";
|
||||
import { parseDataUri, encodeDataUri } from "../../open-sse/translator/helpers/imageHelper.js";
|
||||
|
||||
describe("normalizeClaudePassthrough — haiku adaptive thinking (docs 11 §1)", () => {
|
||||
it("downgrades adaptive thinking to enabled+budget for haiku models", () => {
|
||||
const out = normalizeClaudePassthrough({ thinking: { type: "adaptive" } }, "claude-haiku-4-5");
|
||||
expect(out.thinking).toEqual({ type: "enabled", budget_tokens: 10000 });
|
||||
});
|
||||
|
||||
it("keeps adaptive thinking for sonnet/opus", () => {
|
||||
const out = normalizeClaudePassthrough({ thinking: { type: "adaptive" } }, "claude-sonnet-4-6");
|
||||
expect(out.thinking).toEqual({ type: "adaptive" });
|
||||
});
|
||||
|
||||
it("hoists mid-conversation system messages into top-level system", () => {
|
||||
const out = normalizeClaudePassthrough({
|
||||
messages: [
|
||||
{ role: "user", content: "hi" },
|
||||
{ role: "system", content: "be brief" },
|
||||
],
|
||||
});
|
||||
expect(out.system).toEqual([{ type: "text", text: "be brief" }]);
|
||||
expect(out.messages.every((m) => m.role !== "system")).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe("parseDataUri / encodeDataUri (docs 11 §4)", () => {
|
||||
it("parses a base64 data uri", () => {
|
||||
expect(parseDataUri("data:image/png;base64,AAAB")).toEqual({ mimeType: "image/png", base64: "AAAB" });
|
||||
});
|
||||
|
||||
it("tolerates newlines inside base64 payload", () => {
|
||||
expect(parseDataUri("data:image/jpeg;base64,AA\nBB")?.base64).toBe("AA\nBB");
|
||||
});
|
||||
|
||||
it("returns null for http urls and non-strings", () => {
|
||||
expect(parseDataUri("https://x/y.png")).toBeNull();
|
||||
expect(parseDataUri(null)).toBeNull();
|
||||
});
|
||||
|
||||
it("encode/parse roundtrip", () => {
|
||||
const uri = encodeDataUri("image/webp", "ZZZ");
|
||||
expect(parseDataUri(uri)).toEqual({ mimeType: "image/webp", base64: "ZZZ" });
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user