| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- package apicompat
- import (
- "testing"
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
- )
- func TestAnthropicUsageFromResponsesUsage_CacheCreation(t *testing.T) {
- usage := &ResponsesUsage{
- InputTokens: 20,
- OutputTokens: 5,
- CacheCreationInputTokens: 6,
- InputTokensDetails: &ResponsesInputTokensDetails{
- CachedTokens: 4,
- },
- }
- got := anthropicUsageFromResponsesUsage(usage)
- assert.Equal(t, 10, got.InputTokens, "input = total(20) - cache_read(4) - cache_creation(6)")
- assert.Equal(t, 5, got.OutputTokens)
- assert.Equal(t, 4, got.CacheReadInputTokens)
- assert.Equal(t, 6, got.CacheCreationInputTokens, "cache creation must be preserved")
- }
- func TestAnthropicUsageFromResponsesUsage_NoCacheCreation(t *testing.T) {
- usage := &ResponsesUsage{
- InputTokens: 10,
- OutputTokens: 5,
- InputTokensDetails: &ResponsesInputTokensDetails{
- CachedTokens: 3,
- },
- }
- got := anthropicUsageFromResponsesUsage(usage)
- assert.Equal(t, 7, got.InputTokens)
- assert.Equal(t, 3, got.CacheReadInputTokens)
- assert.Equal(t, 0, got.CacheCreationInputTokens)
- }
- func TestResponsesEventToAnthropicEvents_StreamingCacheCreation(t *testing.T) {
- state := NewResponsesEventToAnthropicState()
- state.MessageStartSent = true
- completedEvt := &ResponsesStreamEvent{
- Type: "response.completed",
- Response: &ResponsesResponse{
- Status: "completed",
- Usage: &ResponsesUsage{
- InputTokens: 20,
- OutputTokens: 5,
- CacheCreationInputTokens: 6,
- InputTokensDetails: &ResponsesInputTokensDetails{
- CachedTokens: 4,
- },
- },
- },
- }
- events := ResponsesEventToAnthropicEvents(completedEvt, state)
- var deltaEvt *AnthropicStreamEvent
- for i := range events {
- if events[i].Type == "message_delta" {
- deltaEvt = &events[i]
- break
- }
- }
- require.NotNil(t, deltaEvt, "should have message_delta event")
- require.NotNil(t, deltaEvt.Usage)
- assert.Equal(t, 6, deltaEvt.Usage.CacheCreationInputTokens, "streaming cache_creation must be preserved")
- assert.Equal(t, 10, deltaEvt.Usage.InputTokens, "input = 20 - 4(read) - 6(creation)")
- assert.Equal(t, 4, deltaEvt.Usage.CacheReadInputTokens)
- }
- func TestAnthropicToResponsesResponse_CacheCreation(t *testing.T) {
- resp := AnthropicResponse{
- ID: "msg_test",
- Type: "message",
- Role: "assistant",
- Model: "claude-opus-4-6",
- Usage: AnthropicUsage{
- InputTokens: 10,
- OutputTokens: 5,
- CacheReadInputTokens: 4,
- CacheCreationInputTokens: 6,
- },
- StopReason: AnthropicStopReasonPtr("end_turn"),
- }
- out := AnthropicToResponsesResponse(&resp)
- require.NotNil(t, out.Usage)
- assert.Equal(t, 20, out.Usage.InputTokens, "total = input(10) + cache_read(4) + cache_creation(6)")
- assert.Equal(t, 6, out.Usage.CacheCreationInputTokens, "cache creation must round-trip")
- }
|