import { IconExternalLink } from '@tabler/icons-react'; import { useContext } from 'react'; import { useTranslation } from 'next-i18next'; import { OpenAIModel } from '@/types/openai'; import HomeContext from '@/pages/api/home/home.context'; export const ModelSelect = () => { const { t } = useTranslation('chat'); const { state: { selectedConversation, models, defaultModelId }, handleUpdateConversation, dispatch: homeDispatch, } = useContext(HomeContext); const handleChange = (e: React.ChangeEvent<HTMLSelectElement>) => { selectedConversation && handleUpdateConversation(selectedConversation, { key: 'model', value: models.find( (model) => model.id === e.target.value, ) as OpenAIModel, }); }; return ( <div className="flex flex-col"> <label className="mb-2 text-left text-neutral-700 dark:text-neutral-400"> {t('Model')} </label> <div className="w-full rounded-lg border border-neutral-200 bg-transparent pr-2 text-neutral-900 dark:border-neutral-600 dark:text-white"> <select className="w-full bg-transparent p-2" placeholder={t('Select a model') || ''} value={selectedConversation?.model?.id || defaultModelId} onChange={handleChange} > {models.map((model) => ( <option key={model.id} value={model.id} className="dark:bg-[#343541] dark:text-white" > {model.id === defaultModelId ? `Default (${model.name})` : model.name} </option> ))} </select> </div> <div className="w-full mt-3 text-left text-neutral-700 dark:text-neutral-400 flex items-center"> <a href="https://platform.openai.com/account/usage" target="_blank" className="flex items-center" > <IconExternalLink size={18} className={'inline mr-1'} /> {t('View Account Usage')} </a> </div> </div> ); };