fix: add fallback id to messages if none provided (#3584)
This commit is contained in:
@@ -4,6 +4,12 @@ import { getSecretKey } from '../config';
|
|||||||
import { Message, createUserMessage, hasCompletedToolCalls } from '../types/message';
|
import { Message, createUserMessage, hasCompletedToolCalls } from '../types/message';
|
||||||
import { getSessionHistory } from '../api';
|
import { getSessionHistory } from '../api';
|
||||||
|
|
||||||
|
let messageIdCounter = 0;
|
||||||
|
|
||||||
|
function generateMessageId(): string {
|
||||||
|
return `msg-${Date.now()}-${++messageIdCounter}`;
|
||||||
|
}
|
||||||
|
|
||||||
// Ensure TextDecoder is available in the global scope
|
// Ensure TextDecoder is available in the global scope
|
||||||
const TextDecoder = globalThis.TextDecoder;
|
const TextDecoder = globalThis.TextDecoder;
|
||||||
|
|
||||||
@@ -297,6 +303,8 @@ export function useMessageStream({
|
|||||||
// Create a new message object with the properties preserved or defaulted
|
// Create a new message object with the properties preserved or defaulted
|
||||||
const newMessage = {
|
const newMessage = {
|
||||||
...parsedEvent.message,
|
...parsedEvent.message,
|
||||||
|
// Ensure the message has an ID - if not provided, generate one
|
||||||
|
id: parsedEvent.message.id || generateMessageId(),
|
||||||
// Only set to true if it's undefined (preserve false values)
|
// Only set to true if it's undefined (preserve false values)
|
||||||
display:
|
display:
|
||||||
parsedEvent.message.display === undefined
|
parsedEvent.message.display === undefined
|
||||||
@@ -358,7 +366,7 @@ export function useMessageStream({
|
|||||||
// If this is a token limit error, create a contextLengthExceeded message instead of throwing
|
// If this is a token limit error, create a contextLengthExceeded message instead of throwing
|
||||||
if (isTokenLimitError) {
|
if (isTokenLimitError) {
|
||||||
const contextMessage: Message = {
|
const contextMessage: Message = {
|
||||||
id: `context-${Date.now()}`,
|
id: generateMessageId(),
|
||||||
role: 'assistant',
|
role: 'assistant',
|
||||||
created: Math.floor(Date.now() / 1000),
|
created: Math.floor(Date.now() / 1000),
|
||||||
content: [
|
content: [
|
||||||
@@ -461,7 +469,7 @@ export function useMessageStream({
|
|||||||
async (requestMessages: Message[]) => {
|
async (requestMessages: Message[]) => {
|
||||||
try {
|
try {
|
||||||
mutateLoading(true);
|
mutateLoading(true);
|
||||||
mutateWaiting(true); // Start in waiting state
|
mutateWaiting(true); // Start in waiting state
|
||||||
mutateStreaming(false);
|
mutateStreaming(false);
|
||||||
setError(undefined);
|
setError(undefined);
|
||||||
|
|
||||||
@@ -539,7 +547,17 @@ export function useMessageStream({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
[api, processMessageStream, mutateLoading, mutateWaiting, mutateStreaming, setError, onResponse, onError, maxSteps]
|
[
|
||||||
|
api,
|
||||||
|
processMessageStream,
|
||||||
|
mutateLoading,
|
||||||
|
mutateWaiting,
|
||||||
|
mutateStreaming,
|
||||||
|
setError,
|
||||||
|
onResponse,
|
||||||
|
onError,
|
||||||
|
maxSteps,
|
||||||
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
// Append a new message and send request
|
// Append a new message and send request
|
||||||
@@ -637,6 +655,7 @@ export function useMessageStream({
|
|||||||
|
|
||||||
// Create a tool response message
|
// Create a tool response message
|
||||||
const toolResponseMessage: Message = {
|
const toolResponseMessage: Message = {
|
||||||
|
id: generateMessageId(),
|
||||||
role: 'user' as const,
|
role: 'user' as const,
|
||||||
created: Math.floor(Date.now() / 1000),
|
created: Math.floor(Date.now() / 1000),
|
||||||
content: [
|
content: [
|
||||||
|
|||||||
Reference in New Issue
Block a user