mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-01-25 11:46:12 +01:00
feat: new endpoint-style structure in client side
NOT FINISHED. model menu and icon and send message not work.
This commit is contained in:
parent
dd825dc6d4
commit
c53778e7c1
10 changed files with 172 additions and 243 deletions
|
|
@ -1,23 +1,34 @@
|
|||
import models from './models';
|
||||
import endpoints from './endpoints';
|
||||
import { atom, selector, useSetRecoilState, useResetRecoilState, useRecoilCallback } from 'recoil';
|
||||
import buildTree from '~/utils/buildTree';
|
||||
import getDefaultConversation from '~/utils/getDefaultConversation';
|
||||
|
||||
// current conversation, can be null (need to be fetched from server)
|
||||
// sample structure
|
||||
// {
|
||||
// conversationId: "new",
|
||||
// title: "New Chat",
|
||||
// conversationId: 'new',
|
||||
// title: 'New Chat',
|
||||
// user: null,
|
||||
// // endpoint: [azureOpenAI, openAI, bingAI, chatGPTBrowser]
|
||||
// endpoint: 'azureOpenAI',
|
||||
// // for azureOpenAI, openAI, chatGPTBrowser only
|
||||
// model: 'gpt-3.5-turbo',
|
||||
// // for azureOpenAI, openAI only
|
||||
// chatGptLabel: null,
|
||||
// promptPrefix: null,
|
||||
// temperature: 0.8,
|
||||
// top_p: 1,
|
||||
// presence_penalty: 1,
|
||||
// // for bingAI only
|
||||
// jailbreak: false,
|
||||
// jailbreakConversationId: null,
|
||||
// conversationSignature: null,
|
||||
// clientId: null,
|
||||
// invocationId: null,
|
||||
// model: "chatgpt",
|
||||
// chatGptLabel: null,
|
||||
// promptPrefix: null,
|
||||
// user: null,
|
||||
// suggestions: [],
|
||||
// toneStyle: null,
|
||||
// }
|
||||
// suggestions: []
|
||||
// };
|
||||
|
||||
const conversation = atom({
|
||||
key: 'conversation',
|
||||
default: null
|
||||
|
|
@ -52,8 +63,8 @@ const useConversation = () => {
|
|||
({ snapshot }) =>
|
||||
async (_conversation, messages = null) => {
|
||||
const prevConversation = await snapshot.getPromise(conversation);
|
||||
const prevModelsFilter = await snapshot.getPromise(models.modelsFilter);
|
||||
_switchToConversation(_conversation, messages, { prevModelsFilter, prevConversation });
|
||||
const availableEndpoints = await snapshot.getPromise(endpoints.availableEndpoints);
|
||||
_switchToConversation(_conversation, messages, { availableEndpoints, prevConversation });
|
||||
},
|
||||
[]
|
||||
);
|
||||
|
|
@ -61,71 +72,25 @@ const useConversation = () => {
|
|||
const _switchToConversation = (
|
||||
conversation,
|
||||
messages = null,
|
||||
{ prevModelsFilter = {}, prev_conversation = {} }
|
||||
{ availableEndpoints = [], prevConversation = {} }
|
||||
) => {
|
||||
let { model = null, chatGptLabel = null, promptPrefix = null } = conversation;
|
||||
const getDefaultModel = () => {
|
||||
try {
|
||||
// try to use current model
|
||||
const { _model = null, _chatGptLabel = null, _promptPrefix = null } = prev_conversation || {};
|
||||
if (prevModelsFilter[_model]) {
|
||||
model = _model;
|
||||
chatGptLabel = _chatGptLabel;
|
||||
promptPrefix = _promptPrefix;
|
||||
return;
|
||||
}
|
||||
} catch (error) {}
|
||||
let { endpoint = null } = conversation;
|
||||
|
||||
try {
|
||||
// try to read latest selected model from local storage
|
||||
const lastSelected = JSON.parse(localStorage.getItem('model'));
|
||||
const { model: _model, chatGptLabel: _chatGptLabel, promptPrefix: _promptPrefix } = lastSelected;
|
||||
|
||||
if (prevModelsFilter[_model]) {
|
||||
model = _model;
|
||||
chatGptLabel = _chatGptLabel;
|
||||
promptPrefix = _promptPrefix;
|
||||
return;
|
||||
}
|
||||
} catch (error) {}
|
||||
|
||||
// if anything happens, reset to default model
|
||||
if (prevModelsFilter?.chatgpt) model = 'chatgpt';
|
||||
else if (prevModelsFilter?.bingai) model = 'bingai';
|
||||
else if (prevModelsFilter?.chatgptBrowser) model = 'chatgptBrowser';
|
||||
chatGptLabel = null;
|
||||
promptPrefix = null;
|
||||
};
|
||||
|
||||
if (model === null)
|
||||
if (endpoint === null)
|
||||
// get the default model
|
||||
getDefaultModel();
|
||||
conversation = getDefaultConversation({ conversation, availableEndpoints, prevConversation });
|
||||
|
||||
setConversation({
|
||||
...conversation,
|
||||
model: model,
|
||||
chatGptLabel: chatGptLabel,
|
||||
promptPrefix: promptPrefix
|
||||
});
|
||||
setConversation(conversation);
|
||||
setMessages(messages);
|
||||
resetLatestMessage();
|
||||
};
|
||||
|
||||
const newConversation = ({ model = null, chatGptLabel = null, promptPrefix = null } = {}) => {
|
||||
const newConversation = (template = {}) => {
|
||||
switchToConversation(
|
||||
{
|
||||
conversationId: 'new',
|
||||
title: 'New Chat',
|
||||
jailbreakConversationId: null,
|
||||
conversationSignature: null,
|
||||
clientId: null,
|
||||
invocationId: null,
|
||||
model: model,
|
||||
chatGptLabel: chatGptLabel,
|
||||
promptPrefix: promptPrefix,
|
||||
user: null,
|
||||
suggestions: [],
|
||||
toneStyle: null
|
||||
...template
|
||||
},
|
||||
[]
|
||||
);
|
||||
|
|
@ -135,17 +100,7 @@ const useConversation = () => {
|
|||
switchToConversation(
|
||||
{
|
||||
conversationId: 'search',
|
||||
title: 'Search',
|
||||
jailbreakConversationId: null,
|
||||
conversationSignature: null,
|
||||
clientId: null,
|
||||
invocationId: null,
|
||||
model: null,
|
||||
chatGptLabel: null,
|
||||
promptPrefix: null,
|
||||
user: null,
|
||||
suggestions: [],
|
||||
toneStyle: null
|
||||
title: 'Search'
|
||||
},
|
||||
[]
|
||||
);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue