File size: 4,376 Bytes
781c86d
10e9b7d
781c86d
10e9b7d
fc7015b
781c86d
 
 
 
78f636a
09b53af
b5ed0c0
781c86d
fc7015b
 
 
781c86d
 
fc7015b
7df20a1
dec881c
 
586cfcf
 
 
 
 
 
781c86d
 
 
31a5120
781c86d
 
586cfcf
 
31a5120
dec881c
 
 
 
4021bf3
dec881c
 
e80aab9
31243f4
781c86d
31243f4
dec881c
6ac8934
eccf8e4
586cfcf
7d65c66
dec881c
6ac8934
586cfcf
6ac8934
 
586cfcf
31243f4
dec881c
6ac8934
 
586cfcf
31243f4
6ac8934
31243f4
586cfcf
 
dec881c
 
31243f4
dec881c
31243f4
586cfcf
31243f4
dec881c
 
586cfcf
dec881c
 
586cfcf
 
dec881c
 
54c62fb
e80aab9
586cfcf
dec881c
586cfcf
 
 
 
7d65c66
dec881c
e80aab9
 
586cfcf
 
 
 
fc7015b
 
586cfcf
 
 
 
fc7015b
586cfcf
 
e80aab9
 
fc7015b
 
dec881c
fc7015b
 
 
dec881c
fc7015b
dec881c
fc7015b
dec881c
fc7015b
 
 
dec881c
fc7015b
dec881c
 
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
""" Basic Agent Evaluation Runner"""
import os
import inspect
import gradio as gr
import requests
import pandas as pd
import time
from langchain_core.messages import HumanMessage
from agent import build_graph
import re


# (Keep Constants as is)
# --- Constants ---
DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"

# --- Basic Agent Definition ---
# ----- THIS IS WERE YOU CAN BUILD WHAT YOU WANT ------


cached_answers = []

def parse_final_answer(raw: str) -> str:
    raw = raw.strip()
    if "FINAL ANSWER:" in raw:
        return raw.split("FINAL ANSWER:")[-1].strip()
    return raw.split("Final Answer:")[-1].strip() if "Final Answer:" in raw else raw

class BasicAgent:
    def __init__(self):
        self.graph = build_graph()

    def __call__(self, question: str) -> str:
        messages = [HumanMessage(content=question)]
        output = self.graph.invoke({"messages": messages})
        return parse_final_answer(output['messages'][-1].content)

def run_agent_only(profile: gr.OAuthProfile | None):
    global cached_answers
    cached_answers = []
    results_log = []

    if not profile:
        return "Please login first.", None

    try:
        agent = BasicAgent()
    except Exception as e:
        return f"Agent Init Error: {e}", None

    try:
        questions = requests.get("https://agents-course-unit4-scoring.hf.space/questions", timeout=15).json()
    except Exception as e:
        return f"Error fetching questions: {e}", None

    with open("system_prompt.txt", "r") as f:
        system_prompt = f.read().strip()

    for item in questions:
        task_id = item.get("task_id")
        question = item.get("question")
        file_name = item.get("file_name")

        if not task_id or not question:
            continue

        try:
            user_message = question + (f"\n\nFile to use: {file_name}" if file_name else "")
            answer = agent(system_prompt + "\n\n" + user_message)
            cached_answers.append({"task_id": task_id, "submitted_answer": answer})
            results_log.append({"Task ID": task_id, "Question": question, "Submitted Answer": answer})
        except Exception as e:
            results_log.append({"Task ID": task_id, "Question": question, "Submitted Answer": f"AGENT ERROR: {e}"})

    return "Agent finished. Click 'Submit Cached Answers' next.", pd.DataFrame(results_log)

def submit_cached_answers(profile: gr.OAuthProfile | None):
    if not profile or not cached_answers:
        return "Nothing to submit. Run the agent first.", None

    payload = {
        "username": profile.username,
        "agent_code": f"https://huggingface.co/spaces/{os.getenv('SPACE_ID')}/tree/main",
        "answers": cached_answers
    }

    try:
        response = requests.post("https://agents-course-unit4-scoring.hf.space/submit", json=payload, timeout=60)
        result = response.json()
        score = result.get("score", "?")
        correct = result.get("correct_count", "?")
        total = result.get("total_attempted", "?")
        return f"Submission complete. Score: {score}% ({correct}/{total})", None
    except Exception as e:
        return f"Submission failed: {e}", None

with gr.Blocks() as demo:
    gr.Markdown("""# Agent Evaluator
1. Login with Hugging Face
2. Run agent only
3. Submit answers""")

    gr.LoginButton()
    run_button = gr.Button("Run Agent")
    submit_button = gr.Button("Submit Cached Answers")
    status_box = gr.Textbox(label="Status", lines=4)
    table = gr.DataFrame(label="Answers Log")

    run_button.click(fn=run_agent_only, outputs=[status_box, table])
    submit_button.click(fn=submit_cached_answers, outputs=[status_box, table]))

if __name__ == "__main__":
    print("\n" + "-"*30 + " App Starting " + "-"*30)
    space_host_startup = os.getenv("SPACE_HOST")
    space_id_startup = os.getenv("SPACE_ID")

    if space_host_startup:
        print(f"✅ SPACE_HOST found: {space_host_startup}")
        print(f"   Runtime URL: https://{space_host_startup}.hf.space")
    else:
        print("ℹ️  No SPACE_HOST found.")

    if space_id_startup:
        print(f"✅ SPACE_ID found: {space_id_startup}")
        print(f"   Repo URL: https://huggingface.co/spaces/{space_id_startup}")
    else:
        print("ℹ️  No SPACE_ID found.")

    print("Launching Gradio Interface...")
    demo.launch(debug=True, share=False)