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)