============================= test session starts ==============================
collecting ... collected 16 items

test_graph.py::test_a_slow_tool_becomes_a_tool_message_and_the_run_goes_on PASSED [  6%]
test_graph.py::test_a_fast_tool_returns_its_result PASSED                [ 12%]
test_graph.py::test_the_token_budget_stops_the_run_before_more_tools_run PASSED [ 18%]
test_graph.py::test_the_budget_is_checked_between_calls_so_one_call_can_overshoot_it PASSED [ 25%]
test_graph.py::test_a_slow_model_call_ends_the_run_at_its_timeout PASSED [ 31%]
test_graph.py::test_other_tool_errors_are_not_hidden_from_the_caller PASSED [ 37%]
test_graph.py::test_missing_or_invalid_usage_stops_before_tools_and_keeps_known_subtotal[None] PASSED [ 43%]
test_graph.py::test_missing_or_invalid_usage_stops_before_tools_and_keeps_known_subtotal[usage1] PASSED [ 50%]
test_graph.py::test_missing_or_invalid_usage_stops_before_tools_and_keeps_known_subtotal[usage2] PASSED [ 56%]
test_graph.py::test_missing_or_invalid_usage_stops_before_tools_and_keeps_known_subtotal[usage3] PASSED [ 62%]
test_graph.py::test_missing_or_invalid_usage_stops_before_tools_and_keeps_known_subtotal[usage4] PASSED [ 68%]
test_graph.py::test_missing_or_invalid_usage_stops_before_tools_and_keeps_known_subtotal[usage5] PASSED [ 75%]
test_graph.py::test_missing_or_invalid_usage_stops_before_tools_and_keeps_known_subtotal[usage6] PASSED [ 81%]
test_graph.py::test_missing_usage_on_an_answer_is_not_reported_as_a_measured_zero PASSED [ 87%]
test_graph.py::test_reported_zero_tokens_is_distinct_from_missing_usage PASSED [ 93%]
test_graph.py::test_a_timeout_after_reported_usage_marks_the_run_total_unknown PASSED [100%]

============================== 16 passed in 2.63s ==============================
