MCPcopy Create free account
hub / github.com/coder/coder / TestProviderMetadataRoundTrip

Function TestProviderMetadataRoundTrip

coderd/x/chatd/chatprompt/chatprompt_test.go:1454–1499  ·  view source on GitHub ↗

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)

Source from the content-addressed store, hash-verified

1452// ParseContent → SDK part (ProviderMetadata) → partsToMessageParts
1453// → fantasy.MessagePart (ProviderOptions).
1454func 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.

Callers

nothing calls this directly

Calls 6

MarshalContentFunction · 0.92
ParseContentFunction · 0.92
ConvertMessagesWithFilesFunction · 0.92
testMsgFunction · 0.85
LenMethod · 0.45
EqualMethod · 0.45

Tested by

no test coverage detected