orign 0.2.3

A globally distributed container orchestrator
Documentation
use crate::handlers::basic::{health_handler, root_handler};
use crate::handlers::v1::buffers::{
    create_buffer, delete_buffer, get_buffer, list_buffers, send_examples, train_buffer,
    update_buffer,
};
use crate::handlers::v1::humans::{
    create_human, delete_human, get_human, list_humans, record_human_response,
    request_human_feedback,
};
use crate::handlers::v1::llms::{
    chat_llm, create_llm, delete_llm, get_llm, learn_llm, list_llms, patch_llm, train_llm,
};
use crate::middleware::auth_middleware;
use crate::state::AppState;
use axum::{middleware, routing::get, routing::post, Router};
use tower_http::trace::{self, TraceLayer};
use tracing::Level;

pub fn create_routes(app_state: AppState) -> Router<AppState> {
    // Public routes that do not require authentication
    let public_routes = Router::new()
        .route("/", get(root_handler))
        .route("/health", get(health_handler));

    // Private routes that require authentication
    let private_routes = Router::new()
        //
        // Buffers
        //
        .route("/v1/buffers", get(list_buffers).post(create_buffer))
        .route(
            "/v1/buffers/:namespace/:name",
            get(get_buffer).delete(delete_buffer).patch(update_buffer),
        )
        .route("/v1/buffers/:namespace/:name/examples", post(send_examples))
        .route("/v1/buffers/:namespace/:name/train", post(train_buffer))
        //
        // LLMs
        //
        .route("/v1/llms", get(list_llms).post(create_llm))
        .route(
            "/v1/llms/:namespace/:name",
            get(get_llm).delete(delete_llm).patch(patch_llm),
        )
        .route("/v1/llms/:namespace/:name/chat", post(chat_llm))
        .route("/v1/llms/:namespace/:name/learn", post(learn_llm))
        .route("/v1/llms/:namespace/:name/train", post(train_llm))
        //
        // Humans
        //
        .route("/v1/humans", get(list_humans).post(create_human))
        .route(
            "/v1/humans/:namespace/:name",
            get(get_human).delete(delete_human),
        )
        .route(
            "/v1/humans/:namespace/:name/feedback",
            post(request_human_feedback),
        )
        .route(
            "/v1/humans/:namespace/:name/feedback/:id",
            post(record_human_response),
        )
        .layer(middleware::from_fn_with_state(
            app_state.clone(),
            auth_middleware,
        ));
    // Combine public and private routes
    public_routes.merge(private_routes).layer(
        TraceLayer::new_for_http()
            .make_span_with(trace::DefaultMakeSpan::new().level(Level::INFO))
            .on_response(trace::DefaultOnResponse::new().level(Level::INFO)),
    )
}