feat: add agent options to model config (#6383)

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
This commit is contained in:
Ettore Di Giacinto
2025-10-05 21:54:04 +02:00
committed by GitHub
parent 698205a2f3
commit 85e27ec74c
3 changed files with 74 additions and 10 deletions

View File

@@ -74,7 +74,8 @@ type ModelConfig struct {
Options []string `yaml:"options" json:"options"`
Overrides []string `yaml:"overrides" json:"overrides"`
MCP MCPConfig `yaml:"mcp" json:"mcp"`
MCP MCPConfig `yaml:"mcp" json:"mcp"`
Agent AgentConfig `yaml:"agent" json:"agent"`
}
type MCPConfig struct {
@@ -82,6 +83,13 @@ type MCPConfig struct {
Stdio string `yaml:"stdio" json:"stdio"`
}
type AgentConfig struct {
MaxAttempts int `yaml:"max_attempts" json:"max_attempts"`
MaxIterations int `yaml:"max_iterations" json:"max_iterations"`
EnableReasoning bool `yaml:"enable_reasoning" json:"enable_reasoning"`
EnableReEvaluation bool `yaml:"enable_re_evaluation" json:"enable_re_evaluation"`
}
func (c *MCPConfig) MCPConfigFromYAML() (MCPGenericConfig[MCPRemoteServers], MCPGenericConfig[MCPSTDIOServers]) {
var remote MCPGenericConfig[MCPRemoteServers]
var stdio MCPGenericConfig[MCPSTDIOServers]

View File

@@ -95,19 +95,35 @@ func MCPCompletionEndpoint(cl *config.ModelConfigLoader, ml *model.ModelLoader,
// we satisfy to just call internally ComputeChoices
defaultLLM := cogito.NewOpenAILLM(config.Name, apiKey, "http://127.0.0.1:"+port)
f, err := cogito.ExecuteTools(
defaultLLM, fragment,
cogitoOpts := []cogito.Option{
cogito.WithStatusCallback(func(s string) {
log.Debug().Msgf("[model agent] [model: %s] Status: %s", config.Name, s)
}),
cogito.WithContext(ctx),
// TODO: move these to configs
cogito.EnableToolReEvaluator,
cogito.WithIterations(3),
cogito.WithMaxAttempts(3),
cogito.WithTools(
cogitoTools...,
),
cogito.WithTools(cogitoTools...),
cogito.WithIterations(3), // default to 3 iterations
cogito.WithMaxAttempts(3), // default to 3 attempts
}
if config.Agent.EnableReasoning {
cogitoOpts = append(cogitoOpts, cogito.EnableToolReasoner)
}
if config.Agent.EnableReEvaluation {
cogitoOpts = append(cogitoOpts, cogito.EnableToolReEvaluator)
}
if config.Agent.MaxIterations != 0 {
cogitoOpts = append(cogitoOpts, cogito.WithIterations(config.Agent.MaxIterations))
}
if config.Agent.MaxAttempts != 0 {
cogitoOpts = append(cogitoOpts, cogito.WithMaxAttempts(config.Agent.MaxAttempts))
}
f, err := cogito.ExecuteTools(
defaultLLM, fragment,
cogitoOpts...,
)
if err != nil && !errors.Is(err, cogito.ErrNoToolSelected) {
return err

View File

@@ -27,6 +27,8 @@ The Model Context Protocol is a standard for connecting AI models to external to
- **⚡ Cached Connections**: Efficient tool caching for better performance
- **🔒 Secure Authentication**: Support for bearer token authentication
- **🎯 OpenAI Compatible**: Uses the familiar `/mcp/v1/chat/completions` endpoint
- **🧠 Advanced Reasoning**: Configurable reasoning and re-evaluation capabilities
- **⚙️ Flexible Agent Control**: Customizable execution limits and retry behavior
## Configuration
@@ -73,6 +75,13 @@ mcp:
}
}
}
# Agent Configuration
agent:
max_attempts: 3 # Maximum number of tool execution attempts
max_iterations: 3 # Maximum number of reasoning iterations
enable_reasoning: true # Enable tool reasoning capabilities
enable_re_evaluation: false # Enable tool re-evaluation
```
### Configuration Options
@@ -90,6 +99,14 @@ Configure local command-based MCP servers:
- **`args`**: Array of command-line arguments
- **`env`**: Environment variables (optional)
#### Agent Configuration (`agent`)
Configure agent behavior and tool execution:
- **`max_attempts`**: Maximum number of tool execution attempts (default: 3)
- **`max_iterations`**: Maximum number of reasoning iterations (default: 3)
- **`enable_reasoning`**: Enable tool reasoning capabilities (default: false)
- **`enable_re_evaluation`**: Enable tool re-evaluation (default: false)
## Usage
### API Endpoint
@@ -148,8 +165,31 @@ mcp:
}
}
}
agent:
max_attempts: 5
max_iterations: 5
enable_reasoning: true
enable_re_evaluation: true
```
## Agent Configuration Details
The `agent` section controls how the AI model interacts with MCP tools:
### Execution Control
- **`max_attempts`**: Limits how many times a tool can be retried if it fails. Higher values provide more resilience but may increase response time.
- **`max_iterations`**: Controls the maximum number of reasoning cycles the agent can perform. More iterations allow for complex multi-step problem solving.
### Reasoning Capabilities
- **`enable_reasoning`**: When enabled, the agent uses advanced reasoning to better understand tool results and plan next steps.
- **`enable_re_evaluation`**: When enabled, the agent can re-evaluate previous tool results and decisions, allowing for self-correction and improved accuracy.
### Recommended Settings
- **Simple tasks**: `max_attempts: 2`, `max_iterations: 2`, `enable_reasoning: false`
- **Complex tasks**: `max_attempts: 5`, `max_iterations: 5`, `enable_reasoning: true`, `enable_re_evaluation: true`
- **Development/Debugging**: `max_attempts: 1`, `max_iterations: 1`, `enable_reasoning: true`, `enable_re_evaluation: true`
## How It Works
1. **Tool Discovery**: LocalAI connects to configured MCP servers and discovers available tools