pub mod agents;
pub mod debug;
pub mod models;
pub mod projects;
pub mod session;
pub mod threads;
use actix_web::{web, HttpResponse};
use chrono::NaiveTime;
use vllora_core::handler::models::ChatModelsResponse;
use vllora_core::types::metadata::services::model::ModelService;
use vllora_core::GatewayApiError;
use vllora_llm::types::gateway::ChatModel;
use vllora_llm::types::models::ModelMetadata;
pub async fn list_models_from_db(
model_service: web::Data<Box<dyn ModelService>>,
) -> Result<HttpResponse, GatewayApiError> {
let project_id = None;
let db_models = model_service
.list(project_id)
.map_err(|e| GatewayApiError::CustomError(format!("Failed to fetch models: {}", e)))?;
let models: Vec<ModelMetadata> = db_models.into_iter().map(|m| m.into()).collect();
let response = ChatModelsResponse {
object: "list".to_string(),
data: models
.iter()
.map(|v| ChatModel {
id: v.qualified_model_name(),
object: "model".to_string(),
created: v
.release_date
.unwrap_or(chrono::Utc::now().date_naive())
.and_time(NaiveTime::from_hms_opt(0, 0, 0).expect("Invalid time"))
.and_utc()
.timestamp(),
owned_by: v.model_provider.to_string(),
})
.collect(),
};
Ok(HttpResponse::Ok().json(response))
}