gbserver/src/main.rs

101 lines
3.2 KiB
Rust
Raw Normal View History

2025-08-17 14:43:35 -03:00
use actix_web::middleware::Logger;
2025-09-17 20:11:56 -03:00
use log::info;
use std::sync::Arc;
use actix_web::{web, App, HttpServer};
use dotenv::dotenv;
2025-07-19 12:10:16 -03:00
use services::state::*;
2025-08-16 18:13:03 -03:00
use services::{config::*, file::*};
use sqlx::PgPool;
2025-08-16 18:13:03 -03:00
use crate::services::automation::AutomationService;
2025-09-17 20:11:56 -03:00
use crate::services::email::{
get_emails, get_latest_email_from, list_emails, save_click, save_draft, send_email,
};
2025-08-16 18:13:03 -03:00
use crate::services::llm::{chat, chat_stream};
2025-09-19 08:25:39 -03:00
use crate::services::llm_generic::generic_chat_completions;
use crate::services::llm_local::{
chat_completions_local, embeddings_local, ensure_llama_servers_running,
};
2025-07-29 21:39:24 -03:00
use crate::services::web_automation::{initialize_browser_pool, BrowserPool};
2025-08-14 09:42:05 -03:00
2025-08-16 18:13:03 -03:00
mod models;
mod services;
#[tokio::main(flavor = "multi_thread")]
async fn main() -> std::io::Result<()> {
dotenv().ok();
2025-07-20 15:01:18 -03:00
env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info")).init();
2025-09-17 20:11:56 -03:00
info!("Starting General Bots 6.0...");
2025-07-20 15:01:18 -03:00
let config = AppConfig::from_env();
let db_url = config.database_url();
let db_custom_url = config.database_custom_url();
let db = PgPool::connect(&db_url).await.unwrap();
let db_custom = PgPool::connect(&db_custom_url).await.unwrap();
let minio_client = init_minio(&config)
.await
.expect("Failed to initialize Minio");
let browser_pool = Arc::new(BrowserPool::new(
"http://localhost:9515".to_string(),
5,
"/usr/bin/brave-browser-beta".to_string(),
));
2025-08-14 09:42:05 -03:00
2025-09-08 14:58:22 -03:00
ensure_llama_servers_running()
.await
.expect("Failed to initialize LLM local server.");
2025-08-14 09:42:05 -03:00
2025-07-29 21:39:24 -03:00
initialize_browser_pool()
.await
.expect("Failed to initialize browser pool");
2025-08-14 09:42:05 -03:00
let app_state = web::Data::new(AppState {
db: db.into(),
db_custom: db_custom.into(),
config: Some(config.clone()),
minio_client: minio_client.into(),
browser_pool: browser_pool.clone(),
});
2025-08-16 18:13:03 -03:00
// Start automation service in background
let automation_state = app_state.get_ref().clone(); // This gets the Arc<AppState>
2025-07-19 12:10:16 -03:00
2025-08-16 20:40:20 -03:00
let automation = AutomationService::new(automation_state, "src/prompts");
2025-08-16 18:13:03 -03:00
let _automation_handle = automation.spawn();
// Start HTTP server
HttpServer::new(move || {
2025-08-17 14:43:35 -03:00
// let cors = Cors::default()
// .send_wildcard()
// .allowed_methods(vec!["GET", "POST", "PUT", "DELETE"])
// .allowed_headers(vec![header::AUTHORIZATION, header::ACCEPT])
// .allowed_header(header::CONTENT_TYPE)
// .max_age(3600);
//.wrap(cors)
2025-07-20 00:03:37 -03:00
App::new()
2025-08-17 14:43:35 -03:00
.wrap(Logger::default())
.wrap(Logger::new("HTTP REQUEST: %a %{User-Agent}i"))
.app_data(app_state.clone())
.service(upload_file)
.service(list_file)
.service(save_click)
.service(get_emails)
2025-07-04 10:39:31 -03:00
.service(list_emails)
.service(send_email)
2025-07-04 23:20:48 -03:00
.service(chat_stream)
.service(chat)
2025-09-19 08:25:39 -03:00
.service(chat_completions_local)
2025-09-17 20:11:56 -03:00
.service(save_draft)
.service(generic_chat_completions)
2025-09-08 14:58:22 -03:00
.service(embeddings_local)
2025-09-17 20:11:56 -03:00
.service(get_latest_email_from)
})
.bind((config.server.host.clone(), config.server.port))?
.run()
.await
}