fix(chat): align block indents and format multiline expressions
This commit is contained in:
@@ -197,11 +197,12 @@ class ChatViewModel(
|
|||||||
private fun handleMessageStart(event: WsEvent.MessageStart) {
|
private fun handleMessageStart(event: WsEvent.MessageStart) {
|
||||||
if (!isCurrentSession(event.sessionId)) return
|
if (!isCurrentSession(event.sessionId)) return
|
||||||
// Create the streaming message as a standalone state field.
|
// Create the streaming message as a standalone state field.
|
||||||
val msg = ChatMessage(
|
val msg =
|
||||||
role = MessageRole.ASSISTANT,
|
ChatMessage(
|
||||||
content = "",
|
role = MessageRole.ASSISTANT,
|
||||||
isStreaming = true,
|
content = "",
|
||||||
)
|
isStreaming = true,
|
||||||
|
)
|
||||||
streamingMessageId = msg.id
|
streamingMessageId = msg.id
|
||||||
_uiState.update {
|
_uiState.update {
|
||||||
it.copy(
|
it.copy(
|
||||||
@@ -219,18 +220,20 @@ class ChatViewModel(
|
|||||||
val current = state.streamingMessage
|
val current = state.streamingMessage
|
||||||
if (current != null) {
|
if (current != null) {
|
||||||
state.copy(
|
state.copy(
|
||||||
streamingMessage = current.copy(
|
streamingMessage =
|
||||||
content = current.content + event.token,
|
current.copy(
|
||||||
),
|
content = current.content + event.token,
|
||||||
|
),
|
||||||
isThinking = false,
|
isThinking = false,
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
// Fallback: no MessageStart was received — create one now
|
// Fallback: no MessageStart was received — create one now
|
||||||
val msg = ChatMessage(
|
val msg =
|
||||||
role = MessageRole.ASSISTANT,
|
ChatMessage(
|
||||||
content = event.token,
|
role = MessageRole.ASSISTANT,
|
||||||
isStreaming = true,
|
content = event.token,
|
||||||
)
|
isStreaming = true,
|
||||||
|
)
|
||||||
streamingMessageId = msg.id
|
streamingMessageId = msg.id
|
||||||
state.copy(
|
state.copy(
|
||||||
streamingMessage = msg,
|
streamingMessage = msg,
|
||||||
@@ -259,17 +262,18 @@ class ChatViewModel(
|
|||||||
|
|
||||||
_uiState.update { state ->
|
_uiState.update { state ->
|
||||||
val streaming = state.streamingMessage
|
val streaming = state.streamingMessage
|
||||||
val msg = if (streaming != null) {
|
val msg =
|
||||||
streaming.copy(
|
if (streaming != null) {
|
||||||
content = event.text,
|
streaming.copy(
|
||||||
isStreaming = false,
|
content = event.text,
|
||||||
)
|
isStreaming = false,
|
||||||
} else {
|
)
|
||||||
ChatMessage(
|
} else {
|
||||||
role = MessageRole.ASSISTANT,
|
ChatMessage(
|
||||||
content = event.text,
|
role = MessageRole.ASSISTANT,
|
||||||
)
|
content = event.text,
|
||||||
}
|
)
|
||||||
|
}
|
||||||
finalizedMsg = msg
|
finalizedMsg = msg
|
||||||
sessionId = state.currentSessionId
|
sessionId = state.currentSessionId
|
||||||
state.copy(
|
state.copy(
|
||||||
@@ -336,12 +340,13 @@ class ChatViewModel(
|
|||||||
// ── Tool events ──────────────────────────────────────────────────────
|
// ── Tool events ──────────────────────────────────────────────────────
|
||||||
|
|
||||||
private fun handleToolStart(event: WsEvent.ToolStart) {
|
private fun handleToolStart(event: WsEvent.ToolStart) {
|
||||||
val toolMessage = ChatMessage(
|
val toolMessage =
|
||||||
role = MessageRole.TOOL,
|
ChatMessage(
|
||||||
content = event.data.toString(),
|
role = MessageRole.TOOL,
|
||||||
toolName = event.name,
|
content = event.data.toString(),
|
||||||
toolStatus = ToolStatus.RUNNING,
|
toolName = event.name,
|
||||||
)
|
toolStatus = ToolStatus.RUNNING,
|
||||||
|
)
|
||||||
|
|
||||||
_uiState.update { state ->
|
_uiState.update { state ->
|
||||||
state.copy(messages = state.messages + toolMessage)
|
state.copy(messages = state.messages + toolMessage)
|
||||||
@@ -907,9 +912,10 @@ class ChatViewModel(
|
|||||||
pendingRequests.entries.filter {
|
pendingRequests.entries.filter {
|
||||||
now - it.value.createdAt > PENDING_REQUEST_TIMEOUT_MS
|
now - it.value.createdAt > PENDING_REQUEST_TIMEOUT_MS
|
||||||
}
|
}
|
||||||
for (entry in stale) {
|
for (entry in stale) {
|
||||||
pendingRequests.remove(entry.key)
|
pendingRequests.remove(entry.key)
|
||||||
Log.w(TAG, "Request timed out: ${entry.value.method} (id=${entry.key})")
|
Log.w(TAG, "Request timed out: ${entry.value.method} (id=${entry.key})")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user