]> git.giacomolli.uk - onechat/blobdiff - prompt.go
Sync agent queue replacements before success
[onechat] / prompt.go
index 29e58eef4f45070228965ff734b66e3406f62bda..31f57cb4083da7838526a05c83812feee01cd2cb 100644 (file)
--- a/prompt.go
+++ b/prompt.go
@@ -197,19 +197,6 @@ to see its pixels.`
 // promptEfforts are the reasoning efforts that spawn can give a subagent.
 var promptEfforts = []string{"low", "medium", "high", "xhigh"}
 
 // promptEfforts are the reasoning efforts that spawn can give a subagent.
 var promptEfforts = []string{"low", "medium", "high", "xhigh"}
 
-// prompt returns the system prompt of the reference with one added paragraph on
-// the user's instructions file at instructionsPath. It uses the agent name and
-// ends with the user's instructions. Without instructions it has neither them
-// nor the clause that points to them, but keeps the file paragraph. Turns and
-// compactions send the same prompt and tools, so compactions read the prompt
-// cache of the turns.
-func prompt(name, instructionsPath, instructions string) string {
-       text := strings.NewReplacer(promptName, name, promptInstructionsPath, instructionsPath).Replace(promptText)
-       text = strings.Replace(text, "\n\n# Compactions", promptChildrenText+"\n\n# Compactions", 1)
-
-       return promptWithInstructions(text, promptTaskSentence, promptInstructionsClause, instructions)
-}
-
 // promptChild returns the prompt of a child with its area and reporting rules.
 // Its instructions file belongs to the child, not to the parent.
 func promptChild(name, parent, responsibility, instructionsPath, instructions string) string {
 // promptChild returns the prompt of a child with its area and reporting rules.
 // Its instructions file belongs to the child, not to the parent.
 func promptChild(name, parent, responsibility, instructionsPath, instructions string) string {
@@ -223,11 +210,39 @@ message outside your area. Your final reply is your report to the parent.
 End your turn with an empty reply when nothing needs the parent or the user.
 Send nothing to WhatsApp. Draft replies in your report instead, so the parent
 can ask the user before sending.`, 1)
 End your turn with an empty reply when nothing needs the parent or the user.
 Send nothing to WhatsApp. Draft replies in your report instead, so the parent
 can ask the user before sending.`, 1)
+
        text = strings.Replace(text, promptChildrenText, "", 1)
 
        return promptWithInstructions(text, "Do the tasks of your area yourself, with your tools.", promptInstructionsClause, instructions)
 }
 
        text = strings.Replace(text, promptChildrenText, "", 1)
 
        return promptWithInstructions(text, "Do the tasks of your area yourself, with your tools.", promptInstructionsClause, instructions)
 }
 
+// prompt returns the system prompt of the reference with one added paragraph on
+// the user's instructions file at instructionsPath. It uses the agent name and
+// ends with the user's instructions. Without instructions it has neither them
+// nor the clause that points to them, but keeps the file paragraph. Turns and
+// compactions send the same prompt and tools, so compactions read the prompt
+// cache of the turns.
+func prompt(name, instructionsPath, instructions string) string {
+       text := strings.NewReplacer(promptName, name, promptInstructionsPath, instructionsPath).Replace(promptText)
+       text = strings.Replace(text, "\n\n# Compactions", promptChildrenText+"\n\n# Compactions", 1)
+
+       return promptWithInstructions(text, promptTaskSentence, promptInstructionsClause, instructions)
+}
+
+// promptWithInstructions returns text with the instructions of the user at its
+// end, after the heading. With instructions, sentence gets clause, which points
+// to them. Without instructions the prompt has neither them nor the clause.
+func promptWithInstructions(text, sentence, clause, instructions string) string {
+       instructions = strings.TrimSpace(instructions)
+       if instructions == "" {
+               return text
+       }
+
+       text = strings.Replace(text, sentence, strings.TrimSuffix(sentence, ".")+clause+".", 1)
+
+       return text + promptInstructionsHeading + instructions
+}
+
 // promptSubagent returns the system prompt of a subagent of the agent name,
 // with the instructions of the user at its end, as prompt does.
 func promptSubagent(name, instructions string) string {
 // promptSubagent returns the system prompt of a subagent of the agent name,
 // with the instructions of the user at its end, as prompt does.
 func promptSubagent(name, instructions string) string {
@@ -420,20 +435,6 @@ func promptSubagentTools() []ModelTool {
        }
 }
 
        }
 }
 
-// promptWithInstructions returns text with the instructions of the user at its
-// end, after the heading. With instructions, sentence gets clause, which points
-// to them. Without instructions the prompt has neither them nor the clause.
-func promptWithInstructions(text, sentence, clause, instructions string) string {
-       instructions = strings.TrimSpace(instructions)
-       if instructions == "" {
-               return text
-       }
-
-       text = strings.Replace(text, sentence, strings.TrimSuffix(sentence, ".")+clause+".", 1)
-
-       return text + promptInstructionsHeading + instructions
-}
-
 // promptObjectSchema returns a strict JSON schema of an object whose properties
 // are all required.
 func promptObjectSchema(properties map[string]any) map[string]any {
 // promptObjectSchema returns a strict JSON schema of an object whose properties
 // are all required.
 func promptObjectSchema(properties map[string]any) map[string]any {
@@ -452,8 +453,8 @@ func promptObjectSchema(properties map[string]any) map[string]any {
        }
 }
 
        }
 }
 
-// promptEffortEnum returns the values of the effort of spawn: promptEfforts
-// and null.
+// promptEffortEnum returns the values of the effort of spawn: promptEfforts and
+// null.
 func promptEffortEnum() []any {
        values := make([]any, 0, len(promptEfforts)+1)
        for _, effort := range promptEfforts {
 func promptEffortEnum() []any {
        values := make([]any, 0, len(promptEfforts)+1)
        for _, effort := range promptEfforts {
@@ -463,10 +464,10 @@ func promptEffortEnum() []any {
        return append(values, nil)
 }
 
        return append(values, nil)
 }
 
-// promptIntegerSchema returns the JSON schema of an integer.
-func promptIntegerSchema(description string) map[string]any {
+// promptStringSchema returns the JSON schema of a string.
+func promptStringSchema(description string) map[string]any {
        return map[string]any{
        return map[string]any{
-               "type":        "integer",
+               "type":        "string",
                "description": description,
        }
 }
                "description": description,
        }
 }
@@ -479,10 +480,10 @@ func promptNullableStringSchema(description string) map[string]any {
        }
 }
 
        }
 }
 
-// promptStringSchema returns the JSON schema of a string.
-func promptStringSchema(description string) map[string]any {
+// promptIntegerSchema returns the JSON schema of an integer.
+func promptIntegerSchema(description string) map[string]any {
        return map[string]any{
        return map[string]any{
-               "type":        "string",
+               "type":        "integer",
                "description": description,
        }
 }
                "description": description,
        }
 }