diff --git a/app/components/chat.tsx b/app/components/chat.tsx
index c27c3eee4..48f76e8ab 100644
--- a/app/components/chat.tsx
+++ b/app/components/chat.tsx
@@ -431,11 +431,27 @@ export function ChatActions(props: {
 
   // switch model
   const currentModel = chatStore.currentSession().mask.modelConfig.model;
-  const models = useAllModels()
-    .filter((m) => m.available)
-    .map((m) => m.name);
+  const allModels = useAllModels();
+  const models = useMemo(
+    () => allModels.filter((m) => m.available).map((m) => m.name),
+    [allModels],
+  );
   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 (
     <div className={styles["chat-input-actions"]}>
       {couldStop && (
diff --git a/app/utils/hooks.ts b/app/utils/hooks.ts
index f6bfae673..35d1f53a4 100644
--- a/app/utils/hooks.ts
+++ b/app/utils/hooks.ts
@@ -8,7 +8,7 @@ export function useAllModels() {
   const models = useMemo(() => {
     return collectModels(
       configStore.models,
-      [accessStore.customModels, configStore.customModels].join(","),
+      [configStore.customModels, accessStore.customModels].join(","),
     );
   }, [accessStore.customModels, configStore.customModels, configStore.models]);