/*
 * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
 * @generated-id: 0a16fbc0ad16
 */

import * as z from "zod/v4";
import { remap as remap$ } from "../../lib/primitives.js";
import { safeParse } from "../../lib/schemas.js";
import * as openEnums from "../../types/enums.js";
import { OpenEnum } from "../../types/enums.js";
import { Result as SafeParseResult } from "../../types/fp.js";
import { SDKValidationError } from "../errors/sdkvalidationerror.js";
import { Checkpoint, Checkpoint$inboundSchema } from "./checkpoint.js";
import {
  CompletionTrainingParameters,
  CompletionTrainingParameters$inboundSchema,
} from "./completiontrainingparameters.js";
import { Event, Event$inboundSchema } from "./event.js";
import {
  GithubRepository,
  GithubRepository$inboundSchema,
} from "./githubrepository.js";
import { JobMetadata, JobMetadata$inboundSchema } from "./jobmetadata.js";
import {
  WandbIntegrationResult,
  WandbIntegrationResult$inboundSchema,
} from "./wandbintegrationresult.js";

/**
 * The current status of the fine-tuning job.
 */
export const CompletionFineTuningJobDetailsStatus = {
  Queued: "QUEUED",
  Started: "STARTED",
  Validating: "VALIDATING",
  Validated: "VALIDATED",
  Running: "RUNNING",
  FailedValidation: "FAILED_VALIDATION",
  Failed: "FAILED",
  Success: "SUCCESS",
  Cancelled: "CANCELLED",
  CancellationRequested: "CANCELLATION_REQUESTED",
} as const;
/**
 * The current status of the fine-tuning job.
 */
export type CompletionFineTuningJobDetailsStatus = OpenEnum<
  typeof CompletionFineTuningJobDetailsStatus
>;

export type CompletionFineTuningJobDetailsIntegration = WandbIntegrationResult;

export type CompletionFineTuningJobDetailsRepository = GithubRepository;

export type CompletionFineTuningJobDetails = {
  /**
   * The ID of the job.
   */
  id: string;
  autoStart: boolean;
  model: string;
  /**
   * The current status of the fine-tuning job.
   */
  status: CompletionFineTuningJobDetailsStatus;
  /**
   * The UNIX timestamp (in seconds) for when the fine-tuning job was created.
   */
  createdAt: number;
  /**
   * The UNIX timestamp (in seconds) for when the fine-tuning job was last modified.
   */
  modifiedAt: number;
  /**
   * A list containing the IDs of uploaded files that contain training data.
   */
  trainingFiles: Array<string>;
  /**
   * A list containing the IDs of uploaded files that contain validation data.
   */
  validationFiles?: Array<string> | null | undefined;
  /**
   * The object type of the fine-tuning job.
   */
  object: "job";
  /**
   * The name of the fine-tuned model that is being created. The value will be `null` if the fine-tuning job is still running.
   */
  fineTunedModel?: string | null | undefined;
  /**
   * Optional user-provided string inserted into the fine-tuned model name to help identify it. For example, a suffix of `"my-great-model"` produces a name like `ft:open-mistral-7b:abcd1234:20260101:my-great-model:efgh5678`.
   */
  suffix?: string | null | undefined;
  /**
   * A list of integrations enabled for your fine-tuning job.
   */
  integrations?: Array<WandbIntegrationResult> | null | undefined;
  /**
   * Total number of tokens trained.
   */
  trainedTokens?: number | null | undefined;
  metadata?: JobMetadata | null | undefined;
  /**
   * The type of job (`FT` for fine-tuning).
   */
  jobType: "completion";
  hyperparameters: CompletionTrainingParameters;
  repositories?: Array<GithubRepository> | undefined;
  /**
   * Event items are created every time the status of a fine-tuning job changes. The timestamped list of all events is accessible here.
   */
  events?: Array<Event> | undefined;
  checkpoints?: Array<Checkpoint> | undefined;
};

/** @internal */
export const CompletionFineTuningJobDetailsStatus$inboundSchema: z.ZodType<
  CompletionFineTuningJobDetailsStatus,
  unknown
> = openEnums.inboundSchema(CompletionFineTuningJobDetailsStatus);

/** @internal */
export const CompletionFineTuningJobDetailsIntegration$inboundSchema: z.ZodType<
  CompletionFineTuningJobDetailsIntegration,
  unknown
> = WandbIntegrationResult$inboundSchema;

export function completionFineTuningJobDetailsIntegrationFromJSON(
  jsonString: string,
): SafeParseResult<
  CompletionFineTuningJobDetailsIntegration,
  SDKValidationError
> {
  return safeParse(
    jsonString,
    (x) =>
      CompletionFineTuningJobDetailsIntegration$inboundSchema.parse(
        JSON.parse(x),
      ),
    `Failed to parse 'CompletionFineTuningJobDetailsIntegration' from JSON`,
  );
}

/** @internal */
export const CompletionFineTuningJobDetailsRepository$inboundSchema: z.ZodType<
  CompletionFineTuningJobDetailsRepository,
  unknown
> = GithubRepository$inboundSchema;

export function completionFineTuningJobDetailsRepositoryFromJSON(
  jsonString: string,
): SafeParseResult<
  CompletionFineTuningJobDetailsRepository,
  SDKValidationError
> {
  return safeParse(
    jsonString,
    (x) =>
      CompletionFineTuningJobDetailsRepository$inboundSchema.parse(
        JSON.parse(x),
      ),
    `Failed to parse 'CompletionFineTuningJobDetailsRepository' from JSON`,
  );
}

/** @internal */
export const CompletionFineTuningJobDetails$inboundSchema: z.ZodType<
  CompletionFineTuningJobDetails,
  unknown
> = z.object({
  id: z.string(),
  auto_start: z.boolean(),
  model: z.string(),
  status: CompletionFineTuningJobDetailsStatus$inboundSchema,
  created_at: z.int(),
  modified_at: z.int(),
  training_files: z.array(z.string()),
  validation_files: z.nullable(z.array(z.string())).optional(),
  object: z.literal("job").default("job"),
  fine_tuned_model: z.nullable(z.string()).optional(),
  suffix: z.nullable(z.string()).optional(),
  integrations: z.nullable(z.array(WandbIntegrationResult$inboundSchema))
    .optional(),
  trained_tokens: z.nullable(z.int()).optional(),
  metadata: z.nullable(JobMetadata$inboundSchema).optional(),
  job_type: z.literal("completion"),
  hyperparameters: CompletionTrainingParameters$inboundSchema,
  repositories: z.array(GithubRepository$inboundSchema).optional(),
  events: z.array(Event$inboundSchema).optional(),
  checkpoints: z.array(Checkpoint$inboundSchema).optional(),
}).transform((v) => {
  return remap$(v, {
    "auto_start": "autoStart",
    "created_at": "createdAt",
    "modified_at": "modifiedAt",
    "training_files": "trainingFiles",
    "validation_files": "validationFiles",
    "fine_tuned_model": "fineTunedModel",
    "trained_tokens": "trainedTokens",
    "job_type": "jobType",
  });
});

export function completionFineTuningJobDetailsFromJSON(
  jsonString: string,
): SafeParseResult<CompletionFineTuningJobDetails, SDKValidationError> {
  return safeParse(
    jsonString,
    (x) => CompletionFineTuningJobDetails$inboundSchema.parse(JSON.parse(x)),
    `Failed to parse 'CompletionFineTuningJobDetails' from JSON`,
  );
}
