mirror of
https://github.com/BerriAI/litellm.git
synced 2025-04-25 18:54:30 +00:00
test_anthropic_cache_control_hook_system_message
This commit is contained in:
parent
a2bc0c0f36
commit
53ce0d434e
2 changed files with 152 additions and 1 deletions
|
@ -2669,7 +2669,7 @@
|
||||||
"max_output_tokens": 4096,
|
"max_output_tokens": 4096,
|
||||||
"input_cost_per_token": 0.00000008,
|
"input_cost_per_token": 0.00000008,
|
||||||
"input_cost_per_audio_token": 0.000004,
|
"input_cost_per_audio_token": 0.000004,
|
||||||
"output_cost_per_token": 0.00032,
|
"output_cost_per_token": 0.00000032,
|
||||||
"litellm_provider": "azure_ai",
|
"litellm_provider": "azure_ai",
|
||||||
"mode": "chat",
|
"mode": "chat",
|
||||||
"supports_audio_input": true,
|
"supports_audio_input": true,
|
||||||
|
|
151
tests/litellm/integrations/test_anthropic_cache_control_hook.py
Normal file
151
tests/litellm/integrations/test_anthropic_cache_control_hook.py
Normal file
|
@ -0,0 +1,151 @@
|
||||||
|
import datetime
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import unittest
|
||||||
|
from typing import List, Optional, Tuple
|
||||||
|
from unittest.mock import ANY, MagicMock, Mock, patch
|
||||||
|
|
||||||
|
import httpx
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
sys.path.insert(
|
||||||
|
0, os.path.abspath("../..")
|
||||||
|
) # Adds the parent directory to the system-path
|
||||||
|
import litellm
|
||||||
|
from litellm.integrations.anthropic_cache_control_hook import AnthropicCacheControlHook
|
||||||
|
from litellm.llms.custom_httpx.http_handler import AsyncHTTPHandler
|
||||||
|
from litellm.types.llms.openai import AllMessageValues
|
||||||
|
from litellm.types.utils import StandardCallbackDynamicParams
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_anthropic_cache_control_hook_system_message():
|
||||||
|
anthropic_cache_control_hook = AnthropicCacheControlHook()
|
||||||
|
litellm.callbacks = [anthropic_cache_control_hook]
|
||||||
|
|
||||||
|
# Mock response data
|
||||||
|
mock_response = MagicMock()
|
||||||
|
mock_response.json.return_value = {
|
||||||
|
"output": {
|
||||||
|
"message": {
|
||||||
|
"role": "assistant",
|
||||||
|
"content": "Here is my analysis of the key terms and conditions...",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"stopReason": "stop_sequence",
|
||||||
|
"usage": {
|
||||||
|
"inputTokens": 100,
|
||||||
|
"outputTokens": 200,
|
||||||
|
"totalTokens": 300,
|
||||||
|
"cacheReadInputTokens": 100,
|
||||||
|
"cacheWriteInputTokens": 200,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
mock_response.status_code = 200
|
||||||
|
|
||||||
|
# Mock AsyncHTTPHandler.post method
|
||||||
|
client = AsyncHTTPHandler()
|
||||||
|
with patch.object(client, "post", return_value=mock_response) as mock_post:
|
||||||
|
response = await litellm.acompletion(
|
||||||
|
model="bedrock/anthropic.claude-3-5-haiku-20241022-v1:0",
|
||||||
|
messages=[
|
||||||
|
{
|
||||||
|
"role": "system",
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"text": "You are an AI assistant tasked with analyzing legal documents.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"text": "Here is the full text of a complex legal agreement",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "user",
|
||||||
|
"content": "what are the key terms and conditions in this agreement?",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
cache_control_injection_points=[
|
||||||
|
{
|
||||||
|
"location": "message",
|
||||||
|
"role": "system",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
client=client,
|
||||||
|
)
|
||||||
|
|
||||||
|
mock_post.assert_called_once()
|
||||||
|
request_body = json.loads(mock_post.call_args.kwargs["data"])
|
||||||
|
|
||||||
|
print("request_body: ", json.dumps(request_body, indent=4))
|
||||||
|
|
||||||
|
# Verify the request body
|
||||||
|
assert request_body["system"][1]["cachePoint"] == {"type": "default"}
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_anthropic_cache_control_hook_user_message():
|
||||||
|
anthropic_cache_control_hook = AnthropicCacheControlHook()
|
||||||
|
litellm.callbacks = [anthropic_cache_control_hook]
|
||||||
|
|
||||||
|
# Mock response data
|
||||||
|
mock_response = MagicMock()
|
||||||
|
mock_response.json.return_value = {
|
||||||
|
"output": {
|
||||||
|
"message": {
|
||||||
|
"role": "assistant",
|
||||||
|
"content": "Here is my analysis of the key terms and conditions...",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"stopReason": "stop_sequence",
|
||||||
|
"usage": {
|
||||||
|
"inputTokens": 100,
|
||||||
|
"outputTokens": 200,
|
||||||
|
"totalTokens": 300,
|
||||||
|
"cacheReadInputTokens": 100,
|
||||||
|
"cacheWriteInputTokens": 200,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
mock_response.status_code = 200
|
||||||
|
|
||||||
|
# Mock AsyncHTTPHandler.post method
|
||||||
|
client = AsyncHTTPHandler()
|
||||||
|
with patch.object(client, "post", return_value=mock_response) as mock_post:
|
||||||
|
response = await litellm.acompletion(
|
||||||
|
model="bedrock/anthropic.claude-3-5-haiku-20241022-v1:0",
|
||||||
|
messages=[
|
||||||
|
{
|
||||||
|
"role": "assistant",
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"text": "You are an AI assistant tasked with analyzing legal documents.",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "user",
|
||||||
|
"content": "what are the key terms and conditions in this agreement? <very_long_text>",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
cache_control_injection_points=[
|
||||||
|
{
|
||||||
|
"location": "message",
|
||||||
|
"role": "user",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
client=client,
|
||||||
|
)
|
||||||
|
|
||||||
|
mock_post.assert_called_once()
|
||||||
|
request_body = json.loads(mock_post.call_args.kwargs["data"])
|
||||||
|
|
||||||
|
print("request_body: ", json.dumps(request_body, indent=4))
|
||||||
|
|
||||||
|
# Verify the request body
|
||||||
|
assert request_body["messages"][1]["content"][1]["cachePoint"] == {
|
||||||
|
"type": "default"
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue