mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-09-21 22:32:22 +03:00
Landed with the design call resolved per the owner's pick — **option 1**: the synced store is now endpoint-agnostic (persistDiscoveredModels and managedModelImport no longer drop non-chat models at write time), and chat selectability moved to read time (auto-pool expansion in autoStrategy applies filterChatSelectableModels; the models-route projection already had its chatOnly filter). Your discovery test now passes end-to-end (3/3): /api/show capabilities persist per connection and image/embedding requests route through the advertising host. Reconciliation notes: conflicted areas merged onto the current tip (adobe discovery import, requestedModel preflight signature, resolvedProvider fast-path coexists with the synced-route override — explicit resolution wins); carried base-red drains (#10055 memoization, #11071 test variants) dropped as already-landed; the managed-model-import exclusion test was propagated to the new contract (image/video models persist; the read filter still hides them from chat pickers — pinned by a new assertion). Full battery: 205/206 focused (the one red is a confirmed periodic-timer timing flake on the loaded devbox — 20/20 isolated), autoCombo vitest 30/30, combo suites 46/46, gates + typecheck clean. Thank you @yourspraveen — the capability probe + routing design was right; it just needed the store contract opened up. Fixes #11087.
90 lines
3.4 KiB
TypeScript
90 lines
3.4 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import test from "node:test";
|
|
|
|
import {
|
|
getEligibleFreeOnboardingProviders,
|
|
setupFreeProviderConnections,
|
|
} from "../../src/lib/providers/freeOnboarding.ts";
|
|
|
|
test("batch setup creates missing providers, skips existing ones, and is retry-safe", async () => {
|
|
const existing = [{ provider: "opencode", name: "My customized OpenCode" }];
|
|
const created: Array<{ provider: string; name: string }> = [];
|
|
const candidates = getEligibleFreeOnboardingProviders();
|
|
const requestedIds = ["opencode", "theoldllm"];
|
|
|
|
const first = await setupFreeProviderConnections({
|
|
requestedIds,
|
|
candidates,
|
|
listExisting: async () => [...existing, ...created],
|
|
create: async (input) => {
|
|
created.push({ provider: input.provider, name: input.name });
|
|
return { id: `created-${input.provider}` };
|
|
},
|
|
});
|
|
const second = await setupFreeProviderConnections({
|
|
requestedIds,
|
|
candidates,
|
|
listExisting: async () => [...existing, ...created],
|
|
create: async (input) => {
|
|
created.push({ provider: input.provider, name: input.name });
|
|
return { id: `created-${input.provider}` };
|
|
},
|
|
});
|
|
|
|
assert.deepEqual(first.results, [
|
|
{ providerId: "opencode", status: "skipped", reason: "already-configured" },
|
|
{ providerId: "theoldllm", status: "created", connectionId: "created-theoldllm" },
|
|
]);
|
|
assert.deepEqual(second.results, [
|
|
{ providerId: "opencode", status: "skipped", reason: "already-configured" },
|
|
{ providerId: "theoldllm", status: "skipped", reason: "already-configured" },
|
|
]);
|
|
assert.deepEqual(existing, [{ provider: "opencode", name: "My customized OpenCode" }]);
|
|
assert.deepEqual(created, [{ provider: "theoldllm", name: "The Old LLM (Free)" }]);
|
|
});
|
|
|
|
test("batch setup rejects unknown or ineligible IDs before creating anything", async () => {
|
|
let createCalls = 0;
|
|
|
|
await assert.rejects(
|
|
setupFreeProviderConnections({
|
|
requestedIds: ["openai", "missing-provider"],
|
|
candidates: getEligibleFreeOnboardingProviders(),
|
|
listExisting: async () => [],
|
|
create: async () => {
|
|
createCalls += 1;
|
|
return { id: "unexpected" };
|
|
},
|
|
}),
|
|
/Ineligible free provider IDs: missing-provider, openai/
|
|
);
|
|
assert.equal(createCalls, 0);
|
|
});
|
|
|
|
test("partial failures are reported per provider and can be retried", async () => {
|
|
const created = new Set<string>();
|
|
let oldllmAttempts = 0;
|
|
const input = {
|
|
requestedIds: ["opencode", "theoldllm"],
|
|
candidates: getEligibleFreeOnboardingProviders(),
|
|
listExisting: async () => [...created].map((provider) => ({ provider })),
|
|
create: async ({ provider }: { provider: string }) => {
|
|
if (provider === "theoldllm" && oldllmAttempts++ === 0) throw new Error("upstream detail");
|
|
created.add(provider);
|
|
return { id: `created-${provider}` };
|
|
},
|
|
};
|
|
|
|
const first = await setupFreeProviderConnections(input);
|
|
const retry = await setupFreeProviderConnections(input);
|
|
|
|
assert.deepEqual(first.results, [
|
|
{ providerId: "opencode", status: "created", connectionId: "created-opencode" },
|
|
{ providerId: "theoldllm", status: "failed", reason: "Failed to create provider" },
|
|
]);
|
|
assert.deepEqual(retry.results, [
|
|
{ providerId: "opencode", status: "skipped", reason: "already-configured" },
|
|
{ providerId: "theoldllm", status: "created", connectionId: "created-theoldllm" },
|
|
]);
|
|
});
|