Spaces:
Build error
Build error
| import gradio as gr | |
| import os | |
| from PIL import Image | |
| import pytesseract | |
| from pdf2image import convert_from_path | |
| from langchain_community.embeddings import HuggingFaceEmbeddings | |
| from langchain.prompts import PromptTemplate | |
| from langchain.chains import RetrievalQA | |
| from langchain.memory import ConversationBufferMemory | |
| from langchain_groq import ChatGroq | |
| from langchain_community.vectorstores import FAISS | |
| from langchain.text_splitter import RecursiveCharacterTextSplitter | |
| # Initialize the Groq API Key and the model | |
| os.environ["GROQ_API_KEY"] = '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' | |
| llm = ChatGroq( | |
| model='llama3-70b-8192', | |
| temperature=0.5, | |
| max_tokens=None, | |
| timeout=None, | |
| max_retries=2 | |
| ) | |
| # OCR functions | |
| def ocr_image(image_path, language='eng+guj'): | |
| img = Image.open(image_path) | |
| return pytesseract.image_to_string(img, lang=language) | |
| def ocr_pdf(pdf_path, language='eng+guj'): | |
| images = convert_from_path(pdf_path) | |
| all_text = "\n".join(pytesseract.image_to_string(img, lang=language) for img in images) | |
| return all_text | |
| def ocr_file(file_path): | |
| ext = os.path.splitext(file_path)[1].lower() | |
| if ext == ".pdf": | |
| return ocr_pdf(file_path) | |
| elif ext in [".jpg", ".jpeg", ".png", ".bmp"]: | |
| return ocr_image(file_path) | |
| else: | |
| return "Unsupported file format." | |
| def get_text_chunks(text): | |
| splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100) | |
| return splitter.split_text(text) | |
| def get_vector_store(chunks): | |
| embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2") | |
| vector_store = FAISS.from_texts(chunks, embedding=embeddings) | |
| os.makedirs("faiss_index", exist_ok=True) | |
| vector_store.save_local("faiss_index") | |
| return vector_store | |
| # Conversational chain | |
| def get_conversational_chain(): | |
| template = """<Insert your prompt here>""" | |
| embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/paraphrase-MiniLM-L6-v2") | |
| vector_store = FAISS.load_local("faiss_index", embeddings) | |
| qa_chain = RetrievalQA.from_chain_type( | |
| llm, | |
| retriever=vector_store.as_retriever(), | |
| chain_type='stuff', | |
| verbose=True, | |
| chain_type_kwargs={ | |
| "prompt": PromptTemplate(input_variables=["history", "context", "question"], template=template), | |
| "memory": ConversationBufferMemory(memory_key="history", input_key="question"), | |
| } | |
| ) | |
| return qa_chain | |
| # File and question handling | |
| def process_files(files, question): | |
| text = "" | |
| for file in files: | |
| file_path = os.path.join("temp", file.name) | |
| with open(file_path, "wb") as f: | |
| f.write(file.read()) | |
| text += ocr_file(file_path) + "\n" | |
| chunks = get_text_chunks(text) | |
| vector_store = get_vector_store(chunks) | |
| qa_chain = get_conversational_chain() | |
| response = qa_chain({"query": question}) | |
| return response.get("result", "No result found.") | |
| # Gradio Interface | |
| def app(files, question): | |
| return process_files(files, question) | |
| iface = gr.Interface( | |
| fn=app, | |
| inputs=[gr.File(file_types=[".pdf", ".jpg", ".jpeg", ".png", ".bmp"], label="Upload Files"), gr.Textbox(label="Ask a Question")], | |
| outputs="text", | |
| title="OCR and Document Query System", | |
| description="Upload PDF or image files and ask questions based on their content." | |
| ) | |
| if __name__ == "__main__": | |
| iface.launch() | |