diff options
author | ben | 2025-01-12 14:37:13 +0100 |
---|---|---|
committer | ben | 2025-01-12 14:37:13 +0100 |
commit | 778188ed95ccf50d2e21938bf5b542d76e066f63 (patch) | |
tree | e5138e638da98036e03cb11b2b0cf48fe4c590b2 /src | |
download | ai_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/Dockerfile | 7 | ||||
-rw-r--r-- | src/aichat/config.yaml | 8 | ||||
-rw-r--r-- | src/llm_provision/Dockerfile | 12 | ||||
-rw-r--r-- | src/llm_provision/entrypoint.sh | 4 | ||||
-rwxr-xr-x | src/llm_provision/init_models.sh | 17 | ||||
-rw-r--r-- | src/nginx/nginx.conf | 61 | ||||
-rw-r--r-- | src/tts/Dockerfile | 47 | ||||
-rw-r--r-- | src/tts/download_voices_tts-1.sh | 8 | ||||
-rw-r--r-- | src/tts/voice_to_speaker.default.yaml | 36 | ||||
-rw-r--r-- | src/whisper/Dockerfile | 13 |
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"] |