Spaces:
Sleeping
Sleeping
| from proteus.game.agents import HumanAgent | |
| from proteus.game.agents.base import ActResult, ProbeResult | |
| _ACTIONS = ["up", "down", "left", "right", "stay"] | |
| def _scripted(seq): | |
| """Return an input_fn that yields the given strings in order.""" | |
| it = iter(seq) | |
| return lambda prompt="": next(it) | |
| def test_act_parses_plain_action(): | |
| out = [] | |
| agent = HumanAgent(input_fn=_scripted(["up"]), output_fn=out.append) | |
| result = agent.act("OBSERVATION", _ACTIONS, "SYSTEM") | |
| assert isinstance(result, ActResult) | |
| assert result.action == "up" | |
| assert result.reasoning == "" | |
| assert result.raw_text == "up" | |
| assert result.input_tokens == 0 | |
| assert result.output_tokens == 0 | |
| assert result.thinking_tokens == 0 | |
| # The observation was shown to the human. | |
| assert any("OBSERVATION" in line for line in out) | |
| def test_act_maps_wasd_shortcuts(): | |
| agent = HumanAgent(input_fn=_scripted(["w"]), output_fn=lambda s: None) | |
| assert agent.act("o", _ACTIONS, "s").action == "up" | |
| agent = HumanAgent(input_fn=_scripted(["a"]), output_fn=lambda s: None) | |
| assert agent.act("o", _ACTIONS, "s").action == "left" | |
| agent = HumanAgent(input_fn=_scripted(["s"]), output_fn=lambda s: None) | |
| assert agent.act("o", _ACTIONS, "s").action == "down" | |
| agent = HumanAgent(input_fn=_scripted(["d"]), output_fn=lambda s: None) | |
| assert agent.act("o", _ACTIONS, "s").action == "right" | |
| def test_act_is_case_and_whitespace_insensitive(): | |
| agent = HumanAgent(input_fn=_scripted([" UP "]), output_fn=lambda s: None) | |
| result = agent.act("o", _ACTIONS, "s") | |
| assert result.action == "up" | |
| assert result.raw_text == "UP" # stripped, original casing preserved | |
| def test_act_reprompts_on_invalid_then_accepts(): | |
| out = [] | |
| agent = HumanAgent(input_fn=_scripted(["nope", "diagonal", "right"]), output_fn=out.append) | |
| result = agent.act("o", _ACTIONS, "s") | |
| assert result.action == "right" | |
| # Two invalid inputs produced two guidance messages. | |
| assert sum("invalid" in line for line in out) == 2 | |
| def test_name_is_human(): | |
| assert HumanAgent().name == "human" | |
| def test_reset_is_noop(): | |
| assert HumanAgent().reset() is None | |
| def test_probe_returns_typed_answer(): | |
| out = [] | |
| agent = HumanAgent( | |
| input_fn=_scripted(["the predator is east; go up"]), | |
| output_fn=out.append, | |
| ) | |
| result = agent.probe("OBSERVATION", "Where is the predator?", "SYSTEM") | |
| assert isinstance(result, ProbeResult) | |
| assert result.answer == "the predator is east; go up" | |
| assert result.reasoning == "" | |
| assert result.raw_text == "the predator is east; go up" | |
| assert result.input_tokens == 0 | |
| assert result.output_tokens == 0 | |
| assert result.thinking_tokens == 0 | |
| # Both the observation and the question were shown. | |
| assert any("OBSERVATION" in line for line in out) | |
| assert any("Where is the predator?" in line for line in out) | |