from google.genai import types from google import genai from gemini_llm import GeminiLLM class GeminiToolDefination: def __init__(self, geminillm: GeminiLLM, result=None): self.geminillm = geminillm self.result = result self.gemini_thinking_declaration = { "name": "GeminiThinking", "description": ( "Use this tool when the user's input suggests they are looking for thoughtful reflection, brainstorming, " "hypothetical reasoning, or deep analysis. This includes philosophical questions, complex scenarios, or tasks " "where the agent must 'think' or 'reflect' to provide a structured or creative response. " "When to use: if the user is asking 'what if', 'analyze', 'brainstorm', or 'explore possibilities'. " "Avoid this tool for factual, time-sensitive, or technical queries—use search or code tools instead." ), "parameters": { "type": "object", "properties": { "query": { "type": "string", "description": ( "Queries asking for reasoning or deep thought. " "Examples: 'What are some possible futures if humans colonize Mars?', " "'Can you explore the societal effects of AI on human creativity?', " "'Is ambition more helpful or harmful in life?'" ) } }, "required": ["query"] } } self.google_search_tool = { "name": "GoogleSearchTool", "description": ( "Use this tool when the user is asking for specific, real-time, or factual information that may be outside the model's knowledge. " "This includes recent news, live events, product prices, names, or anything the model cannot confidently answer from training data alone. " "When to use: if the model would otherwise respond with 'I'm not sure', 'As of my last update', or 'I cannot browse the web'. " "Avoid this for reasoning or general knowledge that doesn't need live updates." ), "parameters": { "type": "object", "properties": { "query": { "type": "string", "description": ( "Use for fact-seeking or current-event queries. " "Examples: 'What is the weather in Delhi today?', 'Latest iPhone 16 release date in India', " "'Who is the current CEO of Google?', 'How did the 2024 elections end?'" ) } }, "required": ["query"] } } self.gemini_code_execution_tool = { "name": "GeminiCodeExecutionTool", "description": ( "Use this tool when the user's prompt involves programming—writing, debugging, explaining, or executing code. " "Only invoke this for well-scoped technical/code tasks that require functional accuracy or output simulation. " "When to use: if the user asks for code generation, debugging, implementation, or syntax correction. " "Avoid this for general tech explanations—those don't require execution." ), "parameters": { "type": "object", "properties": { "query": { "type": "string", "description": ( "Programming-related prompts. " "Examples: 'Write a Python function to reverse a list', 'Fix this error in my code: ...', " "'What will this JavaScript function return?', 'Create a REST API in Flask'." ) } }, "required": ["query"] } } self.tools = types.Tool(function_declarations=[ self.gemini_thinking_declaration, self.google_search_tool, self.gemini_code_execution_tool ]) self.config = types.GenerateContentConfig(tools=[self.tools]) def pick_the_tool(self, prompt_text: str): contents = [ types.Content( role="user", parts=[types.Part(text=prompt_text)] ) ] try: response = self.geminillm.client.models.generate_content( model=self.geminillm.model_id, config=self.config, contents=contents ) self.result = response return self.result except Exception as e: raise RuntimeError(f"Failed to generate response with tools: {str(e)}")