refactor(playground): extract message update utilities
- move assistant message update helpers into a focused playground utility. - keep error-state message updates separate from core message construction helpers.
This commit is contained in:
@@ -19,6 +19,7 @@ For commercial licensing, please contact support@quantumnous.com
|
||||
export * from './message-utils'
|
||||
export * from './message-reasoning-utils'
|
||||
export * from './message-streaming-utils'
|
||||
export * from './message-update-utils'
|
||||
export * from './payload-builder'
|
||||
export * from './storage'
|
||||
export * from './message-styles'
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
Copyright (C) 2023-2026 QuantumNous
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
For commercial licensing, please contact support@quantumnous.com
|
||||
*/
|
||||
import { ERROR_MESSAGES, MESSAGE_ROLES, MESSAGE_STATUS } from '../constants'
|
||||
import type { Message } from '../types'
|
||||
import { updateCurrentVersionContent } from './message-utils'
|
||||
|
||||
/**
|
||||
* Update the last assistant message with an error.
|
||||
*/
|
||||
export function updateAssistantMessageWithError(
|
||||
messages: Message[],
|
||||
errorMessage: string,
|
||||
errorCode?: string
|
||||
): Message[] {
|
||||
return updateLastAssistantMessage(messages, (message) => {
|
||||
const updatedMessage = updateCurrentVersionContent(
|
||||
message,
|
||||
`${ERROR_MESSAGES.API_REQUEST_ERROR}: ${errorMessage}`
|
||||
)
|
||||
|
||||
return {
|
||||
...updatedMessage,
|
||||
status: MESSAGE_STATUS.ERROR,
|
||||
isReasoningStreaming: false,
|
||||
errorCode: errorCode || null,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the most recent assistant message, preserving the array when absent.
|
||||
*/
|
||||
export function updateLastAssistantMessage(
|
||||
messages: Message[],
|
||||
updater: (message: Message) => Message
|
||||
): Message[] {
|
||||
if (messages.length === 0) return messages
|
||||
|
||||
const last = messages[messages.length - 1]
|
||||
if (!last || last.from !== MESSAGE_ROLES.ASSISTANT) return messages
|
||||
|
||||
const updated = [...messages]
|
||||
updated[updated.length - 1] = updater(last)
|
||||
return updated
|
||||
}
|
||||
+1
-45
@@ -17,7 +17,7 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
For commercial licensing, please contact support@quantumnous.com
|
||||
*/
|
||||
import { nanoid } from 'nanoid'
|
||||
import { MESSAGE_ROLES, MESSAGE_STATUS, ERROR_MESSAGES } from '../constants'
|
||||
import { MESSAGE_ROLES, MESSAGE_STATUS } from '../constants'
|
||||
import type {
|
||||
Message,
|
||||
MessageVersion,
|
||||
@@ -163,47 +163,3 @@ export function isValidMessage(message: Message): boolean {
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the last assistant message with an error
|
||||
* @param messages - Current messages array
|
||||
* @param errorMessage - Error message to display
|
||||
* @returns Updated messages array
|
||||
*/
|
||||
export function updateAssistantMessageWithError(
|
||||
messages: Message[],
|
||||
errorMessage: string,
|
||||
errorCode?: string
|
||||
): Message[] {
|
||||
return updateLastAssistantMessage(messages, (message) => {
|
||||
const updatedMessage = updateCurrentVersionContent(
|
||||
message,
|
||||
`${ERROR_MESSAGES.API_REQUEST_ERROR}: ${errorMessage}`
|
||||
)
|
||||
return {
|
||||
...updatedMessage,
|
||||
status: MESSAGE_STATUS.ERROR,
|
||||
isReasoningStreaming: false,
|
||||
errorCode: errorCode || null,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to update the last assistant message
|
||||
* @param messages - Current messages array
|
||||
* @param updater - Function to update the message
|
||||
* @returns Updated messages array or original if no assistant message found
|
||||
*/
|
||||
export function updateLastAssistantMessage(
|
||||
messages: Message[],
|
||||
updater: (message: Message) => Message
|
||||
): Message[] {
|
||||
if (messages.length === 0) return messages
|
||||
const last = messages[messages.length - 1]
|
||||
if (!last || last.from !== MESSAGE_ROLES.ASSISTANT) return messages
|
||||
|
||||
const updated = [...messages]
|
||||
updated[updated.length - 1] = updater(last)
|
||||
return updated
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user