gemini_adk_rs/tools/
url_context.rs1use crate::llm::LlmRequest;
7use crate::utils::model_name::is_gemini2_or_above;
8use gemini_genai_rs::prelude::Tool;
9
10#[derive(Debug, Clone, Copy, Default)]
16pub struct UrlContextTool;
17
18impl UrlContextTool {
19 pub fn new() -> Self {
21 Self
22 }
23
24 pub fn process_llm_request(&self, request: &mut LlmRequest, model: &str) {
28 if is_gemini2_or_above(model) {
29 request.tools.push(Tool::url_context());
30 }
31 }
32}
33
34#[cfg(test)]
35mod tests {
36 use super::*;
37
38 #[test]
39 fn gemini2_adds_url_context() {
40 let tool = UrlContextTool::new();
41 let mut request = LlmRequest::default();
42 tool.process_llm_request(&mut request, "gemini-2.5-flash");
43
44 assert_eq!(request.tools.len(), 1);
45 assert!(request.tools[0].url_context.is_some());
46 }
47
48 #[test]
49 fn gemini1_is_noop() {
50 let tool = UrlContextTool::new();
51 let mut request = LlmRequest::default();
52 tool.process_llm_request(&mut request, "gemini-1.5-pro");
53
54 assert!(request.tools.is_empty());
55 }
56
57 #[test]
58 fn non_gemini_is_noop() {
59 let tool = UrlContextTool::new();
60 let mut request = LlmRequest::default();
61 tool.process_llm_request(&mut request, "gpt-4");
62
63 assert!(request.tools.is_empty());
64 }
65}