mirror of
https://github.com/perstarkse/minne.git
synced 2026-05-30 03:10:45 +02:00
61 lines
1.8 KiB
Rust
61 lines
1.8 KiB
Rust
mod bootstrap;
|
|
|
|
use std::sync::Arc;
|
|
|
|
use api_router::{api_routes_v1, api_state::ApiState};
|
|
use axum::{extract::FromRef, Router};
|
|
use common::storage::types::system_settings::SystemSettings;
|
|
use html_router::{
|
|
html_routes,
|
|
html_state::{HtmlState, StateResources},
|
|
};
|
|
use tracing::info;
|
|
|
|
#[tokio::main(flavor = "multi_thread", worker_threads = 2)]
|
|
async fn main() -> anyhow::Result<()> {
|
|
let services = bootstrap::init().await?;
|
|
|
|
let session_store = Arc::new(services.db.create_session_store().await?);
|
|
|
|
let (_settings, _dimensions_changed) =
|
|
SystemSettings::sync_from_embedding_provider(&services.db, &services.embedding_provider)
|
|
.await?;
|
|
|
|
let html_state = HtmlState::new_with_resources(StateResources {
|
|
db: Arc::clone(&services.db),
|
|
openai_client: Arc::clone(&services.openai_client),
|
|
session_store,
|
|
storage: services.storage.clone(),
|
|
config: services.config.clone(),
|
|
reranker_pool: services.reranker_pool.clone(),
|
|
embedding_provider: Arc::clone(&services.embedding_provider),
|
|
template_engine: None,
|
|
});
|
|
|
|
let api_state = ApiState::new(&services.config, services.storage).await?;
|
|
|
|
let app = Router::new()
|
|
.nest("/api/v1", api_routes_v1(&api_state))
|
|
.merge(html_routes(&html_state))
|
|
.with_state(AppState {
|
|
api_state,
|
|
html_state,
|
|
});
|
|
|
|
info!(
|
|
"Starting server listening on 0.0.0.0:{}",
|
|
services.config.http_port
|
|
);
|
|
let serve_address = format!("0.0.0.0:{}", services.config.http_port);
|
|
let listener = tokio::net::TcpListener::bind(serve_address).await?;
|
|
axum::serve(listener, app).await?;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[derive(Clone, FromRef)]
|
|
struct AppState {
|
|
api_state: ApiState,
|
|
html_state: HtmlState,
|
|
}
|