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

@ -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
}