import type { OllamaRuntime, TransformersRuntime } from "./local-runtime.ts"; export type ResidencyControl = "full" | "keep-alive" | "advisory"; export type RuntimeRole = "active" | "router" | "bench" | "probe"; export interface RuntimeResidentModel { adapterId: string; model: string; bytes: number; lastUsedAtMs: number; priority: number; pinned?: boolean; residencyControl: ResidencyControl; } export interface RuntimeLoadRequest { model: string; bytes: number; role: RuntimeRole; priority: number; nowMs: number; /** Refuse an immediate reload of a model that was just evicted for the current resident. */ antiThrashWindowMs?: number; /** Protect every newly-used resident from eviction for this duration. */ minDwellMs?: number; pinActiveModel?: string; /** Adapter identity for this request; set by RuntimeResidencyArbiter before planning. */ adapterId?: string; /** When pinActiveModel is set, constrain that pin to this adapter when present. */ pinActiveAdapterId?: string; reservations?: RuntimeReservation[]; recentEvictions?: RuntimeEvictionRecord[]; /** False performs admission/eviction only; the real model request owns cold loading. Default true. */ loadModel?: boolean; } export interface RuntimeReservation { model: string; bytes: number; priority: number; /** Optional runtime identity; omitted means any adapter serving this model. */ adapterId?: string; } export interface RuntimeEvictionRecord { evicted: string; loaded: string; atMs: number; /** Optional identities preserve anti-thrash separation across runtime adapters. */ evictedAdapterId?: string; loadedAdapterId?: string; } export type RuntimeResidencyPlan = { status: "fits"; evict: RuntimeResidentModel[]; requiredBytes: number; budgetBytes: number; } | { status: "refuse"; reason: string; evict: RuntimeResidentModel[]; requiredBytes: number; budgetBytes: number; }; export interface RuntimeResidencyAdapter { id: string; residencyControl: ResidencyControl; list(): Promise; ensureResident(model: string): Promise; release(model: string): Promise; } export declare class RuntimeResidencyArbiter { private readonly budgetBytes; private readonly adapters; constructor(args: { budgetBytes: number; adapters: RuntimeResidencyAdapter[]; }); ensureResident(adapterId: string, request: RuntimeLoadRequest): Promise; } export declare class OllamaRuntimeResidencyAdapter implements RuntimeResidencyAdapter { readonly id: string; readonly residencyControl: "keep-alive"; private readonly runtime; private readonly nowMs; constructor(id: string, runtime: Pick, options?: { nowMs?: () => number; }); list(): Promise; ensureResident(model: string): Promise; release(model: string): Promise; } export declare class TransformersRuntimeResidencyAdapter implements RuntimeResidencyAdapter { readonly id: string; readonly residencyControl: "full"; private readonly runtime; private readonly model; private readonly bytes; private readonly nowMs; constructor(id: string, runtime: Pick, model: string, bytes: number, options?: { nowMs?: () => number; }); list(): Promise; ensureResident(_model: string): Promise; release(_model: string): Promise; } export declare class AdvisoryRuntimeResidencyAdapter implements RuntimeResidencyAdapter { readonly id: string; readonly residencyControl: "advisory"; private readonly residents; constructor(id: string, residents: Omit[]); list(): Promise; ensureResident(_model: string): Promise; release(_model: string): Promise; } export declare function planRuntimeResidency(args: { budgetBytes: number; residents: readonly RuntimeResidentModel[]; request: RuntimeLoadRequest; }): RuntimeResidencyPlan; //# sourceMappingURL=runtime-arbiter.d.ts.map