Rashmi0801's picture
Update app.py
f61e168 verified
Raw
History Blame Contribute Delete
4.04 kB
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"
# Import your CrewAI components (assuming they're in separate files)
from agents import news_researcher, news_writer
from tasks import research_task, write_task
class CrewAIAgent:
def __init__(self):
print("Initializing CrewAI agents...")
self.crew = Crew(
agents=[news_researcher, news_writer],
tasks=[research_task, write_task],
process=Process.sequential,
verbose=True
)
print("CrewAI agents initialized.")
def __call__(self, question: str) -> str:
print(f"Processing question: {question[:50]}...")
try:
# Execute the crew with the question as input
result = self.crew.kickoff(inputs={'topic': question})
print(f"Generated answer: {result[:100]}...")
return str(result)
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()
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()