Skip to content

Commit 06ee821

Browse files
repfigitclaude
authored andcommitted
fix(agent): decouple context_window from max_tokens
Add configurable context_window field to AgentDefaults with a 128K default. Previously ContextWindow was incorrectly set to MaxTokens (typically 8192), causing overly aggressive context trimming. Co-Authored-By: Claude Opus 4.6 <[email protected]>
1 parent 902c701 commit 06ee821

3 files changed

Lines changed: 60 additions & 1 deletion

File tree

pkg/agent/instance.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,11 @@ func NewAgentInstance(
8383
maxTokens = 8192
8484
}
8585

86+
contextWindow := defaults.ContextWindow
87+
if contextWindow == 0 {
88+
contextWindow = 128000
89+
}
90+
8691
temperature := 0.7
8792
if defaults.Temperature != nil {
8893
temperature = *defaults.Temperature
@@ -104,7 +109,7 @@ func NewAgentInstance(
104109
MaxIterations: maxIter,
105110
MaxTokens: maxTokens,
106111
Temperature: temperature,
107-
ContextWindow: maxTokens,
112+
ContextWindow: contextWindow,
108113
Provider: provider,
109114
Sessions: sessionsManager,
110115
ContextBuilder: contextBuilder,

pkg/agent/instance_test.go

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,3 +93,56 @@ func TestNewAgentInstance_DefaultsTemperatureWhenUnset(t *testing.T) {
9393
t.Fatalf("Temperature = %f, want %f", agent.Temperature, 0.7)
9494
}
9595
}
96+
97+
func TestNewAgentInstance_UsesConfiguredContextWindow(t *testing.T) {
98+
tmpDir, err := os.MkdirTemp("", "agent-instance-test-*")
99+
if err != nil {
100+
t.Fatalf("Failed to create temp dir: %v", err)
101+
}
102+
defer os.RemoveAll(tmpDir)
103+
104+
cfg := &config.Config{
105+
Agents: config.AgentsConfig{
106+
Defaults: config.AgentDefaults{
107+
Workspace: tmpDir,
108+
Model: "test-model",
109+
MaxTokens: 1234,
110+
MaxToolIterations: 5,
111+
ContextWindow: 64000,
112+
},
113+
},
114+
}
115+
116+
provider := &mockProvider{}
117+
agent := NewAgentInstance(nil, &cfg.Agents.Defaults, cfg, provider)
118+
119+
if agent.ContextWindow != 64000 {
120+
t.Fatalf("ContextWindow = %d, want %d", agent.ContextWindow, 64000)
121+
}
122+
}
123+
124+
func TestNewAgentInstance_DefaultsContextWindowWhenZero(t *testing.T) {
125+
tmpDir, err := os.MkdirTemp("", "agent-instance-test-*")
126+
if err != nil {
127+
t.Fatalf("Failed to create temp dir: %v", err)
128+
}
129+
defer os.RemoveAll(tmpDir)
130+
131+
cfg := &config.Config{
132+
Agents: config.AgentsConfig{
133+
Defaults: config.AgentDefaults{
134+
Workspace: tmpDir,
135+
Model: "test-model",
136+
MaxTokens: 1234,
137+
MaxToolIterations: 5,
138+
},
139+
},
140+
}
141+
142+
provider := &mockProvider{}
143+
agent := NewAgentInstance(nil, &cfg.Agents.Defaults, cfg, provider)
144+
145+
if agent.ContextWindow != 128000 {
146+
t.Fatalf("ContextWindow = %d, want %d", agent.ContextWindow, 128000)
147+
}
148+
}

pkg/config/config.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ type AgentDefaults struct {
175175
ImageModel string `json:"image_model,omitempty" env:"PICOCLAW_AGENTS_DEFAULTS_IMAGE_MODEL"`
176176
ImageModelFallbacks []string `json:"image_model_fallbacks,omitempty"`
177177
MaxTokens int `json:"max_tokens" env:"PICOCLAW_AGENTS_DEFAULTS_MAX_TOKENS"`
178+
ContextWindow int `json:"context_window" env:"PICOCLAW_AGENTS_DEFAULTS_CONTEXT_WINDOW"`
178179
Temperature *float64 `json:"temperature,omitempty" env:"PICOCLAW_AGENTS_DEFAULTS_TEMPERATURE"`
179180
MaxToolIterations int `json:"max_tool_iterations" env:"PICOCLAW_AGENTS_DEFAULTS_MAX_TOOL_ITERATIONS"`
180181
}

0 commit comments

Comments
 (0)