Se agrga crear formatos

This commit is contained in:
2025-11-26 19:44:45 -06:00
parent 29231206c0
commit a6f0010a53
3 changed files with 32 additions and 4 deletions

View File

@@ -33,7 +33,7 @@ const CardContent = ({ className, children }) => <div className={`p-4 ${classNam
const ScrollArea = ({ className, children }) => <div className={`overflow-y-auto ${className}`}>{children}</div>; const ScrollArea = ({ className, children }) => <div className={`overflow-y-auto ${className}`}>{children}</div>;
/* ------------- COMPONENT ------------- */ /* ------------- COMPONENT ------------- */
export default function AIChatModal({ open, onClose, context, onAccept }) { export default function AIChatModal({ open, onClose, context, onAccept, plan_format }) {
const [vectorStores, setVectorStores] = useState([]); const [vectorStores, setVectorStores] = useState([]);
const [vectorFiles, setVectorFiles] = useState([]); const [vectorFiles, setVectorFiles] = useState([]);
const [selectedVectorFile, setSelectedVectorFile] = useState(null); const [selectedVectorFile, setSelectedVectorFile] = useState(null);
@@ -127,7 +127,7 @@ export default function AIChatModal({ open, onClose, context, onAccept }) {
const token = session?.access_token; const token = session?.access_token;
// llamada // llamada
const resp = await supabase.functions.invoke("modal-conversation", { const resp = await supabase.functions.invoke("conversation-format", {
headers: { Authorization: `Bearer ${token}` }, headers: { Authorization: `Bearer ${token}` },
body: { action: "start" , role:"system", content:context.cont_conversation, } 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; const token = session?.access_token;
// algunas implementations esperan { action: "end", conversationId }, otras { action: "end", id } // 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}` }, headers: { Authorization: `Bearer ${token}` },
body: { action: "end", conversationId: convIdToUse } body: { action: "end", conversationId: convIdToUse }
}); });
@@ -211,6 +211,8 @@ export default function AIChatModal({ open, onClose, context, onAccept }) {
// ---------- SEND MESSAGE (usa conversationId) ---------- // ---------- SEND MESSAGE (usa conversationId) ----------
const handleConversation = async ({ text }) => { const handleConversation = async ({ text }) => {
console.log(plan_format);
if (!conversationId) { if (!conversationId) {
console.warn("No hay conversación activa todavía. conversationId:", 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 // 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 = { const payload = {
action: "message", action: "message",
format: plan_format,
conversationId, conversationId,
vectorStoreId: selectedVectorFile?.vector_store_id ?? null, vectorStoreId: selectedVectorFile?.vector_store_id ?? null,
fileIds: selectedVectorFile ? [selectedVectorFile.id] : [], fileIds: selectedVectorFile ? [selectedVectorFile.id] : [],
@@ -259,7 +262,7 @@ export default function AIChatModal({ open, onClose, context, onAccept }) {
] ]
}; };
const { data: invokeData, error } = await supabase.functions.invoke( const { data: invokeData, error } = await supabase.functions.invoke(
"modal-conversation", "conversation-format",
{ {
headers: { Authorization: `Bearer ${token}` }, headers: { Authorization: `Bearer ${token}` },
body: payload body: payload

View File

@@ -12,6 +12,7 @@ import { HistorialCambiosModal } from "../historico/HistorialCambiosModal"
import AIChatModal from "../ai/AIChatModal" import AIChatModal from "../ai/AIChatModal"
/* ===================================================== /* =====================================================
Query keys & fetcher Query keys & fetcher
===================================================== */ ===================================================== */
@@ -54,6 +55,8 @@ export const planTextOptions = (planId: string) =>
staleTime: 60_000, staleTime: 60_000,
}) })
/* ===================================================== /* =====================================================
Color helpers Color helpers
===================================================== */ ===================================================== */
@@ -124,6 +127,17 @@ export function AcademicSections({ planId, color }: { planId: string; color?: st
const [editing, setEditing] = useState<null | { key: keyof PlanTextFields; title: string }>(null) const [editing, setEditing] = useState<null | { key: keyof PlanTextFields; title: string }>(null)
const [draft, setDraft] = useState("") 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 --- // --- mutation con actualización optimista ---
const updateField = useMutation({ const updateField = useMutation({
mutationFn: async ({ key, value }: { key: keyof PlanTextFields; value: string | string[] | null }) => { mutationFn: async ({ key, value }: { key: keyof PlanTextFields; value: string | string[] | null }) => {
@@ -309,6 +323,7 @@ export function AcademicSections({ planId, color }: { planId: string; color?: st
/> />
<AIChatModal <AIChatModal
plan_format={plan_format}
open={openModalIa} open={openModalIa}
onClose={() => setopenModalIa(false)} onClose={() => setopenModalIa(false)}
context={{ context={{

10
src/formatos/plan.json Normal file
View File

@@ -0,0 +1,10 @@
{
"objetivo_general": "...",
"sistema_evaluacion": "...",
"perfil_ingreso": "...",
"perfil_egreso": "...",
"competencias_genericas": "...",
"competencias_especificas": "...",
"indicadores_desempeno": "...",
"pertinencia": "..."
}