57 lines
2.1 KiB
TypeScript
57 lines
2.1 KiB
TypeScript
import { readFileSync } from "node:fs";
|
|
import { join } from "node:path";
|
|
import { getProviders } from "@mariozechner/pi-ai";
|
|
import { describe, expect, it } from "vitest";
|
|
import {
|
|
CONNECTORS,
|
|
getConnectorKnownProvider,
|
|
getConnectorProvider,
|
|
isLocalModelResolverProvider,
|
|
isPiKnownProvider,
|
|
} from "../../src/main/connectors";
|
|
import { FIREWORKS_FIREPASS_MODEL_ID, resolveModel, resolveModels } from "../../src/main/model-resolver";
|
|
|
|
describe("connector provider guard", () => {
|
|
it("classifies catalog providers before they enter pi-ai APIs", () => {
|
|
const piProviders = new Set(getProviders());
|
|
|
|
for (const connector of CONNECTORS) {
|
|
const provider = getConnectorProvider(connector.id);
|
|
expect(provider).toBe(connector.provider);
|
|
|
|
if (isLocalModelResolverProvider(provider)) {
|
|
expect(getConnectorKnownProvider(connector.id)).toBeNull();
|
|
} else {
|
|
expect(isPiKnownProvider(provider)).toBe(true);
|
|
expect(piProviders.has(provider)).toBe(true);
|
|
expect(getConnectorKnownProvider(connector.id)).toBe(provider);
|
|
}
|
|
}
|
|
});
|
|
|
|
it("uses the provider guard in model discovery", () => {
|
|
const anthropicModels = resolveModels("anthropic");
|
|
const firstAnthropicModel = anthropicModels[0];
|
|
if (!firstAnthropicModel) throw new Error("Anthropic model catalog is empty.");
|
|
|
|
expect(resolveModel("anthropic", firstAnthropicModel.id)?.id).toBe(firstAnthropicModel.id);
|
|
expect(resolveModels("not-a-pi-provider")).toEqual([]);
|
|
expect(resolveModel("not-a-pi-provider", "model-id")).toBeNull();
|
|
expect(resolveModel("fireworks-firepass", "ignored")?.id).toBe(FIREWORKS_FIREPASS_MODEL_ID);
|
|
});
|
|
|
|
it("keeps provider calls free of erased never casts", () => {
|
|
const files = [
|
|
"src/main/model-resolver.ts",
|
|
"src/main/connector-health-service.ts",
|
|
"src/main/credentials/credential-resolver.ts",
|
|
];
|
|
|
|
for (const file of files) {
|
|
const source = readFileSync(join(process.cwd(), file), "utf8");
|
|
expect(source).not.toContain("provider as never");
|
|
expect(source).not.toContain("definition.provider as never");
|
|
}
|
|
});
|
|
});
|