import { ServiceProvider } from "@/app/constant";
import { ModalConfigValidator, ModelConfig } from "../store";
import { useAccessStore } from "../store";
import Locale from "../locales";
import { InputRange } from "./input-range";
import { ListItem, Select } from "./ui-lib";
import { useAllModels } from "../utils/hooks";
import styles from "./model-config.module.scss";
import { getModelProvider } from "../utils/model";
export function ModelConfigList(props: {
modelConfig: ModelConfig;
updateConfig: (updater: (config: ModelConfig) => void) => void;
}) {
const allModels = useAllModels();
const accessStore = useAccessStore();
// 过滤未配置API密钥的服务提供商
const validProviders = Object.entries(ServiceProvider).filter(([_, v]) => {
switch (v) {
case ServiceProvider.OpenAI:
return true; // 始终保留OpenAI选项,即使没有配置API密钥
case ServiceProvider.Azure:
return accessStore.isValidAzure();
case ServiceProvider.Google:
return accessStore.isValidGoogle();
case ServiceProvider.Anthropic:
return accessStore.isValidAnthropic();
case ServiceProvider.Baidu:
return accessStore.isValidBaidu();
case ServiceProvider.ByteDance:
return accessStore.isValidByteDance();
case ServiceProvider.Alibaba:
return accessStore.isValidAlibaba();
case ServiceProvider.Tencent:
return accessStore.isValidTencent();
case ServiceProvider.Moonshot:
return accessStore.isValidMoonshot();
case ServiceProvider.Iflytek:
return accessStore.isValidIflytek();
case ServiceProvider.DeepSeek:
return accessStore.isValidDeepSeek();
case ServiceProvider.XAI:
return accessStore.isValidXAI();
case ServiceProvider.ChatGLM:
return accessStore.isValidChatGLM();
case ServiceProvider.SiliconFlow:
return accessStore.isValidSiliconFlow();
case ServiceProvider.Stability:
return true; // 假设不需要验证或其他处理
default:
return false;
}
});
const filteredModels = allModels.filter(
(v) =>
v.available &&
v.provider?.providerName === props.modelConfig.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),
)
}
>
>
);
}