X-Git-Url: https://git.giacomolli.uk/onechat/blobdiff_plain/496569ab5b179932c60b2924bf4c61176c8be004..b961d7cdc59213673c3e4f86d3dae99daf0a1935:/prompt.go?ds=inline diff --git a/prompt.go b/prompt.go index 896038b..31f57cb 100644 --- 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"} -// 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 { @@ -229,6 +216,33 @@ can ask the user before sending.`, 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 { @@ -421,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 { @@ -464,10 +464,10 @@ func promptEffortEnum() []any { 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{ - "type": "integer", + "type": "string", "description": description, } } @@ -480,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{ - "type": "string", + "type": "integer", "description": description, } }