import type { ModelConfig } from '../store';
import { ServiceProvider } from '@/app/constant';
import { groupBy } from 'lodash-es';
import Locale from '../locales';
import { ModalConfigValidator } from '../store';
import { useAllModels } from '../utils/hooks';
import { getModelProvider } from '../utils/model';
import { InputRange } from './input-range';
import styles from './model-config.module.scss';
import { ListItem, Select } from './ui-lib';
export function ModelConfigList(props: {
modelConfig: ModelConfig;
updateConfig: (updater: (config: ModelConfig) => void) => void;
}) {
const allModels = useAllModels();
const groupModels = groupBy(
allModels.filter(v => v.available),
'provider.providerName',
);
const value = `${props.modelConfig.model}@${props.modelConfig?.providerName}`;
const compressModelValue = `${props.modelConfig.compressModel}@${props.modelConfig?.compressProviderName}`;
return (
<>
{
props.updateConfig(
config =>
(config.temperature = ModalConfigValidator.temperature(
e.currentTarget.valueAsNumber,
)),
);
}}
>
{
props.updateConfig(
config =>
(config.top_p = ModalConfigValidator.top_p(
e.currentTarget.valueAsNumber,
)),
);
}}
>
props.updateConfig(
config =>
(config.max_tokens = ModalConfigValidator.max_tokens(
e.currentTarget.valueAsNumber,
)),
)}
>
{props.modelConfig?.providerName == ServiceProvider.Google
? null
: (
<>
{
props.updateConfig(
config =>
(config.presence_penalty
= ModalConfigValidator.presence_penalty(
e.currentTarget.valueAsNumber,
)),
);
}}
>
{
props.updateConfig(
config =>
(config.frequency_penalty
= ModalConfigValidator.frequency_penalty(
e.currentTarget.valueAsNumber,
)),
);
}}
>
props.updateConfig(
config =>
(config.enableInjectSystemPrompts
= e.currentTarget.checked),
)}
>
props.updateConfig(
config => (config.template = e.currentTarget.value),
)}
>
>
)}
props.updateConfig(
config => (config.historyMessageCount = e.target.valueAsNumber),
)}
>
props.updateConfig(
config =>
(config.compressMessageLengthThreshold
= e.currentTarget.valueAsNumber),
)}
>
props.updateConfig(
config => (config.sendMemory = e.currentTarget.checked),
)}
>
>
);
}