File size: 4,467 Bytes
80328ae
1a6274b
80328ae
1a6274b
e3debcc
 
80328ae
 
 
 
1a6274b
80328ae
1a6274b
e3debcc
 
1a6274b
e3debcc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1a6274b
 
e3debcc
 
 
1a6274b
e3debcc
 
 
 
1a6274b
e3debcc
 
1a6274b
 
 
 
 
 
 
e3debcc
1a6274b
 
80328ae
1a6274b
80328ae
1a6274b
80328ae
 
1a6274b
 
 
 
 
 
 
e3debcc
1a6274b
 
 
 
4b4ec32
1a6274b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4b4ec32
1a6274b
 
 
 
e3debcc
1a6274b
80328ae
 
1a6274b
 
 
 
e3debcc
 
 
 
 
4b4ec32
1a6274b
80328ae
1a6274b
 
 
 
 
 
 
 
 
 
 
 
 
e3debcc
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
import os
import gradio as gr
import requests
import pandas as pd
from crewai import Crew, Process
from dotenv import load_dotenv

# Load environment variables
load_dotenv()

# Constants
DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"

# CrewAI components (would normally be in separate files)
class ResearchAgent:
    def __init__(self):
        self.role = "Researcher"
        self.goal = "Research information thoroughly"
    
    def research(self, question):
        # Implement research logic here
        return f"Researched information about: {question}"

class WritingAgent:
    def __init__(self):
        self.role = "Writer"
        self.goal = "Write clear and accurate answers"
    
    def write(self, research_data):
        # Implement writing logic here
        return f"Comprehensive answer based on: {research_data}"

# Enhanced Agent Definition
class CrewAIAgent:
    def __init__(self):
        print("Initializing CrewAI agents...")
        self.researcher = ResearchAgent()
        self.writer = WritingAgent()
        print("CrewAI agents initialized.")

    def __call__(self, question: str) -> str:
        print(f"Processing question: {question[:50]}...")
        
        # Create and execute crew
        try:
            research_data = self.researcher.research(question)
            final_answer = self.writer.write(research_data)
            print(f"Generated answer: {final_answer[:100]}...")
            return final_answer
        except Exception as e:
            print(f"CrewAI error: {e}")
            return f"CrewAI Error: {str(e)}"

def run_and_submit_all(profile: gr.OAuthProfile | None):
    if not profile:
        return "Please log in with Hugging Face first.", None

    # Initialize agent
    try:
        agent = CrewAIAgent()  # Using CrewAI instead of BasicAgent
    except Exception as e:
        return f"Agent initialization failed: {e}", None

    # Fetch questions
    try:
        response = requests.get(f"{DEFAULT_API_URL}/questions", timeout=15)
        questions_data = response.json()
        if not questions_data:
            return "No questions available.", None
    except Exception as e:
        return f"Failed to fetch questions: {e}", None

    # Process questions
    results = []
    answers = []
    for item in questions_data:
        task_id = item.get("task_id")
        question = item.get("question")
        if not task_id or not question:
            continue
            
        try:
            answer = agent(question)
            answers.append({"task_id": task_id, "submitted_answer": answer})
            results.append({
                "Task ID": task_id,
                "Question": question[:100] + "..." if len(question) > 100 else question,
                "Answer": answer[:100] + "..." if len(answer) > 100 else answer
            })
        except Exception as e:
            results.append({
                "Task ID": task_id,
                "Question": question,
                "Answer": f"Error: {str(e)}"
            })

    # Submit answers
    try:
        submission = {
            "username": profile.username,
            "agent_code": f"https://huggingface.co/spaces/{os.getenv('SPACE_ID')}",
            "answers": answers
        }
        response = requests.post(f"{DEFAULT_API_URL}/submit", json=submission, timeout=60)
        result = response.json()
        
        return (
            f"✅ Submitted {len(answers)} answers\n"
            f"📊 Score: {result.get('score', 'N/A')}%\n"
            f"🔢 Correct: {result.get('correct_count', 0)}/{len(answers)}\n"
            f"🤖 Using CrewAI agents",
            pd.DataFrame(results)
        )
    except Exception as e:
        return f"Submission failed: {e}", pd.DataFrame(results)

# Gradio Interface
with gr.Blocks(theme=gr.themes.Soft()) as demo:
    gr.Markdown("# 🚀 CrewAI Evaluation Runner")
    gr.Markdown("""
    This combines CrewAI agents with the evaluation framework.
    The agents will research and write answers to evaluation questions.
    """)
    
    gr.LoginButton()
    
    with gr.Row():
        run_btn = gr.Button("Run Evaluation", variant="primary")
        
    with gr.Row():
        status = gr.Textbox(label="Status", interactive=False)
        results = gr.DataFrame(label="Results", wrap=True)

    run_btn.click(
        fn=run_and_submit_all,
        outputs=[status, results]
    )

if __name__ == "__main__":
    demo.launch()