Spaces:
Build error
Build error
"""Tests for the conversation summary generator.""" | |
from unittest.mock import MagicMock, patch | |
import pytest | |
from openhands.core.config import LLMConfig | |
from openhands.utils.conversation_summary import generate_conversation_title | |
async def test_generate_conversation_title_empty_message(): | |
"""Test that an empty message returns None.""" | |
result = await generate_conversation_title('', MagicMock()) | |
assert result is None | |
result = await generate_conversation_title(' ', MagicMock()) | |
assert result is None | |
async def test_generate_conversation_title_success(): | |
"""Test successful title generation.""" | |
# Create a proper mock response | |
mock_response = MagicMock() | |
mock_response.choices = [MagicMock()] | |
mock_response.choices[0].message.content = 'Generated Title' | |
# Create a mock LLM instance with a synchronous completion method | |
mock_llm = MagicMock() | |
mock_llm.completion = MagicMock(return_value=mock_response) | |
# Patch the LLM class to return our mock | |
with patch('openhands.utils.conversation_summary.LLM', return_value=mock_llm): | |
result = await generate_conversation_title( | |
'Can you help me with Python?', LLMConfig(model='test-model') | |
) | |
assert result == 'Generated Title' | |
# Verify the mock was called with the expected arguments | |
mock_llm.completion.assert_called_once() | |
async def test_generate_conversation_title_long_title(): | |
"""Test that long titles are truncated.""" | |
# Create a proper mock response with a long title | |
mock_response = MagicMock() | |
mock_response.choices = [MagicMock()] | |
mock_response.choices[ | |
0 | |
].message.content = 'This is a very long title that should be truncated because it exceeds the maximum length' | |
# Create a mock LLM instance with a synchronous completion method | |
mock_llm = MagicMock() | |
mock_llm.completion = MagicMock(return_value=mock_response) | |
# Patch the LLM class to return our mock | |
with patch('openhands.utils.conversation_summary.LLM', return_value=mock_llm): | |
result = await generate_conversation_title( | |
'Can you help me with Python?', LLMConfig(model='test-model'), max_length=30 | |
) | |
# Verify the title is truncated correctly | |
assert len(result) <= 30 | |
assert result.endswith('...') | |
async def test_generate_conversation_title_exception(): | |
"""Test that exceptions are handled gracefully.""" | |
# Create a mock LLM instance with a synchronous completion method that raises an exception | |
mock_llm = MagicMock() | |
mock_llm.completion = MagicMock(side_effect=Exception('Test error')) | |
# Patch the LLM class to return our mock | |
with patch('openhands.utils.conversation_summary.LLM', return_value=mock_llm): | |
result = await generate_conversation_title( | |
'Can you help me with Python?', LLMConfig(model='test-model') | |
) | |
# Verify that None is returned when an exception occurs | |
assert result is None | |