Files
2026-07-13 12:45:58 +08:00

127 lines
4.0 KiB
Python

from unittest.mock import Mock
from aisuite import Agent, Client, Runner
from tests.agents.helpers import chat_response
def test_run_sync_builds_user_message_and_returns_result():
client = Client()
client.chat.completions.create = Mock(return_value=chat_response("hello"))
agent = Agent(name="assistant", model="openai:gpt-4o")
result = Runner.run_sync(agent, "Say hi", client=client)
client.chat.completions.create.assert_called_once_with(
model="openai:gpt-4o",
messages=[{"role": "user", "content": "Say hi"}],
)
assert result.final_output == "hello"
assert result.status == "completed"
assert result.agent is agent
assert result.last_agent is agent
assert result.messages == [
{"role": "user", "content": "Say hi"},
{"role": "assistant", "content": "hello"},
]
assert result.new_items == [{"role": "assistant", "content": "hello"}]
assert result.raw_responses
def test_run_sync_prepends_instructions():
client = Client()
client.chat.completions.create = Mock(return_value=chat_response("ok"))
agent = Agent(
name="assistant",
model="openai:gpt-4o",
instructions="Answer briefly.",
)
Runner.run_sync(agent, "Hi", client=client)
assert client.chat.completions.create.call_args.kwargs["messages"] == [
{"role": "system", "content": "Answer briefly."},
{"role": "user", "content": "Hi"},
]
def test_run_sync_preserves_existing_system_message():
client = Client()
client.chat.completions.create = Mock(return_value=chat_response("ok"))
agent = Agent(
name="assistant",
model="openai:gpt-4o",
instructions="Do not duplicate.",
)
messages = [
{"role": "system", "content": "Existing."},
{"role": "user", "content": "Hi"},
]
Runner.run_sync(agent, messages, client=client)
assert client.chat.completions.create.call_args.kwargs["messages"] == messages
def test_run_sync_passes_model_settings_and_runtime_overrides():
client = Client()
client.chat.completions.create = Mock(return_value=chat_response("ok"))
agent = Agent(
name="assistant",
model="openai:gpt-4o",
model_settings={"temperature": 0.2, "max_tokens": 100},
)
Runner.run_sync(agent, "Hi", client=client, temperature=0.7)
assert client.chat.completions.create.call_args.kwargs["temperature"] == 0.7
assert client.chat.completions.create.call_args.kwargs["max_tokens"] == 100
def test_run_sync_enables_tool_loop_when_agent_has_tools():
client = Client()
client.chat.completions.create = Mock(return_value=chat_response("ok"))
def lookup(city: str) -> str:
"""Lookup a city."""
return city
agent = Agent(name="assistant", model="openai:gpt-4o", tools=[lookup])
Runner.run_sync(agent, "Hi", client=client, max_turns=3)
assert client.chat.completions.create.call_args.kwargs["tools"] == [lookup]
assert client.chat.completions.create.call_args.kwargs["max_turns"] == 3
def test_run_sync_merges_tags_metadata_and_observability_fields():
client = Client()
client.chat.completions.create = Mock(return_value=chat_response("ok"))
agent = Agent(
name="assistant",
model="openai:gpt-4o",
tags=["agent", "shared"],
metadata={"team": "growth", "env": "dev"},
)
result = Runner.run_sync(
agent,
"Hi",
client=client,
run_name="support_reply",
group_id="conversation_1",
tags=["run", "shared"],
metadata={"request_id": "req_1", "env": "prod"},
)
assert result.run_name == "support_reply"
assert result.group_id == "conversation_1"
assert result.tags == ["agent", "shared", "run"]
assert result.metadata == {
"team": "growth",
"env": "prod",
"request_id": "req_1",
}
assert result.trace_id.startswith("trace_")
assert [step.type for step in result.steps] == ["agent", "model_response"]
assert result.steps[0].name == "assistant"