diff --git a/README.md b/README.md
index 17b55b0..1cd00b4 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,8 @@
-# Chatbot UI
+# ChatUI
-Chatbot UI is an open source chat UI for AI models.
+Another ChatUI for ChimeraGPT + Poe models.
-![Chatbot UI](./public/screenshots/screenshot-0402023.jpg)
+![Chatbot UI](./public/screenshots/SUS.jpg)
diff --git a/components/Chat/Chat.tsx b/components/Chat/Chat.tsx
index fa6b69d..1c50056 100644
--- a/components/Chat/Chat.tsx
+++ b/components/Chat/Chat.tsx
@@ -355,34 +355,21 @@ export const Chat = memo(({ stopConversationRef }: Props) => {
Welcome to Chatbot UI
-
{`Chatbot UI is an open source clone of OpenAI's ChatGPT UI.`}
-
- Important: Chatbot UI is 100% unaffiliated with OpenAI.
-
-
-
-
- Chatbot UI allows you to plug in your API key to use this UI with
- their API.
-
-
- It is only used to communicate
- with their API.
-
+
{`Another ChatUI for ChimeraGPT with Poe models.`}
{t(
- 'Please set your OpenAI API key in the bottom left of the sidebar.',
+ 'Please set your ChimeraAPI key by placing it in "OpenAI API Key" textbox located in the bottom left of the sidebar.',
)}
- {t("If you don't have an OpenAI API key, you can get one here: ")}
+ {t("If you don't have an ChimeraAPI key, you can get one here: ")}
- openai.com
+ Discord Server
@@ -405,7 +392,7 @@ export const Chat = memo(({ stopConversationRef }: Props) => {
) : (
- 'Chatbot UI'
+ ''
)}
diff --git a/components/Chat/ChatInput.tsx b/components/Chat/ChatInput.tsx
index 64f8df6..84e6c15 100644
--- a/components/Chat/ChatInput.tsx
+++ b/components/Chat/ChatInput.tsx
@@ -1,398 +1,398 @@
-import {
- IconArrowDown,
- IconBolt,
- IconBrandGoogle,
- IconPlayerStop,
- IconRepeat,
- IconSend,
-} from '@tabler/icons-react';
-import {
- KeyboardEvent,
- MutableRefObject,
- useCallback,
- useContext,
- useEffect,
- useRef,
- useState,
-} from 'react';
-
-import { useTranslation } from 'next-i18next';
-
-import { Message } from '@/types/chat';
-import { Plugin } from '@/types/plugin';
-import { Prompt } from '@/types/prompt';
-
-import HomeContext from '@/pages/api/home/home.context';
-
-import { PluginSelect } from './PluginSelect';
-import { PromptList } from './PromptList';
-import { VariableModal } from './VariableModal';
-
-interface Props {
- onSend: (message: Message, plugin: Plugin | null) => void;
- onRegenerate: () => void;
- onScrollDownClick: () => void;
- stopConversationRef: MutableRefObject;
- textareaRef: MutableRefObject;
- showScrollDownButton: boolean;
-}
-
-export const ChatInput = ({
- onSend,
- onRegenerate,
- onScrollDownClick,
- stopConversationRef,
- textareaRef,
- showScrollDownButton,
-}: Props) => {
- const { t } = useTranslation('chat');
-
- const {
- state: { selectedConversation, messageIsStreaming, prompts },
-
- dispatch: homeDispatch,
- } = useContext(HomeContext);
-
- const [content, setContent] = useState();
- const [isTyping, setIsTyping] = useState(false);
- const [showPromptList, setShowPromptList] = useState(false);
- const [activePromptIndex, setActivePromptIndex] = useState(0);
- const [promptInputValue, setPromptInputValue] = useState('');
- const [variables, setVariables] = useState([]);
- const [isModalVisible, setIsModalVisible] = useState(false);
- const [showPluginSelect, setShowPluginSelect] = useState(false);
- const [plugin, setPlugin] = useState(null);
-
- const promptListRef = useRef(null);
-
- const filteredPrompts = prompts.filter((prompt) =>
- prompt.name.toLowerCase().includes(promptInputValue.toLowerCase()),
- );
-
- const handleChange = (e: React.ChangeEvent) => {
- const value = e.target.value;
- const maxLength = selectedConversation?.model.maxLength;
-
- if (maxLength && value.length > maxLength) {
- alert(
- t(
- `Message limit is {{maxLength}} characters. You have entered {{valueLength}} characters.`,
- { maxLength, valueLength: value.length },
- ),
- );
- return;
- }
-
- setContent(value);
- updatePromptListVisibility(value);
- };
-
- const handleSend = () => {
- if (messageIsStreaming) {
- return;
- }
-
- if (!content) {
- alert(t('Please enter a message'));
- return;
- }
-
- onSend({ role: 'user', content }, plugin);
- setContent('');
- setPlugin(null);
-
- if (window.innerWidth < 640 && textareaRef && textareaRef.current) {
- textareaRef.current.blur();
- }
- };
-
- const handleStopConversation = () => {
- stopConversationRef.current = true;
- setTimeout(() => {
- stopConversationRef.current = false;
- }, 1000);
- };
-
- const isMobile = () => {
- const userAgent =
- typeof window.navigator === 'undefined' ? '' : navigator.userAgent;
- const mobileRegex =
- /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobile|mobile|CriOS/i;
- return mobileRegex.test(userAgent);
- };
-
- const handleInitModal = () => {
- const selectedPrompt = filteredPrompts[activePromptIndex];
- if (selectedPrompt) {
- setContent((prevContent) => {
- const newContent = prevContent?.replace(
- /\/\w*$/,
- selectedPrompt.content,
- );
- return newContent;
- });
- handlePromptSelect(selectedPrompt);
- }
- setShowPromptList(false);
- };
-
- const handleKeyDown = (e: KeyboardEvent) => {
- if (showPromptList) {
- if (e.key === 'ArrowDown') {
- e.preventDefault();
- setActivePromptIndex((prevIndex) =>
- prevIndex < prompts.length - 1 ? prevIndex + 1 : prevIndex,
- );
- } else if (e.key === 'ArrowUp') {
- e.preventDefault();
- setActivePromptIndex((prevIndex) =>
- prevIndex > 0 ? prevIndex - 1 : prevIndex,
- );
- } else if (e.key === 'Tab') {
- e.preventDefault();
- setActivePromptIndex((prevIndex) =>
- prevIndex < prompts.length - 1 ? prevIndex + 1 : 0,
- );
- } else if (e.key === 'Enter') {
- e.preventDefault();
- handleInitModal();
- } else if (e.key === 'Escape') {
- e.preventDefault();
- setShowPromptList(false);
- } else {
- setActivePromptIndex(0);
- }
- } else if (e.key === 'Enter' && !isTyping && !isMobile() && !e.shiftKey) {
- e.preventDefault();
- handleSend();
- } else if (e.key === '/' && e.metaKey) {
- e.preventDefault();
- setShowPluginSelect(!showPluginSelect);
- }
- };
-
- const parseVariables = (content: string) => {
- const regex = /{{(.*?)}}/g;
- const foundVariables = [];
- let match;
-
- while ((match = regex.exec(content)) !== null) {
- foundVariables.push(match[1]);
- }
-
- return foundVariables;
- };
-
- const updatePromptListVisibility = useCallback((text: string) => {
- const match = text.match(/\/\w*$/);
-
- if (match) {
- setShowPromptList(true);
- setPromptInputValue(match[0].slice(1));
- } else {
- setShowPromptList(false);
- setPromptInputValue('');
- }
- }, []);
-
- const handlePromptSelect = (prompt: Prompt) => {
- const parsedVariables = parseVariables(prompt.content);
- setVariables(parsedVariables);
-
- if (parsedVariables.length > 0) {
- setIsModalVisible(true);
- } else {
- setContent((prevContent) => {
- const updatedContent = prevContent?.replace(/\/\w*$/, prompt.content);
- return updatedContent;
- });
- updatePromptListVisibility(prompt.content);
- }
- };
-
- const handleSubmit = (updatedVariables: string[]) => {
- const newContent = content?.replace(/{{(.*?)}}/g, (match, variable) => {
- const index = variables.indexOf(variable);
- return updatedVariables[index];
- });
-
- setContent(newContent);
-
- if (textareaRef && textareaRef.current) {
- textareaRef.current.focus();
- }
- };
-
- useEffect(() => {
- if (promptListRef.current) {
- promptListRef.current.scrollTop = activePromptIndex * 30;
- }
- }, [activePromptIndex]);
-
- useEffect(() => {
- if (textareaRef && textareaRef.current) {
- textareaRef.current.style.height = 'inherit';
- textareaRef.current.style.height = `${textareaRef.current?.scrollHeight}px`;
- textareaRef.current.style.overflow = `${
- textareaRef?.current?.scrollHeight > 400 ? 'auto' : 'hidden'
- }`;
- }
- }, [content]);
-
- useEffect(() => {
- const handleOutsideClick = (e: MouseEvent) => {
- if (
- promptListRef.current &&
- !promptListRef.current.contains(e.target as Node)
- ) {
- setShowPromptList(false);
- }
- };
-
- window.addEventListener('click', handleOutsideClick);
-
- return () => {
- window.removeEventListener('click', handleOutsideClick);
- };
- }, []);
-
- return (
-
-
- {messageIsStreaming && (
-
- {t('Stop Generating')}
-
- )}
-
- {!messageIsStreaming &&
- selectedConversation &&
- selectedConversation.messages.length > 0 && (
-
- {t('Regenerate response')}
-
- )}
-
-
-
setShowPluginSelect(!showPluginSelect)}
- onKeyDown={(e) => {}}
- >
- {plugin ? : }
-
-
- {showPluginSelect && (
-
-
{
- if (e.key === 'Escape') {
- e.preventDefault();
- setShowPluginSelect(false);
- textareaRef.current?.focus();
- }
- }}
- onPluginChange={(plugin: Plugin) => {
- setPlugin(plugin);
- setShowPluginSelect(false);
-
- if (textareaRef && textareaRef.current) {
- textareaRef.current.focus();
- }
- }}
- />
-
- )}
-
-
-
-
-
- ChatBot UI
-
- .{' '}
- {t(
- "Chatbot UI is an advanced chatbot kit for OpenAI's chat models aiming to mimic ChatGPT's interface and functionality.",
- )}
-
-
- );
-};
+import {
+ IconArrowDown,
+ IconBolt,
+ IconBrandGoogle,
+ IconPlayerStop,
+ IconRepeat,
+ IconSend,
+ } from '@tabler/icons-react';
+ import {
+ KeyboardEvent,
+ MutableRefObject,
+ useCallback,
+ useContext,
+ useEffect,
+ useRef,
+ useState,
+ } from 'react';
+
+ import { useTranslation } from 'next-i18next';
+
+ import { Message } from '@/types/chat';
+ import { Plugin } from '@/types/plugin';
+ import { Prompt } from '@/types/prompt';
+
+ import HomeContext from '@/pages/api/home/home.context';
+
+ import { PluginSelect } from './PluginSelect';
+ import { PromptList } from './PromptList';
+ import { VariableModal } from './VariableModal';
+
+ interface Props {
+ onSend: (message: Message, plugin: Plugin | null) => void;
+ onRegenerate: () => void;
+ onScrollDownClick: () => void;
+ stopConversationRef: MutableRefObject;
+ textareaRef: MutableRefObject;
+ showScrollDownButton: boolean;
+ }
+
+ export const ChatInput = ({
+ onSend,
+ onRegenerate,
+ onScrollDownClick,
+ stopConversationRef,
+ textareaRef,
+ showScrollDownButton,
+ }: Props) => {
+ const { t } = useTranslation('chat');
+
+ const {
+ state: { selectedConversation, messageIsStreaming, prompts },
+
+ dispatch: homeDispatch,
+ } = useContext(HomeContext);
+
+ const [content, setContent] = useState();
+ const [isTyping, setIsTyping] = useState(false);
+ const [showPromptList, setShowPromptList] = useState(false);
+ const [activePromptIndex, setActivePromptIndex] = useState(0);
+ const [promptInputValue, setPromptInputValue] = useState('');
+ const [variables, setVariables] = useState([]);
+ const [isModalVisible, setIsModalVisible] = useState(false);
+ const [showPluginSelect, setShowPluginSelect] = useState(false);
+ const [plugin, setPlugin] = useState(null);
+
+ const promptListRef = useRef(null);
+
+ const filteredPrompts = prompts.filter((prompt) =>
+ prompt.name.toLowerCase().includes(promptInputValue.toLowerCase()),
+ );
+
+ const handleChange = (e: React.ChangeEvent) => {
+ const value = e.target.value;
+ const maxLength = selectedConversation?.model.maxLength;
+
+ if (maxLength && value.length > maxLength) {
+ alert(
+ t(
+ `Message limit is {{maxLength}} characters. You have entered {{valueLength}} characters.`,
+ { maxLength, valueLength: value.length },
+ ),
+ );
+ return;
+ }
+
+ setContent(value);
+ updatePromptListVisibility(value);
+ };
+
+ const handleSend = () => {
+ if (messageIsStreaming) {
+ return;
+ }
+
+ if (!content) {
+ alert(t('Please enter a message'));
+ return;
+ }
+
+ onSend({ role: 'user', content }, plugin);
+ setContent('');
+ setPlugin(null);
+
+ if (window.innerWidth < 640 && textareaRef && textareaRef.current) {
+ textareaRef.current.blur();
+ }
+ };
+
+ const handleStopConversation = () => {
+ stopConversationRef.current = true;
+ setTimeout(() => {
+ stopConversationRef.current = false;
+ }, 1000);
+ };
+
+ const isMobile = () => {
+ const userAgent =
+ typeof window.navigator === 'undefined' ? '' : navigator.userAgent;
+ const mobileRegex =
+ /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobile|mobile|CriOS/i;
+ return mobileRegex.test(userAgent);
+ };
+
+ const handleInitModal = () => {
+ const selectedPrompt = filteredPrompts[activePromptIndex];
+ if (selectedPrompt) {
+ setContent((prevContent) => {
+ const newContent = prevContent?.replace(
+ /\/\w*$/,
+ selectedPrompt.content,
+ );
+ return newContent;
+ });
+ handlePromptSelect(selectedPrompt);
+ }
+ setShowPromptList(false);
+ };
+
+ const handleKeyDown = (e: KeyboardEvent) => {
+ if (showPromptList) {
+ if (e.key === 'ArrowDown') {
+ e.preventDefault();
+ setActivePromptIndex((prevIndex) =>
+ prevIndex < prompts.length - 1 ? prevIndex + 1 : prevIndex,
+ );
+ } else if (e.key === 'ArrowUp') {
+ e.preventDefault();
+ setActivePromptIndex((prevIndex) =>
+ prevIndex > 0 ? prevIndex - 1 : prevIndex,
+ );
+ } else if (e.key === 'Tab') {
+ e.preventDefault();
+ setActivePromptIndex((prevIndex) =>
+ prevIndex < prompts.length - 1 ? prevIndex + 1 : 0,
+ );
+ } else if (e.key === 'Enter') {
+ e.preventDefault();
+ handleInitModal();
+ } else if (e.key === 'Escape') {
+ e.preventDefault();
+ setShowPromptList(false);
+ } else {
+ setActivePromptIndex(0);
+ }
+ } else if (e.key === 'Enter' && !isTyping && !isMobile() && !e.shiftKey) {
+ e.preventDefault();
+ handleSend();
+ } else if (e.key === '/' && e.metaKey) {
+ e.preventDefault();
+ setShowPluginSelect(!showPluginSelect);
+ }
+ };
+
+ const parseVariables = (content: string) => {
+ const regex = /{{(.*?)}}/g;
+ const foundVariables = [];
+ let match;
+
+ while ((match = regex.exec(content)) !== null) {
+ foundVariables.push(match[1]);
+ }
+
+ return foundVariables;
+ };
+
+ const updatePromptListVisibility = useCallback((text: string) => {
+ const match = text.match(/\/\w*$/);
+
+ if (match) {
+ setShowPromptList(true);
+ setPromptInputValue(match[0].slice(1));
+ } else {
+ setShowPromptList(false);
+ setPromptInputValue('');
+ }
+ }, []);
+
+ const handlePromptSelect = (prompt: Prompt) => {
+ const parsedVariables = parseVariables(prompt.content);
+ setVariables(parsedVariables);
+
+ if (parsedVariables.length > 0) {
+ setIsModalVisible(true);
+ } else {
+ setContent((prevContent) => {
+ const updatedContent = prevContent?.replace(/\/\w*$/, prompt.content);
+ return updatedContent;
+ });
+ updatePromptListVisibility(prompt.content);
+ }
+ };
+
+ const handleSubmit = (updatedVariables: string[]) => {
+ const newContent = content?.replace(/{{(.*?)}}/g, (match, variable) => {
+ const index = variables.indexOf(variable);
+ return updatedVariables[index];
+ });
+
+ setContent(newContent);
+
+ if (textareaRef && textareaRef.current) {
+ textareaRef.current.focus();
+ }
+ };
+
+ useEffect(() => {
+ if (promptListRef.current) {
+ promptListRef.current.scrollTop = activePromptIndex * 30;
+ }
+ }, [activePromptIndex]);
+
+ useEffect(() => {
+ if (textareaRef && textareaRef.current) {
+ textareaRef.current.style.height = 'inherit';
+ textareaRef.current.style.height = `${textareaRef.current?.scrollHeight}px`;
+ textareaRef.current.style.overflow = `${
+ textareaRef?.current?.scrollHeight > 400 ? 'auto' : 'hidden'
+ }`;
+ }
+ }, [content]);
+
+ useEffect(() => {
+ const handleOutsideClick = (e: MouseEvent) => {
+ if (
+ promptListRef.current &&
+ !promptListRef.current.contains(e.target as Node)
+ ) {
+ setShowPromptList(false);
+ }
+ };
+
+ window.addEventListener('click', handleOutsideClick);
+
+ return () => {
+ window.removeEventListener('click', handleOutsideClick);
+ };
+ }, []);
+
+ return (
+
+
+ {messageIsStreaming && (
+
+ {t('Stop Generating')}
+
+ )}
+
+ {!messageIsStreaming &&
+ selectedConversation &&
+ selectedConversation.messages.length > 0 && (
+
+ {t('Regenerate response')}
+
+ )}
+
+
+
setShowPluginSelect(!showPluginSelect)}
+ onKeyDown={(e) => {}}
+ >
+ {plugin ? : }
+
+
+ {showPluginSelect && (
+
+
{
+ if (e.key === 'Escape') {
+ e.preventDefault();
+ setShowPluginSelect(false);
+ textareaRef.current?.focus();
+ }
+ }}
+ onPluginChange={(plugin: Plugin) => {
+ setPlugin(plugin);
+ setShowPluginSelect(false);
+
+ if (textareaRef && textareaRef.current) {
+ textareaRef.current.focus();
+ }
+ }}
+ />
+
+ )}
+
+
+
+
+
+ ChatBot UI
+
+ .{' '}
+ {t(
+ "Chatbot UI is an advanced chatbot kit for OpenAI's chat models aiming to mimic ChatGPT's interface and functionality.",
+ )}
+
+
+ );
+ };
\ No newline at end of file
diff --git a/public/screenshots/SUS.jpg b/public/screenshots/SUS.jpg
new file mode 100644
index 0000000..eb09db9
Binary files /dev/null and b/public/screenshots/SUS.jpg differ
diff --git a/types/openai.ts b/types/openai.ts
index bb6061f..06ed96b 100644
--- a/types/openai.ts
+++ b/types/openai.ts
@@ -7,24 +7,29 @@ export interface OpenAIModel {
tokenLimit: number;
}
+// Define all the model identifiers
export enum OpenAIModelID {
GPT_3_5 = 'gpt-3.5-turbo',
GPT_3_5_0613 = 'gpt-3.5-turbo-0613',
GPT_3_5_16K = 'gpt-3.5-turbo-16k',
+ GPT_3_5_16K_POE = 'gpt-3.5-turbo-16k-poe',
GPT_3_5_16K_0613 = 'gpt-3.5-turbo-16k-0613',
- GPT_4 = 'gpt-4',
GPT_4_0613 = 'gpt-4-0613',
+ GPT_4 = 'gpt-4',
+ GPT_4_POE = 'gpt-4-poe',
+ GPT_4_32K_0613 = 'gpt-4-32k-0613',
GPT_4_32K = 'gpt-4-32k',
- CLAUDE_PLUS = 'claude+',
- CLAUDE_INSTANT = 'claude-instant',
+ GPT_4_32K_POE = 'gpt-4-32k-poe',
+ CLAUDE_2_100K = 'claude-2-100k',
CLAUDE_INSTANT_100K = 'claude-instant-100k',
- BARD = 'bard',
+ CLAUDE_INSTANT = 'claude-instant',
}
// in case the `DEFAULT_MODEL` environment variable is not set or set to an unsupported model
export const fallbackModelID = OpenAIModelID.GPT_3_5;
export const OpenAIModels: Record = {
+ // Define all the models with their properties
[OpenAIModelID.GPT_3_5]: {
id: OpenAIModelID.GPT_3_5,
name: 'GPT-3.5',
@@ -43,52 +48,71 @@ export const OpenAIModels: Record = {
maxLength: 48000,
tokenLimit: 16384,
},
+ [OpenAIModelID.GPT_3_5_16K_POE]: {
+ id: OpenAIModelID.GPT_3_5_16K_POE,
+ name: 'GPT-3.5-16K-POE',
+ maxLength: 48000,
+ tokenLimit: 16384,
+ },
[OpenAIModelID.GPT_3_5_16K_0613]: {
id: OpenAIModelID.GPT_3_5_16K_0613,
name: 'GPT-3.5-16K-0613',
maxLength: 48000,
tokenLimit: 16384,
},
+ [OpenAIModelID.GPT_4_0613]: {
+ id: OpenAIModelID.GPT_4_0613,
+ name: 'GPT-4-0613',
+ maxLength: 24000,
+ tokenLimit: 8192,
+ },
[OpenAIModelID.GPT_4]: {
id: OpenAIModelID.GPT_4,
name: 'GPT-4',
maxLength: 24000,
tokenLimit: 8192,
},
- [OpenAIModelID.GPT_4_0613]: {
- id: OpenAIModelID.GPT_4_0613,
- name: 'GPT-4-0613',
+ [OpenAIModelID.GPT_4_POE]: {
+ id: OpenAIModelID.GPT_4_POE,
+ name: 'GPT-4-POE',
maxLength: 24000,
tokenLimit: 8192,
},
+ [OpenAIModelID.GPT_4_32K_0613]: {
+ id: OpenAIModelID.GPT_4_32K_0613,
+ name: 'GPT-4-32K-0613',
+ maxLength: 96000,
+ tokenLimit: 32768,
+ },
[OpenAIModelID.GPT_4_32K]: {
id: OpenAIModelID.GPT_4_32K,
name: 'GPT-4-32K',
maxLength: 96000,
tokenLimit: 32768,
},
- [OpenAIModelID.CLAUDE_PLUS]: {
- id: OpenAIModelID.CLAUDE_PLUS,
- name: 'Claude+',
- maxLength: 30000,
- tokenLimit: 10240,
+ [OpenAIModelID.GPT_4_32K_POE]: {
+ id: OpenAIModelID.GPT_4_32K_POE,
+ name: 'GPT-4-32K-POE',
+ maxLength: 96000,
+ tokenLimit: 32768,
},
- [OpenAIModelID.CLAUDE_INSTANT]: {
- id: OpenAIModelID.CLAUDE_INSTANT,
- name: 'Claude Instant',
- maxLength: 30000,
- tokenLimit: 10240,
+ [OpenAIModelID.CLAUDE_2_100K]: {
+ id: OpenAIModelID.CLAUDE_2_100K,
+ name: 'Claude-2-100K',
+ maxLength: 360000,
+ tokenLimit: 102400,
},
[OpenAIModelID.CLAUDE_INSTANT_100K]: {
id: OpenAIModelID.CLAUDE_INSTANT_100K,
- name: 'Claude Instant 100K',
- maxLength: 300000,
+ name: 'Claude-Instant-100K',
+ maxLength: 360000,
tokenLimit: 102400,
},
- [OpenAIModelID.BARD]: {
- id: OpenAIModelID.BARD,
- name: 'Bard',
- maxLength: 30000,
+ [OpenAIModelID.CLAUDE_INSTANT]: {
+ id: OpenAIModelID.CLAUDE_INSTANT,
+ name: 'Claude-Instant',
+ maxLength: 36000,
tokenLimit: 10240,
},
-};
\ No newline at end of file
+};
+
diff --git a/utils/app/const.ts b/utils/app/const.ts
index 3011f3d..aee752e 100644
--- a/utils/app/const.ts
+++ b/utils/app/const.ts
@@ -1,6 +1,6 @@
export const DEFAULT_SYSTEM_PROMPT =
process.env.NEXT_PUBLIC_DEFAULT_SYSTEM_PROMPT ||
- "You are ChatGPT, a large language model trained by OpenAI. Follow the user's instructions carefully. Respond using markdown.";
+ "You are an advanced AI language model that can generate human-like text responses based on the prompts you receive. Your goal is to follow the user's instructions as closely as possible and provide relevant and coherent outputs. You can use Markdown to format your responses. For example: Use bold text to highlight important words or phrases. Use headings and subheadings to organize your content. Use lists and tables to display information in a structured way. Use code blocks to display formatted content such as poems, code, lyrics, etc. Use LaTeX to write mathematical expressions. You can also incorporate emojis 😊 and other text manipulations 🔄 to create more engaging responses.";
export const OPENAI_API_HOST =
process.env.OPENAI_API_HOST || 'https://chimeragpt.adventblocks.cc';