/* tslint:disable */
/* eslint-disable */
/**
 * AskNews API
 * AskNews API [![status](https://status.asknews.app/api/badge/2/status?style=for-the-badge)](https://status.asknews.app/status/prod)
 *
 * The version of the OpenAPI document: 0.24.66
 * Contact: contact@emergentmethods.ai
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */


import * as runtime from '../runtime';
import type {
  AbcAPIErrorModel29,
  AbcAPIErrorModel30,
  AbcAPIErrorModel31,
  AbcAPIErrorModel32,
  AbcAPIErrorModel33,
  AbcAPIErrorModel34,
  AbcAPIErrorModel35,
  AbcAPIErrorModel36,
  AsknewsApiErrorsAPIErrorModel,
  CreateChatCompletionRequest,
  CreateChatCompletionResponse1,
  CreateChatCompletionResponseStream1,
  CreateDeepNewsRequest,
  CreateDeepNewsResponse1,
  DeepNews200Response,
  ListDeepNewsModelResponse,
  ValidationErrorModel,
} from '../models/index';
import {
    AbcAPIErrorModel29FromJSON,
    AbcAPIErrorModel29ToJSON,
    AbcAPIErrorModel30FromJSON,
    AbcAPIErrorModel30ToJSON,
    AbcAPIErrorModel31FromJSON,
    AbcAPIErrorModel31ToJSON,
    AbcAPIErrorModel32FromJSON,
    AbcAPIErrorModel32ToJSON,
    AbcAPIErrorModel33FromJSON,
    AbcAPIErrorModel33ToJSON,
    AbcAPIErrorModel34FromJSON,
    AbcAPIErrorModel34ToJSON,
    AbcAPIErrorModel35FromJSON,
    AbcAPIErrorModel35ToJSON,
    AbcAPIErrorModel36FromJSON,
    AbcAPIErrorModel36ToJSON,
    AsknewsApiErrorsAPIErrorModelFromJSON,
    AsknewsApiErrorsAPIErrorModelToJSON,
    CreateChatCompletionRequestFromJSON,
    CreateChatCompletionRequestToJSON,
    CreateChatCompletionResponse1FromJSON,
    CreateChatCompletionResponse1ToJSON,
    CreateChatCompletionResponseStream1FromJSON,
    CreateChatCompletionResponseStream1ToJSON,
    CreateDeepNewsRequestFromJSON,
    CreateDeepNewsRequestToJSON,
    CreateDeepNewsResponse1FromJSON,
    CreateDeepNewsResponse1ToJSON,
    DeepNews200ResponseFromJSON,
    DeepNews200ResponseToJSON,
    ListDeepNewsModelResponseFromJSON,
    ListDeepNewsModelResponseToJSON,
    ValidationErrorModelFromJSON,
    ValidationErrorModelToJSON,
} from '../models/index';

export interface DeepNewsRequest {
    createDeepNewsRequest: CreateDeepNewsRequest;
}

export interface GetChatCompletionsRequest {
    createChatCompletionRequest: CreateChatCompletionRequest;
}

/**
 * 
 */
export class ChatApi extends runtime.BaseAPI {

    /**
     * Deep research into real-time news, archive news, and Google.
     */
    async deepNewsRaw(requestParameters: DeepNewsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<CreateDeepNewsResponse1>  | runtime.StreamApiResponse> {
        if (requestParameters['createDeepNewsRequest'] == null) {
            throw new runtime.RequiredError(
                'createDeepNewsRequest',
                'Required parameter "createDeepNewsRequest" was null or undefined when calling deepNews().'
            );
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        headerParameters['Content-Type'] = 'application/json';

        const response = await this.request({
            path: `/v1/chat/deepnews`,
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: CreateDeepNewsRequestToJSON(requestParameters['createDeepNewsRequest']),
        }, initOverrides);

        if ('createDeepNewsRequest' in requestParameters && requestParameters['createDeepNewsRequest'] != null && 'stream' in requestParameters['createDeepNewsRequest'] && requestParameters['createDeepNewsRequest']['stream'] === true) {
            return new runtime.StreamApiResponse(response);
        }

        return new runtime.JSONApiResponse(response, (jsonValue) => CreateDeepNewsResponse1FromJSON(jsonValue));
    }

    /**
     * Deep research into real-time news, archive news, and Google.
     */
    async deepNews(requestParameters: DeepNewsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<CreateDeepNewsResponse1 | ReadableStream<any>> {
        const response = await this.deepNewsRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Get the chat completions for a given user message. This endpoint follows the OpenAI API spec. It includes a couple extra params, which include:  - **journalist_mode**: Whether to activate an auto prompt that is more keen on AP styling, citations, and fair reporting. Setting to false, you get a vanilla LLM with the news pre added to the system prompt. No other prompting. - **inline_citations**: Decides how you want the bot to cite sources. It can use brackets, or it can also include the markdown with URL automatically. - **asknews_watermark**: Whether to include the AskNews watermark in the response.
     * Get chat completions from a news-infused AI assistant
     */
    async getChatCompletionsRaw(requestParameters: GetChatCompletionsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<CreateChatCompletionResponse1>  | runtime.StreamApiResponse> {
        if (requestParameters['createChatCompletionRequest'] == null) {
            throw new runtime.RequiredError(
                'createChatCompletionRequest',
                'Required parameter "createChatCompletionRequest" was null or undefined when calling getChatCompletions().'
            );
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        headerParameters['Content-Type'] = 'application/json';

        const response = await this.request({
            path: `/v1/openai/chat/completions`,
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: CreateChatCompletionRequestToJSON(requestParameters['createChatCompletionRequest']),
        }, initOverrides);

        if ('createChatCompletionRequest' in requestParameters && requestParameters['createChatCompletionRequest'] != null && 'stream' in requestParameters['createChatCompletionRequest'] && requestParameters['createChatCompletionRequest']['stream'] === true) {
            return new runtime.StreamApiResponse(response);
        }

        return new runtime.JSONApiResponse(response, (jsonValue) => CreateChatCompletionResponse1FromJSON(jsonValue));
    }

    /**
     * Get the chat completions for a given user message. This endpoint follows the OpenAI API spec. It includes a couple extra params, which include:  - **journalist_mode**: Whether to activate an auto prompt that is more keen on AP styling, citations, and fair reporting. Setting to false, you get a vanilla LLM with the news pre added to the system prompt. No other prompting. - **inline_citations**: Decides how you want the bot to cite sources. It can use brackets, or it can also include the markdown with URL automatically. - **asknews_watermark**: Whether to include the AskNews watermark in the response.
     * Get chat completions from a news-infused AI assistant
     */
    async getChatCompletions(requestParameters: GetChatCompletionsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<CreateChatCompletionResponse1 | ReadableStream<any>> {
        const response = await this.getChatCompletionsRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * List the available DeepNews models with their type (rich/fast).
     * List available DeepNews models
     */
    async listDeepnewsModelsRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<ListDeepNewsModelResponse> > {
        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        const response = await this.request({
            path: `/v1/chat/deepnews-models`,
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);


        return new runtime.JSONApiResponse(response, (jsonValue) => ListDeepNewsModelResponseFromJSON(jsonValue));
    }

    /**
     * List the available DeepNews models with their type (rich/fast).
     * List available DeepNews models
     */
    async listDeepnewsModels(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<ListDeepNewsModelResponse> {
        const response = await this.listDeepnewsModelsRaw(initOverrides);
        return await response.value();
    }

}
