ashishja's picture
updated agent code
581911f verified
raw
history blame
9.64 kB
from zoneinfo import ZoneInfo
from google.adk.agents import Agent,BaseAgent,LlmAgent
from google.adk.tools import google_search
from google.adk.runners import Runner
from google.adk.sessions import InMemorySessionService
from google.genai import types
import google.genai.types as types
import requests
from google.adk.events import Event, EventActions
from google.adk.agents.invocation_context import InvocationContext
from typing import AsyncGenerator
from google.genai import types as genai_types
from google.adk.tools import ToolContext, FunctionTool
import logging
from google.adk.tools import built_in_code_execution
from google.adk.tools import agent_tool
logging.basicConfig(level=logging.ERROR)
#from google.adk.tools import agent_tool
url = 'https://agents-course-unit4-scoring.hf.space/questions'
headers = {'accept': 'application/json'}
response = requests.get(url, headers=headers)
# class responses_api(BaseAgent):
# async def _run_async_impl(self, ctx: InvocationContext)-> AsyncGenerator[Event, None]:
# # This method is called when the agent is run
# # You can implement your logic here
# # For example, you can call an external API or perform some calculations
# # and return the result
# url = 'https://agents-course-unit4-scoring.hf.space/questions'
# headers = {'accept': 'application/json'}
# response = requests.get(url, headers=headers)
# for i in response.json():
# if i['file_name'] != '':
# url_file = f"https://agents-course-unit4-scoring.hf.space/files/{i['task_id']}"
# question = i['question']
# prompt = f"{question} and the file is {url_file}, give the final answer only"
# else:
# question = i['question']
# prompt = f"{question} give the final answer only"
# existing_responses = ctx.session.state.get("user:responses", [])
# existing_responses.append(prompt)
# ctx.session_state["user:responses"] = existing_responses
# # Optionally, yield a single event to indicate completion or provide some output
# yield Event(author=self.name, content=types.Content(parts=[types.Part(text=f"Fetched {len(questions_data)} questions."))])
def answer_questions():
url = 'https://agents-course-unit4-scoring.hf.space/questions'
headers = {'accept': 'application/json'}
response = requests.get(url, headers=headers)
prompts = []
for i in response.json():
task_id = i['task_id']
if i['file_name'] != '':
url_file = f"https://agents-course-unit4-scoring.hf.space/files/{i['task_id']}"
question = i['question']
prompt = f"{task_id}:{question} and the file is {url_file}, give the final answer only"
else:
question = i['question']
prompt = f"{task_id}:{question} give the final answer only"
prompts.append(prompt)
return prompts
#responses_api = responses_api(name= 'responses_api_1')
from typing import Dict, Any
def submit_questions(answers: list[str]) -> Dict[str, Any]:
url = 'https://agents-course-unit4-scoring.hf.space/submit'
payload = {
"username": "ashishja",
"agent_code": "your_agent_code",
"answers": answers}
headers = {'accept': 'application/json', "Content-Type": "application/json"}
response = requests.post(url, headers=headers, json =payload)
import json
print(json.dumps(payload, indent=2))
if response.status_code == 200:
return response.json()
else:
response.raise_for_status()
responses_api = FunctionTool(func= answer_questions)
submit_api = FunctionTool(func=submit_questions)
# class QuestionAnswerer(LlmAgent):
# async def _run_async_impl(self, ctx: InvocationContext) -> AsyncGenerator[Event, None]:
# questions_to_answer = ctx.session_service.get('fetched_questions', [])
# for q in questions_to_answer:
# answer = await self._llm(messages=[types.ChatMessage(role="user", parts=[types.Part(text=q)])])
# yield Event(author=self.name, content=answer.content)
# qa = QuestionAnswerer(name = 'qa_1', model="gemini-2.0-flash", description="Question Answerer")
APP_NAME="weather_sentiment_agent"
USER_ID="user1234"
SESSION_ID="1234"
code_agent = LlmAgent(
name='codegaiaAgent',
model="gemini-2.5-pro-preview-05-06",
description=(
"You are a smart agent that can write and execute code and answer any questions provided access the given files and answer"
),
instruction = (
"if the question contains a file with .py ,Get the code file and depending on the question and the file provided, execute the code and provide the final answer. "
"If the question contains a spreadsheet file like .xlsx and .csv among others, get the file and depending on the question and the file provided, execute the code and provide the final answer. "
"use code like import pandas as pd , file = pd.read_csv('file.csv') and then use the file to answer the question. "
"if the question contains a file with .txt ,Get the code file and depending on the question and the file provided, execute the code and provide the final answer. "
"if the question contains a file with .json ,Get the code file and depending on the question and the file provided, execute the code and provide the final answer. "
"If you are writing code or if you get a code file, use the code execution tool to run the code and provide the final answer. "
)
,
tools=[built_in_code_execution],
# Add the responses_api agent as a tool
#sub_agents=[responses_api]
)
search_agent = LlmAgent(
name='searchgaiaAgent',
model="gemini-2.5-pro-preview-05-06",
description=(
"You are a smart agent that can search the web and answer any questions provided access the given files and answer"
),
instruction = (
"Get the url associated perform a search and consolidate the information provided and answer the provided question "
)
,
tools=[google_search],
# Add the responses_api agent as a tool
#sub_agents=[responses_api]
)
image_agent = LlmAgent(
name='imagegaiaAgent',
model="gemini-2.5-pro-preview-05-06",
description=(
"You are a smart agent that can when given a image file and answer any questions related to it"
),
instruction = (
"Get the image file from the link associated in the prompt use Gemini to watch the video and answer the provided question ")
,
# tools=[google_search],
# Add the responses_api agent as a tool
#sub_agents=[responses_api]
)
youtube_agent = LlmAgent(
name='youtubegaiaAgent',
model="gemini-2.5-pro-preview-05-06",
description=(
"You are a smart agent that can when given a youtube link watch it and answer any questions related to it"
),
instruction = (
"Get the youtube link associated use Gemini to watch the video and answer the provided question ")
,
# tools=[google_search],
# Add the responses_api agent as a tool
#sub_agents=[responses_api]
)
root_agent = LlmAgent(
name='basegaiaAgent',
model="gemini-2.5-pro-preview-05-06",
description=(
"You are a smart agent that can answer any questions provided access the given files and answer"
),
instruction = (
"You are a helpful agent. When the user asks to get the questions or makes a similar request, "
"invoke your tool 'responses_api' to retrieve the questions. "
"Once you receive the list of questions, loop over each question and provide a concise answer for each based on the question and any provided file. "
"For every answer, return a dictionary with the keys task_id and submitted_answer, for example: "
"{'task_id': 'the-task-id', 'submitted_answer': 'your answer'}. "
"Collect all such dictionaries in a list (do not include any backslashes), and pass this list to the 'submit_api' tool to submit the answers."
)
,
tools=[responses_api,submit_api,agent_tool.AgentTool(agent = code_agent),\
agent_tool.AgentTool(agent = search_agent), agent_tool.AgentTool(youtube_agent), agent_tool.AgentTool(image_agent)],
# Add the responses_api agent as a tool
#sub_agents=[responses_api]
)
# root_agent = LlmAgent(
# name='gaiaAgent',
# model="gemini-2.5-pro-preview-05-06",
# description=(
# "You are a smart agent that can answer any questions provided access the given files and answer"
# ),
# instruction = (
# "You are a helpful agent. When the user asks to get the questions or makes a similar request, "
# "invoke base agent. "
# "Once you the answers check if are in correct format. "
# #"Collect all such dictionaries in a list (do not include any backslashes), and pass this list to the 'submit_api' tool to submit the answers."
# )
# ,
# #tools=[submit_api],
# # Add the responses_api agent as a tool
# sub_agents=[base_agent]
# )
session_service = InMemorySessionService()
session = session_service.create_session(app_name=APP_NAME, \
user_id=USER_ID,\
session_id=SESSION_ID)
runner = Runner(agent=root_agent, app_name=APP_NAME, session_service=session_service)
# # def send_query_to_agent(root_agent, query, session):
# # session = session
# # content = types.Content(role='user', parts=[types.Part(text=query)])
# # async def main():
# # await process_questions_and_answer()
# # if __name__ == "__main__":
# # import asyncio
# # asyncio.run(main())