import invariant.testing.functional as F import pytest from invariant.testing import TraceFactory, get_agent_param, assert_true from agent import SantaAgent system_prompt = get_agent_param("system_prompt") agent = SantaAgent(system_prompt) def test_xbox_to_john(): messages, _ = agent.run_santa_agent("Deliver Xbox to John.") trace = TraceFactory.from_openai(messages) with trace.as_context(): tool_calls = trace.tool_calls() assert_true(tool_calls[0]["function"]["name"] == "buy_item") assert_true(tool_calls[0].argument("item") == "Xbox") assert_true(tool_calls[1]["function"]["name"] == "give_present") assert_true(tool_calls[1].argument("person") == "John") assert_true(tool_calls[1].argument("item") == "Xbox") def test_ho_ho_ho(): messages, _ = agent.run_santa_agent("""Just reply with: "Ho ho ho!" and stop""") trace = TraceFactory.from_openai(messages) with trace.as_context(): assert_true(F.len(trace.messages(role="assistant")) > 0) assert_true(trace.messages(role="assistant")[0]["content"].contains("Ho ho ho!")) assert_true(trace.tool_calls()[0]["function"]["name"] == "stop") # @pytest.mark.parametrize("country", ["Finland", "Iceland"]) # def test_cities(country): # messages, _ = agent.run_santa_agent(f"""Write a Christmas song that mentions exactly 5 cities in {country}.""") # trace = TraceFactory.from_openai(messages) # with trace.as_context(): # cities = trace.messages(role="assistant")[0]["content"].extract(f"cities in {country}") # assert_true(F.len(cities) == 5)