""" Lab 6.8: Build an Eval Harness Objective: Create golden Q&A pairs + automated pass/fail scoring. """ from typing import Any import json # TODO 1: Define golden test cases # Each case has: # - input: the user prompt / task description # - expected_tools: list of tools the agent should call (in order) # - expected_tool_params: dict of expected parameters per tool call # - expected_output_contains: list of strings that should appear in output # - weight: importance weight for scoring GOLDEN_DATASET = [ { "id": "test-001", "input": "Find all users created in the last 24 hours", "expected_tools": ["query_database"], "expected_tool_params": {}, # TODO: define expected params "expected_output_contains": ["users", "24"], "weight": 1.0 }, { "id": "test-002", "input": "What's the current weather in Tokyo?", "expected_tools": ["search_web"], # or ["weather_api"] "expected_output_contains": ["Tokyo", "°"], "weight": 1.0 }, # TODO: Add 8 more test cases covering different scenarios ] # TODO 2: Implement evaluation logic class EvalHarness: """Evaluate agent responses against golden dataset.""" def __init__(self, dataset: list[dict]): self.dataset = dataset def evaluate(self, agent_func: callable) -> dict: """ Run the agent against all test cases and compute pass@k. Returns: { "pass@1": float, # % of cases passed on first try "pass@3": float, # % of cases passed on best of 3 "pass@5": float, # % of cases passed on best of 5 "weighted_score": float, "results": [case results] } """ pass # TODO def score_case(self, result: Any) -> float: """ Score a single agent result against expected criteria. Returns 0.0 to 1.0 based on: - Tool selection accuracy - Parameter correctness - Output content match """ pass # TODO if __name__ == "__main__": harness = EvalHarness(GOLDEN_DATASET) # Define your agent function here def my_agent(input_text: str) -> Any: # TODO: implement or import your agent return {"output": "placeholder"} results = harness.evaluate(my_agent) print(json.dumps(results, indent=2)) print(f"\npass@1: {results['pass@1']:.1%}") print(f"pass@3: {results['pass@3']:.1%}") print(f"pass@5: {results['pass@5']:.1%}")