feat: save system prompt

This commit is contained in:
archer
2023-05-02 14:06:10 +08:00
parent b0d414ac12
commit 90456301d2
10 changed files with 104 additions and 27 deletions

View File

@@ -1,4 +1,6 @@
import { getToken } from '../utils/user';
import { SYSTEM_PROMPT_PREFIX } from '@/constants/chat';
interface StreamFetchProps {
url: string;
data: any;
@@ -6,7 +8,7 @@ interface StreamFetchProps {
abortSignal: AbortController;
}
export const streamFetch = ({ url, data, onMessage, abortSignal }: StreamFetchProps) =>
new Promise<string>(async (resolve, reject) => {
new Promise<{ responseText: string; systemPrompt: string }>(async (resolve, reject) => {
try {
const res = await fetch(url, {
method: 'POST',
@@ -19,15 +21,22 @@ export const streamFetch = ({ url, data, onMessage, abortSignal }: StreamFetchPr
});
const reader = res.body?.getReader();
if (!reader) return;
if (res.status !== 200) {
console.log(res);
return reject('chat error');
}
const decoder = new TextDecoder();
let responseText = '';
let systemPrompt = '';
const read = async () => {
try {
const { done, value } = await reader?.read();
if (done) {
if (res.status === 200) {
resolve(responseText);
resolve({ responseText, systemPrompt });
} else {
const parseError = JSON.parse(responseText);
reject(parseError?.message || '请求异常');
@@ -36,12 +45,19 @@ export const streamFetch = ({ url, data, onMessage, abortSignal }: StreamFetchPr
return;
}
const text = decoder.decode(value).replace(/<br\/>/g, '\n');
res.status === 200 && onMessage(text);
responseText += text;
// check system prompt
if (text.startsWith(SYSTEM_PROMPT_PREFIX)) {
systemPrompt = text.replace(SYSTEM_PROMPT_PREFIX, '');
} else {
responseText += text;
onMessage(text);
}
read();
} catch (err: any) {
if (err?.message === 'The user aborted a request.') {
return resolve(responseText);
return resolve({ responseText, systemPrompt });
}
reject(typeof err === 'string' ? err : err?.message || '请求异常');
}