File size: 4,884 Bytes
ee2218d
d6c807d
7b306ed
097c30b
e768617
 
 
 
 
d6c807d
e768617
 
 
604da52
a76c39e
604da52
97b9885
604da52
97b9885
 
a76c39e
 
97b9885
 
d6c807d
604da52
 
e768617
7b306ed
604da52
7b306ed
604da52
 
 
 
e768617
604da52
 
7b306ed
d6c807d
7b306ed
fcc7f02
a76c39e
 
d6c807d
604da52
d6c807d
 
 
 
 
 
fcc7f02
 
 
 
 
 
 
d6c807d
fcc7f02
 
d6c807d
fcc7f02
 
 
 
 
 
 
 
 
 
 
 
 
 
d6c807d
 
fcc7f02
 
 
 
d6c807d
 
 
 
fcc7f02
 
 
 
 
 
 
d6c807d
 
 
 
 
5e3277c
 
 
 
 
 
 
 
d6c807d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
114
115
116
117
118
119
120
121
122
123
124
125
126
#!/bin/bash
# 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!"