Merge branch 'main' of https://github.lci.ulsa.mx/AlexRG/Acad-IA
This commit is contained in:
@@ -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(
|
const { data: invokeData, error } = await supabase.functions.invoke(
|
||||||
"modal-conversation",
|
"modal-conversation",
|
||||||
{
|
{
|
||||||
@@ -295,9 +292,11 @@ export default function AIChatModal({ open, onClose, context, onAccept }) {
|
|||||||
// 3) fallback
|
// 3) fallback
|
||||||
assistantText = assistantText || "Sin respuesta del modelo.";
|
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([]);
|
setAttachedFiles([]);
|
||||||
setAttachedPreviews([]);
|
setAttachedPreviews([]);
|
||||||
@@ -406,10 +405,42 @@ export default function AIChatModal({ open, onClose, context, onAccept }) {
|
|||||||
onClose();
|
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 (
|
return (
|
||||||
<Dialog open={open} onOpenChange={onClose}>
|
<Dialog open={open} onOpenChange={onClose}>
|
||||||
<DialogContent className="max-w-6xl w-[95vw] h-[85vh] p-6 flex flex-col">
|
<DialogContent className="max-w-6xl w-[95vw] h-[85vh] p-6 flex flex-col relative">
|
||||||
|
{/* Botón siempre visible */}
|
||||||
|
<button
|
||||||
|
onClick={onClose}
|
||||||
|
className="absolute top-3 right-3 text-gray-400 hover:text-gray-600 transition z-50"
|
||||||
|
>
|
||||||
|
✕
|
||||||
|
</button>
|
||||||
<DialogHeader>
|
<DialogHeader>
|
||||||
<DialogTitle>Asistente Inteligente</DialogTitle>
|
<DialogTitle>Asistente Inteligente</DialogTitle>
|
||||||
</DialogHeader>
|
</DialogHeader>
|
||||||
|
|||||||
@@ -315,7 +315,10 @@ export function AcademicSections({ planId, color }: { planId: string; color?: st
|
|||||||
section: iaContext?.title,
|
section: iaContext?.title,
|
||||||
fieldKey: iaContext?.key,
|
fieldKey: iaContext?.key,
|
||||||
originalText: iaContext?.content,
|
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) => {
|
onAccept={(newText: string) => {
|
||||||
if (iaContext) {
|
if (iaContext) {
|
||||||
|
|||||||
Reference in New Issue
Block a user