perf: logs

This commit is contained in:
Archer
2023-03-10 22:12:13 +08:00
parent 7fb76cde0b
commit ed9e72ec9a
14 changed files with 50 additions and 51 deletions

View File

@@ -34,7 +34,7 @@ function responseSuccess(response: AxiosResponse<ResponseDataType>) {
*/ */
function checkRes(data: ResponseDataType) { function checkRes(data: ResponseDataType) {
if (data === undefined) { if (data === undefined) {
console.error(data, 'data is empty'); console.log('error->', data, 'data is empty');
return Promise.reject('服务器异常'); return Promise.reject('服务器异常');
} else if (data.code < 200 || data.code >= 400) { } else if (data.code < 200 || data.code >= 400) {
return Promise.reject(data.message); return Promise.reject(data.message);
@@ -46,7 +46,7 @@ function checkRes(data: ResponseDataType) {
* 响应错误 * 响应错误
*/ */
function responseError(err: any) { function responseError(err: any) {
console.error('请求错误', err); console.log('error->', '请求错误', err);
if (!err) { if (!err) {
return Promise.reject({ message: '未知错误' }); return Promise.reject({ message: '未知错误' });

View File

@@ -39,7 +39,7 @@ const Auth = ({ children }: { children: JSX.Element }) => {
} }
}, },
onError(error) { onError(error) {
console.error(error); console.log('error->', error);
router.push('/login'); router.push('/login');
toast(); toast();
}, },

View File

@@ -6,6 +6,7 @@ import { getOpenAIApi, authChat } from '@/service/utils/chat';
import { openaiProxy } from '@/service/utils/tools'; import { openaiProxy } from '@/service/utils/tools';
import { ChatCompletionRequestMessage, ChatCompletionRequestMessageRoleEnum } from 'openai'; import { ChatCompletionRequestMessage, ChatCompletionRequestMessageRoleEnum } from 'openai';
import { ChatItemType } from '@/types/chat'; import { ChatItemType } from '@/types/chat';
import { openaiError } from '@/service/errorCode';
/* 发送提示词 */ /* 发送提示词 */
export default async function handler(req: NextApiRequest, res: NextApiResponse) { export default async function handler(req: NextApiRequest, res: NextApiResponse) {
@@ -74,7 +75,10 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
httpsAgent: openaiProxy?.httpsAgent httpsAgent: openaiProxy?.httpsAgent
} }
); );
console.log('response success'); console.log(
formatPrompts.reduce((sum, item) => sum + item.content.length, 0),
'response success'
);
let AIResponse = ''; let AIResponse = '';
@@ -95,54 +99,44 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
updateTime: Date.now() updateTime: Date.now()
}); });
res.write('event: done\ndata: \n\n'); res.write('event: done\ndata: \n\n');
res.end();
return; return;
} }
try { try {
const json = JSON.parse(data); const json = JSON.parse(data);
const content: string = json.choices[0].delta.content || '\n'; const content: string = json?.choices?.[0].delta.content || '\n';
// console.log('content:', content) // console.log('content:', content)
res.write(`event: responseData\ndata: ${content.replace(/\n/g, '<br/>')}\n\n`); res.write(`event: responseData\ndata: ${content.replace(/\n/g, '<br/>')}\n\n`);
AIResponse += content; AIResponse += content;
} catch (e) { } catch (error) {
res.end(); error;
} }
} }
}; };
const parser = createParser(onParse); try {
for await (const chunk of chatResponse.data as any) { for await (const chunk of chatResponse.data as any) {
parser.feed(decoder.decode(chunk)); const parser = createParser(onParse);
parser.feed(decoder.decode(chunk));
}
} catch (error) {
console.log(error, '====');
throw new Error('错误了');
} }
} catch (err: any) { } catch (err: any) {
let errorText = err; // console.log('error->', err?.response, '===');
let errorText = 'OpenAI 服务器访问超时';
if (err.code === 'ECONNRESET') { if (err.code === 'ECONNRESET') {
errorText = '服务器代理出错'; errorText = '服务器代理出错';
} else { } else if (err?.response?.statusText && openaiError[err.response.statusText]) {
switch (err?.response?.data?.error?.code) { errorText = openaiError[err.response.statusText];
case 'invalid_api_key':
errorText = 'API-KEY不合法';
break;
case 'context_length_exceeded':
errorText = '内容超长了,请重置对话';
break;
case 'rate_limit_reached':
errorText = '同时访问用户过多,请稍后再试';
break;
case null:
errorText = 'OpenAI 服务器访问超时';
break;
default:
errorText = '服务器异常';
}
} }
console.error(errorText); console.log('error->', errorText);
res.write(`event: serviceError\ndata: ${errorText}\n\n`); res.write(`event: serviceError\ndata: ${errorText}\n\n`);
res.end();
// 删除最一条数据库记录, 也就是预发送的那一条 // 删除最一条数据库记录, 也就是预发送的那一条
await ChatWindow.findByIdAndUpdate(windowId, { await ChatWindow.findByIdAndUpdate(windowId, {
$pop: { content: 1 }, $pop: { content: 1 },
updateTime: Date.now() updateTime: Date.now()
}); });
res.end();
} }
} }

View File

@@ -10,7 +10,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
const { authorization } = req.headers; const { authorization } = req.headers;
if (!authorization) { if (!authorization) {
throw new Error('缺少参数'); throw new Error('缺少登录凭证');
} }
const userId = await authToken(authorization); const userId = await authToken(authorization);

View File

@@ -165,13 +165,13 @@ const Chat = () => {
event.addEventListener('serviceError', ({ data: err }) => { event.addEventListener('serviceError', ({ data: err }) => {
clearTimeout(timer); clearTimeout(timer);
event.close(); event.close();
console.error(err, '==='); console.log('error->', err, '===');
reject(typeof err === 'string' ? err : '对话出现不知名错误~'); reject(typeof err === 'string' ? err : '对话出现不知名错误~');
}); });
event.onerror = (err) => { event.onerror = (err) => {
clearTimeout(timer); clearTimeout(timer);
event.close(); event.close();
console.error(err); console.log('error->', err);
reject(typeof err === 'string' ? err : '对话出现不知名错误~'); reject(typeof err === 'string' ? err : '对话出现不知名错误~');
}; };
}); });

View File

@@ -34,7 +34,7 @@ const ModelEditForm = ({ model }: { model?: ModelType }) => {
status: 'success' status: 'success'
}); });
} catch (err) { } catch (err) {
console.error(err); console.log('error->', err);
toast({ toast({
title: err as string, title: err as string,
status: 'success' status: 'success'

View File

@@ -29,7 +29,7 @@ const Training = ({ model }: { model: ModelType }) => {
const res = await getModelTrainings(id); const res = await getModelTrainings(id);
setRecords(res); setRecords(res);
} catch (error) { } catch (error) {
console.error(error); console.log('error->', error);
} }
}, []); }, []);

View File

@@ -42,7 +42,7 @@ const ModelDetail = () => {
res.security.expiredTime /= 60 * 60 * 1000; res.security.expiredTime /= 60 * 60 * 1000;
setModel(res); setModel(res);
} catch (err) { } catch (err) {
console.error(err); console.log('error->', err);
} }
setLoading(false); setLoading(false);
}, [modelId, setLoading]); }, [modelId, setLoading]);
@@ -63,7 +63,7 @@ const ModelDetail = () => {
}); });
router.replace('/model/list'); router.replace('/model/list');
} catch (err) { } catch (err) {
console.error(err); console.log('error->', err);
} }
setLoading(false); setLoading(false);
}, [setLoading, model, router, toast]); }, [setLoading, model, router, toast]);
@@ -77,7 +77,7 @@ const ModelDetail = () => {
router.push(`/chat?chatId=${chatId}`); router.push(`/chat?chatId=${chatId}`);
} catch (err) { } catch (err) {
console.error(err); console.log('error->', err);
} }
setLoading(false); setLoading(false);
}, [setLoading, model, router]); }, [setLoading, model, router]);
@@ -105,7 +105,7 @@ const ModelDetail = () => {
title: typeof err === 'string' ? err : '文件格式错误', title: typeof err === 'string' ? err : '文件格式错误',
status: 'error' status: 'error'
}); });
console.error(err); console.log('error->', err);
} }
setLoading(false); setLoading(false);
}, },
@@ -121,7 +121,7 @@ const ModelDetail = () => {
await putModelTrainingStatus(model._id); await putModelTrainingStatus(model._id);
loadModel(); loadModel();
} catch (error: any) { } catch (error: any) {
console.error(error); console.log('error->', error);
toast({ toast({
title: error.message || '更新失败', title: error.message || '更新失败',
status: 'error' status: 'error'

View File

@@ -46,7 +46,7 @@ const ModelList = () => {
shallow: true shallow: true
}); });
} catch (err: any) { } catch (err: any) {
console.error(err); console.log('error->', err);
toast({ toast({
title: err.message || '出现一些异常', title: err.message || '出现一些异常',
status: 'error' status: 'error'

View File

@@ -1,3 +1,6 @@
export const openaiError: Record<string, string> = { export const openaiError: Record<string, string> = {
context_length_exceeded: '内容超出长度' context_length_exceeded: '内容超长了,请重置对话',
Unauthorized: 'API-KEY 不合法',
rate_limit_reached: '同时访问用户过多,请稍后再试',
'Bad Request': '内容太多了~'
}; };

View File

@@ -12,12 +12,14 @@ export async function connectToDatabase(): Promise<void> {
console.log('connect mongo'); console.log('connect mongo');
try { try {
global.mongodb = await mongoose.connect(process.env.MONGODB_URI as string, { global.mongodb = await mongoose.connect(process.env.MONGODB_URI as string, {
bufferCommands: true,
dbName: 'doc_gpt', dbName: 'doc_gpt',
maxPoolSize: 10, maxPoolSize: 5,
minPoolSize: 1 minPoolSize: 1,
maxConnecting: 5
}); });
} catch (error) { } catch (error) {
console.error('mongo connect error'); console.log('error->', 'mongo connect error');
global.mongodb = null; global.mongodb = null;
} }
} }

View File

@@ -27,8 +27,8 @@ export const jsonRes = (
msg = openaiError[error?.response?.data?.message]; msg = openaiError[error?.response?.data?.message];
} }
console.error(error); console.log('error->', error);
console.error(msg); console.log('error->', msg);
} }
res.json({ res.json({

View File

@@ -34,7 +34,7 @@ export const sendCode = (email: string, code: string, type: `${EmailTypeEnum}`)
}; };
mailTransport.sendMail(options, function (err, msg) { mailTransport.sendMail(options, function (err, msg) {
if (err) { if (err) {
console.error(err); console.log('error->', err);
reject('邮箱异常'); reject('邮箱异常');
} else { } else {
resolve(''); resolve('');
@@ -53,7 +53,7 @@ export const sendTrainSucceed = (email: string, modelName: string) => {
}; };
mailTransport.sendMail(options, function (err, msg) { mailTransport.sendMail(options, function (err, msg) {
if (err) { if (err) {
console.error(err); console.log('error->', err);
reject('邮箱异常'); reject('邮箱异常');
} else { } else {
resolve(''); resolve('');

View File

@@ -21,7 +21,7 @@ export const useCopyData = () => {
duration: 1000 duration: 1000
}); });
} catch (error) { } catch (error) {
console.error(error); console.log('error->', error);
toast({ toast({
title: '复制失败', title: '复制失败',
status: 'error' status: 'error'