fix: Resolve API inaccessibility in private domains

- Add forced model list refresh after reading configuration
- Remove unnecessary modelMenus registration and fetching
- Replace modelMenus with config.modelNames for consistency and reliability
- Enclose if statement body with braces for better readability
- Remove redundant and unused model list fetching code

Closes #360
This commit is contained in:
Rankin Zheng 2024-04-28 16:18:30 +08:00
parent ed4df3ac60
commit b2268514fa
6 changed files with 15 additions and 58 deletions

View File

@ -28,6 +28,7 @@ export default function App() {
MessageUtil.registerHandler("readConfig", (data: { value: any }) => {
console.log("readConfig registerHandler: ", data);
config.setConfig(data.value);
config.refreshModelList();
});
MessageUtil.sendMessage({ command: "readConfig", key: "" });
};

View File

@ -64,8 +64,7 @@ const InputMessage = observer((props: any) => {
menuType,
currentMenuIndex,
contextMenus,
commandMenus,
modelMenus,
commandMenus
} = input;
const { generating } = chat;
const viewport = useRef<HTMLDivElement>(null);
@ -357,7 +356,7 @@ const InputMessage = observer((props: any) => {
withArrow
shadow="md"
styles={menuStyles}
disabled={modelMenus.length === 0}
disabled={config.modelNames.length === 0}
>
<Menu.Target>
<Button
@ -373,7 +372,7 @@ const InputMessage = observer((props: any) => {
</Menu.Target>
<Menu.Dropdown>
<ScrollArea.Autosize placeholder="" type="always" mah={240}>
{modelMenus.map((modelName) => {
{config.modelNames.map((modelName) => {
return (
<Menu.Item
key={modelName}

View File

@ -74,7 +74,7 @@ const chatPanel = observer(() => {
};
useEffect(() => {
if (!router.currentRoute || router.currentRoute !== "chat") return;
if (!router.currentRoute || router.currentRoute !== "chat") {return;}
// Fetch the command menus, before history records are obtained,
// because the display information in the history record requires adjustment
messageUtil.sendMessage({ command: "regCommandList" });
@ -102,7 +102,6 @@ const chatPanel = observer(() => {
});
chat.fetchHistoryMessages();
input.fetchContextMenus().then();
input.fetchModelMenus();
getFeatureToggles();
}
);

View File

@ -97,7 +97,7 @@ const Config = observer(() => {
api_base: (value) =>
value.length > 0 ? null : "Please enter api base",
cumstom_api_base: (value, values) =>
values.providers?.devchat?.api_base === "custom" && value.length <= 0
values.providers?.devchat?.api_base === "custom" && value?.length <= 0
? "Please enter custom api base"
: null,
},
@ -114,11 +114,9 @@ const Config = observer(() => {
MessageUtil.sendMessage({ command: "readConfig" });
});
if (router.currentRoute !== "config") {return;}
const modelName = config.getModelList();
const modelArray = modelName.map((item) => ({
value: item,
label: getModelShowName(item),
const modelArray = config.modelsTemplate.map((item) => ({
value: item.name,
label: getModelShowName(item.name),
}));
setModels(modelArray);
setCurrent(modelArray[0].value);

View File

@ -38,6 +38,7 @@ export const ConfigStore = types
.model("Config", {
config: types.optional(types.frozen(), {}),
modelsTemplate: types.optional(types.array(Model), modelsTemplate),
modelNames: types.optional(types.array(types.string),modelsTemplate.map((item)=>item.name)),
settle: types.optional(types.boolean, false),
defaultModel: types.optional(types.string, ""),
devchatApiKey: "DC.xxxxxxx",
@ -57,7 +58,9 @@ export const ConfigStore = types
};
});
self.modelsTemplate = models;
}
self.modelNames = models.map((item)=>item.name);
};
return {
setTemplate,
updateSettle: (value: boolean) => {
@ -158,7 +161,7 @@ export const ConfigStore = types
}
});
const modelList = this.getModelList();
const modelList = self.modelNames;
if (!modelList.includes(newConfig.default_model)) {
newConfig.default_model = modelList[0];
needUpdate = true;
@ -181,12 +184,6 @@ export const ConfigStore = types
const { data } = yield fetchLLMs({modelsUrl:self.modelsUrl,devchatApiKey:self.devchatApiKey});
setTemplate(data,self.provider);
}),
getModelList: function () {
const modelsArray = self.modelsTemplate.map((item) => {
return item.name;
});
return modelsArray;
},
writeConfig: function () {
const writeConfig = cloneDeep(self.config);
if (

View File

@ -24,37 +24,6 @@ const regContextMenus = async () => {
}
});
};
const regModelMenus = async () => {
return new Promise<String[]>((resolve, reject) => {
try {
messageUtil.sendMessage({ command: "regModelList" });
messageUtil.registerHandler(
"regModelList",
(message: { result: String[] }) => {
resolve(message.result);
}
);
} catch (e) {
reject(e);
}
});
};
const regCommandMenus = async () => {
return new Promise<Item[]>((resolve, reject) => {
try {
messageUtil.sendMessage({ command: "regCommandList" });
messageUtil.registerHandler(
"regCommandList",
(message: { result: Item[] }) => {
resolve(message.result);
}
);
} catch (e) {
reject(e);
}
});
};
export const ChatContext = types.model({
file: types.maybe(types.string),
@ -86,8 +55,7 @@ export const InputStore = types
menuOpend: false,
currentMenuIndex: 0,
commandMenus: types.array(MenuItem),
contextMenus: types.array(ContextMenuItem),
modelMenus: types.array(types.string),
contextMenus: types.array(ContextMenuItem)
})
.actions((self) => ({
setValue(value: string) {
@ -125,11 +93,6 @@ export const InputStore = types
self.contextMenus.push(...items);
} catch (error) {}
}),
fetchModelMenus() {
const rootStore = getParent<RootInstance>(self);
const models = rootStore.config.getModelList();
self.modelMenus.push(...models);
},
fetchCommandMenus: (items: Item[]) => {
self.commandMenus.clear();
self.commandMenus.push(...items);