feat(planning): enable agent planning (#68)

* feat(planning): Allow the agent to plan subtasks

Signed-off-by: mudler <mudler@localai.io>

* feat(planning): enable planning toggle in the webui

Signed-off-by: mudler <mudler@localai.io>

* feat(planning): take in consideration the overall goal

Signed-off-by: mudler <mudler@localai.io>

* Update core/action/plan.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Signed-off-by: mudler <mudler@localai.io>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
Ettore Di Giacinto
2025-03-21 12:28:11 +01:00
committed by GitHub
parent 638eedc2a0
commit 33483ab4b9
37 changed files with 259 additions and 35 deletions

View File

@@ -10,22 +10,31 @@ import (
// used by the LLM to schedule more actions
const PlanActionName = "plan"
func NewPlan() *PlanAction {
return &PlanAction{}
func NewPlan(plannableActions []string) *PlanAction {
return &PlanAction{
plannables: plannableActions,
}
}
type PlanAction struct{}
type PlanAction struct {
plannables []string
}
type PlanResult struct {
Subtasks []PlanSubtask `json:"subtasks"`
Goal string `json:"goal"`
}
type PlanSubtask struct {
Action string `json:"action"`
Reasoning string `json:"reasoning"`
}
func (a *PlanAction) Run(context.Context, ActionParams) (string, error) {
return "no-op", nil
func (a *PlanAction) Run(context.Context, ActionParams) (ActionResult, error) {
return ActionResult{}, nil
}
func (a *PlanAction) Plannable() bool {
return false
}
func (a *PlanAction) Definition() ActionDefinition {
@@ -40,6 +49,7 @@ func (a *PlanAction) Definition() ActionDefinition {
"action": {
Type: jsonschema.String,
Description: "The action to call",
Enum: a.plannables,
},
"reasoning": {
Type: jsonschema.String,
@@ -47,7 +57,11 @@ func (a *PlanAction) Definition() ActionDefinition {
},
},
},
"goal": {
Type: jsonschema.String,
Description: "The goal of this plan",
},
},
Required: []string{"subtasks"},
Required: []string{"subtasks", "goal"},
}
}