Skip to content

feat(ai): Rename deprecated span attrs to OTEL names and add granular cost fields#6167

Draft
vgrozdanic wants to merge 1 commit into
masterfrom
vg/granular-cost-attrs-and-otel-renames
Draft

feat(ai): Rename deprecated span attrs to OTEL names and add granular cost fields#6167
vgrozdanic wants to merge 1 commit into
masterfrom
vg/granular-cost-attrs-and-otel-renames

Conversation

@vgrozdanic

Copy link
Copy Markdown
Member

Summary

  • Rename three SpanData usage fields to their new OTEL semantic convention names, keeping old names as legacy_alias for backward compatibility:
    • gen_ai.usage.input_tokens.cachedgen_ai.usage.cache_read.input_tokens
    • gen_ai.usage.input_tokens.cache_writegen_ai.usage.cache_creation.input_tokens
    • gen_ai.usage.output_tokens.reasoninggen_ai.usage.reasoning.output_tokens
  • Add three new granular cost fields mirroring the usage token breakdown:
    • gen_ai.cost.cache_read.input_tokens
    • gen_ai.cost.cache_creation.input_tokens
    • gen_ai.cost.reasoning.output_tokens
  • Update CalculatedCost to expose individual cost components
  • Works in both span-first and transaction-spans paths

Dependencies

Test plan

  • All existing AI cost calculation tests pass with updated snapshots
  • Backward compat: old attribute names (e.g. gen_ai.usage.input_tokens.cached) still deserialize via legacy_alias
  • New OTEL names (e.g. gen_ai.usage.cache_read.input_tokens) work correctly
  • Granular cost fields are set for both SpanData (transaction path) and EAP (span-first path)
  • Full cargo build and cargo test pass

🤖 Generated with Claude Code

… cost fields

Rename three SpanData usage fields to their new OTEL semantic convention
names, keeping the old names as legacy_alias for backward compatibility:
- gen_ai.usage.input_tokens.cached → gen_ai.usage.cache_read.input_tokens
- gen_ai.usage.input_tokens.cache_write → gen_ai.usage.cache_creation.input_tokens
- gen_ai.usage.output_tokens.reasoning → gen_ai.usage.reasoning.output_tokens

Add three new granular cost fields mirroring the usage token breakdown:
- gen_ai.cost.cache_read.input_tokens
- gen_ai.cost.cache_creation.input_tokens
- gen_ai.cost.reasoning.output_tokens

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant