From 4c011abb9d258e84903dae1b6992c71a0ed385a8 Mon Sep 17 00:00:00 2001 From: temp Date: Tue, 25 Aug 2026 16:37:45 +0800 Subject: [PATCH] fix: bound summarization max tokens for claude models --- internal/multiagent/eino_summarize.go | 1 + internal/multiagent/eino_summarize_payload_test.go | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/internal/multiagent/eino_summarize.go b/internal/multiagent/eino_summarize.go index d7fa27d8..9e144ef6 100644 --- a/internal/multiagent/eino_summarize.go +++ b/internal/multiagent/eino_summarize.go @@ -301,6 +301,7 @@ func newEinoSummarizationModelOptions(outputReserve int, modelName, kind string, label = "eino " + kind + " summarization generate request" } return []model.Option{ + model.WithMaxTokens(outputReserve), einoopenai.WithMaxCompletionTokens(outputReserve), einoopenai.WithExtraHeader(map[string]string{ copenai.SummarizationRequestHeader: "1", diff --git a/internal/multiagent/eino_summarize_payload_test.go b/internal/multiagent/eino_summarize_payload_test.go index 0b075852..273df249 100644 --- a/internal/multiagent/eino_summarize_payload_test.go +++ b/internal/multiagent/eino_summarize_payload_test.go @@ -5,6 +5,8 @@ import ( "testing" "cyberstrike-ai/internal/config" + + "github.com/cloudwego/eino/components/model" ) func TestStripReasoningFromSummarizationPayload(t *testing.T) { @@ -68,3 +70,15 @@ func TestStripReasoningFromSummarizationPayloadHonorsOpenAICompatProfile(t *test t.Fatalf("expected OpenAI-compatible profile to strip reasoning fields, got %s", s) } } + +func TestEinoSummarizationModelOptionsSetCommonMaxTokens(t *testing.T) { + const outputReserve = 4096 + opts := newEinoSummarizationModelOptions(outputReserve, "minimax-m3", "agentic", nil, nil) + common := model.GetCommonOptions(nil, opts...) + if common == nil || common.MaxTokens == nil { + t.Fatal("expected summarization options to set common max_tokens") + } + if *common.MaxTokens != outputReserve { + t.Fatalf("max_tokens = %d, want %d", *common.MaxTokens, outputReserve) + } +}