From 29231206c01154b1237371a2d571921d01757ca7 Mon Sep 17 00:00:00 2001 From: "Roberto.silva" Date: Tue, 25 Nov 2025 15:21:32 -0600 Subject: [PATCH] Se quitan respuestas del asistente y se agrega boton de cerrar modal --- .gitignore | 2 +- src/components/ai/AIChatModal.jsx | 43 ++++++++++++++++++--- src/components/planes/academic-sections.tsx | 5 ++- 3 files changed, 42 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 693a705..23ffacb 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,6 @@ dist dist-ssr *.local count.txt -.env +.env* .nitro .tanstack diff --git a/src/components/ai/AIChatModal.jsx b/src/components/ai/AIChatModal.jsx index 3cfd6aa..2cb6f74 100644 --- a/src/components/ai/AIChatModal.jsx +++ b/src/components/ai/AIChatModal.jsx @@ -258,9 +258,6 @@ export default function AIChatModal({ open, onClose, context, onAccept }) { } ] }; - - console.log("handleConversation -> payload:", payload); - const { data: invokeData, error } = await supabase.functions.invoke( "modal-conversation", { @@ -295,9 +292,11 @@ export default function AIChatModal({ open, onClose, context, onAccept }) { // 3) fallback assistantText = assistantText || "Sin respuesta del modelo."; - console.log("💬 Respuesta detectada:", assistantText); + setMessages(prev => [ + ...prev, + { role: "assistant", content: cleanAssistantResponse(assistantText) } + ]); - setMessages(prev => [...prev, { role: "assistant", content: assistantText }]); setAttachedFiles([]); setAttachedPreviews([]); @@ -406,10 +405,42 @@ export default function AIChatModal({ open, onClose, context, onAccept }) { onClose(); } }; + const cleanAssistantResponse = (text) => { + if (!text) return text; + + // Frases que quieres eliminar (puedes agregar más) + const patterns = [ + /^claro[, ]*/i, + /^por supuesto[, ]*/i, + /^aquí tienes[, ]*/i, + /^con gusto[, ]*/i, + /^hola[, ]*/i, + /^perfecto[, ]*/i, + /^entendido[, ]*/i, + /^muy bien[, ]*/i, + /^ok[, ]*/i, + ]; + + let cleaned = text.trim(); + + for (const p of patterns) { + cleaned = cleaned.replace(p, "").trim(); + } + + return cleaned; + }; + return ( - + + {/* Botón siempre visible */} + Asistente Inteligente diff --git a/src/components/planes/academic-sections.tsx b/src/components/planes/academic-sections.tsx index 619f276..ed47920 100644 --- a/src/components/planes/academic-sections.tsx +++ b/src/components/planes/academic-sections.tsx @@ -315,7 +315,10 @@ export function AcademicSections({ planId, color }: { planId: string; color?: st section: iaContext?.title, fieldKey: iaContext?.key, originalText: iaContext?.content, - cont_conversation: `Eres un experto en craer planes de estudios basate en el id del plan ${planId} que se encuentra en la tabla plan_estudios con el mcp para realizar los cambios que se te soliciten`, + cont_conversation: `Eres un experto en craer planes de estudios basate en el id del plan ${planId} que se encuentra en la tabla plan_estudios con el mcp para realizar los cambios que se te soliciten Responde únicamente con la información solicitada. +No uses frases como “claro”, “por supuesto”, “aquí tienes”, “con gusto”, “hola”, “perfecto”. +No uses introducciones, despedidas ni texto de relleno. +Entrega solo el contenido útil.`, }} onAccept={(newText: string) => { if (iaContext) {