File size: 2,410 Bytes
ecd01fe
 
 
 
 
 
 
2277e4f
 
ecd01fe
 
 
 
 
2277e4f
ecd01fe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2277e4f
ecd01fe
 
2277e4f
ecd01fe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2277e4f
ecd01fe
2277e4f
ecd01fe
 
 
 
 
 
 
2277e4f
ecd01fe
2277e4f
 
 
ecd01fe
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
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="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",
    model_name="deepseek-r1-distill-llama-70b"
)

def create_rag_system():
    try:
        # 1. Load Documents
        pdf_loader = PyPDFLoader("smarthome_hub_documentation.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="all-MiniLM-L6-v2"  # Smaller model
        )
        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
        response = qa_chain.run(message)
        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()