fix: use MaxTokens not ModelContextLength for output limit

This commit is contained in:
Henri Cook
2026-01-08 19:23:21 +00:00
parent 6f103b2db2
commit 8017f376b1
3 changed files with 16 additions and 20 deletions

View File

@@ -214,10 +214,14 @@ func parseThinkingConfig(level domain.ThinkingLevel) (*genai.ThinkingConfig, boo
func (o *Client) buildGenerateContentConfig(opts *domain.ChatOptions) (*genai.GenerateContentConfig, error) {
temperature := float32(opts.Temperature)
topP := float32(opts.TopP)
var maxTokens int32
if opts.MaxTokens > 0 {
maxTokens = int32(opts.MaxTokens)
}
cfg := &genai.GenerateContentConfig{
Temperature: &temperature,
TopP: &topP,
MaxOutputTokens: int32(opts.ModelContextLength),
MaxOutputTokens: maxTokens,
}
if opts.Search {

View File

@@ -127,14 +127,11 @@ func (c *Client) Send(ctx context.Context, msgs []*chat.ChatCompletionMessage, o
return c.sendClaude(ctx, msgs, opts)
}
// getMaxTokens returns the max tokens to use for a request
// getMaxTokens returns the max output tokens to use for a request
func getMaxTokens(opts *domain.ChatOptions) int64 {
if opts.MaxTokens > 0 {
return int64(opts.MaxTokens)
}
if opts.ModelContextLength > 0 {
return int64(opts.ModelContextLength)
}
return int64(defaultMaxTokens)
}

View File

@@ -310,24 +310,19 @@ func TestGetMaxTokens(t *testing.T) {
expected int64
}{
{
name: "MaxTokens takes priority",
opts: &domain.ChatOptions{MaxTokens: 8192, ModelContextLength: 4096},
name: "MaxTokens specified",
opts: &domain.ChatOptions{MaxTokens: 8192},
expected: 8192,
},
{
name: "ModelContextLength used when MaxTokens is 0",
opts: &domain.ChatOptions{MaxTokens: 0, ModelContextLength: 16384},
expected: 16384,
},
{
name: "Default used when both are 0",
opts: &domain.ChatOptions{MaxTokens: 0, ModelContextLength: 0},
name: "Default when MaxTokens is 0",
opts: &domain.ChatOptions{MaxTokens: 0},
expected: int64(defaultMaxTokens),
},
{
name: "MaxTokens negative treated as 0",
opts: &domain.ChatOptions{MaxTokens: -1, ModelContextLength: 2048},
expected: 2048,
name: "Default when MaxTokens is negative",
opts: &domain.ChatOptions{MaxTokens: -1},
expected: int64(defaultMaxTokens),
},
}
@@ -406,9 +401,9 @@ func TestBuildGeminiConfig(t *testing.T) {
t.Run("basic config with temperature and TopP", func(t *testing.T) {
opts := &domain.ChatOptions{
Temperature: 0.7,
TopP: 0.9,
ModelContextLength: 8192,
Temperature: 0.7,
TopP: 0.9,
MaxTokens: 8192,
}
config := client.buildGeminiConfig(opts)