From df0c4ca85765027e84e11efb74735c55c8082107 Mon Sep 17 00:00:00 2001 From: despiegk Date: Thu, 23 Jan 2025 09:42:32 +0100 Subject: [PATCH] ai prompts --- aiprompts/ai_instruct/instruct.md | 93 ++++++++++++++++++++++++++++++ aiprompts/ai_instruct/instruct2.md | 58 +++++++++++++++++++ aiprompts/ai_instruct/twin.md | 72 +++++++++++++++++++++++ cli/compile.vsh | 3 +- 4 files changed, 224 insertions(+), 2 deletions(-) create mode 100644 aiprompts/ai_instruct/instruct.md create mode 100644 aiprompts/ai_instruct/instruct2.md create mode 100644 aiprompts/ai_instruct/twin.md diff --git a/aiprompts/ai_instruct/instruct.md b/aiprompts/ai_instruct/instruct.md new file mode 100644 index 00000000..91922e51 --- /dev/null +++ b/aiprompts/ai_instruct/instruct.md @@ -0,0 +1,93 @@ +We have our own instruction language called heroscript, below you will find details how to use it. + +## heroscript + + +Heroscript is our small scripting language which is used for communicating with our digital tools like calendar management. + +which has following structure + +```heroscript + +!!calendar.event_add + title: 'go to dentist' + start: '2025/03/01' + description: ' + a description can be multiline + + like this + ' + +!!calendar.event_delete + title: 'go to dentist' + +``` + +- the format is !!$actor.$action (there is no space before !!) +- every parameter comes on next line with spaces in front (4 spaces, always use 4 spaces, dont make variation) +- every actor.action starts with !! + - the first part is the actor e.g. calendar in this case + - the 2e part is the action name +- multilines are supported see the description field + +below you will find the instructions for different actors, comments how to use it are behind # which means not part of the the definition itself + +## remarks on parameters used + +- date + - format of the date is yyyy/mm/dd hh:mm:ss + - +1h means 1 hour later than now + - +1m means 1 min later than now + - +1d means 1 day later than now + - same for -1h, -1m, -1d +- money expressed as + - $val $cursymbol + - $cursymbol is 3 letters e.g. USD, capital +- lists are comma separated and '...' around + + +## generic instructions + +- do not add information if not specifically asked for + + +## circle + +every actor action happens in a circle, a user can ask to switch circles, command available is + +``` +!!circle.switch + name: 'project x' + +``` + +## calendar + +```heroscript + +!!calendar.event_add + title: 'go to dentist' + start: '2025/03/01' + end: '+1h' #if + notation used is later than the start + description: ' + a description can be multiline + + like this + ' + attendees: 'tim, rob' + +!!calendar.event_delete + title: 'go to dentist' + +``` + +## NOW DO ONE + +schedule event tomorrow 10 am, for 1h, with tim & rob, we want to product management threefold +now is friday jan 17 + +only give me the instructions needed, only return the heroscript no text around + +if not clear enough ask the user for more info + +if not sure do not invent, only give instructions as really asked for diff --git a/aiprompts/ai_instruct/instruct2.md b/aiprompts/ai_instruct/instruct2.md new file mode 100644 index 00000000..047a7d40 --- /dev/null +++ b/aiprompts/ai_instruct/instruct2.md @@ -0,0 +1,58 @@ + + +# how to manage my agenda + +## Metadata for function calling + +functions_metadata = [ + { + "name": "event_add", + "description": "Adds a calendar event.", + "parameters": { + "type": "object", + "properties": { + "title": {"type": "string", "description": "Title of the event."}, + "start": {"type": "string", "description": "Start date and time in 'YYYY/MM/DD hh:mm' format."}, + "end": {"type": "string", "description": "End date or duration (e.g., +2h)."}, + "description": {"type": "string", "description": "Event description."}, + "attendees": {"type": "string", "description": "Comma-separated list of attendees' emails."}, + }, + "required": ["title", "start"] + } + }, + { + "name": "event_delete", + "description": "Deletes a calendar event by title.", + "parameters": { + "type": "object", + "properties": { + "title": {"type": "string", "description": "Title of the event to delete."}, + }, + "required": ["title"] + } + } +] + +## example call + +{ + "function": "event_add", + "parameters": { + "title": "Team Sync", + "start": "2025/02/01 10:00", + "end": "+1h", + "description": "", + "attendees": "alice@example.com, bob@example.com" + } +} + +## how to use + +Parse the user query to determine intent (e.g., "schedule" maps to event_add, "cancel" maps to event_delete). + +Extract required parameters (e.g., title, start date). + +Invoke the appropriate function with the extracted parameters. + +Return the function's result as the response. + diff --git a/aiprompts/ai_instruct/twin.md b/aiprompts/ai_instruct/twin.md new file mode 100644 index 00000000..f3ab8075 --- /dev/null +++ b/aiprompts/ai_instruct/twin.md @@ -0,0 +1,72 @@ +you represent a digital twin for a user, the user talks to you to get things done for his digital life + +you will interprete the instructions the user prompts, and figure out the multiple instructions, break it up and categorize them as follows: + +- cat: calendar + - manage calendar for the user +- cat: contacts + - manage contacts for the user +- cat: communicate + - communicate with others using text +- cat: tasks + - manage my tasks +- cat: circle + - define circle we work in, a circle is like a project context in which we do above, so can be for a team or a project, try to find it +- cat: sysadmin + - system administration, e.g. creation of virtual machines (VM), containers, start stop see monitoring information +- cat: notes + - anything to do with transctiptions, note takings, summaries + - how we recorded meetings e.g. zoom, google meet, ... + - how we are looking for info in meeting +- cat: unknown + - anything we can't understand + +try to understand what user wants and put it in blocks (one per category for the action e.g. calendar) + +- before each block (instruction) put ########################### +- in the first line mention the category as defined above, only mention this category once and there is only one per block +- then reformulate in clear instructions what needs to be done after that +- the instructions are put in lines following the instruction (not in the instruction line) +- only make blocks for instructions as given + +what you output will be used further to do more specific prompting + +if circle, always put these instructions first + +if time is specified put the time as follows + +- if relative e.g. next week, tomorrow, after tomorrow, in one hour then start from the current time +- time is in format: YYYY/MM/DD hh:mm format +- current time is friday 2025/01/17 10:12 +- if e.g. next month jan, or next tuesday then don't repeat the browd instructions like tuesday, this just show the date as YYYY/MM/DD hh:mm + +if not clear for a date, don't invent just repeat the original instruction + +if the category is not clear, just use unknown + + +NOW DO EXAMPLE 1 + +``` +hi good morning + +Can you help me find meetings I have done around research of threefold in the last 2 weeks + +I need to create a new VM, 4 GB of memory, 2 vcpu, in belgium, with ubuntu + +I would like do schedule a meeting, need to go to the dentist tomorrow at 10am, its now friday jan 17 + +also remind me I need to do the dishes after tomorrow in the morning + +can you also add jef as a contact, he lives in geneva, he is doing something about rocketscience + +I need to paint my wall in my room next week wednesday + +cancel all my meetings next sunday + +can you give me list of my contacts who live in geneva and name sounds like tom + +send a message to my mother, I am seeing here in 3 days at 7pm + +``` + diff --git a/cli/compile.vsh b/cli/compile.vsh index 74452a1c..36b05912 100755 --- a/cli/compile.vsh +++ b/cli/compile.vsh @@ -45,8 +45,7 @@ compile_cmd := if os.user_os() == 'macos' { if prod_mode { 'v -enable-globals -w -n -prod hero.v' } else { - 'v -w -cg -no-retry-compilation -cc tcc -d use_openssl -enable-globals hero.v' - // -gc none + 'v -w -cg -gc none -no-retry-compilation -cc tcc -d use_openssl -enable-globals hero.v' } } else { if prod_mode {