WIP push-to-talk Letta chat frontend
at main 1.8 kB view raw
1use std::sync::Arc; 2 3use tauri::Wry; 4use tauri_plugin_http::reqwest::Client; 5use tauri_plugin_store::Store; 6 7use crate::{ 8 cartesia::{client::CartesiaClient, stt::SttManager, tts::TtsManager}, 9 devices::{input::InputDeviceManager, output::OutputDeviceManager, types::AudioDeviceError}, 10 letta::LettaManager, 11 secrets::SecretsManager, 12}; 13 14pub struct AppState { 15 pub cartesia_client: Arc<CartesiaClient>, 16 pub stt_manager: Arc<SttManager>, 17 pub tts_manager: Arc<TtsManager>, 18 pub letta_manager: Arc<LettaManager>, 19 pub secrets_manager: Arc<SecretsManager>, 20 pub input_device_manager: Arc<InputDeviceManager>, 21 pub output_device_manager: Arc<OutputDeviceManager>, 22} 23 24impl AppState { 25 pub fn new(store: Arc<Store<Wry>>) -> Result<Self, AudioDeviceError> { 26 let input_device_manager = Arc::new(InputDeviceManager::new()?); 27 let output_device_manager = Arc::new(OutputDeviceManager::new()?); 28 let secrets_manager = Arc::new(SecretsManager::new()); 29 30 let http_client = Client::new(); 31 let letta_manager = Arc::new(LettaManager::new( 32 http_client, 33 store.clone(), 34 secrets_manager.clone(), 35 )); 36 37 let cartesia_client = Arc::new(CartesiaClient::new(secrets_manager.clone())); 38 let stt_manager = Arc::new(SttManager::new( 39 cartesia_client.clone(), 40 input_device_manager.clone(), 41 )); 42 let tts_manager = Arc::new(TtsManager::new(cartesia_client.clone())); 43 44 Ok(AppState { 45 input_device_manager, 46 output_device_manager, 47 secrets_manager, 48 letta_manager, 49 cartesia_client, 50 stt_manager, 51 tts_manager, 52 }) 53 } 54}