aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorben2025-01-12 14:37:13 +0100
committerben2025-01-12 14:37:13 +0100
commit778188ed95ccf50d2e21938bf5b542d76e066f63 (patch)
treee5138e638da98036e03cb11b2b0cf48fe4c590b2 /src
downloadai_env-778188ed95ccf50d2e21938bf5b542d76e066f63.tar.gz
ai_env-778188ed95ccf50d2e21938bf5b542d76e066f63.tar.bz2
ai_env-778188ed95ccf50d2e21938bf5b542d76e066f63.tar.xz
Initial commit, first public version.
Diffstat (limited to 'src')
-rw-r--r--src/aichat/Dockerfile7
-rw-r--r--src/aichat/config.yaml8
-rw-r--r--src/llm_provision/Dockerfile12
-rw-r--r--src/llm_provision/entrypoint.sh4
-rwxr-xr-xsrc/llm_provision/init_models.sh17
-rw-r--r--src/nginx/nginx.conf61
-rw-r--r--src/tts/Dockerfile47
-rw-r--r--src/tts/download_voices_tts-1.sh8
-rw-r--r--src/tts/voice_to_speaker.default.yaml36
-rw-r--r--src/whisper/Dockerfile13
10 files changed, 213 insertions, 0 deletions
diff --git a/src/aichat/Dockerfile b/src/aichat/Dockerfile
new file mode 100644
index 0000000..df13f63
--- /dev/null
+++ b/src/aichat/Dockerfile
@@ -0,0 +1,7 @@
+FROM rust:latest
+
+RUN rustup target add x86_64-unknown-linux-musl
+RUN apt update && apt install -y musl-tools musl-dev
+RUN update-ca-certificates
+
+RUN cargo install --target x86_64-unknown-linux-musl aichat
diff --git a/src/aichat/config.yaml b/src/aichat/config.yaml
new file mode 100644
index 0000000..a74af2c
--- /dev/null
+++ b/src/aichat/config.yaml
@@ -0,0 +1,8 @@
+# see https://github.com/sigoden/aichat/blob/main/config.example.yaml
+
+model: ollama
+clients:
+- type: openai-compatible
+ name: ollama
+ api_base: http://localhost:11434/v1
+ api_key: __LLM_API_KEY__
diff --git a/src/llm_provision/Dockerfile b/src/llm_provision/Dockerfile
new file mode 100644
index 0000000..77701fe
--- /dev/null
+++ b/src/llm_provision/Dockerfile
@@ -0,0 +1,12 @@
+FROM debian:bookworm-slim
+
+ENV DEBIAN_FRONTEND=noninteractive
+RUN apt-get update
+RUN apt-get --yes -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confnew" install bash curl jq
+
+ADD ./src/llm_provision/init_models.sh /init_models.sh
+ADD ./src/llm_provision/entrypoint.sh /entrypoint.sh
+RUN chmod 755 /entrypoint.sh
+
+ENTRYPOINT ["/entrypoint.sh"]
+#ENTRYPOINT ["tail", "-f", "/dev/null"] # to debug
diff --git a/src/llm_provision/entrypoint.sh b/src/llm_provision/entrypoint.sh
new file mode 100644
index 0000000..d0b6e85
--- /dev/null
+++ b/src/llm_provision/entrypoint.sh
@@ -0,0 +1,4 @@
+#!/usr/bin/env bash
+
+echo "pull models into ollama volumes"
+bash /init_models.sh
diff --git a/src/llm_provision/init_models.sh b/src/llm_provision/init_models.sh
new file mode 100755
index 0000000..0afbbd0
--- /dev/null
+++ b/src/llm_provision/init_models.sh
@@ -0,0 +1,17 @@
+#!/usr/bin/env bash
+
+OLLAMA_HOST="http://ollama:11434"
+
+IFS=',' read -r -a models_arr <<< "${MODELS}"
+
+## now loop through the above array
+for m in "${models_arr[@]}"
+do
+ curl -s "${OLLAMA_HOST}/api/tags" | jq '.models[].name' | grep ${m} > /dev/null
+ if [[ $? -ne 0 ]]
+ then
+ curl -s "${OLLAMA_HOST}/api/pull" -d "{\"model\": \"${m}\"}"
+ else
+ echo "${m} already installed"
+ fi
+done
diff --git a/src/nginx/nginx.conf b/src/nginx/nginx.conf
new file mode 100644
index 0000000..2dc6d52
--- /dev/null
+++ b/src/nginx/nginx.conf
@@ -0,0 +1,61 @@
+events{}
+http {
+ server_tokens off;
+ client_max_body_size 200m;
+
+ server {
+ listen 11434;
+ set $deny 1;
+ if ($http_authorization = "Bearer $API_KEY") {
+ set $deny 0;
+ }
+ if ($deny) {
+ return 403;
+ }
+ location / {
+ proxy_pass http://ollama:11434;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ }
+ }
+ server {
+ listen 8000;
+ set $deny 1;
+ if ($http_authorization = "Bearer $API_KEY") {
+ set $deny 0;
+ }
+ if ($deny) {
+ return 403;
+ }
+ location / {
+ proxy_pass http://openedai-speech:8000;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ }
+ }
+ server {
+ listen 8001;
+ set $deny 1;
+ if ($http_authorization = "Bearer $API_KEY") {
+ set $deny 0;
+ }
+ if ($deny) {
+ return 403;
+ }
+ location / {
+ proxy_pass http://faster-whisper-server:8000;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ proxy_read_timeout 180;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "upgrade";
+ }
+ }
+}
diff --git a/src/tts/Dockerfile b/src/tts/Dockerfile
new file mode 100644
index 0000000..1636bd2
--- /dev/null
+++ b/src/tts/Dockerfile
@@ -0,0 +1,47 @@
+FROM python:3.11-slim
+
+RUN --mount=type=cache,target=/root/.cache/pip pip install -U pip
+
+ARG TARGETPLATFORM
+RUN <<EOF
+apt-get update
+apt-get install --no-install-recommends -y curl ffmpeg git
+if [ "$TARGETPLATFORM" != "linux/amd64" ]; then
+ apt-get install --no-install-recommends -y build-essential
+ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
+fi
+
+# for deepspeed support - image +7.5GB, over the 10GB ghcr.io limit, and no noticable gain in speed or VRAM usage?
+#curl -O https://developer.download.nvidia.com/compute/cuda/repos/debian11/x86_64/cuda-keyring_1.1-1_all.deb
+#dpkg -i cuda-keyring_1.1-1_all.deb
+#rm cuda-keyring_1.1-1_all.deb
+#apt-get install --no-install-recommends -y libaio-dev build-essential cuda-toolkit
+
+apt-get clean
+rm -rf /var/lib/apt/lists/*
+EOF
+#ENV CUDA_HOME=/usr/local/cuda
+ENV PATH="/root/.cargo/bin:${PATH}"
+
+WORKDIR /app
+RUN mkdir -p voices config
+
+ARG USE_ROCM
+ENV USE_ROCM=${USE_ROCM}
+
+RUN git clone https://github.com/matatonic/openedai-speech.git /tmp/app
+RUN mv /tmp/app/* /app/
+ADD src/tts/download_voices_tts-1.sh /app/download_voices_tts-1.sh
+ADD src/tts/voice_to_speaker.default.yaml /app/voice_to_speaker.default.yaml
+RUN if [ "${USE_ROCM}" = "1" ]; then mv /app/requirements-rocm.txt /app/requirements.txt; fi
+RUN --mount=type=cache,target=/root/.cache/pip pip install -r requirements.txt
+
+
+ARG PRELOAD_MODEL
+ENV PRELOAD_MODEL=${PRELOAD_MODEL}
+ENV TTS_HOME=voices
+ENV HF_HOME=voices
+ENV COQUI_TOS_AGREED=1
+
+CMD bash startup.sh
+
diff --git a/src/tts/download_voices_tts-1.sh b/src/tts/download_voices_tts-1.sh
new file mode 100644
index 0000000..f880650
--- /dev/null
+++ b/src/tts/download_voices_tts-1.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+# cat voice_to_speaker.default.yaml | yq '.tts-1 ' | grep mode | cut -d'/' -f2 | cut -d'.' -f1 | sort -u | xargs
+models=${*:-"en_GB-alba-medium en_GB-northern_english_male-medium en_US-bryce-medium en_US-john-medium en_US-libritts_r-medium en_US-ryan-high fr_FR-siwis-medium fr_FR-tom-medium fr_FR-upmc-medium"}
+piper --update-voices --data-dir voices --download-dir voices --model x 2> /dev/null
+for i in $models ; do
+ [ ! -e "voices/$i.onnx" ] && piper --data-dir voices --download-dir voices --model $i < /dev/null > /dev/null
+done
+
diff --git a/src/tts/voice_to_speaker.default.yaml b/src/tts/voice_to_speaker.default.yaml
new file mode 100644
index 0000000..53acda6
--- /dev/null
+++ b/src/tts/voice_to_speaker.default.yaml
@@ -0,0 +1,36 @@
+# Use https://rhasspy.github.io/piper-samples/ to configure
+tts-1:
+ alloy:
+ model: voices/en_US-libritts_r-medium.onnx
+ speaker: 79
+ siwis:
+ model: voices/fr_FR-siwis-medium.onnx
+ speaker: 0
+ tom:
+ model: voices/fr_FR-tom-medium.onnx
+ speaker: 0
+ pierre:
+ model: voices/fr_FR-upmc-medium.onnx
+ speaker: 1
+ jessica:
+ model: voices/fr_FR-upmc-medium.onnx
+ speaker: 0
+ alba:
+ model: voices/en_GB-alba-medium.onnx
+ speaker: 0
+ jack:
+ model: voices/en_GB-northern_english_male-medium.onnx
+ speaker: 0
+ john:
+ model: voices/en_US-john-medium.onnx
+ speaker: 0
+ bryce:
+ model: voices/en_US-bryce-medium.onnx
+ speaker: 0
+ ryan:
+ model: voices/en_US-ryan-high.onnx
+ speaker: 0
+ echo:
+ model: voices/en_US-libritts_r-medium.onnx
+ speaker: 134
+
diff --git a/src/whisper/Dockerfile b/src/whisper/Dockerfile
new file mode 100644
index 0000000..2909803
--- /dev/null
+++ b/src/whisper/Dockerfile
@@ -0,0 +1,13 @@
+FROM debian:bookworm-slim
+
+RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
+ sudo \
+ python3 \
+ python3-distutils \
+ python3-pip \
+ ffmpeg
+
+RUN pip install -U openai-whisper --break-system-packages
+WORKDIR /app
+
+CMD ["whisper"]