Escarda-Rewrite / rewrite.py
Quazim0t0's picture
Escarda-Rewrite 86M prompt optimizer (v2 final) + loader + card
1c35206 verified
Raw
History Blame Contribute Delete
2.4 kB
"""
rewrite.py -- self-contained loader/inference for Escarda-Rewrite, an 86M prompt
optimizer. Given a raw user question it rewrites it into a detailed, role-grounded
instruction prompt for a downstream LLM (persona declaration + task framing +
clarifying questions). Pairs naturally with Escarda-86M-Identity as the downstream.
Usage:
from rewrite import EscardaRewrite
rw = EscardaRewrite(".")
print(rw.rewrite("How do I lower my cholesterol?"))
# "As a Senior Medical Expert, your task is to provide clear guidance on ..."
Files required: model.safetensors, config.json, tokenizer.json, tokenizer_config.json,
special_tokens_map.json, model_v2.py, config.py, spike_tokenizer.py
"""
import os, sys, torch
_HERE = os.path.dirname(os.path.abspath(__file__))
if _HERE not in sys.path:
sys.path.insert(0, _HERE)
from model_v2 import SpikeWhaleLM # noqa: E402
from spike_tokenizer import SpikeTokenizer # noqa: E402
IM_START, IM_END = "<|im_start|>", "<|im_end|>"
class EscardaRewrite:
def __init__(self, path=_HERE, device=None, dtype=torch.float32):
self.device = device or ("cuda" if torch.cuda.is_available() else "cpu")
self.tok = SpikeTokenizer(os.path.join(path, "tokenizer.json"))
self.model = SpikeWhaleLM.from_pretrained(path).to(self.device).to(dtype).eval()
end = self.tok.encode(IM_END)
self.end_id = end[-1] if end else None
self.eos = getattr(self.tok, "eos_token_id", None)
@torch.no_grad()
def rewrite(self, query, max_new=120):
"""Greedy decode -- the optimized prompt is a deterministic rewrite."""
prompt = f"{IM_START}user\n{query}{IM_END}\n{IM_START}assistant\n"
ids = torch.tensor([self.tok.encode(prompt)], device=self.device)
start = ids.shape[1]
for _ in range(max_new):
nxt = int(self.model(ids).logits[0, -1].argmax())
ids = torch.cat([ids, torch.tensor([[nxt]], device=self.device)], 1)
if nxt == self.end_id or (self.eos is not None and nxt == self.eos):
break
return self.tok.decode(ids[0, start:].tolist()).strip()
if __name__ == "__main__":
rw = EscardaRewrite(_HERE, device="cpu")
for q in ["How do I lower my cholesterol?", "How do I grow tomatoes?",
"What are my rights if I am fired?"]:
print(f"\nUSER: {q}\nREWRITE: {rw.rewrite(q)}")