X-Git-Url: https://git.giacomolli.uk/onechat/blobdiff_plain/4343ca5fb6cc86eb887951f4fe16063bab29a238..80e348724041a694002fc38f57e8868b9b9a2be9:/prompt.go diff --git a/prompt.go b/prompt.go index df6f17d..29e58ee 100644 --- a/prompt.go +++ b/prompt.go @@ -34,9 +34,6 @@ const ( promptInstructionsHeading = "\n\n# The user's instructions\n\n" ) -// promptEfforts are the reasoning efforts that spawn can give a subagent. -var promptEfforts = []string{"low", "medium", "high", "xhigh"} - // promptText is the system prompt of the reference, nearly word for word, with // one added paragraph on the user's instructions file. The reference names its // own agent, so promptText has the name of the agent and the kind reply in its @@ -154,7 +151,9 @@ Pass area messages from mixed chats to the right child with sender, date, and words. Never send a WhatsApp reply drafted by a child without the user's agreement. Propose routing a source that talks only about one area to its child. -Set or remove a route only after the user agrees.` +Set or remove a route only after the user agrees. +Use image_show or whatsapp_send with an image only on the user's request. +Pass an image to a child with an [image FILE] line in tell.` // promptSubagentText is the system prompt of a subagent, from the subagent // prompt of the reference design: its head, then the doc of the view, without @@ -195,6 +194,9 @@ date(id) gives the date and time of message id. zoom("Name") gives an agent's whole chat. An [image FILE] line names a stored image. Use zoom(id, 1) 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 @@ -274,6 +276,15 @@ func promptTools() []ModelTool { "message": promptStringSchema("The message."), }), Strict: true, + }, ModelTool{ + Type: "function", + Name: "image_show", + Description: "Show a stored image to the user, only when the user asks to see it. Give its stored filename, not a path.", + Parameters: promptObjectSchema(map[string]any{ + "image": promptStringSchema("The stored image filename from an [image FILE] line."), + "caption": promptStringSchema("The caption, or an empty string."), + }), + Strict: true, }, ModelTool{ Type: "function", Name: "whatsapp_find", @@ -285,11 +296,12 @@ func promptTools() []ModelTool { }, ModelTool{ Type: "function", Name: "whatsapp_send", - Description: "Send a text message to a WhatsApp chat. Send only a message that the user asked you to send, to the chat that the user named. Give a new id for each message: a call with an id that was used gives the answer of the first call and sends nothing.", + Description: "Send text or a stored image with text as its caption to a WhatsApp chat. Send only a message that the user asked you to send, to the chat that the user named. Give a new id for each message: a call with an id that was used gives the answer of the first call and sends nothing.", Parameters: promptObjectSchema(map[string]any{ - "id": promptStringSchema("A new id for this message, such as a short random word."), - "chat": promptStringSchema("The ID of the chat, from whatsapp_find or from a [WhatsApp] message."), - "text": promptStringSchema("The text of the message."), + "id": promptStringSchema("A new id for this message, such as a short random word."), + "chat": promptStringSchema("The ID of the chat, from whatsapp_find or from a [WhatsApp] message."), + "text": promptStringSchema("The text, or the caption when sending an image. Can be empty with an image."), + "image": promptNullableStringSchema("The stored image filename from an [image FILE] line, or null for text only."), }), Strict: true, }, ModelTool{