| #!/bin/bash |
| |
|
|
| 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_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 |
|
|
| |
| 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!" |
|
|