import streamlit as st # Define appliance options appliance_options = ["Refrigerator", "Dish Washer", "Coffee Maker", "Air Conditioner", "Washing Machine", "Laptop", "Oven", "TV", "Soundbar", "Vacuum Cleaner", "Iron", "Mixer", "Food Processor", "Tooth Brush", "Electric Toaster", "Citrus Press", "Air Dryer", "Juicer", "Heater", "Ceiling Fan"] # Define brand dictionaries for each appliance (key: appliance name, value: list of brands) brand_options = { "Refrigerator": ["Haier", "Samsung", "Dawlance", "Hitachi", "PEL"], "Dish Washer": ["Samsung", "Bosch", "Baumeatic"], "Coffee Maker": ["Black & Decker"], "Air Conditioner": ["Samsung", "Haier", "GREE"], "Washing Machine": ["Samsung", "Haier"], "Laptop": ["Haier"], "Oven": ["La Vita", "Samsung", "Kenwood", "Haier", "Phillips"], "TV": ["Samsung", "Haier", "Hisense", "Phillips", "Google"], "Soundbar": ["Samsung", "Phillips"], "Vacuum Cleaner": ["Samsung"], "Iron": ["Phillips"], "Mixer": ["Phillips"], "Food Processor": ["Phillips"], "Tooth Brush": ["Phillips"], "Electric Toaster": ["Phillips"], "Citrus Press": ["Phillips"], "Air Dryer": ["Phillips"], "Juicer": ["Phillips"], "Heater": ["Phillips"], "Ceiling Fan": ["GFC", "Hunter"] } # Get user selections for appliance and brand selected_appliance = st.selectbox("Select Appliance", appliance_options) selected_brand = None if selected_appliance: selected_brand = st.selectbox(f"Select Brand for {selected_appliance}", brand_options[selected_appliance]) # Display user selection if selected_appliance and selected_brand: st.write(f"You selected {selected_brand} {selected_appliance}") import os from groq import Groq from langchain_community.embeddings import HuggingFaceEmbeddings from langchain_community.vectorstores import FAISS from langchain.text_splitter import RecursiveCharacterTextSplitter from PyPDF2 import PdfReader from tempfile import NamedTemporaryFile # Initialize Groq client client = Groq(api_key="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") #client = Groq("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") # Function to extract text from a PDF def extract_text_from_pdf(pdf_file_path): pdf_reader = PdfReader(pdf_file_path) text = "" for page in pdf_reader.pages: text += page.extract_text() return text # Function to split text into chunks def chunk_text(text, chunk_size=500, chunk_overlap=50): text_splitter = RecursiveCharacterTextSplitter( chunk_size=chunk_size, chunk_overlap=chunk_overlap ) return text_splitter.split_text(text) # Function to create embeddings and store them in FAISS def create_embeddings_and_store(chunks): embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2") vector_db = FAISS.from_texts(chunks, embedding=embeddings) return vector_db # Function to query the vector database and interact with Groq def query_vector_db(query, vector_db): # Retrieve relevant documents docs = vector_db.similarity_search(query, k=3) context = "\n".join([doc.page_content for doc in docs]) # Interact with Groq API chat_completion = client.chat.completions.create( messages=[ {"role": "system", "content": f"Use the following context:\n{context}"}, {"role": "user", "content": query}, ], model="llama3-8b-8192", ) return chat_completion.choices[0].message.content # Streamlit app st.title("RAG-Based Application") # Upload PDF uploaded_file = st.file_uploader("Upload the troubleshooting guide of appliance ", type=["pdf"]) if uploaded_file: with NamedTemporaryFile(delete=False, suffix=".pdf") as temp_file: temp_file.write(uploaded_file.read()) pdf_path = temp_file.name # Extract text text = extract_text_from_pdf(pdf_path) #st.write("PDF Text Extracted Successfully!") # Chunk text chunks = chunk_text(text) #st.write("Text Chunked Successfully!") # Generate embeddings and store in FAISS vector_db = create_embeddings_and_store(chunks) #st.write("Embeddings Generated and Stored Successfully!") # User query input user_query = st.text_input("Enter your query:") if user_query: response = query_vector_db(user_query, vector_db) st.write(f"Possible solutions for {selected_brand} {selected_appliance} would be") st.write(response)