Gemini-Agent / src /gemini_tools_defination.py
Divyanshu3321
changed directory
86831fe
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)}")