Refactor App.tsx and ConfigStore.ts to handle multiple providers for API base and API key

This commit is contained in:
bobo 2024-04-17 14:56:56 +08:00
parent 9ebd041102
commit f443ade6cd
2 changed files with 32 additions and 13 deletions

View File

@ -28,12 +28,31 @@ export default function App() {
const getConfig = () => { const getConfig = () => {
MessageUtil.registerHandler("readConfig", (data: { value: any }) => { MessageUtil.registerHandler("readConfig", (data: { value: any }) => {
console.log("readConfig registerHandler: ", data); console.log("readConfig registerHandler: ", data);
const modelsUrl =
data.value?.providers?.devchat?.api_base || "https://api.devchat.ai/v1"; // 尝试获取 devchat 的 api_base
axios.get(`${modelsUrl}/models`).then((res) => { let provider: string = "devchat";
let modelsUrl = data.value?.providers?.devchat?.api_base;
let devchatApiKey = data.value?.providers?.devchat?.api_key;
// 如果 devchat 的 api_base 没有设置,尝试获取 openai 的 api_base
if (!modelsUrl || !devchatApiKey) {
modelsUrl = data.value?.providers?.openai?.api_base;
devchatApiKey = data.value?.providers?.openai?.api_key;
provider = "openai";
}
// 如果以上两者都没有设置,使用默认链接
if (!modelsUrl) {
modelsUrl = "https://api.devchat.ai/v1";
devchatApiKey = "1234";
provider = "devchat";
}
// 添加 header: "Authorization: Bearer ${devchatApiKey}"
axios.get(`${modelsUrl}/models`, { headers: { 'Authorization': `Bearer ${devchatApiKey}` }}).then((res) => {
// 获取 models 模版列表 // 获取 models 模版列表
if (res?.data?.data && Array.isArray(res?.data?.data)) { if (res?.data?.data && Array.isArray(res?.data?.data)) {
config.setTemplate(res.data.data); config.setTemplate(res.data.data, provider);
config.setConfig(data.value); config.setConfig(data.value);
setReady(true); setReady(true);
} }

View File

@ -17,14 +17,14 @@ export const ConfigStore = types
defaultModel: types.optional(types.string, ""), defaultModel: types.optional(types.string, ""),
}) })
.actions((self) => ({ .actions((self) => ({
setTemplate: (value: any) => { setTemplate: (value: any, provider: string) => {
const models = value const models = value
.filter((item) => item.category === "chat") .filter((item) => !item.category || item.category === "chat")
.map((item) => { .map((item) => {
return { return {
name: item.model, name: item.model ?? item.id,
max_input_tokens: item.max_input_tokens, max_input_tokens: item.max_input_tokens ?? 6000,
provider: "devchat", provider: provider,
stream: true, stream: true,
}; };
}); });
@ -89,6 +89,7 @@ export const ConfigStore = types
...item, ...item,
}; };
delete currentModel.name; delete currentModel.name;
if (!newConfig.models[item.name]) { if (!newConfig.models[item.name]) {
newConfig.models[item.name] = { newConfig.models[item.name] = {
...currentModel, ...currentModel,
@ -99,10 +100,9 @@ export const ConfigStore = types
...newConfig.models[item.name], ...newConfig.models[item.name],
}; };
} }
if (
newConfig.models[item.name].provider !== "devchat" && if (newConfig.models[item.name].provider !== currentModel.provider) {
newConfig.models[item.name].provider !== "openai" needUpdate = true;
) {
newConfig.models[item.name].provider = currentModel.provider; newConfig.models[item.name].provider = currentModel.provider;
} }
// 只有之前配置过 openai 的provider 才可以是 openai // 只有之前配置过 openai 的provider 才可以是 openai