Spaces:
Sleeping
Sleeping
File size: 3,420 Bytes
f16c594 0503087 5624aa2 bbcd85b 0503087 34e5d9c 5624aa2 bbcd85b 5624aa2 34e5d9c bbcd85b 34e5d9c bbcd85b ed6732f bbcd85b ed6732f bbcd85b ed6732f bbcd85b ed6732f f16c594 34e5d9c 7398145 5624aa2 34e5d9c 71c21c0 34e5d9c 5624aa2 f16c594 13ae474 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
import gradio as gr
from transformers import AutoModelForCausalLM, AutoTokenizer
import fitz # PyMuPDF
import traceback
# Carregar o tokenizer e o modelo
tokenizer = AutoTokenizer.from_pretrained("Locutusque/gpt2-xl-conversational")
model = AutoModelForCausalLM.from_pretrained("Locutusque/gpt2-xl-conversational")
# Variável global para armazenar o conteúdo do PDF
pdf_content = ""
# Função para ler o PDF
def read_pdf(file_path):
try:
doc = fitz.open(file_path)
text = ""
for page_num in range(len(doc)):
page = doc.load_page(page_num)
text += page.get_text()
return text
except Exception as e:
print(f"Erro ao ler o PDF: {e}")
print(traceback.format_exc())
return ""
# Função para carregar o PDF e armazenar o conteúdo
def load_pdf(pdf_file):
global pdf_content
try:
pdf_path = pdf_file.name # Acessar o caminho do arquivo carregado
pdf_content = read_pdf(pdf_path)
if pdf_content:
return "PDF carregado com sucesso!"
else:
return "Falha ao carregar o PDF."
except Exception as e:
print(f"Erro ao carregar o PDF: {e}")
print(traceback.format_exc())
return "Erro ao carregar o PDF."
# Função para responder perguntas com base no conteúdo do PDF
def answer_question(question, max_length=200, temperature=0.7, top_k=50, top_p=0.95):
global pdf_content
try:
if not pdf_content:
return "Por favor, carregue um PDF primeiro.", ""
# Limitar o tamanho do conteúdo do PDF para evitar exceder o número máximo de tokens
max_tokens = 1024 # O número máximo de tokens permitido para o GPT-2 é geralmente 1024
truncated_content = pdf_content[:max_tokens]
prompt = f"Conteúdo do PDF: {truncated_content}\nPergunta: {question}\nResposta em português:"
# Verificando o tamanho do prompt
print(f"Prompt gerado (tamanho {len(prompt)}):\n{prompt[:500]}...") # Imprime os primeiros 500 caracteres para depuração
# Tokenizando o prompt
inputs = tokenizer(prompt, return_tensors="pt")
print(f"Tokens de entrada: {inputs.input_ids.shape[1]} tokens") # Verifica o número de tokens
# Gerar a resposta
outputs = model.generate(
inputs.input_ids,
max_length=max_length,
temperature=temperature,
top_k=top_k,
top_p=top_p,
num_return_sequences=1
)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
return response, prompt
except Exception as e:
print(f"Erro ao gerar resposta: {e}")
print(traceback.format_exc())
return "Erro ao gerar resposta.", ""
# Interface do Gradio para carregar PDF e fazer perguntas
pdf_loader = gr.Interface(
fn=load_pdf,
inputs=gr.File(label="Carregue um PDF"),
outputs="text",
title="Carregar PDF"
)
question_answerer = gr.Interface(
fn=answer_question,
inputs=gr.Textbox(lines=2, label="Pergunta"),
outputs=[gr.Textbox(label="Resposta"), gr.Textbox(label="Prompt usado")],
title="Perguntas sobre o PDF"
)
# Combinar as interfaces em uma aplicação
iface = gr.TabbedInterface(
[pdf_loader, question_answerer],
["Carregar PDF", "Fazer Perguntas"]
)
if __name__ == "__main__":
iface.launch() |