@@ -418,8 +418,12 @@ export function _mergeDicts(
418418 if ( key === "type" ) {
419419 // Do not merge 'type' fields
420420 continue ;
421+ } else if ( [ "id" , "output_version" , "model_provider" ] . includes ( key ) ) {
422+ // Keep the incoming value for these fields
423+ merged [ key ] = value ;
424+ } else {
425+ merged [ key ] += value ;
421426 }
422- merged [ key ] += value ;
423427 } else if ( typeof merged [ key ] === "object" && ! Array . isArray ( merged [ key ] ) ) {
424428 merged [ key ] = _mergeDicts ( merged [ key ] , value ) ;
425429 } else if ( Array . isArray ( merged [ key ] ) ) {
@@ -435,8 +439,10 @@ export function _mergeDicts(
435439 return merged ;
436440}
437441
438- // eslint-disable-next-line @typescript-eslint/no-explicit-any
439- export function _mergeLists ( left ?: any [ ] , right ?: any [ ] ) {
442+ export function _mergeLists < Content extends MessageContentComplex > (
443+ left ?: Content [ ] ,
444+ right ?: Content [ ]
445+ ) : Content [ ] | undefined {
440446 if ( left === undefined && right === undefined ) {
441447 return undefined ;
442448 } else if ( left === undefined || right === undefined ) {
@@ -446,19 +452,36 @@ export function _mergeLists(left?: any[], right?: any[]) {
446452 for ( const item of right ) {
447453 if (
448454 typeof item === "object" &&
455+ item !== null &&
449456 "index" in item &&
450457 typeof item . index === "number"
451458 ) {
452459 const toMerge = merged . findIndex (
453- ( leftItem ) => leftItem . index === item . index
460+ ( leftItem ) =>
461+ leftItem !== null &&
462+ typeof leftItem === "object" &&
463+ "index" in leftItem &&
464+ leftItem . index === item . index &&
465+ // Only merge if IDs match (or both are undefined)
466+ ( "id" in leftItem && "id" in item
467+ ? leftItem . id === item . id
468+ : ! ( "id" in leftItem ) && ! ( "id" in item ) )
454469 ) ;
455- if ( toMerge !== - 1 ) {
456- merged [ toMerge ] = _mergeDicts ( merged [ toMerge ] , item ) ;
470+ if (
471+ toMerge !== - 1 &&
472+ typeof merged [ toMerge ] === "object" &&
473+ merged [ toMerge ] !== null
474+ ) {
475+ merged [ toMerge ] = _mergeDicts (
476+ merged [ toMerge ] as Record < string , unknown > ,
477+ item as Record < string , unknown >
478+ ) as Content ;
457479 } else {
458480 merged . push ( item ) ;
459481 }
460482 } else if (
461483 typeof item === "object" &&
484+ item !== null &&
462485 "text" in item &&
463486 item . text === ""
464487 ) {
0 commit comments