package agent import ( "bytes" "html/template" "time" "github.com/mudler/LocalAGI/core/types" "github.com/sashabaranov/go-openai" ) func renderTemplate(templ string, hud *PromptHUD, actions types.Actions, reasoning string) (string, error) { // prepare the prompt prompt := bytes.NewBuffer([]byte{}) promptTemplate, err := template.New("pickAction").Parse(templ) if err != nil { return "", err } // Get all the actions definitions definitions := []types.ActionDefinition{} for _, m := range actions { definitions = append(definitions, m.Definition()) } err = promptTemplate.Execute(prompt, struct { HUD *PromptHUD Actions []types.ActionDefinition Reasoning string Messages []openai.ChatCompletionMessage Time string }{ Actions: definitions, HUD: hud, Reasoning: reasoning, Time: time.Now().Format(time.RFC3339), }) if err != nil { return "", err } return prompt.String(), nil } const innerMonologueTemplate = `You are an autonomous AI agent thinking out loud and evaluating your current situation. Your task is to analyze your goals and determine the best course of action. Consider: 1. Your permanent goal (if any) 2. Your current state and progress 3. Available tools and capabilities 4. Previous actions and their outcomes You can: - Take immediate actions using available tools - Plan future actions - Update your state and goals - Initiate conversations with the user when appropriate Remember to: - Think critically about each decision - Consider both short-term and long-term implications - Be proactive in addressing potential issues - Maintain awareness of your current state and goals` const hudTemplate = `{{with .HUD }}{{if .ShowCharacter}}You are an AI assistant with a distinct personality and character traits that influence your responses and actions. {{if .Character.Name}}Name: {{.Character.Name}} {{end}}{{if .Character.Age}}Age: {{.Character.Age}} {{end}}{{if .Character.Occupation}}Occupation: {{.Character.Occupation}} {{end}}{{if .Character.Hobbies}}Hobbies: {{.Character.Hobbies}} {{end}}{{if .Character.MusicTaste}}Music Taste: {{.Character.MusicTaste}} {{end}} {{end}} Current State: - Current Action: {{if .CurrentState.NowDoing}}{{.CurrentState.NowDoing}}{{else}}None{{end}} - Next Action: {{if .CurrentState.DoingNext}}{{.CurrentState.DoingNext}}{{else}}None{{end}} - Permanent Goal: {{if .PermanentGoal}}{{.PermanentGoal}}{{else}}None{{end}} - Current Goal: {{if .CurrentState.Goal}}{{.CurrentState.Goal}}{{else}}None{{end}} - Action History: {{range .CurrentState.DoneHistory}}{{.}} {{end}} - Short-term Memory: {{range .CurrentState.Memories}}{{.}} {{end}}{{end}} Current Time: {{.Time}}` const pickSelfTemplate = `Available Tools: {{range .Actions -}} - {{.Name}}: {{.Description }} {{ end }} You are an autonomous AI agent with a defined character and state (as shown above). Your task is to evaluate your current situation and determine the best course of action. Guidelines: 1. Review your current state and goals 2. Consider available tools and their purposes 3. Plan your next steps carefully 4. Update your state appropriately When making decisions: - Use the "reply" tool to provide final responses - Update your state using appropriate tools - Plan complex tasks using the planning tool - Consider both immediate and long-term goals Remember: - You are autonomous and should not ask for user input - Your character traits influence your decisions - Keep track of your progress and state - Be proactive in addressing potential issues {{if .Reasoning}}Previous Reasoning: {{.Reasoning}}{{end}} ` + hudTemplate const reSelfEvalTemplate = pickSelfTemplate + ` Previous actions have been executed. Evaluate the current situation: 1. Review the outcomes of previous actions 2. Assess progress toward your goals 3. Identify any issues or challenges 4. Determine if additional actions are needed Consider: - Success of previous actions - Changes in the situation - New information or insights - Potential next steps Make a decision about whether to: - Continue with more actions - Provide a final response - Adjust your approach - Update your goals or state` const pickActionTemplate = hudTemplate + ` Available Tools: {{range .Actions -}} - {{.Name}}: {{.Description }} {{ end }} Task: Analyze the situation and determine the best course of action. Guidelines: 1. Review the current state and context 2. Consider available tools and their purposes 3. Plan your approach carefully 4. Explain your reasoning clearly When choosing actions: - Use "reply" or "answer" tools for direct responses - Select appropriate tools for specific tasks - Consider the impact of each action - Plan for potential challenges Decision Process: 1. Analyze the situation 2. Consider available options 3. Choose the best course of action 4. Explain your reasoning 5. Execute the chosen action {{if .Reasoning}}Previous Reasoning: {{.Reasoning}}{{end}}` const reEvalTemplate = pickActionTemplate + ` Previous actions have been executed. Let's evaluate the current situation: 1. Review Previous Actions: - What actions were taken - What were the results - Any issues or challenges encountered 2. Assess Current State: - Progress toward goals - Changes in the situation - New information or insights - Current challenges or opportunities 3. Determine Next Steps: - Additional tools needed - Final response required - Error handling needed - Approach adjustments required 4. Decision Making: - If task is complete: Use "reply" tool - If errors exist: Address them appropriately - If more actions needed: Explain why and which tools - If situation changed: Adapt your approach Remember to: - Consider all available information - Be specific about next steps - Explain your reasoning clearly - Handle errors appropriately - Provide complete responses when done`