Files
OmniRoute/scripts/ad-hoc/verify-coverage.mjs
Praveen K Palaniswamy 65e81158ab fix(ollama): route models by advertised capability (#11088)
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.
2026-08-23 11:45:01 -03:00

37 lines
1.2 KiB
JavaScript

// Verificacao de cobertura do plano da mesh.
// Envs: BOT_URL, BOT_TOKEN. Uso: node verify-coverage.mjs <plano.json>
import { readFileSync } from "node:fs";
import { env } from "node:process";
const BOT_URL = env.BOT_URL;
const BOT_TOKEN = env.BOT_TOKEN;
const FILTER = "platform=discord&language=en&direct=only";
const plan = JSON.parse(readFileSync(process.argv[2], "utf8"));
const res = await fetch(BOT_URL + "/internal/bridge/questions?" + FILTER, {
headers: { Authorization: "Bearer " + BOT_TOKEN },
});
const json = await res.json();
const pending = json.data || [];
const gaps = [];
const amb = [];
for (const m of pending) {
const t = (m.text || "").toLowerCase();
const hits = plan.filter((e) => t.includes(e.match.toLowerCase()));
if (hits.length === 0) {
gaps.push(m.id + " :: " + t.slice(0, 80));
} else if (hits.length > 1) {
const names = hits.map((h) => h.bucket + ":" + h.match).join(" | ");
amb.push(m.id + " :: " + names + " :: " + t.slice(0, 50));
}
}
console.log("pendentes:", pending.length, "| plano:", plan.length);
console.log("\n[GAPS] sem match (" + gaps.length + "):");
for (const g of gaps) console.log(" -", g);
console.log("\n[AMB] >1 match (" + amb.length + "):");
for (const a of amb) console.log(" -", a);