{"version":3,"file":"validation.mjs","names":[],"sources":["../../../../src/batteries/generation/transformers_js/validation.ts"],"sourcesContent":["/**\n * Runtime validation schema and wrapper for transformers.js Generation adapter options.\n *\n * @module @nhtio/adk/batteries/generation/transformers_js/validation\n *\n * @remarks\n * Validates `TransformersJsGenerationAdapterOptions` at construction time. Throws\n * `E_INVALID_TRANSFORMERS_JS_GENERATION_OPTIONS` on failure. `model` is required; unknown top-level\n * keys are rejected so typos fail loud.\n */\n\nimport { isError } from '@nhtio/adk/guards'\nimport { validator, ValidationError } from '@nhtio/validation'\nimport { E_INVALID_TRANSFORMERS_JS_GENERATION_OPTIONS } from './exceptions'\nimport type { TransformersJsGenerationAdapterOptions } from './types'\n\n/** Validator schema for `TransformersJsGenerationAdapterOptions`. Rejects unknown top-level keys. */\nexport const transformersJsGenerationOptionsSchema = validator\n  .object<TransformersJsGenerationAdapterOptions>({\n    model: validator.string().min(1).required(),\n    // Model/processor knobs (structural duck-types — accept function or object).\n    janusModel: validator.object().unknown(true).optional(),\n    processor: validator\n      .alternatives(validator.function(), validator.object().unknown(true))\n      .optional(),\n    createModel: validator.function().optional(),\n    createProcessor: validator.function().optional(),\n    device: validator.string().optional(),\n    dtype: validator.string().optional(),\n    modelSource: validator.function().optional(),\n    onInitProgress: validator.function().optional(),\n    isAvailable: validator.function().optional(),\n    encodeImage: validator.function().optional(),\n    // Sampling defaults.\n    doSample: validator.boolean().optional(),\n    temperature: validator.number().optional(),\n    topK: validator.number().optional(),\n    guidanceScale: validator.number().optional(),\n    repetitionPenalty: validator.number().optional(),\n    chatTemplate: validator.string().optional(),\n    role: validator.string().optional(),\n    // ── Lifecycle hooks (opt-in, normalized phase machine; additive over onInitProgress) ──\n    onLifecycle: validator.function().optional(),\n    onLoading: validator.function().optional(),\n    onCompiling: validator.function().optional(),\n    onReady: validator.function().optional(),\n    onGenerating: validator.function().optional(),\n    onComplete: validator.function().optional(),\n    onError: validator.function().optional(),\n  })\n  .unknown(false)\n\nconst isValidationError = (value: unknown): value is ValidationError =>\n  isError(value) && Array.isArray((value as ValidationError).details)\n\nconst formatValidationDetails = (err: ValidationError): string =>\n  err.details.map((d) => d.message).join(' and ')\n\n/**\n * Validates an arbitrary input against `transformersJsGenerationOptionsSchema`.\n *\n * @param input - The raw options object to validate.\n * @returns The resolved options object with defaults filled in.\n * @throws {@link @nhtio/adk/batteries!E_INVALID_TRANSFORMERS_JS_GENERATION_OPTIONS} when invalid.\n */\nexport const validateOptions = (input: unknown): TransformersJsGenerationAdapterOptions => {\n  const { value, error } = transformersJsGenerationOptionsSchema.validate(input, {\n    abortEarly: false,\n    convert: false,\n  })\n  if (error && isValidationError(error)) {\n    throw new E_INVALID_TRANSFORMERS_JS_GENERATION_OPTIONS([formatValidationDetails(error)], {\n      cause: error,\n    })\n  }\n  return value as TransformersJsGenerationAdapterOptions\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAiBA,IAAa,wCAAwC,UAClD,OAA+C;CAC9C,OAAO,UAAU,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;CAE1C,YAAY,UAAU,OAAO,EAAE,QAAQ,IAAI,EAAE,SAAS;CACtD,WAAW,UACR,aAAa,UAAU,SAAS,GAAG,UAAU,OAAO,EAAE,QAAQ,IAAI,CAAC,EACnE,SAAS;CACZ,aAAa,UAAU,SAAS,EAAE,SAAS;CAC3C,iBAAiB,UAAU,SAAS,EAAE,SAAS;CAC/C,QAAQ,UAAU,OAAO,EAAE,SAAS;CACpC,OAAO,UAAU,OAAO,EAAE,SAAS;CACnC,aAAa,UAAU,SAAS,EAAE,SAAS;CAC3C,gBAAgB,UAAU,SAAS,EAAE,SAAS;CAC9C,aAAa,UAAU,SAAS,EAAE,SAAS;CAC3C,aAAa,UAAU,SAAS,EAAE,SAAS;CAE3C,UAAU,UAAU,QAAQ,EAAE,SAAS;CACvC,aAAa,UAAU,OAAO,EAAE,SAAS;CACzC,MAAM,UAAU,OAAO,EAAE,SAAS;CAClC,eAAe,UAAU,OAAO,EAAE,SAAS;CAC3C,mBAAmB,UAAU,OAAO,EAAE,SAAS;CAC/C,cAAc,UAAU,OAAO,EAAE,SAAS;CAC1C,MAAM,UAAU,OAAO,EAAE,SAAS;CAElC,aAAa,UAAU,SAAS,EAAE,SAAS;CAC3C,WAAW,UAAU,SAAS,EAAE,SAAS;CACzC,aAAa,UAAU,SAAS,EAAE,SAAS;CAC3C,SAAS,UAAU,SAAS,EAAE,SAAS;CACvC,cAAc,UAAU,SAAS,EAAE,SAAS;CAC5C,YAAY,UAAU,SAAS,EAAE,SAAS;CAC1C,SAAS,UAAU,SAAS,EAAE,SAAS;AACzC,CAAC,EACA,QAAQ,KAAK;AAEhB,IAAM,qBAAqB,UACzB,QAAQ,KAAK,KAAK,MAAM,QAAS,MAA0B,OAAO;AAEpE,IAAM,2BAA2B,QAC/B,IAAI,QAAQ,KAAK,MAAM,EAAE,OAAO,EAAE,KAAK,OAAO;;;;;;;;AAShD,IAAa,mBAAmB,UAA2D;CACzF,MAAM,EAAE,OAAO,UAAU,sCAAsC,SAAS,OAAO;EAC7E,YAAY;EACZ,SAAS;CACX,CAAC;CACD,IAAI,SAAS,kBAAkB,KAAK,GAClC,MAAM,IAAI,6CAA6C,CAAC,wBAAwB,KAAK,CAAC,GAAG,EACvF,OAAO,MACT,CAAC;CAEH,OAAO;AACT"}