mirror of
https://github.com/router-for-me/CLIProxyAPI.git
synced 2026-02-03 21:10:51 +08:00
feat: add cached token parsing for Gemini API responses
This commit is contained in:
@@ -289,6 +289,7 @@ func parseGeminiCLIUsage(data []byte) usage.Detail {
|
|||||||
OutputTokens: node.Get("candidatesTokenCount").Int(),
|
OutputTokens: node.Get("candidatesTokenCount").Int(),
|
||||||
ReasoningTokens: node.Get("thoughtsTokenCount").Int(),
|
ReasoningTokens: node.Get("thoughtsTokenCount").Int(),
|
||||||
TotalTokens: node.Get("totalTokenCount").Int(),
|
TotalTokens: node.Get("totalTokenCount").Int(),
|
||||||
|
CachedTokens: node.Get("cachedContentTokenCount").Int(),
|
||||||
}
|
}
|
||||||
if detail.TotalTokens == 0 {
|
if detail.TotalTokens == 0 {
|
||||||
detail.TotalTokens = detail.InputTokens + detail.OutputTokens + detail.ReasoningTokens
|
detail.TotalTokens = detail.InputTokens + detail.OutputTokens + detail.ReasoningTokens
|
||||||
@@ -310,6 +311,7 @@ func parseGeminiUsage(data []byte) usage.Detail {
|
|||||||
OutputTokens: node.Get("candidatesTokenCount").Int(),
|
OutputTokens: node.Get("candidatesTokenCount").Int(),
|
||||||
ReasoningTokens: node.Get("thoughtsTokenCount").Int(),
|
ReasoningTokens: node.Get("thoughtsTokenCount").Int(),
|
||||||
TotalTokens: node.Get("totalTokenCount").Int(),
|
TotalTokens: node.Get("totalTokenCount").Int(),
|
||||||
|
CachedTokens: node.Get("cachedContentTokenCount").Int(),
|
||||||
}
|
}
|
||||||
if detail.TotalTokens == 0 {
|
if detail.TotalTokens == 0 {
|
||||||
detail.TotalTokens = detail.InputTokens + detail.OutputTokens + detail.ReasoningTokens
|
detail.TotalTokens = detail.InputTokens + detail.OutputTokens + detail.ReasoningTokens
|
||||||
@@ -334,6 +336,7 @@ func parseGeminiStreamUsage(line []byte) (usage.Detail, bool) {
|
|||||||
OutputTokens: node.Get("candidatesTokenCount").Int(),
|
OutputTokens: node.Get("candidatesTokenCount").Int(),
|
||||||
ReasoningTokens: node.Get("thoughtsTokenCount").Int(),
|
ReasoningTokens: node.Get("thoughtsTokenCount").Int(),
|
||||||
TotalTokens: node.Get("totalTokenCount").Int(),
|
TotalTokens: node.Get("totalTokenCount").Int(),
|
||||||
|
CachedTokens: node.Get("cachedContentTokenCount").Int(),
|
||||||
}
|
}
|
||||||
if detail.TotalTokens == 0 {
|
if detail.TotalTokens == 0 {
|
||||||
detail.TotalTokens = detail.InputTokens + detail.OutputTokens + detail.ReasoningTokens
|
detail.TotalTokens = detail.InputTokens + detail.OutputTokens + detail.ReasoningTokens
|
||||||
@@ -358,6 +361,7 @@ func parseGeminiCLIStreamUsage(line []byte) (usage.Detail, bool) {
|
|||||||
OutputTokens: node.Get("candidatesTokenCount").Int(),
|
OutputTokens: node.Get("candidatesTokenCount").Int(),
|
||||||
ReasoningTokens: node.Get("thoughtsTokenCount").Int(),
|
ReasoningTokens: node.Get("thoughtsTokenCount").Int(),
|
||||||
TotalTokens: node.Get("totalTokenCount").Int(),
|
TotalTokens: node.Get("totalTokenCount").Int(),
|
||||||
|
CachedTokens: node.Get("cachedContentTokenCount").Int(),
|
||||||
}
|
}
|
||||||
if detail.TotalTokens == 0 {
|
if detail.TotalTokens == 0 {
|
||||||
detail.TotalTokens = detail.InputTokens + detail.OutputTokens + detail.ReasoningTokens
|
detail.TotalTokens = detail.InputTokens + detail.OutputTokens + detail.ReasoningTokens
|
||||||
@@ -382,6 +386,7 @@ func parseAntigravityUsage(data []byte) usage.Detail {
|
|||||||
OutputTokens: node.Get("candidatesTokenCount").Int(),
|
OutputTokens: node.Get("candidatesTokenCount").Int(),
|
||||||
ReasoningTokens: node.Get("thoughtsTokenCount").Int(),
|
ReasoningTokens: node.Get("thoughtsTokenCount").Int(),
|
||||||
TotalTokens: node.Get("totalTokenCount").Int(),
|
TotalTokens: node.Get("totalTokenCount").Int(),
|
||||||
|
CachedTokens: node.Get("cachedContentTokenCount").Int(),
|
||||||
}
|
}
|
||||||
if detail.TotalTokens == 0 {
|
if detail.TotalTokens == 0 {
|
||||||
detail.TotalTokens = detail.InputTokens + detail.OutputTokens + detail.ReasoningTokens
|
detail.TotalTokens = detail.InputTokens + detail.OutputTokens + detail.ReasoningTokens
|
||||||
@@ -409,6 +414,7 @@ func parseAntigravityStreamUsage(line []byte) (usage.Detail, bool) {
|
|||||||
OutputTokens: node.Get("candidatesTokenCount").Int(),
|
OutputTokens: node.Get("candidatesTokenCount").Int(),
|
||||||
ReasoningTokens: node.Get("thoughtsTokenCount").Int(),
|
ReasoningTokens: node.Get("thoughtsTokenCount").Int(),
|
||||||
TotalTokens: node.Get("totalTokenCount").Int(),
|
TotalTokens: node.Get("totalTokenCount").Int(),
|
||||||
|
CachedTokens: node.Get("cachedContentTokenCount").Int(),
|
||||||
}
|
}
|
||||||
if detail.TotalTokens == 0 {
|
if detail.TotalTokens == 0 {
|
||||||
detail.TotalTokens = detail.InputTokens + detail.OutputTokens + detail.ReasoningTokens
|
detail.TotalTokens = detail.InputTokens + detail.OutputTokens + detail.ReasoningTokens
|
||||||
|
|||||||
Reference in New Issue
Block a user