use std::sync::Arc; use dashmap::DashMap; use tera::Tera; use uuid::Uuid; use common_contracts::observability::TaskProgress; use crate::{config::AppConfig, llm_client::LlmClient, templates::load_tera}; #[derive(Clone)] pub struct AppState { pub tasks: Arc>, pub config: Arc, pub llm_client: Arc, pub tera: Arc, } impl AppState { pub fn new(config: AppConfig) -> Self { let llm_client = Arc::new(LlmClient::new( config.llm_api_url.clone(), config.llm_api_key.clone(), config.llm_model.clone(), )); Self { tasks: Arc::new(DashMap::new()), config: Arc::new(config), llm_client, tera: Arc::new(load_tera()), } } }