File size: 2,572 Bytes
58058b8
 
 
 
 
453e653
 
58058b8
453e653
 
 
 
58058b8
 
101192b
 
453e653
 
 
 
 
 
 
101192b
 
58058b8
453e653
 
 
 
 
58058b8
 
101192b
58058b8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#!/usr/bin/env bash
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