diff --git a/.gitignore b/.gitignore
index f9c5a49088..5b873a2608 100644
--- a/.gitignore
+++ b/.gitignore
@@ -23,6 +23,7 @@ build/
dist/
public/main.js
public/main.js.map
+public/main.js.LICENSE.txt
# Dependency directorys
# Deployed apps should consider commenting these lines out:
diff --git a/package-lock.json b/package-lock.json
index f8041cf9da..6dace53b40 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,7 +11,7 @@
"dependencies": {
"@keyv/mongo": "^2.1.8",
"@reduxjs/toolkit": "^1.9.2",
- "chatgpt": "^4.1.1",
+ "chatgpt": "^4.2.0",
"cors": "^2.8.5",
"crypto-browserify": "^3.12.0",
"dotenv": "^16.0.3",
@@ -5233,9 +5233,9 @@
}
},
"node_modules/chatgpt": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/chatgpt/-/chatgpt-4.1.1.tgz",
- "integrity": "sha512-2Hn9kjSSndvmLiRLYK1xHXxf436xwby3vmLBlLayxFFErQHW2+47zjGlaanhrFzb89MfWsf+1GPwl/qKklDUeA==",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/chatgpt/-/chatgpt-4.2.0.tgz",
+ "integrity": "sha512-HYQ65GCa8PGtmmUB+XSAa17/IKTy/EEj8QU9HGU8UAsGBtKZushiozC0JpNcTyG+ivpuwzdduXJyL6ELnqkY4A==",
"dependencies": {
"eventsource-parser": "^0.0.5",
"gpt-3-encoder": "^1.1.4",
@@ -16406,9 +16406,9 @@
}
},
"chatgpt": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/chatgpt/-/chatgpt-4.1.1.tgz",
- "integrity": "sha512-2Hn9kjSSndvmLiRLYK1xHXxf436xwby3vmLBlLayxFFErQHW2+47zjGlaanhrFzb89MfWsf+1GPwl/qKklDUeA==",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/chatgpt/-/chatgpt-4.2.0.tgz",
+ "integrity": "sha512-HYQ65GCa8PGtmmUB+XSAa17/IKTy/EEj8QU9HGU8UAsGBtKZushiozC0JpNcTyG+ivpuwzdduXJyL6ELnqkY4A==",
"requires": {
"eventsource-parser": "^0.0.5",
"gpt-3-encoder": "^1.1.4",
diff --git a/package.json b/package.json
index db2278b98b..3525b27baf 100644
--- a/package.json
+++ b/package.json
@@ -23,7 +23,7 @@
"dependencies": {
"@keyv/mongo": "^2.1.8",
"@reduxjs/toolkit": "^1.9.2",
- "chatgpt": "^4.1.1",
+ "chatgpt": "^4.2.0",
"cors": "^2.8.5",
"crypto-browserify": "^3.12.0",
"dotenv": "^16.0.3",
diff --git a/server/index.js b/server/index.js
index 5fa4992680..c6ae9c651e 100644
--- a/server/index.js
+++ b/server/index.js
@@ -33,7 +33,6 @@ app.get('/messages/:conversationId', async (req, res) => {
app.post('/clear_convos', async (req, res) => {
let filter = {};
const { conversationId } = req.body.arg;
- console.log('conversationId', conversationId);
if (!!conversationId) {
filter = { conversationId };
}
@@ -77,19 +76,24 @@ app.post('/ask', async (req, res) => {
res.write(`event: message\ndata: ${data}\n\n`);
};
- let gptResponse = await ask(text, progressCallback, { parentMessageId, conversationId });
- if (!!parentMessageId) {
- gptResponse = { ...gptResponse, parentMessageId };
- } else {
- gptResponse.title = await titleConversation(text, gptResponse.text);
+ try {
+ let gptResponse = await ask(text, progressCallback, { parentMessageId, conversationId });
+ if (!!parentMessageId) {
+ gptResponse = { ...gptResponse, parentMessageId };
+ } else {
+ gptResponse.title = await titleConversation(text, gptResponse.text);
+ }
+
+ gptResponse.sender = 'GPT';
+ await saveMessage(gptResponse);
+ await saveConvo(gptResponse);
+
+ res.write(`event: message\ndata: ${JSON.stringify(gptResponse)}\n\n`);
+ res.end();
+ } catch (error) {
+ console.error(error);
+ res.status(500).send(error);
}
-
- gptResponse.sender = 'GPT';
- await saveMessage(gptResponse);
- await saveConvo(gptResponse);
-
- res.write(`event: message\ndata: ${JSON.stringify(gptResponse)}\n\n`);
- res.end();
});
app.listen(port, () => {
diff --git a/src/components/Conversations/Conversation.jsx b/src/components/Conversations/Conversation.jsx
index 7e9acd7473..d6dab23203 100644
--- a/src/components/Conversations/Conversation.jsx
+++ b/src/components/Conversations/Conversation.jsx
@@ -11,17 +11,14 @@ export default function Conversation({ id, parentMessageId, title = 'New convers
const conversationId = useSelector((state) => state.convo.conversationId);
const { trigger, isMutating } = manualSWR(
`http://localhost:3050/messages/${id}`,
- 'get',
- (res) => dispatch(setMessages(res))
+ 'get'
);
- const clickHandler = () => {
- if (conversationId === id) {
- return;
- }
+ const clickHandler = async () => {
dispatch(setConversation({ conversationId: id, parentMessageId }));
- trigger();
+ const data = await trigger();
+ dispatch(setMessages(data));
};
return (
diff --git a/src/components/Nav/ClearConvos.jsx b/src/components/Nav/ClearConvos.jsx
new file mode 100644
index 0000000000..ff5426e413
--- /dev/null
+++ b/src/components/Nav/ClearConvos.jsx
@@ -0,0 +1,30 @@
+import React from 'react';
+import NavLink from './NavLink';
+import TrashIcon from '../svg/TrashIcon';
+import manualSWR from '~/utils/fetchers';
+import { useDispatch } from 'react-redux';
+import { setConversation } from '~/store/convoSlice';
+import { setMessages } from '~/store/messageSlice';
+
+export default function ClearConvos() {
+ const dispatch = useDispatch();
+
+ const { trigger, isMutating } = manualSWR(
+ 'http://localhost:3050/clear_convos',
+ 'post',
+ () => {
+ dispatch(setMessages([]));
+ dispatch(setConversation({ conversationId: null, parentMessageId: null }));
+ }
+ );
+
+ const clickHandler = () => trigger({});
+
+ return (
+
+ );
+}
diff --git a/src/components/Nav/NavLink.jsx b/src/components/Nav/NavLink.jsx
index 7f0875b5c2..e162423eaf 100644
--- a/src/components/Nav/NavLink.jsx
+++ b/src/components/Nav/NavLink.jsx
@@ -1,14 +1,19 @@
import React from 'react';
-export default function NavLink({ svg, text, clickHandler}) {
- // const props
- // if (clickHandler) {
+export default function NavLink({ svg, text, clickHandler }) {
+ const props = {
+ className:
+ 'flex cursor-pointer items-center gap-3 rounded-md py-3 px-3 text-sm text-white transition-colors duration-200 hover:bg-gray-500/10'
+ };
- // }
- // return (
- //
- // {svg()}
- // {text}
- //
- // );
+ if (clickHandler) {
+ props.onClick = clickHandler;
+ }
+
+ return (
+
+ {svg()}
+ {text}
+
+ );
}
diff --git a/src/components/Nav/NavLinks.jsx b/src/components/Nav/NavLinks.jsx
index 7cfb7e15da..ef11a51259 100644
--- a/src/components/Nav/NavLinks.jsx
+++ b/src/components/Nav/NavLinks.jsx
@@ -1,34 +1,13 @@
import React from 'react';
+import ClearConvos from './ClearConvos';
import NavLink from './NavLink';
-import TrashIcon from '../svg/TrashIcon';
import DarkModeIcon from '../svg/DarkModeIcon';
import LogOutIcon from '../svg/LogOutIcon';
-import manualSWR from '~/utils/fetchers';
-import { useDispatch } from 'react-redux';
-import { setConversation } from '~/store/convoSlice';
-import { setMessages } from '~/store/messageSlice';
export default function NavLinks() {
- const dispatch = useDispatch();
-
- const { trigger, isMutating } = manualSWR(
- 'http://localhost:3050/clear_convos',
- 'post',
- () => {
- dispatch(setMessages([]));
- dispatch(setConversation({ conversationId: null, parentMessageId: null }));
- }
- );
-
- const clickHandler = () => trigger({});
-
return (
<>
-
+
{
- state.messages = [...action.payload];
+ state.messages = action.payload;
},
}
});
diff --git a/src/utils/fetchers.js b/src/utils/fetchers.js
index 981cca4550..360268b34a 100644
--- a/src/utils/fetchers.js
+++ b/src/utils/fetchers.js
@@ -11,8 +11,11 @@ const postRequest = async (url, { arg }) => {
export const swr = (path) => useSWR(path, fetcher);
export default function manualSWR(path, type, successCallback) {
+ const options = {};
+
+ if (successCallback) {
+ options.onSuccess = successCallback;
+ }
const fetchFunction = type === 'get' ? fetcher : postRequest;
- return useSWRMutation(path, fetchFunction, {
- onSuccess: successCallback
- });
+ return useSWRMutation(path, fetchFunction, options);
};