Files
OmniRoute/open-sse/services/rateLimitManager/errors.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

95 lines
3.4 KiB
TypeScript

export const RATE_LIMIT_EXECUTION_TIMEOUT_CODE = "RATE_LIMIT_EXECUTION_TIMEOUT";
export const RATE_LIMIT_QUEUE_FULL_CODE = "RATE_LIMIT_QUEUE_FULL";
export const RATE_LIMIT_QUEUE_WEDGED_CODE = "RATE_LIMIT_QUEUE_WEDGED";
export const LEGACY_RATE_LIMIT_QUEUE_TIMEOUT_CODE = "RATE_LIMIT_QUEUE_TIMEOUT";
export type LocalRateLimitErrorCode =
| typeof RATE_LIMIT_EXECUTION_TIMEOUT_CODE
| typeof RATE_LIMIT_QUEUE_FULL_CODE
| typeof RATE_LIMIT_QUEUE_WEDGED_CODE;
export type TrustedLocalRateLimitErrorCode =
LocalRateLimitErrorCode | typeof LEGACY_RATE_LIMIT_QUEUE_TIMEOUT_CODE;
export interface TrustedLocalRateLimitFailure {
code: TrustedLocalRateLimitErrorCode;
status: 429 | 503 | 504;
}
const localRateLimitErrors = new WeakMap<object, TrustedLocalRateLimitFailure>();
const localRateLimitResponses = new WeakMap<Response, TrustedLocalRateLimitFailure>();
function getStatusForCode(code: TrustedLocalRateLimitErrorCode): 429 | 503 | 504 {
switch (code) {
case RATE_LIMIT_QUEUE_FULL_CODE:
return 429;
case RATE_LIMIT_EXECUTION_TIMEOUT_CODE:
return 504;
case RATE_LIMIT_QUEUE_WEDGED_CODE:
case LEGACY_RATE_LIMIT_QUEUE_TIMEOUT_CODE:
return 503;
}
}
/**
* Brand an error created by OmniRoute's local limiter. The WeakMap identity,
* not the public code string, is the trusted provenance signal.
*/
export function markLocalRateLimitError<T extends Error>(
error: T,
code: TrustedLocalRateLimitErrorCode
): T & { code: TrustedLocalRateLimitErrorCode; status: 429 | 503 | 504 } {
const failure = Object.freeze({ code, status: getStatusForCode(code) });
localRateLimitErrors.set(error, failure);
const branded = error as T & {
code: TrustedLocalRateLimitErrorCode;
status: 429 | 503 | 504;
};
branded.code = failure.code;
branded.status = failure.status;
return branded;
}
export function getTrustedLocalRateLimitError(error: unknown): TrustedLocalRateLimitFailure | null {
if (!error || (typeof error !== "object" && typeof error !== "function")) return null;
return localRateLimitErrors.get(error as object) ?? null;
}
/**
* Return the public fields for a trusted local failure without its low-level
* Bottleneck cause, which must remain server-side diagnostic context.
*/
export function getClientSafeLocalRateLimitError(
error: unknown
): (TrustedLocalRateLimitFailure & { message: string }) | null {
const failure = getTrustedLocalRateLimitError(error);
if (!failure) return null;
return {
...failure,
message: error instanceof Error ? error.message : "Local rate-limit failure",
};
}
/**
* Transfer trusted local provenance from a branded error to its generated
* internal Response. Provider-controlled bodies and headers cannot set this.
*/
export function markTrustedLocalRateLimitResponse(response: Response, error: unknown): Response {
const failure = getTrustedLocalRateLimitError(error);
if (failure) localRateLimitResponses.set(response, failure);
return response;
}
export function getTrustedLocalRateLimitResponse(
response: Response
): TrustedLocalRateLimitFailure | null {
return localRateLimitResponses.get(response) ?? null;
}
/** Preserve trusted provenance when an internal response wrapper must allocate. */
export function inheritTrustedLocalRateLimitResponse(source: Response, target: Response): Response {
const failure = localRateLimitResponses.get(source);
if (failure) localRateLimitResponses.set(target, failure);
return target;
}