From bb824ab35e5618c5061a2ae8062fcb1a856c320b Mon Sep 17 00:00:00 2001 From: archer <545436317@qq.com> Date: Sat, 5 Aug 2023 12:26:26 +0800 Subject: [PATCH] perf: user openai --- client/.env.template | 13 +++++++------ client/src/pages/api/app/share/getModels.ts | 10 ++-------- client/src/service/ai/openai.ts | 6 +++--- client/src/store/chat.ts | 2 +- client/src/store/shareChat.ts | 2 +- client/src/store/user.ts | 10 +++++++++- 6 files changed, 23 insertions(+), 20 deletions(-) diff --git a/client/.env.template b/client/.env.template index 3f3671493..76ba7d89a 100644 --- a/client/.env.template +++ b/client/.env.template @@ -17,12 +17,13 @@ aliTemplateCode=xxxx TOKEN_KEY=dfdasfdas # root key, 最高权限 ROOT_KEY=fdafasd -# 使用 oneapi -# ONEAPI_URL=https://xxxx.cloud.sealos.io/v1 -# ONEAPI_KEY=sk-xxxx -# openai 的基本地址(国外的可以忽略,默认走 api.openai.com)。不用 oneapi 的话需要下面 2 个参数,用户的 key 也会走下面的参数 -OPENAI_BASE_URL=https://xxxx.cloud.sealos.io/openai/v1 -OPENAIKEY=sk-xxxx +# openai 基本地址,可用作中转。 +OPENAI_BASE_URL=https://api.openai.com/v1 +# oneapi 地址,可以使用 oneapi 来实现多模型接入 +ONEAPI_URL=https://xxxx.cloud.sealos.io/openai/v1 +# 通用key。可以是 openai 的也可以是 oneapi 的。 +# 此处填写逻辑:填了 ONEAPI_URL,key 就填 oneapi 的。没填 ONEAPI_URL,key 就填 OPENAI_BASE_URL 对应的。 +CHAT_API_KEY=sk-xxxx # db MONGODB_URI=mongodb://username:password@0.0.0.0:27017/?authSource=admin MONGODB_NAME=fastgpt diff --git a/client/src/pages/api/app/share/getModels.ts b/client/src/pages/api/app/share/getModels.ts index 17c653d6b..04c2a88ae 100644 --- a/client/src/pages/api/app/share/getModels.ts +++ b/client/src/pages/api/app/share/getModels.ts @@ -3,7 +3,7 @@ import { jsonRes } from '@/service/response'; import { connectToDatabase, App } from '@/service/mongo'; import type { PagingData } from '@/types'; import type { ShareAppItem } from '@/types/app'; -import { parseCookie } from '@/service/utils/auth'; +import { authUser } from '@/service/utils/auth'; import { Types } from 'mongoose'; /* 获取模型列表 */ @@ -17,13 +17,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< await connectToDatabase(); - let userId = ''; - - try { - userId = await parseCookie(req.headers.cookie); - } catch (error) { - error; - } + const { userId } = await authUser({ req, authToken: true }); const regex = new RegExp(searchText, 'i'); diff --git a/client/src/service/ai/openai.ts b/client/src/service/ai/openai.ts index 48bb8191f..98371c541 100644 --- a/client/src/service/ai/openai.ts +++ b/client/src/service/ai/openai.ts @@ -1,10 +1,10 @@ import { UserModelSchema } from '@/types/mongoSchema'; import { Configuration, OpenAIApi } from 'openai'; -export const openaiBaseUrl = 'https://api.openai.com/v1'; -export const baseUrl = process.env.ONEAPI_URL || process.env.OPENAI_BASE_URL || openaiBaseUrl; +export const openaiBaseUrl = process.env.OPENAI_BASE_URL || 'https://api.openai.com/v1'; +export const baseUrl = process.env.ONEAPI_URL || openaiBaseUrl; -export const systemAIChatKey = process.env.ONEAPI_KEY || process.env.OPENAIKEY || ''; +export const systemAIChatKey = process.env.CHAT_API_KEY || ''; export const getAIChatApi = (props?: UserModelSchema['openaiAccount']) => { return new OpenAIApi( diff --git a/client/src/store/chat.ts b/client/src/store/chat.ts index b32e0689b..77a38e505 100644 --- a/client/src/store/chat.ts +++ b/client/src/store/chat.ts @@ -24,7 +24,7 @@ const defaultChatData: InitChatResponse = { chatId: '', appId: '', app: { - name: '', + name: 'FastAI', avatar: '/icon/logo.png', intro: '', canUse: false diff --git a/client/src/store/shareChat.ts b/client/src/store/shareChat.ts index 27f1c5745..fa0414b16 100644 --- a/client/src/store/shareChat.ts +++ b/client/src/store/shareChat.ts @@ -30,7 +30,7 @@ export const defaultHistory: ShareChatHistoryItemType = { const defaultShareChatData: ShareChatType = { userAvatar: HUMAN_ICON, app: { - name: '', + name: 'AI', avatar: '/icon/logo.png', intro: '' }, diff --git a/client/src/store/user.ts b/client/src/store/user.ts index a537ebac0..41142d48d 100644 --- a/client/src/store/user.ts +++ b/client/src/store/user.ts @@ -53,6 +53,7 @@ export const useUserStore = create()( }); }, async updateUserInfo(user: UserUpdateParams) { + const oldInfo = (get().userInfo ? { ...get().userInfo } : null) as UserType | null; set((state) => { if (!state.userInfo) return; state.userInfo = { @@ -60,7 +61,14 @@ export const useUserStore = create()( ...user }; }); - await putUserInfo(user); + try { + await putUserInfo(user); + } catch (error) { + set((state) => { + state.userInfo = oldInfo; + }); + return Promise.reject(error); + } }, myApps: [], myCollectionApps: [],