mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-17 08:50:15 +01:00
refactor: reformat files to require parens around params (#316)
This commit is contained in:
parent
91ef4872d6
commit
a17b878617
50 changed files with 106 additions and 106 deletions
|
|
@ -45,7 +45,7 @@ class GoogleAgent {
|
||||||
}
|
}
|
||||||
|
|
||||||
this.options.examples = this.options.examples.filter(
|
this.options.examples = this.options.examples.filter(
|
||||||
obj => obj.input.content !== '' && obj.output.content !== ''
|
(obj) => obj.input.content !== '' && obj.output.content !== ''
|
||||||
);
|
);
|
||||||
|
|
||||||
const modelOptions = this.options.modelOptions || {};
|
const modelOptions = this.options.modelOptions || {};
|
||||||
|
|
@ -375,7 +375,7 @@ class GoogleAgent {
|
||||||
let currentMessageId = parentMessageId;
|
let currentMessageId = parentMessageId;
|
||||||
while (currentMessageId) {
|
while (currentMessageId) {
|
||||||
// eslint-disable-next-line no-loop-func
|
// eslint-disable-next-line no-loop-func
|
||||||
const message = messages.find(m => m.messageId === currentMessageId);
|
const message = messages.find((m) => m.messageId === currentMessageId);
|
||||||
if (!message) {
|
if (!message) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -387,7 +387,7 @@ class GoogleAgent {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
return orderedMessages.map(msg => ({
|
return orderedMessages.map((msg) => ({
|
||||||
isCreatedByUser: msg.isCreatedByUser,
|
isCreatedByUser: msg.isCreatedByUser,
|
||||||
content: msg.text
|
content: msg.text
|
||||||
}));
|
}));
|
||||||
|
|
|
||||||
|
|
@ -110,7 +110,7 @@ async function migrateDb() {
|
||||||
ret[0] = await migrateToStrictFollowParentMessageIdChain();
|
ret[0] = await migrateToStrictFollowParentMessageIdChain();
|
||||||
ret[1] = await migrateToSupportBetterCustomization();
|
ret[1] = await migrateToSupportBetterCustomization();
|
||||||
|
|
||||||
const isMigrated = !!ret.find(element => !element?.noNeed);
|
const isMigrated = !!ret.find((element) => !element?.noNeed);
|
||||||
|
|
||||||
if (!isMigrated) console.log('[Migrate] Nothing to migrate');
|
if (!isMigrated) console.log('[Migrate] Nothing to migrate');
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ const getCitations = (res) => {
|
||||||
if (!textBlocks) return '';
|
if (!textBlocks) return '';
|
||||||
let links = textBlocks[textBlocks.length - 1]?.text.match(regex);
|
let links = textBlocks[textBlocks.length - 1]?.text.match(regex);
|
||||||
if (links?.length === 0 || !links) return '';
|
if (links?.length === 0 || !links) return '';
|
||||||
links = links.map(link => link.trim());
|
links = links.map((link) => link.trim());
|
||||||
return links.join('\n');
|
return links.join('\n');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,7 @@ module.exports = {
|
||||||
// will handle a syncing solution soon
|
// will handle a syncing solution soon
|
||||||
const deletedConvoIds = [];
|
const deletedConvoIds = [];
|
||||||
|
|
||||||
convoIds.forEach(convo =>
|
convoIds.forEach((convo) =>
|
||||||
promises.push(
|
promises.push(
|
||||||
Conversation.findOne({
|
Conversation.findOne({
|
||||||
user,
|
user,
|
||||||
|
|
@ -120,7 +120,7 @@ module.exports = {
|
||||||
},
|
},
|
||||||
deleteConvos: async (user, filter) => {
|
deleteConvos: async (user, filter) => {
|
||||||
let toRemove = await Conversation.find({ ...filter, user }).select('conversationId');
|
let toRemove = await Conversation.find({ ...filter, user }).select('conversationId');
|
||||||
const ids = toRemove.map(instance => instance.conversationId);
|
const ids = toRemove.map((instance) => instance.conversationId);
|
||||||
let deleteCount = await Conversation.deleteMany({ ...filter, user }).exec();
|
let deleteCount = await Conversation.deleteMany({ ...filter, user }).exec();
|
||||||
deleteCount.messages = await deleteMessages({ conversationId: { $in: ids } });
|
deleteCount.messages = await deleteMessages({ conversationId: { $in: ids } });
|
||||||
return deleteCount;
|
return deleteCount;
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ module.exports = {
|
||||||
},
|
},
|
||||||
deletePresets: async (user, filter) => {
|
deletePresets: async (user, filter) => {
|
||||||
let toRemove = await Preset.find({ ...filter, user }).select('presetId');
|
let toRemove = await Preset.find({ ...filter, user }).select('presetId');
|
||||||
const ids = toRemove.map(instance => instance.presetId);
|
const ids = toRemove.map((instance) => instance.presetId);
|
||||||
let deleteCount = await Preset.deleteMany({ ...filter, user }).exec();
|
let deleteCount = await Preset.deleteMany({ ...filter, user }).exec();
|
||||||
return deleteCount;
|
return deleteCount;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@ const createMeiliMongooseModel = function ({ index, indexName, client, attribute
|
||||||
// Find objects into mongodb matching `objectID` from Meili search
|
// Find objects into mongodb matching `objectID` from Meili search
|
||||||
const query = {};
|
const query = {};
|
||||||
// query[primaryKey] = { $in: _.map(data.hits, primaryKey) };
|
// query[primaryKey] = { $in: _.map(data.hits, primaryKey) };
|
||||||
query[primaryKey] = _.map(data.hits, hit => cleanUpPrimaryKeyValue(hit[primaryKey]));
|
query[primaryKey] = _.map(data.hits, (hit) => cleanUpPrimaryKeyValue(hit[primaryKey]));
|
||||||
// console.log('query', query);
|
// console.log('query', query);
|
||||||
const hitsFromMongoose = await this.find(
|
const hitsFromMongoose = await this.find(
|
||||||
query,
|
query,
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,8 @@ const handleDuplicateKeyError = (err, res) => {
|
||||||
//handle validation errors
|
//handle validation errors
|
||||||
const handleValidationError = (err, res) => {
|
const handleValidationError = (err, res) => {
|
||||||
console.log('congrats you hit the validation middleware');
|
console.log('congrats you hit the validation middleware');
|
||||||
let errors = Object.values(err.errors).map(el => el.message);
|
let errors = Object.values(err.errors).map((el) => el.message);
|
||||||
let fields = Object.values(err.errors).map(el => el.path);
|
let fields = Object.values(err.errors).map((el) => el.path);
|
||||||
let code = 400;
|
let code = 400;
|
||||||
if (errors.length > 1) {
|
if (errors.length > 1) {
|
||||||
const formattedErrors = errors.join(' ');
|
const formattedErrors = errors.join(' ');
|
||||||
|
|
|
||||||
|
|
@ -164,7 +164,7 @@ const ask = async ({
|
||||||
text: await handleText(response, true),
|
text: await handleText(response, true),
|
||||||
suggestions:
|
suggestions:
|
||||||
response.details.suggestedResponses &&
|
response.details.suggestedResponses &&
|
||||||
response.details.suggestedResponses.map(s => s.text),
|
response.details.suggestedResponses.map((s) => s.text),
|
||||||
unfinished: false,
|
unfinished: false,
|
||||||
cancelled: false,
|
cancelled: false,
|
||||||
error: false
|
error: false
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ router.post('/', requireJwtAuth, async (req, res) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
const availableModels = getChatGPTBrowserModels();
|
const availableModels = getChatGPTBrowserModels();
|
||||||
if (availableModels.find(model => model === endpointOption.model) === undefined)
|
if (availableModels.find((model) => model === endpointOption.model) === undefined)
|
||||||
return handleError(res, { text: 'Illegal request: model' });
|
return handleError(res, { text: 'Illegal request: model' });
|
||||||
|
|
||||||
console.log('ask log', {
|
console.log('ask log', {
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ router.post('/', requireJwtAuth, async (req, res) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
const availableModels = ['chat-bison', 'text-bison'];
|
const availableModels = ['chat-bison', 'text-bison'];
|
||||||
if (availableModels.find(model => model === endpointOption.modelOptions.model) === undefined) {
|
if (availableModels.find((model) => model === endpointOption.modelOptions.model) === undefined) {
|
||||||
return handleError(res, { text: `Illegal request: model` });
|
return handleError(res, { text: `Illegal request: model` });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ router.post('/', requireJwtAuth, async (req, res) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
const availableModels = getOpenAIModels();
|
const availableModels = getOpenAIModels();
|
||||||
if (availableModels.find(model => model === endpointOption.model) === undefined)
|
if (availableModels.find((model) => model === endpointOption.model) === undefined)
|
||||||
return handleError(res, { text: 'Illegal request: model' });
|
return handleError(res, { text: 'Illegal request: model' });
|
||||||
|
|
||||||
console.log('ask log', {
|
console.log('ask log', {
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ router.post('/delete', requireJwtAuth, async (req, res) => {
|
||||||
try {
|
try {
|
||||||
await deletePresets(req.user.id, filter);
|
await deletePresets(req.user.id, filter);
|
||||||
|
|
||||||
const presets = (await getPresets(req.user.id)).map(preset => preset.toObject());
|
const presets = (await getPresets(req.user.id)).map((preset) => preset.toObject());
|
||||||
|
|
||||||
// console.log('delete preset response', presets);
|
// console.log('delete preset response', presets);
|
||||||
res.status(201).send(presets);
|
res.status(201).send(presets);
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ const loginUser = async (user) => {
|
||||||
|
|
||||||
const logoutUser = async (user, refreshToken) => {
|
const logoutUser = async (user, refreshToken) => {
|
||||||
User.findById(user._id).then((user) => {
|
User.findById(user._id).then((user) => {
|
||||||
const tokenIndex = user.refreshToken.findIndex(item => item.refreshToken === refreshToken);
|
const tokenIndex = user.refreshToken.findIndex((item) => item.refreshToken === refreshToken);
|
||||||
|
|
||||||
if (tokenIndex !== -1) {
|
if (tokenIndex !== -1) {
|
||||||
user.refreshToken.id(user.refreshToken[tokenIndex]._id).remove();
|
user.refreshToken.id(user.refreshToken[tokenIndex]._id).remove();
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ let level = levels.INFO;
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
levels,
|
levels,
|
||||||
setLevel: l => (level = l),
|
setLevel: (l) => (level = l),
|
||||||
log: {
|
log: {
|
||||||
trace: (msg) => {
|
trace: (msg) => {
|
||||||
if (level <= levels.TRACE) return;
|
if (level <= levels.TRACE) return;
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ function Login() {
|
||||||
className="mt-6"
|
className="mt-6"
|
||||||
aria-label="Login form"
|
aria-label="Login form"
|
||||||
method="POST"
|
method="POST"
|
||||||
onSubmit={handleSubmit(data => login(data))}
|
onSubmit={handleSubmit((data) => login(data))}
|
||||||
>
|
>
|
||||||
<div className="mb-2">
|
<div className="mb-2">
|
||||||
<div className="relative">
|
<div className="relative">
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ function Registration() {
|
||||||
className="mt-6"
|
className="mt-6"
|
||||||
aria-label="Registration form"
|
aria-label="Registration form"
|
||||||
method="POST"
|
method="POST"
|
||||||
onSubmit={handleSubmit(data => onRegisterUserFormSubmit(data))}
|
onSubmit={handleSubmit((data) => onRegisterUserFormSubmit(data))}
|
||||||
>
|
>
|
||||||
<div className="mb-2">
|
<div className="mb-2">
|
||||||
<div className="relative">
|
<div className="relative">
|
||||||
|
|
@ -225,7 +225,7 @@ function Registration() {
|
||||||
return false;
|
return false;
|
||||||
}}
|
}}
|
||||||
{...register('confirm_password', {
|
{...register('confirm_password', {
|
||||||
validate: value => value === password || 'Passwords do not match'
|
validate: (value) => value === password || 'Passwords do not match'
|
||||||
})}
|
})}
|
||||||
aria-invalid={!!errors.confirm_password}
|
aria-invalid={!!errors.confirm_password}
|
||||||
className="peer block w-full appearance-none rounded-t-md border-0 border-b-2 border-gray-300 bg-gray-50 px-2.5 pb-2.5 pt-5 text-sm text-gray-900 focus:border-green-500 focus:outline-none focus:ring-0"
|
className="peer block w-full appearance-none rounded-t-md border-0 border-b-2 border-gray-300 bg-gray-50 px-2.5 pb-2.5 pt-5 text-sm text-gray-900 focus:border-green-500 focus:outline-none focus:ring-0"
|
||||||
|
|
|
||||||
|
|
@ -129,7 +129,7 @@ function ResetPassword() {
|
||||||
return false;
|
return false;
|
||||||
}}
|
}}
|
||||||
{...register('confirm_password', {
|
{...register('confirm_password', {
|
||||||
validate: value => value === password || 'Passwords do not match'
|
validate: (value) => value === password || 'Passwords do not match'
|
||||||
})}
|
})}
|
||||||
aria-invalid={!!errors.confirm_password}
|
aria-invalid={!!errors.confirm_password}
|
||||||
className="peer block w-full appearance-none rounded-t-md border-0 border-b-2 border-gray-300 bg-gray-50 px-2.5 pb-2.5 pt-5 text-sm text-gray-900 focus:border-green-500 focus:outline-none focus:ring-0"
|
className="peer block w-full appearance-none rounded-t-md border-0 border-b-2 border-gray-300 bg-gray-50 px-2.5 pb-2.5 pt-5 text-sm text-gray-900 focus:border-green-500 focus:outline-none focus:ring-0"
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,7 @@ export default function Conversation({ conversation, retainView }) {
|
||||||
if (updateConvoMutation.isSuccess) {
|
if (updateConvoMutation.isSuccess) {
|
||||||
refreshConversations();
|
refreshConversations();
|
||||||
if (conversationId == currentConversation?.conversationId) {
|
if (conversationId == currentConversation?.conversationId) {
|
||||||
setCurrentConversation(prevState => ({
|
setCurrentConversation((prevState) => ({
|
||||||
...prevState,
|
...prevState,
|
||||||
title: titleInput
|
title: titleInput
|
||||||
}));
|
}));
|
||||||
|
|
@ -99,7 +99,7 @@ export default function Conversation({ conversation, retainView }) {
|
||||||
type="text"
|
type="text"
|
||||||
className="m-0 mr-0 w-full border border-blue-500 bg-transparent p-0 text-sm leading-tight outline-none"
|
className="m-0 mr-0 w-full border border-blue-500 bg-transparent p-0 text-sm leading-tight outline-none"
|
||||||
value={titleInput}
|
value={titleInput}
|
||||||
onChange={e => setTitleInput(e.target.value)}
|
onChange={(e) => setTitleInput(e.target.value)}
|
||||||
onBlur={onRename}
|
onBlur={onRename}
|
||||||
onKeyDown={handleKeyDown}
|
onKeyDown={handleKeyDown}
|
||||||
/>
|
/>
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
export default function Pages({ pageNumber, pages, nextPage, previousPage }) {
|
export default function Pages({ pageNumber, pages, nextPage, previousPage }) {
|
||||||
const clickHandler = func => async (e) => {
|
const clickHandler = (func) => async (e) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
await func();
|
await func();
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ function Settings(props) {
|
||||||
const setContext = setOption('context');
|
const setContext = setOption('context');
|
||||||
const setSystemMessage = setOption('systemMessage');
|
const setSystemMessage = setOption('systemMessage');
|
||||||
const setJailbreak = setOption('jailbreak');
|
const setJailbreak = setOption('jailbreak');
|
||||||
const setToneStyle = value => setOption('toneStyle')(value.toLowerCase());
|
const setToneStyle = (value) => setOption('toneStyle')(value.toLowerCase());
|
||||||
const debouncedContext = useDebounce(context, 250);
|
const debouncedContext = useDebounce(context, 250);
|
||||||
const updateTokenCountMutation = useUpdateTokenCountMutation();
|
const updateTokenCountMutation = useUpdateTokenCountMutation();
|
||||||
|
|
||||||
|
|
@ -71,7 +71,7 @@ function Settings(props) {
|
||||||
id="context"
|
id="context"
|
||||||
disabled={readonly}
|
disabled={readonly}
|
||||||
value={context || ''}
|
value={context || ''}
|
||||||
onChange={e => setContext(e.target.value || null)}
|
onChange={(e) => setContext(e.target.value || null)}
|
||||||
placeholder="Bing can use up to 7k tokens for 'context', which it can reference for the conversation. The specific limit is not known but may run into errors exceeding 7k tokens"
|
placeholder="Bing can use up to 7k tokens for 'context', which it can reference for the conversation. The specific limit is not known but may run into errors exceeding 7k tokens"
|
||||||
className={cn(
|
className={cn(
|
||||||
defaultTextProps,
|
defaultTextProps,
|
||||||
|
|
@ -123,7 +123,7 @@ function Settings(props) {
|
||||||
id="systemMessage"
|
id="systemMessage"
|
||||||
disabled={readonly}
|
disabled={readonly}
|
||||||
value={systemMessage || ''}
|
value={systemMessage || ''}
|
||||||
onChange={e => setSystemMessage(e.target.value || null)}
|
onChange={(e) => setSystemMessage(e.target.value || null)}
|
||||||
placeholder="WARNING: Misuse of this feature can get you BANNED from using Bing! Click on 'System Message' for full instructions and the default message if omitted, which is the 'Sydney' preset that is considered safe."
|
placeholder="WARNING: Misuse of this feature can get you BANNED from using Bing! Click on 'System Message' for full instructions and the default message if omitted, which is the 'Sydney' preset that is considered safe."
|
||||||
className={cn(
|
className={cn(
|
||||||
defaultTextProps,
|
defaultTextProps,
|
||||||
|
|
|
||||||
|
|
@ -131,7 +131,7 @@ const EditPresetDialog = ({ open, onOpenChange, preset: _preset, title }) => {
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setPreset(_preset);
|
setPreset(_preset);
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [open]);
|
}, [open]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
|
||||||
|
|
@ -22,10 +22,10 @@ const EndpointOptionsDialog = ({ open, onOpenChange, preset: _preset, title }) =
|
||||||
setEndpointName('PaLM');
|
setEndpointName('PaLM');
|
||||||
}
|
}
|
||||||
|
|
||||||
const setOption = param => (newValue) => {
|
const setOption = (param) => (newValue) => {
|
||||||
let update = {};
|
let update = {};
|
||||||
update[param] = newValue;
|
update[param] = newValue;
|
||||||
setPreset(prevState => ({
|
setPreset((prevState) => ({
|
||||||
...prevState,
|
...prevState,
|
||||||
...update
|
...update
|
||||||
}));
|
}));
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ function Examples({ readonly, examples, setExample, addExample, removeExample, e
|
||||||
id={`input-${idx}`}
|
id={`input-${idx}`}
|
||||||
disabled={readonly}
|
disabled={readonly}
|
||||||
value={example?.input?.content || ''}
|
value={example?.input?.content || ''}
|
||||||
onChange={e => setExample(idx, 'input', e.target.value || null)}
|
onChange={(e) => setExample(idx, 'input', e.target.value || null)}
|
||||||
placeholder="Set example input. Example is ignored if empty."
|
placeholder="Set example input. Example is ignored if empty."
|
||||||
className={cn(
|
className={cn(
|
||||||
defaultTextProps,
|
defaultTextProps,
|
||||||
|
|
@ -53,7 +53,7 @@ function Examples({ readonly, examples, setExample, addExample, removeExample, e
|
||||||
id={`output-${idx}`}
|
id={`output-${idx}`}
|
||||||
disabled={readonly}
|
disabled={readonly}
|
||||||
value={example?.output?.content || ''}
|
value={example?.output?.content || ''}
|
||||||
onChange={e => setExample(idx, 'output', e.target.value || null)}
|
onChange={(e) => setExample(idx, 'output', e.target.value || null)}
|
||||||
placeholder={`Set example output. Example is ignored if empty.`}
|
placeholder={`Set example output. Example is ignored if empty.`}
|
||||||
className={cn(
|
className={cn(
|
||||||
defaultTextProps,
|
defaultTextProps,
|
||||||
|
|
|
||||||
|
|
@ -66,7 +66,7 @@ function Settings(props) {
|
||||||
id="chatGptLabel"
|
id="chatGptLabel"
|
||||||
disabled={readonly}
|
disabled={readonly}
|
||||||
value={chatGptLabel || ''}
|
value={chatGptLabel || ''}
|
||||||
onChange={e => setChatGptLabel(e.target.value || null)}
|
onChange={(e) => setChatGptLabel(e.target.value || null)}
|
||||||
placeholder="Set a custom name for ChatGPT"
|
placeholder="Set a custom name for ChatGPT"
|
||||||
className={cn(
|
className={cn(
|
||||||
defaultTextProps,
|
defaultTextProps,
|
||||||
|
|
@ -82,7 +82,7 @@ function Settings(props) {
|
||||||
id="promptPrefix"
|
id="promptPrefix"
|
||||||
disabled={readonly}
|
disabled={readonly}
|
||||||
value={promptPrefix || ''}
|
value={promptPrefix || ''}
|
||||||
onChange={e => setPromptPrefix(e.target.value || null)}
|
onChange={(e) => setPromptPrefix(e.target.value || null)}
|
||||||
placeholder="Set custom instructions. Defaults to: 'You are ChatGPT, a large language model trained by OpenAI.'"
|
placeholder="Set custom instructions. Defaults to: 'You are ChatGPT, a large language model trained by OpenAI.'"
|
||||||
className={cn(
|
className={cn(
|
||||||
defaultTextProps,
|
defaultTextProps,
|
||||||
|
|
@ -102,7 +102,7 @@ function Settings(props) {
|
||||||
id="temp-int"
|
id="temp-int"
|
||||||
disabled={readonly}
|
disabled={readonly}
|
||||||
value={temperature}
|
value={temperature}
|
||||||
onChange={value => setTemperature(value)}
|
onChange={(value) => setTemperature(value)}
|
||||||
max={2}
|
max={2}
|
||||||
min={0}
|
min={0}
|
||||||
step={0.01}
|
step={0.01}
|
||||||
|
|
@ -119,7 +119,7 @@ function Settings(props) {
|
||||||
<Slider
|
<Slider
|
||||||
disabled={readonly}
|
disabled={readonly}
|
||||||
value={[temperature]}
|
value={[temperature]}
|
||||||
onValueChange={value => setTemperature(value[0])}
|
onValueChange={(value) => setTemperature(value[0])}
|
||||||
doubleClickHandler={() => setTemperature(1)}
|
doubleClickHandler={() => setTemperature(1)}
|
||||||
max={2}
|
max={2}
|
||||||
min={0}
|
min={0}
|
||||||
|
|
@ -139,7 +139,7 @@ function Settings(props) {
|
||||||
id="top-p-int"
|
id="top-p-int"
|
||||||
disabled={readonly}
|
disabled={readonly}
|
||||||
value={topP}
|
value={topP}
|
||||||
onChange={value => setTopP(value)}
|
onChange={(value) => setTopP(value)}
|
||||||
max={1}
|
max={1}
|
||||||
min={0}
|
min={0}
|
||||||
step={0.01}
|
step={0.01}
|
||||||
|
|
@ -156,7 +156,7 @@ function Settings(props) {
|
||||||
<Slider
|
<Slider
|
||||||
disabled={readonly}
|
disabled={readonly}
|
||||||
value={[topP]}
|
value={[topP]}
|
||||||
onValueChange={value => setTopP(value[0])}
|
onValueChange={(value) => setTopP(value[0])}
|
||||||
doubleClickHandler={() => setTopP(1)}
|
doubleClickHandler={() => setTopP(1)}
|
||||||
max={1}
|
max={1}
|
||||||
min={0}
|
min={0}
|
||||||
|
|
@ -177,7 +177,7 @@ function Settings(props) {
|
||||||
id="freq-penalty-int"
|
id="freq-penalty-int"
|
||||||
disabled={readonly}
|
disabled={readonly}
|
||||||
value={freqP}
|
value={freqP}
|
||||||
onChange={value => setFreqP(value)}
|
onChange={(value) => setFreqP(value)}
|
||||||
max={2}
|
max={2}
|
||||||
min={-2}
|
min={-2}
|
||||||
step={0.01}
|
step={0.01}
|
||||||
|
|
@ -194,7 +194,7 @@ function Settings(props) {
|
||||||
<Slider
|
<Slider
|
||||||
disabled={readonly}
|
disabled={readonly}
|
||||||
value={[freqP]}
|
value={[freqP]}
|
||||||
onValueChange={value => setFreqP(value[0])}
|
onValueChange={(value) => setFreqP(value[0])}
|
||||||
doubleClickHandler={() => setFreqP(0)}
|
doubleClickHandler={() => setFreqP(0)}
|
||||||
max={2}
|
max={2}
|
||||||
min={-2}
|
min={-2}
|
||||||
|
|
@ -215,7 +215,7 @@ function Settings(props) {
|
||||||
id="pres-penalty-int"
|
id="pres-penalty-int"
|
||||||
disabled={readonly}
|
disabled={readonly}
|
||||||
value={presP}
|
value={presP}
|
||||||
onChange={value => setPresP(value)}
|
onChange={(value) => setPresP(value)}
|
||||||
max={2}
|
max={2}
|
||||||
min={-2}
|
min={-2}
|
||||||
step={0.01}
|
step={0.01}
|
||||||
|
|
@ -232,7 +232,7 @@ function Settings(props) {
|
||||||
<Slider
|
<Slider
|
||||||
disabled={readonly}
|
disabled={readonly}
|
||||||
value={[presP]}
|
value={[presP]}
|
||||||
onValueChange={value => setPresP(value[0])}
|
onValueChange={(value) => setPresP(value[0])}
|
||||||
doubleClickHandler={() => setPresP(0)}
|
doubleClickHandler={() => setPresP(0)}
|
||||||
max={2}
|
max={2}
|
||||||
min={-2}
|
min={-2}
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ const SaveAsPresetDialog = ({ open, onOpenChange, preset }) => {
|
||||||
<Input
|
<Input
|
||||||
id="chatGptLabel"
|
id="chatGptLabel"
|
||||||
value={title || ''}
|
value={title || ''}
|
||||||
onChange={e => setTitle(e.target.value || '')}
|
onChange={(e) => setTitle(e.target.value || '')}
|
||||||
placeholder="Set a custom name, in case you can find this preset"
|
placeholder="Set a custom name, in case you can find this preset"
|
||||||
className={cn(
|
className={cn(
|
||||||
defaultTextProps,
|
defaultTextProps,
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ function BingAIOptions({ show }) {
|
||||||
if (endpoint !== 'bingAI') return null;
|
if (endpoint !== 'bingAI') return null;
|
||||||
if (conversationId !== 'new' && !show) return null;
|
if (conversationId !== 'new' && !show) return null;
|
||||||
|
|
||||||
const triggerAdvancedMode = () => setAdvancedMode(prev => !prev);
|
const triggerAdvancedMode = () => setAdvancedMode((prev) => !prev);
|
||||||
|
|
||||||
const switchToSimpleMode = () => {
|
const switchToSimpleMode = () => {
|
||||||
setAdvancedMode(false);
|
setAdvancedMode(false);
|
||||||
|
|
@ -31,10 +31,10 @@ function BingAIOptions({ show }) {
|
||||||
setSaveAsDialogShow(true);
|
setSaveAsDialogShow(true);
|
||||||
};
|
};
|
||||||
|
|
||||||
const setOption = param => (newValue) => {
|
const setOption = (param) => (newValue) => {
|
||||||
let update = {};
|
let update = {};
|
||||||
update[param] = newValue;
|
update[param] = newValue;
|
||||||
setConversation(prevState => ({
|
setConversation((prevState) => ({
|
||||||
...prevState,
|
...prevState,
|
||||||
...update
|
...update
|
||||||
}));
|
}));
|
||||||
|
|
@ -48,7 +48,7 @@ function BingAIOptions({ show }) {
|
||||||
defaultClasses,
|
defaultClasses,
|
||||||
'font-medium data-[state=active]:text-white text-xs text-white'
|
'font-medium data-[state=active]:text-white text-xs text-white'
|
||||||
);
|
);
|
||||||
const selectedClass = val => val + '-tab ' + defaultSelected;
|
const selectedClass = (val) => val + '-tab ' + defaultSelected;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|
@ -61,7 +61,7 @@ function BingAIOptions({ show }) {
|
||||||
<SelectDropDown
|
<SelectDropDown
|
||||||
title="Mode"
|
title="Mode"
|
||||||
value={jailbreak ? 'Sydney' : 'BingAI'}
|
value={jailbreak ? 'Sydney' : 'BingAI'}
|
||||||
setValue={value => setOption('jailbreak')(value === 'Sydney')}
|
setValue={(value) => setOption('jailbreak')(value === 'Sydney')}
|
||||||
availableValues={['BingAI', 'Sydney']}
|
availableValues={['BingAI', 'Sydney']}
|
||||||
showAbove={true}
|
showAbove={true}
|
||||||
showLabel={false}
|
showLabel={false}
|
||||||
|
|
@ -78,7 +78,7 @@ function BingAIOptions({ show }) {
|
||||||
cardStyle +
|
cardStyle +
|
||||||
' z-50 flex h-[40px] flex-none items-center justify-center px-0 hover:bg-slate-50 dark:hover:bg-gray-600'
|
' z-50 flex h-[40px] flex-none items-center justify-center px-0 hover:bg-slate-50 dark:hover:bg-gray-600'
|
||||||
}
|
}
|
||||||
onValueChange={value => setOption('toneStyle')(value.toLowerCase())}
|
onValueChange={(value) => setOption('toneStyle')(value.toLowerCase())}
|
||||||
>
|
>
|
||||||
<TabsList className="bg-white/[.60] dark:bg-gray-700">
|
<TabsList className="bg-white/[.60] dark:bg-gray-700">
|
||||||
<TabsTrigger
|
<TabsTrigger
|
||||||
|
|
|
||||||
|
|
@ -17,10 +17,10 @@ function ChatGPTOptions() {
|
||||||
|
|
||||||
const models = endpointsConfig?.['chatGPTBrowser']?.['availableModels'] || [];
|
const models = endpointsConfig?.['chatGPTBrowser']?.['availableModels'] || [];
|
||||||
|
|
||||||
const setOption = param => (newValue) => {
|
const setOption = (param) => (newValue) => {
|
||||||
let update = {};
|
let update = {};
|
||||||
update[param] = newValue;
|
update[param] = newValue;
|
||||||
setConversation(prevState => ({
|
setConversation((prevState) => ({
|
||||||
...prevState,
|
...prevState,
|
||||||
...update
|
...update
|
||||||
}));
|
}));
|
||||||
|
|
|
||||||
|
|
@ -29,8 +29,8 @@ function GoogleOptions() {
|
||||||
|
|
||||||
const models = endpointsConfig?.['google']?.['availableModels'] || [];
|
const models = endpointsConfig?.['google']?.['availableModels'] || [];
|
||||||
|
|
||||||
const triggerAdvancedMode = () => setAdvancedMode(prev => !prev);
|
const triggerAdvancedMode = () => setAdvancedMode((prev) => !prev);
|
||||||
const triggerExamples = () => setShowExamples(prev => !prev);
|
const triggerExamples = () => setShowExamples((prev) => !prev);
|
||||||
|
|
||||||
const switchToSimpleMode = () => {
|
const switchToSimpleMode = () => {
|
||||||
setAdvancedMode(false);
|
setAdvancedMode(false);
|
||||||
|
|
@ -40,10 +40,10 @@ function GoogleOptions() {
|
||||||
setSaveAsDialogShow(true);
|
setSaveAsDialogShow(true);
|
||||||
};
|
};
|
||||||
|
|
||||||
const setOption = param => (newValue) => {
|
const setOption = (param) => (newValue) => {
|
||||||
let update = {};
|
let update = {};
|
||||||
update[param] = newValue;
|
update[param] = newValue;
|
||||||
setConversation(prevState => ({
|
setConversation((prevState) => ({
|
||||||
...prevState,
|
...prevState,
|
||||||
...update
|
...update
|
||||||
}));
|
}));
|
||||||
|
|
@ -56,7 +56,7 @@ function GoogleOptions() {
|
||||||
currentExample[type] = { content: newValue };
|
currentExample[type] = { content: newValue };
|
||||||
current[i] = currentExample;
|
current[i] = currentExample;
|
||||||
update.examples = current;
|
update.examples = current;
|
||||||
setConversation(prevState => ({
|
setConversation((prevState) => ({
|
||||||
...prevState,
|
...prevState,
|
||||||
...update
|
...update
|
||||||
}));
|
}));
|
||||||
|
|
@ -67,7 +67,7 @@ function GoogleOptions() {
|
||||||
let current = conversation?.examples.slice() || [];
|
let current = conversation?.examples.slice() || [];
|
||||||
current.push({ input: { content: '' }, output: { content: '' } });
|
current.push({ input: { content: '' }, output: { content: '' } });
|
||||||
update.examples = current;
|
update.examples = current;
|
||||||
setConversation(prevState => ({
|
setConversation((prevState) => ({
|
||||||
...prevState,
|
...prevState,
|
||||||
...update
|
...update
|
||||||
}));
|
}));
|
||||||
|
|
@ -78,7 +78,7 @@ function GoogleOptions() {
|
||||||
let current = conversation?.examples.slice() || [];
|
let current = conversation?.examples.slice() || [];
|
||||||
if (current.length <= 1) {
|
if (current.length <= 1) {
|
||||||
update.examples = [{ input: { content: '' }, output: { content: '' } }];
|
update.examples = [{ input: { content: '' }, output: { content: '' } }];
|
||||||
setConversation(prevState => ({
|
setConversation((prevState) => ({
|
||||||
...prevState,
|
...prevState,
|
||||||
...update
|
...update
|
||||||
}));
|
}));
|
||||||
|
|
@ -86,7 +86,7 @@ function GoogleOptions() {
|
||||||
}
|
}
|
||||||
current.pop();
|
current.pop();
|
||||||
update.examples = current;
|
update.examples = current;
|
||||||
setConversation(prevState => ({
|
setConversation((prevState) => ({
|
||||||
...prevState,
|
...prevState,
|
||||||
...update
|
...update
|
||||||
}));
|
}));
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ export default function ModelItem({ endpoint, value, onSelect }) {
|
||||||
>
|
>
|
||||||
{icon}
|
{icon}
|
||||||
{alternateName[endpoint] || endpoint}
|
{alternateName[endpoint] || endpoint}
|
||||||
{!!['azureOpenAI', 'openAI'].find(e => e === endpoint) && <sup>$</sup>}
|
{!!['azureOpenAI', 'openAI'].find((e) => e === endpoint) && <sup>$</sup>}
|
||||||
<div className="flex w-4 flex-1" />
|
<div className="flex w-4 flex-1" />
|
||||||
{isUserProvided ? (
|
{isUserProvided ? (
|
||||||
<button
|
<button
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import EndpointItem from './EndpointItem.jsx';
|
||||||
export default function EndpointItems({ endpoints, onSelect }) {
|
export default function EndpointItems({ endpoints, onSelect }) {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{endpoints.map(endpoint => (
|
{endpoints.map((endpoint) => (
|
||||||
<EndpointItem key={endpoint} value={endpoint} onSelect={onSelect} endpoint={endpoint} />
|
<EndpointItem key={endpoint} value={endpoint} onSelect={onSelect} endpoint={endpoint} />
|
||||||
))}
|
))}
|
||||||
</>
|
</>
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import PresetItem from './PresetItem.jsx';
|
||||||
export default function PresetItems({ presets, onSelect, onChangePreset, onDeletePreset }) {
|
export default function PresetItems({ presets, onSelect, onChangePreset, onDeletePreset }) {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{presets.map(preset => (
|
{presets.map((preset) => (
|
||||||
<PresetItem
|
<PresetItem
|
||||||
key={preset?.presetId}
|
key={preset?.presetId}
|
||||||
value={preset}
|
value={preset}
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@ export default function NewConversationMenu() {
|
||||||
// update the default model when availableModels changes
|
// update the default model when availableModels changes
|
||||||
// typically, availableModels changes => modelsFilter or customGPTModels changes
|
// typically, availableModels changes => modelsFilter or customGPTModels changes
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const isInvalidConversation = !availableEndpoints.find(e => e === endpoint);
|
const isInvalidConversation = !availableEndpoints.find((e) => e === endpoint);
|
||||||
if (conversationId == 'new' && isInvalidConversation) {
|
if (conversationId == 'new' && isInvalidConversation) {
|
||||||
newConversation();
|
newConversation();
|
||||||
}
|
}
|
||||||
|
|
@ -135,7 +135,7 @@ export default function NewConversationMenu() {
|
||||||
</DropdownMenuTrigger>
|
</DropdownMenuTrigger>
|
||||||
<DropdownMenuContent
|
<DropdownMenuContent
|
||||||
className="min-w-[300px] dark:bg-gray-700"
|
className="min-w-[300px] dark:bg-gray-700"
|
||||||
onCloseAutoFocus={event => event.preventDefault()}
|
onCloseAutoFocus={(event) => event.preventDefault()}
|
||||||
>
|
>
|
||||||
<DropdownMenuLabel className="dark:text-gray-300">Select an Endpoint</DropdownMenuLabel>
|
<DropdownMenuLabel className="dark:text-gray-300">Select an Endpoint</DropdownMenuLabel>
|
||||||
<DropdownMenuSeparator />
|
<DropdownMenuSeparator />
|
||||||
|
|
@ -156,7 +156,7 @@ export default function NewConversationMenu() {
|
||||||
<div className="mt-6 w-full" />
|
<div className="mt-6 w-full" />
|
||||||
|
|
||||||
<DropdownMenuLabel className="flex items-center dark:text-gray-300">
|
<DropdownMenuLabel className="flex items-center dark:text-gray-300">
|
||||||
<span className="cursor-pointer" onClick={() => setShowPresets(prev => !prev)}>
|
<span className="cursor-pointer" onClick={() => setShowPresets((prev) => !prev)}>
|
||||||
{showPresets ? 'Hide ' : 'Show '} Presets
|
{showPresets ? 'Hide ' : 'Show '} Presets
|
||||||
</span>
|
</span>
|
||||||
<div className="flex-1" />
|
<div className="flex-1" />
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ function OpenAIOptions() {
|
||||||
|
|
||||||
const models = endpointsConfig?.['openAI']?.['availableModels'] || [];
|
const models = endpointsConfig?.['openAI']?.['availableModels'] || [];
|
||||||
|
|
||||||
const triggerAdvancedMode = () => setAdvancedMode(prev => !prev);
|
const triggerAdvancedMode = () => setAdvancedMode((prev) => !prev);
|
||||||
|
|
||||||
const switchToSimpleMode = () => {
|
const switchToSimpleMode = () => {
|
||||||
setAdvancedMode(false);
|
setAdvancedMode(false);
|
||||||
|
|
@ -43,10 +43,10 @@ function OpenAIOptions() {
|
||||||
setSaveAsDialogShow(true);
|
setSaveAsDialogShow(true);
|
||||||
};
|
};
|
||||||
|
|
||||||
const setOption = param => (newValue) => {
|
const setOption = (param) => (newValue) => {
|
||||||
let update = {};
|
let update = {};
|
||||||
update[param] = newValue;
|
update[param] = newValue;
|
||||||
setConversation(prevState => ({
|
setConversation((prevState) => ({
|
||||||
...prevState,
|
...prevState,
|
||||||
...update
|
...update
|
||||||
}));
|
}));
|
||||||
|
|
|
||||||
|
|
@ -176,7 +176,7 @@ const SetTokenDialog = ({ open, onOpenChange, endpoint }) => {
|
||||||
<InputWithLabel
|
<InputWithLabel
|
||||||
id={'chatGPTLabel'}
|
id={'chatGPTLabel'}
|
||||||
value={token || ''}
|
value={token || ''}
|
||||||
onChange={e => setToken(e.target.value || '')}
|
onChange={(e) => setToken(e.target.value || '')}
|
||||||
label={'OpenAI API Key'}
|
label={'OpenAI API Key'}
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
|
|
@ -185,28 +185,28 @@ const SetTokenDialog = ({ open, onOpenChange, endpoint }) => {
|
||||||
<InputWithLabel
|
<InputWithLabel
|
||||||
id={'instanceNameLabel'}
|
id={'instanceNameLabel'}
|
||||||
value={getAzure('instanceName') || ''}
|
value={getAzure('instanceName') || ''}
|
||||||
onChange={e => setAzure('instanceName', e.target.value || '')}
|
onChange={(e) => setAzure('instanceName', e.target.value || '')}
|
||||||
label={'Azure OpenAI Instance Name'}
|
label={'Azure OpenAI Instance Name'}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<InputWithLabel
|
<InputWithLabel
|
||||||
id={'deploymentNameLabel'}
|
id={'deploymentNameLabel'}
|
||||||
value={getAzure('deploymentName') || ''}
|
value={getAzure('deploymentName') || ''}
|
||||||
onChange={e => setAzure('deploymentName', e.target.value || '')}
|
onChange={(e) => setAzure('deploymentName', e.target.value || '')}
|
||||||
label={'Azure OpenAI Deployment Name'}
|
label={'Azure OpenAI Deployment Name'}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<InputWithLabel
|
<InputWithLabel
|
||||||
id={'versionLabel'}
|
id={'versionLabel'}
|
||||||
value={getAzure('version') || ''}
|
value={getAzure('version') || ''}
|
||||||
onChange={e => setAzure('version', e.target.value || '')}
|
onChange={(e) => setAzure('version', e.target.value || '')}
|
||||||
label={'Azure OpenAI API Version'}
|
label={'Azure OpenAI API Version'}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<InputWithLabel
|
<InputWithLabel
|
||||||
id={'apiKeyLabel'}
|
id={'apiKeyLabel'}
|
||||||
value={getAzure('apiKey') || ''}
|
value={getAzure('apiKey') || ''}
|
||||||
onChange={e => setAzure('apiKey', e.target.value || '')}
|
onChange={(e) => setAzure('apiKey', e.target.value || '')}
|
||||||
label={'Azure OpenAI API Key'}
|
label={'Azure OpenAI API Key'}
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
|
|
@ -236,7 +236,7 @@ const SetTokenDialog = ({ open, onOpenChange, endpoint }) => {
|
||||||
<InputWithLabel
|
<InputWithLabel
|
||||||
id={'chatGPTLabel'}
|
id={'chatGPTLabel'}
|
||||||
value={token || ''}
|
value={token || ''}
|
||||||
onChange={e => setToken(e.target.value || '')}
|
onChange={(e) => setToken(e.target.value || '')}
|
||||||
label={'Token Name'}
|
label={'Token Name'}
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
|
|
|
||||||
|
|
@ -128,7 +128,7 @@ export default function TextChat({ isSearchView = false }) {
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleBingToneSetting = () => {
|
const handleBingToneSetting = () => {
|
||||||
setShowBingToneSetting(show => !show);
|
setShowBingToneSetting((show) => !show);
|
||||||
};
|
};
|
||||||
|
|
||||||
if (isSearchView) return <></>;
|
if (isSearchView) return <></>;
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,7 @@ export default function MessageHandler() {
|
||||||
}, 5000);
|
}, 5000);
|
||||||
}
|
}
|
||||||
|
|
||||||
setConversation(prevState => ({
|
setConversation((prevState) => ({
|
||||||
...prevState,
|
...prevState,
|
||||||
...conversation
|
...conversation
|
||||||
}));
|
}));
|
||||||
|
|
@ -104,7 +104,7 @@ export default function MessageHandler() {
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const { conversationId } = message;
|
const { conversationId } = message;
|
||||||
setConversation(prevState => ({
|
setConversation((prevState) => ({
|
||||||
...prevState,
|
...prevState,
|
||||||
conversationId
|
conversationId
|
||||||
}));
|
}));
|
||||||
|
|
@ -133,7 +133,7 @@ export default function MessageHandler() {
|
||||||
}, 5000);
|
}, 5000);
|
||||||
}
|
}
|
||||||
|
|
||||||
setConversation(prevState => ({
|
setConversation((prevState) => ({
|
||||||
...prevState,
|
...prevState,
|
||||||
...conversation
|
...conversation
|
||||||
}));
|
}));
|
||||||
|
|
@ -167,7 +167,7 @@ export default function MessageHandler() {
|
||||||
abortKey: conversationId
|
abortKey: conversationId
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.then(response => response.json())
|
.then((response) => response.json())
|
||||||
.then((data) => {
|
.then((data) => {
|
||||||
console.log('aborted', data);
|
console.log('aborted', data);
|
||||||
cancelHandler(data, submission);
|
cancelHandler(data, submission);
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ export default function HoverButtons({
|
||||||
|
|
||||||
const branchingSupported =
|
const branchingSupported =
|
||||||
// azureOpenAI, openAI, chatGPTBrowser support branching, so edit enabled
|
// azureOpenAI, openAI, chatGPTBrowser support branching, so edit enabled
|
||||||
!!['azureOpenAI', 'openAI', 'chatGPTBrowser', 'google'].find(e => e === endpoint) ||
|
!!['azureOpenAI', 'openAI', 'chatGPTBrowser', 'google'].find((e) => e === endpoint) ||
|
||||||
// Sydney in bingAI supports branching, so edit enabled
|
// Sydney in bingAI supports branching, so edit enabled
|
||||||
(endpoint === 'bingAI' && jailbreak);
|
(endpoint === 'bingAI' && jailbreak);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ export default function Message({
|
||||||
}
|
}
|
||||||
}, [last, message]);
|
}, [last, message]);
|
||||||
|
|
||||||
const enterEdit = cancel => setCurrentEditId(cancel ? -1 : message.messageId);
|
const enterEdit = (cancel) => setCurrentEditId(cancel ? -1 : message.messageId);
|
||||||
|
|
||||||
const handleWheel = () => {
|
const handleWheel = () => {
|
||||||
if (blinker) {
|
if (blinker) {
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ export default function MultiMessage({
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{messagesTree
|
{messagesTree
|
||||||
? messagesTree.map(message => (
|
? messagesTree.map((message) => (
|
||||||
<Message
|
<Message
|
||||||
key={message.messageId}
|
key={message.messageId}
|
||||||
conversation={conversation}
|
conversation={conversation}
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ export default function ExportModel({ open, onOpenChange }) {
|
||||||
|
|
||||||
const getSiblingIdx = useRecoilCallback(
|
const getSiblingIdx = useRecoilCallback(
|
||||||
({ snapshot }) =>
|
({ snapshot }) =>
|
||||||
async messageId =>
|
async (messageId) =>
|
||||||
await snapshot.getPromise(store.messagesSiblingIdxFamily(messageId)),
|
await snapshot.getPromise(store.messagesSiblingIdxFamily(messageId)),
|
||||||
[]
|
[]
|
||||||
);
|
);
|
||||||
|
|
@ -142,39 +142,39 @@ export default function ExportModel({ open, onOpenChange }) {
|
||||||
fileName: filename,
|
fileName: filename,
|
||||||
extension: 'csv',
|
extension: 'csv',
|
||||||
exportType: exportFromJSON.types.csv,
|
exportType: exportFromJSON.types.csv,
|
||||||
beforeTableEncode: entries => [
|
beforeTableEncode: (entries) => [
|
||||||
{
|
{
|
||||||
fieldName: 'sender',
|
fieldName: 'sender',
|
||||||
fieldValues: entries.find(e => e.fieldName == 'sender').fieldValues
|
fieldValues: entries.find((e) => e.fieldName == 'sender').fieldValues
|
||||||
},
|
},
|
||||||
{ fieldName: 'text', fieldValues: entries.find(e => e.fieldName == 'text').fieldValues },
|
{ fieldName: 'text', fieldValues: entries.find((e) => e.fieldName == 'text').fieldValues },
|
||||||
{
|
{
|
||||||
fieldName: 'isCreatedByUser',
|
fieldName: 'isCreatedByUser',
|
||||||
fieldValues: entries.find(e => e.fieldName == 'isCreatedByUser').fieldValues
|
fieldValues: entries.find((e) => e.fieldName == 'isCreatedByUser').fieldValues
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
fieldName: 'error',
|
fieldName: 'error',
|
||||||
fieldValues: entries.find(e => e.fieldName == 'error').fieldValues
|
fieldValues: entries.find((e) => e.fieldName == 'error').fieldValues
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
fieldName: 'unfinished',
|
fieldName: 'unfinished',
|
||||||
fieldValues: entries.find(e => e.fieldName == 'unfinished').fieldValues
|
fieldValues: entries.find((e) => e.fieldName == 'unfinished').fieldValues
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
fieldName: 'cancelled',
|
fieldName: 'cancelled',
|
||||||
fieldValues: entries.find(e => e.fieldName == 'cancelled').fieldValues
|
fieldValues: entries.find((e) => e.fieldName == 'cancelled').fieldValues
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
fieldName: 'messageId',
|
fieldName: 'messageId',
|
||||||
fieldValues: entries.find(e => e.fieldName == 'messageId').fieldValues
|
fieldValues: entries.find((e) => e.fieldName == 'messageId').fieldValues
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
fieldName: 'parentMessageId',
|
fieldName: 'parentMessageId',
|
||||||
fieldValues: entries.find(e => e.fieldName == 'parentMessageId').fieldValues
|
fieldValues: entries.find((e) => e.fieldName == 'parentMessageId').fieldValues
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
fieldName: 'createdAt',
|
fieldName: 'createdAt',
|
||||||
fieldValues: entries.find(e => e.fieldName == 'createdAt').fieldValues
|
fieldValues: entries.find((e) => e.fieldName == 'createdAt').fieldValues
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
|
@ -322,7 +322,7 @@ export default function ExportModel({ open, onOpenChange }) {
|
||||||
<Input
|
<Input
|
||||||
id="filename"
|
id="filename"
|
||||||
value={filename}
|
value={filename}
|
||||||
onChange={e => setFileName(filenamify(e.target.value || ''))}
|
onChange={(e) => setFileName(filenamify(e.target.value || ''))}
|
||||||
placeholder="Set the filename"
|
placeholder="Set the filename"
|
||||||
className={cn(
|
className={cn(
|
||||||
defaultTextProps,
|
defaultTextProps,
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ export default function MobileNav({ setNavVisible }) {
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
className="-ml-0.5 -mt-0.5 inline-flex h-10 w-10 items-center justify-center rounded-md hover:text-gray-900 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-white dark:hover:text-white"
|
className="-ml-0.5 -mt-0.5 inline-flex h-10 w-10 items-center justify-center rounded-md hover:text-gray-900 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-white dark:hover:text-white"
|
||||||
onClick={() => setNavVisible(prev => !prev)}
|
onClick={() => setNavVisible((prev) => !prev)}
|
||||||
>
|
>
|
||||||
<span className="sr-only">Open sidebar</span>
|
<span className="sr-only">Open sidebar</span>
|
||||||
<svg
|
<svg
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ export default function SearchBar({ clearSearch }) {
|
||||||
type="text"
|
type="text"
|
||||||
className="m-0 mr-0 w-full border-none bg-transparent p-0 text-sm leading-tight outline-none"
|
className="m-0 mr-0 w-full border-none bg-transparent p-0 text-sm leading-tight outline-none"
|
||||||
value={searchQuery}
|
value={searchQuery}
|
||||||
onChange={e => setSearchQuery(e.target.value)}
|
onChange={(e) => setSearchQuery(e.target.value)}
|
||||||
placeholder="Search messages"
|
placeholder="Search messages"
|
||||||
onKeyUp={handleKeyUp}
|
onKeyUp={handleKeyUp}
|
||||||
/>
|
/>
|
||||||
|
|
|
||||||
|
|
@ -119,7 +119,7 @@ export default function Nav({ navVisible, setNavVisible }) {
|
||||||
};
|
};
|
||||||
|
|
||||||
const toggleNavVisible = () => {
|
const toggleNavVisible = () => {
|
||||||
setNavVisible(prev => !prev);
|
setNavVisible((prev) => !prev);
|
||||||
};
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import { cn } from '~/utils/';
|
||||||
|
|
||||||
function Dropdown({ value, onChange, options, className, containerClassName }) {
|
function Dropdown({ value, onChange, options, className, containerClassName }) {
|
||||||
const currentOption =
|
const currentOption =
|
||||||
options.find(element => element === value || element?.value === value) ?? value;
|
options.find((element) => element === value || element?.value === value) ?? value;
|
||||||
return (
|
return (
|
||||||
<div className={cn('flex items-center justify-center gap-2', containerClassName)}>
|
<div className={cn('flex items-center justify-center gap-2', containerClassName)}>
|
||||||
<div className="relative w-full">
|
<div className="relative w-full">
|
||||||
|
|
|
||||||
|
|
@ -22,12 +22,12 @@ const ModelSelect = ({ model, onChange, availableModels, ...props }) => {
|
||||||
</DropdownMenuTrigger>
|
</DropdownMenuTrigger>
|
||||||
<DropdownMenuContent
|
<DropdownMenuContent
|
||||||
className="w-56 dark:bg-gray-700"
|
className="w-56 dark:bg-gray-700"
|
||||||
onCloseAutoFocus={event => event.preventDefault()}
|
onCloseAutoFocus={(event) => event.preventDefault()}
|
||||||
>
|
>
|
||||||
<DropdownMenuLabel className="dark:text-gray-300">Select a model</DropdownMenuLabel>
|
<DropdownMenuLabel className="dark:text-gray-300">Select a model</DropdownMenuLabel>
|
||||||
<DropdownMenuSeparator />
|
<DropdownMenuSeparator />
|
||||||
<DropdownMenuRadioGroup value={model} onValueChange={onChange} className="overflow-y-auto">
|
<DropdownMenuRadioGroup value={model} onValueChange={onChange} className="overflow-y-auto">
|
||||||
{availableModels.map(model => (
|
{availableModels.map((model) => (
|
||||||
<DropdownMenuRadioItem
|
<DropdownMenuRadioItem
|
||||||
key={model}
|
key={model}
|
||||||
value={model}
|
value={model}
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ const refreshConversationsHint = atom({
|
||||||
const useConversations = () => {
|
const useConversations = () => {
|
||||||
const setRefreshConversationsHint = useSetRecoilState(refreshConversationsHint);
|
const setRefreshConversationsHint = useSetRecoilState(refreshConversationsHint);
|
||||||
|
|
||||||
const refreshConversations = () => setRefreshConversationsHint(prevState => prevState + 1);
|
const refreshConversations = () => setRefreshConversationsHint((prevState) => prevState + 1);
|
||||||
|
|
||||||
return { refreshConversations };
|
return { refreshConversations };
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ const availableEndpoints = selector({
|
||||||
get: ({ get }) => {
|
get: ({ get }) => {
|
||||||
const endpoints = ['azureOpenAI', 'openAI', 'chatGPTBrowser', 'bingAI', 'google'];
|
const endpoints = ['azureOpenAI', 'openAI', 'chatGPTBrowser', 'bingAI', 'google'];
|
||||||
const f = get(endpointsFilter);
|
const f = get(endpointsFilter);
|
||||||
return endpoints.filter(endpoint => f[endpoint]);
|
return endpoints.filter((endpoint) => f[endpoint]);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// const modelAvailable
|
// const modelAvailable
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ const useToken = (endpoint) => {
|
||||||
const getToken = () => localStorage.getItem(`${endpoint}_token`);
|
const getToken = () => localStorage.getItem(`${endpoint}_token`);
|
||||||
const saveToken = (value) => {
|
const saveToken = (value) => {
|
||||||
localStorage.setItem(`${endpoint}_token`, value);
|
localStorage.setItem(`${endpoint}_token`, value);
|
||||||
setHints(prev => prev + 1);
|
setHints((prev) => prev + 1);
|
||||||
};
|
};
|
||||||
|
|
||||||
return { token: getToken(), getToken, saveToken };
|
return { token: getToken(), getToken, saveToken };
|
||||||
|
|
|
||||||
|
|
@ -128,7 +128,7 @@ const getDefaultConversation = ({ conversation, prevConversation, endpointsConfi
|
||||||
// if anything happens, reset to default model
|
// if anything happens, reset to default model
|
||||||
|
|
||||||
const endpoint = ['openAI', 'azureOpenAI', 'bingAI', 'chatGPTBrowser', 'google'].find(
|
const endpoint = ['openAI', 'azureOpenAI', 'bingAI', 'chatGPTBrowser', 'google'].find(
|
||||||
e => endpointsConfig?.[e]
|
(e) => endpointsConfig?.[e]
|
||||||
);
|
);
|
||||||
if (endpoint) {
|
if (endpoint) {
|
||||||
conversation = buildDefaultConversation({ conversation, endpoint, endpointsConfig });
|
conversation = buildDefaultConversation({ conversation, endpoint, endpointsConfig });
|
||||||
|
|
|
||||||
|
|
@ -159,7 +159,7 @@ const useMessageHandler = () => {
|
||||||
};
|
};
|
||||||
|
|
||||||
const regenerate = ({ parentMessageId }) => {
|
const regenerate = ({ parentMessageId }) => {
|
||||||
const parentMessage = messages?.find(element => element.messageId == parentMessageId);
|
const parentMessage = messages?.find((element) => element.messageId == parentMessageId);
|
||||||
|
|
||||||
if (parentMessage && parentMessage.isCreatedByUser)
|
if (parentMessage && parentMessage.isCreatedByUser)
|
||||||
ask({ ...parentMessage }, { isRegenerate: true });
|
ask({ ...parentMessage }, { isRegenerate: true });
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue