import os from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.embeddings import HuggingFaceEmbeddings from langchain.vectorstores import FAISS from langchain.document_loaders import PyPDFLoader from langchain.chains import RetrievalQA from langchain_groq import ChatGroq import gradio as gr # Initialize Groq llm = ChatGroq( api_key=os.environ.get("GROQ_API_KEY"), model_name="llama-3.1-8b-instant" ) def create_rag_system(): try: # 1. Load Documents pdf_loader = PyPDFLoader("smarthome_hub_documentation_Final.pdf") pdf_docs = pdf_loader.load() # 2. Split Documents text_splitter = RecursiveCharacterTextSplitter( chunk_size=2000, chunk_overlap=200, length_function=len, ) chunks = text_splitter.split_documents(pdf_docs) # 3. Create Embeddings and Vector Store embeddings = HuggingFaceEmbeddings( model_name="sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2" ) vectorstore = FAISS.from_documents(chunks, embeddings) return vectorstore except Exception as e: print(f"Error creating RAG system: {e}") return None # Initialize the RAG system vectorstore = create_rag_system() def respond(message, history): try: if vectorstore is None: return "Sorry, the system is currently unavailable. Please try again later." # Create QA chain for each query qa_chain = RetrievalQA.from_chain_type( llm=llm, chain_type="stuff", retriever=vectorstore.as_retriever( search_type="mmr", search_kwargs={"k": 3} ) ) # Get response rag_prompt = f"""Jawablah pertanyaan berikut dalam Bahasa Indonesia: {message}""" response = qa_chain.run(rag_prompt) return response except Exception as e: return f"An error occurred: {str(e)}" # Create Gradio interface demo = gr.ChatInterface( fn=respond, title="SmartHome Hub X1000 Assistant", description="Ask me anything about SmartHome Hub X1000!", examples=[ "Apa saja fitur utama dari SmartHome Hub X1000?", "Bagaimana cara menginstall SmartHome Hub X1000?", "Jelaskan sistem keamanan SmartHome Hub X1000" ], theme=gr.themes.Soft() ) if __name__ == "__main__": demo.launch()