Spaces:
Running
Running
Update test1.html
Browse files- test1.html +50 -8
test1.html
CHANGED
@@ -5,7 +5,6 @@
|
|
5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6 |
<title>Modelo de Preguntas y Respuestas sobre un PDF</title>
|
7 |
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs"></script>
|
8 |
-
<!-- Cargar PDF.js -->
|
9 |
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.11.338/pdf.min.js"></script>
|
10 |
<script>
|
11 |
// Aseguramos que pdf.js est茅 cargado antes de configurarlo
|
@@ -41,8 +40,8 @@
|
|
41 |
// Entrenar el modelo con el texto extra铆do
|
42 |
modelo = await entrenarModelo(textoPDF);
|
43 |
|
44 |
-
// Almacenar
|
45 |
-
|
46 |
}
|
47 |
}
|
48 |
|
@@ -72,7 +71,7 @@
|
|
72 |
// Utilizar el texto extra铆do del PDF para crear un modelo simple
|
73 |
const inputs = tf.tensor([textoPDF.length]);
|
74 |
|
75 |
-
//
|
76 |
const modelo = tf.sequential();
|
77 |
modelo.add(tf.layers.dense({ units: 64, inputShape: [1] }));
|
78 |
modelo.add(tf.layers.dense({ units: 32 }));
|
@@ -84,8 +83,10 @@
|
|
84 |
return modelo;
|
85 |
}
|
86 |
|
87 |
-
// Almacenar
|
88 |
-
function
|
|
|
|
|
89 |
const request = indexedDB.open("ModeloPDF", 1);
|
90 |
request.onupgradeneeded = function (event) {
|
91 |
const db = event.target.result;
|
@@ -97,16 +98,56 @@
|
|
97 |
const db = event.target.result;
|
98 |
const transaction = db.transaction(["modelos"], "readwrite");
|
99 |
const store = transaction.objectStore("modelos");
|
100 |
-
|
|
|
|
|
|
|
|
|
101 |
transaction.oncomplete = function () {
|
102 |
-
console.log("
|
103 |
};
|
104 |
};
|
105 |
}
|
106 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
107 |
// Funci贸n para responder una pregunta utilizando el modelo
|
108 |
async function responderPregunta() {
|
109 |
const pregunta = document.getElementById("inputPregunta").value;
|
|
|
|
|
|
|
|
|
|
|
110 |
if (modelo && pregunta) {
|
111 |
// Aqu铆 usamos un enfoque simple para tokenizar la pregunta
|
112 |
const tokens = pregunta.split(" "); // Simple divisi贸n en palabras
|
@@ -123,3 +164,4 @@
|
|
123 |
</html>
|
124 |
|
125 |
|
|
|
|
5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6 |
<title>Modelo de Preguntas y Respuestas sobre un PDF</title>
|
7 |
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs"></script>
|
|
|
8 |
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.11.338/pdf.min.js"></script>
|
9 |
<script>
|
10 |
// Aseguramos que pdf.js est茅 cargado antes de configurarlo
|
|
|
40 |
// Entrenar el modelo con el texto extra铆do
|
41 |
modelo = await entrenarModelo(textoPDF);
|
42 |
|
43 |
+
// Almacenar los pesos del modelo en IndexedDB
|
44 |
+
almacenarPesosEnIndexedDB(modelo);
|
45 |
}
|
46 |
}
|
47 |
|
|
|
71 |
// Utilizar el texto extra铆do del PDF para crear un modelo simple
|
72 |
const inputs = tf.tensor([textoPDF.length]);
|
73 |
|
74 |
+
// Crear un modelo simple
|
75 |
const modelo = tf.sequential();
|
76 |
modelo.add(tf.layers.dense({ units: 64, inputShape: [1] }));
|
77 |
modelo.add(tf.layers.dense({ units: 32 }));
|
|
|
83 |
return modelo;
|
84 |
}
|
85 |
|
86 |
+
// Almacenar los pesos del modelo en IndexedDB
|
87 |
+
async function almacenarPesosEnIndexedDB(modelo) {
|
88 |
+
const pesos = await modelo.getWeights();
|
89 |
+
|
90 |
const request = indexedDB.open("ModeloPDF", 1);
|
91 |
request.onupgradeneeded = function (event) {
|
92 |
const db = event.target.result;
|
|
|
98 |
const db = event.target.result;
|
99 |
const transaction = db.transaction(["modelos"], "readwrite");
|
100 |
const store = transaction.objectStore("modelos");
|
101 |
+
|
102 |
+
// Convertir los pesos a un formato serializable (por ejemplo, a un array de floats)
|
103 |
+
const pesosSerializados = pesos.map(peso => peso.arraySync());
|
104 |
+
store.put(pesosSerializados, "modeloPesos");
|
105 |
+
|
106 |
transaction.oncomplete = function () {
|
107 |
+
console.log("Pesos del modelo almacenados en IndexedDB");
|
108 |
};
|
109 |
};
|
110 |
}
|
111 |
|
112 |
+
// Cargar los pesos desde IndexedDB y restaurar el modelo
|
113 |
+
async function cargarModeloDesdeIndexedDB() {
|
114 |
+
const request = indexedDB.open("ModeloPDF", 1);
|
115 |
+
return new Promise((resolve, reject) => {
|
116 |
+
request.onsuccess = function (event) {
|
117 |
+
const db = event.target.result;
|
118 |
+
const transaction = db.transaction(["modelos"], "readonly");
|
119 |
+
const store = transaction.objectStore("modelos");
|
120 |
+
|
121 |
+
const getRequest = store.get("modeloPesos");
|
122 |
+
getRequest.onsuccess = async function () {
|
123 |
+
const pesosSerializados = getRequest.result;
|
124 |
+
if (pesosSerializados) {
|
125 |
+
const pesos = pesosSerializados.map(peso => tf.tensor(peso));
|
126 |
+
// Crear un nuevo modelo con los pesos cargados
|
127 |
+
const modelo = tf.sequential();
|
128 |
+
modelo.add(tf.layers.dense({ units: 64, inputShape: [1] }));
|
129 |
+
modelo.add(tf.layers.dense({ units: 32 }));
|
130 |
+
modelo.add(tf.layers.dense({ units: 1, activation: 'sigmoid' }));
|
131 |
+
modelo.setWeights(pesos);
|
132 |
+
resolve(modelo);
|
133 |
+
} else {
|
134 |
+
reject("No se encontraron pesos para el modelo.");
|
135 |
+
}
|
136 |
+
};
|
137 |
+
getRequest.onerror = reject;
|
138 |
+
};
|
139 |
+
request.onerror = reject;
|
140 |
+
});
|
141 |
+
}
|
142 |
+
|
143 |
// Funci贸n para responder una pregunta utilizando el modelo
|
144 |
async function responderPregunta() {
|
145 |
const pregunta = document.getElementById("inputPregunta").value;
|
146 |
+
if (!modelo) {
|
147 |
+
// Si no hay modelo, intentar cargarlo desde IndexedDB
|
148 |
+
modelo = await cargarModeloDesdeIndexedDB();
|
149 |
+
}
|
150 |
+
|
151 |
if (modelo && pregunta) {
|
152 |
// Aqu铆 usamos un enfoque simple para tokenizar la pregunta
|
153 |
const tokens = pregunta.split(" "); // Simple divisi贸n en palabras
|
|
|
164 |
</html>
|
165 |
|
166 |
|
167 |
+
|