refactor: improve swagger docs (#549)

* refactor: remove server url in swagger config (as we set "/" for default
server path)

* refactor: polish field naming

* refactor: remove useless modifier for ApiDoc
r0.3
Meng Zhang 2023-10-13 11:38:05 -07:00 committed by GitHub
parent 2385b4a67b
commit f8be71d27d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 11 additions and 40 deletions

View File

@ -18,9 +18,7 @@ pub struct Config {
} }
#[derive(Serialize, Deserialize, Default)] #[derive(Serialize, Deserialize, Default)]
pub struct SwaggerConfig { pub struct SwaggerConfig {}
pub server_url: Option<String>,
}
impl Config { impl Config {
pub fn load() -> Result<Self, Error> { pub fn load() -> Result<Self, Error> {

View File

@ -20,7 +20,7 @@ mod tests {
repositories: vec![Repository { repositories: vec![Repository {
git_url: "https://github.com/TabbyML/interview-questions".to_owned(), git_url: "https://github.com/TabbyML/interview-questions".to_owned(),
}], }],
swagger: SwaggerConfig { server_url: None }, swagger: SwaggerConfig {},
}; };
config.save(); config.save();

View File

@ -39,21 +39,13 @@ pub struct CompletionRequest {
/// reports. /// reports.
user: Option<String>, user: Option<String>,
debug: Option<DebugRequest>, debug_options: Option<DebugOptions>,
} }
#[derive(Serialize, ToSchema, Deserialize, Clone, Debug)] #[derive(Serialize, Deserialize, ToSchema, Clone, Debug)]
pub struct DebugRequest { pub struct DebugOptions {
/// When true, returns debug_data in completion response. /// When true, returns debug_data in completion response.
enabled: bool, enabled: bool,
/// When true, turn off prompt rewrite with source code index.
#[serde(default = "default_false")]
disable_prompt_rewrite: bool,
}
fn default_false() -> bool {
false
} }
#[derive(Serialize, Deserialize, ToSchema, Clone, Debug)] #[derive(Serialize, Deserialize, ToSchema, Clone, Debug)]
@ -136,15 +128,7 @@ pub async fn completions(
}; };
debug!("PREFIX: {}, SUFFIX: {:?}", segments.prefix, segments.suffix); debug!("PREFIX: {}, SUFFIX: {:?}", segments.prefix, segments.suffix);
let snippets = if !request let snippets = state.prompt_builder.collect(&language, &segments);
.debug
.as_ref()
.is_some_and(|x| x.disable_prompt_rewrite)
{
state.prompt_builder.collect(&language, &segments)
} else {
vec![]
};
let prompt = state let prompt = state
.prompt_builder .prompt_builder
.build(&language, segments.clone(), &snippets); .build(&language, segments.clone(), &snippets);
@ -173,7 +157,7 @@ pub async fn completions(
Ok(Json(CompletionResponse { Ok(Json(CompletionResponse {
id: completion_id, id: completion_id,
choices: vec![Choice { index: 0, text }], choices: vec![Choice { index: 0, text }],
debug_data: if request.debug.is_some_and(|x| x.enabled) { debug_data: if request.debug_options.is_some_and(|x| x.enabled) {
Some(debug_data) Some(debug_data)
} else { } else {
None None

View File

@ -23,7 +23,7 @@ use tabby_download::Downloader;
use tokio::time::sleep; use tokio::time::sleep;
use tower_http::{cors::CorsLayer, timeout::TimeoutLayer}; use tower_http::{cors::CorsLayer, timeout::TimeoutLayer};
use tracing::{info, warn}; use tracing::{info, warn};
use utoipa::{openapi::ServerBuilder, OpenApi}; use utoipa::OpenApi;
use utoipa_swagger_ui::SwaggerUi; use utoipa_swagger_ui::SwaggerUi;
use self::{ use self::{
@ -57,9 +57,9 @@ Install following IDE / Editor extensions to get started with [Tabby](https://gi
completions::CompletionResponse, completions::CompletionResponse,
completions::Segments, completions::Segments,
completions::Choice, completions::Choice,
completions::DebugRequest,
completions::DebugData,
completions::Snippet, completions::Snippet,
completions::DebugOptions,
completions::DebugData,
chat::ChatCompletionRequest, chat::ChatCompletionRequest,
chat::Message, chat::Message,
chat::ChatCompletionChunk, chat::ChatCompletionChunk,
@ -292,18 +292,7 @@ trait OpenApiOverride {
} }
impl OpenApiOverride for utoipa::openapi::OpenApi { impl OpenApiOverride for utoipa::openapi::OpenApi {
fn override_doc(&mut self, args: &ServeArgs, config: &SwaggerConfig) { fn override_doc(&mut self, args: &ServeArgs, _config: &SwaggerConfig) {
if let Some(servers) = self.servers.as_mut() {
if let Some(server_url) = &config.server_url {
servers.push(
ServerBuilder::new()
.url(server_url)
.description(Some("Swagger Server"))
.build(),
);
}
}
if args.chat_model.is_none() { if args.chat_model.is_none() {
self.paths.paths.remove("/v1beta/chat/completions"); self.paths.paths.remove("/v1beta/chat/completions");