Spaces:
Runtime error
Runtime error
| import os | |
| # os.environ["GROQ_API_KEY"] = "YOUR_GROQ_API_KEY" | |
| # from google.colab import userdata | |
| # GROQ_API_KEY=userdata.get('rag-based') | |
| import gradio as gr | |
| from groq import Groq | |
| from langchain_text_splitters import RecursiveCharacterTextSplitter | |
| from langchain_community.document_loaders import PyPDFLoader | |
| from langchain_community.vectorstores import FAISS | |
| from langchain_community.embeddings import HuggingFaceEmbeddings | |
| # ----------------------------- | |
| # Environment Setup | |
| # ----------------------------- | |
| # GROQ_API_KEY = os.environ.get("Rag-based") | |
| client = Groq(api_key=os.environ.get("Rag_based")) | |
| # ----------------------------- | |
| # Global Variables | |
| # ----------------------------- | |
| vector_db = None | |
| # ----------------------------- | |
| # Embedding Model | |
| # ----------------------------- | |
| embedding_model = HuggingFaceEmbeddings( | |
| model_name="sentence-transformers/all-MiniLM-L6-v2" | |
| ) | |
| # ----------------------------- | |
| # Document Processing Function | |
| # ----------------------------- | |
| def process_document(pdf_file): | |
| global vector_db | |
| if pdf_file is None: | |
| return "Please upload a PDF Document first." | |
| try: | |
| # Load PDF | |
| loader = PyPDFLoader(pdf_file.name) | |
| documents = loader.load() | |
| # Chunking | |
| text_splitter = RecursiveCharacterTextSplitter( | |
| chunk_size=1000, | |
| chunk_overlap=200 | |
| ) | |
| chunks = text_splitter.split_documents(documents) | |
| # Create FAISS vector database | |
| vector_db = FAISS.from_documents( | |
| chunks, | |
| embedding_model | |
| ) | |
| return f"Document processed successfully. {len(chunks)} chunks of your document created. Now, proceed to ask your question ahead." | |
| except Exception as e: | |
| return f"Error processing document: {str(e)}" | |
| # ----------------------------- | |
| # Question Answering Function | |
| # ----------------------------- | |
| def ask_question(question): | |
| global vector_db | |
| if vector_db is None: | |
| return "Please upload and process a PDF document first." | |
| try: | |
| # Retrieve relevant chunks | |
| docs = vector_db.similarity_search(question, k=4) | |
| context = "\n\n".join([doc.page_content for doc in docs]) | |
| prompt = f""" | |
| You are a helpful assistant. Answer the question ONLY using the following context. | |
| If the answer is not in the context, say "I could not find the answer in the provided context." | |
| Context: | |
| {context} | |
| Question: | |
| {question} | |
| Answer clearly and based only on the provided context. | |
| """ | |
| # Groq LLM call | |
| chat_completion = client.chat.completions.create( | |
| messages=[ | |
| {"role": "user", "content": prompt} | |
| ], | |
| model="llama-3.3-70b-versatile", | |
| ) | |
| response = chat_completion.choices[0].message.content | |
| return response | |
| except Exception as e: | |
| return f"Error generating answer: {str(e)}" | |
| # ----------------------------- | |
| # Gradio Interface | |
| # ----------------------------- | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# 📄 PDF Document Assistant Developed by Asif Jamal") | |
| gr.Markdown( | |
| "Upload a PDF document and ask questions about its content." | |
| ) | |
| pdf_input = gr.File(label="Upload PDF Document") | |
| process_button = gr.Button("Click to Process Document") | |
| process_output = gr.Textbox(label="Processing Status") | |
| process_button.click( | |
| process_document, | |
| inputs=pdf_input, | |
| outputs=process_output | |
| ) | |
| gr.Markdown("## Ask Questions") | |
| question_input = gr.Textbox( | |
| label="Enter your question." | |
| ) | |
| ask_button = gr.Button("Click to Proceed") | |
| answer_output = gr.Textbox( | |
| label="Answer", | |
| lines=10 | |
| ) | |
| ask_button.click( | |
| ask_question, | |
| inputs=question_input, | |
| outputs=answer_output | |
| ) | |
| gr.Markdown( | |
| """ | |
| --- | |
| © 2026 AI Document Assistant | |
| Developed by Asif Jamal | |
| """ | |
| ) | |
| demo.launch() |