Files
hermes-webui/tests/test_issue5686_completed_output_text.py
T

106 lines
4.4 KiB
Python

from api import streaming
PRIOR_DISPLAY = [
{"role": "user", "content": "Earlier request"},
{"role": "assistant", "content": "Earlier reply"},
]
class TestIssue5686CompletedOutputText:
def test_assistant_reply_added_after_current_turn_counts_visible_output_text_after_tool_metadata(self):
previous_context = list(PRIOR_DISPLAY) + [
{"role": "user", "content": "What is the weather?"},
]
result_messages = list(previous_context) + [
{
"role": "assistant",
"content": [
{"type": "tool_use", "name": "weather.lookup", "input": {"city": "Leeds"}},
{"type": "output_text", "output_text": "It is 18C and sunny."},
],
"tool_calls": [{"id": "call_1", "type": "function", "function": {"name": "weather.lookup", "arguments": "{}"}}],
}
]
assert streaming._assistant_reply_added_after_current_turn(
result_messages,
previous_context,
"What is the weather?",
) is True
def test_session_lacks_final_answer_false_when_visible_output_text_follows_tool_use(self):
messages = list(PRIOR_DISPLAY) + [
{"role": "user", "content": "What is the weather?"},
{
"role": "assistant",
"content": [
{"type": "tool_use", "name": "weather.lookup", "input": {"city": "Leeds"}},
{"type": "output_text", "output_text": "It is 18C and sunny."},
],
"tool_calls": [{"id": "call_1", "type": "function", "function": {"name": "weather.lookup", "arguments": "{}"}}],
},
]
assert streaming._session_lacks_final_assistant_answer(messages) is False
def test_session_lacks_final_answer_true_for_tool_only_assistant_content(self):
messages = list(PRIOR_DISPLAY) + [
{"role": "user", "content": "What is the weather?"},
{
"role": "assistant",
"content": [
{"type": "tool_use", "name": "weather.lookup", "input": {"city": "Leeds"}},
],
"tool_calls": [{"id": "call_1", "type": "function", "function": {"name": "weather.lookup", "arguments": "{}"}}],
},
]
assert streaming._session_lacks_final_assistant_answer(messages) is True
def test_session_lacks_final_answer_false_for_untyped_visible_text_with_call_metadata(self):
messages = list(PRIOR_DISPLAY) + [
{"role": "user", "content": "What is the weather?"},
{
"role": "assistant",
"content": [
{"call_id": "call_1", "name": "weather.lookup", "text": "It is 18C and sunny."},
],
},
]
assert streaming._session_lacks_final_assistant_answer(messages) is False
def test_session_lacks_final_answer_true_for_untyped_tool_part_with_empty_args(self):
messages = list(PRIOR_DISPLAY) + [
{"role": "user", "content": "What is the weather?"},
{
"role": "assistant",
"content": [
{"call_id": "call_1", "args": {}},
],
},
]
assert streaming._session_lacks_final_assistant_answer(messages) is True
def test_session_lacks_final_answer_true_for_top_level_tool_calls_without_in_content_boundary(self):
messages = list(PRIOR_DISPLAY) + [
{"role": "user", "content": "What is the weather?"},
{
"role": "assistant",
"content": [
{"type": "text", "text": "Checking the tool result"},
],
"tool_calls": [{"id": "call_1", "type": "function", "function": {"name": "weather.lookup", "arguments": "{}"}}],
},
]
assert streaming._session_lacks_final_assistant_answer(messages) is True
def test_session_lacks_final_answer_false_for_plain_output_text_parts(self):
messages = list(PRIOR_DISPLAY) + [
{"role": "user", "content": "Summarize"},
{
"role": "assistant",
"content": [
{"type": "output_text", "output_text": "Summary complete."},
],
},
]
assert streaming._session_lacks_final_assistant_answer(messages) is False