|
|
|
"""Hackathon_Illuminati.ipynb |
|
|
|
Automatically generated by Colaboratory. |
|
|
|
Original file is located at |
|
https://colab.research.google.com/drive/1B-SaMQ85UdV9DnqZ6_OWqg8oOAlgcZ5V |
|
|
|
# LangChain QA Panel App |
|
|
|
This notebook shows how to make this app: |
|
""" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import panel as pn |
|
from transformers import pipeline |
|
from pdf2image import convert_from_path |
|
import easyocr |
|
|
|
pn.extension('texteditor', template="bootstrap", sizing_mode='stretch_width') |
|
pn.state.template.param.update( |
|
main_max_width="690px", |
|
header_background="#F08080", |
|
) |
|
|
|
file_input = pn.widgets.FileInput(width=300) |
|
|
|
prompt = pn.widgets.TextEditor( |
|
value="", placeholder="Enter your questions here...", height=160, toolbar=False |
|
) |
|
run_button = pn.widgets.Button(name="Run") |
|
|
|
widgets = pn.Row( |
|
pn.Column(prompt, run_button, margin=5), width = 630 |
|
) |
|
|
|
def qa(file, query): |
|
|
|
images = convert_from_path(file) |
|
reader = easyocr.Reader(['en']) |
|
result = [] |
|
for i in range(len(images)): |
|
|
|
images[i].save('page'+ str(i) +'.jpg', 'JPEG') |
|
x=str(i) |
|
t='page'+x+'.jpg' |
|
result.append(reader.readtext(t, detail = 0)) |
|
text = "" |
|
for page in result: |
|
page_text = " ".join(page) |
|
text += page_text |
|
model = pipeline("question-answering", model='deepset/roberta-base-squad2') |
|
context = text |
|
result = model(question=query, context=context) |
|
print(f"Answer: {result['answer']}") |
|
return result |
|
|
|
convos = [] |
|
|
|
def qa_result(_): |
|
|
|
if file_input.value is not None: |
|
file_input.save("/content/temp.pdf") |
|
|
|
prompt_text = prompt.value |
|
if prompt_text: |
|
result = qa(file="/content/temp.pdf", query=prompt_text) |
|
convos.extend([ |
|
pn.Row( |
|
pn.panel("Q: ", width=10), |
|
prompt_text, |
|
width=600 |
|
), |
|
pn.Row( |
|
pn.panel("A: ", width=10), |
|
pn.Column( |
|
result["answer"], |
|
) |
|
) |
|
]) |
|
|
|
return pn.Column(*convos, margin=15, width=575, min_height=400) |
|
|
|
qa_interactive = pn.panel( |
|
pn.bind(qa_result, run_button), |
|
loading_indicator=True, |
|
) |
|
|
|
output = pn.WidgetBox('*Output will show up here:*', qa_interactive, width=630, scroll=True) |
|
|
|
|
|
pn.Column( |
|
pn.pane.Markdown(""" |
|
Question Answering with your PDF file! |
|
|
|
1) Upload a PDF. \n |
|
2) Type a question and click "Run". |
|
|
|
"""), |
|
pn.Row(file_input), |
|
output, |
|
widgets |
|
|
|
).servable() |