From db14d816cbe73530b7c341a2c98e57c58ae0d7c7 Mon Sep 17 00:00:00 2001 From: LucasX Ubuntu Date: Fri, 10 Apr 2026 12:08:03 +0200 Subject: [PATCH] format: separate routes in file system --- src/routes/v1/chat.rs | 44 +++++++++++++++++++++++++++++++++++++++++ src/routes/v1/mod.rs | 5 +++-- src/routes/v1/models.rs | 40 ------------------------------------- 3 files changed, 47 insertions(+), 42 deletions(-) create mode 100644 src/routes/v1/chat.rs diff --git a/src/routes/v1/chat.rs b/src/routes/v1/chat.rs new file mode 100644 index 0000000..ac3a292 --- /dev/null +++ b/src/routes/v1/chat.rs @@ -0,0 +1,44 @@ +use axum::{Json, extract::State}; +use serde_json::Value; + +use crate::errors::OllamaError; +use crate::state::app_state::AppState; + +pub async fn completions( + State(state): State, + Json(body): Json, +) -> Result, (axum::http::StatusCode, String)> { + match state.ollama.completions(body).await { + Ok(response) => Ok(Json(response)), + Err(OllamaError::MissingPrompt) => Err(( + axum::http::StatusCode::BAD_REQUEST, + "prompt is required and cannot be empty".to_string(), + )), + Err(OllamaError::ModelNotFound(m)) => Err(( + axum::http::StatusCode::UNPROCESSABLE_ENTITY, + format!("model '{m}' is not available — run `ollama pull {m}` first"), + )), + Err(e) => Err((axum::http::StatusCode::INTERNAL_SERVER_ERROR, e.to_string())), + } +} + +pub async fn chat_completions( + State(state): State, + Json(body): Json, +) -> Result, (axum::http::StatusCode, String)> { + match state.ollama.chat_completions(body).await { + Ok(response) => Ok(Json(response)), + Err(OllamaError::MissingMessages) => Err(( + axum::http::StatusCode::BAD_REQUEST, + "messages must be a non-empty array with at least one user message".to_string(), + )), + Err(OllamaError::ModelNotFound(m)) => Err(( + axum::http::StatusCode::UNPROCESSABLE_ENTITY, + format!("model '{m}' is not available — run `ollama pull {m}` first"), + )), + Err(OllamaError::Http(e)) => { + Err((axum::http::StatusCode::INTERNAL_SERVER_ERROR, e.to_string())) + } + Err(e) => Err((axum::http::StatusCode::BAD_REQUEST, e.to_string())), + } +} diff --git a/src/routes/v1/mod.rs b/src/routes/v1/mod.rs index 3e1f749..768f9a2 100644 --- a/src/routes/v1/mod.rs +++ b/src/routes/v1/mod.rs @@ -1,3 +1,4 @@ +pub mod chat; pub mod models; use crate::auth::middleware::auth_middleware; @@ -7,7 +8,7 @@ use axum::{Router, middleware, routing::get, routing::post}; pub fn router() -> Router { Router::new() .route("/models", get(models::list_models)) - .route("/completions", post(models::completions)) - .route("/chat/completions", post(models::chat_completions)) + .route("/completions", post(chat::completions)) + .route("/chat/completions", post(chat::chat_completions)) .layer(middleware::from_fn(auth_middleware)) } diff --git a/src/routes/v1/models.rs b/src/routes/v1/models.rs index 169fa38..d2c966b 100644 --- a/src/routes/v1/models.rs +++ b/src/routes/v1/models.rs @@ -1,7 +1,6 @@ use axum::{Json, extract::State}; use serde_json::Value; -use crate::errors::OllamaError; use crate::state::app_state::AppState; pub async fn list_models( @@ -15,42 +14,3 @@ pub async fn list_models( )), } } - -pub async fn completions( - State(state): State, - Json(body): Json, -) -> Result, (axum::http::StatusCode, String)> { - match state.ollama.completions(body).await { - Ok(response) => Ok(Json(response)), - Err(OllamaError::MissingPrompt) => Err(( - axum::http::StatusCode::BAD_REQUEST, - "prompt is required and cannot be empty".to_string(), - )), - Err(OllamaError::ModelNotFound(m)) => Err(( - axum::http::StatusCode::UNPROCESSABLE_ENTITY, - format!("model '{m}' is not available — run `ollama pull {m}` first"), - )), - Err(e) => Err((axum::http::StatusCode::INTERNAL_SERVER_ERROR, e.to_string())), - } -} - -pub async fn chat_completions( - State(state): State, - Json(body): Json, -) -> Result, (axum::http::StatusCode, String)> { - match state.ollama.chat_completions(body).await { - Ok(response) => Ok(Json(response)), - Err(OllamaError::MissingMessages) => Err(( - axum::http::StatusCode::BAD_REQUEST, - "messages must be a non-empty array with at least one user message".to_string(), - )), - Err(OllamaError::ModelNotFound(m)) => Err(( - axum::http::StatusCode::UNPROCESSABLE_ENTITY, - format!("model '{m}' is not available — run `ollama pull {m}` first"), - )), - Err(OllamaError::Http(e)) => { - Err((axum::http::StatusCode::INTERNAL_SERVER_ERROR, e.to_string())) - } - Err(e) => Err((axum::http::StatusCode::BAD_REQUEST, e.to_string())), - } -}