91 lines
2.7 KiB
TypeScript
91 lines
2.7 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import type { ModelProviderConfig } from "../config/types.js";
|
|
import {
|
|
groupPluginDiscoveryProvidersByOrder,
|
|
normalizePluginDiscoveryResult,
|
|
} from "./provider-discovery.js";
|
|
import type { ProviderDiscoveryOrder, ProviderPlugin } from "./types.js";
|
|
|
|
function makeProvider(params: {
|
|
id: string;
|
|
label?: string;
|
|
order?: ProviderDiscoveryOrder;
|
|
}): ProviderPlugin {
|
|
return {
|
|
id: params.id,
|
|
label: params.label ?? params.id,
|
|
auth: [],
|
|
discovery: {
|
|
...(params.order ? { order: params.order } : {}),
|
|
run: async () => null,
|
|
},
|
|
};
|
|
}
|
|
|
|
function makeModelProviderConfig(overrides?: Partial<ModelProviderConfig>): ModelProviderConfig {
|
|
return {
|
|
baseUrl: "http://127.0.0.1:8000/v1",
|
|
models: [],
|
|
...overrides,
|
|
};
|
|
}
|
|
|
|
describe("groupPluginDiscoveryProvidersByOrder", () => {
|
|
it("groups providers by declared order and sorts labels within each group", () => {
|
|
const grouped = groupPluginDiscoveryProvidersByOrder([
|
|
makeProvider({ id: "late-b", label: "Zulu" }),
|
|
makeProvider({ id: "late-a", label: "Alpha" }),
|
|
makeProvider({ id: "paired", label: "Paired", order: "paired" }),
|
|
makeProvider({ id: "profile", label: "Profile", order: "profile" }),
|
|
makeProvider({ id: "simple", label: "Simple", order: "simple" }),
|
|
]);
|
|
|
|
expect(grouped.simple.map((provider) => provider.id)).toEqual(["simple"]);
|
|
expect(grouped.profile.map((provider) => provider.id)).toEqual(["profile"]);
|
|
expect(grouped.paired.map((provider) => provider.id)).toEqual(["paired"]);
|
|
expect(grouped.late.map((provider) => provider.id)).toEqual(["late-a", "late-b"]);
|
|
});
|
|
});
|
|
|
|
describe("normalizePluginDiscoveryResult", () => {
|
|
it("maps a single provider result to the plugin id", () => {
|
|
const provider = makeProvider({ id: "Ollama" });
|
|
const normalized = normalizePluginDiscoveryResult({
|
|
provider,
|
|
result: {
|
|
provider: makeModelProviderConfig({
|
|
baseUrl: "http://127.0.0.1:11434",
|
|
api: "ollama",
|
|
}),
|
|
},
|
|
});
|
|
|
|
expect(normalized).toEqual({
|
|
ollama: {
|
|
baseUrl: "http://127.0.0.1:11434",
|
|
api: "ollama",
|
|
models: [],
|
|
},
|
|
});
|
|
});
|
|
|
|
it("normalizes keys for multi-provider discovery results", () => {
|
|
const normalized = normalizePluginDiscoveryResult({
|
|
provider: makeProvider({ id: "ignored" }),
|
|
result: {
|
|
providers: {
|
|
" VLLM ": makeModelProviderConfig(),
|
|
"": makeModelProviderConfig({ baseUrl: "http://ignored" }),
|
|
},
|
|
},
|
|
});
|
|
|
|
expect(normalized).toEqual({
|
|
vllm: {
|
|
baseUrl: "http://127.0.0.1:8000/v1",
|
|
models: [],
|
|
},
|
|
});
|
|
});
|
|
});
|