Spaces:
Running
Running
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 | |