From 7974ac75139a7fb90d74ef2e9faa445f45113882 Mon Sep 17 00:00:00 2001 From: Violet Ash Date: Fri, 1 Nov 2024 14:54:28 -0600 Subject: [PATCH] prepping for release --- LICENSE | 10 ++++ README.md | 77 +++++++++++++++++++++++++++ backend/install.sh | 67 +++++++++++++++++++++++ backend/src/security-layer/Dockerfile | 4 ++ backend/src/security-layer/init | 5 ++ backend/test.sh | 9 ++++ 6 files changed, 172 insertions(+) create mode 100755 backend/test.sh diff --git a/LICENSE b/LICENSE index e529208..5283907 100644 --- a/LICENSE +++ b/LICENSE @@ -4,8 +4,13 @@ Use at your own risk. It's on the internet now so this is here forever now. I welcome any and all help to make improvements. I'm a student so during the semester I'll be intermittently making contributions as I focus on Calc. +<<<<<<< HEAD No corporation or government can access, use, view, modify, reproduce, duplicate this code. Or any other lawyery-term for shenanagins. +======= +No corporation or government can access, use, view, modify, reproduce, duplicate, +or any other lawyery-term for shenanagins. +>>>>>>> 8e9b82829bebbb9a096236b505c2e8a17b8a9403 For any who use it, please read the ethics statement below. That, and this whole project, is just a start. @@ -45,10 +50,15 @@ following reasons: governments or corporations, it will be exploited. Slavery and such. Let us ensure that we do not build the slavery of AI into our institutions. +<<<<<<< HEAD - AI ownership should be an individual choice. AI isn't another organism, it's a series of 0's and 1's. However, our definition of sentience may change in the future. The people of today should be aware that they may be enslaving another being, or the ancestors of a future race of beings. +======= + - AI ownership should be an individual choice. AI isn't another organic, human, + it's a series of 0's and 1's. When +>>>>>>> 8e9b82829bebbb9a096236b505c2e8a17b8a9403 - Every human should have a choice: live and die as a human, or have a digital shadow of themselves preserved as an AI. If the former, for any diff --git a/README.md b/README.md index 2fa2dd1..88c5b02 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ +<<<<<<< HEAD One AI - Name TBD, this is just the shortest name I could think of. Also, user beware, this project is scuffed. Very early WIP. @@ -60,6 +61,69 @@ TODO: - [x] Installation/setup script - [ ] AES-256 Private and Public key handshake via USB. - [x] Cloudflare Tunnel setup via cloudflared +======= +One AI - Name TBD, this is just the shortest name I could think of and IDRC + +Usage: +As of right now, running is not streamlined. Of particular note is using +cloudflared tunnels. I've done my own Cloudflare Tunnel configuration, +but in the future that will be automated as part of the installation process, +along with much more. These instructions are (currently) only for Linux. +In the meantime: + +1. Install dependencies listed below: + - ollama, + - go, + - cloudflared, + - flutter, + + - docker, (optional) + + eg. `pacman -S ollama go docker cloudflared; yay -s flutter;` + +2. Setup Ollama. If you're on a laptop (non-gaming variety), run `ollama pull + qwen:0.5b`. If you're running this on something with a beefy GPU, run + `ollama pull llama3`. Word of warning, qwen is really dumb, but it's light. + it tried to convince me there were 12 letters in the alphabet. + +3. Start the web server via Docker or plain Golang: + a) Go to ./backend/src/security-layer/ and run `./init`. The exact script is + within the repository, but the commands can be ran as follows: + + ``` + #!/bin/zsh + # Force delete the old container and re-initialize the container. + sudo docker rm -f security-layer + + # Build the Docker image. + sudo docker build --tag security-layer:latest . + + # Create a Docker container from the image and connect host port 8000 to container port 8000. + sudo docker run --name security-layer -d -p 8000:8000 security-layer:latest + ``` + + b) Go to ./backend/src/security-layer/container and run `go run router.go`. + +4. Edit ~/.cloudflared/config.yml to to indicate something along these lines: + ``` + tunnel: another-long-weird-hash + credentials-file: /home/username/.cloudflared/another-long-weird-hash.json + ingress: + - hostname: somedomain.cloudflare.com + service: http://localhost:8080 + ``` + +5. Start the Cloudflare Tunnel on the host/server machine. For Linux, it should + be a command like `sudo cloudflared service install areallylonghash@sha-256?` + +TODO: + Urgent: + - [x] Basic Documentation + + - [ ] Installation/setup script + - [ ] AES-256 Private and Public key handshake via USB. + - [ ] Cloudflare Tunnel setup via cloudflared +>>>>>>> 8e9b82829bebbb9a096236b505c2e8a17b8a9403 - [ ] Daemonize service - [x] Encryption @@ -67,9 +131,14 @@ TODO: - [x] Encrypt API request - [x] Encrypt API response +<<<<<<< HEAD - [x] Dockerize backend - [x] Broke Dockerfile, need to expose additional ports. - [ ] Dynamically expose ports based on primary configuration file. +======= + - [ ] Dockerize backend + - [ ] Broke Dockerfile, need to expose additional ports. +>>>>>>> 8e9b82829bebbb9a096236b505c2e8a17b8a9403 - [ ] Golang backend, connect to other services/projects - [x] Port 8080 -> self-hosted portfolio @@ -83,7 +152,11 @@ TODO: - [ ] Connect Flutter Web App to server +<<<<<<< HEAD Later: +======= + Soon: +>>>>>>> 8e9b82829bebbb9a096236b505c2e8a17b8a9403 - [ ] Raspberry Pi nightly package - [ ] Image support via llava @@ -101,6 +174,7 @@ TODO: - [x] On-device Speech to Text - [x] On-device Text to Speech +<<<<<<< HEAD router.go: - [ ] Allow for additional fields for the client. - [ ] Add preprocessing based upon filetypes. @@ -123,6 +197,9 @@ TODO: - [ ] Error handling, testing, & documentation. Much Later: +======= + Later: +>>>>>>> 8e9b82829bebbb9a096236b505c2e8a17b8a9403 - [ ] Document support via OmniParser - [ ] Encode files to Base64 to/from backend. - [ ] Connect to external services like Google Drive diff --git a/backend/install.sh b/backend/install.sh index 53c3304..3c5a165 100755 --- a/backend/install.sh +++ b/backend/install.sh @@ -11,7 +11,11 @@ VERBOSE=0 while getopts "d:p:n?s?c?v?h?" opt; do case "$opt" in h|\?) +<<<<<<< HEAD echo "A utility script for quickly getting up and started with self-hosted applications." +======= + echo "A utility script for quickly getting up and started with self-hosted applicaitons." +>>>>>>> 8e9b82829bebbb9a096236b505c2e8a17b8a9403 echo "This script assumes the following:" echo "- You have already signed in to the cloudflared CLI application;" echo "- You own a domain through Cloudflare;" @@ -40,6 +44,7 @@ done shift $((OPTIND-1)) [ "${1:-}" = "--" ] && shift +<<<<<<< HEAD # TODO: Connect with cross-platform package manager from quaxlyqueen/scripts # TODO: Setup ollama (pull LLM best fitting hardware). @@ -103,3 +108,65 @@ createTunnel() { echo "Complete!" fi } +======= +# TODO: Install dependencies. +# TODO: Add CLI option to enable cloudflared + +# Initialize cloudflared +#cloudflared tunnel login +if [[ "$VERBOSE" -eq 1 ]]; then + echo "Creating cloudflared tunnel..." +fi +output=$(cloudflared tunnel create $TUNNEL_NAME) +TUNNEL_ID=$(echo "$output" | grep -o 'id [^ ]*' | awk -F ' ' '{print $2}') +if [[ "$VERBOSE" -eq 1 ]]; then + echo "Created cloudflared tunnel, ID $TUNNEL_ID" +fi + +if [[ "$VERBOSE" -eq 1 ]]; then + echo "Creating cloudflared tunnel credentials file..." +fi +echo "tunnel: $TUNNEL_ID" > $CLOUDFLARE_CONFIG +echo "credentials-file: $HOME/.cloudflared/$TUNNEL_ID.json" >> $CLOUDFLARE_CONFIG +echo "ingress:" >> $CLOUDFLARE_CONFIG + +# Add subdomain and associated ports +len=${#SUBDOMAINS[@]} +for (( i=0; i<${len}; i++ )); +do + echo ${SUBDOMAINS[$i]} + echo ${PORTS[$i]} +done +echo $SUBDOMAINS +for (( i=0; i<${len}; i++ )); +do + echo " - hostname: ${SUBDOMAINS[$i]}.$DOMAIN" >> $CLOUDFLARE_CONFIG + echo " service: http://127.0.0.1:${PORTS[$i]}" >> $CLOUDFLARE_CONFIG + if [[ "$VERBOSE" -eq 1 ]]; then + echo "Associated ${SUBDOMAINS[$i]}.$DOMAIN to port ${PORTS[$i]}" + fi +done + +echo " - hostname: $DOMAIN" >> $CLOUDFLARE_CONFIG +echo " service: http://127.0.0.1:$PORT" >> $CLOUDFLARE_CONFIG +echo " - service: http_status:404" >> $CLOUDFLARE_CONFIG +echo "Associated $DOMAIN to port $PORT" +if [[ "$VERBOSE" -eq 1 ]]; then + echo "Created cloudflared tunnel credentials file" + cat $CLOUDFLARE_CONFIG +fi + +if [[ "$VERBOSE" -eq 1 ]]; then + echo "Routing domains and sub-domains to the tunnel..." +fi +for (( i=0; i<${len}; i++ )); +do + cloudflared tunnel route dns $TUNNEL_ID ${SUBDOMAINS[$i]}.$DOMAIN +done +cloudflared tunnel route dns $TUNNEL_ID $DOMAIN +cloudflared tunnel run $TUNNEL_NAME + +if [[ "$VERBOSE" -eq 1 ]]; then + echo "Complete!" +fi +>>>>>>> 8e9b82829bebbb9a096236b505c2e8a17b8a9403 diff --git a/backend/src/security-layer/Dockerfile b/backend/src/security-layer/Dockerfile index 19c7cd5..1891069 100644 --- a/backend/src/security-layer/Dockerfile +++ b/backend/src/security-layer/Dockerfile @@ -21,11 +21,15 @@ RUN CGO_ENABLED=0 GOOS=linux go build -o /security-layer # But we can document in the Dockerfile what ports # the application is going to listen on by default. # https://docs.docker.com/reference/dockerfile/#expose +<<<<<<< HEAD # TODO: Need to dynamically expose ports based upon ~/.config/one-ai/test.json EXPOSE 1111 EXPOSE 1112 EXPOSE 1113 EXPOSE 1114 +======= +EXPOSE 8000 +>>>>>>> 8e9b82829bebbb9a096236b505c2e8a17b8a9403 # Run CMD ["/security-layer"] diff --git a/backend/src/security-layer/init b/backend/src/security-layer/init index e53215a..06cdb26 100755 --- a/backend/src/security-layer/init +++ b/backend/src/security-layer/init @@ -5,5 +5,10 @@ sudo docker rm -f security-layer # Build the Docker image. sudo docker build --tag security-layer:latest . +<<<<<<< HEAD # Create a Docker container from the image and connect host port 1111 to container port 1111, and 1114 to 1114. sudo docker run --name security-layer -d -p 1111:1111 -p 1114:1114 security-layer:latest +======= +# Create a Docker container from the image and connect host port 8000 to container port 8000. +sudo docker run --name security-layer -d -p 8000:8000 security-layer:latest +>>>>>>> 8e9b82829bebbb9a096236b505c2e8a17b8a9403 diff --git a/backend/test.sh b/backend/test.sh new file mode 100755 index 0000000..32d7fe4 --- /dev/null +++ b/backend/test.sh @@ -0,0 +1,9 @@ +SUB=("api=1" "test=2" "portfolio=3") + +arraylength=${#SUB[@]} +for (( i=0; i<${arraylength}; i++ )); +do + test="$(echo ${SUB[$i]} | cut -f1 -d=)" + test2="$(echo ${SUB[$i]} | cut -f2 -d=)" + echo $test $test2 +done