|
|
|
|
|
""" |
|
|
HuggingFace Agents Course Unit 4 Final Assignment |
|
|
Multi-Agent System using LangGraph for GAIA Benchmark |
|
|
|
|
|
Goal: Achieve 30%+ score on Unit 4 API (GAIA benchmark subset) |
|
|
Architecture: Multi-agent LangGraph system with Qwen 2.5 models |
|
|
""" |
|
|
|
|
|
import os |
|
|
import gradio as gr |
|
|
from typing import Dict, Any |
|
|
from dotenv import load_dotenv |
|
|
|
|
|
|
|
|
load_dotenv() |
|
|
|
|
|
class GAIAAgentSystem: |
|
|
"""Main orchestrator for the GAIA benchmark multi-agent system""" |
|
|
|
|
|
def __init__(self): |
|
|
self.setup_environment() |
|
|
self.initialize_agents() |
|
|
|
|
|
def setup_environment(self): |
|
|
"""Initialize environment and validate required settings""" |
|
|
self.hf_token = os.getenv("HUGGINGFACE_TOKEN") |
|
|
if not self.hf_token: |
|
|
print("WARNING: HUGGINGFACE_TOKEN not set. Some features may be limited.") |
|
|
|
|
|
|
|
|
self.router_model = "Qwen/Qwen2.5-7B-Instruct" |
|
|
self.main_model = "Qwen/Qwen2.5-32B-Instruct" |
|
|
self.complex_model = "Qwen/Qwen2.5-72B-Instruct" |
|
|
|
|
|
def initialize_agents(self): |
|
|
"""Initialize the multi-agent system components""" |
|
|
print("🚀 Initializing GAIA Agent System...") |
|
|
print(f"📱 Router Model: {self.router_model}") |
|
|
print(f"🧠 Main Model: {self.main_model}") |
|
|
print(f"🔬 Complex Model: {self.complex_model}") |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def process_question(self, question: str, files: list = None) -> Dict[str, Any]: |
|
|
"""Process a GAIA benchmark question through the multi-agent system""" |
|
|
|
|
|
if not question.strip(): |
|
|
return { |
|
|
"answer": "Please provide a question to process.", |
|
|
"confidence": 0.0, |
|
|
"reasoning": "No input provided", |
|
|
"agent_path": [] |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return { |
|
|
"answer": f"Processing question: {question[:100]}...", |
|
|
"confidence": 0.5, |
|
|
"reasoning": "Phase 1 placeholder - agent system initializing", |
|
|
"agent_path": ["router", "main_agent"] |
|
|
} |
|
|
|
|
|
def create_gradio_interface(): |
|
|
"""Create the Gradio web interface for HuggingFace Space deployment""" |
|
|
|
|
|
agent_system = GAIAAgentSystem() |
|
|
|
|
|
def process_with_files(question: str, files): |
|
|
"""Handle question processing with optional file uploads""" |
|
|
file_list = files if files else [] |
|
|
result = agent_system.process_question(question, file_list) |
|
|
|
|
|
|
|
|
output = f""" |
|
|
**Answer:** {result['answer']} |
|
|
|
|
|
**Confidence:** {result['confidence']:.1%} |
|
|
|
|
|
**Reasoning:** {result['reasoning']} |
|
|
|
|
|
**Agent Path:** {' → '.join(result['agent_path'])} |
|
|
""" |
|
|
return output |
|
|
|
|
|
|
|
|
interface = gr.Interface( |
|
|
fn=process_with_files, |
|
|
inputs=[ |
|
|
gr.Textbox( |
|
|
label="GAIA Question", |
|
|
placeholder="Enter your question here...", |
|
|
lines=3 |
|
|
), |
|
|
gr.Files( |
|
|
label="Upload Files (Optional)", |
|
|
file_count="multiple", |
|
|
file_types=["image", "audio", ".txt", ".csv", ".xlsx", ".py"] |
|
|
) |
|
|
], |
|
|
outputs=gr.Markdown(label="Agent Response"), |
|
|
title="🤖 GAIA Benchmark Agent System", |
|
|
description=""" |
|
|
Multi-agent system for the GAIA benchmark using LangGraph framework. |
|
|
|
|
|
**Capabilities:** |
|
|
- Multi-step reasoning and planning |
|
|
- Web search and research |
|
|
- File processing (images, audio, documents) |
|
|
- Mathematical computation |
|
|
- Code execution and analysis |
|
|
|
|
|
**Target:** 30%+ accuracy on GAIA benchmark questions |
|
|
""", |
|
|
examples=[ |
|
|
["What is the population of France?", None], |
|
|
["Calculate the square root of 144", None], |
|
|
["Analyze the uploaded image and describe what you see", None] |
|
|
], |
|
|
theme=gr.themes.Soft() |
|
|
) |
|
|
|
|
|
return interface |
|
|
|
|
|
def main(): |
|
|
"""Main entry point""" |
|
|
print("🎯 HuggingFace Agents Course Unit 4 - Final Assignment") |
|
|
print("📊 Target: 30%+ score on GAIA benchmark") |
|
|
print("🔧 Framework: LangGraph multi-agent system") |
|
|
print("💰 Budget: Free tier models (~$0.10/month)") |
|
|
|
|
|
|
|
|
interface = create_gradio_interface() |
|
|
|
|
|
|
|
|
interface.launch( |
|
|
share=False, |
|
|
server_name="0.0.0.0", |
|
|
server_port=7860, |
|
|
show_error=True |
|
|
) |
|
|
|
|
|
if __name__ == "__main__": |
|
|
main() |