Download setup_endpoints.sh from Nerdur/webui: direct link, hf CLI and curl.
- Browser
- Download file 4.88 kB
-
https://huggingface.co/spaces/Nerdur/webui/resolve/main/setup_endpoints.sh
- Command line
-
hf download hf://spaces/Nerdur/webui/setup_endpoints.sh
-
curl -L -o setup_endpoints.sh https://huggingface.co/spaces/Nerdur/webui/resolve/main/setup_endpoints.sh
4.88 kB
| # setup_endpoints.sh — Pametna konfiguracija API provajdera | |
| BASE_URL="http://localhost:7860" | |
| ADMIN_EMAIL="${WEBUI_ADMIN_EMAIL:-}" | |
| ADMIN_PASSWORD="${WEBUI_ADMIN_PASSWORD:-}" | |
| ADMIN_NAME="${WEBUI_ADMIN_NAME:-admin}" | |
| if [ -z "$ADMIN_EMAIL" ] || [ -z "$ADMIN_PASSWORD" ]; then | |
| echo "❌ WEBUI_ADMIN_EMAIL ili WEBUI_ADMIN_PASSWORD nisu postavljeni." | |
| exit 0 | |
| fi | |
| echo "Čekam da WebUI bude spreman..." | |
| for i in {1..60}; do | |
| STATUS=$(curl -s -o /dev/null -w "%{http_code}" "$BASE_URL/health") | |
| if [ "$STATUS" = "200" ]; then | |
| echo "✅ WebUI je spreman!" | |
| break | |
| fi | |
| echo "Pokušaj $i — čekam još 2s..." | |
| sleep 2 | |
| done | |
| # Login/Signup | |
| LOGIN_RESPONSE=$(curl -s -X POST "$BASE_URL/api/v1/auths/signin" \ | |
| -H "Content-Type: application/json" \ | |
| -d "{\"email\": \"${ADMIN_EMAIL}\", \"password\": \"${ADMIN_PASSWORD}\"}") | |
| TOKEN=$(echo $LOGIN_RESPONSE | python3 -c "import sys, json; print(json.load(sys.stdin).get('token', ''))") | |
| if [ -z "$TOKEN" ]; then | |
| echo "❌ Login neuspješan, pokušavam registraciju..." | |
| REGISTER_RESPONSE=$(curl -s -X POST "$BASE_URL/api/v1/auths/signup" \ | |
| -H "Content-Type: application/json" \ | |
| -d "{\"name\": \"${ADMIN_NAME}\", \"email\": \"${ADMIN_EMAIL}\", \"password\": \"${ADMIN_PASSWORD}\"}") | |
| TOKEN=$(echo $REGISTER_RESPONSE | python3 -c "import sys, json; print(json.load(sys.stdin).get('token', ''))") | |
| fi | |
| if [ -z "$TOKEN" ]; then echo "❌ Nije moguće dobiti token."; exit 0; fi | |
| # Pokreni instalaciju funkcija u pozadini | |
| python3 /app/install_functions.py "$BASE_URL" "$TOKEN" & | |
| echo "✅ Ulogovan, filtriram provajdere s praznim ključevima..." | |
| python3 - <<PYEOF | |
| import requests, os, json | |
| base_url = "$BASE_URL" | |
| token = "$TOKEN" | |
| # NVIDIA: podržava i NVIDIA_API_KEY i NVIDIA_ID_API_KEY | |
| nvidia_key = os.getenv("NVIDIA_ID_API_KEY") or os.getenv("NVIDIA_API_KEY") | |
| # Cloudflare: sklopi URL samo ako postoji account ID | |
| cf_account = os.getenv("CLOUDFLARE_ACCOUNT_ID") or "" | |
| cf_url = f"https://api.cloudflare.com/client/v4/accounts/{cf_account}/ai/v1" if cf_account else None | |
| providers = [ | |
| ("https://api.openai.com/v1", os.getenv("OPENAI_API_KEY")), | |
| ("https://api.anthropic.com/v1", os.getenv("ANTHROPIC_API_KEY")), | |
| ("https://generativelanguage.googleapis.com/v1beta/openai", os.getenv("GOOGLE_API_KEY")), | |
| ("https://models.inference.ai.azure.com", os.getenv("GITHUB_TOKEN")), | |
| ("https://api.groq.com/openai/v1", os.getenv("GROQ_API_KEY")), | |
| ("https://api.mistral.ai/v1", os.getenv("MISTRAL_API_KEY")), | |
| ("https://api.deepseek.com/v1", os.getenv("DEEPSEEK_API_KEY")), | |
| ("https://api.together.xyz/v1", os.getenv("TOGETHER_API_KEY")), | |
| ("https://integrate.api.nvidia.com/v1", nvidia_key), | |
| ("https://api.sambanova.ai/v1", os.getenv("SAMBANOVA_API_KEY")), | |
| ("https://openrouter.ai/api/v1", os.getenv("OPENROUTER_API_KEY")), | |
| ("https://api.cerebras.ai/v1", os.getenv("CEREBRAS_API_KEY")), | |
| ("https://api.fireworks.ai/inference/v1", os.getenv("FIREWORKS_API_KEY")), | |
| ("https://api.x.ai/v1", os.getenv("XAI_API_KEY")), | |
| ("https://router.huggingface.co/v1", os.getenv("HF_INFERENCE_TOKEN")), | |
| ("https://api.cohere.ai/compatibility/v1", os.getenv("COHERE_API_KEY")), | |
| ("https://gen.pollinations.ai/v1", "noapikey"), | |
| ] | |
| # Dodaj Cloudflare samo ako postoji account ID | |
| if cf_url: | |
| providers.append((cf_url, os.getenv("CLOUDFLARE_API_TOKEN"))) | |
| valid_urls = [] | |
| valid_keys = [] | |
| for url, key in providers: | |
| if not url: | |
| continue | |
| if not key or not key.strip() or key in ['""', "''"]: | |
| continue | |
| valid_urls.append(url) | |
| valid_keys.append(key) | |
| print(f" ✔ {url.split('/')[2]}") | |
| payload = { | |
| "ENABLE_OPENAI_API": True, | |
| "OPENAI_API_BASE_URLS": valid_urls, | |
| "OPENAI_API_KEYS": valid_keys, | |
| "OPENAI_API_CONFIGS": { | |
| "https://api.groq.com/openai/v1": { | |
| "model_ids": ["llama-3.3-70b-versatile", "llama-3.1-8b-instant", "meta-llama/llama-4-scout-17b-16e-instruct"] | |
| }, | |
| "https://api.cerebras.ai/v1": { | |
| "model_ids": ["llama-4-scout-17b-16e-instruct", "llama3.1-8b"] | |
| } | |
| } | |
| } | |
| try: | |
| r = requests.post( | |
| f"{base_url}/openai/config/update", | |
| headers={"Authorization": f"Bearer {token}", "Content-Type": "application/json"}, | |
| json=payload, | |
| timeout=10 | |
| ) | |
| if r.status_code == 200: | |
| print(f"✅ Konfigurisano {len(valid_urls)} provajdera.") | |
| else: | |
| print(f"❌ Greška pri updateu: {r.status_code} - {r.text}") | |
| except Exception as e: | |
| print(f"❌ Request greška: {e}") | |
| PYEOF | |
| echo "✅ Gotovo!" | |