Spaces:
Sleeping
Sleeping
import json | |
import streamlit as st | |
st.set_page_config(page_title="Self-Learning Chatbot") | |
st.title("Self-Learning Chatbot") | |
class ChatBot: | |
def __init__(self, knowledge_base_file='knowledge_base.json'): | |
self.knowledge_base_file = knowledge_base_file | |
self.knowledge_base = self.load_knowledge_base() | |
def load_knowledge_base(self): | |
"""Load knowledge base from the JSON file.""" | |
try: | |
with open(self.knowledge_base_file, "r") as f: | |
return json.load(f) | |
except FileNotFoundError: | |
return {"questions": []} # Return an empty structure if file does not exist | |
def save_knowledge_base(self): | |
"""Save knowledge base to the JSON file.""" | |
with open(self.knowledge_base_file, 'w') as f: | |
json.dump(self.knowledge_base, f, indent=4) | |
def learn_and_response(self, user_input): | |
response = self.find_response(user_input) | |
if response is None: | |
st.write(f"I don't have a response for '{user_input}'. Please teach me:") | |
response = st.text_input(f"Teach me a response for '{user_input}':", key="teach_input") | |
if st.button("Submit Response"): | |
if response: | |
self.teach_response(user_input, response) | |
self.save_knowledge_base() # Save after teaching | |
st.success("Response saved!") | |
else: | |
st.warning("Please provide a response before submitting.") | |
return response | |
def find_response(self, user_input): | |
for question in self.knowledge_base.get("questions", []): | |
if question['question'].lower() == user_input.lower(): | |
return question['response'] | |
return None | |
def teach_response(self, user_input, response): | |
new_question = {'question': user_input.lower(), 'response': response} | |
if 'questions' not in self.knowledge_base: | |
self.knowledge_base['questions'] = [] | |
self.knowledge_base['questions'].append(new_question) | |
if __name__ == "__main__": | |
# Initialize the chatbot with the JSON file | |
chatbot = ChatBot('knowledge_base.json') | |
# User interaction with Streamlit UI | |
user_input = st.text_input("Enter your query below:", key="user_input") | |
if st.button("Submit Query"): | |
if user_input: | |
response = chatbot.learn_and_response(user_input) | |
if response: | |
st.write(f"Bot: {response}") | |
else: | |
st.warning("Please enter a query before submitting.") | |