Spaces:
Sleeping
Sleeping
import gradio as gr | |
import os | |
from langchain import PromptTemplate, LLMChain | |
from langchain_together import Together | |
import pdfplumber | |
# Set the API key | |
os.environ['TOGETHER_API_KEY'] = "c2f52626b97118b71c0c36f66eda4f5957c8fc475e760c3d72f98ba07d3ed3b5" | |
def extract_text_from_pdf(pdf_file, max_pages=16): | |
text = "" | |
with pdfplumber.open(pdf_file) as pdf: | |
for i, page in enumerate(pdf.pages): | |
if i >= max_pages: | |
break | |
text += page.extract_text() + "\n" | |
return text | |
def Bot(text, question): | |
chat_template = """ | |
Based on the provided context: {text} | |
Please answer the following question: {Questions} | |
Only provide answers that are directly related to the context. If the question is unrelated, respond with "I don't know". | |
""" | |
prompt = PromptTemplate( | |
input_variables=['text', 'Questions'], | |
template=chat_template | |
) | |
llama3 = Together(model="meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo", max_tokens=50) | |
Generated_chat = LLMChain(llm=llama3, prompt=prompt) | |
try: | |
response = Generated_chat.invoke({ | |
"text": text, | |
"Questions": question | |
}) | |
response_text = response['text'] | |
response_text = response_text.replace("assistant", "") | |
# Post-processing to handle repeated words and ensure completeness | |
words = response_text.split() | |
seen = set() | |
filtered_words = [word for word in words if word.lower() not in seen and not seen.add(word.lower())] | |
response_text = ' '.join(filtered_words) | |
response_text = response_text.strip() # Ensuring no extra spaces at the ends | |
if not response_text.endswith('.'): | |
response_text += '.' | |
return response_text | |
except Exception as e: | |
return f"Error in generating response: {e}" | |
def ChatBot(history, document, question): | |
greetings = ["hi", "hello", "hey", "greetings", "what's up", "howdy"] | |
question_lower = question.lower().strip() | |
if question_lower in greetings or any(question_lower.startswith(greeting) for greeting in greetings): | |
return history + [("User", question), ("Bot", "Hello! How can I assist you with the document today?")] | |
# Extract text from the uploaded PDF document | |
text = extract_text_from_pdf(document) | |
# Generate the bot response based on the question and extracted text | |
response = Bot(text, question) | |
# Update chat history with the user's question and bot's response | |
history.append(("User", question)) | |
history.append(("Bot", response)) | |
return history | |
# Set up the Gradio interface using Blocks | |
with gr.Blocks() as iface: | |
chatbot = gr.Chatbot() | |
document = gr.File(label="Upload PDF Document", type="filepath") | |
question = gr.Textbox(label="Ask a Question", placeholder="Type your question here...") | |
def respond(history, document, question): | |
return ChatBot(history, document, question) | |
question.submit(respond, [chatbot, document, question], chatbot) | |
iface.launch(debug=True) | |