diff --git a/app/components/Models.tsx b/app/components/Models.tsx index 469d9cb..ce8dfbe 100644 --- a/app/components/Models.tsx +++ b/app/components/Models.tsx @@ -1,8 +1,21 @@ "use client"; import React, { useState, useEffect } from 'react'; -// Define all models that should be available. -const modelList = { +// Define the types for ModelType and ModelListType +type ModelType = { + model_type: string; + Math: string; + Code: string; + Language: string; + Weather: string; +}; + +type ModelListType = { + [key: string]: ModelType; +}; + +// Define the AI models list +const modelList: ModelListType = { 'Offline Fast': { model_type: 'local', Math: 'qwen2-math:1.5b', @@ -86,161 +99,47 @@ const modelList = { Code: 'open-codestral-mamba', Language: 'open-mistral-nemo', Weather: 'open-mistral-nemo', - } -} - - -// Define the available selectedAIFunction options -const modelDropdown = { - offlineNonFoss: ['Offline Fast', 'Offline Slow'], - offlineFoss: ['Offline Fast (FOSS)', 'Offline Slow (FOSS)'], - onlineNonFoss: [ - 'Online Cheap (OpenAI)', - 'Online Expensive (OpenAI)', - 'Online Cheap (Anthropic)', - 'Online Expensive (Anthropic)', - 'Online Cheap (Google)', - 'Online Expensive (Google)', - 'Online (La Plateforme)' - ], - onlineFoss: ['Online (FOSS) (La Plateforme)'], + }, }; -const selectedAIFunction = [ - 'Code', - 'Math', - 'Language', - 'Weather' -] +// AI Functions list +const aiFunctions = ['Math', 'Code', 'Language', 'Weather'] as const; +type AIFunction = typeof aiFunctions[number]; // Restrict to these exact function names const ModelSection: React.FC = () => { - // Initialize state with value from localStorage or default to '' - const [selectedModelDropdown, setSelectedModelDropdown] = useState(''); - const [radioSelection, setRadioSelection] = useState("") - const [activeSelectedAIFunction, setActiveSelectedAIFunction] = useState(''); - const [currentSelectedAIFunction, setCurrentSelectedAIFunction] = useState(""); - const [isOpenSourceMode, setIsOpenSourceMode] = useState("false") + const [selectedModelDropdown, setSelectedModelDropdown] = useState(() => "Offline Fast"); + const [activeSelectedAIFunction, setActiveSelectedAIFunction] = useState(() => "Code"); + const [, setSelectedModel] = useState(""); + const [, setSelectedModelType] = useState(""); useEffect(() => { - if (typeof localStorage !== 'undefined') { - const defaultValues = { - selectedModelDropdown: 'Offline Fast', - activeSelectedAIFunction: 'Code', - model: 'starcoder2', - radioSelection: 'None', - type: 'local', - }; - - Object.entries(defaultValues).forEach(([key, value]) => { - if (!localStorage.getItem(key)) { - localStorage.setItem(key, value); - } - }); - - setIsOpenSourceMode(localStorage.getItem("openSourceMode")); - setActiveSelectedAIFunction(localStorage.getItem("activeSelectedAIFunction") || ''); - setRadioSelection(localStorage.getItem("radioSelection") || ''); - setSelectedModelDropdown(localStorage.getItem('selectedModelDropdown') || ''); - - const handleStorageChange = () => { - setSelectedModelDropdown(localStorage.getItem('selectedModelDropdown') || ''); - }; - - // Update immediately when localStorage changes - window.addEventListener('storage', handleStorageChange); - - // Cleanup listener on component unmount - return () => { - window.removeEventListener('storage', handleStorageChange); - }; - } + setSelectedModelDropdown(localStorage.getItem("selectedModelDropdown")|| "Offline Fast"); + setActiveSelectedAIFunction(localStorage.getItem("activeSelectedAIFunction") || "Code"); }, []); - + // Update the model and type when the dropdown or function changes useEffect(() => { - if (typeof localStorage !== 'undefined') { - const storedActiveSelectedAIFunction = localStorage.getItem("activeSelectedAIFunction") || ""; - if (storedActiveSelectedAIFunction !== currentSelectedAIFunction) { - setCurrentSelectedAIFunction(storedActiveSelectedAIFunction); - } - } - }, [activeSelectedAIFunction]); + const aiFunctionsActiveSelectedAIFunction = activeSelectedAIFunction as AIFunction + const newSelectedModel = modelList[selectedModelDropdown]?.[aiFunctionsActiveSelectedAIFunction] || ""; + const newModelType = modelList[selectedModelDropdown]?.model_type || ""; + + setSelectedModel(newSelectedModel); + setSelectedModelType(newModelType); + + localStorage.setItem("model", newSelectedModel); + localStorage.setItem("type", newModelType); + }, [selectedModelDropdown, activeSelectedAIFunction]); const handleModelChange = (event: React.ChangeEvent) => { const newModel = event.target.value; setSelectedModelDropdown(newModel); - if (typeof localStorage !== 'undefined') { - localStorage.setItem('selectedModelDropdown', newModel); // Update localStorage directly - const model = localStorage.getItem('activeSelectedAIFunction') || "Code" - modelClicked(model) - } + localStorage.setItem('selectedModelDropdown', newModel); }; - // Determine the filtered models based on current radioSelection - const filteredModels = (() => { - let models = []; - switch (radioSelection) { - case 'Offline': - models = [ - ...modelDropdown.onlineNonFoss, - ...modelDropdown.onlineFoss, - ]; - if (isOpenSourceMode == "true") { - models = [ - ...modelDropdown.onlineFoss, - ]; - } // Show only offline models without FOSS - break; - case 'Online': - models = [ - ...modelDropdown.offlineNonFoss, - ...modelDropdown.offlineFoss, - ]; - if (isOpenSourceMode == "true") { - models = [ - ...modelDropdown.offlineFoss, - ]; - } // Show only online models without FOSS - break; - case 'None': - models = [ - ...modelDropdown.offlineNonFoss, - ...modelDropdown.offlineFoss, - ...modelDropdown.onlineNonFoss, - ...modelDropdown.onlineFoss, - ]; - if (isOpenSourceMode == "true") { - models = [ - ...modelDropdown.offlineFoss, - ...modelDropdown.onlineFoss, - ]; - } // Show all models if nothing matches - break; - default: - models = [ - ...modelDropdown.offlineNonFoss, - ...modelDropdown.offlineFoss, - ...modelDropdown.onlineNonFoss, - ...modelDropdown.onlineFoss, - ]; // Show all models if nothing matches - break; - } - return Array.from(new Set(models)); // Remove duplicates using Set - })(); - - const isOfflineModel = (model: string) => - modelDropdown.offlineNonFoss.includes(model) || modelDropdown.offlineFoss.includes(model); - - const modelClicked = (model: string) => { - if (typeof localStorage !== 'undefined') { - localStorage.setItem('activeSelectedAIFunction', model) - setActiveSelectedAIFunction(model) - const modelDropdown = localStorage.getItem('selectedModelDropdown') || 'Offline Fast' - const selectedAIFunction = modelDropdown as keyof typeof modelList; - localStorage.setItem("model", modelList[selectedAIFunction][model as keyof typeof modelList[typeof selectedAIFunction]]) - localStorage.setItem("type", modelList[selectedAIFunction]['model_type' as keyof typeof modelList[typeof selectedAIFunction]]) - } - } + const modelClicked = (functionName: AIFunction) => { + setActiveSelectedAIFunction(functionName); + localStorage.setItem('activeSelectedAIFunction', functionName); + }; return (
@@ -249,33 +148,29 @@ const ModelSection: React.FC = () => {

Different AI Models

- {/* Model Selection Dropdown */}
- {/* Model Grid with Cards */} +
- {selectedAIFunction.map( - (displayedCategory) => ( - - ) - )} + {aiFunctions.map((functionName) => ( + + ))}
diff --git a/app/components/settings/Settings.tsx b/app/components/settings/Settings.tsx index d0f769b..87b05b6 100644 --- a/app/components/settings/Settings.tsx +++ b/app/components/settings/Settings.tsx @@ -12,9 +12,11 @@ import PrivacySettings from './PrivacySettings'; import FontSizeSetting from './FontSize'; import OpenSourceModeToggle from './OpenSourceToggle'; import { + changeHistory, changeSettings, createAccount, deleteAccount, + getHistory, } from '../../backend/database'; import ThemeDropdown from './DropDownTheme'; @@ -372,7 +374,11 @@ const Settings: React.FC<{ closeSettings: () => void; accountName: string }> = ( localStorage.setItem("currentEmail", useEmail) alert('Account successfully changed!') window.location.reload() + } else { + alert("failed to send settings") } + } else { + alert("failed to create account") } } }; @@ -409,7 +415,7 @@ const Settings: React.FC<{ closeSettings: () => void; accountName: string }> = ( checked={myBoolean} setChecked={setMyBoolean} /> - void; accountName: string }> = ( onClick={handleLogout} // Function to call on click className="update-credentials-button" // Custom styling class /> +

WARNING: Will delete your chat history.