Spaces:
Runtime error
Runtime error
| import os | |
| import streamlit as st | |
| from groq import Groq | |
| from langchain.embeddings import HuggingFaceEmbeddings | |
| from langchain.vectorstores import FAISS | |
| from langchain.text_splitter import CharacterTextSplitter | |
| from langchain.document_loaders import TextLoader, PyPDFLoader | |
| from langchain.chains import RetrievalQA | |
| from langchain.llms.base import LLM | |
| from tempfile import NamedTemporaryFile | |
| # Load Groq API key from environment variable | |
| GROQ_API_KEY = os.getenv("GROQ_API_KEY") | |
| # Initialize Groq client | |
| groq_client = Groq(api_key=GROQ_API_KEY) | |
| # Define a basic LLM wrapper for Groq | |
| class GroqLLM(LLM): | |
| def __init__(self, model_name="llama3-8b-8192"): | |
| self.model_name = model_name | |
| def _call(self, prompt, stop=None): | |
| response = groq_client.chat.completions.create( | |
| model=self.model_name, | |
| messages=[{"role": "user", "content": prompt}], | |
| ) | |
| return response.choices[0].message.content.strip() | |
| def _llm_type(self): | |
| return "groq_llm" | |
| # Streamlit UI | |
| st.title("📚 RAG App with Groq + HuggingFace + Streamlit") | |
| st.write("Upload a PDF or TXT file, ask a question, and get answers powered by RAG.") | |
| uploaded_file = st.file_uploader("Upload your document", type=["pdf", "txt"]) | |
| if uploaded_file: | |
| with NamedTemporaryFile(delete=False) as tmp_file: | |
| tmp_file.write(uploaded_file.read()) | |
| tmp_path = tmp_file.name | |
| # Load document | |
| if uploaded_file.type == "application/pdf": | |
| loader = PyPDFLoader(tmp_path) | |
| else: | |
| loader = TextLoader(tmp_path) | |
| docs = loader.load() | |
| # Split into chunks | |
| splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=200) | |
| texts = splitter.split_documents(docs) | |
| # Create embeddings and FAISS index | |
| embeddings = HuggingFaceEmbeddings() | |
| db = FAISS.from_documents(texts, embeddings) | |
| # RAG chain | |
| retriever = db.as_retriever() | |
| qa_chain = RetrievalQA.from_chain_type(llm=GroqLLM(), retriever=retriever) | |
| # Input box | |
| query = st.text_input("Ask something about the document:") | |
| if query: | |
| result = qa_chain.run(query) | |
| st.markdown("### 🧠 Answer:") | |
| st.success(result) | |