mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-01-08 19:48:51 +01:00
⌚ fix: Wait for Initial Message Save & Correct Latest Message (#3399)
* chore: assistants, unsupported assistant, better logging * chore: remove unnecessary logger in validateAssistant middleware * fix: resolve initial conversation save/promise before saving response * chore: Import and organize dependencies in Speech component * fix: conversation statefulness - Latest Message (at index 0) should not be reset if existing convo - add debugging context for clearAllLatestMessages - Added logging concerning latest Message updates (dev mode only) - update latest message Set logic, also checks for change in conversation Id - consolidated latest message helpers to client/src/utils/messages.ts
This commit is contained in:
parent
9e7615f832
commit
2ad097647c
25 changed files with 275 additions and 113 deletions
|
|
@ -8,7 +8,7 @@ import {
|
|||
useSetRecoilState,
|
||||
useRecoilCallback,
|
||||
} from 'recoil';
|
||||
import { LocalStorageKeys } from 'librechat-data-provider';
|
||||
import { LocalStorageKeys, Constants } from 'librechat-data-provider';
|
||||
import type { TMessage, TPreset, TConversation, TSubmission } from 'librechat-data-provider';
|
||||
import type { TOptionSettings, ExtendedFile } from '~/common';
|
||||
import { storeEndpointSettings, logger } from '~/utils';
|
||||
|
|
@ -27,6 +27,14 @@ const submissionKeysAtom = atom<(string | number)[]>({
|
|||
const latestMessageFamily = atomFamily<TMessage | null, string | number | null>({
|
||||
key: 'latestMessageByIndex',
|
||||
default: null,
|
||||
effects: [
|
||||
({ onSet, node }) => {
|
||||
onSet(async (newValue) => {
|
||||
const key = Number(node.key.split(Constants.COMMON_DIVIDER)[1]);
|
||||
logger.log('Recoil Effect: Setting latestMessage', { key, newValue });
|
||||
});
|
||||
},
|
||||
] as const,
|
||||
});
|
||||
|
||||
const submissionByIndex = atomFamily<TSubmission | null, string | number>({
|
||||
|
|
@ -41,7 +49,7 @@ const latestMessageKeysSelector = selector<(string | number)[]>({
|
|||
return keys.filter((key) => get(latestMessageFamily(key)) !== null);
|
||||
},
|
||||
set: ({ set }, newKeys) => {
|
||||
logger.log('setting latestMessageKeys', newKeys);
|
||||
logger.log('setting latestMessageKeys', { newKeys });
|
||||
set(latestMessageKeysAtom, newKeys);
|
||||
},
|
||||
});
|
||||
|
|
@ -279,19 +287,22 @@ function useClearSubmissionState() {
|
|||
return clearAllSubmissions;
|
||||
}
|
||||
|
||||
function useClearLatestMessages() {
|
||||
function useClearLatestMessages(context?: string) {
|
||||
const clearAllLatestMessages = useRecoilCallback(
|
||||
({ reset, set, snapshot }) =>
|
||||
async (skipFirst?: boolean) => {
|
||||
const latestMessageKeys = await snapshot.getPromise(latestMessageKeysSelector);
|
||||
logger.log('latestMessageKeys', latestMessageKeys);
|
||||
logger.log('[clearAllLatestMessages] latestMessageKeys', latestMessageKeys);
|
||||
if (context) {
|
||||
logger.log(`[clearAllLatestMessages] context: ${context}`);
|
||||
}
|
||||
|
||||
for (const key of latestMessageKeys) {
|
||||
if (skipFirst && key == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
logger.log('resetting latest message', key);
|
||||
logger.log(`[clearAllLatestMessages] resetting latest message; key: ${key}`);
|
||||
reset(latestMessageFamily(key));
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue