Saltar al contenido principal

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).

Relacionado: Modelos de chat · Puertos · Sessions · RAGs.

Dónde apunta

EntornoConversation UIConversation UIGateway
Developmenthttp://127.0.0.1:3000 (contenedor aparte)http://127.0.0.1:3080 (stack infra/conversation-ui/)http://127.0.0.1:8094/v1
Identiacopilot.identia.do (proveedor de identidad (OIDC))chat.identia.do:3080; admin chat-admin.identia.do:3081society-chat:8094/v1
cliente de referenciacopiloto público detrás de proveedor de identidad (OIDC)chat.client.example:3080; admin chat-admin.client.example:3081society-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/v1 desde el host; http://society-chat:8094/v1 dentro de orquestador de contenedores)
  • API key: SOCIETY_CHAT_API_KEY (en Dev puede ir vacío; en Conversation UI va en infra/conversation-ui/.env)
  • Modelos: ids society/* que lista GET /v1/models

Decisión sustituir-o-coexistir Conversation UI vs Conversation UI: abierta. Hoy conviven en los tres 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

  1. Comprueba que responde: curl -sf http://localhost:3000/200.
  2. Abre http://localhost:3000 (no 127.0.0.1 — proveedor de identidad (OIDC)/IdentIA registra el redirect en localhost).
  3. Si ves Continue with IdentIA, pulsa y completa proveedor de identidad (OIDC) (misma cuenta que la Consola en clientes con SSO).

Conversation UI tras login

2. Conectar society-chat

  1. Menú Admin (o engranaje) → SettingsConnections (ruta típica: /admin/settings/connections).
  2. Add connection → tipo OpenAI / OpenAI-compatible.
  3. Rellena:
CampoValor Dev
URL / Base URLhttp://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: website/scripts/sync-conversation-ui-society-key.sh (escribe lo mismo en webui.db).
API Keyvalor de SOCIETY_CHAT_API_KEY en .env (si rotas la clave, vuelve a ejecutar el script de sync)
Model IDsdejar que el cliente descubra vía GET /v1/models
  1. 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-chat desde el contenedor Conversation UI.

Selector de modelos

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 ids society/* (p. ej. society/ask-rag, society/architect).

3. Elegir modelo y chatear

  1. 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).
  2. En el desplegable Search a model, elige según el caso (tabla abajo).
  3. Escribe el prompt y envía.

Componer mensaje

ModeloCuándo usarlo
society/architectIntake de institución; persiste el SPEC (única puerta curada al architect del Primary)
society/operatorChat con el operator del Primary
society/ask-ragConsulta RAG del researcher configurado en SOCIETY_CHAT_RESEARCH_BRIEF_*
society/research-briefPipeline 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)

Lista completa y alias ocultos: Modelos de chat.

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 SIShttp://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
containers compose up -d
# UI: http://127.0.0.1:3080
# Admin: http://127.0.0.1:3081
ContenedorOficioHost
sis-conversation-uiConversation UI + API:3080
sis-conversation-ui-adminaltas / bajas / roles de usuarios:3081
sis-conversation-ui-mongoestado Conversation UIsin publicar
sis-conversation-ui-meilibúsqueda del historialsin publicar

2. Autenticar (Dev con SSO)

  1. Abre http://127.0.0.1:3080/login.
  2. Pulsa Entrar con IdentIA (SSO proveedor de identidad (OIDC); en .env debe estar ALLOW_SOCIAL_LOGIN=true y el bloque OPENID_*).
  3. Completa proveedor de identidad (OIDC) con tu cuenta (misma que Consola / Conversation UI).
  4. Tras el redirect deberías ver el chat con My Agents arriba a la izquierda.

Conversation UI tras login

Redirect URI en proveedor de identidad (OIDC): http://localhost:3080/oauth/openid/callback (no la URL base sola). Panel admin usa http://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:

  1. Pulsa My Agents (arriba a la izquierda).
  2. Elige el endpoint SIS (conexión precableada a society-chat).
  3. Elige el agente, p. ej. society/ask-rag (u otro society/* o society/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.

Selector de modelos Conversation UI

Compositor Conversation UI

ModeloCuándo usarlo
society/architectIntake de institución (default en conversation-ui.yaml)
society/operatorOperator del Primary
society/ask-ragConsulta 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.

Copilot abierto en Explorar

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:

  1. Ingesta en la colección correcta (RAGs).
  2. MCP society_rag en el arnés del agente config del profile (o modo ask-rag / research-brief con env apuntando al host/profile correcto).

Opción A — Código único en markdown (ld-chief-of-staff)

PasoAcciónVerificación
1Ingesta un .md con código único (p. ej. LD-E2E-2026) en RAG de ld-chief-of-staff @ ldteam-operacionesVista RAGs: estado ok; smoke search devuelve el fragmento
2Confirma 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
3Chat 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-chatRespuesta cita el código ingestado
4(Opcional) Mismo prompt en Conversation UI con el modelo profile elegidoMisma 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).

PasoAcciónVerificación
1Copia 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
2Confirma 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'
3Conversation UI (:3080): login IdentIA → My AgentsSISsociety/ask-ragCompositor habilitado; no uses Search a model (eso es Conversation UI)
4Pregunta sobre el objeto/finalidad de la Ley 47-20Respuesta 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 website
SIS_SKIP_LOGIN=1 SIS_SKIP_AGENT_SELECT=1 node scripts/validate-conversation-ui-ask-rag.mjs

Capturas de la validación: website/.cache/validate-conversation-ui/validate-lc-*.png (incluye validate-lc-04-response.png).

SuperficieURLUso
Widget ConsolaBurbuja en :8093Pregunta con contexto de sesión / snapshot
Society Chat APIhttp://localhost:8094/v1Conversation UI / Conversation UI / curl
Conversation UIhttp://localhost:3000Chat 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>/architect ni …/operator del Primary Host: las puertas curadas son society/architect y society/operator. El architect crudo conversa pero no persiste el SPEC.
  • society/inventory-check y society/debate-map están retirados. Un request cae en modelo desconocido.
  • society/goal-intake y society/research-brief-rag rutean como alias ocultos; no salen en el selector.
  • CLI RAG ≠ chat RAG: society rag list puede funcionar mientras el chat no ve corpus si falta MCP society_rag en el profile.

Solución de problemas

SíntomaCausa probableQué hacer
Modelos vacíos en Conversation UISin conexión a :8094/v1 o clave vieja en webui.dbSettings → Connections (o website/scripts/sync-conversation-ui-society-key.sh); la URL debe alcanzar society-chat desde el contenedor
Respuesta sin citas RAGProfile sin society_rag o colección/host distinto al ingestReprovisionar template; alinear --host en ingest y MCP
ask-rag responde de otra instituciónSOCIETY_CHAT_RESEARCH_BRIEF_* desalineadoRecrear society-chat con env correcto
401 en Consola copilotSesión caducadaRe-login por localhost:8093

Regenerar capturas (operadores)

cd website
SIS_CAPTURE_EMAIL=... SIS_CAPTURE_PASSWORD=... \
node scripts/capture-explorar-chat.mjs

Salida: static/img/chat/es/chat-step-*.png y copilot desde Explorar.