# Basic Accuracy Evaluation (/examples/evals/accuracy/accuracy-basic)



Demonstrates synchronous and asynchronous accuracy evaluations.

Scores include only successfully evaluated iterations. A high average can therefore accompany missing results. Replace the score-only assertions with completeness checks before using this example as a quality gate.

```python title="accuracy_basic.py"
"""
Basic Accuracy Evaluation
=========================

Demonstrates synchronous and asynchronous accuracy evaluations.
"""

import asyncio
from typing import Optional

from agno.agent import Agent
from agno.eval.accuracy import AccuracyEval, AccuracyResult
from agno.models.openai import OpenAIChat
from agno.tools.calculator import CalculatorTools

# ---------------------------------------------------------------------------
# Create Sync Evaluation
# ---------------------------------------------------------------------------
evaluation = AccuracyEval(
    name="Calculator Evaluation",
    model=OpenAIChat(id="o4-mini"),
    agent=Agent(
        model=OpenAIChat(id="gpt-5.6-luna"),
        tools=[CalculatorTools()],
    ),
    input="What is 10*5 then to the power of 2? do it step by step",
    expected_output="2500",
    additional_guidelines="Agent output should include the steps and the final answer.",
    num_iterations=1,
)

# ---------------------------------------------------------------------------
# Create Async Evaluation
# ---------------------------------------------------------------------------
async_evaluation = AccuracyEval(
    model=OpenAIChat(id="o4-mini"),
    agent=Agent(
        model=OpenAIChat(id="gpt-5.6-luna"),
        tools=[CalculatorTools()],
    ),
    input="What is 10*5 then to the power of 2? do it step by step",
    expected_output="2500",
    additional_guidelines="Agent output should include the steps and the final answer.",
    num_iterations=3,
)

# ---------------------------------------------------------------------------
# Run Evaluation
# ---------------------------------------------------------------------------
if __name__ == "__main__":
    result: Optional[AccuracyResult] = evaluation.run(print_results=True)
    assert result is not None and result.avg_score >= 8

    async_result: Optional[AccuracyResult] = asyncio.run(
        async_evaluation.arun(print_results=True)
    )
    assert async_result is not None and async_result.avg_score >= 8
```

## Run the Example [#run-the-example]

<Steps>
    <Step title="Set up your virtual environment">
      <CodeBlockTabs defaultValue="Mac">
        <CodeBlockTabsList>
          <CodeBlockTabsTrigger value="Mac">
            Mac
          </CodeBlockTabsTrigger>

          <CodeBlockTabsTrigger value="Windows">
            Windows
          </CodeBlockTabsTrigger>
        </CodeBlockTabsList>

        <CodeBlockTab value="Mac">
          ```bash
          uv venv --python 3.12
          source .venv/bin/activate
          ```
        </CodeBlockTab>

        <CodeBlockTab value="Windows">
          ```bash
          uv venv --python 3.12
          .venv\Scripts\activate
          ```
        </CodeBlockTab>
      </CodeBlockTabs>
    </Step>

  <Step title="Install dependencies">
    ```bash
    uv pip install -U agno openai
    ```
  </Step>

  <Step title="Export your OpenAI API key">
    <CodeBlockTabs defaultValue="Mac/Linux">
      <CodeBlockTabsList>
        <CodeBlockTabsTrigger value="Mac/Linux">
          Mac/Linux
        </CodeBlockTabsTrigger>

        <CodeBlockTabsTrigger value="Windows">
          Windows
        </CodeBlockTabsTrigger>
      </CodeBlockTabsList>

      <CodeBlockTab value="Mac/Linux">
        ```bash
        export OPENAI_API_KEY="your_openai_api_key_here"
        ```
      </CodeBlockTab>

      <CodeBlockTab value="Windows">
        ```bash
        $Env:OPENAI_API_KEY="your_openai_api_key_here"
        ```
      </CodeBlockTab>
    </CodeBlockTabs>
  </Step>

  <Step title="Check every requested iteration">
    Replace the complete `if __name__ == "__main__":` block with:

    ```python title="accuracy completeness checks"
    if __name__ == "__main__":
        result = evaluation.run(print_results=True)
        assert result is not None, "No sync evaluation result"
        assert len(result.results) == evaluation.num_iterations, "Incomplete sync evaluation"
        assert all(item.score is not None for item in result.results)
        assert result.avg_score is not None and result.avg_score >= 8

        async_result = asyncio.run(async_evaluation.arun(print_results=True))
        assert async_result is not None, "No async evaluation result"
        assert len(async_result.results) == async_evaluation.num_iterations, "Incomplete async evaluation"
        assert all(item.score is not None for item in async_result.results)
        assert async_result.avg_score is not None and async_result.avg_score >= 8
    ```

    These assertions are development checks; run Python without `-O` so they remain enabled.
  </Step>

  <Step title="Run the example">
    Save the code above as `accuracy_basic.py`, then run:

    ```bash
    python accuracy_basic.py
    ```
  </Step>
</Steps>

Full source: [cookbook/09\_evals/accuracy/accuracy\_basic.py](https://github.com/agno-agi/agno/blob/8f36eaf2d18e91afa7b327eec66a3cd3685dcb87/cookbook/09_evals/accuracy/accuracy_basic.py)
