From c9996a86a89be89ba0ab0c0f2e64997ef848ce1a Mon Sep 17 00:00:00 2001 From: yokowu <18836617@qq.com> Date: Fri, 25 Jul 2025 18:15:22 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=BE=93=E5=87=BAtoke?= =?UTF-8?q?n=E7=BB=9F=E8=AE=A1=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/internal/proxy/recorder.go | 66 +++++++++++------------------- 1 file changed, 24 insertions(+), 42 deletions(-) diff --git a/backend/internal/proxy/recorder.go b/backend/internal/proxy/recorder.go index fb6974d..0bc7ab3 100644 --- a/backend/internal/proxy/recorder.go +++ b/backend/internal/proxy/recorder.go @@ -18,7 +18,6 @@ import ( "github.com/chaitin/MonkeyCode/backend/consts" "github.com/chaitin/MonkeyCode/backend/domain" "github.com/chaitin/MonkeyCode/backend/pkg/diff" - "github.com/chaitin/MonkeyCode/backend/pkg/promptparser" ) type Recorder struct { @@ -219,8 +218,12 @@ func (r *Recorder) handleJson(rc *domain.RecordParam) { } if len(resp.Choices) > 0 { rc.Completion = resp.Choices[0].Message.Content - rc.InputTokens = int64(resp.Usage.PromptTokens) - rc.OutputTokens = int64(resp.Usage.CompletionTokens) + if input := resp.Usage.PromptTokens; input > 0 { + rc.InputTokens = int64(input) + } + if output := resp.Usage.CompletionTokens; output > 0 { + rc.OutputTokens = int64(output) + } } case consts.ModelTypeCoder: @@ -232,8 +235,12 @@ func (r *Recorder) handleJson(rc *domain.RecordParam) { if rc.TaskID == "" { rc.TaskID = resp.ID } - rc.InputTokens = int64(resp.Usage.PromptTokens) - rc.OutputTokens = int64(resp.Usage.CompletionTokens) + if input := resp.Usage.PromptTokens; input > 0 { + rc.InputTokens = int64(input) + } + if output := resp.Usage.CompletionTokens; output > 0 { + rc.OutputTokens = int64(output) + } if len(resp.Choices) > 0 { rc.Completion = resp.Choices[0].Text rc.CodeLines = int64(strings.Count(resp.Choices[0].Text, "\n")) @@ -290,8 +297,12 @@ func (r *Recorder) processSSELine(ctx context.Context, line string, rc *domain.R return nil } if resp.Usage != nil { - rc.InputTokens = int64(resp.Usage.PromptTokens) - rc.OutputTokens += int64(resp.Usage.CompletionTokens) + if input := resp.Usage.PromptTokens; input > 0 { + rc.InputTokens = int64(input) + } + if output := resp.Usage.CompletionTokens; output > 0 { + rc.OutputTokens = int64(output) + } } if len(resp.Choices) > 0 { content := resp.Choices[0].Delta.Content @@ -310,8 +321,12 @@ func (r *Recorder) processSSELine(ctx context.Context, line string, rc *domain.R if rc.TaskID == "" { rc.TaskID = resp.ID } - rc.InputTokens = int64(resp.Usage.PromptTokens) - rc.OutputTokens += int64(resp.Usage.CompletionTokens) + if input := resp.Usage.PromptTokens; input > 0 { + rc.InputTokens = int64(input) + } + if output := resp.Usage.CompletionTokens; output > 0 { + rc.OutputTokens = int64(output) + } if len(resp.Choices) > 0 { rc.Completion += resp.Choices[0].Text rc.CodeLines += int64(strings.Count(resp.Choices[0].Text, "\n")) @@ -345,36 +360,3 @@ func (r *Recorder) Read(p []byte) (n int, err error) { } return } - -func (r *Recorder) getPrompt(ctx context.Context, req *openai.ChatCompletionRequest) string { - prompt := "" - parse := promptparser.New(promptparser.KindTask) - for _, message := range req.Messages { - if message.Role == "system" { - continue - } - - if strings.Contains(message.Content, "") || - strings.Contains(message.Content, "") || - strings.Contains(message.Content, "") { - if info, err := parse.Parse(message.Content); err == nil { - prompt = info.Prompt - } else { - r.logger.With("message", message.Content).WarnContext(ctx, "解析Prompt失败", "error", err) - } - } - - for _, m := range message.MultiContent { - if strings.Contains(m.Text, "") || - strings.Contains(m.Text, "") || - strings.Contains(m.Text, "") { - if info, err := parse.Parse(m.Text); err == nil { - prompt = info.Prompt - } else { - r.logger.With("message", m.Text).WarnContext(ctx, "解析Prompt失败", "error", err) - } - } - } - } - return prompt -}