X-Git-Url: https://git.giacomolli.uk/onechat/blobdiff_plain/ddd0a50f7b801112376d7fb27bfd05d2fc26c2fd..d7a967f43fae27bcabc6072da3b5a2f923d47764:/prompt.go?ds=inline diff --git a/prompt.go b/prompt.go index 8bd9691..465029c 100644 --- a/prompt.go +++ b/prompt.go @@ -185,8 +185,9 @@ func promptSubagent(name, instructions string) string { } // promptTools returns the function tools of every call of the agent: the tools -// of promptSubagentTools, then spawn. A compaction sends them too and never -// calls them, because a change of the tools ends the shared prompt cache. +// of promptSubagentTools, then spawn, tell, the WhatsApp tools, and the +// schedule tools. A compaction sends them too and never calls them, because a +// change of the tools ends the shared prompt cache. func promptTools() []ModelTool { return append(promptSubagentTools(), ModelTool{ Type: "function", @@ -205,6 +206,57 @@ func promptTools() []ModelTool { }, }), Strict: true, + }, ModelTool{ + Type: "function", + Name: "tell", + Description: `Send a message to a subagent, by name. One at work reads it between its tool calls, and its report answers it; a finished one goes on from its chat, and its reply reaches you as a message "[Name] reply".`, + Parameters: promptObjectSchema(map[string]any{ + "name": promptStringSchema("The name of the subagent."), + "message": promptStringSchema("The message."), + }), + Strict: true, + }, ModelTool{ + Type: "function", + Name: "whatsapp_find", + Description: "Find the WhatsApp contacts and groups of the user whose name contains the text, with no regard to case and accents. Gives up to 20 matches, each as ID | name | contact or group. Give the ID to whatsapp_send.", + Parameters: promptObjectSchema(map[string]any{ + "name": promptStringSchema("A part of the name of the contact or the group."), + }), + Strict: true, + }, 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.", + 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."), + }), + Strict: true, + }, ModelTool{ + Type: "function", + Name: "schedule_set", + Description: `Set a reminder or a timed task, only when the user asks for one. At its time, the text reaches you as a message "[Schedule ID]" that starts a turn, and you do the task then. Give at for one time, or cron for a repeating schedule, and null for the other. Turn a time such as "tomorrow at 9" into a local time from the Now line.`, + Parameters: promptObjectSchema(map[string]any{ + "text": promptStringSchema(`The task for you at that time, as an order to yourself, with all you need to know, such as "Remind the user to drink water."`), + "at": promptNullableStringSchema("A local time YYYY-MM-DD HH:MM after now, or null."), + "cron": promptNullableStringSchema(`A cron expression of five fields, minute hour day-of-month month day-of-week, with *, lists, ranges, and steps, such as "0 8 * * 1-5", or null. Its runs must be at least 5 minutes apart.`), + }), + Strict: true, + }, ModelTool{ + Type: "function", + Name: "schedule_list", + Description: "List the schedules by their next time, each as ID | next time | cron expression or once | text.", + Parameters: promptObjectSchema(map[string]any{}), + Strict: true, + }, ModelTool{ + Type: "function", + Name: "schedule_remove", + Description: "Remove a schedule by its ID, when the user asks.", + Parameters: promptObjectSchema(map[string]any{ + "id": promptIntegerSchema("The ID of the schedule."), + }), + Strict: true, }) }