diff --git a/src/providers/azure-openai-proxy.ts b/src/providers/azure-openai-proxy.ts index 388fb63..c5243aa 100644 --- a/src/providers/azure-openai-proxy.ts +++ b/src/providers/azure-openai-proxy.ts @@ -51,8 +51,10 @@ const checkoutUsageData = async ( const processStreamData = async ( lines: string[], + usageSaved: { value: boolean }, saveUsage: (usage: Usage) => Promise ): Promise => { + 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) } } diff --git a/src/providers/openai-proxy.ts b/src/providers/openai-proxy.ts index 2db16dd..07d95c8 100644 --- a/src/providers/openai-proxy.ts +++ b/src/providers/openai-proxy.ts @@ -39,8 +39,10 @@ const checkoutUsageData = async ( const processStreamData = async ( lines: string[], + usageSaved: { value: boolean }, saveUsage: (usage: Usage) => Promise ): Promise => { + 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) } }