import { type Api, type AssistantMessage, type AssistantMessageEventStream, type AuthResult, type Context, type DeferredHandle, type Model, type ModelsApiStreamOptions, type ModelsDeferredCancelOptions, type ModelsDeferredFetchOptions, type ModelsRequestTransforms, type ModelsSimpleStreamOptions, type MutableModels, type ProviderHeaders, type SimpleStreamOptions, type StreamOptions } from "@bastani/pi-ai"; import type { ModelRuntimeAuthOverrides } from "./model-runtime-types.ts"; export declare function mergeHeaders(base: ProviderHeaders | undefined, override: ProviderHeaders | undefined): ProviderHeaders | undefined; /** SDK-owned request-auth result so transport preparation does not start a second deadline. */ export interface PreparedRequestAuth { readonly resolution: AuthResult | undefined; readonly reprepare?: () => Promise<{ model: Model; options: ModelRuntimeSimpleStreamOptions; }>; readonly streamSimple?: (model: Model, context: Context, options: SimpleStreamOptions) => AssistantMessageEventStream; } export type ModelRuntimePreparedStreamOptions = StreamOptions & ModelsRequestTransforms & { preparedRequestAuth?: PreparedRequestAuth; }; export type ModelRuntimeSimpleStreamOptions = ModelsSimpleStreamOptions & { preparedRequestAuth?: PreparedRequestAuth; }; type ResolveAuth = (model: Model, overrides?: ModelRuntimeAuthOverrides) => Promise; /** Whether an extension owns this model's transport, in which case it owns its serialization too. */ type OwnsExtensionTransport = (model: Model) => boolean; /** Streaming request preparation split from ModelRuntime solely for Atomic's 500-line source gate. */ export declare class ModelRuntimeStreaming { private readonly models; private readonly resolveAuth; private readonly ownsExtensionTransport; private readonly transportModel; private readonly reloadCredentials; constructor(models: MutableModels, resolveAuth: ResolveAuth, ownsExtensionTransport: OwnsExtensionTransport, transportModel?: (model: Model) => Model, reloadCredentials?: () => Promise); /** * Attach the first-party ChatGPT Codex routing identity to a prepared request. * * This must happen *after* `prepareRequest`, not before it. The wrapper works by mutating the * header object it captures at construction, and `prepareRequest` rebuilds headers through * `mergeHeaders`, which copies — so a wrapper applied upstream is silently inert. The wrapper * decides from the final payload whether the request is priority, so a normal model still ends up * with `originator: pi` and no routing hint. */ private withCodexRouting; private prepareRequest; stream(model: Model, context: Context, options?: ModelsApiStreamOptions): AssistantMessageEventStream; complete(model: Model, context: Context, options?: ModelsApiStreamOptions): Promise; streamSimple(model: Model, context: Context, options?: ModelRuntimeSimpleStreamOptions): AssistantMessageEventStream; completeSimple(model: Model, context: Context, options?: ModelRuntimeSimpleStreamOptions): Promise; private streamWithCredentialRetry; fetchDeferred(model: Model, handle: DeferredHandle, options?: ModelsDeferredFetchOptions): Promise; cancelDeferred(model: Model, handle: DeferredHandle, options?: ModelsDeferredCancelOptions): Promise; } export {}; //# sourceMappingURL=model-runtime-streaming.d.ts.map