Portuguese
mamba
mamba-3
ssm
muon
muonclip
qk-clip
adamw
optimizer
nope
hybrid-architecture
activation-checkpointing
3d-vision-language
depth-perception
point-cloud
diffusion
stable-diffusion
mixture-of-experts
kohonen
som-attention
random-forest
deep-neural-network
knowledge-distillation
bidirectional-distillation
engram-memory
multimodal
multi-token-prediction
dpo
rlhf
hh-rlhf
pcgrad
long-context
lra-qvit
engineer-agent
integral-state
cython
jev-classifiers
gumbel-softmax
quantization
riemannian-optimization
stiefel-manifold
cython-kernels
gradient-accumulation
vector-quantization
grayscale-detection
joint-perception
self-regulation
signal-table
abmo
ciar
growing-som
pt-br
File size: 5,181 Bytes
073c9a9 384b440 073c9a9 384b440 073c9a9 384b440 073c9a9 79f63e4 073c9a9 79f63e4 073c9a9 384b440 073c9a9 | 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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | #!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Teste FINAL do item (b) — modelo KHTST TREINADO (checkpoint fase-som).
Verifica, com o modelo pós-treino real:
1. 4 requisições submetidas em série ANTES da 1ª resposta;
2. recebimento (estado RECEBIDA) confirmado para todas antes do processamento;
3. processamento (PROCESSANDO → CONCLUIDA) com tokens gerados;
4. stopping (cancelamento) honrado em ≤ 1 passo durante geração ativa;
5. continue (retomada de pedido pausado).
Saída: telemetria_out/teste_item_b_v10.json
"""
import json
import sys
import threading
import time
sys.path.insert(0, "/home/z/my-project/khtst/src")
import torch
from khtst.config import Config
from khtst.dados.tokenizador import TokenizadorKHTST
from khtst.memoria.orquestrador import OrquestradorSOM
from khtst.nucleo.modelo import KHTSTModel
from khtst.servico import SessaoKHTST
CFG_PATH = "/home/z/my-project/khtst/configs/base.json"
TK_PATH = "/home/z/my-project/khtst/cache_dados/tokenizador.json"
SAIDA = "/home/z/my-project/khtst/telemetria_out/teste_item_b_v10.json"
cfg = Config().de_arquivo(CFG_PATH)
torch.manual_seed(cfg.dados.semente)
modelo = KHTSTModel(cfg, usar_multimodal=True)
tk = TokenizadorKHTST(TK_PATH)
# retoma o estado final (fase-som)
from khtst.dados.checkpoints import GestorCheckpoints
ck = GestorCheckpoints("/home/z/my-project/khtst/estados_local", "estados/fase-v10")
tag = ck.ultima_tag()
if tag:
from khtst.treino.estado_integral import EstadoIntegral
from khtst.memoria.orquestrador import OrquestradorSOM
# v9 — estado integral: roteador S-SOM + orquestrador restaurados
orq = OrquestradorSOM(cfg.modelo.d_modelo, cfg.som)
ck.estado = EstadoIntegral(modelo, {"roteador": getattr(modelo, "roteador_ssom", None),
"orquestrador": orq})
ok = ck.carregar(modelo, tag)
print(f"estado retomado: {tag} (ok={ok}, estado integral)")
modelo.eval()
sessao = SessaoKHTST(modelo, decodificar=tk)
prompts = [
"O KHTST é um modelo multimodal que",
"A previsão do tempo para amanhã indica",
"Para cozinhar arroz, primeiro",
"O melhor time do Brasil é",
]
# ---- 1) 4 requisições EM SÉRIE antes da 1ª resposta ----
pids = [sessao.submeter(p, max_novos=10, tarefa="lm") for p in prompts]
estados_iniciais = [sessao.pedidos[i].estado.value for i in pids]
check_recebimento = all(e == "recebida" for e in estados_iniciais)
print("1) 4 pedidos ANTES da 1ª resposta:", pids, "| estados:", estados_iniciais)
# ---- 2/3) processa todos (a bomba adhoc roda ENTRE tokens) ----
t0 = time.time()
saidas = sessao.executar_todos(max_passos=400)
dur = time.time() - t0
rel = sessao.relatorio()
check_processamento = all(rel[i]["estado"] == "concluida" and rel[i]["n_tokens"] == 10
for i in pids)
print("2) processamento:", [(i, rel[i]["estado"], rel[i]["n_tokens"]) for i in pids],
f"| {dur:.1f}s")
for i in pids:
texto = tk.decodificar(saidas[i])
print(f" pedido {i}: «{prompts[i]}» → {texto[:70]!r}")
# ---- 4) stopping durante processamento ativo (thread externa) ----
sessao2 = SessaoKHTST(modelo, decodificar=tk)
p_st = sessao2.submeter("Escreva uma história longa sobre o mar e as estrelas",
max_novos=60, tarefa="lm")
def para_no_meio():
time.sleep(0.4)
sessao2.stop(p_st, cancelar=True)
threading.Thread(target=para_no_meio, daemon=True).start()
sessao2.executar_todos(max_passos=400)
rel2 = sessao2.relatorio()[p_st]
check_stop = rel2["estado"] == "cancelada" and 0 < rel2["n_tokens"] < 60
print("4) stopping:", rel2["estado"], "| tokens antes do stop:", rel2["n_tokens"],
"| eventos:", rel2["eventos"])
# ---- 5) pause → continue ----
sessao3 = SessaoKHTST(modelo, decodificar=tk)
p_pc = sessao3.submeter("O livro da floresta narra", max_novos=12, tarefa="lm")
sessao3.canal.stop(p_pc, cancelar=False) # pausa no 1º dreno
def retoma():
time.sleep(0.3)
sessao3.continuar(p_pc)
threading.Thread(target=retoma, daemon=True).start()
sessao3.executar_todos(max_passos=400)
rel3 = sessao3.relatorio()[p_pc]
check_continue = rel3["estado"] == "concluida" and "pausada" in rel3["eventos"] \
and "retomada" in rel3["eventos"]
print("5) pause→continue:", rel3["estado"], "| eventos:", rel3["eventos"])
resultado = {
"modelo": "KHTST v10 (checkpoint: " + str(tag) + ")",
"item_b_4_requisicoes_antes_da_1a": bool(check_recebimento),
"item_b_processamento_e_conclusao": bool(check_processamento),
"item_b_stopping_durante_ativa": bool(check_stop),
"item_b_pause_continue": bool(check_continue),
"estados_iniciais": estados_iniciais,
"relatorio_completo": {str(i): rel[i] for i in rel},
"relatorio_stop": rel2,
"relatorio_pause_continue": rel3,
"duracao_s": round(dur, 2),
}
ok_all = all([check_recebimento, check_processamento, check_stop, check_continue])
resultado["item_b_aprovado"] = bool(ok_all)
with open(SAIDA, "w", encoding="utf-8") as f:
json.dump(resultado, f, ensure_ascii=False, indent=2, default=str)
print(f"\nITEM B: {'APROVADO' if ok_all else 'REPROVADO'} → {SAIDA}")
sys.exit(0 if ok_all else 1)
|