onisj's picture
Add .gitignore and clean tracked files
1bbca12
raw
history blame
3.53 kB
import aiohttp
import asyncio
from graph import graph
from state import JARVISState
from pydantic import BaseModel
from typing import List
import json
import os
from dotenv import load_dotenv
# Load environment variables
load_dotenv()
# Debug: Verify environment variables
print(f"OPENAI_API_KEY loaded: {'set' if os.getenv('OPENAI_API_KEY') else 'not set'}")
print(f"LANGFUSE_PUBLIC_KEY loaded: {'set' if os.getenv('LANGFUSE_PUBLIC_KEY') else 'not set'}")
# Verify critical environment variables
required_env_vars = ["OPENAI_API_KEY", "LANGFUSE_PUBLIC_KEY", "LANGFUSE_SECRET_KEY"]
for var in required_env_vars:
if not os.getenv(var):
raise ValueError(f"Environment variable {var} is not set")
# Pydantic Models for Submission
class Answer(BaseModel):
task_id: str
submitted_answer: str
class Submission(BaseModel):
username: str
agent_code: str
answers: List[Answer]
async def fetch_questions() -> List[dict]:
async with aiohttp.ClientSession() as session:
async with session.get("https://api.gaia-benchmark.com/questions") as resp:
return await resp.json()
async def download_file(task_id: str, file_path: str) -> bool:
async with aiohttp.ClientSession() as session:
async with session.get(f"https://api.gaia-benchmark.com/files/{task_id}") as resp:
if resp.status == 200:
with open(file_path, "wb") as f:
f.write(await resp.read())
return True
return False
async def process_question(question: dict) -> Answer:
# Determine file type based on question context
file_type = "jpg" if "image" in question["question"].lower() else "txt"
if "menu" in question["question"].lower() or "report" in question["question"].lower() or "document" in question["question"].lower():
file_type = "pdf" # Prioritize PDF for reports/documents
elif "data" in question["question"].lower():
file_type = "csv"
file_path = f"temp_{question['task_id']}.{file_type}"
await download_file(question["task_id"], file_path)
state = JARVISState(
task_id=question["task_id"],
question=question["question"],
tools_needed=[],
web_results=[],
file_results="",
image_results="",
calculation_results="",
document_results="",
messages=[],
answer=""
)
# Use unique thread_id for memory
result = await graph.ainvoke(state, config={"thread_id": question["task_id"]})
return Answer(task_id=question["task_id"], submitted_answer=result["answer"])
async def submit_answers(answers: List[Answer], username: str, agent_code: str):
submission = Submission(
username=username,
agent_code=agent_code,
answers=answers
)
async with aiohttp.ClientSession() as session:
async with session.post("https://api.gaia-benchmark.com/submit", json=submission.dict()) as resp:
return await resp.json()
async def main():
username = "onisj" # Your Hugging Face username
agent_code = "https://huggingface.co/spaces/onisj/jarvis_gaia_agent/tree/main"
questions = await fetch_questions()
answers = []
for question in questions[:20]: # Process 20 questions
answer = await process_question(question)
answers.append(answer)
result = await submit_answers(answers, username, agent_code)
print("Submission result:", json.dumps(result, indent=2))
if __name__ == "__main__":
asyncio.run(main())