Agrega uMind: chat con IA embebible por tenant (F1 — widget web + RAG)
Multi-tenant dentro de soft_usite, reutilizando la infraestructura ya existente (AiConfig, motor de function-calling del agente de Telegram) en vez de un servicio nuevo aparte: - UmindTenant: sitio/cliente con dominios permitidos, config de IA para el chat y personalidad/tono. - Ingesta: crawler simple (mismo dominio, N páginas) + chunking + embeddings (config global con módulo "umind_embeddings", pensada para OpenAI ya que Claude no ofrece embeddings) guardados como JSON, con búsqueda por similitud coseno en memoria (sin pgvector todavía). - Agente acotado: única herramienta buscar_conocimiento, sin acceso a nada interno — si no encuentra la respuesta, lo dice en vez de inventar. - Widget público (/widget/umind.js + /widget/:site_key/*), autenticado por site_key + validación de dominio (Origin/Referer), no por secreto, ya que la key viaja en el HTML público del sitio instalado. - Panel /app/umind: tenants, estado de ingesta, historial de conversaciones por sesión.
This commit is contained in:
@@ -75,9 +75,10 @@
|
||||
'bg-blue-100 text-blue-700': m.trim() === 'landing',
|
||||
'bg-[#e9f0cf] text-[#5a7a1e]': m.trim() === 'query_runner',
|
||||
'bg-purple-100 text-purple-700': m.trim() === 'ia',
|
||||
'bg-pink-100 text-pink-700': m.trim() === 'whisper'
|
||||
'bg-pink-100 text-pink-700': m.trim() === 'whisper',
|
||||
'bg-indigo-100 text-indigo-700': m.trim() === 'umind_embeddings'
|
||||
}"
|
||||
x-text="m.trim() === 'landing' ? 'Landing' : m.trim() === 'query_runner' ? 'Query Runner' : m.trim() === 'ia' ? 'IA / vCard' : m.trim() === 'whisper' ? 'Whisper' : m.trim()">
|
||||
x-text="m.trim() === 'landing' ? 'Landing' : m.trim() === 'query_runner' ? 'Query Runner' : m.trim() === 'ia' ? 'IA / vCard' : m.trim() === 'whisper' ? 'Whisper' : m.trim() === 'umind_embeddings' ? 'uMind (embeddings)' : m.trim()">
|
||||
</span>
|
||||
</template>
|
||||
</div>
|
||||
@@ -294,6 +295,7 @@ function aiConfigApp() {
|
||||
{ value: 'query_runner', label: 'Query Runner SQL' },
|
||||
{ value: 'ia', label: 'IA / vCard' },
|
||||
{ value: 'whisper', label: 'Transcripción de audio (Whisper)' },
|
||||
{ value: 'umind_embeddings', label: 'uMind — embeddings (RAG del widget)' },
|
||||
],
|
||||
|
||||
async init() { await this.load() },
|
||||
|
||||
Reference in New Issue
Block a user