Instructions to use Avra98/sudoku-latent-backtracking with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use Avra98/sudoku-latent-backtracking with PEFT:
Task type is invalid.
- Notebooks
- Google Colab
- Kaggle
| #!/usr/bin/env python3 | |
| """Evaluate a saved adapter at given (stage,k) pairs using the trainer's own run_eval.""" | |
| import argparse, os, sys, types | |
| sys.path.insert(0, "/home/ubuntu/curriculum-cot-code") | |
| sys.path.insert(0, "/home/ubuntu/curriculum-cot-code/latent_multi_output_cell_policy") | |
| import torch | |
| from transformers import AutoModelForCausalLM, AutoTokenizer | |
| from latent_multi_output_cell_policy.sft_latent_multi_output_train import ( | |
| run_eval, load_jsonl_rows, configure_hf_cache, pick_dtype, | |
| ) | |
| from latent_multi_output_cell_policy.grpo_residual_projector_latent_train import load_trainable_adapter | |
| p = argparse.ArgumentParser() | |
| p.add_argument("--ckpt", required=True) | |
| p.add_argument("--eval_jsonl", default="/home/ubuntu/curriculum-cot-code/data/sudoku_t3_20empty_value_qwen_text_stage1_eval.jsonl") | |
| p.add_argument("--rows", type=int, default=50) | |
| p.add_argument("--stages", default="1:1,2:2") # stage:k pairs | |
| p.add_argument("--model_name", default="Qwen/Qwen2.5-1.5B-Instruct") | |
| p.add_argument("--cache_dir", default="/home/ubuntu/.hf_cache") | |
| p.add_argument("--tag", default="") | |
| a = p.parse_args() | |
| cache = configure_hf_cache(a.cache_dir) | |
| dev = torch.device("cuda:0") | |
| tok = AutoTokenizer.from_pretrained(a.model_name, cache_dir=cache, use_fast=True) | |
| if tok.pad_token_id is None: | |
| tok.pad_token = tok.eos_token or "<|endoftext|>" | |
| tok._multi_value_oversample_factor = 1; tok._train_target_size_min = 0; tok._train_target_size_max = 0 | |
| base = AutoModelForCausalLM.from_pretrained(a.model_name, cache_dir=cache, torch_dtype=pick_dtype(), low_cpu_mem_usage=True) | |
| model = load_trainable_adapter(base, a.ckpt, lora_r=32, lora_alpha=64, lora_dropout=0.05) | |
| model._latent_debug_tokenizer = tok | |
| if hasattr(model, "config"): model.config.use_cache = False | |
| model.to(dev); model.eval() | |
| rows = load_jsonl_rows(a.eval_jsonl, limit_rows=a.rows) | |
| for pair in a.stages.split(","): | |
| s, k = (int(x) for x in pair.split(":")) | |
| args = types.SimpleNamespace( | |
| stage_i=s, num_cot_tokens=k, latent_mode="recurrent_hidden", | |
| total_empties_hint=20, eval_target_size_min=0, eval_target_size_max=0, | |
| max_completion_length=24, debug_print_limit=0, | |
| reward_good_value=1.25, penalty_bad_value=1.0, penalty_malformed=4.0, | |
| penalty_empty=0.5, penalty_singleton=1.5, | |
| ) | |
| ev = run_eval(args, rows, model, tok, dev) | |
| print(f"RESULT tag={a.tag} stage={s} k={k} rows={a.rows} " | |
| f"exact={ev['exact_set_match_rate']:.3f} solve={ev['solve_rate']:.3f} " | |
| f"prec={ev['value_precision']:.3f} rec={ev['value_recall']:.3f}", flush=True) | |