import streamlit as st from sentence_transformers import SentenceTransformer import faiss import pandas as pd import numpy as np model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2') df = pd.read_csv('course_data.csv',index_col=0) courses = df.to_dict('records') descriptions = [course['Content'] for course in courses] embeddings = model.encode(descriptions) index = faiss.IndexFlatL2(embeddings.shape[1]) # L2 distance index index.add(np.array(embeddings)) # Function to simulate chatbot response (replace with your AI model logic) def generate_response(query,k=5): # print(query) # Placeholder response logic (you can replace this with your model/API call) query_embedding = model.encode([query[-1]]) # Encode the user query # Search in FAISS index for the closest matches D, I = index.search(np.array(query_embedding), k=k) # k is the number of top results # Retrieve course titles based on the search results results = [] desc = [] for idx in I[0]: course_title = courses[idx]['Course_Name'] # Get the course title desc.append(courses[idx]['Content']) results.append(course_title) # output='' # for i,j in enumerate(list(set(results))): # output+=str(i+1)+j+'\n' return list(set(results)) # Define session state variables if 'messages' not in st.session_state: st.session_state.messages = [] if 'mess' not in st.session_state: st.session_state.mess=[] if st.sidebar.button("RESET"): st.session_state.messages=[] st.session_state.mess=[] # User input st.title('Analytics Vidhya Course Finder') user_input = st.chat_input('Write your message here...') if user_input: # Append user input to messages st.session_state.messages.append({"role": "user", "content": user_input}) st.session_state.mess+=[user_input] # Generate chatbot response bot_response = generate_response(st.session_state.mess) st.session_state.messages.append({"role": "bot", "content": bot_response}) # Display chat messages in correct order for message in st.session_state.messages: if message["role"] == "user": with st.chat_message("human"): st.write(message['content']) else: with st.chat_message("ai"): for i in message['content']: st.write('* '+i)