TestProviderMetadataRoundTrip verifies that Anthropic cache control hints survive the full path: legacy fantasy DB row → ParseContent → SDK part (ProviderMetadata) → partsToMessageParts → fantasy.MessagePart (ProviderOptions).
(t *testing.T)
| 1452 | // ParseContent → SDK part (ProviderMetadata) → partsToMessageParts |
| 1453 | // → fantasy.MessagePart (ProviderOptions). |
| 1454 | func TestProviderMetadataRoundTrip(t *testing.T) { |
| 1455 | t.Parallel() |
| 1456 | |
| 1457 | legacyContent, err := chatprompt.MarshalContent([]fantasy.Content{ |
| 1458 | fantasy.TextContent{ |
| 1459 | Text: "cached response", |
| 1460 | ProviderMetadata: fantasy.ProviderMetadata{ |
| 1461 | "anthropic": &fantasyanthropic.ProviderCacheControlOptions{ |
| 1462 | CacheControl: fantasyanthropic.CacheControl{Type: "ephemeral"}, |
| 1463 | }, |
| 1464 | }, |
| 1465 | }, |
| 1466 | }, nil) |
| 1467 | require.NoError(t, err) |
| 1468 | |
| 1469 | // Step 1: ParseContent preserves metadata on the SDK part. |
| 1470 | parts, err := chatprompt.ParseContent(testMsg(codersdk.ChatMessageRoleAssistant, legacyContent)) |
| 1471 | require.NoError(t, err) |
| 1472 | require.Len(t, parts, 1) |
| 1473 | require.NotNil(t, parts[0].ProviderMetadata, |
| 1474 | "ProviderMetadata must survive ParseContent") |
| 1475 | |
| 1476 | // Step 2: ConvertMessagesWithFiles reconstructs typed |
| 1477 | // ProviderOptions on the fantasy part. |
| 1478 | prompt, err := chatprompt.ConvertMessagesWithFiles( |
| 1479 | context.Background(), |
| 1480 | []database.ChatMessage{{ |
| 1481 | Role: database.ChatMessageRoleAssistant, |
| 1482 | Visibility: database.ChatMessageVisibilityBoth, |
| 1483 | Content: legacyContent, |
| 1484 | }}, |
| 1485 | nil, |
| 1486 | slogtest.Make(t, nil), |
| 1487 | ) |
| 1488 | require.NoError(t, err) |
| 1489 | require.Len(t, prompt, 1) |
| 1490 | require.Len(t, prompt[0].Content, 1) |
| 1491 | |
| 1492 | textPart, ok := fantasy.AsMessagePart[fantasy.TextPart](prompt[0].Content[0]) |
| 1493 | require.True(t, ok, "expected TextPart") |
| 1494 | require.Equal(t, "cached response", textPart.Text) |
| 1495 | |
| 1496 | cc := fantasyanthropic.GetCacheControl(textPart.ProviderOptions) |
| 1497 | require.NotNil(t, cc, "Anthropic cache control must survive round-trip") |
| 1498 | require.Equal(t, "ephemeral", cc.Type) |
| 1499 | } |
| 1500 | |
| 1501 | // TestFileReferencePreservation verifies file-reference parts |
| 1502 | // survive the storage round-trip and convert to text for LLMs. |
nothing calls this directly
no test coverage detected