pathmohd123's picture
Update app.py
235b2f6 verified
raw
history blame
5.12 kB
import os
import json
import requests
import traceback
import gradio as gr
import pandas as pd
from typing import Optional
from dotenv import load_dotenv
from transformers import pipeline
# ──────────────── Load Environment ────────────────
load_dotenv()
hf_token = os.getenv("HF_TOKEN")
DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
# ──────────────── Load Falcon Model ────────────────
try:
pipe = pipeline("text-generation", model="tiiuae/falcon-rw-1b", token=hf_token)
except Exception as e:
raise RuntimeError(f"Model loading failed: {e}")
# ──────────────── Agent Class ────────────────
class FalconAgent:
def __init__(self):
print("βœ… FalconAgent initialized.")
def __call__(self, question: str) -> str:
try:
prompt = f"{question}"
output = pipe(prompt, max_new_tokens=100, do_sample=False)
return output[0]["generated_text"].replace(prompt, "").strip()
except Exception as e:
return f"LLM Error: {e}"
# ──────────────── API Helpers ────────────────
def get_all_questions(api_url: str) -> list[dict]:
resp = requests.get(f"{api_url}/questions", timeout=15)
resp.raise_for_status()
return resp.json()
def submit_answers(api_url: str, username: str, code_link: str, answers: list[dict]) -> dict:
payload = {
"username": username,
"agent_code": code_link,
"answers": answers
}
resp = requests.post(f"{api_url}/submit", json=payload, timeout=60)
resp.raise_for_status()
return resp.json()
# ──────────────── Gradio Evaluation Logic ────────────────
def run_and_submit_all(profile: gr.OAuthProfile | None):
if not profile:
return "❌ Please log in to Hugging Face using the button above.", None
username = profile.username.strip()
space_id = os.getenv("SPACE_ID", "")
code_link = f"https://huggingface.co/spaces/{space_id}/tree/main" if space_id else ""
try:
agent = FalconAgent()
except Exception as e:
return f"❌ Error initializing agent: {e}", None
try:
questions_data = get_all_questions(DEFAULT_API_URL)
except Exception as e:
return f"❌ Failed to load questions: {e}", None
answers_payload = []
results_log = []
for item in questions_data:
task_id = item.get("task_id")
question_text = item.get("question", "")
if not task_id or not question_text:
continue
try:
submitted_answer = agent(question_text)
except Exception as e:
submitted_answer = f"AGENT ERROR: {e}"
answers_payload.append({"task_id": task_id, "submitted_answer": submitted_answer})
results_log.append({"Task ID": task_id, "Question": question_text, "Submitted Answer": submitted_answer})
if not answers_payload:
return "❌ No answers submitted.", pd.DataFrame(results_log)
try:
result_data = submit_answers(DEFAULT_API_URL, username, code_link, answers_payload)
except requests.exceptions.HTTPError as e:
try:
detail = e.response.json().get("detail", e.response.text)
except Exception:
detail = e.response.text
return f"❌ Submission Failed: HTTP {e.response.status_code}. Detail: {detail}", pd.DataFrame(results_log)
except Exception as e:
return f"❌ Submission Error: {e}", pd.DataFrame(results_log)
score = result_data.get("score", "N/A")
correct_count = result_data.get("correct_count", "?")
total = result_data.get("total_attempted", "?")
message = result_data.get("message", "")
final_status = (
f"βœ… Submission Successful!\n"
f"User: {username}\n"
f"Score: {score}% ({correct_count}/{total} correct)\n"
f"Message: {message}"
)
return final_status, pd.DataFrame(results_log)
# ──────────────── Gradio UI ────────────────
with gr.Blocks() as demo:
gr.Markdown("# 🧠 Falcon-RW-1B Agent Evaluation")
gr.Markdown(
"""
**Instructions:**
1. Copy this Space and define your own agent logic.
2. Log in with your Hugging Face account.
3. Click β€œRun Evaluation & Submit All Answers” to test and submit.
"""
)
gr.LoginButton()
run_button = gr.Button("Run Evaluation & Submit All Answers")
status_output = gr.Textbox(label="Status", lines=5, interactive=False)
results_table = gr.DataFrame(label="Agent Answers", wrap=True)
run_button.click(fn=run_and_submit_all, inputs=[], outputs=[status_output, results_table])
if __name__ == "__main__":
print("Launching Gradio Interface...")
demo.launch(debug=True, server_name="0.0.0.0", server_port=7860)