use crate::llm::LlmRequest;
use crate::utils::model_name::is_gemini2_or_above;
use rs_genai::prelude::Tool;
#[derive(Debug, Clone, Copy, Default)]
pub struct UrlContextTool;
impl UrlContextTool {
pub fn new() -> Self {
Self
}
pub fn process_llm_request(&self, request: &mut LlmRequest, model: &str) {
if is_gemini2_or_above(model) {
request.tools.push(Tool::url_context());
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn gemini2_adds_url_context() {
let tool = UrlContextTool::new();
let mut request = LlmRequest::default();
tool.process_llm_request(&mut request, "gemini-2.5-flash");
assert_eq!(request.tools.len(), 1);
assert!(request.tools[0].url_context.is_some());
}
#[test]
fn gemini1_is_noop() {
let tool = UrlContextTool::new();
let mut request = LlmRequest::default();
tool.process_llm_request(&mut request, "gemini-1.5-pro");
assert!(request.tools.is_empty());
}
#[test]
fn non_gemini_is_noop() {
let tool = UrlContextTool::new();
let mut request = LlmRequest::default();
tool.process_llm_request(&mut request, "gpt-4");
assert!(request.tools.is_empty());
}
}