diff --git a/pkg/agent/instance.go b/pkg/agent/instance.go index 54a5396e7..a992945fa 100644 --- a/pkg/agent/instance.go +++ b/pkg/agent/instance.go @@ -21,6 +21,8 @@ type AgentInstance struct { Fallbacks []string Workspace string MaxIterations int + MaxTokens int + Temperature float64 ContextWindow int Provider providers.LLMProvider Sessions *session.SessionManager @@ -76,6 +78,11 @@ func NewAgentInstance( maxIter = 20 } + maxTokens := defaults.MaxTokens + if maxTokens == 0 { + maxTokens = 8192 + } + // Resolve fallback candidates modelCfg := providers.ModelConfig{ Primary: model, @@ -90,7 +97,9 @@ func NewAgentInstance( Fallbacks: fallbacks, Workspace: workspace, MaxIterations: maxIter, - ContextWindow: defaults.MaxTokens, + MaxTokens: maxTokens, + Temperature: defaults.Temperature, + ContextWindow: maxTokens, Provider: provider, Sessions: sessionsManager, ContextBuilder: contextBuilder, diff --git a/pkg/agent/instance_test.go b/pkg/agent/instance_test.go new file mode 100644 index 000000000..2500d1d88 --- /dev/null +++ b/pkg/agent/instance_test.go @@ -0,0 +1,38 @@ +package agent + +import ( + "os" + "testing" + + "github.com/sipeed/picoclaw/pkg/config" +) + +func TestNewAgentInstance_UsesDefaultsTemperatureAndMaxTokens(t *testing.T) { + tmpDir, err := os.MkdirTemp("", "agent-instance-test-*") + if err != nil { + t.Fatalf("Failed to create temp dir: %v", err) + } + defer os.RemoveAll(tmpDir) + + cfg := &config.Config{ + Agents: config.AgentsConfig{ + Defaults: config.AgentDefaults{ + Workspace: tmpDir, + Model: "test-model", + MaxTokens: 1234, + Temperature: 1.0, + MaxToolIterations: 5, + }, + }, + } + + provider := &mockProvider{} + agent := NewAgentInstance(nil, &cfg.Agents.Defaults, cfg, provider) + + if agent.MaxTokens != 1234 { + t.Fatalf("MaxTokens = %d, want %d", agent.MaxTokens, 1234) + } + if agent.Temperature != 1.0 { + t.Fatalf("Temperature = %f, want %f", agent.Temperature, 1.0) + } +} diff --git a/pkg/agent/loop.go b/pkg/agent/loop.go index 6d0a61375..593442ac5 100644 --- a/pkg/agent/loop.go +++ b/pkg/agent/loop.go @@ -470,8 +470,8 @@ func (al *AgentLoop) runLLMIteration(ctx context.Context, agent *AgentInstance, "model": agent.Model, "messages_count": len(messages), "tools_count": len(providerToolDefs), - "max_tokens": 8192, - "temperature": 0.7, + "max_tokens": agent.MaxTokens, + "temperature": agent.Temperature, "system_prompt_len": len(messages[0].Content), }) @@ -492,8 +492,8 @@ func (al *AgentLoop) runLLMIteration(ctx context.Context, agent *AgentInstance, fbResult, fbErr := al.fallback.Execute(ctx, agent.Candidates, func(ctx context.Context, provider, model string) (*providers.LLMResponse, error) { return agent.Provider.Chat(ctx, messages, providerToolDefs, model, map[string]interface{}{ - "max_tokens": 8192, - "temperature": 0.7, + "max_tokens": agent.MaxTokens, + "temperature": agent.Temperature, }) }, ) @@ -508,8 +508,8 @@ func (al *AgentLoop) runLLMIteration(ctx context.Context, agent *AgentInstance, return fbResult.Response, nil } return agent.Provider.Chat(ctx, messages, providerToolDefs, agent.Model, map[string]interface{}{ - "max_tokens": 8192, - "temperature": 0.7, + "max_tokens": agent.MaxTokens, + "temperature": agent.Temperature, }) }