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.
52 lines
1.9 KiB
TypeScript
52 lines
1.9 KiB
TypeScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
|
|
import {
|
|
recordEarlyKeepaliveBytes,
|
|
takeEarlyKeepaliveBytes,
|
|
} from "../../open-sse/utils/earlyKeepaliveByteBuffer.ts";
|
|
|
|
test("records are returned in the order they were written", () => {
|
|
const id = "buf-order-1";
|
|
recordEarlyKeepaliveBytes(id, "a");
|
|
recordEarlyKeepaliveBytes(id, "b");
|
|
recordEarlyKeepaliveBytes(id, "c");
|
|
assert.deepEqual(takeEarlyKeepaliveBytes(id), ["a", "b", "c"]);
|
|
});
|
|
|
|
test("take clears the entry — a second take for the same id is empty", () => {
|
|
const id = "buf-once-1";
|
|
recordEarlyKeepaliveBytes(id, "a");
|
|
takeEarlyKeepaliveBytes(id);
|
|
assert.deepEqual(takeEarlyKeepaliveBytes(id), []);
|
|
});
|
|
|
|
test("take on an id that was never recorded returns an empty array, not undefined", () => {
|
|
assert.deepEqual(takeEarlyKeepaliveBytes("buf-never-recorded"), []);
|
|
});
|
|
|
|
test("different correlation ids do not leak into each other", () => {
|
|
recordEarlyKeepaliveBytes("buf-iso-a", "only-a");
|
|
recordEarlyKeepaliveBytes("buf-iso-b", "only-b");
|
|
assert.deepEqual(takeEarlyKeepaliveBytes("buf-iso-a"), ["only-a"]);
|
|
assert.deepEqual(takeEarlyKeepaliveBytes("buf-iso-b"), ["only-b"]);
|
|
});
|
|
|
|
test("empty chunk and empty correlationId are both no-ops", () => {
|
|
const id = "buf-noop-1";
|
|
recordEarlyKeepaliveBytes(id, "");
|
|
recordEarlyKeepaliveBytes("", "should-not-record");
|
|
assert.deepEqual(takeEarlyKeepaliveBytes(id), []);
|
|
assert.deepEqual(takeEarlyKeepaliveBytes(""), []);
|
|
});
|
|
|
|
test("a pathologically long-lived slow path does not grow the buffer unbounded", () => {
|
|
const id = "buf-cap-1";
|
|
for (let i = 0; i < 1000; i++) {
|
|
recordEarlyKeepaliveBytes(id, `tick-${i}`);
|
|
}
|
|
const chunks = takeEarlyKeepaliveBytes(id);
|
|
assert.ok(chunks.length < 1000, "buffer must cap well below an unbounded 1000 items");
|
|
assert.ok(chunks.length > 0, "capping must not silently drop everything");
|
|
});
|