Skip to content

Commit a40f255

Browse files
hanhan761eavanvalkenburg
authored andcommitted
fix: restore legacy provider field names for backward compatibility
Keep old provider-specific field names (anthropic.cache_*, openai.*, completion/*, prompt/*) alongside the new OTel-standard field names so existing integrations that depend on the legacy keys continue to work.
1 parent fbca6d1 commit a40f255

6 files changed

Lines changed: 11 additions & 0 deletions

File tree

python/packages/anthropic/agent_framework_anthropic/_chat_client.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1023,8 +1023,10 @@ def _parse_usage_from_anthropic(self, usage: BetaUsage | BetaMessageDeltaUsage |
10231023
if usage.input_tokens is not None:
10241024
usage_details["input_token_count"] = usage.input_tokens
10251025
if usage.cache_creation_input_tokens is not None:
1026+
usage_details["anthropic.cache_creation_input_tokens"] = usage.cache_creation_input_tokens # type: ignore[typeddict-unknown-key]
10261027
usage_details["cache_creation_input_token_count"] = usage.cache_creation_input_tokens
10271028
if usage.cache_read_input_tokens is not None:
1029+
usage_details["anthropic.cache_read_input_tokens"] = usage.cache_read_input_tokens # type: ignore[typeddict-unknown-key]
10281030
usage_details["cache_read_input_token_count"] = usage.cache_read_input_tokens
10291031
return usage_details
10301032

python/packages/anthropic/tests/test_anthropic_client.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2352,6 +2352,8 @@ def test_parse_usage_with_cache_tokens(mock_anthropic_client: MagicMock) -> None
23522352
assert result is not None
23532353
assert result["output_token_count"] == 50
23542354
assert result["input_token_count"] == 100
2355+
assert result["anthropic.cache_creation_input_tokens"] == 20
2356+
assert result["anthropic.cache_read_input_tokens"] == 30
23552357
assert result["cache_creation_input_token_count"] == 20
23562358
assert result["cache_read_input_token_count"] == 30
23572359

python/packages/openai/agent_framework_openai/_chat_client.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2980,8 +2980,10 @@ def _parse_usage_from_openai(self, usage: ResponseUsage) -> UsageDetails | None:
29802980
total_token_count=usage.total_tokens,
29812981
)
29822982
if usage.input_tokens_details and usage.input_tokens_details.cached_tokens:
2983+
details["openai.cached_input_tokens"] = usage.input_tokens_details.cached_tokens # type: ignore[typeddict-unknown-key]
29832984
details["cache_read_input_token_count"] = usage.input_tokens_details.cached_tokens
29842985
if usage.output_tokens_details and usage.output_tokens_details.reasoning_tokens:
2986+
details["openai.reasoning_tokens"] = usage.output_tokens_details.reasoning_tokens # type: ignore[typeddict-unknown-key]
29852987
details["reasoning_output_token_count"] = usage.output_tokens_details.reasoning_tokens
29862988
return details
29872989

python/packages/openai/agent_framework_openai/_chat_completion_client.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -766,13 +766,15 @@ def _parse_usage_from_openai(self, usage: CompletionUsage) -> UsageDetails:
766766
if tokens := usage.completion_tokens_details.audio_tokens:
767767
details["completion/audio_tokens"] = tokens # type: ignore[typeddict-unknown-key]
768768
if tokens := usage.completion_tokens_details.reasoning_tokens:
769+
details["completion/reasoning_tokens"] = tokens # type: ignore[typeddict-unknown-key]
769770
details["reasoning_output_token_count"] = tokens
770771
if tokens := usage.completion_tokens_details.rejected_prediction_tokens:
771772
details["completion/rejected_prediction_tokens"] = tokens # type: ignore[typeddict-unknown-key]
772773
if usage.prompt_tokens_details:
773774
if tokens := usage.prompt_tokens_details.audio_tokens:
774775
details["prompt/audio_tokens"] = tokens # type: ignore[typeddict-unknown-key]
775776
if tokens := usage.prompt_tokens_details.cached_tokens:
777+
details["prompt/cached_tokens"] = tokens # type: ignore[typeddict-unknown-key]
776778
details["cache_read_input_token_count"] = tokens
777779
return details
778780

python/packages/openai/tests/openai/test_openai_chat_client.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3300,6 +3300,7 @@ def test_usage_details_with_cached_tokens() -> None:
33003300
details = client._parse_usage_from_openai(mock_usage) # type: ignore
33013301
assert details is not None
33023302
assert details["input_token_count"] == 200
3303+
assert details["openai.cached_input_tokens"] == 25
33033304
assert details["cache_read_input_token_count"] == 25
33043305

33053306

@@ -3318,6 +3319,7 @@ def test_usage_details_with_reasoning_tokens() -> None:
33183319
details = client._parse_usage_from_openai(mock_usage) # type: ignore
33193320
assert details is not None
33203321
assert details["output_token_count"] == 80
3322+
assert details["openai.reasoning_tokens"] == 30
33213323
assert details["reasoning_output_token_count"] == 30
33223324

33233325

python/samples/02-agents/tools/function_tool_declaration_only.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ async def main():
6969
"input_token_count": 63,
7070
"output_token_count": 145,
7171
"total_token_count": 208,
72+
"openai.reasoning_tokens": 128,
7273
"reasoning_output_token_count": 128
7374
},
7475
"additional_properties": {}

0 commit comments

Comments
 (0)