use axum::{ Router, extract::DefaultBodyLimit, middleware, routing::{get, post}, }; use crate::{ auth::require_bearer_auth, llm::{ LLM_REQUEST_MAX_BODY_BYTES, list_llm_models, proxy_llm_chat_completions, proxy_llm_responses, }, state::AppState, volcengine_speech::{ get_volcengine_speech_config, stream_volcengine_asr, stream_volcengine_tts_bidirection, stream_volcengine_tts_sse, }, }; pub fn router(state: AppState) -> Router { Router::new() .route( "/api/llm/models", get(list_llm_models).route_layer(middleware::from_fn_with_state( state.clone(), require_bearer_auth, )), ) .route( "/api/llm/chat/completions", post(proxy_llm_chat_completions) .route_layer(middleware::from_fn_with_state( state.clone(), require_bearer_auth, )) .layer(DefaultBodyLimit::max(LLM_REQUEST_MAX_BODY_BYTES)), ) .route( "/api/llm/responses", post(proxy_llm_responses) .route_layer(middleware::from_fn_with_state( state.clone(), require_bearer_auth, )) .layer(DefaultBodyLimit::max(LLM_REQUEST_MAX_BODY_BYTES)), ) .route( "/api/speech/volcengine/config", get(get_volcengine_speech_config).route_layer(middleware::from_fn_with_state( state.clone(), require_bearer_auth, )), ) .route( "/api/speech/volcengine/asr/stream", get(stream_volcengine_asr).route_layer(middleware::from_fn_with_state( state.clone(), require_bearer_auth, )), ) .route( "/api/speech/volcengine/tts/bidirection", get(stream_volcengine_tts_bidirection).route_layer(middleware::from_fn_with_state( state.clone(), require_bearer_auth, )), ) .route( "/api/speech/volcengine/tts/sse", post(stream_volcengine_tts_sse).route_layer(middleware::from_fn_with_state( state.clone(), require_bearer_auth, )), ) }