From a6f0010a5311c5cf98f9d7f80a3578997b0d3e8a Mon Sep 17 00:00:00 2001 From: robert Date: Wed, 26 Nov 2025 19:44:45 -0600 Subject: [PATCH] Se agrga crear formatos --- src/components/ai/AIChatModal.jsx | 11 +++++++---- src/components/planes/academic-sections.tsx | 15 +++++++++++++++ src/formatos/plan.json | 10 ++++++++++ 3 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 src/formatos/plan.json diff --git a/src/components/ai/AIChatModal.jsx b/src/components/ai/AIChatModal.jsx index 2cb6f74..6858f6d 100644 --- a/src/components/ai/AIChatModal.jsx +++ b/src/components/ai/AIChatModal.jsx @@ -33,7 +33,7 @@ const CardContent = ({ className, children }) =>
{children}
; /* ------------- COMPONENT ------------- */ -export default function AIChatModal({ open, onClose, context, onAccept }) { +export default function AIChatModal({ open, onClose, context, onAccept, plan_format }) { const [vectorStores, setVectorStores] = useState([]); const [vectorFiles, setVectorFiles] = useState([]); const [selectedVectorFile, setSelectedVectorFile] = useState(null); @@ -127,7 +127,7 @@ export default function AIChatModal({ open, onClose, context, onAccept }) { const token = session?.access_token; // llamada - const resp = await supabase.functions.invoke("modal-conversation", { + const resp = await supabase.functions.invoke("conversation-format", { headers: { Authorization: `Bearer ${token}` }, body: { action: "start" , role:"system", content:context.cont_conversation, } }); @@ -188,7 +188,7 @@ export default function AIChatModal({ open, onClose, context, onAccept }) { const token = session?.access_token; // algunas implementations esperan { action: "end", conversationId }, otras { action: "end", id } - const { data, error } = await supabase.functions.invoke("modal-conversation", { + const { data, error } = await supabase.functions.invoke("conversation-format", { headers: { Authorization: `Bearer ${token}` }, body: { action: "end", conversationId: convIdToUse } }); @@ -211,6 +211,8 @@ export default function AIChatModal({ open, onClose, context, onAccept }) { // ---------- SEND MESSAGE (usa conversationId) ---------- const handleConversation = async ({ text }) => { + console.log(plan_format); + if (!conversationId) { console.warn("No hay conversación activa todavía. conversationId:", conversationId); // si no hay conv, opcionalmente intentar crear una sin que el usuario note @@ -245,6 +247,7 @@ export default function AIChatModal({ open, onClose, context, onAccept }) { const payload = { action: "message", + format: plan_format, conversationId, vectorStoreId: selectedVectorFile?.vector_store_id ?? null, fileIds: selectedVectorFile ? [selectedVectorFile.id] : [], @@ -259,7 +262,7 @@ export default function AIChatModal({ open, onClose, context, onAccept }) { ] }; const { data: invokeData, error } = await supabase.functions.invoke( - "modal-conversation", + "conversation-format", { headers: { Authorization: `Bearer ${token}` }, body: payload diff --git a/src/components/planes/academic-sections.tsx b/src/components/planes/academic-sections.tsx index ed47920..983cfe1 100644 --- a/src/components/planes/academic-sections.tsx +++ b/src/components/planes/academic-sections.tsx @@ -12,6 +12,7 @@ import { HistorialCambiosModal } from "../historico/HistorialCambiosModal" import AIChatModal from "../ai/AIChatModal" + /* ===================================================== Query keys & fetcher ===================================================== */ @@ -54,6 +55,8 @@ export const planTextOptions = (planId: string) => staleTime: 60_000, }) + + /* ===================================================== Color helpers ===================================================== */ @@ -124,6 +127,17 @@ export function AcademicSections({ planId, color }: { planId: string; color?: st const [editing, setEditing] = useState(null) const [draft, setDraft] = useState("") + const plan_format={ + "objetivo_general": "...", + "sistema_evaluacion": "...", + "perfil_ingreso": "...", + "perfil_egreso": "...", + "competencias_genericas": "...", + "competencias_especificas": "...", + "indicadores_desempeno": "...", + "pertinencia": "..." +} + // --- mutation con actualización optimista --- const updateField = useMutation({ mutationFn: async ({ key, value }: { key: keyof PlanTextFields; value: string | string[] | null }) => { @@ -309,6 +323,7 @@ export function AcademicSections({ planId, color }: { planId: string; color?: st /> setopenModalIa(false)} context={{ diff --git a/src/formatos/plan.json b/src/formatos/plan.json new file mode 100644 index 0000000..f9c57f9 --- /dev/null +++ b/src/formatos/plan.json @@ -0,0 +1,10 @@ +{ + "objetivo_general": "...", + "sistema_evaluacion": "...", + "perfil_ingreso": "...", + "perfil_egreso": "...", + "competencias_genericas": "...", + "competencias_especificas": "...", + "indicadores_desempeno": "...", + "pertinencia": "..." +} \ No newline at end of file