Spaces:
Configuration error
Configuration error
| 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) |