DesertWolf's picture
Upload folder using huggingface_hub
447ebeb verified
import json
import os
import sys
from unittest.mock import AsyncMock, patch
import pytest
from fastapi import HTTPException
from fastapi.testclient import TestClient
sys.path.insert(
0, os.path.abspath("../../..")
) # Adds the parent directory to the system path
from enterprise.litellm_enterprise.enterprise_callbacks.session_handler import (
_ENTERPRISE_ResponsesSessionHandler,
)
@pytest.mark.asyncio
async def test_get_chat_completion_message_history_for_previous_response_id():
"""
Test get_chat_completion_message_history_for_previous_response_id with mock data
"""
# Mock data based on the provided spend logs (simplified version)
mock_spend_logs = [
{
"request_id": "chatcmpl-935b8dad-fdc2-466e-a8ca-e26e5a8a21bb",
"call_type": "aresponses",
"api_key": "88dc28d0f030c55ed4ab77ed8faf098196cb1c05df778539800c9f1243fe6b4b",
"spend": 0.004803,
"total_tokens": 329,
"prompt_tokens": 11,
"completion_tokens": 318,
"startTime": "2025-05-30T03:17:06.703+00:00",
"endTime": "2025-05-30T03:17:11.894+00:00",
"model": "claude-3-5-sonnet-latest",
"session_id": "a96757c4-c6dc-4c76-b37e-e7dfa526b701",
"proxy_server_request": {
"input": "who is Michael Jordan",
"model": "anthropic/claude-3-5-sonnet-latest",
},
"response": {
"id": "chatcmpl-935b8dad-fdc2-466e-a8ca-e26e5a8a21bb",
"model": "claude-3-5-sonnet-20241022",
"object": "chat.completion",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Michael Jordan (born February 17, 1963) is widely considered the greatest basketball player of all time. Here are some key points about him...",
"tool_calls": None,
"function_call": None,
},
"finish_reason": "stop",
}
],
"created": 1748575031,
"usage": {
"total_tokens": 329,
"prompt_tokens": 11,
"completion_tokens": 318,
},
},
"status": "success",
},
{
"request_id": "chatcmpl-370760c9-39fa-4db7-b034-d1f8d933c935",
"call_type": "aresponses",
"api_key": "88dc28d0f030c55ed4ab77ed8faf098196cb1c05df778539800c9f1243fe6b4b",
"spend": 0.010437,
"total_tokens": 967,
"prompt_tokens": 339,
"completion_tokens": 628,
"startTime": "2025-05-30T03:17:28.600+00:00",
"endTime": "2025-05-30T03:17:39.921+00:00",
"model": "claude-3-5-sonnet-latest",
"session_id": "a96757c4-c6dc-4c76-b37e-e7dfa526b701",
"proxy_server_request": {
"input": "can you tell me more about him",
"model": "anthropic/claude-3-5-sonnet-latest",
"previous_response_id": "resp_bGl0ZWxsbTpjdXN0b21fbGxtX3Byb3ZpZGVyOmFudGhyb3BpYzttb2RlbF9pZDplMGYzMDJhMTQxMmU3ODQ3MGViYjI4Y2JlZDAxZmZmNWY4OGMwZDMzMWM2NjdlOWYyYmE0YjQxM2M2ZmJkMjgyO3Jlc3BvbnNlX2lkOmNoYXRjbXBsLTkzNWI4ZGFkLWZkYzItNDY2ZS1hOGNhLWUyNmU1YThhMjFiYg==",
},
"response": {
"id": "chatcmpl-370760c9-39fa-4db7-b034-d1f8d933c935",
"model": "claude-3-5-sonnet-20241022",
"object": "chat.completion",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Here's more detailed information about Michael Jordan...",
"tool_calls": None,
"function_call": None,
},
"finish_reason": "stop",
}
],
"created": 1748575059,
"usage": {
"total_tokens": 967,
"prompt_tokens": 339,
"completion_tokens": 628,
},
},
"status": "success",
},
]
# Mock the get_all_spend_logs_for_previous_response_id method
with patch.object(
_ENTERPRISE_ResponsesSessionHandler,
"get_all_spend_logs_for_previous_response_id",
new_callable=AsyncMock,
) as mock_get_spend_logs:
mock_get_spend_logs.return_value = mock_spend_logs
# Test the function
previous_response_id = "chatcmpl-935b8dad-fdc2-466e-a8ca-e26e5a8a21bb"
result = await _ENTERPRISE_ResponsesSessionHandler.get_chat_completion_message_history_for_previous_response_id(
previous_response_id
)
# Verify the mock was called with correct parameters
mock_get_spend_logs.assert_called_once_with(previous_response_id)
# Verify the returned ChatCompletionSession structure
assert "messages" in result
assert "litellm_session_id" in result
# Verify session_id is extracted correctly
assert result["litellm_session_id"] == "a96757c4-c6dc-4c76-b37e-e7dfa526b701"
# Verify messages structure
messages = result["messages"]
assert len(messages) == 4 # 2 user messages + 2 assistant messages
# Check the message sequence
# First user message
assert messages[0].get("role") == "user"
assert messages[0].get("content") == "who is Michael Jordan"
# First assistant response
assert messages[1].get("role") == "assistant"
content_1 = messages[1].get("content", "")
if isinstance(content_1, str):
assert "Michael Jordan" in content_1
assert content_1.startswith("Michael Jordan (born February 17, 1963)")
# Second user message
assert messages[2].get("role") == "user"
assert messages[2].get("content") == "can you tell me more about him"
# Second assistant response
assert messages[3].get("role") == "assistant"
content_3 = messages[3].get("content", "")
if isinstance(content_3, str):
assert "Here's more detailed information about Michael Jordan" in content_3
@pytest.mark.asyncio
async def test_get_chat_completion_message_history_empty_spend_logs():
"""
Test get_chat_completion_message_history_for_previous_response_id with empty spend logs
"""
with patch.object(
_ENTERPRISE_ResponsesSessionHandler,
"get_all_spend_logs_for_previous_response_id",
new_callable=AsyncMock,
) as mock_get_spend_logs:
mock_get_spend_logs.return_value = []
previous_response_id = "non-existent-id"
result = await _ENTERPRISE_ResponsesSessionHandler.get_chat_completion_message_history_for_previous_response_id(
previous_response_id
)
# Verify empty result structure
assert result.get("messages") == []
assert result.get("litellm_session_id") is None