import type { BackwardRegistrySchema } from '../../config/schema/backward-registry.schema.js'; import type { TrainingConfigSchema } from '../../config/training-defaults.d.ts'; import type { Tensor } from '../../gpu/tensor.js'; import type { TrainingObjective } from './objectives/base.js'; export interface TrainingBatch { input: Tensor; targets: Tensor; } export interface TrainingOptimizer { step: ( params: Tensor[], grads: Map, config: TrainingConfigSchema, context?: { trainableGroups?: string[]; frozenGroups?: string[]; allGroups?: string[]; } ) => Promise; } export interface TrainStepOptions { registry?: BackwardRegistrySchema; crossEntropyLoss?: ( logits: Tensor, targets: Tensor, config: TrainingConfigSchema, tape: unknown ) => Promise; clipGradients?: ( grads: Map, config: TrainingConfigSchema ) => Promise; optimizer?: TrainingOptimizer; lossScale?: number; applyClip?: boolean; applyOptimizer?: boolean; trainingObjective?: TrainingObjective; stepIndex?: number | null; epochIndex?: number | null; batchIndex?: number | null; stage1ArtifactContext?: Record | null; stageAArtifactContext?: Record | null; } export interface ClipMetrics { clippedGrads: Map; gradient_norm_unclipped: number; gradient_norm_clipped: number; clipped_event_count: number; total_param_count: number; } export interface OptimizerMetrics { optimizer_ms: number; effective_lr?: number | null; scheduler_index?: number | null; scheduler_phase?: string | null; } export interface TrainStepResult { loss: Tensor; grads: Map; forward_ms?: number; backward_ms?: number; clipMetrics?: ClipMetrics; optimizerMetrics?: OptimizerMetrics; objectiveName?: string; objectiveMetrics?: Record; paramGroupMetrics?: { trainableGroups: string[]; frozenGroups: string[]; allGroups: string[]; trainableParamCount: number; }; } export declare function trainStep( model: { forward: (input: Tensor, tape: unknown) => Promise; loraParams?: () => Tensor[]; paramGroups?: () => Record; }, batch: TrainingBatch, config: TrainingConfigSchema, options?: TrainStepOptions ): Promise;