fix(connectors): guard pi provider resolution
This commit is contained in:
1 parent
0d9f4f15eb
commit
7793f2da35
6 files changed
+107
-17
No files matched your search
@@ -0,0 +1,56 @@
|
||||
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");
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user