import gradio as gr from transformers import AutoModelForCausalLM, AutoTokenizer from peft import PeftModel import torch # Modelos base_model = "microsoft/phi-2" model_peft = "vsvasconcelos/Phi-2_PT_QA_2_v3" # Carrega o tokenizer tokenizer = AutoTokenizer.from_pretrained(base_model) # Carrega o modelo base e o modelo treinado com PEFT model = AutoModelForCausalLM.from_pretrained(base_model) model = PeftModel.from_pretrained(model, model_peft) #Uma maquiagem pra deixar a resposta com a primeira letra em maiusculo def capitalize(text): if text: return text[0].upper() + text[1:] return text # Define a função para gerar respostas def generate_response(model, tokenizer, prompt, max_length=512, num_return_sequences=1): # Tokenizando o prompt de entrada inputs = tokenizer(prompt, return_tensors='pt') model.eval() # Gerando a resposta usando o modelo with torch.no_grad(): outputs = model.generate( inputs['input_ids'], max_length=max_length, num_return_sequences=num_return_sequences, pad_token_id=tokenizer.eos_token_id, eos_token_id=tokenizer.eos_token_id, early_stopping=True ) # Tokenizar a resposta gerada response = tokenizer.decode(outputs[0], skip_special_tokens=True) # Extrair a parte relevante da resposta if "### Resposta:" in response: response = response.split("### Resposta:")[-1].strip() # Capitalizar a primeira letra da resposta response = capitalize(response) return response # Define a função para responder às perguntas def answer_question(context, question): prompt = f"""Com base no contexto fornecido, responda a questão de forma sucinta. Contexto: {context} Questão: {question} ### Resposta: """ #else: #prompt = f"Questão:\n{question}\n### Resposta:" return generate_response(model, tokenizer, prompt) # Cria a interface Gradio iface = gr.Interface( fn=answer_question, inputs=["text", "text"], outputs="text", title="QA Model", description="Pergunte algo e obtenha uma resposta!" ) iface.launch()