File size: 9,911 Bytes
d9109f7 31ef6a9 d9109f7 31ef6a9 d9109f7 31ef6a9 d9109f7 b4d1371 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 |
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():
"""Fetch questions from the GAIA API and return them in a structured format"""
url = 'https://agents-course-unit4-scoring.hf.space/questions'
headers = {'accept': 'application/json'}
response = requests.get(url, headers=headers)
if response.status_code != 200:
return f"Error fetching questions: {response.status_code}"
questions_data = response.json()
return questions_data
#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": "https://huggingface.co/spaces/ashishja/Agents_Course_Final_Assignment_Ashish/tree/main",
"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 data. "
"The questions data will be a list of dictionaries, each containing 'task_id', 'question', and 'file_name' fields. "
"For each question in the data: "
"1. If file_name is not empty, the file can be accessed at https://agents-course-unit4-scoring.hf.space/files/[TASK_ID] "
"2. Use appropriate sub-agents based on question type (code_agent for coding, search_agent for web search, etc.) "
"3. Provide a concise, direct answer for each question "
"4. Return a dictionary with keys 'task_id' and 'submitted_answer' for each answer "
"5. Collect all dictionaries in a list and pass to 'submit_api' tool to submit the answers. "
"Always provide direct, factual answers without prefixes like 'The answer is:' or 'Final answer:'"
)
,
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()
# Create the default session synchronously (create_session is not async)
try:
session = session_service.create_session(
app_name=APP_NAME,
user_id=USER_ID,
session_id=SESSION_ID
)
print(f"✅ Default session created: {SESSION_ID}")
except Exception as e:
print(f"⚠️ Error creating default session: {e}")
session = None
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()) |