Update app.py
Browse files
app.py
CHANGED
@@ -18,9 +18,9 @@ from fastapi.responses import HTMLResponse
|
|
18 |
from pydantic import BaseModel
|
19 |
from dotenv import load_dotenv
|
20 |
from datetime import datetime
|
21 |
-
from faker import Faker
|
22 |
import logging
|
23 |
|
|
|
24 |
logging.basicConfig(level=logging.INFO)
|
25 |
logger = logging.getLogger(__name__)
|
26 |
|
@@ -90,15 +90,6 @@ async def train_and_save_model():
|
|
90 |
if intent['tag'] not in classes:
|
91 |
classes.append(intent['tag'])
|
92 |
|
93 |
-
fake = Faker()
|
94 |
-
for _ in range(10):
|
95 |
-
random_pattern = f"{fake.sentence()}"
|
96 |
-
random_tag = fake.word()
|
97 |
-
documents.append((nltk.word_tokenize(random_pattern), random_tag))
|
98 |
-
words.extend(nltk.word_tokenize(random_pattern))
|
99 |
-
if random_tag not in classes:
|
100 |
-
classes.append(random_tag)
|
101 |
-
|
102 |
words = sorted(set(words))
|
103 |
classes = sorted(set(classes))
|
104 |
|
@@ -122,7 +113,7 @@ async def train_and_save_model():
|
|
122 |
train_y = np.array([row[1] for row in training])
|
123 |
|
124 |
if train_x.shape[1] != len(words):
|
125 |
-
logger.error("Error: Las dimensiones de entrada no coinciden.")
|
126 |
await asyncio.sleep(60)
|
127 |
continue
|
128 |
|
@@ -166,12 +157,12 @@ class ChatMessage(BaseModel):
|
|
166 |
async def chat(message: ChatMessage):
|
167 |
words = pickle.loads(r.get('words'))
|
168 |
classes = pickle.loads(r.get('classes'))
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
|
176 |
sentence_words = nltk.word_tokenize(message.message)
|
177 |
bag = [0] * len(words)
|
@@ -265,21 +256,20 @@ html_code = """
|
|
265 |
<script>
|
266 |
function sendMessage() {
|
267 |
let userInput = document.getElementById('user_input').value;
|
268 |
-
document.getElementById('chatbox').innerHTML += '<p><strong>Tú:</strong> ' + userInput + '</p>';
|
269 |
document.getElementById('user_input').value = '';
|
270 |
-
|
271 |
fetch('/chat', {
|
272 |
method: 'POST',
|
273 |
-
headers: {
|
274 |
-
|
275 |
-
},
|
276 |
-
body: JSON.stringify({ message: userInput })
|
277 |
})
|
278 |
.then(response => response.json())
|
279 |
.then(data => {
|
280 |
-
|
281 |
-
|
|
|
|
|
282 |
});
|
|
|
283 |
});
|
284 |
}
|
285 |
</script>
|
@@ -288,7 +278,7 @@ html_code = """
|
|
288 |
"""
|
289 |
|
290 |
@app.get("/", response_class=HTMLResponse)
|
291 |
-
async def
|
292 |
return html_code
|
293 |
|
294 |
if __name__ == "__main__":
|
@@ -297,6 +287,4 @@ if __name__ == "__main__":
|
|
297 |
nltk.download('omw-1.4')
|
298 |
nltk.download('averaged_perceptron_tagger')
|
299 |
nltk.download('punkt_tab')
|
300 |
-
loop = asyncio.get_event_loop()
|
301 |
-
loop.run_until_complete(train_and_save_model())
|
302 |
uvicorn.run(app, host="0.0.0.0", port=8000)
|
|
|
18 |
from pydantic import BaseModel
|
19 |
from dotenv import load_dotenv
|
20 |
from datetime import datetime
|
|
|
21 |
import logging
|
22 |
|
23 |
+
# Configuración de logging
|
24 |
logging.basicConfig(level=logging.INFO)
|
25 |
logger = logging.getLogger(__name__)
|
26 |
|
|
|
90 |
if intent['tag'] not in classes:
|
91 |
classes.append(intent['tag'])
|
92 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
93 |
words = sorted(set(words))
|
94 |
classes = sorted(set(classes))
|
95 |
|
|
|
113 |
train_y = np.array([row[1] for row in training])
|
114 |
|
115 |
if train_x.shape[1] != len(words):
|
116 |
+
logger.error(f"Error: Las dimensiones de entrada no coinciden. Esperado: {len(words)}, encontrado: {train_x.shape[1]}")
|
117 |
await asyncio.sleep(60)
|
118 |
continue
|
119 |
|
|
|
157 |
async def chat(message: ChatMessage):
|
158 |
words = pickle.loads(r.get('words'))
|
159 |
classes = pickle.loads(r.get('classes'))
|
160 |
+
|
161 |
+
with tempfile.NamedTemporaryFile(delete=False) as temp_file:
|
162 |
+
temp_file.write(r.get('chatbot_model'))
|
163 |
+
temp_file_name = temp_file.name
|
164 |
+
|
165 |
+
model = load_model(temp_file_name)
|
166 |
|
167 |
sentence_words = nltk.word_tokenize(message.message)
|
168 |
bag = [0] * len(words)
|
|
|
256 |
<script>
|
257 |
function sendMessage() {
|
258 |
let userInput = document.getElementById('user_input').value;
|
|
|
259 |
document.getElementById('user_input').value = '';
|
|
|
260 |
fetch('/chat', {
|
261 |
method: 'POST',
|
262 |
+
headers: {'Content-Type': 'application/json'},
|
263 |
+
body: JSON.stringify({"message": userInput})
|
|
|
|
|
264 |
})
|
265 |
.then(response => response.json())
|
266 |
.then(data => {
|
267 |
+
let chatbox = document.getElementById('chatbox');
|
268 |
+
chatbox.innerHTML += '<p><b>Tú:</b> ' + userInput + '</p>';
|
269 |
+
data.forEach(response => {
|
270 |
+
chatbox.innerHTML += '<p><b>Bot:</b> ' + response.intent + ' (' + response.probability + ')</p>';
|
271 |
});
|
272 |
+
chatbox.scrollTop = chatbox.scrollHeight;
|
273 |
});
|
274 |
}
|
275 |
</script>
|
|
|
278 |
"""
|
279 |
|
280 |
@app.get("/", response_class=HTMLResponse)
|
281 |
+
async def read_root():
|
282 |
return html_code
|
283 |
|
284 |
if __name__ == "__main__":
|
|
|
287 |
nltk.download('omw-1.4')
|
288 |
nltk.download('averaged_perceptron_tagger')
|
289 |
nltk.download('punkt_tab')
|
|
|
|
|
290 |
uvicorn.run(app, host="0.0.0.0", port=8000)
|