IZAaa-C / app.py
caarleexx's picture
Update app.py
2374982 verified
import random
import time
from datasets import Dataset, DatasetDict
from huggingface_hub import HfApi
from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline
# -------------------------------------
# CONFIGURAÇÕES DO MODELO LOCAL LEVE
# -------------------------------------
MODEL_NAME = "Qwen/Qwen2.5-0.5B-Instruct"
DATASET_REPO = "caarleexx/AMP"
print("[LOG] Carregando modelo...")
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
model = AutoModelForCausalLM.from_pretrained(
MODEL_NAME,
device_map="cpu"
)
generator = pipeline(
"text-generation",
model=model,
tokenizer=tokenizer,
max_new_tokens=200,
temperature=0.9
)
# -------------------------------------
# FUNÇÕES
# -------------------------------------
def gerar_pergunta_e_opcoes():
N = random.randint(2, 6) # número aleatório de alternativas
prompt = f"Crie uma pergunta curta com {N} respostas possíveis diferentes entre si."
pergunta = generator(prompt)[0]["generated_text"].strip()
return pergunta, N
def gerar_resposta(principal_pergunta):
prompt = f"Pergunta: {principal_pergunta}\nResponda de forma direta e objetiva."
resposta = generator(prompt)[0]["generated_text"].strip()
return resposta
def gerar_alternativas(pergunta, N):
prompt = f"Pergunta: {pergunta}\nListe {N} respostas possíveis, diferentes entre si, sem explicações."
texto = generator(prompt)[0]["generated_text"]
alternativas = []
for linha in texto.split("\n"):
linha = linha.strip("-•1234567890. ")
if len(linha) > 2:
alternativas.append(linha)
return alternativas[:N]
def gerar_explicacao(pergunta):
prompt = f"Explique de forma objetiva por que esta pergunta pode ter múltiplas respostas possíveis:\n{pergunta}"
explicacao = generator(prompt)[0]["generated_text"].strip()
return explicacao
# -------------------------------------
# DATASET
# -------------------------------------
def carregar_dataset():
try:
print("[LOG] Tentando carregar dataset remoto...")
ds = DatasetDict.load_from_disk(DATASET_REPO)
return ds
except:
print("[LOG] Criando dataset novo...")
return DatasetDict({"train": Dataset.from_dict({"pergunta": [], "resposta": [], "alternativas": [], "explanação": []})})
def salvar_dataset(ds):
print("[LOG] Salvando dataset no HuggingFace...")
ds.push_to_hub(DATASET_REPO, private=False)
# -------------------------------------
# LOOP PRINCIPAL
# -------------------------------------
def loop_geracao(qtd=10):
ds = carregar_dataset()
for i in range(qtd):
print("\n====================================")
print(f"[LOG] ITERAÇÃO {i+1}")
print("====================================")
pergunta, N = gerar_pergunta_e_opcoes()
resposta = gerar_resposta(pergunta)
alternativas = gerar_alternativas(pergunta, N)
explicacao = gerar_explicacao(pergunta)
novo_registro = {
"pergunta": pergunta,
"resposta": resposta,
"alternativas": alternativas,
"explanação": explicacao
}
print(f"[LOG] Pergunta: {pergunta}")
print(f"[LOG] Resposta: {resposta}")
print(f"[LOG] Alternativas: {alternativas}")
print(f"[LOG] Explicação: {explicacao}")
ds["train"] = ds["train"].add_item(novo_registro)
salvar_dataset(ds)
time.sleep(1)
print("[LOG] Concluído.")
# -------------------------------------
# EXECUTAR
# -------------------------------------
if __name__ == "__main__":
loop_geracao(qtd=50)