mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-09-13 18:32:12 +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.
64 lines
2.4 KiB
TypeScript
64 lines
2.4 KiB
TypeScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
|
|
import { logfareProvider } from "../../open-sse/config/providers/registry/logfare/index.ts";
|
|
|
|
const { APIKEY_PROVIDERS } = await import(
|
|
"../../src/shared/constants/providers.ts"
|
|
);
|
|
const { REGISTRY: providerRegistry } =
|
|
await import("../../open-sse/config/providerRegistry.ts");
|
|
const { NAMED_OPENAI_STYLE_PROVIDERS, isNamedOpenAIStyleProvider } =
|
|
await import(
|
|
"../../src/app/api/providers/[id]/models/discovery/providerSets.ts"
|
|
);
|
|
|
|
const SPEC = {
|
|
id: "logfare",
|
|
alias: "logfare",
|
|
name: "Logfare",
|
|
website: "https://logfare.ai",
|
|
chatUrl: "https://logfare.ai/v1/chat/completions",
|
|
modelsUrl: "https://logfare.ai/v1/models",
|
|
};
|
|
|
|
test("logfareProvider registry entry has correct configuration", () => {
|
|
assert.equal(logfareProvider.id, "logfare");
|
|
assert.equal(logfareProvider.alias, "logfare");
|
|
assert.equal(logfareProvider.format, "openai");
|
|
assert.equal(logfareProvider.executor, "default");
|
|
assert.equal(logfareProvider.baseUrl, SPEC.chatUrl);
|
|
assert.equal(logfareProvider.modelsUrl, SPEC.modelsUrl);
|
|
assert.equal(logfareProvider.authType, "apikey");
|
|
assert.equal(logfareProvider.authHeader, "bearer");
|
|
// Catalog is discovered live from /v1/models; no hardcoded seed.
|
|
assert.equal(logfareProvider.passthroughModels, true);
|
|
assert.equal(logfareProvider.models.length, 0);
|
|
});
|
|
|
|
test("APIKEY_PROVIDERS.logfare is registered with the canonical identity", () => {
|
|
const entry = APIKEY_PROVIDERS[SPEC.id];
|
|
assert.ok(entry, `APIKEY_PROVIDERS.${SPEC.id} must be defined`);
|
|
assert.equal(entry.id, SPEC.id);
|
|
assert.equal(entry.alias, SPEC.alias);
|
|
assert.equal(entry.name, SPEC.name);
|
|
assert.equal(entry.website, SPEC.website);
|
|
assert.equal(entry.hasFree, true);
|
|
assert.equal(typeof entry.freeNote, "string");
|
|
assert.equal(typeof entry.apiHint, "string");
|
|
assert.match(entry.color, /^#[0-9A-Fa-f]{6}$/);
|
|
});
|
|
|
|
test("providerRegistry exposes the OpenAI-compatible chat completions URL", () => {
|
|
assert.equal(providerRegistry[SPEC.id].baseUrl, SPEC.chatUrl);
|
|
assert.equal(providerRegistry[SPEC.id].modelsUrl, SPEC.modelsUrl);
|
|
});
|
|
|
|
test("logfare is classified as a named OpenAI-style provider (live-fetch path)", () => {
|
|
assert.ok(
|
|
NAMED_OPENAI_STYLE_PROVIDERS.has(SPEC.id),
|
|
"logfare must be in NAMED_OPENAI_STYLE_PROVIDERS for live /v1/models fetch"
|
|
);
|
|
assert.equal(isNamedOpenAIStyleProvider(SPEC.id), true);
|
|
});
|