Spaces:
Sleeping
Sleeping
| set -euo pipefail | |
| pids=() | |
| generate_litellm_provider() { | |
| provider="$1" | |
| if [[ "$#" -lt 2 ]]; then | |
| >&2 echo "[+] Provider ${provider}: No key needed" | |
| cat "/assets/${provider}.yaml" | |
| return | |
| fi | |
| key_env="$2" | |
| if [[ -n "${!key_env:-}" ]]; then | |
| >&2 echo "[+] Provider ${provider}: Found key ${key_env}" | |
| cat "/assets/${provider}.yaml" | |
| return | |
| fi | |
| >&2 echo "[!] Provider ${provider}: No key found (set ${key_env})" | |
| } | |
| generate_litellm_config() { | |
| echo "model_list:" | |
| generate_litellm_provider "anthropic" "ANTHROPIC_API_KEY" | |
| generate_litellm_provider "github" "GITHUB_API_KEY" | |
| generate_litellm_provider "groq" "GROQ_API_KEY" | |
| generate_litellm_provider "huggingface" | |
| generate_litellm_provider "openai" "OPENAI_API_KEY" | |
| generate_litellm_provider "perplexity" "PERPLEXITY_API_KEY" | |
| if [[ -n "${LITELLM_MODELS_BASE64:-}" ]]; then | |
| echo "${LITELLM_MODELS_BASE64}" | base64 -d | |
| fi | |
| } | |
| start_litellm() { | |
| ( | |
| # KISS: No persistence for LiteLLM | |
| unset DATABASE_URL | |
| litellm \ | |
| --host "127.0.0.1" \ | |
| --port "4000" \ | |
| --config /tmp/litellm_config.yaml | |
| ) & | |
| pids+=("$!") | |
| } | |
| start_open_webui() { | |
| ( | |
| # By default, we expect it to be deployed to a private HF Space. | |
| # You can enable WEBUI_AUTH as needed | |
| if [[ -z "${WEBUI_AUTH:-}" ]]; then | |
| >&2 echo "[!] Enabling single user mode" | |
| export WEBUI_AUTH="False" | |
| fi | |
| # The less the user needs to configure, the better :) | |
| if [[ -n "${OPENAI_API_KEY:-}" ]] && [[ -z "${WEBUI_SECRET_KEY:-}${WEBUI_JWT_SECRET_KEY:-}" ]]; then | |
| >&2 echo "[!] Using OpenAI API key as Web UI secret key" | |
| export WEBUI_SECRET_KEY="${OPENAI_API_KEY}" | |
| fi | |
| if [[ -z "${ENABLE_RAG_WEB_SEARCH:-}${RAG_WEB_SEARCH_ENGINE:-}" ]]; then | |
| if [[ -n "${BRAVE_SEARCH_API_KEY:-}" ]]; then | |
| export RAG_WEB_SEARCH_ENGINE="brave" | |
| export ENABLE_RAG_WEB_SEARCH="True" | |
| fi | |
| fi | |
| if [[ -z "${DATABASE_URL:-}" ]]; then | |
| unset DATABASE_URL | |
| fi | |
| export ENABLE_OLLAMA_API="${ENABLE_OLLAMA_API:-False}" | |
| export OPENAI_API_BASE_URLS="http://localhost:4000" | |
| export OPENAI_API_KEY="sk-unused" | |
| export ENABLE_IMAGE_GENERATION="True" | |
| export IMAGES_OPENAI_API_BASE_URL="http://localhost:4000" | |
| export IMAGES_OPENAI_API_KEY="sk-unused" | |
| export PGSSLCERT=/tmp/postgresql.crt | |
| env | |
| /app/backend/start.sh | |
| ) & | |
| pids+=("$!") | |
| } | |
| wait_litellm() { | |
| while ! curl -s http://localhost:4000 >/dev/null; do | |
| >&2 echo "[!] Waiting for LiteLLM..." | |
| sleep 1 | |
| done | |
| } | |
| generate_litellm_config >/tmp/litellm_config.yaml | |
| >&2 cat /tmp/litellm_config.yaml | |
| start_litellm | |
| wait_litellm | |
| start_open_webui | |
| for pid in "${pids[@]}"; do | |
| wait "$pid" | |
| done | |