rootformer-v20 / transmute_quickstart.py
enver's picture
Rootformer v20: grammar-governed NRMP, retrained heads, classical grammar engines
1051725 verified
Raw History Blame Contribute Delete
5.72 kB
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
transmute_quickstart.py
========================================================================================
ROOTFORMER v19.2: SOVEREIGN ARABIC-TO-ENGLISH TRANSMUTATION ENGINE
Basran Bedrock (Al-Aṣl) + Andalusian Grammatical Addition (Al-Farʿ) Synthesis
========================================================================================
Quickstart Usage:
# 1. Interactive proposition transmutation:
python transmute_quickstart.py "العلم نور يضيء العقل ويهدي إلى الحق"
# 2. Run built-in classical heritage benchmark:
python transmute_quickstart.py --demo
"""
import sys
import argparse
from pathlib import Path
import torch
from safetensors.torch import load_file
ROOT_DIR = Path(__file__).resolve().parent
sys.path.insert(0, str(ROOT_DIR))
from models.unified_rootformer_v12 import UnifiedRootformerV12
from deepseek_v4_1_flash_model import UnifiedRootformerV17_DeepSeekFlash
from nrmp_vocab import FarāhīdianMorphemicVocab
from rootformer_v18_nrmp_model import RootformerV18_NRMP
from neural_transmuter_head import NeuralFarahidianTransmuterHead
from khalil_students_andalusian_master_engine import MasterSovereignTransmuter
import json
def load_v19_2_engine(device=None):
if device is None:
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print(f"[*] Initializing Rootformer v19.2 Synthesis Engine on {device}...")
bp_path = ROOT_DIR / 'data/rootformer_v12_arabic_blueprint.json'
vocab = FarāhīdianMorphemicVocab(str(bp_path))
with open(ROOT_DIR / 'data/concept_vocabulary.json', 'r', encoding='utf-8') as f:
vdata = json.load(f)
token_to_id = vdata['token_to_id']
id_to_token = {int(k): v for k, v in vdata['id_to_token'].items()}
# Arabic 24-Layer Backbone (Layers 18-23 Co-Trained)
base_model = UnifiedRootformerV12(str(bp_path), 'Qwen/Qwen2.5-0.5B', device, torch.bfloat16).to(device)
flash_model = UnifiedRootformerV17_DeepSeekFlash(base_model, device, torch.bfloat16).to(device)
ar_model = RootformerV18_NRMP(flash_model, vocab, device, torch.bfloat16).to(device)
bb_ckpt = ROOT_DIR / 'checkpoints/rootformer_v19_2_synthesis_ar_backbone.safetensors'
ar_model.load_state_dict(load_file(str(bb_ckpt)), strict=False)
ar_model.eval()
# 8-Layer Jurjānī Deep Transmuter Head
d_model = getattr(base_model.backbone.config, 'hidden_size', 896)
transmuter = NeuralFarahidianTransmuterHead(
d_model=d_model,
d_concept=512,
concept_vocab_size=vdata['vocab_size'],
num_roots=vocab.num_roots,
guide_layer_idx=14,
num_decoder_layers=8,
dropout=0.0
).to(device=device, dtype=torch.bfloat16)
trans_ckpt = ROOT_DIR / 'checkpoints/rootformer_v19_2_synthesis_transmuter_master.safetensors'
transmuter.load_state_dict(load_file(str(trans_ckpt)), strict=False)
transmuter.eval()
engine = MasterSovereignTransmuter(transmuter, vocab, token_to_id, id_to_token)
return ar_model, engine, vocab, device
def transmute(text: str, ar_model, engine, vocab, device):
tuples = vocab.encode_sentence(text)
p_ids = torch.tensor([[t[0] for t in tuples]], dtype=torch.long, device=device)
r_ids = torch.tensor([[t[1] for t in tuples]], dtype=torch.long, device=device)
w_ids = torch.tensor([[t[2] for t in tuples]], dtype=torch.long, device=device)
s_ids = torch.tensor([[t[3] for t in tuples]], dtype=torch.long, device=device)
with torch.no_grad(), torch.autocast(device_type=device.type, dtype=torch.bfloat16):
inputs_embeds = ar_model.morphemic_embed(p_ids, r_ids, w_ids, s_ids)
backbone_out = ar_model.backbone(inputs_embeds=inputs_embeds, output_hidden_states=True)
all_hs = backbone_out.hidden_states
output = engine.transmute_proposition(all_hs, text)
return output
def main():
parser = argparse.ArgumentParser(description="Rootformer v19.2 Quickstart CLI")
parser.add_argument("text", nargs="?", default=None, help="Arabic proposition to transmute")
parser.add_argument("--demo", action="store_true", help="Run full classical benchmark demo")
args = parser.parse_args()
ar_model, engine, vocab, device = load_v19_2_engine()
if args.demo or args.text is None:
demo_sentences = [
("Al-Ghazali", "العلم نور يضيء العقل ويهدي إلى الحق"),
("Sibawayh & Maxim", "رأس الحكمة مخافة الله"),
("Mecelle (Ottoman Law)", "اليقين لا يزول بالشك"),
("Ibn Malik (Alfiyyah)", "كلامنا لفظ مفيد كاستقم واسم وفعل ثم حرف الكلم"),
("Ibn Mada al-Qurtubi", "إنما العمل من النصب والرفع للمتكلم نفسه"),
("Ibn Khaldun", "اللسان ملكة صناعية يحصل بالممارسة وتكرار الكلام العربي"),
("Al-Jurjani", "ليس النظم إلا توخي معاني النحو فيما بين الكلم")
]
print("\n" + "=" * 80)
print(" ROOTFORMER v19.2: CLASSICAL HERITAGE TRANSMUTATION BENCHMARK DEMO")
print("=" * 80)
for author, sent in demo_sentences:
res = transmute(sent, ar_model, engine, vocab, device)
print(f"\n[{author}]")
print(f" Arabic : {sent}")
print(f" Transmute: {res}")
print("\n" + "=" * 80)
else:
res = transmute(args.text, ar_model, engine, vocab, device)
print(f"\nInput Arabic : {args.text}")
print(f"Transmutation: {res}\n")
if __name__ == '__main__':
main()