achref's picture
Update app.py
49b69dc
raw
history blame contribute delete
No virus
2.71 kB
import gradio as gr
import asyncio
from core import chatbot, estimate_costs
import openai
import PyPDF2
from file_operations import open_file
prompts = [
"Can you give me a very clear explanation of the core assertions, mechanics mentioned in this paper?",
"Can you give a short summary with bullet points and key takeaways",
"Can you give me an analogy or metaphor that will help explain this to a broad audience.",
]
async def process_prompt(prompt, ALL_MESSAGES, model):
report = ""
ALL_MESSAGES.append({"role": "user", "content": prompt})
response, tokens = await chatbot(ALL_MESSAGES, model)
ALL_MESSAGES.append({"role": "assistant", "content": response})
report += "\n\n\n\nQ: %s\n\nA: %s" % (prompt, response)
return report
async def process_pdf_content(text, prompts):
model = "gpt-3.5-turbo-16k"
if len(text) > 22000:
text = text[:22000]
model = "gpt-4-32k"
prompt_tokens = len(text) / 0.75
for p in prompts:
prompt_tokens += len(p) / 0.75
costs = estimate_costs(prompt_tokens, model)
if costs > 2:
return f"THIS IS WAY TO MUCH {costs}"
else:
ALL_MESSAGES = [{"role": "system", "content": text}]
prompt_tasks = [process_prompt(p, ALL_MESSAGES, model) for p in prompts]
results = await asyncio.gather(*prompt_tasks)
return " ".join(results).strip()
def process_pdf(pdf_file, prompt1, prompt2, prompt3, key):
openai.api_key = key
# Open the PDF file
prompts = [
prompt for prompt in [prompt1, prompt2, prompt3] if prompt
] # Only include prompts that are not empty
pdf_reader = PyPDF2.PdfReader(pdf_file)
paper = ""
for page_num in range(len(pdf_reader.pages)):
page = pdf_reader.pages[page_num]
paper += page.extract_text()
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
task = process_pdf_content(paper, prompts)
result = loop.run_until_complete(task)
return result
iface = gr.Interface(
fn=process_pdf,
inputs=[
gr.inputs.File(),
gr.inputs.Textbox(
lines=2, placeholder="Enter Prompt 1 Here...", label="Prompt 1"
),
gr.inputs.Textbox(
lines=2, placeholder="Enter Prompt 2 Here...", label="Prompt 2"
),
gr.inputs.Textbox(
lines=2, placeholder="Enter Prompt 3 Here...", label="Prompt 3"
),
gr.inputs.Textbox(
lines=2, placeholder="Enter Key starts with sk", label="OPENAI API KEY"
)
],
outputs="text",
title="Paper Analyser",
description="This tool analyse your academic papers and returns key findings",
)
iface.launch()