67 lines
2.5 KiB
Python
67 lines
2.5 KiB
Python
from datetime import datetime, timezone
|
|
from typing import cast
|
|
from unittest.mock import MagicMock
|
|
|
|
import pytest
|
|
|
|
from src.models import Message
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_generic_honcho_llm_call_mock():
|
|
"""Test that the generic honcho_llm_call mock is working for existing decorated functions"""
|
|
# Import a function that we know is decorated with honcho_llm_call
|
|
from src.deriver.deriver import critical_analysis_call
|
|
|
|
# Call the decorated function - this should use our mock
|
|
result = await critical_analysis_call(
|
|
peer_id="test_peer_id",
|
|
peer_card=["test_peer_card"],
|
|
message_created_at=datetime(2023, 1, 1, 0, 0, 0, tzinfo=timezone.utc),
|
|
working_representation="test working representation",
|
|
history="test history",
|
|
new_turn="test new turn",
|
|
)
|
|
|
|
# Verify that we get a mock result, not an actual LLM call
|
|
assert result is not None
|
|
# The result should have the attributes we expect from our mock
|
|
assert hasattr(result, "explicit")
|
|
assert hasattr(result, "deductive")
|
|
assert hasattr(result, "_response")
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_summarizer_decorated_functions_with_mock():
|
|
"""Test that summarizer decorated functions work with our mock"""
|
|
# Import functions that we know are decorated with honcho_llm_call
|
|
from src.utils.summarizer import create_long_summary, create_short_summary
|
|
|
|
# Create mock messages for testing
|
|
mock_message = MagicMock(spec=Message)
|
|
mock_message.content = "Test message content"
|
|
mock_message.peer_name = "test_peer"
|
|
mock_messages = cast(list[Message], [mock_message])
|
|
|
|
# Call the decorated functions - these should use our mock
|
|
short_result = await create_short_summary(
|
|
messages=mock_messages, input_tokens=100, previous_summary="Previous summary"
|
|
)
|
|
|
|
long_result = await create_long_summary(
|
|
messages=mock_messages, previous_summary="Previous summary"
|
|
)
|
|
|
|
# Verify that we get mock results, not actual LLM calls
|
|
assert short_result is not None
|
|
assert long_result is not None
|
|
# For functions with return_call_response=True, we should get a string or object with content
|
|
# The existing mock returns a string, so we check if it's a string
|
|
assert isinstance(short_result, str | object)
|
|
assert isinstance(long_result, str | object)
|
|
# If it's not a string, check for content attribute
|
|
if not isinstance(short_result, str):
|
|
assert hasattr(short_result, "content")
|
|
if not isinstance(long_result, str):
|
|
assert hasattr(long_result, "content")
|