Hopp til hovedinnhold
tenki

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.

Ingen ruter er per nå merket synlige på public docs. Spør en administrator.

Kall fra OpenAI SDK (Python)

openai-client.py
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
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:

enable_thinking: false
{  "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.