Fix duplicate usage tracking for streaming
This commit is contained in:
1 parent
80a6fedbac
commit
066437fcb3
2 files changed
+18
-6
No files matched your search
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user