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

import { mapValues } from '../runtime';
import type { RetrieveContext } from './RetrieveContext';
import {
    RetrieveContextFromJSON,
    RetrieveContextFromJSONTyped,
    RetrieveContextToJSON,
    RetrieveContextToJSONTyped,
} from './RetrieveContext';

/**
 * 
 * @export
 * @interface RetrieveDocumentsRequest
 */
export interface RetrieveDocumentsRequest {
    /**
     * 
     * @type {string}
     * @memberof RetrieveDocumentsRequest
     */
    question: string;
    /**
     * 
     * @type {number}
     * @memberof RetrieveDocumentsRequest
     */
    numResults: number;
    /**
     * 
     * @type {boolean}
     * @memberof RetrieveDocumentsRequest
     */
    rerank?: boolean;
    /**
     * 
     * @type {Array<{ [key: string]: any | null; }>}
     * @memberof RetrieveDocumentsRequest
     */
    metadataFilters?: Array<{ [key: string]: any | null; }>;
    /**
     * 
     * @type {RetrieveContext}
     * @memberof RetrieveDocumentsRequest
     */
    context?: RetrieveContext;
}

/**
 * Check if a given object implements the RetrieveDocumentsRequest interface.
 */
export function instanceOfRetrieveDocumentsRequest(value: object): value is RetrieveDocumentsRequest {
    if (!('question' in value) || value['question'] === undefined) return false;
    if (!('numResults' in value) || value['numResults'] === undefined) return false;
    return true;
}

export function RetrieveDocumentsRequestFromJSON(json: any): RetrieveDocumentsRequest {
    return RetrieveDocumentsRequestFromJSONTyped(json, false);
}

export function RetrieveDocumentsRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): RetrieveDocumentsRequest {
    if (json == null) {
        return json;
    }
    return {
        
        'question': json['question'],
        'numResults': json['numResults'],
        'rerank': json['rerank'] == null ? undefined : json['rerank'],
        'metadataFilters': json['metadata-filters'] == null ? undefined : json['metadata-filters'],
        'context': json['context'] == null ? undefined : RetrieveContextFromJSON(json['context']),
    };
}

export function RetrieveDocumentsRequestToJSON(json: any): RetrieveDocumentsRequest {
    return RetrieveDocumentsRequestToJSONTyped(json, false);
}

export function RetrieveDocumentsRequestToJSONTyped(value?: RetrieveDocumentsRequest | null, ignoreDiscriminator: boolean = false): any {
    if (value == null) {
        return value;
    }

    return {
        
        'question': value['question'],
        'numResults': value['numResults'],
        'rerank': value['rerank'],
        'metadata-filters': value['metadataFilters'],
        'context': RetrieveContextToJSON(value['context']),
    };
}

