feat: Implement Default Preset Selection for Conversations 📌 (#1275)

* fix: type issues with icons

* refactor: use react query for presets, show toasts on preset crud, refactor mutations, remove presetsQuery from Root (breaking change)

* refactor: change preset titling

* refactor: update preset schemas and methods for necessary new properties `order` and `defaultPreset`

* feat: add `defaultPreset` Recoil value

* refactor(getPresetTitle): make logic cleaner and more concise

* feat: complete UI portion of defaultPreset feature, with animations added to preset items

* chore: remove console.logs()

* feat: complete default preset handling

* refactor: remove user sensitive values on logout

* fix: allow endpoint selection without default preset overwriting
This commit is contained in:
Danny Avila 2023-12-06 14:00:15 -05:00 committed by GitHub
parent fdb65366d7
commit ca64efec1b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
32 changed files with 681 additions and 270 deletions

View file

@ -1,6 +1,12 @@
import { useCallback } from 'react';
import { useGetEndpointsQuery } from 'librechat-data-provider';
import { useSetRecoilState, useResetRecoilState, useRecoilCallback, useRecoilState } from 'recoil';
import {
useSetRecoilState,
useResetRecoilState,
useRecoilCallback,
useRecoilState,
useRecoilValue,
} from 'recoil';
import type { TConversation, TSubmission, TPreset, TModelsConfig } from 'librechat-data-provider';
import { buildDefaultConvo, getDefaultEndpoint } from '~/utils';
import { useDeleteFilesMutation } from '~/data-provider';
@ -11,6 +17,7 @@ import store from '~/store';
const useNewConvo = (index = 0) => {
const setStorage = useSetStorage();
const navigate = useOriginNavigate();
const defaultPreset = useRecoilValue(store.defaultPreset);
const { setConversation } = store.useCreateConversationAtom(index);
const [files, setFiles] = useRecoilState(store.filesByIndex(index));
const setSubmission = useSetRecoilState<TSubmission | null>(store.submissionByIndex(index));
@ -36,17 +43,29 @@ const useNewConvo = (index = 0) => {
) => {
const modelsConfig = modelsData ?? snapshot.getLoadable(store.modelsConfig).contents;
const { endpoint = null } = conversation;
const buildDefaultConversation = endpoint === null || buildDefault;
const activePreset =
// use default preset only when it's defined,
// preset is not provided,
// endpoint matches or is null (to allow endpoint change),
// and buildDefaultConversation is true
defaultPreset &&
!preset &&
(defaultPreset.endpoint === endpoint || !endpoint) &&
buildDefaultConversation
? defaultPreset
: preset;
if (endpoint === null || buildDefault) {
if (buildDefaultConversation) {
const defaultEndpoint = getDefaultEndpoint({
convoSetup: preset ?? conversation,
convoSetup: activePreset ?? conversation,
endpointsConfig,
});
const models = modelsConfig?.[defaultEndpoint] ?? [];
conversation = buildDefaultConvo({
conversation,
lastConversationSetup: preset as TConversation,
lastConversationSetup: activePreset as TConversation,
endpoint: defaultEndpoint,
models,
});
@ -61,7 +80,7 @@ const useNewConvo = (index = 0) => {
navigate('new');
}
},
[endpointsConfig],
[endpointsConfig, defaultPreset],
);
const newConversation = useCallback(