import os import gradio as gr from dotenv import load_dotenv from langchain.vectorstores.faiss import FAISS # Import FAISS from langchain.vectorstores.chroma import Chroma # Import Chroma from langchain.document_loaders import PyPDFLoader from langchain.text_splitter import CharacterTextSplitter from langchain.embeddings import HuggingFaceInferenceAPIEmbeddings from langchain.embeddings import HuggingFaceBgeEmbeddings # Load environment variables load_dotenv() # Use Hugging Face Inference API embeddings inference_api_key = os.getenv('HF') # Use getenv to retrieve environment variable api_hf_embeddings = HuggingFaceInferenceAPIEmbeddings( api_key=inference_api_key, model_name="sentence-transformers/all-MiniLM-l6-v2" ) # Load and process the PDF files loader = PyPDFLoader("./new_papers/ALiBi.pdf") documents = loader.load() # Split the documents into chunks and embed them using the HfApiEmbeddingTool text_splitter = CharacterTextSplitter(chunk_size=100, chunk_overlap=0) vdocuments = text_splitter.split_documents(documents) model = "BAAI/bge-base-en-v1.5" encode_kwargs = { "normalize_embeddings": True } # set True to compute cosine similarity embeddings = HuggingFaceBgeEmbeddings( model_name=model, encode_kwargs=encode_kwargs, model_kwargs={"device": "cpu"} ) # Create FAISS vector store for API embeddings api_db = FAISS.from_texts(texts=vdocuments, embedding=embeddings) # Define the PDF retrieval function def pdf_retrieval(query): # Run the query through the retriever response = api_db.similarity_search(query) return response # Create Gradio interface for the API retriever api_tool = gr.Interface( fn=pdf_retrieval, inputs=[gr.Textbox()], outputs=gr.Textbox(), live=True, title="API PDF Retrieval Tool", description="This tool indexes PDF documents and retrieves relevant answers based on a given query (HF Inference API Embeddings).", ) # Launch the Gradio interface api_tool.launch()