from PyPDF2 import PdfReader from langchain.embeddings.openai import OpenAIEmbeddings from langchain.text_splitter import CharacterTextSplitter from langchain.vectorstores import FAISS import os from typing_extensions import Concatenate import gradio as gr from langchain.chains.question_answering import load_qa_chain from langchain.llms import OpenAI # Set OpenAI API key os.environ["OPENAI_API_KEY"] = "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" # Read text from PDF pdfreader = PdfReader('schizophrenia.pdf') raw_text = '' for page in pdfreader.pages: content = page.extract_text() if content: raw_text += content # Split text into chunks text_splitter = CharacterTextSplitter( separator="\n", chunk_size=800, chunk_overlap=200, length_function=len, ) texts = text_splitter.split_text(raw_text) # Extract embeddings using OpenAI embeddings = OpenAIEmbeddings() # Perform similarity search document_search = FAISS.from_texts(texts, embeddings) # Load question-answering chain chain = load_qa_chain(OpenAI(), chain_type="stuff") # Define function to process user query def process_query(query): # Perform similarity search to retrieve relevant documents docs = document_search.similarity_search(query) # Run question-answering process with retrieved documents and user query response = chain.run(input_documents=docs, question=query) # Return the response return response # Define Gradio interface iface = gr.Interface( fn=process_query, inputs="text", outputs="text", title="Serene", description="Hi! How do you feel today?" ) # Launch the interface iface.launch()