tahirsher's picture
Update app.py
3fa17a3 verified
raw
history blame
3.03 kB
import nltk
import numpy as np
import tflearn
import tensorflow as tf
import random
import json
import pickle
import gradio as gr
from nltk.stem.lancaster import LancasterStemmer
nltk.download('punkt')
stemmer = LancasterStemmer()
# Load intents file
with open("intents.json") as file:
data = json.load(file)
# Data preprocessing
words, labels, docs_x, docs_y = [], [], [], []
for intent in data["intents"]:
for pattern in intent["patterns"]:
wrds = nltk.word_tokenize(pattern)
words.extend(wrds)
docs_x.append(wrds)
docs_y.append(intent["tag"])
if intent["tag"] not in labels:
labels.append(intent["tag"])
# Stem and sort words
words = sorted(set(stemmer.stem(w.lower()) for w in words if w not in ["?", ".", ",", "!"]))
labels = sorted(labels)
# Create training data
training, output = [], []
out_empty = [0] * len(labels)
for x, doc in enumerate(docs_x):
bag = [1 if stemmer.stem(w.lower()) in [stemmer.stem(word) for word in doc] else 0 for w in words]
output_row = out_empty[:]
output_row[labels.index(docs_y[x])] = 1
training.append(bag)
output.append(output_row)
training, output = np.array(training), np.array(output)
# Build and train the model
tf.compat.v1.reset_default_graph()
net = tflearn.input_data(shape=[None, len(training[0])])
net = tflearn.fully_connected(net, 8)
net = tflearn.fully_connected(net, 8)
net = tflearn.fully_connected(net, len(output[0]), activation="softmax")
net = tflearn.regression(net)
model = tflearn.DNN(net)
try:
model.load("MentalHealthChatBotmodel.tflearn")
except FileNotFoundError:
model.fit(training, output, n_epoch=1000, batch_size=8, show_metric=True)
model.save("MentalHealthChatBotmodel.tflearn")
# Function to preprocess user input
def bag_of_words(s, words):
bag = [0 for _ in range(len(words))]
s_words = nltk.word_tokenize(s)
s_words = [stemmer.stem(word.lower()) for word in s_words]
for se in s_words:
for i, w in enumerate(words):
if w == se:
bag[i] = 1
return np.array(bag)
# Chat function
def chat(message, history=None):
history = history or []
try:
bag = bag_of_words(message, words)
results = model.predict([bag])
results_index = np.argmax(results)
tag = labels[results_index]
for tg in data["intents"]:
if tg['tag'] == tag:
response = random.choice(tg['responses'])
break
else:
response = "I'm sorry, I don't have a response for that."
except Exception as e:
response = "I'm sorry, I couldn't understand your message."
history.append((message, response))
return history, history
# Gradio Interface
demo = gr.Interface(
fn=chat,
inputs=[gr.Textbox(lines=1, label="Message"), gr.State()],
outputs=[gr.Chatbot(label="Chat"), gr.State()],
allow_flagging="never",
title="Wellbeing for All | Generative AI Enthusiasts"
)
if __name__ == "__main__":
demo.launch()