import type { TrainingConfigSchema } from '../../../config/training-defaults.d.ts'; import type { Tensor } from '../../../gpu/tensor.js'; export interface TrainingObjectiveContext { model: unknown; batch: Record; config: TrainingConfigSchema; tape: unknown; options: Record; lossScale: number; } export interface TrainingObjectiveLossResult { loss: Tensor; components?: Record; [key: string]: unknown; } export interface TrainingObjectiveBackwardSeed { tensor: Tensor; grad: Tensor; } export type TrainingObjectiveBackwardTargets = | Tensor | null | Map | TrainingObjectiveBackwardSeed[] | { seeds: TrainingObjectiveBackwardSeed[] }; export interface TrainingObjective { name: string; prepareBatch?: ( context: Omit & { batch: Record } ) => Promise> | Record; forward: ( context: TrainingObjectiveContext ) => Promise> | Record; computeLoss: ( context: TrainingObjectiveContext & { forwardState: Record } ) => Promise | Tensor | TrainingObjectiveLossResult; backwardTargets?: ( context: TrainingObjectiveContext & { loss: Tensor; lossResult: TrainingObjectiveLossResult } ) => Promise | TrainingObjectiveBackwardTargets; metrics?: ( context: TrainingObjectiveContext & { forwardState: Record; loss: Tensor; lossResult: TrainingObjectiveLossResult; } ) => Promise> | Record; cleanup?: ( context: TrainingObjectiveContext & { preparedBatch: Record } ) => Promise | void; } export declare function createTrainingObjective(definition: Partial): TrainingObjective; export declare function isTrainingObjective(value: unknown): value is TrainingObjective;