modelo-jogo-velha-zero / conversar_zero.py
open-source-dimas's picture
Publicar modelo de jogo da velha treinado do zero
9cb4eda verified
Raw
History Blame Contribute Delete
2.15 kB
#!/usr/bin/env python3
"""Chat interativo usando exclusivamente pesos treinados do zero."""
from __future__ import annotations
import argparse
from pathlib import Path
import torch
from usar_gpt_zero import carregar
from treinar_gpt_zero import gerar
SYSTEM_DEFAULT = "Você é um assistente local útil e educado."
def main() -> None:
parser = argparse.ArgumentParser(description="Conversa com o GPT treinado do zero.")
parser.add_argument("--checkpoint", type=Path, default=Path("modelo_dialogos_multi_v2.pt"))
parser.add_argument("--system", default=SYSTEM_DEFAULT)
parser.add_argument("--tokens", type=int, default=80)
parser.add_argument("--temperature", type=float, default=0.05)
parser.add_argument("--top-k", type=int, default=20)
parser.add_argument("--top-p", type=float, default=0.9)
parser.add_argument("--repetition-penalty", type=float, default=1.15)
parser.add_argument("--device", choices=["auto", "cpu", "cuda"], default="auto")
args = parser.parse_args()
if args.device == "auto":
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
else:
device = torch.device(args.device)
modelo, tokenizer, checkpoint, bos_id, eos_id = carregar(args.checkpoint, device)
print("Modelo treinado do zero pronto. Digite /sair para terminar.")
historico: list[tuple[str, str]] = []
while True:
pergunta = input("Você: ").strip()
if pergunta == "/sair":
break
historico.append(("user", pergunta))
partes = [f"<|system|>{args.system}<|end|>"]
for indice, (papel, conteudo) in enumerate(historico[-4:]):
partes.append(f"<|{papel}|>{conteudo}<|end|>")
if indice == len(historico[-4:]) - 1 and papel == "user":
partes.append("<|assistant|>")
prompt = "".join(partes)
resposta = gerar(modelo, tokenizer, prompt, device, args.tokens, args.temperature, args.top_k, args.top_p, bos_id, eos_id, args.repetition_penalty)
historico.append(("assistant", resposta))
print(f"Modelo: {resposta}\n")
if __name__ == "__main__":
main()