|
|
@@ -16,9 +16,10 @@ import (
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
-func OpenaiStreamHandler(c *gin.Context, resp *http.Response, relayMode int) (*dto.OpenAIErrorWithStatusCode, string) {
|
|
|
+func OpenaiStreamHandler(c *gin.Context, resp *http.Response, relayMode int) (*dto.OpenAIErrorWithStatusCode, string, int) {
|
|
|
//checkSensitive := constant.ShouldCheckCompletionSensitive()
|
|
|
var responseTextBuilder strings.Builder
|
|
|
+ toolCount := 0
|
|
|
scanner := bufio.NewScanner(resp.Body)
|
|
|
scanner.Split(func(data []byte, atEOF bool) (advance int, token []byte, err error) {
|
|
|
if atEOF && len(data) == 0 {
|
|
|
@@ -69,6 +70,9 @@ func OpenaiStreamHandler(c *gin.Context, resp *http.Response, relayMode int) (*d
|
|
|
for _, choice := range streamResponse.Choices {
|
|
|
responseTextBuilder.WriteString(choice.Delta.Content)
|
|
|
if choice.Delta.ToolCalls != nil {
|
|
|
+ if len(choice.Delta.ToolCalls) > toolCount {
|
|
|
+ toolCount = len(choice.Delta.ToolCalls)
|
|
|
+ }
|
|
|
for _, tool := range choice.Delta.ToolCalls {
|
|
|
responseTextBuilder.WriteString(tool.Function.Name)
|
|
|
responseTextBuilder.WriteString(tool.Function.Arguments)
|
|
|
@@ -82,6 +86,9 @@ func OpenaiStreamHandler(c *gin.Context, resp *http.Response, relayMode int) (*d
|
|
|
for _, choice := range streamResponse.Choices {
|
|
|
responseTextBuilder.WriteString(choice.Delta.Content)
|
|
|
if choice.Delta.ToolCalls != nil {
|
|
|
+ if len(choice.Delta.ToolCalls) > toolCount {
|
|
|
+ toolCount = len(choice.Delta.ToolCalls)
|
|
|
+ }
|
|
|
for _, tool := range choice.Delta.ToolCalls {
|
|
|
responseTextBuilder.WriteString(tool.Function.Name)
|
|
|
responseTextBuilder.WriteString(tool.Function.Arguments)
|
|
|
@@ -135,10 +142,10 @@ func OpenaiStreamHandler(c *gin.Context, resp *http.Response, relayMode int) (*d
|
|
|
})
|
|
|
err := resp.Body.Close()
|
|
|
if err != nil {
|
|
|
- return service.OpenAIErrorWrapper(err, "close_response_body_failed", http.StatusInternalServerError), ""
|
|
|
+ return service.OpenAIErrorWrapper(err, "close_response_body_failed", http.StatusInternalServerError), "", toolCount
|
|
|
}
|
|
|
wg.Wait()
|
|
|
- return nil, responseTextBuilder.String()
|
|
|
+ return nil, responseTextBuilder.String(), toolCount
|
|
|
}
|
|
|
|
|
|
func OpenaiHandler(c *gin.Context, resp *http.Response, promptTokens int, model string) (*dto.OpenAIErrorWithStatusCode, *dto.Usage) {
|