Views
No views yet
1from transformers import AutoModelForCausalLM, AutoTokenizer
2from peft import PeftModel
3from torch import nn
4import torch
5from huggingface_hub import hf_hub_download
6
7device = torch.device("cuda:0")
8dtype = torch.bfloat16
9base_model_id = "HuggingFaceTB/SmolLM3-3B-Base"
10compressor_id = "midwestern-simulation/essence-3b-v1.1"
11
12# === MODEL LOADING ===
13
14tokenizer = AutoTokenizer.from_pretrained(base_model_id, padding_side='left')
15encoder = AutoModelForCausalLM.from_pretrained(base_model_id, device_map={"":device}, torch_dtype=dtype)
16decoder = AutoModelForCausalLM.from_pretrained(base_model_id, device_map={"":device}, torch_dtype=dtype)
17
18encoder = PeftModel.from_pretrained(encoder, compressor_id, subfolder="encoder")
19decoder = PeftModel.from_pretrained(decoder, compressor_id, subfolder="decoder")
20
21projector = nn.Linear(2048, 2048).to(device).to(dtype)
22projector.load_state_dict(torch.load(hf_hub_download(repo_id=compressor_id, filename="projector.pt")))
23
24
25# === MODEL INFERENCE ===
26
27text = "mary had a little lamb, little lamb, little lamb, mary had a little lamb whose fleece was white as snow"
28n_embed_tokens = 4 # for best performance, can be any within the range of 1-128
29
30encoder_input = text.strip() + f"\n[[/END DOCUMENT]]\n[[START SUMMARY ntoks={n_embed_tokens}]]" + "<|im_end|>" * n_embed_tokens
31
32tokenized = tokenizer(encoder_input, return_tensors='pt', add_special_tokens=False)
33tokenized = {k: v.to(device) for k, v in tokenized.items()}
34encoding = encoder.model.model(**tokenized).last_hidden_state[:, -n_embed_tokens:, :]
35encoding = projector(encoding)
36
37tokenized_prefix = tokenizer("\n[[/END SUMMARY]]\n[[START DOCUMENT]]\n", return_tensors="pt", add_special_tokens=False)
38prefix_embeds = decoder.model.model.embed_tokens(tokenized_prefix['input_ids'].to(device))
39inputs_embeds = torch.cat([encoding, prefix_embeds], 1)
40output = decoder.generate(
41 inputs_embeds=inputs_embeds,
42 temperature=0.7,
43 max_new_tokens=1024,
44 do_sample=True,
45 top_k=128,
46 min_new_tokens=8,
47 eos_token_id=tokenizer.eos_token_id,
48 pad_token_id=tokenizer.pad_token_id
49)
50print(tokenizer.decode(output[0]))
51# mary had a little lamb, little lamb, little lamb, mary had a little lamb whose fleece was white as snow
52# [[/END DOCUMENT]]<|end_of_text|>