Files
OmniRoute/tests/unit/early-keepalive-byte-buffer.test.ts
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

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");
});