重构会话页面的消息渲染,支持块级虚拟化,提升长会话性能,减少卡断
This commit is contained in:
@@ -863,11 +863,9 @@ fn group_into_turns(messages: Vec<UnifiedMessage>) -> Vec<MessageTurn> {
|
||||
let turn_model = msg.model.clone();
|
||||
i += 1;
|
||||
|
||||
// Absorb consecutive assistant msgs AND tool-result-only user msgs
|
||||
while i < messages.len()
|
||||
&& (matches!(messages[i].role, MessageRole::Assistant)
|
||||
|| is_tool_result_only(&messages[i]))
|
||||
{
|
||||
// Only absorb immediately following tool-result-only user msgs
|
||||
// (stop at the next assistant message to keep turns small for virtualization)
|
||||
while i < messages.len() && is_tool_result_only(&messages[i]) {
|
||||
blocks.extend(messages[i].content.clone());
|
||||
i += 1;
|
||||
}
|
||||
|
||||
@@ -1192,9 +1192,10 @@ fn group_into_turns(messages: Vec<UnifiedMessage>) -> Vec<MessageTurn> {
|
||||
let timestamp = msg.timestamp;
|
||||
i += 1;
|
||||
|
||||
// Only absorb immediately following Tool messages
|
||||
// (stop at the next assistant message to keep turns small for virtualization)
|
||||
while i < messages.len()
|
||||
&& (matches!(messages[i].role, MessageRole::Assistant)
|
||||
|| matches!(messages[i].role, MessageRole::Tool))
|
||||
&& matches!(messages[i].role, MessageRole::Tool)
|
||||
{
|
||||
blocks.extend(messages[i].content.clone());
|
||||
if usage.is_none() {
|
||||
|
||||
@@ -681,9 +681,10 @@ fn group_into_turns(messages: Vec<UnifiedMessage>) -> Vec<MessageTurn> {
|
||||
let timestamp = msg.timestamp;
|
||||
i += 1;
|
||||
|
||||
// Only absorb immediately following Tool messages
|
||||
// (stop at the next assistant message to keep turns small for virtualization)
|
||||
while i < messages.len()
|
||||
&& (matches!(messages[i].role, MessageRole::Assistant)
|
||||
|| matches!(messages[i].role, MessageRole::Tool))
|
||||
&& matches!(messages[i].role, MessageRole::Tool)
|
||||
{
|
||||
blocks.extend(messages[i].content.clone());
|
||||
if usage.is_none() {
|
||||
|
||||
@@ -1105,9 +1105,10 @@ fn group_into_turns(messages: Vec<UnifiedMessage>) -> Vec<MessageTurn> {
|
||||
let timestamp = msg.timestamp;
|
||||
i += 1;
|
||||
|
||||
// Only absorb immediately following Tool messages
|
||||
// (stop at the next assistant message to keep turns small for virtualization)
|
||||
while i < messages.len()
|
||||
&& (matches!(messages[i].role, MessageRole::Assistant)
|
||||
|| matches!(messages[i].role, MessageRole::Tool))
|
||||
&& matches!(messages[i].role, MessageRole::Tool)
|
||||
{
|
||||
blocks.extend(messages[i].content.clone());
|
||||
if usage.is_none() {
|
||||
|
||||
@@ -667,9 +667,10 @@ fn group_into_turns(messages: Vec<UnifiedMessage>) -> Vec<MessageTurn> {
|
||||
let timestamp = msg.timestamp;
|
||||
i += 1;
|
||||
|
||||
// Only absorb immediately following Tool messages
|
||||
// (stop at the next assistant message to keep turns small for virtualization)
|
||||
while i < messages.len()
|
||||
&& (matches!(messages[i].role, MessageRole::Assistant)
|
||||
|| matches!(messages[i].role, MessageRole::Tool))
|
||||
&& matches!(messages[i].role, MessageRole::Tool)
|
||||
{
|
||||
blocks.extend(messages[i].content.clone());
|
||||
if usage.is_none() {
|
||||
|
||||
Reference in New Issue
Block a user