Lecciones de plataforma HF (2026-09-27)

Contexto: lo aprendido al provisionar cómputo para el servicio RAG/harnessing a clientes. Fuente: pruebas reales contra la cuenta [usuario] (PRO) y el token fine-grained de zshrc.

Cuenta y token

  • Cuenta [usuario] es PRO (isPro: true), email verificado, sin orgs.
  • El token HF_TOKEN de zshrc es fine-grained (role: fineGrained).
  • Permisos del token fine-grained (verificados):
    • ✅ Puede crear Spaces (create_repo OK).
    • ✅ Puede pushear código por git (git push OK).
    • ❌ NO puede subir archivos por API (upload_file → 403 “must use a write token”).
    • ❌ NO puede cambiar hardware (request_space_hardware → 403).
    • ❌ NO puede reiniciar el Space (restart_space → 403).
  • El token OAuth del MCP hf-mcp-server es distinto (scopes: read-repos, contribute-repos, inference-api). No sirve para crear Spaces.

Spaces ZeroGPU

  • ZeroGPU: gratis para todos; PRO = 40 min GPU/día, prioridad alta, hasta 10 Spaces.
  • Solo SDK Gradio (4+), Python 3.12.12/3.10.13, torch 2.8+.
  • Tamaño large = 48 GB (1× cuota), xlarge = 96 GB (2× cuota).
  • @spaces.GPU(duration=...); modelos deben cargarse en cuda a nivel módulo.
  • El campo zero_gpu: true del README NO asigna GPU. El hardware se asigna solo desde la web (Settings → Hardware → ZeroGPU). Verificado: con zero_gpu: true el runtime seguía en cpu-basic / hardware: None.
  • suggested_hardware del YAML no incluye ZeroGPU (solo flavors de pago).
  • preload_from_hub descarga los pesos en el build (arranque más rápido).

HF Sandboxes (Jobs)

  • hf_sandbox create (GPU a10g-small y CPU cpu-basic) → 402 Payment Required.
  • Incluso después de vincular tarjeta, el 402 persiste (la tarjeta no propaga a Jobs).
  • Conclusión: los Sandboxes de HF no son viables sin resolver billing.

Proveedores de inferencia (estado 2026-09-27)

  • HF Inference Providers: créditos agotados → 402 en chat y embeddings.
  • Groq free: funciona, pero límite 200k tokens/día por modelo (TPD). La evaluación completa de 20 muestras con RAGAS necesita ~1.2M tokens de juez → no cabe en un día.
    • gpt-oss-20b necesita reasoning_effort: low para JSON estricto (si no, 400).
    • qwen3.8-27b acepta json_object pero tiene rate limit OTPM bajo (1000/min).
  • RAGAS 0.4.3: importa langchain_community.chat_models.vertexai (removido en langchain-community 0.4.x) → requiere stub. El adaptador Instructor no parchea Groq (usa ruta Anthropic) → se registrando como provider="openai" con cliente Groq.

Escritura paralela (riesgo operativo)

  • Había 3 sesiones opencode corriendo; dos de ellas podían escribir en el mismo repo.
  • El Space recibió un commit ajeno (3e3eaff añadió zero_gpu: true y sdk_version).
  • Lección: verificar sesiones opencode activas antes de pushear a un repo compartido. Comando: ps aux | grep opencode.

Estado del servicio RAG (para retomar)

  • proyecto_1_dentistas: scaffold verificado (generación 20/20 con Groq; RAGAS parcial por TPD de Groq). Commits: 6993f87, ea88a39, 32b3d2b.
  • Space [usuario]/sonrisa-inference: creado, código pusheado, build OK, pero en CPU (no se asignó ZeroGPU) → la app no carga los modelos (~37 GB en CPU → OOM).
  • Siguiente paso: asignar ZeroGPU desde la web (Settings → Hardware → ZeroGPU), cerrar la sesión opencode paralela, y probar embed/rerank/chat + golden set 20/20.