Yhhxhfh commited on
Commit
2d11842
1 Parent(s): 4e9f5d4

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +16 -28
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
- with io.BytesIO(r.get('chatbot_model')) as f:
170
- with tempfile.NamedTemporaryFile(delete=False, suffix='.h5') as temp_file:
171
- temp_file.write(f.read())
172
- temp_file_name = temp_file.name
173
- model = load_model(temp_file_name)
174
- os.remove(temp_file.name)
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
- 'Content-Type': 'application/json'
275
- },
276
- body: JSON.stringify({ message: userInput })
277
  })
278
  .then(response => response.json())
279
  .then(data => {
280
- data.forEach(item => {
281
- document.getElementById('chatbox').innerHTML += '<p><strong>' + item.intent + ':</strong> ' + item.probability + '</p>';
 
 
282
  });
 
283
  });
284
  }
285
  </script>
@@ -288,7 +278,7 @@ html_code = """
288
  """
289
 
290
  @app.get("/", response_class=HTMLResponse)
291
- async def get_chat():
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)