Spaces:
Running
Running
import pytest | |
from swarms.structs.conversation import Conversation | |
def conversation(): | |
conv = Conversation() | |
conv.add("user", "Hello, world!") | |
conv.add("assistant", "Hello, user!") | |
return conv | |
def test_add_message(): | |
conv = Conversation() | |
conv.add("user", "Hello, world!") | |
assert len(conv.conversation_history) == 1 | |
assert conv.conversation_history[0]["role"] == "user" | |
assert conv.conversation_history[0]["content"] == "Hello, world!" | |
def test_add_message_with_time(): | |
conv = Conversation(time_enabled=True) | |
conv.add("user", "Hello, world!") | |
assert len(conv.conversation_history) == 1 | |
assert conv.conversation_history[0]["role"] == "user" | |
assert conv.conversation_history[0]["content"] == "Hello, world!" | |
assert "timestamp" in conv.conversation_history[0] | |
def test_delete_message(): | |
conv = Conversation() | |
conv.add("user", "Hello, world!") | |
conv.delete(0) | |
assert len(conv.conversation_history) == 0 | |
def test_delete_message_out_of_bounds(): | |
conv = Conversation() | |
conv.add("user", "Hello, world!") | |
with pytest.raises(IndexError): | |
conv.delete(1) | |
def test_update_message(): | |
conv = Conversation() | |
conv.add("user", "Hello, world!") | |
conv.update(0, "assistant", "Hello, user!") | |
assert len(conv.conversation_history) == 1 | |
assert conv.conversation_history[0]["role"] == "assistant" | |
assert conv.conversation_history[0]["content"] == "Hello, user!" | |
def test_update_message_out_of_bounds(): | |
conv = Conversation() | |
conv.add("user", "Hello, world!") | |
with pytest.raises(IndexError): | |
conv.update(1, "assistant", "Hello, user!") | |
def test_return_history_as_string_with_messages(conversation): | |
result = conversation.return_history_as_string() | |
assert result is not None | |
def test_return_history_as_string_with_no_messages(): | |
conv = Conversation() | |
result = conv.return_history_as_string() | |
assert result == "" | |
def test_return_history_as_string_with_different_roles(role, content): | |
conv = Conversation() | |
conv.add(role, content) | |
result = conv.return_history_as_string() | |
expected = f"{role}: {content}\n\n" | |
assert result == expected | |
def test_return_history_as_string_with_multiple_messages( | |
message_count, | |
): | |
conv = Conversation() | |
for i in range(message_count): | |
conv.add("user", f"Message {i + 1}") | |
result = conv.return_history_as_string() | |
expected = "".join( | |
[f"user: Message {i + 1}\n\n" for i in range(message_count)] | |
) | |
assert result == expected | |
def test_return_history_as_string_with_different_contents(content): | |
conv = Conversation() | |
conv.add("user", content) | |
result = conv.return_history_as_string() | |
expected = f"user: {content}\n\n" | |
assert result == expected | |
def test_return_history_as_string_with_large_message(conversation): | |
large_message = "Hello, world! " * 10000 # 10,000 repetitions | |
conversation.add("user", large_message) | |
result = conversation.return_history_as_string() | |
expected = ( | |
"user: Hello, world!\n\nassistant: Hello, user!\n\nuser:" | |
f" {large_message}\n\n" | |
) | |
assert result == expected | |
def test_search_keyword_in_conversation(conversation): | |
result = conversation.search_keyword_in_conversation("Hello") | |
assert len(result) == 2 | |
assert result[0]["content"] == "Hello, world!" | |
assert result[1]["content"] == "Hello, user!" | |
def test_export_import_conversation(conversation, tmp_path): | |
filename = tmp_path / "conversation.txt" | |
conversation.export_conversation(filename) | |
new_conversation = Conversation() | |
new_conversation.import_conversation(filename) | |
assert ( | |
new_conversation.return_history_as_string() | |
== conversation.return_history_as_string() | |
) | |
def test_count_messages_by_role(conversation): | |
counts = conversation.count_messages_by_role() | |
assert counts["user"] == 1 | |
assert counts["assistant"] == 1 | |
def test_display_conversation(capsys, conversation): | |
conversation.display_conversation() | |
captured = capsys.readouterr() | |
assert "user: Hello, world!\n\n" in captured.out | |
assert "assistant: Hello, user!\n\n" in captured.out | |
def test_display_conversation_detailed(capsys, conversation): | |
conversation.display_conversation(detailed=True) | |
captured = capsys.readouterr() | |
assert "user: Hello, world!\n\n" in captured.out | |
assert "assistant: Hello, user!\n\n" in captured.out | |
def test_search(): | |
conv = Conversation() | |
conv.add("user", "Hello, world!") | |
conv.add("assistant", "Hello, user!") | |
results = conv.search("Hello") | |
assert len(results) == 2 | |
assert results[0]["content"] == "Hello, world!" | |
assert results[1]["content"] == "Hello, user!" | |
def test_return_history_as_string(): | |
conv = Conversation() | |
conv.add("user", "Hello, world!") | |
conv.add("assistant", "Hello, user!") | |
result = conv.return_history_as_string() | |
expected = "user: Hello, world!\n\nassistant: Hello, user!\n\n" | |
assert result == expected | |
def test_search_no_results(): | |
conv = Conversation() | |
conv.add("user", "Hello, world!") | |
conv.add("assistant", "Hello, user!") | |
results = conv.search("Goodbye") | |
assert len(results) == 0 | |
def test_search_case_insensitive(): | |
conv = Conversation() | |
conv.add("user", "Hello, world!") | |
conv.add("assistant", "Hello, user!") | |
results = conv.search("hello") | |
assert len(results) == 2 | |
assert results[0]["content"] == "Hello, world!" | |
assert results[1]["content"] == "Hello, user!" | |
def test_search_multiple_occurrences(): | |
conv = Conversation() | |
conv.add("user", "Hello, world! Hello, world!") | |
conv.add("assistant", "Hello, user!") | |
results = conv.search("Hello") | |
assert len(results) == 2 | |
assert results[0]["content"] == "Hello, world! Hello, world!" | |
assert results[1]["content"] == "Hello, user!" | |
def test_query_no_results(): | |
conv = Conversation() | |
conv.add("user", "Hello, world!") | |
conv.add("assistant", "Hello, user!") | |
results = conv.query("Goodbye") | |
assert len(results) == 0 | |
def test_query_case_insensitive(): | |
conv = Conversation() | |
conv.add("user", "Hello, world!") | |
conv.add("assistant", "Hello, user!") | |
results = conv.query("hello") | |
assert len(results) == 2 | |
assert results[0]["content"] == "Hello, world!" | |
assert results[1]["content"] == "Hello, user!" | |
def test_query_multiple_occurrences(): | |
conv = Conversation() | |
conv.add("user", "Hello, world! Hello, world!") | |
conv.add("assistant", "Hello, user!") | |
results = conv.query("Hello") | |
assert len(results) == 2 | |
assert results[0]["content"] == "Hello, world! Hello, world!" | |
assert results[1]["content"] == "Hello, user!" | |