@@ -437,8 +437,8 @@ function groupParts(parts: { messageID: string; part: PartType }[]) {
437437 return result
438438}
439439
440- function partByID ( parts : readonly PartType [ ] , partID : string ) {
441- return parts . find ( ( part ) => part . id === partID )
440+ function index < T extends { id : string } > ( items : readonly T [ ] ) {
441+ return new Map ( items . map ( ( item ) => [ item . id , item ] as const ) )
442442}
443443
444444function renderable ( part : PartType , showReasoningSummaries = true ) {
@@ -474,6 +474,13 @@ export function AssistantParts(props: {
474474 const data = useData ( )
475475 const emptyParts : PartType [ ] = [ ]
476476 const emptyTools : ToolPart [ ] = [ ]
477+ const msgs = createMemo ( ( ) => index ( props . messages ) )
478+ const part = createMemo (
479+ ( ) =>
480+ new Map (
481+ props . messages . map ( ( message ) => [ message . id , index ( list ( data . store . part ?. [ message . id ] , emptyParts ) ) ] as const ) ,
482+ ) ,
483+ )
477484
478485 const grouped = createMemo (
479486 ( ) =>
@@ -507,7 +514,7 @@ export function AssistantParts(props: {
507514 const entry = entryAccessor ( )
508515 if ( entry . type !== "context" ) return emptyTools
509516 return entry . refs
510- . map ( ( ref ) => partByID ( list ( data . store . part ?. [ ref . messageID ] , emptyParts ) , ref . partID ) )
517+ . map ( ( ref ) => part ( ) . get ( ref . messageID ) ?. get ( ref . partID ) )
511518 . filter ( ( part ) : part is ToolPart => ! ! part && isContextGroupTool ( part ) )
512519 } ,
513520 emptyTools ,
@@ -527,23 +534,23 @@ export function AssistantParts(props: {
527534 const message = createMemo ( ( ) => {
528535 const entry = entryAccessor ( )
529536 if ( entry . type !== "part" ) return
530- return props . messages . find ( ( item ) => item . id === entry . ref . messageID )
537+ return msgs ( ) . get ( entry . ref . messageID )
531538 } )
532- const part = createMemo ( ( ) => {
539+ const item = createMemo ( ( ) => {
533540 const entry = entryAccessor ( )
534541 if ( entry . type !== "part" ) return
535- return partByID ( list ( data . store . part ?. [ entry . ref . messageID ] , emptyParts ) , entry . ref . partID )
542+ return part ( ) . get ( entry . ref . messageID ) ?. get ( entry . ref . partID )
536543 } )
537544
538545 return (
539546 < Show when = { message ( ) } >
540- < Show when = { part ( ) } >
547+ < Show when = { item ( ) } >
541548 < Part
542- part = { part ( ) ! }
549+ part = { item ( ) ! }
543550 message = { message ( ) ! }
544551 showAssistantCopyPartID = { props . showAssistantCopyPartID }
545552 turnDurationMs = { props . turnDurationMs }
546- defaultOpen = { partDefaultOpen ( part ( ) ! , props . shellToolDefaultOpen , props . editToolDefaultOpen ) }
553+ defaultOpen = { partDefaultOpen ( item ( ) ! , props . shellToolDefaultOpen , props . editToolDefaultOpen ) }
547554 />
548555 </ Show >
549556 </ Show >
@@ -695,6 +702,7 @@ export function AssistantMessageDisplay(props: {
695702 showReasoningSummaries ?: boolean
696703} ) {
697704 const emptyTools : ToolPart [ ] = [ ]
705+ const part = createMemo ( ( ) => index ( props . parts ) )
698706 const grouped = createMemo (
699707 ( ) =>
700708 groupParts (
@@ -723,7 +731,7 @@ export function AssistantMessageDisplay(props: {
723731 const entry = entryAccessor ( )
724732 if ( entry . type !== "context" ) return emptyTools
725733 return entry . refs
726- . map ( ( ref ) => partByID ( props . parts , ref . partID ) )
734+ . map ( ( ref ) => part ( ) . get ( ref . partID ) )
727735 . filter ( ( part ) : part is ToolPart => ! ! part && isContextGroupTool ( part ) )
728736 } ,
729737 emptyTools ,
@@ -739,16 +747,16 @@ export function AssistantMessageDisplay(props: {
739747 </ Match >
740748 < Match when = { entryType ( ) === "part" } >
741749 { ( ( ) => {
742- const part = createMemo ( ( ) => {
750+ const item = createMemo ( ( ) => {
743751 const entry = entryAccessor ( )
744752 if ( entry . type !== "part" ) return
745- return partByID ( props . parts , entry . ref . partID )
753+ return part ( ) . get ( entry . ref . partID )
746754 } )
747755
748756 return (
749- < Show when = { part ( ) } >
757+ < Show when = { item ( ) } >
750758 < Part
751- part = { part ( ) ! }
759+ part = { item ( ) ! }
752760 message = { props . message }
753761 showAssistantCopyPartID = { props . showAssistantCopyPartID }
754762 />
0 commit comments