diff --git a/src/renderer/src/assets/images/models/chatglm.jpeg b/src/renderer/src/assets/images/models/chatglm.jpeg deleted file mode 100644 index ec40bf962e..0000000000 Binary files a/src/renderer/src/assets/images/models/chatglm.jpeg and /dev/null differ diff --git a/src/renderer/src/assets/images/models/chatglm.png b/src/renderer/src/assets/images/models/chatglm.png new file mode 100644 index 0000000000..e35930c6f4 Binary files /dev/null and b/src/renderer/src/assets/images/models/chatglm.png differ diff --git a/src/renderer/src/components/app/Sidebar.tsx b/src/renderer/src/components/app/Sidebar.tsx index c7ee672014..ead585a2da 100644 --- a/src/renderer/src/components/app/Sidebar.tsx +++ b/src/renderer/src/components/app/Sidebar.tsx @@ -2,9 +2,10 @@ import { TranslationOutlined } from '@ant-design/icons' import { isMac } from '@renderer/config/constant' import { AppLogo, isLocalAi } from '@renderer/config/env' import useAvatar from '@renderer/hooks/useAvatar' -import { useRuntime } from '@renderer/hooks/useStore' +import { useRuntime, useShowAssistants } from '@renderer/hooks/useStore' import { Avatar } from 'antd' import { FC } from 'react' +import { useTranslation } from 'react-i18next' import { Link, useLocation } from 'react-router-dom' import styled from 'styled-components' @@ -16,11 +17,26 @@ const Sidebar: FC = () => { const { pathname } = useLocation() const avatar = useAvatar() const { minappShow } = useRuntime() + const { toggleShowAssistants } = useShowAssistants() + const { generating } = useRuntime() + const { t } = useTranslation() const isRoute = (path: string): string => (pathname === path ? 'active' : '') - const onEditUser = () => { - UserPopup.show() + const onEditUser = () => UserPopup.show() + + const to = (path: string) => { + if (generating) { + window.message.warning({ content: t('message.switch.disabled'), key: 'switch-assistant' }) + return '/' + } + return path + } + + const onToggleShowAssistants = () => { + if (pathname === '/') { + toggleShowAssistants() + } } return ( @@ -28,22 +44,22 @@ const Sidebar: FC = () => { - + - + - + - + @@ -51,7 +67,7 @@ const Sidebar: FC = () => { - + diff --git a/src/renderer/src/config/models.ts b/src/renderer/src/config/models.ts index 3e8bc5dbad..e519152bdf 100644 --- a/src/renderer/src/config/models.ts +++ b/src/renderer/src/config/models.ts @@ -255,46 +255,60 @@ export const SYSTEM_MODELS: Record = { } ], zhipu: [ - { - id: 'glm-4-0520', - provider: 'zhipu', - name: 'GLM-4-0520', - group: 'GLM', - enabled: true - }, { id: 'glm-4', provider: 'zhipu', name: 'GLM-4', - group: 'GLM', + group: 'GLM-4', enabled: false }, { - id: 'glm-4-airx', + id: 'glm-4-plus', provider: 'zhipu', - name: 'GLM-4-AirX', - group: 'GLM', + name: 'GLM-4-Plus', + group: 'GLM-4', enabled: false }, { id: 'glm-4-air', provider: 'zhipu', name: 'GLM-4-Air', - group: 'GLM', + group: 'GLM-4', enabled: true }, + { + id: 'glm-4-airx', + provider: 'zhipu', + name: 'GLM-4-AirX', + group: 'GLM-4', + enabled: false + }, + { + id: 'glm-4-flash', + provider: 'zhipu', + name: 'GLM-4-Flash', + group: 'GLM-4', + enabled: false + }, { id: 'glm-4v', provider: 'zhipu', - name: 'GLM-4V', - group: 'GLM', + name: 'GLM 4V', + group: 'GLM-4v', + enabled: false + }, + { + id: 'glm-4v-plus', + provider: 'zhipu', + name: 'GLM-4V-Plus', + group: 'GLM-4v', enabled: false }, { id: 'glm-4-alltools', provider: 'zhipu', name: 'GLM-4-AllTools', - group: 'GLM', + group: 'GLM-4-AllTools', enabled: false } ], diff --git a/src/renderer/src/config/provider.ts b/src/renderer/src/config/provider.ts index 3f89ea870a..171b23da7a 100644 --- a/src/renderer/src/config/provider.ts +++ b/src/renderer/src/config/provider.ts @@ -2,7 +2,7 @@ import BaicuanAppLogo from '@renderer/assets/images/apps/baixiaoying.webp' import KimiAppLogo from '@renderer/assets/images/apps/kimi.jpg' import YuewenAppLogo from '@renderer/assets/images/apps/yuewen.png' import BaichuanModelLogo from '@renderer/assets/images/models/baichuan.png' -import ChatGLMModelLogo from '@renderer/assets/images/models/chatglm.jpeg' +import ChatGLMModelLogo from '@renderer/assets/images/models/chatglm.png' import ChatGPTModelLogo from '@renderer/assets/images/models/chatgpt.jpeg' import ClaudeModelLogo from '@renderer/assets/images/models/claude.png' import DeepSeekModelLogo from '@renderer/assets/images/models/deepseek.png' diff --git a/src/renderer/src/hooks/useStore.ts b/src/renderer/src/hooks/useStore.ts index 51e0981b8f..1b21048e90 100644 --- a/src/renderer/src/hooks/useStore.ts +++ b/src/renderer/src/hooks/useStore.ts @@ -1,17 +1,5 @@ import { useAppDispatch, useAppSelector } from '@renderer/store' -import { setShowRightSidebar, toggleRightSidebar, toggleShowAssistants } from '@renderer/store/settings' - -export function useShowRightSidebar() { - const showRightSidebar = useAppSelector((state) => state.settings.showRightSidebar) - const dispatch = useAppDispatch() - - return { - rightSidebarShown: showRightSidebar, - toggleRightSidebar: () => dispatch(toggleRightSidebar()), - showRightSidebar: () => dispatch(setShowRightSidebar(true)), - hideRightSidebar: () => dispatch(setShowRightSidebar(false)) - } -} +import { toggleShowAssistants } from '@renderer/store/settings' export function useShowAssistants() { const showAssistants = useAppSelector((state) => state.settings.showAssistants) diff --git a/src/renderer/src/hooks/useTopic.ts b/src/renderer/src/hooks/useTopic.ts index 7704aa56aa..6fa9767b7f 100644 --- a/src/renderer/src/hooks/useTopic.ts +++ b/src/renderer/src/hooks/useTopic.ts @@ -2,9 +2,12 @@ import { Assistant, Topic } from '@renderer/types' import { find } from 'lodash' import { useEffect, useState } from 'react' +import { useAssistant } from './useAssistant' + let _activeTopic: Topic -export function useActiveTopic(assistant: Assistant) { +export function useActiveTopic(_assistant: Assistant) { + const { assistant } = useAssistant(_assistant.id) const [activeTopic, setActiveTopic] = useState(_activeTopic || assistant?.topics[0]) useEffect(() => { diff --git a/src/renderer/src/i18n/index.ts b/src/renderer/src/i18n/index.ts index ead15a5b04..ae5868bc00 100644 --- a/src/renderer/src/i18n/index.ts +++ b/src/renderer/src/i18n/index.ts @@ -29,7 +29,8 @@ const resources = { select: 'Select', search: 'Search', default: 'Default', - warning: 'Warning' + warning: 'Warning', + back: 'Back' }, button: { add: 'Add', @@ -67,7 +68,6 @@ const resources = { 'topics.delete.all.title': 'Delete all topics', 'topics.delete.all.content': 'Are you sure you want to delete all topics?', 'input.new_topic': 'New Topic', - 'input.topics': ' Topics ', 'input.clear': 'Clear', 'input.expand': 'Expand', 'input.collapse': 'Collapse', @@ -267,7 +267,8 @@ const resources = { select: '选择', search: '搜索', default: '默认', - warning: '警告' + warning: '警告', + back: '返回' }, button: { add: '添加', @@ -305,7 +306,6 @@ const resources = { 'topics.delete.all.title': '删除所有话题', 'topics.delete.all.content': '确定要删除所有话题吗?', 'input.new_topic': '新话题', - 'input.topics': ' 话题 ', 'input.clear': '清除', 'input.expand': '展开', 'input.collapse': '收起', diff --git a/src/renderer/src/pages/home/Assistants.tsx b/src/renderer/src/pages/home/Assistants.tsx index 0a2204ba20..b238d81986 100644 --- a/src/renderer/src/pages/home/Assistants.tsx +++ b/src/renderer/src/pages/home/Assistants.tsx @@ -1,11 +1,13 @@ -import { CopyOutlined, DeleteOutlined, EditOutlined } from '@ant-design/icons' +import { ArrowRightOutlined, CopyOutlined, DeleteOutlined, EditOutlined } from '@ant-design/icons' +import { ArrowLeftOutlined } from '@ant-design/icons' import DragableList from '@renderer/components/DragableList' +import { HStack } from '@renderer/components/Layout' import AssistantSettingPopup from '@renderer/components/Popups/AssistantSettingPopup' import { useAssistant, useAssistants } from '@renderer/hooks/useAssistant' import { getDefaultTopic, syncAsistantToAgent } from '@renderer/services/assistant' import { EVENT_NAMES, EventEmitter } from '@renderer/services/event' import { useAppSelector } from '@renderer/store' -import { Assistant } from '@renderer/types' +import { Assistant, Topic } from '@renderer/types' import { uuid } from '@renderer/utils' import { Dropdown } from 'antd' import { ItemType } from 'antd/es/menu/interface' @@ -14,13 +16,27 @@ import { FC, useCallback } from 'react' import { useTranslation } from 'react-i18next' import styled from 'styled-components' +import Topics from './Topics' + interface Props { activeAssistant: Assistant setActiveAssistant: (assistant: Assistant) => void + activeTopic: Topic + setActiveTopic: (topic: Topic) => void + showTopics: boolean + setShowTopics: (showTopics: boolean) => void onCreateAssistant: () => void } -const Assistants: FC = ({ activeAssistant, setActiveAssistant, onCreateAssistant }) => { +const Assistants: FC = ({ + activeAssistant, + setActiveAssistant, + activeTopic, + setActiveTopic, + showTopics, + setShowTopics, + onCreateAssistant +}) => { const { assistants, removeAssistant, addAssistant, updateAssistants } = useAssistants() const generating = useAppSelector((state) => state.runtime.generating) const { updateAssistant } = useAssistant(activeAssistant.id) @@ -80,10 +96,23 @@ const Assistants: FC = ({ activeAssistant, setActiveAssistant, onCreateAs } EventEmitter.emit(EVENT_NAMES.SWITCH_TOPIC_SIDEBAR) setActiveAssistant(assistant) + setShowTopics(true) }, - [generating, setActiveAssistant, t] + [generating, setActiveAssistant, setShowTopics, t] ) + if (showTopics) { + return ( + + setShowTopics(false)}> + + {t('common.back')} + + + + ) + } + return ( @@ -93,6 +122,9 @@ const Assistants: FC = ({ activeAssistant, setActiveAssistant, onCreateAs onClick={() => onSwitchAssistant(assistant)} className={assistant.id === activeAssistant?.id ? 'active' : ''}> {assistant.name || t('chat.default.name')} + + + )} @@ -108,26 +140,31 @@ const Container = styled.div` max-width: var(--assistants-width); border-right: 0.5px solid var(--color-border); height: calc(100vh - var(--navbar-height)); - padding: 10px; overflow-y: auto; + padding: 10px 0; ` const AssistantItem = styled.div` display: flex; - flex-direction: column; + flex-direction: row; + justify-content: space-between; padding: 7px 10px; position: relative; border-radius: 4px; + margin: 0 10px; cursor: pointer; font-family: Ubuntu; .anticon { display: none; + color: var(--color-text-3); } &:hover { background-color: var(--color-background-soft); + .count { + display: none; + } .anticon { display: block; - color: var(--color-text-1); } } &.active { @@ -139,6 +176,19 @@ const AssistantItem = styled.div` } ` +const NavigtaionHeader = styled.div` + display: flex; + flex-direction: row; + align-items: center; + justify-content: flex-start; + gap: 10px; + padding: 0 5px; + cursor: pointer; + color: var(--color-text-3); + margin: 10px; + margin-top: 0; +` + const AssistantName = styled.div` color: var(--color-text); display: -webkit-box; diff --git a/src/renderer/src/pages/home/Chat.tsx b/src/renderer/src/pages/home/Chat.tsx index 70e576b16e..b2d5f76188 100644 --- a/src/renderer/src/pages/home/Chat.tsx +++ b/src/renderer/src/pages/home/Chat.tsx @@ -1,29 +1,35 @@ import { useAssistant } from '@renderer/hooks/useAssistant' -import { useActiveTopic } from '@renderer/hooks/useTopic' -import { Assistant } from '@renderer/types' +import { Assistant, Topic } from '@renderer/types' import { Flex } from 'antd' -import { FC } from 'react' +import { FC, useState } from 'react' import styled from 'styled-components' import Inputbar from './Inputbar/Inputbar' import Messages from './Messages/Messages' -import RightSidebar from './RightSidebar' +import Settings from './Settings' interface Props { assistant: Assistant + activeTopic: Topic + setActiveTopic: (topic: Topic) => void } const Chat: FC = (props) => { const { assistant } = useAssistant(props.assistant.id) - const { activeTopic, setActiveTopic } = useActiveTopic(assistant) + const [showSetting, setShowSetting] = useState(false) return (
- - + +
- + {showSetting && }
) } diff --git a/src/renderer/src/pages/home/Header.tsx b/src/renderer/src/pages/home/Header.tsx deleted file mode 100644 index f7bea8e3bc..0000000000 --- a/src/renderer/src/pages/home/Header.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import { NavbarCenter } from '@renderer/components/app/Navbar' -import { isMac } from '@renderer/config/constant' -import { useAssistant } from '@renderer/hooks/useAssistant' -import { useShowAssistants } from '@renderer/hooks/useStore' -import { Assistant } from '@renderer/types' -import { removeLeadingEmoji } from '@renderer/utils' -import { FC } from 'react' -import { useTranslation } from 'react-i18next' -import styled from 'styled-components' - -import SelectModelButton from './components/SelectModelButton' -import { NewButton } from './HomePage' - -interface Props { - activeAssistant: Assistant -} - -const HomeHeader: FC = ({ activeAssistant }) => { - const { assistant } = useAssistant(activeAssistant.id) - const { t } = useTranslation() - const { showAssistants, toggleShowAssistants } = useShowAssistants() - - return ( - - {!showAssistants && ( - - - - )} - {removeLeadingEmoji(assistant?.name) || t('chat.default.name')} - - - ) -} - -const AssistantName = styled.span` - margin-left: 5px; - margin-right: 10px; - font-family: Ubuntu; -` - -export default HomeHeader diff --git a/src/renderer/src/pages/home/HomePage.tsx b/src/renderer/src/pages/home/HomePage.tsx index 0bcab92da9..f7ffb8cf03 100644 --- a/src/renderer/src/pages/home/HomePage.tsx +++ b/src/renderer/src/pages/home/HomePage.tsx @@ -1,30 +1,37 @@ -import { Navbar, NavbarLeft, NavbarRight } from '@renderer/components/app/Navbar' +import { Navbar, NavbarCenter, NavbarLeft, NavbarRight } from '@renderer/components/app/Navbar' import { isMac, isWindows } from '@renderer/config/constant' import { useAssistants, useDefaultAssistant } from '@renderer/hooks/useAssistant' -import { useShowAssistants, useShowRightSidebar } from '@renderer/hooks/useStore' +import { useShowAssistants } from '@renderer/hooks/useStore' +import { useActiveTopic } from '@renderer/hooks/useTopic' import { useTheme } from '@renderer/providers/ThemeProvider' -import { Assistant } from '@renderer/types' +import { Assistant, Topic } from '@renderer/types' import { uuid } from '@renderer/utils' import { Switch } from 'antd' import { FC, useState } from 'react' +import { useTranslation } from 'react-i18next' import styled from 'styled-components' import AddAssistantPopup from '../../components/Popups/AddAssistantPopup' import Assistants from './Assistants' import Chat from './Chat' -import Navigation from './Header' +import SelectModelButton from './components/SelectModelButton' let _activeAssistant: Assistant +let _showTopics = false const HomePage: FC = () => { const { assistants, addAssistant } = useAssistants() const [activeAssistant, setActiveAssistant] = useState(_activeAssistant || assistants[0]) - const { rightSidebarShown, toggleRightSidebar } = useShowRightSidebar() - const { showAssistants, toggleShowAssistants } = useShowAssistants() + const { showAssistants } = useShowAssistants() const { defaultAssistant } = useDefaultAssistant() const { theme, toggleTheme } = useTheme() + const [showTopics, setShowTopics] = useState(_showTopics) + const { t } = useTranslation() + + const { activeTopic, setActiveTopic } = useActiveTopic(activeAssistant) _activeAssistant = activeAssistant + _showTopics = showTopics const onCreateDefaultAssistant = () => { const assistant = { ...defaultAssistant, id: uuid() } @@ -37,20 +44,25 @@ const HomePage: FC = () => { assistant && setActiveAssistant(assistant) } + const onSetActiveTopic = (topic: Topic) => { + setActiveTopic(topic) + setShowTopics(true) + } + return ( {showAssistants && ( - - - - + )} - + + {activeAssistant?.name || t('chat.default.name')} + + } @@ -58,9 +70,6 @@ const HomePage: FC = () => { checked={theme === 'dark'} onChange={toggleTheme} /> - - - @@ -68,10 +77,14 @@ const HomePage: FC = () => { )} - + ) @@ -90,6 +103,12 @@ const ContentContainer = styled.div` background-color: var(--color-background); ` +const AssistantName = styled.span` + margin-left: 5px; + margin-right: 10px; + font-family: Ubuntu; +` + export const NewButton = styled.div` -webkit-app-region: none; border-radius: 4px; diff --git a/src/renderer/src/pages/home/Inputbar/Inputbar.tsx b/src/renderer/src/pages/home/Inputbar/Inputbar.tsx index dc5e8143ea..103f68993d 100644 --- a/src/renderer/src/pages/home/Inputbar/Inputbar.tsx +++ b/src/renderer/src/pages/home/Inputbar/Inputbar.tsx @@ -3,7 +3,6 @@ import { ControlOutlined, FullscreenExitOutlined, FullscreenOutlined, - HistoryOutlined, PauseCircleOutlined, PlusCircleOutlined, QuestionCircleOutlined @@ -32,11 +31,13 @@ import SendMessageButton from './SendMessageButton' interface Props { assistant: Assistant setActiveTopic: (topic: Topic) => void + showSetting: boolean + setShowSetting: (show: boolean) => void } let _text = '' -const Inputbar: FC = ({ assistant, setActiveTopic }) => { +const Inputbar: FC = ({ assistant, setActiveTopic, showSetting, setShowSetting }) => { const [text, setText] = useState(_text) const [inputFocus, setInputFocus] = useState(false) const { addTopic } = useAssistant(assistant.id) @@ -194,6 +195,7 @@ const Inputbar: FC = ({ assistant, setActiveTopic }) => { variant="borderless" rows={1} ref={textareaRef} + style={{ fontSize }} styles={{ textarea: TextareaStyle }} onFocus={() => setInputFocus(true)} onBlur={() => setInputFocus(false)} @@ -219,13 +221,8 @@ const Inputbar: FC = ({ assistant, setActiveTopic }) => { - - EventEmitter.emit(EVENT_NAMES.SHOW_TOPIC_SIDEBAR)}> - - - - - EventEmitter.emit(EVENT_NAMES.SHOW_CHAT_SETTINGS)}> + + setShowSetting(!showSetting)}> diff --git a/src/renderer/src/pages/home/Messages/Message.tsx b/src/renderer/src/pages/home/Messages/Message.tsx index 1d9a7c55e4..915855cc65 100644 --- a/src/renderer/src/pages/home/Messages/Message.tsx +++ b/src/renderer/src/pages/home/Messages/Message.tsx @@ -162,7 +162,7 @@ const MessageItem: FC = ({ message, index, showMenu, onDeleteMessage }) = {canRegenerate && ( - + diff --git a/src/renderer/src/pages/home/RightSidebar/index.tsx b/src/renderer/src/pages/home/RightSidebar/index.tsx deleted file mode 100644 index d01e9f0ce3..0000000000 --- a/src/renderer/src/pages/home/RightSidebar/index.tsx +++ /dev/null @@ -1,96 +0,0 @@ -import { BarsOutlined, SettingOutlined } from '@ant-design/icons' -import { useShowRightSidebar } from '@renderer/hooks/useStore' -import { EVENT_NAMES, EventEmitter } from '@renderer/services/event' -import { Assistant, Topic } from '@renderer/types' -import { Segmented } from 'antd' -import { FC, useEffect, useState } from 'react' -import { useTranslation } from 'react-i18next' -import styled from 'styled-components' - -import SettingsTab from './SettingsTab' -import TopicsTab from './TopicsTab' - -interface Props { - assistant: Assistant - activeTopic: Topic - setActiveTopic: (topic: Topic) => void -} - -const RightSidebar: FC = (props) => { - const [tab, setTab] = useState<'topic' | 'settings'>('topic') - const { rightSidebarShown, showRightSidebar, hideRightSidebar } = useShowRightSidebar() - const { t } = useTranslation() - const isTopicTab = tab === 'topic' - const isSettingsTab = tab === 'settings' - - useEffect(() => { - const unsubscribes = [ - EventEmitter.on(EVENT_NAMES.SHOW_TOPIC_SIDEBAR, (): any => { - if (rightSidebarShown && isTopicTab) { - return hideRightSidebar() - } - if (rightSidebarShown) { - return setTab('topic') - } - showRightSidebar() - setTab('topic') - }), - EventEmitter.on(EVENT_NAMES.SHOW_CHAT_SETTINGS, (): any => { - if (rightSidebarShown && isSettingsTab) { - return hideRightSidebar() - } - if (rightSidebarShown) { - return setTab('settings') - } - showRightSidebar() - setTab('settings') - }), - EventEmitter.on(EVENT_NAMES.SWITCH_TOPIC_SIDEBAR, () => setTab('topic')) - ] - return () => unsubscribes.forEach((unsub) => unsub()) - }, [hideRightSidebar, isSettingsTab, isTopicTab, rightSidebarShown, showRightSidebar]) - - if (!rightSidebarShown) { - return null - } - - return ( - - }, - { label: t('settings.title'), value: 'settings', icon: } - ]} - block - onChange={(value) => setTab(value as 'topic' | 'settings')} - /> - - {tab === 'topic' && } - {tab === 'settings' && } - - - ) -} - -const Container = styled.div` - display: flex; - flex-direction: column; - width: var(--topic-list-width); - height: calc(100vh - var(--navbar-height)); - border-left: 0.5px solid var(--color-border); - .collapsed { - width: 0; - border-left: none; - } -` - -const TabContent = styled.div` - display: flex; - flex: 1; - flex-direction: column; - overflow-y: auto; -` - -export default RightSidebar diff --git a/src/renderer/src/pages/home/RightSidebar/SettingsTab.tsx b/src/renderer/src/pages/home/Settings.tsx similarity index 97% rename from src/renderer/src/pages/home/RightSidebar/SettingsTab.tsx rename to src/renderer/src/pages/home/Settings.tsx index cd803b5cb5..5338b6758b 100644 --- a/src/renderer/src/pages/home/RightSidebar/SettingsTab.tsx +++ b/src/renderer/src/pages/home/Settings.tsx @@ -234,7 +234,13 @@ const Container = styled.div` display: flex; flex: 1; flex-direction: column; + width: var(--topic-list-width); + max-width: var(--topic-list-width); + height: calc(100vh - var(--navbar-height)); + border-left: 0.5px solid var(--color-border); padding: 0 15px; + padding-bottom: 20px; + overflow-y: auto; ` const Label = styled.p` diff --git a/src/renderer/src/pages/home/RightSidebar/TopicsTab.tsx b/src/renderer/src/pages/home/Topics.tsx similarity index 97% rename from src/renderer/src/pages/home/RightSidebar/TopicsTab.tsx rename to src/renderer/src/pages/home/Topics.tsx index a506137a65..e540cc015b 100644 --- a/src/renderer/src/pages/home/RightSidebar/TopicsTab.tsx +++ b/src/renderer/src/pages/home/Topics.tsx @@ -18,7 +18,7 @@ interface Props { setActiveTopic: (topic: Topic) => void } -const TopicsTab: FC = ({ assistant: _assistant, activeTopic, setActiveTopic }) => { +const Topics: FC = ({ assistant: _assistant, activeTopic, setActiveTopic }) => { const { assistant, removeTopic, updateTopic, updateTopics } = useAssistant(_assistant.id) const { t } = useTranslation() const generating = useAppSelector((state) => state.runtime.generating) @@ -136,11 +136,12 @@ const Container = styled.div` display: flex; flex: 1; flex-direction: column; - padding: 10px 10px; + overflow-y: scroll; ` const TopicListItem = styled.div` padding: 7px 10px; + margin: 0 10px; cursor: pointer; border-radius: 4px; white-space: nowrap; @@ -155,4 +156,4 @@ const TopicListItem = styled.div` } ` -export default TopicsTab +export default Topics diff --git a/src/renderer/src/pages/settings/ProviderSettings/index.tsx b/src/renderer/src/pages/settings/ProviderSettings/index.tsx index ab7a9d724e..eb30968f95 100644 --- a/src/renderer/src/pages/settings/ProviderSettings/index.tsx +++ b/src/renderer/src/pages/settings/ProviderSettings/index.tsx @@ -1,5 +1,4 @@ -import { PlusOutlined } from '@ant-design/icons' -import { DeleteOutlined, EditOutlined } from '@ant-design/icons' +import { DeleteOutlined, EditOutlined, PlusOutlined } from '@ant-design/icons' import { DragDropContext, Draggable, Droppable, DropResult } from '@hello-pangea/dnd' import { getProviderLogo } from '@renderer/config/provider' import { useAllProviders, useProviders } from '@renderer/hooks/useProvider' diff --git a/src/renderer/src/pages/settings/index.tsx b/src/renderer/src/pages/settings/index.tsx index 7e82a726da..fe0bc75409 100644 --- a/src/renderer/src/pages/settings/index.tsx +++ b/src/renderer/src/pages/settings/index.tsx @@ -2,8 +2,6 @@ import { Divider } from 'antd' import Link from 'antd/es/typography/Link' import styled from 'styled-components' -import SettingsPage from './SettingsPage' - export const SettingContainer = styled.div` display: flex; flex-direction: column; @@ -69,5 +67,3 @@ export const SettingHelpLink = styled(Link)` font-size: 11px; padding: 0 5px; ` - -export default SettingsPage diff --git a/src/renderer/src/services/ProviderSDK.ts b/src/renderer/src/services/ProviderSDK.ts index 1622d4f01f..1916ac722f 100644 --- a/src/renderer/src/services/ProviderSDK.ts +++ b/src/renderer/src/services/ProviderSDK.ts @@ -54,12 +54,7 @@ export default class ProviderSDK { const userMessages = takeRight(messages, contextCount + 1).map((message) => { return { role: message.role, - content: message.images - ? [ - { type: 'text', text: message.content }, - ...message.images!.map((image) => ({ type: 'image_url', image_url: image })) - ] - : message.content + content: message.content } }) @@ -132,10 +127,22 @@ export default class ProviderSDK { return } + const _userMessages = takeRight(messages, contextCount + 1).map((message) => { + return { + role: message.role, + content: message.images + ? [ + { type: 'text', text: message.content }, + ...message.images!.map((image) => ({ type: 'image_url', image_url: image })) + ] + : message.content + } + }) + // @ts-ignore key is not typed const stream = await this.openaiSdk.chat.completions.create({ model: model.id, - messages: [systemMessage, ...userMessages].filter(Boolean) as ChatCompletionMessageParam[], + messages: [systemMessage, ..._userMessages].filter(Boolean) as ChatCompletionMessageParam[], stream: true, temperature: assistant?.settings?.temperature, max_tokens: maxTokens, diff --git a/src/renderer/src/store/settings.ts b/src/renderer/src/store/settings.ts index 94e2265d6d..7a979bc08a 100644 --- a/src/renderer/src/store/settings.ts +++ b/src/renderer/src/store/settings.ts @@ -9,7 +9,6 @@ export enum ThemeMode { } export interface SettingsState { - showRightSidebar: boolean showAssistants: boolean sendMessageShortcut: SendMessageShortcut language: string @@ -23,7 +22,6 @@ export interface SettingsState { } const initialState: SettingsState = { - showRightSidebar: true, showAssistants: true, sendMessageShortcut: 'Enter', language: navigator.language, @@ -40,12 +38,6 @@ const settingsSlice = createSlice({ name: 'settings', initialState, reducers: { - toggleRightSidebar: (state) => { - state.showRightSidebar = !state.showRightSidebar - }, - setShowRightSidebar: (state, action: PayloadAction) => { - state.showRightSidebar = action.payload - }, toggleShowAssistants: (state) => { state.showAssistants = !state.showAssistants }, @@ -80,8 +72,6 @@ const settingsSlice = createSlice({ }) export const { - setShowRightSidebar, - toggleRightSidebar, toggleShowAssistants, setSendMessageShortcut, setLanguage,