|
import os |
|
import streamlit as st |
|
from langchain import PromptTemplate |
|
from langchain.chains.question_answering import load_qa_chain |
|
from langchain.document_loaders import PyPDFLoader |
|
from langchain_google_genai import ChatGoogleGenerativeAI |
|
import google.generativeai as genai |
|
|
|
|
|
from dotenv import load_dotenv |
|
load_dotenv() |
|
|
|
|
|
def initialize(file_path, question): |
|
genai.configure(api_key=os.getenv("GOOGLE_API_KEY")) |
|
model = genai.GenerativeModel('gemini-pro') |
|
model = ChatGoogleGenerativeAI(model="gemini-pro", temperature=0.3) |
|
prompt_template = """Answer the question as precise as possible using the provided context. If the answer is |
|
not contained in the context, say "answer not available in context" \n\n |
|
Context: \n {context}?\n |
|
Question: \n {question} \n |
|
Answer: |
|
""" |
|
prompt = PromptTemplate(template=prompt_template, input_variables=["context", "question"]) |
|
if os.path.exists(file_path): |
|
pdf_loader = PyPDFLoader(file_path) |
|
pages = pdf_loader.load_and_split() |
|
context = "\n".join(str(page.page_content) for page in pages[:30]) |
|
stuff_chain = load_qa_chain(model, chain_type="stuff", prompt=prompt) |
|
stuff_answer = stuff_chain({"input_documents": pages, "question": question, "context": context}, return_only_outputs=True) |
|
return stuff_answer['output_text'] |
|
else: |
|
return None |
|
|
|
|
|
st.title('RAG Q&A Bot with Gemini - Pro') |
|
|
|
|
|
st.sidebar.title("Input") |
|
file_upload = st.sidebar.file_uploader("Upload PDF", type=["pdf"]) |
|
question_input = st.sidebar.text_input("Tanyakan Dokumen", "Apa isi dokumennya?") |
|
ask_button = st.sidebar.button("Ask Question") |
|
|
|
|
|
if ask_button: |
|
if file_upload is not None: |
|
with open("uploaded_pdf.pdf", "wb") as f: |
|
f.write(file_upload.getbuffer()) |
|
chatbot_answer = initialize("uploaded_pdf.pdf", question_input) |
|
if chatbot_answer: |
|
st.text_area("Answer - GeminiPro", value=chatbot_answer, height=500) |
|
else: |
|
st.error("Terjadi kesalahan saat memproses dokumen. Pastikan file PDF valid.") |
|
else: |
|
st.error("Mohon unggah file PDF untuk melanjutkan.") |
|
|