perf(app): trim session render work (#16987)
This commit is contained in:
@@ -764,6 +764,7 @@ export function MessageTimeline(props: {
|
|||||||
"min-w-0 w-full max-w-full": true,
|
"min-w-0 w-full max-w-full": true,
|
||||||
"md:max-w-200 2xl:max-w-[1000px]": props.centered,
|
"md:max-w-200 2xl:max-w-[1000px]": props.centered,
|
||||||
}}
|
}}
|
||||||
|
style={{ "content-visibility": "auto", "contain-intrinsic-size": "auto 500px" }}
|
||||||
>
|
>
|
||||||
<Show when={commentCount() > 0}>
|
<Show when={commentCount() > 0}>
|
||||||
<div class="w-full px-4 md:px-5 pb-2">
|
<div class="w-full px-4 md:px-5 pb-2">
|
||||||
|
|||||||
@@ -437,8 +437,8 @@ function groupParts(parts: { messageID: string; part: PartType }[]) {
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
function partByID(parts: readonly PartType[], partID: string) {
|
function index<T extends { id: string }>(items: readonly T[]) {
|
||||||
return parts.find((part) => part.id === partID)
|
return new Map(items.map((item) => [item.id, item] as const))
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderable(part: PartType, showReasoningSummaries = true) {
|
function renderable(part: PartType, showReasoningSummaries = true) {
|
||||||
@@ -474,6 +474,13 @@ export function AssistantParts(props: {
|
|||||||
const data = useData()
|
const data = useData()
|
||||||
const emptyParts: PartType[] = []
|
const emptyParts: PartType[] = []
|
||||||
const emptyTools: ToolPart[] = []
|
const emptyTools: ToolPart[] = []
|
||||||
|
const msgs = createMemo(() => index(props.messages))
|
||||||
|
const part = createMemo(
|
||||||
|
() =>
|
||||||
|
new Map(
|
||||||
|
props.messages.map((message) => [message.id, index(list(data.store.part?.[message.id], emptyParts))] as const),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
const grouped = createMemo(
|
const grouped = createMemo(
|
||||||
() =>
|
() =>
|
||||||
@@ -507,7 +514,7 @@ export function AssistantParts(props: {
|
|||||||
const entry = entryAccessor()
|
const entry = entryAccessor()
|
||||||
if (entry.type !== "context") return emptyTools
|
if (entry.type !== "context") return emptyTools
|
||||||
return entry.refs
|
return entry.refs
|
||||||
.map((ref) => partByID(list(data.store.part?.[ref.messageID], emptyParts), ref.partID))
|
.map((ref) => part().get(ref.messageID)?.get(ref.partID))
|
||||||
.filter((part): part is ToolPart => !!part && isContextGroupTool(part))
|
.filter((part): part is ToolPart => !!part && isContextGroupTool(part))
|
||||||
},
|
},
|
||||||
emptyTools,
|
emptyTools,
|
||||||
@@ -527,23 +534,23 @@ export function AssistantParts(props: {
|
|||||||
const message = createMemo(() => {
|
const message = createMemo(() => {
|
||||||
const entry = entryAccessor()
|
const entry = entryAccessor()
|
||||||
if (entry.type !== "part") return
|
if (entry.type !== "part") return
|
||||||
return props.messages.find((item) => item.id === entry.ref.messageID)
|
return msgs().get(entry.ref.messageID)
|
||||||
})
|
})
|
||||||
const part = createMemo(() => {
|
const item = createMemo(() => {
|
||||||
const entry = entryAccessor()
|
const entry = entryAccessor()
|
||||||
if (entry.type !== "part") return
|
if (entry.type !== "part") return
|
||||||
return partByID(list(data.store.part?.[entry.ref.messageID], emptyParts), entry.ref.partID)
|
return part().get(entry.ref.messageID)?.get(entry.ref.partID)
|
||||||
})
|
})
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Show when={message()}>
|
<Show when={message()}>
|
||||||
<Show when={part()}>
|
<Show when={item()}>
|
||||||
<Part
|
<Part
|
||||||
part={part()!}
|
part={item()!}
|
||||||
message={message()!}
|
message={message()!}
|
||||||
showAssistantCopyPartID={props.showAssistantCopyPartID}
|
showAssistantCopyPartID={props.showAssistantCopyPartID}
|
||||||
turnDurationMs={props.turnDurationMs}
|
turnDurationMs={props.turnDurationMs}
|
||||||
defaultOpen={partDefaultOpen(part()!, props.shellToolDefaultOpen, props.editToolDefaultOpen)}
|
defaultOpen={partDefaultOpen(item()!, props.shellToolDefaultOpen, props.editToolDefaultOpen)}
|
||||||
/>
|
/>
|
||||||
</Show>
|
</Show>
|
||||||
</Show>
|
</Show>
|
||||||
@@ -695,6 +702,7 @@ export function AssistantMessageDisplay(props: {
|
|||||||
showReasoningSummaries?: boolean
|
showReasoningSummaries?: boolean
|
||||||
}) {
|
}) {
|
||||||
const emptyTools: ToolPart[] = []
|
const emptyTools: ToolPart[] = []
|
||||||
|
const part = createMemo(() => index(props.parts))
|
||||||
const grouped = createMemo(
|
const grouped = createMemo(
|
||||||
() =>
|
() =>
|
||||||
groupParts(
|
groupParts(
|
||||||
@@ -723,7 +731,7 @@ export function AssistantMessageDisplay(props: {
|
|||||||
const entry = entryAccessor()
|
const entry = entryAccessor()
|
||||||
if (entry.type !== "context") return emptyTools
|
if (entry.type !== "context") return emptyTools
|
||||||
return entry.refs
|
return entry.refs
|
||||||
.map((ref) => partByID(props.parts, ref.partID))
|
.map((ref) => part().get(ref.partID))
|
||||||
.filter((part): part is ToolPart => !!part && isContextGroupTool(part))
|
.filter((part): part is ToolPart => !!part && isContextGroupTool(part))
|
||||||
},
|
},
|
||||||
emptyTools,
|
emptyTools,
|
||||||
@@ -739,16 +747,16 @@ export function AssistantMessageDisplay(props: {
|
|||||||
</Match>
|
</Match>
|
||||||
<Match when={entryType() === "part"}>
|
<Match when={entryType() === "part"}>
|
||||||
{(() => {
|
{(() => {
|
||||||
const part = createMemo(() => {
|
const item = createMemo(() => {
|
||||||
const entry = entryAccessor()
|
const entry = entryAccessor()
|
||||||
if (entry.type !== "part") return
|
if (entry.type !== "part") return
|
||||||
return partByID(props.parts, entry.ref.partID)
|
return part().get(entry.ref.partID)
|
||||||
})
|
})
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Show when={part()}>
|
<Show when={item()}>
|
||||||
<Part
|
<Part
|
||||||
part={part()!}
|
part={item()!}
|
||||||
message={props.message}
|
message={props.message}
|
||||||
showAssistantCopyPartID={props.showAssistantCopyPartID}
|
showAssistantCopyPartID={props.showAssistantCopyPartID}
|
||||||
/>
|
/>
|
||||||
|
|||||||
Reference in New Issue
Block a user