[PR #11743] feat: use Gemini response metadata for token counting #27347

Closed
opened 2026-02-21 20:41:20 -05:00 by yindo · 0 comments
Owner

Original Pull Request: https://github.com/langgenius/dify/pull/11743

State: closed
Merged: Yes


Summary

Previously, I fixed it in another PR(#11226), but the streaming function wasn't corrected, so this is an additional fix.

Improved token counting for Gemini models by utilizing response metadata. Previously, the system used GPT-2 tokenizer which resulted in inaccurate token counts for both prompt and completion. Now, the system first attempts to get token counts from Gemini's response metadata, falling back to manual calculation only when metadata is unavailable. This change ensures accurate token counting and improves efficiency by leveraging native Gemini functionality.

Tip

Close issue syntax: Fixes #<issue number> or Resolves #<issue number>, see documentation for more details.

Screenshots

Before After
... ...

Checklist

Important

Please review the checklist below before submitting your pull request.

  • This change requires a documentation update, included: Dify Document
  • I understand that this PR may be closed in case there was no previous discussion or issues. (This doesn't apply to typos!)
  • I've added a test for each change that was introduced, and I tried as much as possible to make a single atomic change.
  • I've updated the documentation accordingly.
  • I ran dev/reformat(backend) and cd web && npx lint-staged(frontend) to appease the lint gods
**Original Pull Request:** https://github.com/langgenius/dify/pull/11743 **State:** closed **Merged:** Yes --- # Summary Previously, I fixed it in another PR(#11226), but the streaming function wasn't corrected, so this is an additional fix. Improved token counting for Gemini models by utilizing response metadata. Previously, the system used GPT-2 tokenizer which resulted in inaccurate token counts for both prompt and completion. Now, the system first attempts to get token counts from Gemini's response metadata, falling back to manual calculation only when metadata is unavailable. This change ensures accurate token counting and improves efficiency by leveraging native Gemini functionality. > [!Tip] > Close issue syntax: `Fixes #<issue number>` or `Resolves #<issue number>`, see [documentation](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword) for more details. # Screenshots | Before | After | |--------|-------| | ... | ... | # Checklist > [!IMPORTANT] > Please review the checklist below before submitting your pull request. - [ ] This change requires a documentation update, included: [Dify Document](https://github.com/langgenius/dify-docs) - [x] I understand that this PR may be closed in case there was no previous discussion or issues. (This doesn't apply to typos!) - [x] I've added a test for each change that was introduced, and I tried as much as possible to make a single atomic change. - [x] I've updated the documentation accordingly. - [x] I ran `dev/reformat`(backend) and `cd web && npx lint-staged`(frontend) to appease the lint gods
yindo added the pull-request label 2026-02-21 20:41:20 -05:00
yindo closed this issue 2026-02-21 20:41:21 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: langgenius/dify#27347