import type { InferencePipeline, KVCacheSnapshot, PromptInput } from '../../inference/pipelines/text.js'; import type { ChatMessage } from '../../inference/pipelines/text/chat-format.js'; import type { GenerateOptions } from '../../generation/index.js'; import type { RDRRManifest } from '../../formats/rdrr/index.js'; import type { LogitsStepResult, PipelineStats, PrefillResult, SequenceEncodeOptions, SequenceEncodeResult } from '../../inference/pipelines/text/types.d.ts'; import type { LoRAManifest } from './types.js'; import type { LoRALoadOptions } from './lora.js'; import type { DopplerPersistentCacheReceipt } from './model-source.js'; import type { DopplerComparisonFingerprint, DopplerInspectionTokenRecord, DopplerObservationPolicy, DopplerWordQualityRecord, } from '../inspection.js'; export type DopplerGenerateOptions = Omit; export interface DopplerGenerationConfigEvidence { maxTokens: number; temperature: number; topP: number; topK: number; repetitionPenalty: number; repetitionPenaltyWindow: number; greedyThreshold: number; suppressSpecialTokens: boolean; suppressSpecialLikeTokens: boolean; suppressTokenIds: number[]; stopSequences: string[]; useChatTemplate: boolean; useSpeculative: boolean | null; seed: number | null; } export interface DopplerGenerationBackendIdentity { backend: 'webgpu'; adapter: { vendor: string | null; architecture: string | null; device: string | null; description: string | null; }; hasF16: boolean; hasSubgroups: boolean; maxBufferSize: number; deviceEpoch: number; kernelPathId: string | null; kernelPathSource: string | null; executionPlanId: string | null; activationDtype: string | null; } export interface DopplerGenerationEvidence { schema: 'doppler_generation_evidence/v1'; outputText: string; tokenIds: number[]; transcript: { schema: 'doppler_generation_transcript/v1'; outputText: string; tokenIds: number[]; }; transcriptHash: string; generationConfig: DopplerGenerationConfigEvidence; generationConfigHash: string; runtimeProfile: { schema: 'doppler_runtime_profile/v1'; runtime: { package: 'doppler-gpu'; version: string; surface: 'node' | 'browser'; }; model: { modelId: string | null; manifestHash: string | null; activeAdapter: string | null; }; backendIdentity: DopplerGenerationBackendIdentity; }; runtimeProfileHash: string; backendIdentity: DopplerGenerationBackendIdentity; backendIdentityHash: string; stats: PipelineStats | null; } export interface DopplerChatResponse { content: string; usage: { promptTokens: number; completionTokens: number; totalTokens: number; }; } export interface DopplerModelHandle { generate(prompt: string, options?: DopplerGenerateOptions): AsyncGenerator; generateText(prompt: string, options?: DopplerGenerateOptions): Promise; generateWithEvidence(prompt: string, options?: DopplerGenerateOptions): Promise; chat(messages: ChatMessage[], options?: DopplerGenerateOptions): AsyncGenerator; chatText(messages: ChatMessage[], options?: DopplerGenerateOptions): Promise; embed(prompt: string, options?: Record): Promise; embedBatch(prompts: string[], options?: Record): Promise; encodeSequence(sequence: string, options?: SequenceEncodeOptions): Promise; resetGenerationState(): void; loadLoRA(adapter: LoRAManifest | RDRRManifest | string, loadOptions?: LoRALoadOptions): Promise; activateLoRAFromTrainingOutput( trainingOutput: | string | { adapter?: LoRAManifest | RDRRManifest | string; adapterManifest?: LoRAManifest | RDRRManifest; adapterManifestJson?: string; adapterManifestUrl?: string; adapterManifestPath?: string; } | null | undefined ): Promise<{ activated: boolean; adapterName: string | null; source: string | null; reason: string | null; }>; unloadLoRA(): Promise; unload(): Promise; readonly activeLoRA: string | null; readonly loaded: boolean; readonly modelId: string; readonly manifestHash: string | null; readonly persistentCache: DopplerPersistentCacheReceipt | null; readonly manifest: unknown; readonly deviceInfo: Record | null; readonly supportsSequence: boolean; readonly supportsEmbedding: boolean; readonly supportsTranscription: boolean; readonly supportsVision: boolean; readonly inspect: { listPolicies(): DopplerObservationPolicy[]; generate( prompt: string, options?: { policyId?: string; generation?: DopplerGenerateOptions; topKSize?: number; onEvent?: (event: { type: 'inspection-complete'; receipt: DopplerModelInspectionReceipt; }) => void; } ): Promise; }; readonly advanced: { tokenizeText(text: string): number[]; prefillKV(prompt: string, options?: DopplerGenerateOptions): Promise; resetToSeqLen(seqLen: number): void; prefillWithLogits( prompt: string | ChatMessage[] | { messages: ChatMessage[] }, options?: DopplerGenerateOptions ): Promise; prefillWithTokenLogits( prompt: PromptInput, tokenIds: readonly number[], options?: DopplerGenerateOptions ): Promise<{ seqLen: number; tokens: number[]; tokenIds: number[]; logits: Float32Array; logitsByTokenId: Record; phase?: Record | null; }>; prefillWithTokenLogitsFromKV( prefix: KVCacheSnapshot, prompt: PromptInput, tokenIds: readonly number[], options?: DopplerGenerateOptions ): Promise<{ seqLen: number; prefixTokens: number[]; tokens: number[]; tokenIds: number[]; logits: Float32Array; logitsByTokenId: Record; phase?: Record | null; }>; decodeStepLogits(currentIds: number[], options?: DopplerGenerateOptions): Promise; generateWithPrefixKV( prefix: KVCacheSnapshot, prompt: string, options?: DopplerGenerateOptions ): AsyncGenerator; }; } export interface DopplerModelInspectionReceipt { schema: 'doppler.model-inspection-receipt/v1'; policy: DopplerObservationPolicy; fingerprint: DopplerComparisonFingerprint; outputText: string; generatedTokenIds: number[]; wallTimingMs: number; performanceRepresentative: boolean; tokens: DopplerInspectionTokenRecord[]; quality: null | { wordSegmentation: 'doppler.word-segmentation/unicode-whitespace-v1'; aggregation: 'doppler.perplexity/summed-word-surprisal-v1'; rollingWindow: { unit: 'words' | 'tokens'; size: number }; words: DopplerWordQualityRecord[]; }; generationEvidence: DopplerGenerationEvidence; } export declare function assertSupportedGenerationOptions(options?: Record): void; export declare function createModelHandle( pipeline: InferencePipeline, resolved: { modelId: string; manifestHash?: string | null; persistentCache?: DopplerPersistentCacheReceipt | null; } ): DopplerModelHandle;