Dokumentasjon / LLM
LLM API
OpenAI-kompatibel chat completions servert fra en Mac mini M4 over Cloudflare Tunnel. mlx.tenki.no/v1 ber direkte mot mlx-lm.server; alle eksisterende OpenAI SDK-er fungerer ut av boksen.
Endepunkter
Tokenet ditt må ha scopen llm:chat. Caddy-forwardene er listet for fullstendighet, men du kaller mlx.tenki.no/v1/* direkte, Caddy validerer mot tabellen under transparent.
Kall fra OpenAI SDK (Python)
from openai import OpenAI
client = OpenAI( base_url="https://mlx.tenki.no/v1", api_key="tnk_AbCdEf...", # Tenki bearer token, scope llm:chat)
resp = client.chat.completions.create( model="hugin-2", # ignoreres av sidecaren, ta med for SDK-kompatibilitet messages=[{"role": "user", "content": "Hei"}],)print(resp.choices[0].message.content)Kall fra cURL
curl https://mlx.tenki.no/v1/chat/completions \ -H "Authorization: Bearer tnk_AbCdEf..." \ -H "Content-Type: application/json" \ -d '{ "model": "hugin-2", "messages": [{"role": "user", "content": "Hei"}] }'Streaming
Sett stream: true for å få server-sent events. Hvis du trenger usage-telemetri på en streaming-respons, send også stream_options: { include_usage: true }, det siste eventet vil da inneholde token-counts. (Tenki sin sidecar injiserer dette automatisk for telemetri-sporing, men det er trygt å inkludere selv.)
Modellen
Én modell kjører: Hugin 2, Tenki Labs sin egen norsk-finjusterte 4B-modell. Native kontekstvindu er 262 144 tokens (256K). model-feltet i request-bodyen ignoreres. Sidecaren stripper det før forwarding, så du kan sende hva du vil eller utelate det helt.
Reasoning på/av
Default: reasoning på. Modellen skriver tankesteg i et separat reasoning-felt i response, så svaret i content. Slå av med chat_template_kwargs:
{ "messages": [ {"role": "user", "content": "Hva er 7*8?"} ], "chat_template_kwargs": { "enable_thinking": false }, "max_tokens": 200}Reasoning sluker tokens. Når reasoning er på: sett max_tokens høyt nok (1000+ for korte svar, 4000+ for analytiske svar) så modellen får plass til både tankesteg og svar. Når reasoning er av: vanlige generation-cap holder (200–500 for korte svar).
Streaming-callere som vil se token-counts trenger ikke gjøre noe — sidecaren injiserer stream_options.include_usage = true automatisk.
Latency / kostnad
Inferens kjører på Apple Silicon (Mac mini M4, 16 GB unified memory). Throughput ~40 tok/s i 4-bit kvantisering. Native kontekstvindu er 262K tokens, men praktisk grense på 16 GB ligger rundt 100K+. Modellen er hybrid linear-attention, så lange kontekster er billige minne-messig (jfr. Awni Hannun). Ingen kostnad per token. Du betaler implisitt for VPS-en og Mac-en.