pub mod chat; pub mod models; use crate::docs::ApiDoc; use crate::middlewares::auth::auth_middleware; use crate::state::app_state::AppState; use axum::{Json, Router, middleware, routing::get, routing::post}; use utoipa::OpenApi; async fn openapi_json() -> Json { Json(ApiDoc::openapi()) } fn public_router() -> Router { Router::new().route("/docs.json", get(openapi_json)) } pub fn protected_router() -> Router { Router::new() .route("/models", get(models::list_models)) .route("/completions", post(chat::completions)) .route("/chat/completions", post(chat::chat_completions)) .route("/models/{model}/load", post(models::load_model)) .route("/models/{model}/unload", post(models::unload_model)) } pub fn router() -> Router { Router::new() .merge(public_router()) .merge(protected_router().layer(middleware::from_fn(auth_middleware))) }