use std::sync::Arc;
use crate::ToolRegistry;
use super::{BrowseActTool, BrowseConfig, BrowseExtractTool, BrowseTool, BrowserEngine};
pub fn browsing_tools(
provider: Option<Arc<dyn oxicode_ai::Provider>>,
model: Option<oxicode_ai::Model>,
engine: Arc<dyn BrowserEngine>,
) -> Arc<ToolRegistry> {
let registry = ToolRegistry::new();
registry.register(BrowseTool::new(Arc::clone(&engine)));
match (provider, model) {
(Some(p), Some(m)) => {
registry.register(BrowseActTool::new(p, m, Arc::clone(&engine)));
}
_ => {
registry.register(BrowseActTool::new_deterministic(Arc::clone(&engine)));
}
}
registry.register(BrowseExtractTool::new(engine));
Arc::new(registry)
}
pub fn browsing_tools_with_config(
provider: Option<Arc<dyn oxicode_ai::Provider>>,
model: Option<oxicode_ai::Model>,
engine: Arc<dyn BrowserEngine>,
config: BrowseConfig,
) -> Arc<ToolRegistry> {
let registry = ToolRegistry::new();
registry.register(BrowseTool::with_config(Arc::clone(&engine), config.clone()));
match (provider, model) {
(Some(p), Some(m)) => {
registry.register(BrowseActTool::with_config(
p,
m,
Arc::clone(&engine),
config.clone(),
));
}
_ => {
registry.register(BrowseActTool::with_config_deterministic(
Arc::clone(&engine),
config.clone(),
));
}
}
registry.register(BrowseExtractTool::with_config(engine, config));
Arc::new(registry)
}
#[cfg(feature = "native-browser")]
pub fn browsing_tools_with_session(
provider: Option<Arc<dyn oxicode_ai::Provider>>,
model: Option<oxicode_ai::Model>,
engine: Arc<dyn BrowserEngine>,
) -> Arc<ToolRegistry> {
use super::{BrowseScriptTool, BrowseSessionTool};
let registry = ToolRegistry::new();
registry.register(BrowseTool::new(Arc::clone(&engine)));
match (provider, model) {
(Some(p), Some(m)) => {
registry.register(BrowseActTool::new(p, m, Arc::clone(&engine)));
}
_ => {
registry.register(BrowseActTool::new_deterministic(Arc::clone(&engine)));
}
}
registry.register(BrowseExtractTool::new(Arc::clone(&engine)));
registry.register(BrowseScriptTool::new(Arc::clone(&engine)));
registry.register(BrowseSessionTool::new(engine));
Arc::new(registry)
}
#[cfg(all(test, feature = "native-browser"))]
mod tests {
use super::*;
type FactoryFn = fn(
Option<Arc<dyn oxicode_ai::Provider>>,
Option<oxicode_ai::Model>,
Arc<dyn BrowserEngine>,
) -> Arc<ToolRegistry>;
#[test]
fn browsing_tools_with_session_registers_all_four() {
let _f: FactoryFn = browsing_tools_with_session;
let _ = _f;
}
}