Files
clawdbot/src/agents/model-scan.test.ts
2026-01-08 05:20:39 +01:00

89 lines
2.5 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { scanOpenRouterModels } from "./model-scan.js";
function createFetchFixture(payload: unknown): typeof fetch {
return async () =>
new Response(JSON.stringify(payload), {
status: 200,
headers: { "content-type": "application/json" },
});
}
describe("scanOpenRouterModels", () => {
it("lists free models without probing", async () => {
const fetchImpl = createFetchFixture({
data: [
{
id: "acme/free-by-pricing",
name: "Free By Pricing",
context_length: 16_384,
max_completion_tokens: 1024,
supported_parameters: ["tools", "tool_choice", "temperature"],
modality: "text",
pricing: { prompt: "0", completion: "0", request: "0", image: "0" },
created_at: 1_700_000_000,
},
{
id: "acme/free-by-suffix:free",
name: "Free By Suffix",
context_length: 8_192,
supported_parameters: [],
modality: "text",
pricing: { prompt: "0", completion: "0" },
},
{
id: "acme/paid",
name: "Paid",
context_length: 4_096,
supported_parameters: ["tools"],
modality: "text",
pricing: { prompt: "0.000001", completion: "0.000002" },
},
],
});
const results = await scanOpenRouterModels({
fetchImpl,
probe: false,
});
expect(results.map((entry) => entry.id)).toEqual([
"acme/free-by-pricing",
"acme/free-by-suffix:free",
]);
const [byPricing] = results;
expect(byPricing).toBeTruthy();
if (!byPricing) {
throw new Error("Expected pricing-based model result.");
}
expect(byPricing.supportsToolsMeta).toBe(true);
expect(byPricing.supportedParametersCount).toBe(3);
expect(byPricing.isFree).toBe(true);
expect(byPricing.tool.skipped).toBe(true);
expect(byPricing.image.skipped).toBe(true);
});
it("requires an API key when probing", async () => {
const fetchImpl = createFetchFixture({ data: [] });
const previousKey = process.env.OPENROUTER_API_KEY;
try {
delete process.env.OPENROUTER_API_KEY;
await expect(
scanOpenRouterModels({
fetchImpl,
probe: true,
apiKey: "",
}),
).rejects.toThrow(/Missing OpenRouter API key/);
} finally {
if (previousKey === undefined) {
delete process.env.OPENROUTER_API_KEY;
} else {
process.env.OPENROUTER_API_KEY = previousKey;
}
}
});
});