|
16 | 16 | */
|
17 | 17 |
|
18 | 18 | import {
|
19 |
| - CitationSource, |
20 |
| - Content, |
| 19 | + Citation, |
| 20 | + CitationMetadata, |
21 | 21 | CountTokensResponse,
|
22 | 22 | GenerateContentCandidate,
|
23 | 23 | GenerateContentResponse,
|
@@ -199,23 +199,14 @@ export function aggregateResponses(
|
199 | 199 | },
|
200 | 200 | } as GenerateContentCandidate;
|
201 | 201 | }
|
202 |
| - if (response.candidates[i].citationMetadata) { |
203 |
| - if ( |
204 |
| - !aggregatedResponse.candidates[i].citationMetadata?.citationSources |
205 |
| - ) { |
206 |
| - aggregatedResponse.candidates[i].citationMetadata = { |
207 |
| - citationSources: [] as CitationSource[], |
208 |
| - }; |
209 |
| - } |
210 |
| - |
211 |
| - const existingMetadata = response.candidates[i].citationMetadata ?? {}; |
212 |
| - |
213 |
| - if (aggregatedResponse.candidates[i].citationMetadata) { |
214 |
| - aggregatedResponse.candidates[i].citationMetadata!.citationSources = |
215 |
| - aggregatedResponse.candidates[ |
216 |
| - i |
217 |
| - ].citationMetadata!.citationSources.concat(existingMetadata); |
218 |
| - } |
| 202 | + const citationMetadataAggregated: CitationMetadata | undefined = |
| 203 | + aggregateCitationMetadataForCandidate( |
| 204 | + response.candidates[i], |
| 205 | + aggregatedResponse.candidates[i] |
| 206 | + ); |
| 207 | + if (citationMetadataAggregated) { |
| 208 | + aggregatedResponse.candidates[i].citationMetadata = |
| 209 | + citationMetadataAggregated; |
219 | 210 | }
|
220 | 211 | const finishResonOfChunk = response.candidates[i].finishReason;
|
221 | 212 | if (finishResonOfChunk) {
|
@@ -260,6 +251,29 @@ export function aggregateResponses(
|
260 | 251 | return aggregatedResponse;
|
261 | 252 | }
|
262 | 253 |
|
| 254 | +function aggregateCitationMetadataForCandidate( |
| 255 | + candidateChunk: GenerateContentCandidate, |
| 256 | + aggregatedCandidate: GenerateContentCandidate |
| 257 | +): CitationMetadata | undefined { |
| 258 | + if (!candidateChunk.citationMetadata) { |
| 259 | + return; |
| 260 | + } |
| 261 | + const emptyCitationMetadata: CitationMetadata = { |
| 262 | + citations: [], |
| 263 | + }; |
| 264 | + const citationMetadataAggregated: CitationMetadata = |
| 265 | + aggregatedCandidate.citationMetadata ?? emptyCitationMetadata; |
| 266 | + const citationMetadataChunk: CitationMetadata = |
| 267 | + candidateChunk.citationMetadata!; |
| 268 | + if (citationMetadataChunk.citations) { |
| 269 | + citationMetadataAggregated.citations = |
| 270 | + citationMetadataAggregated.citations!.concat( |
| 271 | + citationMetadataChunk.citations |
| 272 | + ); |
| 273 | + } |
| 274 | + return citationMetadataAggregated; |
| 275 | +} |
| 276 | + |
263 | 277 | function aggregateGroundingMetadataForCandidate(
|
264 | 278 | candidateChunk: GenerateContentCandidate,
|
265 | 279 | aggregatedCandidate: GenerateContentCandidate
|
|
0 commit comments