This commit is contained in:
Liang Ding 2023-03-03 23:25:50 +08:00
parent 7ae19716b6
commit 80a7ebc409
No known key found for this signature in database
GPG key ID: 136F30F901A2231D
2 changed files with 32 additions and 10 deletions

View file

@ -32,7 +32,6 @@ import {processRender} from "../util/processCode";
import {getEventName} from "../util/compatibility";
import {Dialog} from "../../dialog";
import {isMobile} from "../../util/functions";
import {progressLoading} from "../../dialog/processSystem";
export class Hint {
public timeId: number;
@ -565,15 +564,12 @@ ${unicode2Emoji(emoji.unicode, true)}</button>`;
dialog.destroy();
});
btnsElement[1].addEventListener("click", () => {
progressLoading({code: 1, cmd:"", data:"", msg:"", sid:""});
fetchPost("/api/ai/chatGPT", {
msg: inputElement.value,
}, (response) => {
progressLoading({code: 2, cmd:"", data:"", msg:"", sid:""});
dialog.destroy();
focusByRange(protyle.toolbar.range);
insertHTML(`${inputElement.value}
${response.data}`, protyle, true);
insertHTML(`${inputElement.value}\n\n${response.data}`, protyle, true);
});
});
return;

View file

@ -17,7 +17,11 @@
package util
import (
"bytes"
"context"
"errors"
"github.com/88250/lute/html"
"io"
"net/http"
"net/url"
"os"
@ -41,6 +45,9 @@ func ChatGPT(msg string) (ret string) {
return
}
PushEndlessProgress("Requesting...")
defer ClearPushProgress(100)
config := gogpt.DefaultConfig(OpenAIAPIKey)
if "" != OpenAIAPIProxy {
proxyUrl, err := url.Parse(OpenAIAPIProxy)
@ -64,16 +71,35 @@ func ChatGPT(msg string) (ret string) {
},
},
}
resp, err := c.CreateChatCompletion(ctx, req)
stream, err := c.CreateChatCompletionStream(ctx, req)
if nil != err {
logging.LogErrorf("create chat completion failed: %s", err)
logging.LogErrorf("create chat completion stream failed: %s", err)
return
}
defer stream.Close()
if 0 < len(resp.Choices) {
ret = resp.Choices[0].Message.Content
ret = strings.TrimSpace(ret)
buf := bytes.Buffer{}
for {
resp, recvErr := stream.Recv()
if errors.Is(recvErr, io.EOF) {
break
}
if nil != recvErr {
logging.LogErrorf("create chat completion stream recv failed: %s", recvErr)
break
}
for _, choice := range resp.Choices {
content := choice.Delta.Content
buf.WriteString(content)
PushEndlessProgress(html.EscapeHTMLStr(buf.String()))
}
}
ret = buf.String()
ret = strings.TrimSpace(ret)
return
}