import { type StreamIdleOptions } from "@caupulican/pi-agent-core/reliability"; import type { StreamFn } from "@caupulican/pi-agent-core/types"; import type { Api, Context, Model } from "@caupulican/pi-ai/types"; export declare const DEFAULT_ADAPTIVE_STREAM_IDLE_CEILING_MS: number; export interface ModelPerfProfile { prefillTokensPerSecond?: number; decodeTokensPerSecond?: number; loadMs?: number; firstProgressStall?: { elapsedMs: number; promptTokens: number; consecutive: number; observedAt: string; }; samples: number; updatedAt: string; } export interface ModelPerfSample { promptTokens?: number; completionTokens?: number; headersToFirstTokenMs?: number; requestToFirstTokenMs?: number; firstTokenToDoneMs?: number; loadMs?: number; /** Censored observation: transport connected but emitted no model token before this bound. */ firstProgressStallMs?: number; at?: string; } export interface AdaptiveStreamIdleInput { base: StreamIdleOptions; profile?: ModelPerfProfile; promptTokens: number; ceilingMs?: number; localClass?: boolean; provider?: string; } export interface ModelPerfProfileStreamRecorder { modelKey: (model: Model) => string | undefined; recordSample: (modelKey: string, sample: ModelPerfSample) => void; nowMs?: () => number; nowIso?: () => string; } export declare function isModelPerfProfile(value: unknown): value is ModelPerfProfile; export declare function hasUsableModelPerfSample(sample: ModelPerfSample): boolean; export declare function updateModelPerfProfile(current: ModelPerfProfile | undefined, sample: ModelPerfSample, at?: string): ModelPerfProfile | undefined; export declare function resolveAdaptiveStreamIdleOptions(input: AdaptiveStreamIdleInput): Partial; export declare function estimateContextPromptTokens(context: Context): number; export declare function withModelPerfProfile(streamFn: StreamFn, recorder: ModelPerfProfileStreamRecorder): StreamFn; //# sourceMappingURL=perf-profile.d.ts.map