Edmon02's picture
Update app.py
32c2f3c
import os
import gradio as gr
from langchain.document_loaders import OnlinePDFLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.chat_models import ChatAnthropic
from langchain.prompts import ChatPromptTemplate
from transformers import pipeline
# Fetch API key from environment variables
ANTHROPIC_API_KEY = os.getenv("ANTHROPIC_API_KEY")
pdf_content = ""
def load_pdf(pdf_doc):
global pdf_content
if pdf_doc is None:
return "No PDF uploaded.", ""
try:
loader = OnlinePDFLoader(pdf_doc.name)
documents = loader.load()
pdf_content = ' '.join(documents)
return "PDF Loaded Successfully.", pdf_content
except Exception as e:
return f"Error processing PDF: {e}", ""
def chat_with_pdf(question):
model = ChatAnthropic()
prompt = ChatPromptTemplate.from_messages([
("human", pdf_content),
("human", question),
("human", "Give a clear summary of this pdf information at an 8th grade reading level.")
])
chain = prompt | model
response = chain.invoke({})
summarizer = pipeline("summarization")
summary = summarizer(pdf_content, max_length=1000, min_length=30, do_sample=False)[0]['summary_text']
return summary, response.content
def gradio_interface(pdf_doc, question):
if not pdf_content:
return load_pdf(pdf_doc)
else:
return chat_with_pdf(question)
gr.Interface(
fn=gradio_interface,
inputs=[
gr.components.File(label="Load a pdf", file_types=['.pdf'], type="file"),
gr.components.Textbox(label="Ask a question about the PDF")
],
outputs=[
gr.components.Textbox(label="Summary"),
gr.components.Textbox(label="Chat Response")
],
live=True,
title=os.getenv("ANTHROPIC_API_KEY")+"Chat with PDF content using Anthropic",
description="Upload a .PDF and interactively chat about its content.",
api_name='chat_with_pdf_3' # Changing api_name to avoid conflicts
).launch()