Stav Tunnel
Betjen dine egne modeller gennem Stav — en Mac mini eller en on-prem-maskine bag din firewall bliver til et privat leverandørendepunkt i dit arbejdsområde med nøgler, routere, forespørgselslog, revision og policymuren.
Stav Tunnel aktiveres per arbejdsområde. Hvis du ikke ser Dit arbejdsområde → Forbind → Stav Tunnel, så kontakt supporten for at få det aktiveret.
Du har en maskine, der kører en model godt — en Mac mini med Ollama, en arbejdsstation med LM Studio, en maskine med llama.cpp eller en GPU-server med vLLM eller SGLang. Stav Tunnel lader den maskine betjene dit arbejdsområde gennem Stav, så dine applikationer beholder én base-URL, én nøgle, én forespørgselslog og de samme routere og policymuren — og selve modellen er privat for dit arbejdsområde.
Intet er åbent mod internettet. En lille daemon, stav-tunnel, opretter en udgående forbindelse fra din maskine til Stavs relay via WebSocket. Forespørgsler kommer ned gennem den forbindelse og besvares af backend-løsningen på maskinen. Ingen indgående port, ingen firewall-regel, ingen VPN.
Sådan fungerer det
- Tilføj en node under Dit arbejdsområde → Forbind → Stav Tunnel. Giv den et navn og det beregningsland, maskinen står i. Du får et engangstoken til tilmelding og installationskommandoen.
- Kør kommandoen på maskinen. Den installerer daemonen fra platformens egen pakkehåndtering og opretter forbindelse. Daemonen finder Ollama (
:11434), LM Studio (:1234), llama.cpp (:8080), vLLM (:8000) eller SGLang (:30000) på maskinen og rapporterer de modeller, den betjener. - Brug modellerne. Inden for et minut vises de i
/v1/modelsog under Dit arbejdsområde → Forbind → Modeller. En model, som Stav allerede kender, beholder sit katalognavn og får en række for din node; en model, den ikke kender, får navnet@dit-arbejdsområde/lokalt-id.
# macOS eller Linux, Homebrew
brew install stavhq/tap/stav-tunnel
stav-tunnel up --token stn_…
På Debian eller Ubuntu:
curl -fsSL https://packages.stav.ai/packages/key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/stav.gpg
echo "deb [signed-by=/usr/share/keyrings/stav.gpg] https://packages.stav.ai/packages/apt stable main" | sudo tee /etc/apt/sources.list.d/stav-tunnel.list
sudo apt update && sudo apt install stav-tunnel
På Fedora, RHEL eller Rocky:
sudo curl -fsSL -o /etc/yum.repos.d/stav-tunnel.repo https://packages.stav.ai/packages/stav-tunnel.repo
sudo dnf install stav-tunnel
Hvis du bruger en pakke, skal du indsætte dit token i /etc/stav-tunnel/env (STAV_TUNNEL_ARGS=--token stn_…), køre sudo systemctl enable --now stav-tunnel og derefter fjerne --token stn_… fra den linje, mens du beholder resten (såsom --backend) — noden beholder sin egen nøgle.
For at holde noden kørende efter logud og genstart skal du køre stav-tunnel service install på macOS (en LaunchAgent). Linux-pakkerne leveres med en systemd-enhed: sudo systemctl enable --now stav-tunnel.
stav-tunnel status viser forbindelsen og de backends, den har fundet. stav-tunnel logout fjerner maskinens legitimationsoplysninger.
vLLM og SGLang
Daemonen leder efter vLLM på :8000 og SGLang på :30000. Mange andre servere bruger disse porte, så en server fundet der rapporteres kun, når daemonen bekræfter, at det er vLLM eller SGLang. Alle andre servere fungerer også, når du navngiver dem: stav-tunnel up --backend http://127.0.0.1:8000/v1.
- En server, der kræver et token. Hvis du starter vLLM med
--api-key, viser nodesiden vLLM beder om et token. Giv daemonen nøglen én gang:stav-tunnel up --backend 'http://127.0.0.1:8000/v1|din-nøgle'. Nøglen bliver i daemonens konfiguration på maskinen og når aldrig Stav. SGLang med--api-keyafviser enhver forespørgsel uden nøglen, så daemonen kan ikke skelne den fra en anden server: navngiv den på samme måde fra starten. - En model, der betjenes under et andet navn.
vllm serve Qwen/Qwen3-8B --served-model-name prod-chatviser modellen somprod-chat. vLLM og SGLang oplyser også, hvilke vægte det er, og det bruger Stav: når kataloget har Qwen3-8B, får din model sit katalognavn, sin side og sine benchmarks. Nodesiden viser vægtene under det lokale id. En model, der er indlæst fra en lokal mappe, bliver ikke matchet på denne måde (stien sendes aldrig til Stav); tilknyt den manuelt på nodesiden. - I en container. Container-imaget til
stav-tunnelleder efter serverne på sit eget127.0.0.1. Kør det med--network host, eller giv det serverens adresse med--backend.
Adressering af din node
| Du sender | Du får |
|---|---|
modelskaber/model eller auto | Routeren kan vælge din node, når den er online (se nedenfor) |
modelskaber/model/@node | Den model, fastgjort til din node. Bruger aldrig reserve |
@dit-arbejdsområde/lokalt-id | En model, som kun din node betjener |
@dit-arbejdsområde/lokalt-id/@node | Det samme, fastgjort |
Dine routere bruger samme adresse, @dit-arbejdsområde/router. Så et lokalt id, der er auto, eller som har navnet på en af dine routere (hvert arbejdsområde har default), navngives @dit-arbejdsområde/lokalt-id-node. En router kan ikke tage navnet på en model på dine noder. En model, der allerede har sit navn, beholder det.
Når ingen af dine noder kan betjene en privat model, afvises en forespørgsel på den med 403 model_not_permitted, og meddelelsen forklarer hvorfor: for eksempel at noden er offline eller suspenderet.
Et svar betjent af din node indeholder X-Stav-Served-By: own-resource og X-Stav-Node-Id; X-Stav-Provider er din nodes private leverandør, @dit-arbejdsområde/node. Forespørgselsloggen viser nodens navn.## Dine modeller, fuldt kendte
En model på din node er kun nyttig, når Stav ved, hvad den kan. To ting sikrer dette:
- Test. Når en model dukker op på en node, eller når runtime rapporterer, at den er ændret (en ny kvantisering, størrelse eller version), sender Stav noden en håndfuld korte testforespørgsler — en lydfil på ét sekund til
/v1/audio/transcriptions, et almindeligt chatkald, et verktøjskald, et JSON-schema-kald, en temperatur, et 1×1-billede og hvert ræsonneringsniveau — og registrerer, hvad modellen faktisk accepterede. Det, der blev målt, vinder: En runtime, der visertoolsfor en model, som derefter afviser dem, giver dig en ren egenskabsfejl i stedet for et forvrænget svar. Alle fakta på nodesiden viser, hvor de kommer fra —mmålt på noden,rrapporteret af runtime,cfra kataloget. Test er gratis og bruger maskinens GPU et øjeblik; hver node har et dagligt loft, og siden viser, hvornår det er nået. Slå Test nye modeller automatisk fra på en node, hvis du foretrækker det; Test igen virker stadig. - Mapping. Et lokalt id, som Stav ikke kan matche (
qwen3.5:9b-mlx, når kataloget ikke har nogen Qwen 3.5 9B), forbliver privat, indtil du fortæller det. Map til en katalogmodel på nodesiden foreslår de nærmeste offentlige modeller og lader dig søge i hele kataloget; mappet gælder for alle noder i dit arbejdsområde, der rapporterer det id, vinder over alle regler og flytter modellen ind under katalognavnet — dens side og benchmarks — med en test lige efter. Rækken lyder derefter Mappet af dit arbejdsområde, aldrig Matchet, og benchmarks er katalogmodellens, ikke noget målt på din node. Fastgørelser til det gamle@dit-arbejdsområde/lokalt-idholder op med at virke. Fjern mappet, og id'et går tilbage til reglerne.
Routere
Hver router har en indstilling for Tunnel-noder:
- Foretræk (standard) — routeren vælger modellen som sædvanlig. Når en af dine noder er online og betjener den model, får noden forespørgslen først; hvis den er offline, afbryder før første byte, eller dens modelserver er optaget (den svarer 429, 413 eller en 5xx), sker der et automatisk skift til kataloget. Foretræk får ikke routeren til at vælge den model, din node betjener: En cloud-model, der scorer bedre, vinder stadig. For at sende forespørgsler til din node, hver gang den kan betjene dem, skal du sætte Hvordan denne router vælger til Billigste først (hvor dit arbejdsområde har det): Din node koster intet, så den kommer først.
- Kun — kun dine noder. Hvis intet er online, afvises forespørgslen med
no_eligible_models; aldrig en lydløs reserve til en tredjepart. - Ignorer — routeren bliver i kataloget.
En fastgjort forespørgsel (…/@node) skifter aldrig automatisk: Hvis noden er væk, får du en fejl, ved navn.
Stav behandler hver model, din node rapporterer, som en model, også når den selv er en router (for eksempel en lokal auto-model, der vælger mellem andre modeller på din maskine). Med Foretræk eller Kun kan Smart Router vælge den, og forespørgselsloggen navngiver den, ikke den model, den sendte forespørgslen videre til. For at holde en router på din node ude af en routers valg, skal du sætte den routers Tunnel-noder til Ignorer og kalde din nodes router ved dens navn.## Tale til tekst på din node
En Whisper-model i vLLM (vllm serve NbAiLab/nb-whisper-large, eller enhver Whisper vLLM betjener) besvarer POST /v1/audio/transcriptions gennem din node, så lyden bliver på din maskine og stadig får din nøgle, forespørgselsloggen og policymuren.
- Testen beviser det: lydfilen på ét sekund får en transskription tilbage, et almindeligt chat-kald gør ikke, og modellen er angivet som en transskriptionsmodel — i
/v1/modelsundertranscriptionsog på nodesiden som transcription. - Kald den som
@dit-arbejdsområde/lokalt-id, eller ved dens katalognavn, når Stav kender modellen. Forespørgsler er gratis; forespørgselsloggen gemmer varighed, størrelse og format, aldrig lyden. - En node tager filer op til 24 MB.
- Lyd har ingen router, så der er ingen Kun-indstilling for det. En forespørgsel på en katalogmodel, som din node også betjener, går først til din node; hvis noden svigter, før den svarer, går forespørgslen én gang til kataloget. For at beholde lyd på din maskine uden undtagelse skal du kalde det private
@dit-arbejdsområde/…-navn eller fastgøre noden (…/@node). - Opdater din daemon (
stav-tunnel0.4.0 eller nyere), når vLLM ikke er den første server på maskinen: ældre versioner sender en upload til den første server, de finder.
Sådan vurderes den
Din node får niveau L4 og vises som L4 · Kunde-opereret. Du ejer og driver maskinen, så ingen tredjepart ser dataene. Landet, ingen dataopbevaring og ingen træning på dine data er det, du erklærede, da du tilføjede noden; Stav verificerer dem ikke, og dit arbejdsområde angiver det som sådan (erklæret NEJ, aldrig "verificeret"). Et bundniveau for politik, som en erklæret kendsgerning ikke lever op til, viser (customer_declared) som årsag.
Hvad det koster
- Forespørgsler til dine egne noder er gratis. Tokens tælles med i din brugsvisning, men trækkes aldrig.
- Hver node har et fast månedligt gebyr, som trækkes fra din tegnebog, når du tilføjer noden, og derefter den 1. i hver måned. Dit arbejdsområde viser gebyret, før du tilføjer en node, under Dit arbejdsområde → Forbind → Stav Tunnel. Hvis tegnebogen er tom, deaktiveres noden, indtil du tanker op.
Sikkerhed og privatliv
- Tokenet vises én gang og virker én gang. Derefter beviser din daemon sin identitet med en nøgle, den har genereret på maskinen (Ed25519), ved hver tilslutning.
- Hvis du tilbagekalder en node under Dit arbejdsområde → Forbind → Stav Tunnel, lukkes tunnelen inden for få sekunder; ingen forespørgsel når maskinen igen.
- Relay-serveren videresender bytes; den gemmer ikke prompter. Din daemon opbevarer ingen prompter lokalt og har ingen kode til selvopdatering — opdateringer kommer fra
brew upgrade(ellerapt/dnf). Hver version leveres med en software-stykliste (SBOM). - Din node, dens leverandørrække, dens endepunkter og dens private modeller er kun synlige for dit arbejdsområde — aldrig i det offentlige katalog, aldrig for et andet arbejdsområde.
Begrænsninger i denne version
- Backends: Ollama, LM Studio, llama.cpp, vLLM, SGLang. Alt andet, der taler OpenAIs chat-API, fungerer, når du navngiver det med
--backend, men er ikke testet. - Én maskine ad gangen: en klynge med mange replikaer af én model understøttes ikke endnu.
- Chat (
/v1/chat/completions,/v1/messages,/v1/responses), embeddings og lydtransskriptioner; ingen tekst til tale gennem en node. Tale til tekst er testet på vLLM; en anden server, der taler OpenAIs/v1/audio/transcriptionsog viser sine modeller på/v1/models, fungerer, når du navngiver den med--backend. - Op til 50 noder per arbejdsområde.