Ollama Universal — HF Spaces Template
Uniwersalny szablon do deployowania dowolnego modelu Ollama na Hugging Face Spaces. Wystarczy wgrać 3 pliki i ustawić 2 zmienne — kod nie wymaga zmian.
Pliki repozytorium
Dockerfile — buduje obraz (nie edytuj)
entrypoint.sh — startuje Ollama i proxy (nie edytuj)
proxy.py — API proxy z oznaczonymi miejscami do edycji
INSTRUKCJE.md — ten plik
Szybki start
1. Utwórz Space na HuggingFace
- huggingface.co → Spaces → Create new Space
- SDK: Docker
- Hardware: CPU Basic (free, 16 GB RAM)
- Visibility: Public lub Private
2. Wgraj pliki
Przez UI (przeciągnij i upuść) lub git:
git clone https://huggingface.co/spaces/<username>/<space-name>
cd <space-name>
# skopiuj Dockerfile, entrypoint.sh, proxy.py
git add . && git commit -m "init" && git push
3. Ustaw zmienne środowiskowe
Settings → Variables and Secrets → New variable:
| Nazwa | Przykład | Opis |
|---|---|---|
MODEL |
deepseek-r1:14b |
Model do załadowania |
API_KEY |
moj-tajny-klucz |
Klucz autoryzacji Bearer |
4. Poczekaj
- Build: ~2 min
- Cold start: zależy od rozmiaru modelu (np. 9 GB = ~3-5 min pobierania)
Zmiana modelu
Zmień tylko Variable MODEL w Settings — Space restartuje się automatycznie.
Modele z Ollama registry
deepseek-r1:14b 9.0 GB reasoning
deepseek-r1:7b 4.7 GB reasoning
qwen3:8b 5.2 GB reasoning
qwen3:4b 2.6 GB reasoning
qwen2.5:7b 4.7 GB
llama3.2:3b 2.0 GB
gemma3:9b 5.8 GB
mistral:7b 4.1 GB
phi4-mini:latest 4.2 GB
Modele z HuggingFace (hf.co/...)
hf.co/unsloth/GLM-4.7-Flash-GGUF:UD-TQ1_0 8.33 GB
hf.co/bartowski/Qwen2.5-7B-Instruct-GGUF:Q4_K_M 4.7 GB
hf.co/bartowski/gemma-3-9b-it-GGUF:Q4_K_M 5.8 GB
Co edytować w proxy.py
Szukaj komentarzy !TU MUSISZ EDYTOWAC!:
API_KEY = os.environ.get("API_KEY", "connectkey")
# ^^^^^^^^^^^ zmień domyślny klucz
MODEL = os.environ.get("MODEL", "deepseek-r1:14b")
# ^^^^^^^^^^^^^^^^ zmień domyślny model
temperature = body.get("temperature", 0.6)
# ^^^ zmień domyślną temperaturę
top_p = body.get("top_p", 0.95)
# ^^^^ zmień domyślne top_p
Wartości z ENV (HF Variables) zawsze mają priorytet nad domyślnymi w kodzie.
Użycie API
Base URL: https://<username>-<space-name>.hf.space
curl
curl https://<space>.hf.space/v1/chat/completions \
-H "Authorization: Bearer moj-tajny-klucz" \
-H "Content-Type: application/json" \
-d '{
"messages": [{"role": "user", "content": "Cześć!"}]
}'
Python (openai SDK)
from openai import OpenAI
client = OpenAI(
base_url="https://<space>.hf.space/v1",
api_key="moj-tajny-klucz",
)
stream = client.chat.completions.create(
model="deepseek-r1:14b",
messages=[{"role": "user", "content": "Cześć!"}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta
if hasattr(delta, "reasoning_content") and delta.reasoning_content:
print(delta.reasoning_content, end="", flush=True)
if delta.content:
print(delta.content, end="", flush=True)
Endpointy
| Endpoint | Metoda | Opis |
|---|---|---|
/v1/chat/completions |
POST | Chat — zawsze streaming |
/v1/models |
GET | Lista załadowanych modeli |
/health |
GET | Status Ollamy i modelu |
Limity CPU Basic (free)
| Parametr | Wartość |
|---|---|
| RAM | 16 GB |
| vCPU | 2 |
| Disk | 50 GB (reset przy restarcie) |
| Sleep po bezczynności | 48h |
| Max rozmiar modelu | ~13 GB GGUF |