import type { ModelPool } from '../pool.js'; import type { ModelStore } from '../store.js'; import type { Logger } from '../lib/logger.js'; import type { StableDiffusionSamplingMethod } from '../engines/stable-diffusion-cpp/types.js'; import { AssistantMessage, ChatMessage, CompletionFinishReason, ToolDefinition } from '../types/chat.js'; import { Image, Audio, ModelConfig, TaskArgs, ChatCompletionTaskArgs, TextCompletionTaskArgs, EmbeddingTaskArgs, ImageToTextTaskArgs, SpeechToTextTaskArgs, TextToSpeechTaskArgs, TextToImageTaskArgs, ImageToImageTaskArgs, ObjectDetectionTaskArgs, TextClassificationTaskArgs } from '../types/index.js'; export interface TextCompletionParamsBase { temperature?: number; maxTokens?: number; seed?: number; stop?: string[]; repeatPenalty?: number; repeatPenaltyNum?: number; frequencyPenalty?: number; presencePenalty?: number; grammar?: string; topP?: number; minP?: number; topK?: number; tokenBias?: Record; } export interface TextCompletionParams extends TextCompletionParamsBase { model: string; prompt: string; } export interface ChatCompletionParams extends TextCompletionParamsBase { model: string; messages: ChatMessage[]; grammar?: string; tools?: { definitions: Record; documentParams?: boolean; maxParallelCalls?: number; }; } export interface TextEmbeddingInput { type: 'text'; content: string; } export interface ImageEmbeddingInput { type: 'image'; content: Image; } export type EmbeddingInput = TextEmbeddingInput | ImageEmbeddingInput | string; export interface EmbeddingParams { model: string; input: EmbeddingInput | EmbeddingInput[]; dimensions?: number; pooling?: 'cls' | 'mean'; } export interface ImageToTextParams { model: string; image: Image; prompt?: string; maxTokens?: number; } export interface StableDiffusionParams { negativePrompt?: string; guidance?: number; styleRatio?: number; strength?: number; sampleSteps?: number; batchCount?: number; samplingMethod?: StableDiffusionSamplingMethod; cfgScale?: number; controlStrength?: number; } export interface TextToImageParams extends StableDiffusionParams { model: string; prompt: string; width?: number; height?: number; seed?: number; } export interface ImageToImageParams extends StableDiffusionParams { model: string; image: Image; prompt: string; width?: number; height?: number; seed?: number; } export interface ObjectDetectionParams { model: string; image: Image; threshold?: number; labels?: string[]; } export interface TextClassificationParams { model: string; input: string | string[]; hypothesisTemplate?: string; threshold?: number; topK?: number; labels?: string[]; } export interface SpeechToTextParams { model: string; audio: Audio; language?: string; prompt?: string; maxTokens?: number; } export interface TextToSpeechParams { model: string; text: string; voice?: string; } export type InferenceParams = TextCompletionParams | ChatCompletionParams | EmbeddingParams | ImageToTextParams | SpeechToTextParams | TextToSpeechParams | TextToImageParams | ImageToImageParams | ObjectDetectionParams; export interface EngineContext { config: TModelConfig; meta?: TModelMeta; log: Logger; } export interface FileDownloadProgress { file: string; loadedBytes: number; totalBytes: number; } export interface EngineStartContext { pool: ModelPool; store: ModelStore; } export interface EngineTaskContext extends EngineContext { instance: TModelInstance; } export interface EngineTextCompletionTaskContext extends EngineTaskContext { resetContext?: boolean; } export interface ModelEngine { autoGpu?: boolean; start?: (ctx: EngineStartContext) => Promise; prepareModel: (ctx: EngineContext, onProgress?: (progress: FileDownloadProgress) => void, signal?: AbortSignal) => Promise; createInstance: (ctx: EngineContext, signal?: AbortSignal) => Promise; disposeInstance: (instance: TModelInstance) => Promise; processChatCompletionTask?: (task: ChatCompletionTaskArgs, ctx: EngineTextCompletionTaskContext, signal?: AbortSignal) => Promise; processTextCompletionTask?: (task: TextCompletionTaskArgs, ctx: EngineTextCompletionTaskContext, signal?: AbortSignal) => Promise; processEmbeddingTask?: (task: EmbeddingTaskArgs, ctx: EngineTaskContext, signal?: AbortSignal) => Promise; processImageToTextTask?: (task: ImageToTextTaskArgs, ctx: EngineTaskContext, signal?: AbortSignal) => Promise; processSpeechToTextTask?: (task: SpeechToTextTaskArgs, ctx: EngineTaskContext, signal?: AbortSignal) => Promise; processTextToSpeechTask?: (task: TextToSpeechTaskArgs, ctx: EngineTaskContext, signal?: AbortSignal) => Promise; processTextToImageTask?: (task: TextToImageTaskArgs, ctx: EngineTaskContext, signal?: AbortSignal) => Promise; processImageToImageTask?: (task: ImageToImageTaskArgs, ctx: EngineTaskContext, signal?: AbortSignal) => Promise; processObjectDetectionTask?: (task: ObjectDetectionTaskArgs, ctx: EngineTaskContext, signal?: AbortSignal) => Promise; processTextClassificationTask?: (task: TextClassificationTaskArgs, ctx: EngineTaskContext, signal?: AbortSignal) => Promise; } export type TaskProcessorName = keyof Omit; export type TaskProcessor = (task: TaskArgs, ctx: EngineTaskContext, signal?: AbortSignal) => Promise; export interface EmbeddingTaskResult { embeddings: Float32Array[]; inputTokens: number; } export interface ChatCompletionTaskResult { message: AssistantMessage; finishReason: CompletionFinishReason; promptTokens: number; completionTokens: number; contextTokens: number; } export interface TextCompletionTaskResult { text: string; finishReason: CompletionFinishReason; promptTokens: number; completionTokens: number; contextTokens: number; } export interface ImageToTextTaskResult { text: string; } export interface TextToImageTaskResult { images: Image[]; seed: number; } export interface ImageToImageTaskResult { images: Image[]; seed: number; } export interface SpeechToTextTaskResult { text: string; } export interface TextToSpeechTaskResult { audio: Audio; } export interface ObjectDetectionResult { label: string; score: number; box: { x: number; y: number; width: number; height: number; }; } export interface ObjectDetectionTaskResult { detections: ObjectDetectionResult[]; } export interface TextClassificationResult { labels: Array<{ name: string; score: number; }>; } export interface TextClassificationTaskResult { classifications: TextClassificationResult[]; } export type TaskResult = ChatCompletionTaskResult | TextCompletionTaskResult | EmbeddingTaskResult | ImageToTextTaskResult | SpeechToTextTaskResult | TextToSpeechTaskResult | TextToImageTaskResult | ImageToImageTaskResult | ObjectDetectionTaskResult | TextClassificationTaskResult;