File size: 3,848 Bytes
7c54674 3a41044 ac0d357 6768c0e b41a173 c73f4e1 6768c0e b41a173 6768c0e 5783f31 c73f4e1 3a41044 6768c0e 3a41044 b41a173 3a41044 bf485f8 3a41044 e927239 6768c0e 7f5b2db 3a41044 27ebbac c73f4e1 7f5b2db 6768c0e 27ebbac 3a41044 6768c0e 7f5b2db 6768c0e 7f5b2db 6768c0e 3a41044 e927239 3a41044 6768c0e 3a41044 27ebbac 3a41044 7f5b2db b41a173 a2bee9e 3a41044 6768c0e a2bee9e 6768c0e a2bee9e 3a41044 6768c0e 3a41044 6768c0e 3a41044 6768c0e 7f5b2db 6768c0e 27ebbac b41a173 6768c0e 27ebbac c73f4e1 c8c360b 3a41044 6768c0e c8c360b 765f971 ffde9d6 3a41044 6768c0e 27ebbac 164df94 fd99835 b41a173 |
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 |
import os
import gradio as gr
import requests
import pandas as pd
from typing import Tuple, Optional
from retriever import EnAgent as RetrieverAgent
# Константы
DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
class EnAgent:
def __init__(self):
self.retriever_agent = RetrieverAgent()
def __call__(self, question: str) -> str:
return self.retriever_agent.answer_question(question)
def run_and_submit_all(profile: gr.OAuthProfile | None) -> Tuple[str, Optional[pd.DataFrame]]:
if not profile:
return "❌ Please Login to Hugging Face with the button.", None
username = profile.username
space_id = os.getenv("SPACE_ID")
api_url = DEFAULT_API_URL
questions_url = f"{api_url}/questions"
submit_url = f"{api_url}/submit"
try:
agent = EnAgent()
except Exception as e:
return f"❌ Error initializing agent: {str(e)}", None
try:
response = requests.get(questions_url, timeout=15)
response.raise_for_status()
questions_data = response.json()
if not questions_data:
return "❌ Fetched questions list is empty or invalid format.", None
except requests.exceptions.RequestException as e:
return f"❌ Error fetching questions: {str(e)}", None
except Exception as e:
return f"❌ Unexpected error fetching questions: {str(e)}", None
results_log = []
answers_payload = []
for item in questions_data:
task_id = item.get("task_id") or item.get("id")
question_text = item.get("question")
if not task_id or question_text is None:
continue
try:
submitted_answer = agent(question_text)
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})
except Exception as e:
results_log.append({
"Task ID": task_id,
"Question": question_text,
"Submitted Answer": f"AGENT ERROR: {str(e)}"
})
if not answers_payload:
return "⚠️ Agent did not produce any answers to submit.", pd.DataFrame(results_log)
submission_data = {
"username": username.strip(),
"agent_code": f"https://huggingface.co/spaces/{space_id}/tree/main",
"answers": answers_payload
}
try:
response = requests.post(submit_url, json=submission_data, timeout=60)
response.raise_for_status()
result_data = response.json()
final_status = (
f"✅ Submission Successful!\n"
f"User: {result_data.get('username')}\n"
f"Score: {result_data.get('score', 'N/A')}% "
f"({result_data.get('correct_count', '?')}/{result_data.get('total_attempted', '?')} correct)\n"
f"Message: {result_data.get('message', 'No message received.')}"
)
return final_status, pd.DataFrame(results_log)
except requests.exceptions.RequestException as e:
return f"❌ Submission Failed: {str(e)}", pd.DataFrame(results_log)
# Gradio Interface
with gr.Blocks() as demo:
gr.Markdown("# En Agent")
gr.Markdown("""
**Instructions:**
1. Log in to Hugging Face below.
2. Click the button to run your agent on questions and submit answers.
""")
gr.LoginButton()
run_button = gr.Button("Run Evaluation & Submit All Answers")
status_output = gr.Textbox(label="Run Status / Submission Result", lines=5, interactive=False)
results_table = gr.DataFrame(label="Questions and Agent Answers", wrap=True)
run_button.click(fn=run_and_submit_all, outputs=[status_output, results_table])
if __name__ == "__main__":
demo.launch(debug=True, share=False)
|