From a14411c5644ed4b3e8f940d228418fd7479b05b2 Mon Sep 17 00:00:00 2001 From: Luke Childs Date: Sat, 5 Aug 2023 00:43:52 +0700 Subject: [PATCH] Add readme --- logo.webp | Bin 0 -> 28132 bytes readme.md | 185 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 185 insertions(+) create mode 100644 logo.webp create mode 100644 readme.md diff --git a/logo.webp b/logo.webp new file mode 100644 index 0000000000000000000000000000000000000000..a1c50f98766007d49fdd18928fcb4207ce1758d0 GIT binary patch literal 28132 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 + +

+ +# humanscript + +> A truly natural scripting language + +humanscript is an inferpreter. A script interpreter that uses a large language model to infer the meaning behind commands written in natural language. Human writeable commands are translated into code that is then executed on the fly. There is no predefined syntax, humanscripts just say what they want to happen, and when you execute them, it happens. + +The humanscript inferpreter supports a wide range of LLM backends. It can be used with cloud hosted LLMs like OpenAI's GTP-3.5 and GPT-4. It can also be used with open source LLMs running on your local machine like Llama 2. + +## Example + +This is a humanscript called `bitcoin-poem`. + +```shell +#!/usr/bin/env humanscript + +write a poem + +print the poem + +get the latest bitcoin blockhash from the mempool api + +hash the poem and the blockhash together + +print the blockhash, and the combined hash +``` + +It can be executed like any other script. + +```shell +$ ./bitcoin-poem +Poem: Roses are red, violets are blue. Bitcoin is volatile, and that is true +Bitcoin Blockhash: 0000000000000000000413b966555eee6794dac502ac66ec88d7e752ffec8a4b +Combined hash: ad69015c2f43d86b2d3247b78c81d9bb8f38e453a05d6fd264f42c44d74390e4 +``` + +The LLM inferpreted the humanscript into this bash script. + +```shell +#!/usr/bin/env bash + +poem="Roses are red, violets are blue. Bitcoin is volatile, and that is true" + +echo "Poem: $poem" + +blockhash=$(curl -s https://mempool.space/api/blocks/tip/hash) + +combined_hash=$(echo -n "$poem$blockhash" | sha256sum | cut -d ' ' -f1) + +echo "Bitcoin Blockhash: $blockhash" +echo "Combined hash: $combined_hash" +``` + +## Usage + +### Install humanscript + +You can run humanscript in a sandboxed environmnet via Docker: + +```shell +docker run -it ghcr.io/lukechilds/humanscript +``` + +Alternatively you can install it natively on your system with Homebrew: + +```shell +brew install lukechilds/humanscript/humanscript +``` + +Or manually install by downloading this repository and copy/symlink `humanscript` into your PATH. + +### OpenAI + +humanscript is configured out of the box to use OpenAI's GPT-4, you just need to add your API key. + +We need to add it to `~/.humanscript/config` + +```shell +mkdir -p ~/.humanscript/ +echo 'HUMANSCRIPT_API_KEY=""' >> ~/.humanscript/config +``` + +Now you can create a humanscript and make it executable. + +```shell +echo '#!/usr/bin/env humanscript' >> my-humanscript +echo 'print an ascii art human' >> my-humanscript +chmod +x my-humanscript +``` + +And then run it. + +```shell +./my-humanscript + O + /|\ + / \ +``` + +### Local LLM + +TODO + +## How? + +TODO + +Due to the non-determinstic nature of LLMs each time you inferpret a humanscript, slightly different code will execute. To mitigate this inconvenience the humanscript inferpreter caches the generated code after the intial run and doesn't reinferpret the humanscript again until it is modified. + +During humanscript inferpretation the generated code is streamed out of the LLM and executed line by line. This means large scripts can be executed quickly because exection is not blocked waiting for the LLM inference to complete. + +## Why? + +I'm not sure. + +## Is this a joke? + +I don't know. + +## Configuration + +The following environment variables can be added to `~/.humanscript/config` to be globally applied to all humanscripts. + +### `HUMANSCRIPT_API` + +Default: `https://api.openai.com` + +A server following OpenAI's Chat Completion API. + +Many local proxies exist that implement this API in front of locally running LLMs like Llama 2. [LM Studio](https://lmstudio.ai/) is a good option. + +```shell +HUMANSCRIPT_API="http://localhost:1234" +``` + +### `HUMANSCRIPT_API_KEY` + +Default: `unset` + +The API key to be sent to the LLM backend. Only needed when using OpenAI. + +```shell +HUMANSCRIPT_API_KEY="sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +``` + +### `HUMANSCRIPT_MODEL` + +Default: `gpt-4` + +The model to use for inference. + +```shell +HUMANSCRIPT_MODEL="gpt-3.5" +``` + +### `HUMANSCRIPT_EXECUTE` + +Default: `true` + +If the humanscript inferpreter should automatically execute the generated code on the fly. + +If false the generated code will be streamed to stdout. + +```shell +HUMANSCRIPT_EXECUTE="false" +``` + +### `HUMANSCRIPT_REGENERATE` + +Default: `false` + +If the humanscript inferpreter should regenerate a cached humanscript. + +If true the humanscript will be reinferpreted and the cache entry will be replaced with the newly generated code. + +```shell +HUMANSCRIPT_REGENERATE="true" +``` + +## License + +MIT © Luke Childs