feat: add proper typing for api

This commit is contained in:
2026-04-10 17:41:25 +02:00
parent a22560c337
commit 562d154480
15 changed files with 656 additions and 506 deletions
+22 -22
View File
@@ -2,19 +2,13 @@ use axum::{
Json,
extract::{Path, State},
};
use serde::Deserialize;
use serde_json::Value;
use crate::dto::api;
use crate::{errors::OllamaError, state::app_state::AppState};
#[derive(Deserialize)]
pub struct LoadModelBody {
pub keep_alive: Option<String>,
}
pub async fn list_models(
State(state): State<AppState>,
) -> Result<Json<Value>, (axum::http::StatusCode, String)> {
) -> Result<Json<api::ModelsResponse>, (axum::http::StatusCode, String)> {
match state.ollama.list_models().await {
Ok(models) => Ok(Json(models)),
Err(e) => Err(ollama_err(e)),
@@ -24,27 +18,33 @@ pub async fn list_models(
pub async fn load_model(
State(state): State<AppState>,
Path(model): Path<String>,
Json(body): Json<LoadModelBody>,
) -> Result<Json<Value>, (axum::http::StatusCode, String)> {
match state
Json(body): Json<api::LoadModelBody>,
) -> Result<Json<api::LoadModelResponse>, (axum::http::StatusCode, String)> {
let keep_alive = body.keep_alive.as_deref().unwrap_or("5m");
api::LoadModelBody::parse_keep_alive(keep_alive).map_err(ollama_err)?;
let response = state
.ollama
.load_model(&model, body.keep_alive.as_deref())
.load_model(&model, keep_alive)
.await
{
Ok(response) => Ok(Json(response)),
Err(e) => Err(ollama_err(e)),
}
.map_err(ollama_err)?;
Ok(Json(response))
}
pub async fn unload_model(
State(state): State<AppState>,
Path(model): Path<String>,
) -> Result<Json<Value>, (axum::http::StatusCode, String)> {
match state.ollama.unload_model(&model).await {
// ← correct method
Ok(response) => Ok(Json(response)),
Err(e) => Err(ollama_err(e)),
}
) -> Result<Json<api::UnloadModelResponse>, (axum::http::StatusCode, String)> {
let response = state
.ollama
.unload_model(&model)
.await
.map_err(ollama_err)?;
Ok(Json(response))
}
fn ollama_err(e: OllamaError) -> (axum::http::StatusCode, String) {