Spaces:
Running
Running
| """Quick test: check what model actually generates after training. | |
| Uses short sequences (no padding) to avoid position index bugs. | |
| """ | |
| import sys, random, torch | |
| sys.path.insert(0, '.') | |
| from models.fusion_model import FusionConfig, FusionModel | |
| from models.thinking_dial import ThinkingDialModel, ThinkingConfig | |
| random.seed(42); torch.manual_seed(42) | |
| config = FusionConfig(vocab_size=1000, hidden_size=256, num_hidden_layers=6, | |
| num_attention_heads=8, intermediate_size=512, | |
| max_position_embeddings=128, block_size=32, latent_dim=16) | |
| model = FusionModel(config) | |
| tc = ThinkingConfig(num_thinking_depths=4) | |
| td = ThinkingDialModel(model, tc) | |
| td.train() | |
| data = [(x, 0, y, x+y) for x in range(1,51) for y in range(1,51)] | |
| optimizer = torch.optim.AdamW(td.parameters(), lr=1e-3) | |
| for epoch in range(200): | |
| batch = random.sample(data, 16) | |
| inps, tgts = [], [] | |
| for x, op, y, r in batch: | |
| # Short sequence: [2, x, op, y, 0, 0, 0] -> labels [-100, x, op, y, 99, r, 1] | |
| inps.append([2, x, op, y, 0, 0, 0]) | |
| tgts.append([-100, x, op, y, 99, r, 1]) | |
| ids = torch.tensor(inps, dtype=torch.long) | |
| labs = torch.tensor(tgts, dtype=torch.long) | |
| optimizer.zero_grad() | |
| o = td(ids, labels=labs) | |
| o.loss.backward() | |
| optimizer.step() | |
| if (epoch + 1) % 50 == 0: | |
| print(f"Epoch {epoch+1}: loss={o.loss.item():.4f}") | |
| td.eval() | |
| test_cases = [(5, 0, 3, 8), (10, 0, 15, 25), (50, 0, 49, 99), (7, 0, 13, 20)] | |
| for x, op, y, r in test_cases: | |
| inp = torch.tensor([[2, x, op, y]]) # Short input, no padding | |
| for depth in range(4): | |
| out = td.generate(inp, max_new_tokens=8, thinking_depth=depth, do_sample=False, pad_token_id=0) | |
| gen = out[0, 4:].tolist()[:8] # Generated tokens after input | |
| result_tok = None | |
| if len(gen) >= 2 and gen[0] == 99: | |
| result_tok = gen[1] | |
| match = "YES" if result_tok == r else "NO" | |
| print(f" {x}+{y}={r} | depth={depth} | gen={gen} | result_tok={result_tok} | {match}") | |