|
import os |
|
import pandas as pd |
|
|
|
from agent.open_ai_agent import OpenAiAgent |
|
from rest_clients.hs_evaluator_client import HsEvaluatorClient |
|
|
|
|
|
class Evaluator: |
|
|
|
def __init__(self, profile): |
|
self.profile = profile |
|
self.username = profile.username if profile else None |
|
self.space_id = os.getenv("SPACE_ID", "tommaso1288/Final_Assignment_Template") |
|
self.agent = OpenAiAgent() |
|
self.hs_evaluator_client: HsEvaluatorClient | None = None |
|
|
|
def run_and_submit(self): |
|
if not self.username: |
|
return "Please Login to Hugging Face with the button.", None |
|
|
|
questions = self.get_hs_evaluator_client().fetch_questions() |
|
if not questions: |
|
return "Fetched questions list is empty or invalid format.", None |
|
|
|
results_log, answers_payload = self._run_agent(questions) |
|
if not answers_payload: |
|
return "Agent did not produce any answers to submit.", pd.DataFrame(results_log) |
|
|
|
return self.get_hs_evaluator_client().submit_answers(answers_payload, results_log) |
|
|
|
def _run_agent(self, questions): |
|
results_log = [] |
|
answers_payload = [] |
|
print(f"Running agent on {len(questions)} questions...") |
|
for item in questions: |
|
task_id = item.get("task_id") |
|
question_text = item.get("question") |
|
|
|
|
|
try: |
|
file_path = self.get_hs_evaluator_client().download_file_if_any(task_id) |
|
except Exception as e: |
|
file_path = None |
|
print(f"[file fetch error] {task_id}: {e}") |
|
|
|
|
|
if file_path: |
|
q_for_agent = ( |
|
f"{question_text}\n\n" |
|
f"---\n" |
|
f"A file was downloaded for this task and saved locally at:\n" |
|
f"{file_path}\n" |
|
f"---\n\n" |
|
) |
|
else: |
|
q_for_agent = question_text |
|
|
|
if not task_id or question_text is None: |
|
print(f"Skipping item with missing task_id or question: {item}") |
|
continue |
|
try: |
|
submitted_answer = self.agent(q_for_agent) |
|
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: |
|
print(f"Error running agent on task {task_id}: {e}") |
|
results_log.append({"Task ID": task_id, "Question": question_text, "Submitted Answer": f"AGENT ERROR: {e}"}) |
|
return results_log, answers_payload |
|
|
|
def get_hs_evaluator_client(self): |
|
if not self.hs_evaluator_client: |
|
self.hs_evaluator_client = HsEvaluatorClient(self.username, self.space_id) |
|
return self.hs_evaluator_client |