agent: embed GenerationParams in AgentConfig, remove GenParams()
Add JSON tags to backend.GenerationParams and embed it directly in AgentConfig. The 14 duplicated sampling fields and the field-by-field copy method disappear. Callers use cfg.GenerationParams directly.
This commit is contained in:
parent
5c81eefe0a
commit
5b11e8afcb
|
|
@ -30,32 +30,19 @@ func (p Prompt) MarshalJSON() ([]byte, error) {
|
|||
}
|
||||
|
||||
type AgentConfig struct {
|
||||
Prompt Prompt `json:"prompt,omitempty"`
|
||||
Backend string `json:"backend,omitempty"`
|
||||
Model string `json:"model,omitempty"`
|
||||
Tools *bool `json:"tools,omitempty"`
|
||||
AllowTools []string `json:"allowTools,omitempty"`
|
||||
AutoLoad []string `json:"autoLoad,omitempty"`
|
||||
MaxTokens int `json:"maxTokens,omitempty"`
|
||||
MaxCompletionTokens int `json:"maxCompletionTokens,omitempty"`
|
||||
Prompt Prompt `json:"prompt,omitempty"`
|
||||
Backend string `json:"backend,omitempty"`
|
||||
Model string `json:"model,omitempty"`
|
||||
Tools *bool `json:"tools,omitempty"`
|
||||
AllowTools []string `json:"allowTools,omitempty"`
|
||||
AutoLoad []string `json:"autoLoad,omitempty"`
|
||||
// MaxSteps caps the number of tool-call rounds per turn. 0 means unlimited.
|
||||
MaxSteps int `json:"maxSteps,omitempty"`
|
||||
Temperature *float64 `json:"temperature,omitempty"`
|
||||
TopP *float64 `json:"topP,omitempty"`
|
||||
TopK *int `json:"topK,omitempty"`
|
||||
MinP *float64 `json:"minP,omitempty"`
|
||||
TopA *float64 `json:"topA,omitempty"`
|
||||
FrequencyPenalty *float64 `json:"frequencyPenalty,omitempty"`
|
||||
PresencePenalty *float64 `json:"presencePenalty,omitempty"`
|
||||
RepetitionPenalty *float64 `json:"repetitionPenalty,omitempty"`
|
||||
Reasoning int `json:"reasoning,omitempty"`
|
||||
ReasoningEffort string `json:"reasoningEffort,omitempty"`
|
||||
IncludeReasoning *bool `json:"includeReasoning,omitempty"`
|
||||
ResponseFormat string `json:"responseFormat,omitempty"`
|
||||
Stop []string `json:"stop,omitempty"`
|
||||
CompactionModel string `json:"compactionModel,omitempty"`
|
||||
MaxSteps int `json:"maxSteps,omitempty"`
|
||||
CompactionModel string `json:"compactionModel,omitempty"`
|
||||
// SystemPrompt overrides the embedded system prompt with a file path.
|
||||
SystemPrompt string `json:"systemPrompt,omitempty"`
|
||||
|
||||
backend.GenerationParams
|
||||
}
|
||||
|
||||
// Load parses a Config from r.
|
||||
|
|
@ -72,24 +59,3 @@ func Load(r io.Reader) (*AgentConfig, error) {
|
|||
func (c *AgentConfig) ToolsEnabled() bool {
|
||||
return c.Tools == nil || *c.Tools
|
||||
}
|
||||
|
||||
// GenParams returns the generation parameters derived from this config.
|
||||
func (c *AgentConfig) GenParams() backend.GenerationParams {
|
||||
return backend.GenerationParams{
|
||||
MaxTokens: c.MaxTokens,
|
||||
MaxCompletionTokens: c.MaxCompletionTokens,
|
||||
Temperature: c.Temperature,
|
||||
TopP: c.TopP,
|
||||
TopK: c.TopK,
|
||||
MinP: c.MinP,
|
||||
TopA: c.TopA,
|
||||
FrequencyPenalty: c.FrequencyPenalty,
|
||||
PresencePenalty: c.PresencePenalty,
|
||||
RepetitionPenalty: c.RepetitionPenalty,
|
||||
ThinkingBudget: c.Reasoning,
|
||||
ReasoningEffort: c.ReasoningEffort,
|
||||
IncludeReasoning: c.IncludeReasoning,
|
||||
ResponseFormat: c.ResponseFormat,
|
||||
Stop: c.Stop,
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -172,7 +172,7 @@ func BuildRuntime(cfg *AgentConfig, srv *toolsrv.Conn, cwd string, env []string,
|
|||
} else {
|
||||
agentPrompt = resolved
|
||||
}
|
||||
genParams = cfg.GenParams()
|
||||
genParams = cfg.GenerationParams
|
||||
maxSteps = cfg.MaxSteps
|
||||
if len(cfg.AllowTools) > 0 && srv != nil {
|
||||
srv.SetAllowTools(cfg.AllowTools)
|
||||
|
|
|
|||
|
|
@ -123,21 +123,21 @@ func (e *ToolUnsupportedError) Error() string { return e.Message }
|
|||
// GenerationParams controls sampling behaviour for a single ChatStream call.
|
||||
// Zero values mean "use the API default".
|
||||
type GenerationParams struct {
|
||||
MaxTokens int // 0 = no limit
|
||||
MaxCompletionTokens int // OpenAI o-series; 0 = use MaxTokens
|
||||
Temperature *float64 // nil = API default
|
||||
TopP *float64 // nil = API default
|
||||
TopK *int // nil = API default (Anthropic, Ollama)
|
||||
MinP *float64 // nil = API default (Ollama)
|
||||
TopA *float64 // nil = API default (Ollama)
|
||||
FrequencyPenalty *float64 // nil = API default
|
||||
PresencePenalty *float64 // nil = API default
|
||||
RepetitionPenalty *float64 // nil = API default (Ollama)
|
||||
ThinkingBudget int // Anthropic extended thinking token budget; 0 = disabled
|
||||
ReasoningEffort string // OpenAI o-series: "low", "medium", "high"
|
||||
IncludeReasoning *bool // include reasoning in response (OpenRouter)
|
||||
ResponseFormat string // "json_object", "text", etc.
|
||||
Stop []string // stop sequences
|
||||
MaxTokens int `json:"maxTokens,omitempty"`
|
||||
MaxCompletionTokens int `json:"maxCompletionTokens,omitempty"`
|
||||
Temperature *float64 `json:"temperature,omitempty"`
|
||||
TopP *float64 `json:"topP,omitempty"`
|
||||
TopK *int `json:"topK,omitempty"`
|
||||
MinP *float64 `json:"minP,omitempty"`
|
||||
TopA *float64 `json:"topA,omitempty"`
|
||||
FrequencyPenalty *float64 `json:"frequencyPenalty,omitempty"`
|
||||
PresencePenalty *float64 `json:"presencePenalty,omitempty"`
|
||||
RepetitionPenalty *float64 `json:"repetitionPenalty,omitempty"`
|
||||
ThinkingBudget int `json:"reasoning,omitempty"`
|
||||
ReasoningEffort string `json:"reasoningEffort,omitempty"`
|
||||
IncludeReasoning *bool `json:"includeReasoning,omitempty"`
|
||||
ResponseFormat string `json:"responseFormat,omitempty"`
|
||||
Stop []string `json:"stop,omitempty"`
|
||||
}
|
||||
|
||||
// Backend is the interface all LLM providers must implement.
|
||||
|
|
|
|||
Loading…
Reference in New Issue