// Prepare the four pinned safe files under models/tiny-gpt2 as documented.
// This tiny checkpoint verifies interoperability; it is not a quality benchmark.
import aner.token
import aner.gen
import aner.nn

nn.configure("cpu", "Float64", "preserve")
let model = gen.import_gpt2("models/tiny-gpt2", context: 8)
let codec = model.tokenizer()
print(model.summary())
print(model.memory_summary(batch: 1, length: 8, training: true))
let prompt = codec.encode("Hello world", bos: false, eos: false)
let output = model.generate(prompt, max_new_tokens: 3,
    temperature: 0.0, top_k: 0, top_p: 1.0, seed: 7)
print(codec.decode(output, skip_special: true))
let adaptation = token.corpus(codec, List("Hello science", "Scientific work"), role: "training")
let adapted = model.lora(List("block.0.qkv", "block.1.attention.output"),
    rank: 2, alpha: 4.0, seed: 23)
let tuned = adapted.fine_tune(adaptation, steps: 3, batch: 1, rate: 0.001, seed: 71)
tuned.save("imported-gpt2-lora.anergen")
print(tuned.loss(adaptation))
