Skip to content

Commit 070bcdc

Browse files
authoredFeb 19, 2025··
Fix the issues #310 and #309 (#311)
* Fix the issues #310 and #309
1 parent 2df2af0 commit 070bcdc

File tree

2 files changed

+19
-12
lines changed

2 files changed

+19
-12
lines changed
 

Diff for: ‎.changeset/flat-gorillas-happen.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@google/generative-ai": patch
3+
---
4+
5+
Fix undefined candidate index.

Diff for: ‎src/requests/stream-reader.ts

+14-12
Original file line numberDiff line numberDiff line change
@@ -140,34 +140,35 @@ export function aggregateResponses(
140140
};
141141
for (const response of responses) {
142142
if (response.candidates) {
143+
let candidateIndex = 0;
143144
for (const candidate of response.candidates) {
144-
const i = candidate.index;
145145
if (!aggregatedResponse.candidates) {
146146
aggregatedResponse.candidates = [];
147147
}
148-
if (!aggregatedResponse.candidates[i]) {
149-
aggregatedResponse.candidates[i] = {
150-
index: candidate.index,
148+
if (!aggregatedResponse.candidates[candidateIndex]) {
149+
aggregatedResponse.candidates[candidateIndex] = {
150+
index: candidateIndex,
151151
} as GenerateContentCandidate;
152152
}
153153
// Keep overwriting, the last one will be final
154-
aggregatedResponse.candidates[i].citationMetadata =
154+
aggregatedResponse.candidates[candidateIndex].citationMetadata =
155155
candidate.citationMetadata;
156-
aggregatedResponse.candidates[i].groundingMetadata =
156+
aggregatedResponse.candidates[candidateIndex].groundingMetadata =
157157
candidate.groundingMetadata;
158-
aggregatedResponse.candidates[i].finishReason = candidate.finishReason;
159-
aggregatedResponse.candidates[i].finishMessage =
158+
aggregatedResponse.candidates[candidateIndex].finishReason =
159+
candidate.finishReason;
160+
aggregatedResponse.candidates[candidateIndex].finishMessage =
160161
candidate.finishMessage;
161-
aggregatedResponse.candidates[i].safetyRatings =
162+
aggregatedResponse.candidates[candidateIndex].safetyRatings =
162163
candidate.safetyRatings;
163164

164165
/**
165166
* Candidates should always have content and parts, but this handles
166167
* possible malformed responses.
167168
*/
168169
if (candidate.content && candidate.content.parts) {
169-
if (!aggregatedResponse.candidates[i].content) {
170-
aggregatedResponse.candidates[i].content = {
170+
if (!aggregatedResponse.candidates[candidateIndex].content) {
171+
aggregatedResponse.candidates[candidateIndex].content = {
171172
role: candidate.content.role || "user",
172173
parts: [],
173174
};
@@ -189,12 +190,13 @@ export function aggregateResponses(
189190
if (Object.keys(newPart).length === 0) {
190191
newPart.text = "";
191192
}
192-
aggregatedResponse.candidates[i].content.parts.push(
193+
aggregatedResponse.candidates[candidateIndex].content.parts.push(
193194
newPart as Part,
194195
);
195196
}
196197
}
197198
}
199+
candidateIndex++;
198200
}
199201
if (response.usageMetadata) {
200202
aggregatedResponse.usageMetadata = response.usageMetadata;

0 commit comments

Comments
 (0)
Please sign in to comment.