use utoipa::OpenApi;
use crate::{
chat_completion::__path_chatcompletions,
completions::__path_completions,
embeddings::__path_embeddings,
handlers::{ReIsqRequest, __path_health, __path_models, __path_re_isq},
image_generation::__path_image_generation,
openai::{
AudioResponseFormat, ChatCompletionRequest, CompletionRequest, EmbeddingData,
EmbeddingEncodingFormat, EmbeddingInput, EmbeddingRequest, EmbeddingResponse,
EmbeddingUsage, EmbeddingVector, FunctionCalled, Grammar, ImageGenerationRequest,
JsonSchemaResponseFormat, Message, MessageContent, MessageInnerContent, ModelObject,
ModelObjects, ResponseFormat, ResponsesAnnotation, ResponsesChunk, ResponsesContent,
ResponsesCreateRequest, ResponsesDelta, ResponsesDeltaContent, ResponsesDeltaOutput,
ResponsesError, ResponsesIncompleteDetails, ResponsesInputTokensDetails, ResponsesMessages,
ResponsesObject, ResponsesOutput, ResponsesOutputTokensDetails, ResponsesUsage,
SpeechGenerationRequest, StopTokens, ToolCall,
},
responses::{__path_create_response, __path_delete_response, __path_get_response},
speech_generation::__path_speech_generation,
};
use mistralrs_core::{
ApproximateUserLocation, Function, ImageGenerationResponseFormat, SearchContextSize, Tool,
ToolChoice, ToolType, WebSearchOptions, WebSearchUserLocation,
};
pub fn get_openapi_doc(base_path: Option<&str>) -> utoipa::openapi::OpenApi {
#[derive(OpenApi)]
#[openapi(
paths(models, health, chatcompletions, completions, embeddings, re_isq, image_generation, speech_generation, create_response, get_response, delete_response),
components(schemas(
ApproximateUserLocation,
AudioResponseFormat,
ChatCompletionRequest,
CompletionRequest,
EmbeddingData,
EmbeddingEncodingFormat,
EmbeddingInput,
EmbeddingRequest,
EmbeddingResponse,
EmbeddingUsage,
EmbeddingVector,
Function,
FunctionCalled,
Grammar,
ImageGenerationRequest,
ImageGenerationResponseFormat,
JsonSchemaResponseFormat,
Message,
MessageContent,
MessageInnerContent,
ModelObject,
ModelObjects,
ReIsqRequest,
ResponseFormat,
ResponsesAnnotation,
ResponsesChunk,
ResponsesContent,
ResponsesCreateRequest,
ResponsesDelta,
ResponsesDeltaContent,
ResponsesDeltaOutput,
ResponsesError,
ResponsesIncompleteDetails,
ResponsesInputTokensDetails,
ResponsesMessages,
ResponsesObject,
ResponsesOutput,
ResponsesOutputTokensDetails,
ResponsesUsage,
SearchContextSize,
SpeechGenerationRequest,
StopTokens,
Tool,
ToolCall,
ToolChoice,
ToolType,
WebSearchOptions,
WebSearchUserLocation
)),
tags(
(name = "Mistral.rs", description = "Mistral.rs API")
),
info(
title = "Mistral.rs",
license(
name = "MIT",
)
)
)]
struct ApiDoc;
let mut doc = ApiDoc::openapi();
if let Some(prefix) = base_path {
if !prefix.is_empty() {
let mut prefixed_paths = utoipa::openapi::Paths::default();
let original_paths = std::mem::take(&mut doc.paths.paths);
for (path, item) in original_paths {
let prefixed_path = format!("{prefix}{path}");
prefixed_paths.paths.insert(prefixed_path, item);
}
prefixed_paths.extensions = doc.paths.extensions.clone();
doc.paths = prefixed_paths;
}
}
doc
}