""" Communicate with HF Agent Course API to evaluate the AI agent. """ import requests DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space" def get_questions(api_url: str | None=None) -> list | str: if not api_url: api_url = DEFAULT_API_URL questions_url = f"{api_url}/questions" print("Fetching questions from:", questions_url) try: response = requests.get(questions_url, timeout=15) response.raise_for_status() questions_data = response.json() if not questions_data: print("Fetched questions list is empty.") return "Fetched questions list is empty or invalid format.", None print(f"Fetched {len(questions_data)} questions.") return questions_data except requests.exceptions.RequestException as e: print(f"Error fetching questions: {e}") return f"Error fetching questions: {e}", None except requests.exceptions.JSONDecodeError as e: print(f"Error decoding JSON response from questions endpoint: {e}") print(f"Response text: {response.text[:500]}") return f"Error decoding server response for questions: {e}", None except Exception as e: print(f"An unexpected error occurred fetching questions: {e}") return f"An unexpected error occurred fetching questions: {e}", None def submit(submission_data: list, api_url: str | None=None) -> str: if not api_url: api_url = DEFAULT_API_URL submit_url = f"{api_url}/submit" print(f"Submitting {len(submission_data['answers'])} answers to: {submit_url}") 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"Overall 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.')}" ) print("Submission successful.") return final_status except requests.exceptions.HTTPError as e: error_detail = f"Server responded with status {e.response.status_code}." try: error_json = e.response.json() error_detail += f" Detail: {error_json.get('detail', e.response.text)}" except requests.exceptions.JSONDecodeError: error_detail += f" Response: {e.response.text[:500]}" status_message = f"Submission Failed: {error_detail}" print(status_message) return status_message except requests.exceptions.Timeout: status_message = "Submission Failed: The request timed out." print(status_message) return status_message except requests.exceptions.RequestException as e: status_message = f"Submission Failed: Network error - {e}" print(status_message) return status_message except Exception as e: status_message = f"An unexpected error occurred during submission: {e}" print(status_message) return status_message if __name__ == "__main__": pass