use common::storage::{db::SurrealDbClient, store::StorageManager}; use common::utils::embedding::EmbeddingProvider; use common::utils::template_engine::{ProvidesTemplateEngine, TemplateEngine}; use common::{create_template_engine, storage::db::ProvidesDb, utils::config::AppConfig}; use retrieval_pipeline::{reranking::RerankerPool, RetrievalStrategy}; use std::sync::Arc; use tracing::debug; use crate::{OpenAIClientType, SessionStoreType}; #[derive(Clone)] pub struct HtmlState { pub db: Arc, pub openai_client: Arc, pub templates: Arc, pub session_store: Arc, pub config: AppConfig, pub storage: StorageManager, pub reranker_pool: Option>, pub embedding_provider: Arc, } impl HtmlState { pub async fn new_with_resources( db: Arc, openai_client: Arc, session_store: Arc, storage: StorageManager, config: AppConfig, reranker_pool: Option>, embedding_provider: Arc, ) -> Result> { let template_engine = create_template_engine!("templates"); debug!("Template engine created for html_router."); Ok(Self { db, openai_client, session_store, templates: Arc::new(template_engine), config, storage, reranker_pool, embedding_provider, }) } pub fn retrieval_strategy(&self) -> RetrievalStrategy { self.config .retrieval_strategy .as_deref() .and_then(|value| value.parse().ok()) .unwrap_or(RetrievalStrategy::Default) } } impl ProvidesDb for HtmlState { fn db(&self) -> &Arc { &self.db } } impl ProvidesTemplateEngine for HtmlState { fn template_engine(&self) -> &Arc { &self.templates } }