diff --git a/js/plugins/google-genai/src/common/utils.ts b/js/plugins/google-genai/src/common/utils.ts index cc9362e430..5ea1bbfea7 100644 --- a/js/plugins/google-genai/src/common/utils.ts +++ b/js/plugins/google-genai/src/common/utils.ts @@ -394,12 +394,18 @@ async function* generateResponseSequence( stream: ReadableStream ): AsyncGenerator { const reader = stream.getReader(); - while (true) { - const { value, done } = await reader.read(); - if (done) { - break; + try { + while (true) { + const { value, done } = await reader.read(); + if (done) { + break; + } + yield value; } - yield value; + } catch (error) { + throw error; + } finally { + reader.releaseLock(); } } @@ -408,12 +414,22 @@ async function getResponsePromise( ): Promise { const allResponses: GenerateContentResponse[] = []; const reader = stream.getReader(); - while (true) { - const { done, value } = await reader.read(); - if (done) { + try { + while (true) { + const { done, value } = await reader.read(); + if (done) { + return aggregateResponses(allResponses); + } + allResponses.push(value); + } + } catch (error) { + if (allResponses.length) { return aggregateResponses(allResponses); } - allResponses.push(value); + + throw error; + } finally { + reader.releaseLock(); } }