Merge branch 'development' of https://github.com/freeflowuniverse/herolib into development

This commit is contained in:
timurgordon
2025-01-23 13:07:39 +00:00
6 changed files with 298 additions and 6 deletions

View File

@@ -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

View File

@@ -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.

View File

@@ -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
```

View File

@@ -1,4 +1,4 @@
#!/usr/bin/env -S v -parallel-cc -enable-globals run
#!/usr/bin/env -S v -n -w -parallel-cc -enable-globals run
// #!/usr/bin/env -S v -n -w -gc none -no-retry-compilation -cc tcc -d use_openssl -enable-globals run
import os

View File

@@ -17,6 +17,76 @@ docker run --name herolib \
docker exec -it herolib /scripts/cleanup.sh
docker export herolib | gzip > ${HOME}/Downloads/herolib.tar.gz
docker kill herolib
# Detect the OS
detect_os() {
if [[ "$(uname)" == "Darwin" ]]; then
echo "osx"
elif [[ -f /etc/os-release ]]; then
. /etc/os-release
if [[ "$ID" == "ubuntu" ]]; then
echo "ubuntu"
fi
else
echo "unknown"
fi
}
OS=$(detect_os)
if [[ "$OS" == "osx" ]]; then
echo "Running on macOS..."
docker export herolib | gzip > "${HOME}/Downloads/herolib.tar.gz"
echo "Docker image exported to ${HOME}/Downloads/herolib.tar.gz"
elif [[ "$OS" == "ubuntu" ]]; then
echo "Running on Ubuntu..."
export TEMP_TAR="/tmp/herolib.tar"
# Export the Docker container to a tar file
docker export herolib > "$TEMP_TAR"
echo "Docker container exported to $TEMP_TAR"
# Import the tar file back as a single-layer image
docker import "$TEMP_TAR" herolib:single-layer
echo "Docker image imported as single-layer: herolib:single-layer"
# Log in to Docker Hub and push the image
docker login --username despiegk
docker tag herolib:single-layer despiegk/herolib:single-layer
docker push despiegk/herolib:single-layer
echo "Docker image pushed to Docker Hub as despiegk/herolib:single-layer"
# Optionally remove the tar file after importing
rm -f "$TEMP_TAR"
echo "Temporary file $TEMP_TAR removed"
else
echo "Unsupported OS detected. Exiting."
exit 1
fi
docker kill herolib
# Test the pushed Docker image locally
echo "Testing the Docker image locally..."
TEST_CONTAINER_NAME="test_herolib_container"
docker pull despiegk/herolib:single-layer
if [[ $? -ne 0 ]]; then
echo "Failed to pull the Docker image from Docker Hub. Exiting."
exit 1
fi
docker run --name "$TEST_CONTAINER_NAME" -d despiegk/herolib:single-layer
if [[ $? -ne 0 ]]; then
echo "Failed to run the Docker image as a container. Exiting."
exit 1
fi
docker ps | grep "$TEST_CONTAINER_NAME"
if [[ $? -eq 0 ]]; then
echo "Container $TEST_CONTAINER_NAME is running successfully."
else
echo "Container $TEST_CONTAINER_NAME is not running. Check the logs for details."
fi

View File

@@ -1,12 +1,11 @@
module main
import freeflowuniverse.herolib.osal
import freeflowuniverse.herolib.installers.base
import freeflowuniverse.herolib.core
fn do() ! {
// base.uninstall_brew()!
// println("something")
if osal.is_osx() {
if core.is_osx()! {
println('IS OSX')
}