diff --git a/app/components/chat.tsx b/app/components/chat.tsx
index 1e1b5dbe..b6380add 100644
--- a/app/components/chat.tsx
+++ b/app/components/chat.tsx
@@ -414,8 +414,12 @@ export function ChatActions(props: {
// switch model
const currentModel = chatStore.currentSession().mask.modelConfig.model;
const models = useMemo(
- () => config.models.filter((m) => m.available).map((m) => m.name),
- [config.models],
+ () =>
+ config
+ .allModels()
+ .filter((m) => m.available)
+ .map((m) => m.name),
+ [config],
);
const [showModelSelector, setShowModelSelector] = useState(false);
diff --git a/app/components/model-config.tsx b/app/components/model-config.tsx
index 8e353401..9603eea0 100644
--- a/app/components/model-config.tsx
+++ b/app/components/model-config.tsx
@@ -9,10 +9,6 @@ export function ModelConfigList(props: {
updateConfig: (updater: (config: ModelConfig) => void) => void;
}) {
const config = useAppConfig();
- const customModels = config.customModels
- .split(",")
- .map((m) => ({ name: m, available: true }));
- const models = config.models.concat(customModels);
return (
<>
@@ -28,7 +24,7 @@ export function ModelConfigList(props: {
);
}}
>
- {models.map((v, i) => (
+ {config.allModels().map((v, i) => (
diff --git a/app/components/ui-lib.module.scss b/app/components/ui-lib.module.scss
index 67faabbe..7742e9d0 100644
--- a/app/components/ui-lib.module.scss
+++ b/app/components/ui-lib.module.scss
@@ -286,7 +286,9 @@
&-content {
.list {
- overflow: hidden;
+ max-height: 90vh;
+ overflow-x: hidden;
+ overflow-y: auto;
.list-item {
cursor: pointer;
diff --git a/app/store/config.ts b/app/store/config.ts
index ff346871..a4ac45e7 100644
--- a/app/store/config.ts
+++ b/app/store/config.ts
@@ -57,6 +57,7 @@ export type ChatConfigStore = ChatConfig & {
reset: () => void;
update: (updater: (config: ChatConfig) => void) => void;
mergeModels: (newModels: LLMModel[]) => void;
+ allModels: () => LLMModel[];
};
export type ModelConfig = ChatConfig["modelConfig"];
@@ -74,16 +75,9 @@ export function limitNumber(
return Math.min(max, Math.max(min, x));
}
-export function limitModel(name: string) {
- const allModels = useAppConfig.getState().models;
- return allModels.some((m) => m.name === name && m.available)
- ? name
- : "gpt-3.5-turbo";
-}
-
export const ModalConfigValidator = {
model(x: string) {
- return limitModel(x) as ModelType;
+ return x as ModelType;
},
max_tokens(x: number) {
return limitNumber(x, 0, 32000, 2000);
@@ -139,6 +133,16 @@ export const useAppConfig = create()(
models: Object.values(modelMap),
}));
},
+
+ allModels() {
+ const customModels = get()
+ .customModels.split(",")
+ .filter((v) => !!v && v.length > 0)
+ .map((m) => ({ name: m, available: true }));
+
+ const models = get().models.concat(customModels);
+ return models;
+ },
}),
{
name: StoreKey.Config,