diff --git a/front/src/Pages/ChatPage.tsx b/front/src/Pages/ChatPage.tsx index 09f58c1c..49d08d9e 100644 --- a/front/src/Pages/ChatPage.tsx +++ b/front/src/Pages/ChatPage.tsx @@ -16,6 +16,7 @@ import Conversation from "../components/Conversation/Conversation"; import { useEffect, useState } from "react"; import { useSelector } from "react-redux"; import { setLastConversation } from "../Redux/reducers/lastConversationSlice"; +import { selectUserSettings } from "../Redux/reducers/userSettingsReducer"; import { Navigate, useNavigate } from "react-router"; import AnnouncementBar from "../components/Header/AnnouncementBar"; @@ -27,8 +28,9 @@ export default function ChatPage() { const dispatch = useDispatch(); const navigate = useNavigate(); const { isMobile } = useWindowSize(); + const userSettings = useSelector(selectUserSettings); - const [localState, setLocalState] = useState(() => getDefaultConversation()); + const [localState, setLocalState] = useState(() => getDefaultConversation(userSettings)); const modelsData = useUpdateModelsData(); const userData = useUpdateUserData(); diff --git a/front/src/components/Header/ModelSelectorWrapper.tsx b/front/src/components/Header/ModelSelectorWrapper.tsx index aaced964..83ad6444 100644 --- a/front/src/components/Header/ModelSelectorWrapper.tsx +++ b/front/src/components/Header/ModelSelectorWrapper.tsx @@ -1,15 +1,18 @@ import { memo, useEffect, useState, useRef } from 'react' +import { useDispatch } from "react-redux"; import ModelSelectorSimple from "./ModelSelectorSimple"; import ModelSelectorExtended from "./ModelSelectorExtended"; import { useModal } from '../../modals/ModalContext'; import type { ModelInfo } from '../../types/models'; +import { setDefaultModel } from "../../Redux/reducers/userSettingsReducer"; function ModelSelectorWrapper({modelsData, localState, setLocalState, inHeader = false}: {modelsData: [ModelInfo], localState: any, setLocalState: any, inHeader: boolean}) { /* render either ModelSelectorSimple or ModelSelectorExtended depending if modelsList contains models with extended==true */ const { openModal } = useModal(); + const dispatch = useDispatch(); const currentModelId = localState?.settings?.model?.id; const [selectedModel, setSelectedModel] = useState(null); @@ -17,11 +20,14 @@ function ModelSelectorWrapper({modelsData, localState, setLocalState, inHeader = const hasExtendedModels = modelsData?.[0]?.description !== undefined; - function setModel(newModel: ModelInfo) { + function setModel(newModel: ModelInfo, persistDefault = true) { if (newModel?.status === "offline") { openModal("serviceOffline"); } setSelectedModel(newModel); + if (persistDefault) { + dispatch(setDefaultModel(newModel)); + } setLocalState((prev) => ({ ...prev, settings: { @@ -40,10 +46,10 @@ function ModelSelectorWrapper({modelsData, localState, setLocalState, inHeader = (model) => model.id === currentModelId ); if (foundModel){ - setModel(foundModel); + setModel(foundModel, false); } else { // fallback to first model - setModel(modelsData[0]); + setModel(modelsData[0], false); } }, [currentModelId, modelsData]); @@ -60,4 +66,4 @@ function ModelSelectorWrapper({modelsData, localState, setLocalState, inHeader = } -export default memo(ModelSelectorWrapper); \ No newline at end of file +export default memo(ModelSelectorWrapper); diff --git a/front/src/modals/UserSettings/DefaultModelSelector.jsx b/front/src/modals/UserSettings/DefaultModelSelector.jsx deleted file mode 100644 index e142306f..00000000 --- a/front/src/modals/UserSettings/DefaultModelSelector.jsx +++ /dev/null @@ -1,72 +0,0 @@ -import { Trans, useTranslation } from "react-i18next"; -import { useSelector, useDispatch } from "react-redux"; - -import icon_support_vision from "../../assets/icons/support_vision.svg"; -import icon_support_audio from "../../assets/icons/support_audio.svg"; -import icon_support_video from "../../assets/icons/support_video.svg"; -import icon_support_reasoning from "../../assets/icons/support_reasoning.svg"; -import icon_support_arcana from "../../assets/icons/support_arcana.svg"; -import DemandStatusIcon from "../../components/Header/DemandStatusIcon"; -import { selectDefaultModel, setDefaultModel } from "../../Redux/reducers/userSettingsReducer"; - -export default function DefaultModelSelector({ modelsData }) { - const dispatch = useDispatch(); - const currentDefaultModel = useSelector(selectDefaultModel); - - const handleChangeDefaultModel = (model) => { - dispatch(setDefaultModel({ - name: model.name, - id: model.id, - })); - }; - - return ( -
-
-

- - {": "} - { currentDefaultModel?.name } -

-
- {/* Default Model Selector */} - -

- -

-
- {modelsData.map((option, index) => ( -
handleChangeDefaultModel(option)} - className={`flex items-center gap-2 text-tertiary text-sm w-full px-3 py-2 cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-800 ${ - currentDefaultModel?.id === option.id - ? "bg-blue-50 dark:bg-blue-900/20 border-l-4 border-blue-500" - : "" - }`} - > - -
- {option.name} -
- {option.input?.includes("audio") && ( - audio - )} - {option.input?.includes("image") && ( - image - )} - {option.input?.includes("video") && ( - video - )} - {option.output?.includes("thought") && ( - thought - )} - {option.input?.includes("arcana") && ( - books - )} -
- ))} -
-
- ); -}; \ No newline at end of file diff --git a/front/src/modals/UserSettings/UserSettingsModal.jsx b/front/src/modals/UserSettings/UserSettingsModal.jsx index 1f82c1f5..74e76664 100644 --- a/front/src/modals/UserSettings/UserSettingsModal.jsx +++ b/front/src/modals/UserSettings/UserSettingsModal.jsx @@ -3,7 +3,6 @@ import { useSelector } from "react-redux"; import { useModal } from "../ModalContext"; import BaseModal from "../BaseModal"; -import DefaultModelSelector from "./DefaultModelSelector"; import UserInfoContainer from "./UserInfoContainer"; import TimeoutSetter from "./TimeoutSetter"; import UserMemoryContainer from "./UserMemoryContainer"; @@ -28,7 +27,6 @@ export default function UserSettingsModal({ isOpen, onClose, userData, - modelsData, localState, }) { const { openModal } = useModal(); @@ -65,9 +63,6 @@ export default function UserSettingsModal({ {userData ? : <>}
- {/* Default Model Selector */} - {modelsData ? : <>} - {/* Timeout Setter */} @@ -114,4 +109,4 @@ export default function UserSettingsModal({
); -} \ No newline at end of file +}