From a85d46f6adb112df2fee5af9c8954e695e3a72bc Mon Sep 17 00:00:00 2001 From: Sangrak Date: Sat, 28 Mar 2026 22:04:27 +0900 Subject: [PATCH] fix(openrouter): populate cache and reasoning usage tokens from API response --- src/Providers/OpenRouter/Handlers/Stream.php | 6 ++++-- src/Providers/OpenRouter/Handlers/Structured.php | 5 +++++ src/Providers/OpenRouter/Handlers/Text.php | 5 +++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Providers/OpenRouter/Handlers/Stream.php b/src/Providers/OpenRouter/Handlers/Stream.php index b9a895388..4b3e10475 100644 --- a/src/Providers/OpenRouter/Handlers/Stream.php +++ b/src/Providers/OpenRouter/Handlers/Stream.php @@ -501,8 +501,10 @@ protected function extractUsage(array $data): ?Usage return new Usage( promptTokens: (int) data_get($usage, 'prompt_tokens', 0), completionTokens: (int) data_get($usage, 'completion_tokens', 0), - cacheReadInputTokens: (int) data_get($usage, 'prompt_tokens_details.cached_tokens', 0), - thoughtTokens: (int) data_get($usage, 'completion_tokens_details.reasoning_tokens', 0) + // OpenRouter: usage.prompt_tokens_details.cache_write_tokens / cached_tokens + cacheWriteInputTokens: (int) data_get($usage, 'prompt_tokens_details.cache_write_tokens', 0) ?: null, + cacheReadInputTokens: (int) data_get($usage, 'prompt_tokens_details.cached_tokens', 0) ?: null, + thoughtTokens: (int) data_get($usage, 'completion_tokens_details.reasoning_tokens', 0) ?: null, ); } } diff --git a/src/Providers/OpenRouter/Handlers/Structured.php b/src/Providers/OpenRouter/Handlers/Structured.php index 43b8376fd..75d7932f0 100644 --- a/src/Providers/OpenRouter/Handlers/Structured.php +++ b/src/Providers/OpenRouter/Handlers/Structured.php @@ -156,6 +156,11 @@ protected function addStep(array $data, Request $request, array $toolResults = [ usage: new Usage( (int) data_get($data, 'usage.prompt_tokens', 0), (int) data_get($data, 'usage.completion_tokens', 0), + // OpenRouter: usage.prompt_tokens_details.cache_write_tokens / cached_tokens + (int) data_get($data, 'usage.prompt_tokens_details.cache_write_tokens', 0) ?: null, + (int) data_get($data, 'usage.prompt_tokens_details.cached_tokens', 0) ?: null, + // OpenRouter: usage.completion_tokens_details.reasoning_tokens + (int) data_get($data, 'usage.completion_tokens_details.reasoning_tokens', 0) ?: null, ), meta: new Meta( id: data_get($data, 'id', ''), diff --git a/src/Providers/OpenRouter/Handlers/Text.php b/src/Providers/OpenRouter/Handlers/Text.php index ac2b78cf0..a623c6136 100644 --- a/src/Providers/OpenRouter/Handlers/Text.php +++ b/src/Providers/OpenRouter/Handlers/Text.php @@ -125,6 +125,11 @@ protected function addStep(array $data, Request $request, array $toolResults = [ usage: new Usage( (int) data_get($data, 'usage.prompt_tokens', 0), (int) data_get($data, 'usage.completion_tokens', 0), + // OpenRouter: usage.prompt_tokens_details.cache_write_tokens / cached_tokens + (int) data_get($data, 'usage.prompt_tokens_details.cache_write_tokens', 0) ?: null, + (int) data_get($data, 'usage.prompt_tokens_details.cached_tokens', 0) ?: null, + // OpenRouter: usage.completion_tokens_details.reasoning_tokens + (int) data_get($data, 'usage.completion_tokens_details.reasoning_tokens', 0) ?: null, ), meta: new Meta( id: data_get($data, 'id', ''),