Ejecutar DisPatch y mis herramientas de IA en Docker: un archivo, un comando

Categoría
IA y LLM Local
Publicado
19 octubre 2026
Actualizado
19 octubre 2026
Por
Jacob Lloyd — escrito con ayuda de IA, después del proyecto
Tiempo de lectura
19 min de lectura

En palabras simples: DisPatch es una app de chat que ejecutas en tu propio equipo y a la que puedes acceder desde cualquier teléfono o portátil dentro de casa. Docker es un programa gratuito que ejecuta software de este tipo en un entorno aislado, por lo que no necesitas instalar Python ni nada similar. Esta página te guía para pasar de cero a tener un chat de IA funcional usando un pequeño archivo de texto y un solo comando; además puedes incluir un modelo de IA pequeño que se ejecuta en tu propio procesador, por lo que no necesitas cuenta ni clave API.

Ejecuto mi propia aplicación de chat basada en IA, DisPatch, para uso doméstico. Hasta este mes, instalarla requería Python, un entorno virtual y un archivo de servicio. Ahora se distribuye como una imagen Docker; la configuración completa se reduce a un único archivo y un solo comando en tu propio servidor. Esta página te guiará desde una carpeta vacía hasta tener un chat operativo, con un pequeño modelo de IA que funciona directamente en tu procesador para que puedas probarlo sin necesidad de registrarte en ningún sitio.

Todos los comandos que aparecen aquí los ejecuté el 19 de octubre de 2026. En esta máquina no tengo Docker Desktop, por lo que utilicé Podman 5.8 junto con Docker Compose 5.6 en Linux. Los comandos son idénticos; cuando Podman necesitaba alguna configuración adicional, lo indico en la sección técnica al final.

En resumen

  • Lo que obtienes: DisPatch, una aplicación de chat privada para navegador y teléfono, además de un pequeño modelo de IA opcional; ambos se ejecutan en contenedores dentro de tu equipo.
  • Lo que debes hacer: instalar Docker, guardar un archivo de 26 líneas, ejecutar docker compose up -d, abrir http://localhost:8765 y seguir el asistente de configuración de seis pasos.
  • Costo: nada. La imagen de DisPatch ocupa unos 600 MB; la imagen del servidor de modelos, 860 MB; el modelo en sí descarga 2,5 GB.
  • Lo que nunca ocurre: tus conversaciones no se envían a ningún lugar sin tu autorización. Con el modelo local, nada abandona tu equipo salvo los datos de clima o búsquedas web que solicites.
  • La verdad: a fecha de 19 de octubre de 2026, DisPatch es la única de mis imágenes publicada en un registro; las demás herramientas se compilan desde su código fuente con una modificación sencilla. El modelo local es adecuado para preguntas cotidianas, pero no para razonamientos complejos.

Resultado final

DisPatch en un navegador. Atlas, el personaje predeterminado, responde a una pregunta sobre cómo mantener la albahaca viva en el alféizar; ofrece seis consejos numerados. Luego, ante una consulta sobre el clima en Lisboa, muestra un aviso de búsqueda meteorológica y revela la temperatura actual, el viento y un pronóstico suave para la semana. Debajo de cada respuesta aparece el nombre del modelo: Qwen3 4B.
DisPatch ejecutándose en Docker, dialogando con un modelo de 4 mil millones de parámetros que opera en el procesador local. La respuesta climática se obtuvo mediante una consulta en tiempo real; el pequeño aviso lo confirma.

Atlas es el personaje con el que comienza cualquier nueva instancia de DisPatch. Responde a preguntas y, si el modelo admite herramientas, puede buscar información: búsqueda web, recuperación de páginas, clima, Wikipedia, tipos de cambio, hora actual o cálculos matemáticos. La misma conversación se reproduce en el teléfono:

La misma conversación de DisPatch vista en pantalla de teléfono: los consejos sobre la albahaca, la pregunta meteorológica, el aviso de búsqueda y la respuesta de Atlas; también se observan el cuadro de texto para mensajes y las pestañas de Bots, Chats y Mensajes en la parte inferior.
La misma interacción, ahora a escala móvil.

Para conocer otras funcionalidades de DisPatch (perfiles individuales para cada miembro de la familia, modo infantil, copias de seguridad), consulta el artículo sobre DisPatch 3.0. Esta página se centra exclusivamente en su puesta en marcha.

Paso 1: instalar Docker

Para verificar que todo funciona, abre una terminal (PowerShell en Windows) y escribe docker compose version. Cualquier número de versión indica que estás listo.

Paso 2: crear una carpeta y un archivo

Crea una carpeta llamada dispatch y guarda en ella lo siguiente como docker-compose.yml:

services:
  dispatch:
    image: ghcr.io/laserlloyd/dispatch_chat:main
    ports:
      - "8765:8765"
    volumes:
      - dispatch-data:/data
    restart: unless-stopped
    init: true
    stop_grace_period: 30s

  # Opcional: un pequeño modelo de IA que se ejecuta en tu procesador, sin necesidad de cuenta.
  # Elimina este bloque si prefieres usar Ollama, LM Studio o algún servicio en la nube.
  model:
    image: ghcr.io/ggml-org/llama.cpp:server-b11723
    command: ["-hf", "unsloth/Qwen3-4B-Instruct-2507-GGUF:Q4_K_M", "--jinja",
              "--host", "0.0.0.0", "--port", "8080", "--ctx-size", "8192"]
    environment:
      LLAMA_CACHE: /models
    volumes:
      - model-files:/models
    restart: unless-stopped

volumes:
  dispatch-data:
  model-files:

Dos servicios. dispatch es la aplicación de chat; model corresponde al servidor de llama.cpp, que descarga el modelo Qwen3 4B Instruct (2,5 GB) en su primera ejecución y lo conserva. Tus conversaciones se almacenan en un volumen llamado dispatch-data, el cual permanece intacto tras actualizaciones o reinicios.

"8765:8765" permite que otros dispositivos de tu red accedan a DisPatch, algo muy útil para un chat familiar. Si prefieres limitarlo exclusivamente a este equipo, escribe "127.0.0.1:8765:8765" en su lugar.

Paso 3: ponerlo en marcha

Dentro de la carpeta dispatch, ejecuta en la terminal:

docker compose up -d
docker compose ps

En la primera ejecución se descargan ambas imágenes y el modelo, por lo que deberás esperar unos minutos. En mi caso, DisPatch respondió apenas 5 segundos después de que su imagen se descargara; el servidor del modelo tardó unos 20 segundos en completar la descarga y cargar el modelo, dependiendo de mi conexión. docker compose ps debería mostrar ambos servicios como Up.

Paso 4: crear tu cuenta

Abre http://localhost:8765 en el navegador. Una nueva instancia de DisPatch permanece bloqueada hasta que se define un propietario; como funciona dentro de un contenedor, solicita un token de configuración único. Obténlo consultando los registros:

docker compose logs dispatch | grep "SETUP TOKEN"

Si grep no está disponible (en Windows), ejecuta docker compose logs dispatch y busca la línea que comienza con SETUP TOKEN:. Este token varía en cada inicio de DisPatch y pierde validez una vez creada la cuenta del propietario.

Asistente de configuración de DisPatch, paso 1: Tu cuenta. Se introduce el nombre Ada, se escribe la contraseña dos veces, el PIN opcional queda vacío; además, se abre la sección “Configuración desde otro equipo” donde se pega el token de configuración. Debajo hay un botón para crear la cuenta.
Paso 1 de 6: Introduce un nombre y una contraseña, abre la opción “Configuración desde otro equipo” y pega el token.

La contraseña debe contener al menos 8 caracteres. El PIN es opcional y sirve para desbloquear rápidamente la aplicación. Si lo configuras, DisPatch genera un código de recuperación que se guarda en sus datos; asegúrate de copiarlo en un lugar seguro:

docker compose exec dispatch cat /data/RECOVERY-CODE.txt

Paso 5: conectar la IA

El paso 2 del asistente busca un servidor de modelos dentro del mismo equipo. Dentro de Docker, no detecta automáticamente el servicio model, por lo que debes indicarlo manualmente:

Paso 2 del asistente: Un modelo. Se selecciona “OpenAI-compatible”, se escribe la dirección http://model:8080/v1, el campo de clave API queda vacío y el modelo predeterminado es unsloth/Qwen3-4B-Instruct-2507-GGUF:Q4_K_M. En la sección “Probar y guardar” aparece un mensaje verde indicando que hay 1 modelo disponible, con un tiempo de respuesta de 14 ms; el servidor es compatible con OpenAI y Atlas ya lo utiliza.
Selecciona “OpenAI-compatible”, introduce la dirección http://model:8080/v1, deja la clave en blanco y elige el modelo indicado. El botón “Probar y guardar” debería mostrar un mensaje verde.
CampoValor a introducir
TipoOpenAI-compatible
Direcciónhttp://model:8080/v1
Clave APIdejar vacío
Modelo predeterminadounsloth/Qwen3-4B-Instruct-2507-GGUF:Q4_K_M

¿Prefieres usar un modelo en la nube? Selecciona esa opción y pega tu clave correspondiente. Probé este escenario con un proveedor compatible con OpenAI: el botón “Probar y guardar” mostró los modelos disponibles y Atlas respondió correctamente. La clave se almacena en los datos de DisPatch, no en el archivo de configuración.

Paso 6: finalizar y saludar

Los pasos restantes son breves. La opción de voz es un complemento que puedes omitir; “Familia” sirve para añadir más usuarios (puedes hacerlo después). En “Red”, indicas quién puede acceder a DisPatch: elige la misma opción que seleccionaste para el puerto en el paso 2.

Paso 6 del asistente: Finalizado. Hay marcas de verificación junto a “Cuenta del propietario”, “Conexión al modelo” y “Quién puede acceder a DisPatch”; mientras que “Voz” y “Familia” muestran guiones; los círculos abiertos corresponden a “Copias de seguridad cifradas” y “Código de recuperación guardado”. Al final hay un botón para finalizar.
Último paso: una lista de elementos ya configurados y otros opcionales.

Pulsa Finalizar. Si tras hacerlo la página sigue mostrando el formulario de creación de cuenta, recarga la página. Se trata de un error visual en la versión actual (la cuenta ya se ha creado; solo persiste el formulario antiguo). Luego selecciona a Atlas en el panel izquierdo, haz clic en + para iniciar una nueva conversación y hazle alguna pregunta.

Para usar DisPatch desde un teléfono conectado a la misma red Wi‑Fi, abre http://<your computer's address>:8765. La instalación en pantalla de inicio, las notificaciones y el micrófono requieren HTTPS; este tema se aborda en la sección técnica.

Con esto concluye toda la configuración. Lo que sigue sirve para profundizar en el funcionamiento, proteger tus datos o integrar mis demás herramientas.

Cómo encajan todas las piezas

La imagen de DisPatch se ejecuta como un usuario ordinario (uid 1000), no como root. Todo lo que escribe va a /data, que corresponde al volumen dispatch-data: la base de datos SQLite, las cargas, los avatares, la configuración y sus propias copias de seguridad cada seis horas. Si elimina el contenedor no se pierde nada; si elimina el volumen, sí se pierde todo.

La etiqueta de imagen main sigue la rama principal del repositorio de DisPatch. Las etiquetas publicadas el 19 de octubre de 2026 son main y una etiqueta sha-<commit> por cada compilación; aún no existen etiquetas con números de versión. Si desea que la imagen permanezca igual hasta que usted decida actualizarla, utilice una etiqueta sha- desde la página del paquete. Hay imágenes disponibles para procesadores Intel/AMD de 64 bits y para ARM; yo usé la versión para Intel/AMD.

Sus datos: haga copias de seguridad, restáurelos y actualícelos con seguridad

Primero detenga DisPatch para que su base de datos se escriba por completo, luego copie el volumen a un archivo:

docker compose stop dispatch
docker run --rm -v dispatch_dispatch-data:/data:ro -v "$PWD":/backup alpine \
  tar czf /backup/dispatch-backup.tgz -C /data .
docker compose start dispatch

Compose nombra el volumen según la carpeta; por ejemplo, una carpeta llamada dispatch genera el nombre dispatch_dispatch-data. El comando docker volume ls muestra el nombre real. En mi prueba con unos pocos chats, el archivo resultante fue de 3,7 MB.

Para restaurar en un volumen nuevo (yo restablecí el mío y lancé otro DisPatch: el propietario y los 8 mensajes permanecieron igual):

docker volume create dispatch_dispatch-data
docker run --rm -v dispatch_dispatch-data:/data -v "$PWD":/backup:ro alpine \
  sh -c 'tar xzf /backup/dispatch-backup.tgz -C /data && chown -R 1000:1000 /data'
docker compose up -d

No copie el archivo chats.db por separado desde un contenedor en ejecución: los mensajes recientes se guardan en el archivo chats.db-wal que está junto a él hasta que DisPatch se detiene.

La actualización requiere dos comandos. En una instalación con datos ya existentes ejecuté docker compose down, pull y up -d; el propietario y todos los mensajes se mantuvieron intactos, sin que apareciera un nuevo token de configuración.

docker compose pull
docker compose up -d

Haga una copia de seguridad antes de actualizar entre versiones importantes; DisPatch migra su base de datos al iniciarse, y una imagen antigua podría no ser capaz de leer la versión migrada.

Valores predeterminados de seguridad y un ajuste que debe revisar

  • Bloqueado hasta que exista un propietario. Hasta completar el primer paso del asistente, la red solo muestra una página de inicio de sesión; para crear el propietario se necesita el token que aparece en los registros.
  • Los visitantes sin iniciar sesión ven la vista Restringida. Esto me sorprendió durante las pruebas: desde un navegador sin autenticación pude abrir Atlas y recibir respuestas. Esa es la lógica de DisPatch 3.0 (un invitado se trata como un perfil Restringido infantil, con 200 respuestas diarias permitidas), pero dichas respuestas usan su conexión a IA. Si DisPatch está en su red y cuenta con una clave de pago para la IA en la nube, cambie en Configuración → Todas las configuraciones → Personas y perfiles la opción “Un dispositivo que no ha iniciado sesión” a Solo pantalla de inicio de sesión.
  • Quién puede acceder depende de la línea del puerto. "8765:8765" permite el acceso a toda su red; "127.0.0.1:8765:8765" limita el acceso solo a este equipo. El contenedor siempre escucha en todas las direcciones de su propia red interna.
  • El uso de HTTPS queda a su criterio. El archivo docker-compose.yml del repositorio incluye un proxy Caddy opcional (--profile proxy) para asignar un nombre de host real con certificados; en esta ocasión no lo probé. Si coloca nginx al frente, no olvide incluir proxy_set_header Host $host;, pues de lo contrario el chat se cargará pero no actualizará (DisPatch verifica que el origen del navegador coincida con el encabezado Host).
  • El servidor del modelo no tiene clave. Su puerto no se publica en el archivo anterior, por lo que solo DisPatch puede comunicarse con él. No agregue una línea ports: a model a menos que también proporcione a llama.cpp un --api-key.

La guía completa de Docker para DisPatch, incluyendo montajes bind, identificadores de usuario y la integración del agente que no funciona bien dentro de un contenedor, se encuentra en docs/deploy-docker.md del repositorio.

Cómo integrar mis otras herramientas

Cada una de mis demás herramientas cuenta con un archivo deploy/compose/compose.yml en su repositorio. Sus imágenes aún no están en ningún registro, así que deberá clonar el repositorio y añadir --build. En mi caso cada compilación tardó menos de un minuto, ya que las imágenes base ya estaban descargadas. El 19 de octubre de 2026 compilé e inicié cada una a partir de un clon reciente de GitHub:

HerramientaDescripciónImagenPuertoLo que verifiqué
DisPatchla aplicación de chatpublicada, 599 MB8765todo lo descrito arriba
MailForgeasistente de correo que nunca envía mensajes por sí solocompilada, 420 MB8090el panel se abre, pero sin buzón conectado
InfoForge + kiwixbúsqueda offline en Wikipedia para respuestas de IAcompilada, 128 MB; más Kiwix de 66 MBninguno (Kiwix usa el 8090)doctor y search funcionaron con un archivo de Wikipedia de 23 MB
ThemeForgepágina de previsualización de temascompilada, 13,8 MB8185la página se abre correctamente
StudioForgeservidor de modelos con GPUcompilada, 568 MB (Vulkan)1234, 8080, 1235ofreció un modelo en una GPU integrada AMD; detalles más abajo
CrucibleForgeherramienta de evaluación de modeloscompilada, 129 MB8777se inició y abrió; no se ejecutó ninguna prueba
TransForgetraductor de sitios webcompiladaningunono lo probé en esta ocasión

Las dimensiones indicadas son las que reportó Podman en disco. Los archivos compose de cada herramienta publican sus puertos solo en 127.0.0.1, a menos que usted modifique ese comportamiento.

MailForge

MailForge cifra las contraseñas de sus buzones mediante una frase de contraseña que usted mismo elige; esta no puede recuperarse, así que guárdela en un gestor de contraseñas. Además, debe configurar LLM_BASE_URL para que apunte a su propio servidor de modelos (192.0.2.10 es un ejemplo de dirección); por defecto se usa el puerto 1234 del host Docker, y cualquier respuesta que ese servidor envíe será utilizada por MailForge.

git clone https://github.com/LaserLloyd/MailForge.git
cd MailForge
read -rsp 'Frase de contraseña para el keyring de MailForge: ' MAILFORGE_KEYRING_PASSWORD; export MAILFORGE_KEYRING_PASSWORD
LLM_BASE_URL=http://192.0.2.10:1234/v1 \
  docker compose -f deploy/compose/compose.yml up -d --build
docker compose -f deploy/compose/compose.yml logs app | grep "MailForge UI"

En los registros aparecerá una dirección http://127.0.0.1:8090/?token=…; ábrala en su navegador.

Panel de control de MailForge en un navegador, tras una instalación reciente: los contadores de correos recibidos, sin leer, que requieren respuesta, que necesitan acción y borradores generados por IA aparecen todos en 0; también hay botones para redactar y abrir el buzón, además de paneles vacíos titulados 'Necesita respuesta' y 'Buzón reciente'. En la barra superior se indica que se requiere aprobación humana, que nada se envía sin su consentimiento y que no hay buzones configurados.
Instancia recién instalada de MailForge en Docker, antes de añadir ningún buzón.

InfoForge y Wikipedia sin conexión

Coloque un archivo .zim de la biblioteca Kiwix en la carpeta deploy/compose/zims/ y nómbrelo según el archivo infoforge.config.yaml (cópielo de infoforge.config.example.yaml). Para probar, utilicé el archivo reducido de 23 MB titulado “Chemistry by Wikipedia”.

git clone https://github.com/LaserLloyd/InfoForge.git
cd InfoForge/deploy/compose
docker compose up -d kiwix
docker compose --profile cli build infoforge
docker compose --profile cli run --rm infoforge doctor
docker compose --profile cli run --rm infoforge search "noble gas"

La búsqueda funciona perfectamente sin necesidad de ningún modelo de IA:

[1] Noble Gas  (puntuación 19.0, 4222 caracteres)
[2] Gas  (puntuación 16.0, 1586 caracteres)
[3] Compuesto de gas noble  (puntuación 10.5, 2045 caracteres)

Para usar infoforge ask, es preciso disponer de un servidor de modelos en la dirección indicada en base_url. Con esa dirección de ejemplo, el comando doctor supera todas las comprobaciones, excepto la de “llm primary”, lo cual es lógico.

ThemeForge

git clone https://github.com/LaserLloyd/ThemeForge.git
cd ThemeForge
docker compose -f deploy/compose/compose.yml up -d --build

Luego abre http://localhost:8185.

Página de ejemplo de ThemeForge en la paleta Daylight: botones de selección de paleta en la parte superior, seguidos de interruptores, casillas de verificación, botones de opción y pestañas mostradas en sus estados activado, desactivado, seleccionado y deshabilitado; además, una fila con distintos estilos de botones, campos de formulario con estado de error y muestras de superficies.
La página de ejemplo de ThemeForge dentro de su contenedor de 13,8 MB.
## Un servidor de modelos de GPU: StudioForge

StudioForge es mi propio servidor de modelos. Ejecuta los modelos en una tarjeta gráfica, gestiona múltiples modelos y varios clientes; además, a partir de la versión 2.0 exige una cuenta de propietario y una clave API para cada cliente. Como su imagen aún no está disponible en ningún registro, este paso consiste precisamente en crearla.

En un principio pensaba escribir “solo con NVIDIA” aquí. Sin embargo, la mini PC que probé no cuenta con ninguna tarjeta gráfica de NVIDIA; solo tiene la GPU Radeon integrada de AMD, presente en el procesador Ryzen AI 9 365. Aun así compilé la imagen Vulkan, le pasé la GPU como parámetro y todo funcionó: al iniciarse por primera vez, StudioForge descargó automáticamente desde GitHub el motor llama.cpp precompilado adecuado, lo probó y logró ejecutar el modelo Qwen3 4B con todas sus capas en la GPU, alcanzando entre 23 y 28 tokens por segundo. En comparación, el servicio de model que utiliza exclusivamente la CPU mencionado arriba alcanza 22 tokens por segundo con el mismo modelo; por tanto, en este procesador la GPU libera carga del procesador más de lo que acelera realmente las respuestas.

Panel de control de StudioForge 2.0.1: pestaña ‘Overview’. Se muestra una GPU, una GPU integrada AMD detectada mediante Vulkan; se indica que se están utilizando 5.68 GiB de los 10.48 GiB disponibles. También aparece un proceso llamado llama-server y el modelo Qwen3-4B-Instruct-2507 Q4_K_M en estado inactivo, con una velocidad de generación de 22.79 tokens por segundo según la versión b11669 del motor.
StudioForge ejecutándose en Docker, utilizando una GPU integrada AMD mediante Vulkan; un modelo ya cargado.
git clone https://github.com/LaserLloyd/StudioForge.git
cd StudioForge/deploy/compose
cp env.example .env
# En el archivo .env: SF_BACKEND=vulkan, SF_MODELS=/ruta/a/sus/archivos/gguf,
#                  SF_OWNER_PASSWORD (una contraseña de 10 o más caracteres),
#                  SF_VIDEO_GID y SF_RENDER_GID = los números que devuelve: getent group video render
docker compose -f compose.yml -f compose.vulkan.yml build
docker compose -f compose.yml -f compose.vulkan.yml up -d
docker compose -f compose.yml -f compose.vulkan.yml exec studioforge \
  studioforge keys create --name dispatch --scope inference

El último comando imprime una tecla una sola vez. El panel de control se encuentra en http://localhost:8080 (usuario owner, tu contraseña). Para una tarjeta gráfica NVIDIA, el archivo correspondiente es compose.cuda.yml y SF_BACKEND=cuda; no he probado esa configuración aquí, además la imagen de CUDA ocupa mucho más espacio.

DisPatch y StudioForge, juntos

El repositorio de DisPatch contiene el archivo deploy/compose/stack.yml, que inicia ambos servicios en una misma red y configura automáticamente la conexión de DisPatch a StudioForge. De forma predeterminada intenta descargar una imagen de StudioForge que aún no es pública, así que debes apuntarlo a la imagen que acabas de compilar. Estos son los valores que añadí a stack.env:

git clone https://github.com/LaserLloyd/DisPatch_Chat.git
cd DisPatch_Chat
cp deploy/compose/stack.env.example deploy/compose/stack.env
# agregar a deploy/compose/stack.env:
#   DISPATCH_IMAGE=ghcr.io/laserlloyd/dispatch_chat:main
#   STUDIOFORGE_IMAGE=ghcr.io/laserlloyd/studioforge:2.0.1-vulkan
#   STUDIOFORGE_MODELS=/path/to/your/gguf/files
#   STACK_MODEL=<el id del modelo que muestra StudioForge>
#   SF_OWNER_PASSWORD (la misma contraseña de propietario de más de 10 caracteres)

El archivo de configuración reserva una GPU de NVIDIA. Para sistemas con AMD o Intel usando Vulkan, reemplacé esa sección por otro pequeño archivo: stack-amd.yml:

services:
  studioforge:
    deploy: !reset {}
    devices: ["/dev/dri:/dev/dri"]
    group_add: ["39", "105"]   # los números de grupo de video y renderizado en tu sistema
docker compose -f deploy/compose/stack.yml -f stack-amd.yml \
  --env-file deploy/compose/stack.env up -d
docker compose -f deploy/compose/stack.yml -f stack-amd.yml \
  --env-file deploy/compose/stack.env exec studioforge \
  studioforge keys create --name dispatch --scope inference

A continuación, completa el asistente de configuración de DisPatch como se indicó antes; abre Configuración → Conexiones, haz clic en Editar junto a la conexión a StudioForge, pega la clave generada y pulsa Probar.

Configuración de DisPatch, pestaña Conexiones: una conexión llamada StudioForge en http://studioforge:1234/v1; la clave ya está guardada y es utilizada por Atlas. Aparece un recuadro verde indicando que hay 2 modelos disponibles y un tiempo de respuesta de 14 ms; se muestra que se usa StudioForge 2.0.1.
La conexión a StudioForge ya configurada tras pegar la clave. Atlas, entonces, respondió mediante StudioForge y la GPU.

El identificador del modelo se obtiene mediante curl -H "Authorization: Bearer <key>" http://localhost:1234/v1/models o desde la pestaña Modelos del panel. Si tus modelos están en una carpeta descargada de Hugging Face, el identificador será toda esa ruta; aunque resulta larga, funciona sin problemas.

## Posibles inconvenientes
  • Recarga tras finalizar el asistente. En la versión que probé, el formulario de creación de cuenta de propietario permanece visible después de cerrar el asistente. La cuenta sí se crea; simplemente recarga la página.
  • El asistente no detecta el modelo por sí solo. Dentro de Docker, su búsqueda se limita al propio contenedor y no mira otros servicios. Debes especificar http://model:8080/v1.
  • Modelos pequeños y consultas. Con el modelo Qwen2.5 de 1,5 mil millones de parámetros, Atlas a veces imprimía una línea ficticia del tipo “Buscando en la web: …” en lugar de invocar la herramienta. El modelo de 4 mil millones de parámetros mencionado arriba sí ejecutaba correctamente la consulta meteorológica en cada prueba. Aquí, cuanto mayor sea el modelo, mejor.
  • El código de recuperación solo aparece si defines un PIN. Si solo usas una contraseña, no se genera ningún archivo RECOVERY-CODE.txt, aunque la lista de tareas del asistente indique lo contrario.
  • Dos herramientas compiten por el puerto 8090. Tanto MailForge como kiwix, perteneciente a InfoForge, usan por defecto el puerto 8090 en este equipo. Si ejecutas ambos, configura HOST_PORT para MailForge o KIWIX_PORT para kiwix.
  • El primer inicio de StudioForge requiere GitHub. Descarga el motor llama.cpp mediante la API de GitHub, que permite 60 solicitudes anónimas por hora por dirección IP. En mi primera prueba se agotó ese límite; la imagen Vulkan ligera intentó entonces compilar el motor desde cero, algo imposible (no incluye git), y devolvió el mensaje can_serve: false. Un reinicio tras superar el límite lo solucionó. Según los propios registros de StudioForge, definir GITHUB_TOKEN en .env aumenta ese límite.
  • docker compose down -v elimina tus conversaciones. En cambio, el comando down normal no lo hace.
  • Usuarios de Podman: en Fedora y otros sistemas con SELinux, añade :z al montar la carpeta de copia de seguridad ("$PWD":/backup:z). Podman con Docker Compose también rechazó los archivos de configuración de las herramientas que carecían de línea test: dentro del bloque healthcheck (“debe definirse un comando de estado”); para solucionarlo, añadí ese comando basado en cada Dockerfile en un pequeño archivo de sobrescritura. Para kiwix ejecutándose sin privilegios de root, es necesario usar KIWIX_USER=0. Los usuarios de Docker pueden ignorar este punto.
## Lo que no probé
  • Docker Desktop en Windows o Mac. Yo utilicé Podman con Docker Compose en Linux, exclusivamente para arquitecturas x86-64.
  • Ollama o LM Studio ejecutándose fuera de Docker en el mismo equipo. En Docker Desktop la dirección sería http://host.docker.internal:11434/v1 para Ollama, y ese servidor debe aceptar conexiones desde el contenedor; no he podido confirmarlo.
  • Las imágenes de StudioForge adaptadas a NVIDIA o ROCm, la compilación del complemento de voz (VOICE=1), el perfil HTTPS de Caddy y TransForge.
  • El comando ask de InfoForge con algún modelo, así como la ejecución de pruebas de rendimiento en CrucibleForge.

DisPatch en GitHub StudioForge MailForge InfoForge

Relacionado: DisPatch 3.0: perfiles familiares y el asistente de configuración, DisPatch, StudioForge y cómo hacer que una IA adapte cualquier proyecto a tu sistema.


← Más de IA y LLM Local