def tool_behavior_journey() -> Scenario:
"""Exercise execution, avoidance, schema rejection and failure containment."""
return Scenario(
"scaffold-tool-behavior",
(
EvalStep(
CORRECT_TOOL_PROMPT,
(
ResponseEquals("Ada greeted"),
ToolCalled("greet_user", arguments={"name": "Ada"}),
ToolSucceeded("greet_user", arguments={"name": "Ada"}),
ToolFailed("greet_user", times=0),
StageObserved("tools.routing"),
),
),
EvalStep(
IRRELEVANT_TOOL_PROMPT,
(
ResponseEquals("Chapter 5 explained directly"),
ToolCalled("greet_user", times=0),
ToolSucceeded("greet_user", times=0),
StageObserved("tools.routing"),
),
),
EvalStep(
MALFORMED_TOOL_PROMPT,
(
ResponseEquals("Malformed greeting rejected"),
ToolCalled("greet_user"),
ToolSucceeded("greet_user", times=0),
ToolFailed("greet_user"),
StageObserved("tools.routing"),
),
),
EvalStep(
FAILING_TOOL_PROMPT,
(
ResponseEquals("Tool failure contained"),
ToolCalled("failing_tool"),
ToolSucceeded("failing_tool", times=0),
ToolFailed("failing_tool"),
StageObserved("tools.routing"),
),
),
),
tags=frozenset({"tools", "scaffold", "integration"}),
)