Fix duplicate usage tracking for streaming

This commit is contained in:
dreamhunter2333 committed 2026-01-02 01:42:10 +08:00
1 parent 80a6fedbac
commit 066437fcb3
2 files changed
+18 -6

No files matched your search

+9 -3
View File
@@ -51,8 +51,10 @@ const checkoutUsageData = async (
const processStreamData = async (
lines: string[],
usageSaved: { value: boolean },
saveUsage: (usage: Usage) => Promise<void>
): Promise<void> => {
if (usageSaved.value) return
const processedLines = lines
.map(line => line.trim())
.filter(line => line.length > 0 && line.startsWith('data:'))
@@ -62,7 +64,10 @@ const processStreamData = async (
for (const jsonContent of processedLines) {
try {
const res = JSON.parse(jsonContent) as OpenAIResponse
await checkoutUsageData(saveUsage, res)
if (!res.usage) continue
await saveUsage(res.usage)
usageSaved.value = true
break
} catch (e) {
console.error("Error parsing stream data:", e)
}
@@ -81,6 +86,7 @@ const handleStreamResponse = async (
const decoder = new TextDecoder('utf-8')
let buffer = ""
const usageSaved = { value: false }
while (true) {
const { done, value } = await reader.read()
if (done) break
@@ -93,12 +99,12 @@ const handleStreamResponse = async (
const lines = buffer.split('\n')
buffer = lines.pop() || ""
await processStreamData(lines, saveUsage)
await processStreamData(lines, usageSaved, saveUsage)
}
// 处理最后剩余的数据
if (buffer.trim()) {
await processStreamData([buffer], saveUsage)
await processStreamData([buffer], usageSaved, saveUsage)
}
}
+9 -3
View File
@@ -39,8 +39,10 @@ const checkoutUsageData = async (
const processStreamData = async (
lines: string[],
usageSaved: { value: boolean },
saveUsage: (usage: Usage) => Promise<void>
): Promise<void> => {
if (usageSaved.value) return
const processedLines = lines
.map(line => line.trim())
.filter(line => line.length > 0 && line.startsWith('data:'))
@@ -50,7 +52,10 @@ const processStreamData = async (
for (const jsonContent of processedLines) {
try {
const res = JSON.parse(jsonContent) as OpenAIResponse
await checkoutUsageData(saveUsage, res)
if (!res.usage) continue
await saveUsage(res.usage)
usageSaved.value = true
break
} catch (e) {
console.error("Error parsing stream data:", e)
}
@@ -69,6 +74,7 @@ const handleStreamResponse = async (
const decoder = new TextDecoder('utf-8')
let buffer = ""
const usageSaved = { value: false }
while (true) {
const { done, value } = await reader.read()
if (done) break
@@ -81,12 +87,12 @@ const handleStreamResponse = async (
const lines = buffer.split('\n')
buffer = lines.pop() || ""
await processStreamData(lines, saveUsage)
await processStreamData(lines, usageSaved, saveUsage)
}
// 处理最后剩余的数据
if (buffer.trim()) {
await processStreamData([buffer], saveUsage)
await processStreamData([buffer], usageSaved, saveUsage)
}
}