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() st.write(f"Loaded knowledge base: {self.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: st.write("Knowledge base file not found, starting with an empty knowledge base.") 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) st.write(f"Knowledge base saved: {self.knowledge_base}") def learn_and_response(self, user_input): # Try to find a response 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:") # Display a text input to teach the bot 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!") return response # Return the learned response immediately else: st.warning("Please provide a response before submitting.") else: st.write(f"Found response for '{user_input}': {response}") return response def find_response(self, user_input): # Search for the user input in the knowledge base 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): # Add the new question-response pair to the knowledge base new_question = {'question': user_input.lower(), 'response': response} self.knowledge_base['questions'].append(new_question) st.write(f"New question added: {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.")