# 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: ```bash git clone https://huggingface.co/spaces// cd # 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!`: ```python 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://-.hf.space` ### curl ```bash curl https://.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) ```python from openai import OpenAI client = OpenAI( base_url="https://.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 |