| 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> |
| ); |
| }; |
|
|