use sapiens::tools::toolbox::Toolbox;
use crate::conclude::ConcludeTool;
use crate::python::PythonTool;
pub async fn toolbox_from_env() -> Toolbox {
let mut toolbox = Toolbox::default();
#[cfg(feature = "search")]
{
use crate::search::SearchTool;
toolbox.add_tool(SearchTool::default()).await;
}
#[cfg(feature = "hue")]
{
use std::net::IpAddr;
use std::str::FromStr;
use huelib2::bridge;
let bridge_ip = match std::env::var("HUE_BRIDGE_IP") {
Ok(ip) => IpAddr::from_str(&ip).expect("Invalid IP address"),
Err(_) => {
println!("HUE_BRIDGE_IP env not set. Trying to discover bridge.");
let bridge_ip = bridge::discover_nupnp().unwrap().pop().unwrap();
println!(
"Discovered bridge at IP address: HUE_BRIDGE_IP={}",
bridge_ip
);
bridge_ip
}
};
let username = match std::env::var("HUE_USERNAME") {
Ok(username) => username,
Err(_) => {
println!("HUE_USERNAME env not set. Trying to register a new user.");
let username =
bridge::register_user(bridge_ip, "sapiens").expect("Failed to register user");
println!(
"Registered a new user - pass it as env: \nHUE_USERNAME={}",
username
);
username
}
};
let bridge = bridge::Bridge::new(bridge_ip, username);
toolbox
.add_tool(crate::hue::room::RoomTool::new(bridge.clone()))
.await;
toolbox
.add_tool(crate::hue::status::SetStatusTool::new(bridge.clone()))
.await;
toolbox
.add_tool(crate::hue::status::StatusTool::new(bridge))
.await;
}
#[cfg(feature = "wiki")]
{
use crate::wiki::{wikidata, wikipedia};
toolbox.add_tool(wikidata::WikidataTool::new().await).await;
toolbox
.add_tool(wikipedia::WikipediaTool::new().await)
.await;
}
#[cfg(feature = "arxiv")]
{
toolbox.add_tool(crate::arxiv::ArxivTool::new().await).await;
}
#[cfg(feature = "summarize")]
{
toolbox
.add_tool(crate::summarize::SummarizeTool::default())
.await;
}
toolbox.add_terminal_tool(ConcludeTool::default()).await;
toolbox.add_advanced_tool(PythonTool::default()).await;
toolbox
}