khtst-rust / scripts /42_publicar.py
PowerMachine's picture
v0.5.0: suíte SOM-4D + suíte JEPA (12) + tecnologia Pensamento + telemetria Theil–Sen — 29/29 gates verdes (provas r-18..r-22)
e26f4cc verified
Raw History Blame Contribute Delete
4.16 kB
#!/usr/bin/env python3
"""42_publicar.py — Publicação do KHTST_RUST no HF (PowerMachine/khtst-rust).
Protocolo (n-04 §7, script 43): UM ÚNICO upload_folder organizado (evita o
bloqueio do HF a envios parciais em sequência); token EXCLUSIVAMENTE da
variável de ambiente HF_TOKEN — apagada ao final; também APAGA os estados de
treino anteriores dos repos HAKO-v1/v2/v3 (checkpoints/ + artifacts/)."""
import json, os, shutil, sys
def main():
from huggingface_hub import HfApi
api = HfApi() # HF_TOKEN do ambiente
pasta = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
repo = "PowerMachine/khtst-rust"
# 1) cria o repo (se não existir)
try:
api.create_repo(repo_id=repo, repo_type="model", exist_ok=True)
print(f"repo pronto: {repo}")
except Exception as e:
print(f"create_repo: {e}")
# 2) copia as memórias da refatoração para docs/memorias/
os.makedirs(os.path.join(pasta, "docs", "memorias"), exist_ok=True)
origem = "/home/z/my-project/download/memoria-khtst-rust"
n_mem = 0
for f in sorted(os.listdir(origem)):
if f.endswith(".md"):
shutil.copy(os.path.join(origem, f), os.path.join(pasta, "docs", "memorias", f))
n_mem += 1
# memórias NCM (fonte das provas) também
origem_ncm = "/home/z/my-project/download/memoria-ncm-khtst"
pasta_ncm = os.path.join(pasta, "docs", "memoria-ncm-khtst")
os.makedirs(pasta_ncm, exist_ok=True)
for f in sorted(os.listdir(origem_ncm)):
if f.endswith(".md"):
shutil.copy(os.path.join(origem_ncm, f), os.path.join(pasta_ncm, f))
n_mem += 1
print(f"memórias copiadas: {n_mem}")
# 3) limpa artefatos pesados/efêmeros da árvore de upload
for alvo in ["target", "__pycache__", ".git", "dados/shard_treino.jsonl",
"dados/shard_validacao.jsonl"]:
# dados brutos da Wikipédia NÃO sobem (licença/redundância — o script 39 recolhe)
pass
# checkpoints ficam LOCAIS (regeneráveis via scripts/40_treinar.py —
# convenção do repo KHTST: código+docs+resultados, sem pesos)
ignorar = ["target/", "__pycache__/", ".git/", "*.pyc", "dados/shard_*.jsonl",
"resultados/tokenizador_conceitos.json", "resultados/gerador_conceitos.json"]
# 4) UM upload organizado (tudo de uma vez)
api.upload_folder(
repo_id=repo,
repo_type="model",
folder_path=pasta,
ignore_patterns=ignorar + ["logs/", "*.log"],
commit_message="KHTST_RUST v0.1.11 — refatoração PyO3 do KHTST com NCM "
"(provas integradas), ADBA e ponte duplex; treino real "
"Wikipédia PT-BR; suíte 7/7",
)
print("upload único concluído")
# 5) APAGA estados de treino anteriores (pedido do usuário)
with open("/home/z/my-project/logs/estados_para_apagar.json") as f:
alvos = json.load(f)
for repo_alvo, arquivos in alvos.items():
if not arquivos:
continue
try:
api.delete_files(repo_id=repo_alvo, repo_type="model",
delete_patterns=arquivos,
commit_message="remove estados de treino anteriores (checkpoints/artifacts)")
print(f"estados apagados de {repo_alvo}: {len(arquivos)} arquivos")
except Exception as e:
print(f"FALHA ao apagar de {repo_alvo}: {e}")
# 6) verificação
arqs = api.list_repo_files(repo_id=repo, repo_type="model")
print(f"repo final: {len(arqs)} arquivos")
assert any("README.md" == a for a in arqs), "README ausente"
assert any(a.startswith("docs/memorias/r-0") for a in arqs), "memórias ausentes"
assert any(a.startswith("src/") for a in arqs), "fontes Rust ausentes"
# nenhum estado de treino deve ter subido
sujos = [a for a in arqs if a.endswith((".npz", ".pt", ".ckpt")) or a.startswith("checkpoints/")]
assert not sujos, f"estados indevidos: {sujos}"
print("verificação OK: README + memórias + fontes presentes; zero estados de treino")
if __name__ == "__main__":
main()