/* tslint:disable */
/* eslint-disable */
/**
 * Montelo
 * Documentation for the Montelo API.
 *
 * The version of the OpenAPI document: 1.0
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

import { exists, mapValues } from '../runtime';
import type { DatasetDto } from './DatasetDto';
import {
    DatasetDtoFromJSON,
    DatasetDtoFromJSONTyped,
    DatasetDtoToJSON,
} from './DatasetDto';

/**
 * 
 * @export
 * @interface FineTuneWithDatasetDto
 */
export interface FineTuneWithDatasetDto {
    /**
     * 
     * @type {string}
     * @memberof FineTuneWithDatasetDto
     */
    id: string;
    /**
     * 
     * @type {string}
     * @memberof FineTuneWithDatasetDto
     */
    provider: FineTuneWithDatasetDtoProviderEnum;
    /**
     * 
     * @type {string}
     * @memberof FineTuneWithDatasetDto
     */
    model: string;
    /**
     * 
     * @type {string}
     * @memberof FineTuneWithDatasetDto
     */
    status: FineTuneWithDatasetDtoStatusEnum;
    /**
     * 
     * @type {string}
     * @memberof FineTuneWithDatasetDto
     */
    startedAt: string | null;
    /**
     * 
     * @type {string}
     * @memberof FineTuneWithDatasetDto
     */
    endedAt: string | null;
    /**
     * 
     * @type {object}
     * @memberof FineTuneWithDatasetDto
     */
    metadata: object | null;
    /**
     * 
     * @type {string}
     * @memberof FineTuneWithDatasetDto
     */
    datasetId: string;
    /**
     * 
     * @type {DatasetDto}
     * @memberof FineTuneWithDatasetDto
     */
    dataset: DatasetDto;
}


/**
 * @export
 */
export const FineTuneWithDatasetDtoProviderEnum = {
    Openai: 'OPENAI',
    Cohere: 'COHERE',
    Montelo: 'MONTELO'
} as const;
export type FineTuneWithDatasetDtoProviderEnum = typeof FineTuneWithDatasetDtoProviderEnum[keyof typeof FineTuneWithDatasetDtoProviderEnum];

/**
 * @export
 */
export const FineTuneWithDatasetDtoStatusEnum = {
    Pending: 'PENDING',
    Running: 'RUNNING',
    Deploying: 'DEPLOYING',
    Completed: 'COMPLETED',
    Failed: 'FAILED',
    Cancelled: 'CANCELLED'
} as const;
export type FineTuneWithDatasetDtoStatusEnum = typeof FineTuneWithDatasetDtoStatusEnum[keyof typeof FineTuneWithDatasetDtoStatusEnum];


/**
 * Check if a given object implements the FineTuneWithDatasetDto interface.
 */
export function instanceOfFineTuneWithDatasetDto(value: object): boolean {
    let isInstance = true;
    isInstance = isInstance && "id" in value;
    isInstance = isInstance && "provider" in value;
    isInstance = isInstance && "model" in value;
    isInstance = isInstance && "status" in value;
    isInstance = isInstance && "startedAt" in value;
    isInstance = isInstance && "endedAt" in value;
    isInstance = isInstance && "metadata" in value;
    isInstance = isInstance && "datasetId" in value;
    isInstance = isInstance && "dataset" in value;

    return isInstance;
}

export function FineTuneWithDatasetDtoFromJSON(json: any): FineTuneWithDatasetDto {
    return FineTuneWithDatasetDtoFromJSONTyped(json, false);
}

export function FineTuneWithDatasetDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): FineTuneWithDatasetDto {
    if ((json === undefined) || (json === null)) {
        return json;
    }
    return {
        
        'id': json['id'],
        'provider': json['provider'],
        'model': json['model'],
        'status': json['status'],
        'startedAt': json['startedAt'],
        'endedAt': json['endedAt'],
        'metadata': json['metadata'],
        'datasetId': json['datasetId'],
        'dataset': DatasetDtoFromJSON(json['dataset']),
    };
}

export function FineTuneWithDatasetDtoToJSON(value?: FineTuneWithDatasetDto | null): any {
    if (value === undefined) {
        return undefined;
    }
    if (value === null) {
        return null;
    }
    return {
        
        'id': value.id,
        'provider': value.provider,
        'model': value.model,
        'status': value.status,
        'startedAt': value.startedAt,
        'endedAt': value.endedAt,
        'metadata': value.metadata,
        'datasetId': value.datasetId,
        'dataset': DatasetDtoToJSON(value.dataset),
    };
}

