Esta es una guía parcial de uso y operación. La guía completa está reservada a suscriptores y usuarios activos de la plataforma. Ofrecemos esta selección pública para que quien evalúe el sistema obtenga una primera noción de sus capacidades y flujos. El contenido de la guía privada puede variar con las mejoras continuas del producto.
Chat
Quien no es admin encarga trabajo aquí, no en la Consola. Hay dos Conversation UI en Development; ambas hablan con el mismo gateway society-chat (API OpenAI-compatible).
Dónde apunta
| Entorno | Conversation UI | Conversation UI | Gateway |
|---|---|---|---|
| Development | http://127.0.0.1:3000 (contenedor aparte) | http://127.0.0.1:3080 (stack infra/conversation-ui/) | http://127.0.0.1:8094/v1 |
| Identia | copilot.identia.do (proveedor de identidad (OIDC)) | chat.identia.do → :3080; admin chat-admin.identia.do → :3081 | society-chat:8094/v1 |
| LegalDesign | copiloto público detrás de proveedor de identidad (OIDC) | chat.legaldesign.do → :3080; admin chat-admin.legaldesign.do → :3081 | society-chat:8094/v1 |
Conexión OpenAI-compatible (lo que configura cada UI hacia SiS):
- Base URL:
…/v1(en Dev:http://127.0.0.1:8094/v1desde el host;http://society-chat:8094/v1dentro de orquestador de contenedores) - API key:
SOCIETY_CHAT_API_KEY(en Dev puede ir vacío; en Conversation UI va eninfra/conversation-ui/.env) - Modelos: ids
society/*que listaGET /v1/models
Decisión sustituir-o-coexistir Conversation UI vs Conversation UI: abierta. Hoy conviven en los dos entornos.
Conversation UI — configuración paso a paso (Dev)
Conversation UI no es society-chat. Connections y modelos viven en su SQLite (webui.db), no en variables de entorno del compose R6.
1. Arrancar y autenticar
- Comprueba que responde:
curl -sf http://localhost:3000/→200. - Abre
http://localhost:3000(no127.0.0.1— proveedor de identidad (OIDC)/IdentIA registra el redirect enlocalhost). - Si ves Continue with IdentIA, pulsa y completa proveedor de identidad (OIDC) (misma cuenta que la Consola en clientes con SSO).

2. Conectar society-chat
- Menú Admin (o engranaje) → Settings → Connections (ruta típica:
/admin/settings/connections). - Add connection → tipo OpenAI / OpenAI-compatible.
- Rellena:
| Campo | Valor Dev |
|---|---|
| URL / Base URL | http://society-chat:8094/v1 desde el contenedor Conversation UI (red compose). En UI manual: Admin → Settings → Connections → OpenAI API → Add connection con esa URL y la clave de SOCIETY_CHAT_API_KEY. Atajo Dev: docusaurus/scripts/sync-conversation-ui-society-key.sh (escribe lo mismo en webui.db). |
| API Key | valor de SOCIETY_CHAT_API_KEY en .env (si rotas la clave, vuelve a ejecutar el script de sync) |
| Model IDs | dejar que el cliente descubra vía GET /v1/models |
- Save y Verify si la UI lo ofrece.
Si el selector de modelos está vacío: la conexión no está guardada o la URL no alcanza
society-chatdesde el contenedor Conversation UI.

En la captura: tras guardar la conexión a
society-chat(paso 2), el desplegable Search a model (a la izquierda del micrófono en la barra del chat) lista idssociety/*(p. ej.society/ask-rag,society/architect).
3. Elegir modelo y chatear
- En la barra del chat, abre el selector de modelo a la izquierda del micrófono (muestra el id actual, p. ej.
society/architect, o Search a model si aún no hay uno). - En el desplegable Search a model, elige según el caso (tabla abajo).
- Escribe el prompt y envía.

| Modelo | Cuándo usarlo |
|---|---|
society/architect | Intake de institución; persiste el SPEC (única puerta curada al architect del Primary) |
society/operator | Chat con el operator del Primary |
society/ask-rag | Consulta RAG del researcher configurado en SOCIETY_CHAT_RESEARCH_BRIEF_* |
society/research-brief | Pipeline researcher → writer → auditor; auto-RAG si hay corpus |
society/profile/<host>/<profile> | Chat directo con un profile vivo (p. ej. society/profile/ldteam-operaciones/ld-chief-of-staff) |
SSO de copilotos públicos: tools/ops/copilots-sso.sh. Contraseña local bloqueada en servidor (403).
Conversation UI — configuración paso a paso (Dev)
No es un servicio del compose R6. Proyecto Compose sis-conversation-ui en infra/conversation-ui/ (api + mongo + meilisearch + admin-panel). Requiere la red externa self-improving-society_default (SiS ya arriba).
La conexión a society-chat ya viene cableada en infra/conversation-ui/conversation-ui.yaml (endpoint SIS → http://society-chat:8094/v1, fetch: true para descubrir modelos society/*). No hace falta añadir Connections como en Conversation UI.
1. Arrancar el stack
cd infra/conversation-ui
cp .env.example .env # rellenar secretos; SOCIETY_CHAT_API_KEY = misma clave que .env raíz de SiS
container orchestration up -d
# UI: http://127.0.0.1:3080
# Admin: http://127.0.0.1:3081
| Contenedor | Oficio | Host |
|---|---|---|
sis-conversation-ui | Conversation UI + API | :3080 |
sis-conversation-ui-admin | altas / bajas / roles de usuarios | :3081 |
sis-conversation-ui-mongo | estado Conversation UI | sin publicar |
sis-conversation-ui-meili | búsqueda del historial | sin publicar |
2. Autenticar (Dev con SSO)
- Abre
http://127.0.0.1:3080/login. - Pulsa Entrar con IdentIA (SSO proveedor de identidad (OIDC); en
.envdebe estarALLOW_SOCIAL_LOGIN=truey el bloqueOPENID_*). - Completa proveedor de identidad (OIDC) con tu cuenta (misma que Consola / Conversation UI).
- Tras el redirect deberías ver el chat con My Agents arriba a la izquierda.

Redirect URI en proveedor de identidad (OIDC):
http://localhost:3080/oauth/openid/callback(no la URL base sola). Panel admin usahttp://localhost:3080/api/admin/oauth/openid/callback.
3. Elegir modelo y chatear
Conversation UI no usa Search a model (eso es Conversation UI). Aquí el flujo es en tres pasos:
- Pulsa My Agents (arriba a la izquierda).
- Elige el endpoint SIS (conexión precableada a
society-chat). - Elige el agente, p. ej.
society/ask-rag(u otrosociety/*osociety/profile/...).
Hasta completar el paso 3 el compositor puede mostrar Please select an Agent y el envío queda deshabilitado. Luego escribe el prompt y envía.


| Modelo | Cuándo usarlo |
|---|---|
society/architect | Intake de institución (default en conversation-ui.yaml) |
society/operator | Operator del Primary |
society/ask-rag | Consulta RAG del researcher (SOCIETY_CHAT_RESEARCH_BRIEF_*) |
society/profile/<host>/<profile> | Chat directo con un profile vivo |
4. Panel de administración (:3081)
Altas, bajas y roles de usuarios de Conversation UI (no confundir con proveedor de identidad (OIDC) ni con Operar → Users). En clientes se llega por malla privada/SSH; no se publica en proxy de entrada salvo decisión explícita.
Cuándo Conversation UI vs Conversation UI: mismo gateway society-chat. Conversation UI trae endpoint SIS preconfigurado, buscador de historial (Meilisearch) y panel admin de usuarios; Conversation UI es el copiloto IdentIA por defecto en Dev (:3000) pero exige configurar Connections a mano.
Branding por configuración (APP_TITLE, assets en infra/conversation-ui/assets/). Snippet proxy de entrada: infra/conversation-ui/edge-proxy-vhosts.snippet.
Widget Society Chat (Consola)
Burbuja teal abajo-derecha en Operar y Explorar — copilot integrado que:
- Lee el snapshot del grafo y el contexto de la vista Operar actual.
- Responde preguntas de estado (hosts, agentes, tasks, warnings).
- Puede navegar a otras vistas de Operar (si tienes permisos).
- Admins: triaje de la bandeja de Approvals.

Relacionado: Operar → Sessions (sessions) para hilos de society-chat en tabla.
Consulta RAG tras ingesta (E2E)
El chat no usa RAG solo porque exista corpus en VectorDB. Hacen falta dos piezas:
- Ingesta en la colección correcta (RAGs).
- MCP
society_ragen el arnés del agente config del profile (o modoask-rag/research-briefcon env apuntando al host/profile correcto).
Opción A — Código único en markdown (ld-chief-of-staff)
| Paso | Acción | Verificación |
|---|---|---|
| 1 | Ingesta un .md con código único (p. ej. LD-E2E-2026) en RAG de ld-chief-of-staff @ ldteam-operaciones | Vista RAGs: estado ok; smoke search devuelve el fragmento |
| 2 | Confirma MCP en profile: society_rag en arnés del agente config (re-provision si hace falta) | containers exec society-executor society profile show ld-chief-of-staff --host ldteam-operaciones |
| 3 | Chat con society/profile/ldteam-operaciones/ld-chief-of-staff o society/ask-rag con SOCIETY_CHAT_RESEARCH_BRIEF_HOST_NAME / PROFILES en .env de society-chat | Respuesta cita el código ingestado |
| 4 | (Opcional) Mismo prompt en Conversation UI con el modelo profile elegido | Misma cita |
Pregunta de ejemplo: «¿Cuál es el código interno del proyecto LDTeam?»
Opción B — PDF Ley 47-20 + Conversation UI + ask-rag (verificado Dev 2026-08-30)
Corpus legal en el RAG del researcher (ld-researcher @ ldteam-operaciones), consultado vía modo society/ask-rag (env SOCIETY_CHAT_RESEARCH_BRIEF_* → primer profile de la lista, hoy ld-researcher).
| Paso | Acción | Verificación |
|---|---|---|
| 1 | Copia el PDF a data/rag-fixtures/ (p. ej. Ley-47-20-APP.pdf) e ingesta en ld-researcher @ ldteam-operaciones (SOCIETY_RAG_WRITE_ENABLED=true) | society rag list --profile ld-researcher --host ldteam-operaciones muestra chunks del PDF |
| 2 | Confirma env en society-chat: SOCIETY_CHAT_RESEARCH_BRIEF_HOST_NAME=ldteam-operaciones, SOCIETY_CHAT_RESEARCH_BRIEF_PROFILES=ld-researcher,... | containers exec society-chat sh -c 'echo $SOCIETY_CHAT_RESEARCH_BRIEF_HOST_NAME $SOCIETY_CHAT_RESEARCH_BRIEF_PROFILES' |
| 3 | Conversation UI (:3080): login IdentIA → My Agents → SIS → society/ask-rag | Compositor habilitado; no uses Search a model (eso es Conversation UI) |
| 4 | Pregunta sobre el objeto/finalidad de la Ley 47-20 | Respuesta en prosa con cita Ley-47-20-APP.pdf#chunk-N (~1–2 min) |
Pregunta de ejemplo:
Según la Ley 47-20 de Alianzas Público-Privadas en mi RAG: ¿cuál es su objeto o finalidad principal? Responde en 2-3 frases y cita el documento.
Smoke automatizado (Conversation UI, agente ya elegido):
cd docusaurus
SIS_SKIP_LOGIN=1 SIS_SKIP_AGENT_SELECT=1 node scripts/validate-conversation-ui-ask-rag.mjs
Capturas de la validación: docusaurus/.cache/validate-conversation-ui/validate-lc-*.png (incluye validate-lc-04-response.png).
| Superficie | URL | Uso |
|---|---|---|
| Widget Consola | Burbuja en :8093 | Pregunta con contexto de sesión / snapshot |
| Society Chat API | http://localhost:8094/v1 | Conversation UI / Conversation UI / curl |
| Conversation UI | http://localhost:3000 | Chat usuario final |
# Smoke API directo (sin UI)
curl -sS http://127.0.0.1:8094/v1/models | jq '.data[].id' | head
Qué no hacer
- No uses
society/profile/<primary>/architectni…/operatordel Primary Host: las puertas curadas sonsociety/architectysociety/operator. El architect crudo conversa pero no persiste el SPEC. society/inventory-checkysociety/debate-mapestán retirados. Un request cae en modelo desconocido.society/goal-intakeysociety/research-brief-ragrutean como alias ocultos; no salen en el selector.- CLI RAG ≠ chat RAG:
society rag listpuede funcionar mientras el chat no ve corpus si falta MCPsociety_ragen el profile.
Solución de problemas
| Síntoma | Causa probable | Qué hacer |
|---|---|---|
| Modelos vacíos en Conversation UI | Sin conexión a :8094/v1 o clave vieja en webui.db | Settings → Connections (o docusaurus/scripts/sync-conversation-ui-society-key.sh); la URL debe alcanzar society-chat desde el contenedor |
| Respuesta sin citas RAG | Profile sin society_rag o colección/host distinto al ingest | Reprovisionar template; alinear --host en ingest y MCP |
ask-rag responde de otra institución | SOCIETY_CHAT_RESEARCH_BRIEF_* desalineado | Recrear society-chat con env correcto |
| 401 en Consola copilot | Sesión caducada | Re-login por localhost:8093 |
Regenerar capturas (operadores)
cd docusaurus
SIS_CAPTURE_EMAIL=... SIS_CAPTURE_PASSWORD=... \
node scripts/capture-explorar-chat.mjs
Salida: static/img/chat/es/chat-step-*.png y copilot desde Explorar.