// documentación

Configurá tu acceso en 10 minutos

Esta guía te lleva desde cero hasta tu primera inferencia. El servicio es un proxy LiteLLM accesible por Tailscale que rutea a 5 modelos de nan.builders. Todo lo que necesitás: una invitación, Tailscale y un cliente OpenAI o Anthropic-compatible.

Requisitos previos:

• Invitación al grupo AutisticInference (te la damos)
• Sistema operativo: Linux, macOS, Windows o Android/iOS
• Cualquier cliente que hable la API de OpenAI o Anthropic

Endpoints que vas a usar:

OpenAI-compat → http://llm-inference:4000/v1
Anthropic-compat → http://llm-inference:4000 (Claude Code)
Área privada (UI) → http://llm-inference:4000/ui

Cómo funciona por dentro

El flujo de una petición es así:

flujo de petición
# tu cliente ──► Tailscale (cifrado wireguard) ──► LiteLLM proxy ──► nan.builders ──► modelo LLM
#                red 100.x.x.x, ACLs restringen     cuotas + keys       inferencia real
  • Tailscale crea una red privada punto-a-punto cifrada (WireGuard). Solo los nodos invitados se ven entre sí.
  • LiteLLM (en llm-inference:4000) recibe tu key, valida la cuota y rutea a nan.builders con la key maestra. Habla tanto el dialecto OpenAI (/v1/chat/completions) como el de Anthropic (/v1/messages).
  • nan.builders hace la inferencia real y devuelve tokens en streaming SSE.
  • Tu cuota mensual se descuenta del budget de tu usuario en LiteLLM, no de nan.builders directamente.

Paso 1 · Únete al tailnet

El administrador te manda una invitación por email a tu cuenta de Tailscale. Aceptala desde el link que recibís. Una vez aceptada, tu dispositivo aparece en el panel del tailnet, pero todavía está bloqueado por el Tailnet Lock hasta que un nodo con llave de confianza lo firme.

El Tailnet Lock es una capa extra de seguridad: ningún dispositivo nuevo puede comunicarse hasta que un administrador firme su nodekey. Es normal que veas "LOCKED OUT" al principio.

Paso 2 · Instalar y conectar Tailscale

Instalá el cliente de Tailscale para tu sistema y logueate con la misma cuenta a la que te llegó la invitación.

Linux (Arch / Debian / Fedora)

bash
# Arch
sudo pacman -S tailscale

# Debian/Ubuntu
curl -fsSL https://tailscale.com/install.sh | sh

# conectar
sudo tailscale up

# verificar estado
tailscale status

macOS

Descargá Tailscale de la Mac App Store, abrilo, logueate y activá el switch. Desde terminal también podés:

bash
brew install --cask tailscale
tailscale up

Windows

Descargá el instalador de tailscale.com/download/windows, instalalo, logueate y conectá.

Paso 3 · Firmar tu nodo

Una vez conectado a Tailscale, corré este comando en tu máquina para ver tu estado de Tailnet Lock:

bash
tailscale lock status

Si tu nodo está LOCKED OUT, el comando te va a mostrar dos hashes: tu nodekey y tu tlpub. Copialos y enviaselos al administrador. El admin corre en su máquina (que ya tiene una llave de confianza):

bash
sudo tailscale lock sign \
  nodekey:<tu-nodekey> \
  tlpub:<tu-tlpub>

Para no tener que usar sudo cada vez, el admin puede correr sudo tailscale set --operator=$USER una sola vez y firmar nodos sin root.

Cuando el admin firma, verificá de nuevo con tailscale status — tu nodo debería decir active y poder llegar al host llm-inference.

bash
# probar conectividad al proxy
curl http://llm-inference:4000/health/liveliness
# → "I'm alive!"

Paso 4 · Obtener tu API key

El administrador te crea un usuario en el proxy LiteLLM. Vas a recibir dos cosas:

  1. Tu email y contraseña para loguearte al área privada.
  2. Acceso al endpoint en http://llm-inference:4000/v1.

Loguearte al área privada

Abrí en el navegador (dentro de Tailscale) el botón de arriba a la derecha "Área privada", o directamente:

url
http://llm-inference:4000/ui

Logueate con tu email y contraseña. En la pestaña API Keys vas a ver tu key generada. Copiala (empieza con sk-).

¿No tenés una key? En el dashboard podés generar una nueva con el botón "Generate new key". Dejá los modelos en blanco para heredar los que te asignó el admin.

Cliente: pi agent

pi soporta providers custom vía ~/.pi/agent/models.json. Agregá un provider apuntando al proxy:

~/.pi/agent/models.json
"llm-inference": {
  "baseUrl": "http://llm-inference:4000/v1",
  "api": "openai-completions",
  "apiKey": "sk-XXXXXXXXXXXXXXXXXXXX",
  "compat": {
    "supportsDeveloperRole": false,
    "supportsReasoningEffort": true,
    "requiresReasoningContentOnAssistantMessages": true,
    "maxTokensField": "max_tokens"
  },
  "models": [
    { "id": "glm5.2", "name": "GLM 5.2", "reasoning": true, "contextWindow": 524288, "maxTokens": 16384 },
    { "id": "qwen3.6", "name": "Qwen 3.6", "reasoning": true, "contextWindow": 262144, "maxTokens": 16384 },
    { "id": "gemma4", "name": "Gemma 4", "reasoning": false, "contextWindow": 262144, "maxTokens": 8192 }
  ]
}

Después en pi usá /model para seleccionar el modelo y listo. Para que el provider sea el default, en ~/.pi/agent/settings.json poné "defaultProvider": "llm-inference".

Cliente: fx agent (Vercel)

fx expone tres providers: gateway (Vercel AI Gateway), codex y grok. Para apuntarlo a un proxy custom hay que usar el provider gateway con variables de entorno — pero fx exige que la URL sea loopback (127.0.0.1), así que necesitás un forward local.

Paso 1 · Forward local (loopback → proxy)

Con socat exponé el proxy de Tailscale en localhost:

bash
# instala socat si no lo tenés
sudo pacman -S socat   # Arch
sudo apt install socat # Debian

# forward 127.0.0.1:14000 → llm-inference:4000  (en background)
socat TCP-LISTEN:14000,bind=127.0.0.1,reuseaddr,fork \
  TCP:llm-inference:4000 &

Verificá: curl http://127.0.0.1:14000/health/liveliness"I'm alive!"

Paso 2 · Variables de entorno

~/.bashrc o ~/.zshrc
# AutisticInference vía fx
export FX_GATEWAY_BASE_URL="http://127.0.0.1:14000"
export FX_GATEWAY_CHAT_URL="http://127.0.0.1:14000/v1/chat/completions"
export FX_GATEWAY_API_KEY="sk-XXXXXXXXXXXXXXXXXXXX"
export FX_MODEL="glm5.2"

Paso 3 · Seleccioná el provider y probá

bash
fx provider gateway
fx models          # deberías ver los modelos del proxy
fx ask "¿Cuánto es 2+2?"

fx usa el formato del AI Gateway para descubrimiento de modelos (/coding-agent/v1/models). El endpoint de chat (FX_GATEWAY_CHAT_URL) sí habla OpenAI Chat Completions. Si fx models no lista, igualmente fx ask puede funcionar forzando FX_MODEL. Si fx no coopera, usá el endpoint directo con pi o opencode que son 100% OpenAI-compat.

Cliente: Claude Code (Anthropic)

Claude Code usa la API de Anthropic. LiteLLM expone un endpoint compatible con Anthropic Messages en /v1/messages, así que solo hay que redirigir el base URL y setear el modelo.

Variables de entorno

~/.bashrc o ~/.zshrc
# AutisticInference como backend de Claude Code
export ANTHROPIC_BASE_URL="http://llm-inference:4000"
export ANTHROPIC_API_KEY="sk-XXXXXXXXXXXXXXXXXXXX"
export ANTHROPIC_MODEL="glm5.2"
export ANTHROPIC_SMALL_FAST_MODEL="gemma4"

# opcional: que no actualice solo ni mande telemetría
export DISABLE_AUTOUPDATER=1
export CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1

Después lanzá claude normalmente. Claude Code va a enviar POST /v1/messages al proxy, que lo rutea a nan.builders con el modelo que seteaste.

Si Claude Code no respeta ANTHROPIC_MODEL, fijá el modelo por sesión con claude --model glm5.2. El ANTHROPIC_SMALL_FAST_MODEL es el modelo "haiku" que Claude Code usa para tareas internas — apuntalo a gemma4 (ilimitado) para no gastar la cuota premium.

Config persistente (opcional)

También podés ponerlo en ~/.claude/settings.json (o el archivo de tu proyecto):

~/.claude/settings.json
{
  "env": {
    "ANTHROPIC_BASE_URL": "http://llm-inference:4000",
    "ANTHROPIC_MODEL": "glm5.2",
    "ANTHROPIC_SMALL_FAST_MODEL": "gemma4"
  }
}

Cliente: Codex CLI (OpenAI)

Codex CLI lee ~/.codex/config.toml y soporta providers custom. Agregá uno apuntando al proxy:

~/.codex/config.toml
# modelo default
model = "glm5.2"
model_provider = "autistic"

[model_providers.autistic]
name = "AutisticInference"
base_url = "http://llm-inference:4000/v1"
env_key = "AUTISTIC_API_KEY"
wire_api = "chat"

Seteá la key en tu entorno y probá:

bash
export AUTISTIC_API_KEY="sk-XXXXXXXXXXXXXXXXXXXX"
codex "explicá qué es un closure en JS"

# o cambiá de modelo al vuelo
codex --model qwen3.6 "escribí un fizzbuzz en python"

wire_api = "chat" usa el endpoint Chat Completions (recomendado, más estable). Si tu versión de Codex prefiere la Responses API, cambialo a "responses" y base_url sin el /v1 final.

Cliente: opencode

opencode usa una config tipo opencode.json. Agregá un provider custom:

opencode.json
"models": {
  "glm5.2": {
    "provider": "autistic",
    "name": "GLM 5.2",
    "options": { "contextLength": 500000 }
  },
  "qwen3.6": {
    "provider": "autistic",
    "name": "Qwen 3.6",
    "options": { "contextLength": 262144 }
  }
},
"providers": {
  "autistic": {
    "npm": "@ai-sdk/openai-compatible",
    "options": {
      "baseURL": "http://llm-inference:4000/v1",
      "apiKey": "sk-XXXXXXXXXXXXXXXXXXXX"
    }
  }
}

Para no hardcodear la key, opencode también acepta variables de entorno: poné "apiKey": "{env:AUTISTIC_API_KEY}" y exportá AUTISTIC_API_KEY.

Cliente: curl / scripts

Para probar rápido o desde un script, usá el endpoint de Chat Completions:

bash
curl http://llm-inference:4000/v1/chat/completions \
  -H "Authorization: Bearer sk-XXXXXXXXXXXXXXXXXXXX" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "glm5.2",
    "messages": [{"role":"user","content":"¿Cuánto es 2+2?"}],
    "max_tokens": 200,
    "reasoning_effort": "high"
  }'

Con streaming SSE:

bash
curl -N http://llm-inference:4000/v1/chat/completions \
  -H "Authorization: Bearer sk-XXXXXXXXXXXXXXXXXXXX" \
  -H "Content-Type: application/json" \
  -d '{"model":"qwen3.6","messages":[{"role":"user","content":"hola"}],"stream":true}'

Para listar los modelos disponibles:

bash
curl http://llm-inference:4000/v1/models \
  -H "Authorization: Bearer sk-XXXXXXXXXXXXXXXXXXXX" | jq '.data[].id'

Modelos y límites — referencia

Cuota mensual total de nan.builders (suscripción de 1 miembro) y porción por usuario (÷4):

Modelo Contexto Cuota total Tu cuota (÷4) Rate limit Notas
glm5.2 500K 3,000M tok 750M tok 400M/4h · 5 conc. Premium · coding agéntico
qwen3.6 256K ilimitado 1.5M tpm Flagship · multimodal
deepseek-v4-flash 1M 2,000M tok 500M tok 1.5M tpm MoE 284B · tool calling
mimo-v2.5 1M 1,000M tok 250M tok 1.5M tpm Omnimodal · MIT license
gemma4 256K ilimitado 1.5M tpm Ligero · rápido

El límite de 400M tokens cada 4 horas de glm5.2 y los 5 concurrentes son globales: se comparten entre los 4 usuarios. LiteLLM limita a 2 paralelas por usuario para evitar que uno solo sature el servicio.

Tu cuota exacta

Cada usuario tiene el mismo presupuesto mensual para los modelos con cuota:

glm5.2

750M

tokens/mes (+ 100M/4h por usuario del global)

deepseek-v4-flash

500M

tokens/mes

mimo-v2.5

250M

tokens/mes

qwen3.6 y gemma4 son ilimitados para todos. Cuando se agota la cuota mensual de un modelo con límite, LiteLLM rechaza la petición hasta el reinicio del período (el día 1 de cada mes).

Área privada (Dashboard LiteLLM)

El área privada en http://llm-inference:4000/ui solo es accesible desde dentro del tailnet. Acá podés:

  • Tu consumo actual y budget restante por modelo
  • El historial de peticiones (qué modelo, cuántos tokens, costo virtual)
  • Generar y revocar tus API keys
  • Cuándo se resetea tu cuota mensual

El "costo" que ves en el dashboard es virtual: está calibrado para que el budget se interprete directamente como tokens. No te cobramos nada real. Para entrar usá el botón 🔒 Área privada arriba a la derecha.

FAQ · Troubleshooting

"LOCKED OUT" al conectarme

Es el Tailnet Lock. Necesitás que el admin firme tu nodekey. Corré tailscale lock status y mandale los dos hashes que aparecen.

"Connection refused" a llm-inference:4000

Verificá que Tailscale esté conectado (tailscale status muestra el nodo como active, no idle o offline). Probá curl http://llm-inference:4000/health/liveliness — debe responder "I'm alive!".

"Authentication error" / 401

Tu API key está mal o fue revocada. Generá una nueva desde el área privada. Asegurate de mandarla en el header Authorization: Bearer sk-....

"Budget exceeded" en un modelo

Alcanzaste tu cuota mensual de ese modelo. El contador se reinicia el día 1. Mientras tanto, podés usar qwen3.6 o gemma4 que son ilimitados.

glm5.2 me da error de "concurrent" o "rate limit"

El límite global de 5 concurrentes está saturado (probablemente otro usuario está usando el modelo). Reintentá en unos segundos. Si pasa seguido, acordá un horario con el grupo.

fx agent no lista los modelos

fx usa el protocolo del AI Gateway para descubrir modelos, que no es estándar OpenAI. Igualmente podés forzar el modelo con FX_MODEL=glm5.2 y usar fx ask. Si sigue sin cooperar, usá pi o opencode que son 100% compatibles.

Claude Code ignora ANTHROPIC_MODEL

Algunas versiones de Claude Code no leen esa var. Fijá el modelo por sesión con claude --model glm5.2 o ponelo en ~/.claude/settings.json.

¿Puedo cambiar mi contraseña?

Sí, desde el área privada en Settings → Change password. Si la olvidás, pedile al admin que te la resetee.

¿Mis prompts quedan guardados?

LiteLLM guarda logs de las peticiones (modelo, tokens, timestamp) para el tracking de cuota. El contenido completo de los prompts se puede ver en el panel del admin, pero no se comparte entre usuarios y no sale de la red Tailscale.