Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/otlp.py
Original file line number Diff line number Diff line change
Expand Up @@ -362,13 +362,13 @@ def _extract_opencode_fields(
str(provider_from_attr) if provider_from_attr is not None else None,
)

prompt_tokens = int(input_tokens) if input_tokens is not None else None
prompt_tokens = (int(input_tokens or 0)) + (int(cached or 0))
completion_tokens = int(output_tokens) if output_tokens is not None else None
cached_tokens = int(cached) if cached is not None else None

if total is not None:
total_tokens = int(total)
elif prompt_tokens is not None and completion_tokens is not None:
elif completion_tokens is not None:
total_tokens = prompt_tokens + completion_tokens + int(reasoning or 0)
else:
total_tokens = None
Expand Down
4 changes: 2 additions & 2 deletions tests/test_otlp.py
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@ def test_extract_opencode_fields_basic(otlp_module):

assert fields["model"] == "claude-sonnet-4-5"
assert fields["provider"] == "anthropic"
assert fields["prompt_tokens"] == 150
assert fields["prompt_tokens"] == 180
assert fields["completion_tokens"] == 80
assert fields["reasoning_tokens"] == 20
assert fields["cached_tokens"] == 30
Expand Down Expand Up @@ -267,7 +267,7 @@ def test_parse_opencode_record_routes_to_record_usage(otlp_module, monkeypatch):
assert captured["usage"].client_source == "opencode"
assert captured["usage"].model == "claude-sonnet-4-5"
assert captured["usage"].provider == "anthropic"
assert captured["usage"].prompt_tokens == 100
assert captured["usage"].prompt_tokens == 120
assert captured["usage"].completion_tokens == 50
assert captured["usage"].reasoning_tokens == 10
assert captured["usage"].cached_tokens == 20
Expand Down
Loading