Spaces:
Runtime error
Runtime error
Commit ·
e1a13e5
1
Parent(s): 5eb4d86
Upload app.py
Browse files
app.py
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# !pip install PyMuPDF gradio openai
|
| 2 |
+
|
| 3 |
+
import fitz, openai
|
| 4 |
+
import gradio as gr
|
| 5 |
+
|
| 6 |
+
def formatar(texto):
|
| 7 |
+
texto = texto.replace('\n', ' ')
|
| 8 |
+
return texto
|
| 9 |
+
|
| 10 |
+
def pdf_para_lista(documento):
|
| 11 |
+
conteudo = fitz.open(documento)
|
| 12 |
+
total_paginas = conteudo.page_count
|
| 13 |
+
lista_conteudo = []
|
| 14 |
+
# lê da primeira página à última
|
| 15 |
+
for i in range(0, total_paginas):
|
| 16 |
+
# pega todo o texto da página
|
| 17 |
+
texto = conteudo.load_page(i).get_text("text")
|
| 18 |
+
texto = formatar(texto)
|
| 19 |
+
# adiciona o indicador de numeração da páginas
|
| 20 |
+
pagina = 'Página '+str(i+1)+' - '
|
| 21 |
+
lista_conteudo.append(pagina+texto)
|
| 22 |
+
|
| 23 |
+
conteudo.close()
|
| 24 |
+
return lista_conteudo
|
| 25 |
+
|
| 26 |
+
def getResposta(arquivo, pergunta, openAI_key):
|
| 27 |
+
openai.api_key = openAI_key
|
| 28 |
+
base_texto = pdf_para_lista(arquivo)
|
| 29 |
+
prompt = ""
|
| 30 |
+
# adiciona uma quebra de linha para cada página
|
| 31 |
+
for c in base_texto:
|
| 32 |
+
prompt += c + '\n\n'
|
| 33 |
+
# instancia o modelo GPT
|
| 34 |
+
completion = openai.ChatCompletion.create(
|
| 35 |
+
model = 'gpt-3.5-turbo',
|
| 36 |
+
messages = [
|
| 37 |
+
{'role': 'assistant', 'content': prompt},
|
| 38 |
+
{'role': 'user', 'content': pergunta},
|
| 39 |
+
{'role': 'system', 'content':'Retorne apenas texto contido no resultado. Retorne o número da página de cada resultado no formato [Página].'}
|
| 40 |
+
],
|
| 41 |
+
temperature = 0
|
| 42 |
+
)
|
| 43 |
+
resposta = completion['choices'][0]['message']['content']
|
| 44 |
+
return resposta
|
| 45 |
+
|
| 46 |
+
with gr.Blocks() as demo:
|
| 47 |
+
|
| 48 |
+
gr.Markdown(f'<center><h1>Aplicação IA Generativa em Documentos PDF</h1></center>')
|
| 49 |
+
|
| 50 |
+
with gr.Row():
|
| 51 |
+
|
| 52 |
+
with gr.Group():
|
| 53 |
+
gr.Markdown(f'<p style="text-align:center">Open AI API key <a href="https://platform.openai.com/account/api-keys">aqui</a></p>')
|
| 54 |
+
openAI_key=gr.Textbox(label='Sua chave OpenAI:')
|
| 55 |
+
arquivo = gr.File(label='Insira seu PDF:', file_types=['.pdf'])
|
| 56 |
+
pergunta = gr.Textbox(label='Faça um pergunta em relação ao PDF:')
|
| 57 |
+
btn = gr.Button(value='Enviar')
|
| 58 |
+
btn.style(full_width=True)
|
| 59 |
+
with gr.Group():
|
| 60 |
+
resposta = gr.Textbox(label='Resposta:')
|
| 61 |
+
|
| 62 |
+
btn.click(getResposta, inputs=[arquivo, pergunta, openAI_key], outputs=[resposta])
|
| 63 |
+
|
| 64 |
+
demo.launch()
|
| 65 |
+
|