feat: #3224 auto switch to first avaliable model

This commit is contained in:
Yidadaa 2023-11-12 00:29:36 +08:00
parent 943214c6a7
commit be9774943b
2 changed files with 20 additions and 4 deletions

View File

@ -431,11 +431,27 @@ export function ChatActions(props: {
// switch model // switch model
const currentModel = chatStore.currentSession().mask.modelConfig.model; const currentModel = chatStore.currentSession().mask.modelConfig.model;
const models = useAllModels() const allModels = useAllModels();
.filter((m) => m.available) const models = useMemo(
.map((m) => m.name); () => allModels.filter((m) => m.available).map((m) => m.name),
[allModels],
);
const [showModelSelector, setShowModelSelector] = useState(false); const [showModelSelector, setShowModelSelector] = useState(false);
useEffect(() => {
// if current model is not available
// switch to first available model
const isUnavaliableModel = !models.includes(currentModel);
if (isUnavaliableModel && models.length > 0) {
const nextModel = models[0] as ModelType;
chatStore.updateCurrentSession(
(session) => (session.mask.modelConfig.model = nextModel),
);
showToast(nextModel);
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [currentModel, models]);
return ( return (
<div className={styles["chat-input-actions"]}> <div className={styles["chat-input-actions"]}>
{couldStop && ( {couldStop && (

View File

@ -8,7 +8,7 @@ export function useAllModels() {
const models = useMemo(() => { const models = useMemo(() => {
return collectModels( return collectModels(
configStore.models, configStore.models,
[accessStore.customModels, configStore.customModels].join(","), [configStore.customModels, accessStore.customModels].join(","),
); );
}, [accessStore.customModels, configStore.customModels, configStore.models]); }, [accessStore.customModels, configStore.customModels, configStore.models]);