Spaces:
Sleeping
Sleeping
| 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) | |