Skip to content

fix: responses cache token 未计费 - #1509

Merged
Calcium-Ion merged 2 commits into
alphafrom
responses-input-cache-token
Aug 6, 2025
Merged

fix: responses cache token 未计费#1509
Calcium-Ion merged 2 commits into
alphafrom
responses-input-cache-token

Conversation

@creamlike1024

@creamlike1024 creamlike1024 commented Aug 5, 2025

Copy link
Copy Markdown
Collaborator
image

Summary by CodeRabbit

  • New Features
    • Display of cache ratio details has been added to usage logs, providing more insight into token usage.
  • Enhancements
    • Usage log entries now include cache ratio information in their descriptions for supported log types.
    • Improved stability by preventing errors when usage details are missing in AI response data.

@coderabbitai

coderabbitai Bot commented Aug 5, 2025

Copy link
Copy Markdown
Contributor

Walkthrough

The changes add nil checks to safely handle usage details in AI response handlers. The frontend's renderLogContent function is extended with a new cacheRatio parameter used in localized output strings. Usage log formatting is updated to pass the cache ratio to the render function for display.

Changes

Cohort / File(s) Change Summary
Backend: Safe Usage Data Handling
relay/channel/openai/relay_responses.go
Adds nil checks before accessing usage fields to prevent nil pointer dereferences in AI response handlers.
Frontend: Render Function Update
web/src/helpers/render.js
Adds optional cacheRatio parameter to renderLogContent and includes it in localized output strings.
Frontend: Usage Log Data Update
web/src/hooks/usage-logs/useUsageLogsData.js
Passes cache_ratio value to renderLogContent when formatting usage logs to incorporate cache ratio display.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~7 minutes

Poem

A rabbit hopped through code today,
Checking tokens safe each way.
Cache ratios now in sight,
Logs and renders shining bright!
Front and back in sync they play,
Making usage clear as day.
🐇✨

Note

⚡️ Unit Test Generation is now available in beta!

Learn more here, or try it out under "Finishing Touches" below.


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between edbe18b and a746309.

📒 Files selected for processing (1)
  • relay/channel/openai/relay_responses.go (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • relay/channel/openai/relay_responses.go
✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch responses-input-cache-token

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🔭 Outside diff range comments (3)
relay/channel/openai/relay_responses.go (1)

57-97: Cached token details are not propagated in the streaming-case handler

OaiResponsesStreamHandler mirrors the non-stream path but never forwards CachedTokens.
For consistency (and to avoid confusing front-end numbers) please aggregate the cached tokens in the "response.completed" branch in the same way you did above.
Failing to do so will show cache_ratio in the UI while cache_tokens remain zero.

web/src/helpers/render.js (1)

1153-1161: Signature change is breaking for every call-site that still uses the old positional order

renderLogContent now inserts cacheRatio before image, shifting all following
positional parameters. Any caller that was not updated will silently mis-map
arguments (a boolean will be read as the ratio, etc.).

Add backward-compatibility logic or migrate all callers in a single commit.

 export function renderLogContent(
   modelRatio,
   completionRatio,
   modelPrice = -1,
   groupRatio,
   user_group_ratio,
-  cacheRatio = 1.0,
-  image = false,
+  // Accept both old and new call-sites
+  cacheRatioOrImage = 1.0,
+  image = false,
   imageRatio = 1.0,
@@
 ) {
-  const { ratio, label: ratioLabel, useUserGroupRatio: useUserGroupRatio } = getEffectiveRatio(groupRatio, user_group_ratio);
+  // Old signature passed a boolean here; detect & adapt
+  let cacheRatio = cacheRatioOrImage;
+  if (typeof cacheRatioOrImage === 'boolean') {
+    image = cacheRatioOrImage;
+    cacheRatio = 1.0;
+  }
+  const { ratio, label: ratioLabel, useUserGroupRatio } =
+    getEffectiveRatio(groupRatio, user_group_ratio);
web/src/hooks/usage-logs/useUsageLogsData.js (1)

369-376: Update all renderLogContent calls to include the new cacheRatio parameter

We detected two remaining outdated usages of renderLogContent that still pass the old 11-argument signature. Please update these call sites to pass the new cacheRatio value (e.g. default to 1.0 or derive from context):

• web/src/hooks/usage-logs/useUsageLogsData.js: line 363
• web/src/helpers/render.js: line 1153

After making those changes, rerun the repository-wide check to confirm no calls remain with ≤ 11 arguments.

🧹 Nitpick comments (2)
web/src/helpers/render.js (2)

1176-1187: Always printing 缓存倍率 even when it is 1.0 clutters the log

Typical requests will keep cacheRatio at the default 1.0; showing it adds no
value. Consider omitting the fragment when the ratio equals 1.


1200-1210: Same duplication issue for the non-image / non-webSearch branch

Refactor the string builder so that the 缓存倍率 fragment is appended only if
cacheRatio !== 1.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 306a1a3 and edbe18b.

📒 Files selected for processing (3)
  • relay/channel/openai/relay_responses.go (1 hunks)
  • web/src/helpers/render.js (4 hunks)
  • web/src/hooks/usage-logs/useUsageLogsData.js (1 hunks)

Comment thread relay/channel/openai/relay_responses.go Outdated
@Calcium-Ion
Calcium-Ion merged commit 7370b4f into alpha Aug 6, 2025
3 checks passed
@Calcium-Ion
Calcium-Ion deleted the responses-input-cache-token branch August 9, 2025 10:27
x22x22 pushed a commit to x22x22/new-api that referenced this pull request Apr 24, 2026
…cache-token

fix: responses cache token 未计费
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.

2 participants