OffGridSchedula / tests /test_tools.py
ParetoOptimal's picture
Initial Commit
0366d65
Raw
History Blame Contribute Delete
1.89 kB
"""Hermes tool-calling memory round-trip (no live server needed)."""
import pytest
from server import memory, tools
@pytest.fixture(autouse=True)
def _clean():
memory.reset()
yield
memory.reset()
def test_dispatch_remembers():
out = tools.dispatch("remember", '{"text":"Dana is the soccer coach","kind":"contact"}')
assert "remembered" in out
assert any("Dana" in f["text"] for f in memory.list_facts())
def test_dispatch_unknown_tool():
assert "unknown tool" in tools.dispatch("nope", "{}")
def test_dispatch_handles_dict_args():
tools.dispatch("remember", {"text": "default location is Lincoln Elementary", "kind": "location"})
assert any("Lincoln" in f["text"] for f in memory.list_facts())
def test_run_with_tools_round_trip():
# Fake server: first turn calls `remember`, second returns the final JSON.
calls = {"n": 0}
def fake_post(msgs):
calls["n"] += 1
if calls["n"] == 1:
return {"choices": [{"message": {"role": "assistant", "tool_calls": [
{"id": "t1", "function": {
"name": "remember",
"arguments": '{"text":"you decline Mondays","kind":"preference"}'}}]}}]}
return {"choices": [{"message": {"role": "assistant", "content": '{"events":[]}'}}]}
content, _ = tools.run_with_tools([{"role": "user", "content": "hi"}], fake_post)
assert content == '{"events":[]}'
assert calls["n"] == 2 # one tool round, then the final answer
assert any("Mondays" in f["text"] for f in memory.list_facts())
def test_run_with_tools_no_tool_calls_returns_immediately():
def fake_post(msgs):
return {"choices": [{"message": {"content": "{}"}}]}
content, _ = tools.run_with_tools([{"role": "user", "content": "hi"}], fake_post)
assert content == "{}"