diff --git a/docs/changelog.md b/docs/changelog.md
index 1b2a389a2..ea707938e 100644
--- a/docs/changelog.md
+++ b/docs/changelog.md
@@ -35,7 +35,7 @@ by release.
- **Backup/Restore** - save chats, and restore them later
- **[Local model support with Oobabooga server](../docs/config-local-oobabooga)** - run your own LLMs!
- **Flatten conversations** - conversations summarizer with 4 modes
-- **Fork conversations** - create a new chat, to experiment with different endings
+- **Fork conversations** - create a new chat, to try with different endings
- New commands: /s to add a System message, and /a for an Assistant message
- New Chat modes: Write-only - just appends the message, without assistant response
- Fix STOP generation - in sync with the Vercel team to fix a long-standing NextJS issue
diff --git a/pages/labs.tsx b/pages/labs.tsx
deleted file mode 100644
index 0efb28f6f..000000000
--- a/pages/labs.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-import * as React from 'react';
-
-import { AppLabs } from '../src/apps/labs/AppLabs';
-
-import { AppLayout } from '~/common/layout/AppLayout';
-
-
-export default function LabsPage() {
- return (
-
-
-
- );
-}
\ No newline at end of file
diff --git a/src/apps/chat/components/applayout/ChatDrawerItems.tsx b/src/apps/chat/components/applayout/ChatDrawerItems.tsx
index 3bc539ebc..824a4d36e 100644
--- a/src/apps/chat/components/applayout/ChatDrawerItems.tsx
+++ b/src/apps/chat/components/applayout/ChatDrawerItems.tsx
@@ -10,6 +10,7 @@ import { DConversationId, useChatStore } from '~/common/state/store-chats';
import { OpenAIIcon } from '~/common/components/icons/OpenAIIcon';
import { closeLayoutDrawer } from '~/common/layout/store-applayout';
import { useUIPreferencesStore } from '~/common/state/store-ui';
+import { useUXLabsStore } from '~/common/state/store-ux-labs';
import { ConversationItem } from './ConversationItem';
@@ -35,7 +36,8 @@ export function ChatDrawerItems(props: {
conversationIDs: state.conversations.map(_c => _c.id),
maxChatMessages: state.conversations.reduce((longest, _c) => Math.max(longest, _c.messages.length), 0),
}), shallow);
- const [experimentalLabs, showSymbols] = useUIPreferencesStore(state => [state.experimentalLabs, state.zenMode !== 'cleaner'], shallow);
+ const showSymbols = useUIPreferencesStore(state => state.zenMode !== 'cleaner');
+ const labsEnhancedUI = useUXLabsStore(state => state.labsEnhancedUI);
// derived state
const totalConversations = conversationIDs.length;
@@ -119,7 +121,7 @@ export function ChatDrawerItems(props: {
conversationId={conversationId}
isActive={conversationId === props.conversationId}
isLonely={singleChat}
- maxChatMessages={(experimentalLabs || softMaxReached) ? maxChatMessages : 0}
+ maxChatMessages={(labsEnhancedUI || softMaxReached) ? maxChatMessages : 0}
showSymbols={showSymbols}
onConversationActivate={handleConversationActivate}
onConversationDelete={handleConversationDelete}
diff --git a/src/apps/chat/components/composer/ChatModeMenu.tsx b/src/apps/chat/components/composer/ChatModeMenu.tsx
index c5c5f5cef..018335264 100644
--- a/src/apps/chat/components/composer/ChatModeMenu.tsx
+++ b/src/apps/chat/components/composer/ChatModeMenu.tsx
@@ -5,6 +5,7 @@ import { Box, MenuItem, Radio, Typography } from '@mui/joy';
import { CloseableMenu } from '~/common/components/CloseableMenu';
import { KeyStroke } from '~/common/components/KeyStroke';
import { useUIPreferencesStore } from '~/common/state/store-ui';
+import { useUXLabsStore } from '~/common/state/store-ux-labs';
import { ChatModeId } from '../../AppChat';
@@ -48,10 +49,11 @@ function fixNewLineShortcut(shortcut: string, enterIsNewLine: boolean) {
return shortcut;
}
-export function ChatModeMenu(props: { anchorEl: HTMLAnchorElement | null, onClose: () => void, experimental: boolean, chatModeId: ChatModeId, onSetChatModeId: (chatMode: ChatModeId) => void }) {
+export function ChatModeMenu(props: { anchorEl: HTMLAnchorElement | null, onClose: () => void, chatModeId: ChatModeId, onSetChatModeId: (chatMode: ChatModeId) => void }) {
// external state
const enterIsNewline = useUIPreferencesStore(state => state.enterIsNewline);
+ const labsMagicDraw = useUXLabsStore(state => state.labsMagicDraw);
return props.experimental || !experimental)
+ .filter(([, { experimental }]) => labsMagicDraw || !experimental)
.map(([key, data]) =>