mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-09-16 20:02:45 +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.
29 lines
1.4 KiB
TypeScript
29 lines
1.4 KiB
TypeScript
/**
|
|
* Internal replay sentinel used when an upstream requires non-empty reasoning content but the
|
|
* original reasoning summary is unavailable. It is valid request scaffolding, never user-visible
|
|
* reasoning, so response translators must suppress it before emitting client-facing events.
|
|
*/
|
|
export const NON_ANTHROPIC_THINKING_PLACEHOLDER = "(prior reasoning summary unavailable)";
|
|
|
|
export function isInternalReasoningPlaceholder(value: unknown): boolean {
|
|
return typeof value === "string" && value.trim() === NON_ANTHROPIC_THINKING_PLACEHOLDER;
|
|
}
|
|
|
|
/**
|
|
* Strip the internal placeholder from user-visible content. Models sometimes
|
|
* echo the sentinel through ordinary `message.content` / `delta.content`
|
|
* (#8081). Removes all occurrences; returns "" when only whitespace remains so
|
|
* callers can skip emission entirely.
|
|
*
|
|
* IMPORTANT (#5786): this runs per-delta on the streaming path, where a delta's
|
|
* leading/trailing spaces are meaningful (e.g. "Hello, " + "world." + " Bye.").
|
|
* Only collapse to "" when the placeholder WAS the whole content — never trim
|
|
* real content, or streamed deltas glue together with their spaces eaten.
|
|
*/
|
|
export function stripInternalReasoningPlaceholder(value: string): string {
|
|
if (!value.includes(NON_ANTHROPIC_THINKING_PLACEHOLDER)) return value;
|
|
|
|
const stripped = value.replaceAll(NON_ANTHROPIC_THINKING_PLACEHOLDER, "");
|
|
return stripped.trim() === "" ? "" : stripped;
|
|
}
|