ECOACO / generate.py
rurtech010101's picture
Publish ECOACO 1.0 — from-scratch banking MoE (reference checkpoint)
abc64cf verified
Raw
History Blame Contribute Delete
1.56 kB
"""Load the exported rurtech.ai MoE and generate text.
python generate.py --prompt "The rurtech.ai runtime"
"""
from __future__ import annotations
import argparse
import json
from pathlib import Path
import torch
from safetensors.torch import load_model
from modeling_ecoaco import EcoacoConfig, EcoacoForCausalLM
from tokenizer import ByteBPETokenizer
HERE = Path(__file__).resolve().parent
def load(artifacts: Path):
cfg_d = json.loads((artifacts / "config.json").read_text())
for _k in ("model_type","architectures","name"): cfg_d.pop(_k, None)
cfg = EcoacoConfig(**cfg_d)
model = EcoacoForCausalLM(cfg)
load_model(model, str(artifacts / "model.safetensors"))
model.eval()
tok = ByteBPETokenizer.load(artifacts / "tokenizer.json")
return model, tok
def main():
ap = argparse.ArgumentParser()
ap.add_argument("--prompt", default="The rurtech.ai runtime")
ap.add_argument("--max-new-tokens", type=int, default=60)
ap.add_argument("--temperature", type=float, default=0.7)
ap.add_argument("--artifacts", default=str(HERE / "artifacts"))
args = ap.parse_args()
device = "cuda" if torch.cuda.is_available() else "cpu"
model, tok = load(Path(args.artifacts))
model = model.to(device)
ctx = torch.tensor([tok.encode(args.prompt, add_bos=True)], device=device)
out = model.generate(ctx, max_new_tokens=args.max_new_tokens,
temperature=args.temperature, eos_id=tok.eos_id)
print(tok.decode(out[0].tolist()))
if __name__ == "__main__":
main()