Runtime de IA por tenant
AiRuntime entrega, por sesion de tenant, el modelo de chat, los embeddings, las trazas y el
costo. Toma las tres credenciales del tenant desde Ajustes → Credenciales (minimax,
langsmith y voyage); no hay respaldo en variables de entorno. Si falta, esta desactivada o
incompleta cualquiera de las tres, la sesion lanza AiCredentialsMissingError y la API responde
409 AI_CREDENTIALS_MISSING con el proveedor y el problema.
Archivos fuente:
apps/api-nestjs/src/shared/application/ports/ai-runtime.port.tsapps/api-nestjs/src/shared/infrastructure/services/ai/runtime/tenant-ai-runtime.service.tsapps/api-nestjs/src/shared/infrastructure/services/ai/runtime/ai-runtime.constants.ts
voyage-4 (1024 dimensiones) para embeddings. Cada perfil solo ajusta sus parametros:
Redaccion y revision piden el modelo con
disableReasoning: MiniMax corre sin razonamiento en
esas etapas.
Prompt loading
PromptLoaderService lee los prompts del Hub de LangSmith del tenant, con la misma credencial
langsmith de Ajustes → Credenciales:
- cache por schema de tenant y clave durante 60 segundos
- Hub del tenant con el tag
prod(salvo que la clave traiga otro tag) - respaldo registrado en codigo
apps/api-nestjs/src/shared/infrastructure/services/prompt-loader.service.ts
prod en el Hub rige sin redesplegar. Un tenant nunca lee el prompt que otro
guardo con el mismo nombre. Si el prompt no existe o el Hub falla, queda un error en el log
(clave y tenant, nunca contenido) y corre el respaldo local.
Prompt registry
Los modulos registran un respaldo local y luego consultan el texto real al construir la instancia:- los providers de
teams-botregistranTEAMS_ROUTER_PROMPT_KEY,TEAMS_SUPPORT_AGENT_PROMPT_KEYyTEAMS_SALES_AGENT_PROMPT_KEY(application/prompts/prompt-keys.ts) - luego cada factory llama
promptRegistry.getPromptText(...)
LangSmith tracing
Las trazas de cada tenant van al proyecto de LangSmith de su credencial (Ajustes → Credenciales:apiKey y project). No hay proyecto fijo en codigo ni variables de entorno de
LangSmith; sin la credencial, la IA del tenant no corre.
Archivos fuente:
apps/api-nestjs/src/shared/infrastructure/services/ai/runtime/tenant-langsmith-clients.service.tsapps/api-nestjs/src/modules/plataforma/ai/messaging/application/services/draft-trace-labels.util.tsapps/api-nestjs/src/modules/plataforma/ai/messaging/application/services/draft-judge.service.ts
- entradas y salidas se ocultan siempre (
hideInputs/hideOutputs): la traza no lleva texto de clientes - cada traza de redaccion lleva tags (
tenant:,target:,format:,surface:,verdict:) y metadata filtrable:tenant,target_type,target_id,format,surface,request_id,prompt_version,prompt_source,prompt_key,reviewer_prompt_versionyreviewer_verdict - el texto
internalno pasa por el revisor y llevaverdict:not_reviewed - el veredicto del revisor se registra como feedback
reviewer_verdict(1 verificado, 0 revision incompleta, sin puntaje si no hubo revision) - el juez (
draft_judging) puntua cada borrador despues de entregarlo, fuera del plazo de la solicitud, y publica solo puntajes como feedback del run del borrador:judge_score,judge_grounded,judge_voice,judge_formatyjudge_clarity; un fallo o un JSON invalido deja el borrador sin puntaje - el uso del borrador suma feedback
operator_edit_similarityydraft_regenerated - los scripts locales toman el proyecto de
--ai-credentials; sin LangSmith no trazan
LangSmith cumple dos roles en Raul: fuente de prompts por tenant (Hub con tag
prod) y
observabilidad de corridas LLM.Operacion local
Los scripts de IA (desdeapps/api-nestjs) leen las credenciales de un archivo JSON con el mismo formato de Ajustes →
Credenciales (--ai-credentials <archivo.json>), nunca de variables de entorno:
scripts/ai/publish-drafting-prompts.tspublica los respaldos de redaccion al Hub del tenant y mueve su tagprod(sin--publishsolo lista claves y hashes)scripts/ai/export-inbox-dataset.tsexporta conversaciones de la Bandeja como dataset seudonimizado (con--uploadlo sube al LangSmith del tenant)scripts/ai/run-paired-experiment.tscompara dos versiones de prompt sobre ese dataset con el juez, sin dejar trazas
scripts/ai/no-ai-environment.spec.ts falla si vuelve a aparecer una variable de entorno de IA.
Que revisar si algo falla
- Credenciales del tenant en Ajustes → Credenciales (
minimax,langsmith,voyage). - Tag
proddel prompt en el Hub del tenant y clave correcta en el modulo. - Perfil de modelo correcto en el agente.
- Si el agente recibio el bundle de tools esperado.