in google/generativeai/types/generation_types.py [0:0]
def _join_candidate_lists(candidate_lists: Iterable[list[protos.Candidate]]):
"""Joins stream chunks where each chunk is a list of candidate chunks."""
# Assuming that is a candidate ends, it is no longer returned in the list of
# candidates and that's why candidates have an index
candidates = collections.defaultdict(list)
for candidate_list in candidate_lists:
for candidate in candidate_list:
candidates[candidate.index].append(candidate)
new_candidates = []
for index, candidate_parts in sorted(candidates.items()):
new_candidates.append(_join_candidates(candidate_parts))
return new_candidates