diff --git a/api/app/clients/bingai.js b/api/app/clients/bingai.js
index dcf150d1cf..0ed57172b9 100644
--- a/api/app/clients/bingai.js
+++ b/api/app/clients/bingai.js
@@ -2,7 +2,7 @@ require('dotenv').config();
const { KeyvFile } = require('keyv-file');
const askBing = async ({ text, onProgress, convo }) => {
- const { BingAIClient } = (await import('@waylaidwanderer/chatgpt-api'));
+ const { BingAIClient } = await import('@waylaidwanderer/chatgpt-api');
const bingAIClient = new BingAIClient({
// "_U" cookie from bing.com
@@ -11,7 +11,7 @@ const askBing = async ({ text, onProgress, convo }) => {
// cookies: '',
debug: false,
cache: { store: new KeyvFile({ filename: './data/cache.json' }) },
- proxy: process.env.PROXY || null,
+ proxy: process.env.PROXY || null
});
let options = { onProgress };
@@ -19,8 +19,15 @@ const askBing = async ({ text, onProgress, convo }) => {
options = { ...options, ...convo };
}
- if (options?.jailbreakConversationId == 'false')
- options.jailbreakConversationId = false
+ if (options?.jailbreakConversationId == 'false') {
+ options.jailbreakConversationId = false;
+ }
+
+ if (convo.toneStyle) {
+ options.toneStyle = convo.toneStyle;
+ }
+
+ console.log('bing options', options);
const res = await bingAIClient.sendMessage(text, options);
diff --git a/api/app/clients/sydney.js b/api/app/clients/sydney.js
index 3466f71c17..beaa6f4029 100644
--- a/api/app/clients/sydney.js
+++ b/api/app/clients/sydney.js
@@ -22,6 +22,10 @@ const askSydney = async ({ text, onProgress, convo }) => {
options = { ...options, jailbreakConversationId: convo.jailbreakConversationId, parentMessageId: convo.parentMessageId };
}
+ if (convo.toneStyle) {
+ options.toneStyle = convo.toneStyle;
+ }
+
console.log('sydney options', options);
const res = await sydneyClient.sendMessage(text, options
diff --git a/api/models/schema/convoSchema.js b/api/models/schema/convoSchema.js
index a654b1425a..79e621ef8e 100644
--- a/api/models/schema/convoSchema.js
+++ b/api/models/schema/convoSchema.js
@@ -32,6 +32,10 @@ const convoSchema = mongoose.Schema(
invocationId: {
type: String
},
+ toneStyle: {
+ type: String,
+ default: null
+ },
chatGptLabel: {
type: String,
default: null
diff --git a/client/package-lock.json b/client/package-lock.json
index 56ccd4ec6c..bcf2e1b701 100644
--- a/client/package-lock.json
+++ b/client/package-lock.json
@@ -13,7 +13,7 @@
"@radix-ui/react-dialog": "^1.0.2",
"@radix-ui/react-dropdown-menu": "^2.0.2",
"@radix-ui/react-label": "^2.0.0",
- "@radix-ui/react-tabs": "^1.0.2",
+ "@radix-ui/react-tabs": "^1.0.3",
"@reduxjs/toolkit": "^1.9.2",
"axios": "^1.3.4",
"class-variance-authority": "^0.4.0",
@@ -41,6 +41,7 @@
"swr": "^2.0.3",
"tailwind-merge": "^1.9.1",
"tailwindcss-animate": "^1.0.5",
+ "tailwindcss-radix": "^2.8.0",
"url": "^0.11.0",
"uuidv4": "^6.2.13"
},
@@ -2897,9 +2898,9 @@
}
},
"node_modules/@radix-ui/react-tabs": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.0.2.tgz",
- "integrity": "sha512-gOUwh+HbjCuL0UCo8kZ+kdUEG8QtpdO4sMQduJ34ZEz0r4922g9REOBM+vIsfwtGxSug4Yb1msJMJYN2Bk8TpQ==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.0.3.tgz",
+ "integrity": "sha512-4CkF/Rx1GcrusI/JZ1Rvyx4okGUs6wEenWA0RG/N+CwkRhTy7t54y7BLsWUXrAz/GRbBfHQg/Odfs/RoW0CiRA==",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@radix-ui/primitive": "1.0.0",
@@ -2907,8 +2908,58 @@
"@radix-ui/react-direction": "1.0.0",
"@radix-ui/react-id": "1.0.0",
"@radix-ui/react-presence": "1.0.0",
- "@radix-ui/react-primitive": "1.0.1",
- "@radix-ui/react-roving-focus": "1.0.2",
+ "@radix-ui/react-primitive": "1.0.2",
+ "@radix-ui/react-roving-focus": "1.0.3",
+ "@radix-ui/react-use-controllable-state": "1.0.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-collection": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.2.tgz",
+ "integrity": "sha512-s8WdQQ6wNXpaxdZ308KSr8fEWGrg4un8i4r/w7fhiS4ElRNjk5rRcl0/C6TANG2LvLOGIxtzo/jAg6Qf73TEBw==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-compose-refs": "1.0.0",
+ "@radix-ui/react-context": "1.0.0",
+ "@radix-ui/react-primitive": "1.0.2",
+ "@radix-ui/react-slot": "1.0.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.2.tgz",
+ "integrity": "sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-slot": "1.0.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-roving-focus": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.3.tgz",
+ "integrity": "sha512-stjCkIoMe6h+1fWtXlA6cRfikdBzCLp3SnVk7c48cv/uy3DTGoXhN76YaOYUJuy3aEDvDIKwKR5KSmvrtPvQPQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/primitive": "1.0.0",
+ "@radix-ui/react-collection": "1.0.2",
+ "@radix-ui/react-compose-refs": "1.0.0",
+ "@radix-ui/react-context": "1.0.0",
+ "@radix-ui/react-direction": "1.0.0",
+ "@radix-ui/react-id": "1.0.0",
+ "@radix-ui/react-primitive": "1.0.2",
+ "@radix-ui/react-use-callback-ref": "1.0.0",
"@radix-ui/react-use-controllable-state": "1.0.0"
},
"peerDependencies": {
@@ -11886,6 +11937,11 @@
"tailwindcss": ">=3.0.0 || insiders"
}
},
+ "node_modules/tailwindcss-radix": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/tailwindcss-radix/-/tailwindcss-radix-2.8.0.tgz",
+ "integrity": "sha512-1k1UfoIYgVyBl13FKwwoKavjnJ5VEaUClCTAsgz3VLquN4ay/lyaMPzkbqD71sACDs2fRGImytAUlMb4TzOt1A=="
+ },
"node_modules/tailwindcss/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
@@ -15035,9 +15091,9 @@
}
},
"@radix-ui/react-tabs": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.0.2.tgz",
- "integrity": "sha512-gOUwh+HbjCuL0UCo8kZ+kdUEG8QtpdO4sMQduJ34ZEz0r4922g9REOBM+vIsfwtGxSug4Yb1msJMJYN2Bk8TpQ==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.0.3.tgz",
+ "integrity": "sha512-4CkF/Rx1GcrusI/JZ1Rvyx4okGUs6wEenWA0RG/N+CwkRhTy7t54y7BLsWUXrAz/GRbBfHQg/Odfs/RoW0CiRA==",
"requires": {
"@babel/runtime": "^7.13.10",
"@radix-ui/primitive": "1.0.0",
@@ -15045,9 +15101,49 @@
"@radix-ui/react-direction": "1.0.0",
"@radix-ui/react-id": "1.0.0",
"@radix-ui/react-presence": "1.0.0",
- "@radix-ui/react-primitive": "1.0.1",
- "@radix-ui/react-roving-focus": "1.0.2",
+ "@radix-ui/react-primitive": "1.0.2",
+ "@radix-ui/react-roving-focus": "1.0.3",
"@radix-ui/react-use-controllable-state": "1.0.0"
+ },
+ "dependencies": {
+ "@radix-ui/react-collection": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.2.tgz",
+ "integrity": "sha512-s8WdQQ6wNXpaxdZ308KSr8fEWGrg4un8i4r/w7fhiS4ElRNjk5rRcl0/C6TANG2LvLOGIxtzo/jAg6Qf73TEBw==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-compose-refs": "1.0.0",
+ "@radix-ui/react-context": "1.0.0",
+ "@radix-ui/react-primitive": "1.0.2",
+ "@radix-ui/react-slot": "1.0.1"
+ }
+ },
+ "@radix-ui/react-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.2.tgz",
+ "integrity": "sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-slot": "1.0.1"
+ }
+ },
+ "@radix-ui/react-roving-focus": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.3.tgz",
+ "integrity": "sha512-stjCkIoMe6h+1fWtXlA6cRfikdBzCLp3SnVk7c48cv/uy3DTGoXhN76YaOYUJuy3aEDvDIKwKR5KSmvrtPvQPQ==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/primitive": "1.0.0",
+ "@radix-ui/react-collection": "1.0.2",
+ "@radix-ui/react-compose-refs": "1.0.0",
+ "@radix-ui/react-context": "1.0.0",
+ "@radix-ui/react-direction": "1.0.0",
+ "@radix-ui/react-id": "1.0.0",
+ "@radix-ui/react-primitive": "1.0.2",
+ "@radix-ui/react-use-callback-ref": "1.0.0",
+ "@radix-ui/react-use-controllable-state": "1.0.0"
+ }
+ }
}
},
"@radix-ui/react-use-callback-ref": {
@@ -21553,6 +21649,11 @@
"integrity": "sha512-UU3qrOJ4lFQABY+MVADmBm+0KW3xZyhMdRvejwtXqYOL7YjHYxmuREFAZdmVG5LPe5E9CAst846SLC4j5I3dcw==",
"requires": {}
},
+ "tailwindcss-radix": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/tailwindcss-radix/-/tailwindcss-radix-2.8.0.tgz",
+ "integrity": "sha512-1k1UfoIYgVyBl13FKwwoKavjnJ5VEaUClCTAsgz3VLquN4ay/lyaMPzkbqD71sACDs2fRGImytAUlMb4TzOt1A=="
+ },
"tapable": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
diff --git a/client/package.json b/client/package.json
index 1b8fb0458f..1050739668 100644
--- a/client/package.json
+++ b/client/package.json
@@ -23,7 +23,7 @@
"@radix-ui/react-dialog": "^1.0.2",
"@radix-ui/react-dropdown-menu": "^2.0.2",
"@radix-ui/react-label": "^2.0.0",
- "@radix-ui/react-tabs": "^1.0.2",
+ "@radix-ui/react-tabs": "^1.0.3",
"@reduxjs/toolkit": "^1.9.2",
"axios": "^1.3.4",
"class-variance-authority": "^0.4.0",
@@ -51,6 +51,7 @@
"swr": "^2.0.3",
"tailwind-merge": "^1.9.1",
"tailwindcss-animate": "^1.0.5",
+ "tailwindcss-radix": "^2.8.0",
"url": "^0.11.0",
"uuidv4": "^6.2.13"
},
diff --git a/client/src/components/Conversations/Conversation.jsx b/client/src/components/Conversations/Conversation.jsx
index 5d503372fd..c0ae103d33 100644
--- a/client/src/components/Conversations/Conversation.jsx
+++ b/client/src/components/Conversations/Conversation.jsx
@@ -23,7 +23,6 @@ export default function Conversation({
}) {
const [renaming, setRenaming] = useState(false);
const [titleInput, setTitleInput] = useState(title);
- const { modelMap } = useSelector((state) => state.models);
const { stopStream } = useSelector((state) => state.submit);
const inputRef = useRef(null);
const dispatch = useDispatch();
@@ -49,7 +48,8 @@ export default function Conversation({
conversationSignature,
jailbreakConversationId,
clientId,
- invocationId
+ invocationId,
+ toneStyle,
} = bingData;
dispatch(
setConversation({
@@ -59,6 +59,7 @@ export default function Conversation({
conversationSignature,
clientId,
invocationId,
+ toneStyle,
latestMessage: null
})
);
@@ -71,6 +72,7 @@ export default function Conversation({
conversationSignature: null,
clientId: null,
invocationId: null,
+ toneStyle: null,
latestMessage: null
})
);
@@ -85,13 +87,6 @@ export default function Conversation({
dispatch(setCustomModel(null));
}
- // if (modelMap[chatGptLabel.toLowerCase()]) {
- // console.log('custom model', chatGptLabel);
- // dispatch(setCustomModel(chatGptLabel.toLowerCase()));
- // } else {
- // dispatch(setCustomModel(null));
- // }
-
dispatch(setMessages(data));
dispatch(setCustomGpt(convo));
dispatch(setText(''));
diff --git a/client/src/components/Conversations/index.jsx b/client/src/components/Conversations/index.jsx
index eaa59b0097..aaddaaba86 100644
--- a/client/src/components/Conversations/index.jsx
+++ b/client/src/components/Conversations/index.jsx
@@ -14,7 +14,8 @@ export default function Conversations({ conversations, conversationId, moveToTop
conversationSignature: convo.conversationSignature,
parentMessageId: convo.parentMessageId || null,
clientId: convo.clientId,
- invocationId: convo.invocationId
+ invocationId: convo.invocationId,
+ toneStyle: convo.toneStyle,
}
: null;
diff --git a/client/src/components/Main/BingStyles.jsx b/client/src/components/Main/BingStyles.jsx
new file mode 100644
index 0000000000..a54134e34d
--- /dev/null
+++ b/client/src/components/Main/BingStyles.jsx
@@ -0,0 +1,61 @@
+import React, { useState, useEffect, forwardRef } from 'react';
+import { Tabs, TabsList, TabsTrigger } from '../ui/Tabs.tsx';
+import { useDispatch, useSelector } from 'react-redux';
+import { setConversation } from '~/store/convoSlice';
+
+function BingStyles(props, ref) {
+ const dispatch = useDispatch();
+ const [value, setValue] = useState('fast');
+ const { model } = useSelector((state) => state.submit);
+ const { conversationId } = useSelector((state) => state.convo);
+ const { messages } = useSelector((state) => state.messages);
+
+ const isBing = model === 'bingai' || model === 'sydney';
+ useEffect(() => {
+ if (isBing && !conversationId) {
+ dispatch(setConversation({ toneStyle: value }));
+ }
+ }, [isBing, conversationId, model, value, dispatch]);
+
+ const show = isBing && (!conversationId || messages?.length === 0);
+ const defaultClasses = 'p-2 rounded-md font-normal bg-white/[.60] dark:bg-gray-700 text-black';
+ const defaultSelected = defaultClasses + 'font-medium data-[state=active]:text-white';
+
+ const selectedClass = (val) => val + '-tab ' + defaultSelected;
+
+ const changeHandler = value => {
+ setValue(value);
+ dispatch(setConversation({ toneStyle: value }));
+ };
+ return (
+