loocorez commited on
Commit
c4f8ef3
·
verified ·
1 Parent(s): 5a2ac3e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +38 -41
app.py CHANGED
@@ -1,5 +1,7 @@
 
1
  import re, spaces, gradio as gr, torch
2
- from transformers import AutoTokenizer, AutoModelForCausalLM
 
3
 
4
  MODEL_NAME = "loocorez/reverse-text-warmup"
5
 
@@ -13,57 +15,52 @@ Respond in the following format:
13
 
14
  # ---------- load once ----------
15
  tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
16
- tokenizer.pad_token = tokenizer.eos_token # safety
17
- model = AutoModelForCausalLM.from_pretrained(
18
- MODEL_NAME,
19
- torch_dtype=torch.float16
20
- )
21
- model.eval() # turn off dropout etc.
22
-
23
- @spaces.GPU(duration=60) # reserve GPU only while we run
24
- def reverse_text(user_text: str) -> str:
25
- try:
26
- model.to("cuda")
27
 
28
- # full prompt = system + user
29
- prompt = f"{SYSTEM_PROMPT}\n\n{user_text.strip()}"
30
- inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
 
31
 
32
- with torch.no_grad():
33
- out = model.generate(
34
- **inputs,
35
- max_new_tokens=2048,
36
- temperature=0.3,
37
- pad_token_id=tokenizer.eos_token_id,
38
- eos_token_id=tokenizer.convert_tokens_to_ids("</response>")
39
- )
40
 
41
- # decode ONLY the newly-generated tokens
42
- generated = tokenizer.decode(out[0][inputs["input_ids"].size(1):],
43
- skip_special_tokens=True)
 
44
 
45
- # pull out <answer>...</answer>
46
- m = re.search(r"<answer>(.*?)</answer>", generated, re.S)
47
- return (m.group(1).strip() if m else generated.strip())
 
 
 
 
 
 
 
48
 
49
- except Exception as e:
50
- return f"Error: {e}"
 
51
 
52
- finally:
53
- model.to("cpu")
54
- torch.cuda.empty_cache()
55
 
56
  demo = gr.Interface(
57
  fn=reverse_text,
58
- inputs=gr.Textbox(label="Input Text", lines=3, placeholder="Enter text…"),
 
 
 
 
 
 
59
  outputs=gr.Textbox(label="Reversed Text", lines=3),
60
  title="🔄 Reverse Text Model Demo",
61
- description="Give it a sentence; it returns the reversed version.",
62
- examples=[
63
- ["Hello world"],
64
- ["The quick brown fox jumps over the lazy dog."],
65
- ["Machine learning is amazing"]
66
- ]
67
  )
68
 
69
  if __name__ == "__main__":
 
1
+ # app.py
2
  import re, spaces, gradio as gr, torch
3
+ from transformers import AutoTokenizer
4
+ from peft import AutoPeftModelForCausalLM # ← handles LoRA if present
5
 
6
  MODEL_NAME = "loocorez/reverse-text-warmup"
7
 
 
15
 
16
  # ---------- load once ----------
17
  tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
18
+ tokenizer.pad_token = tokenizer.eos_token
 
 
 
 
 
 
 
 
 
 
19
 
20
+ # pulls base + adapter; merge folds LoRA into the base so inference is fast
21
+ model = AutoPeftModelForCausalLM.from_pretrained(
22
+ MODEL_NAME, torch_dtype=torch.float16
23
+ ).merge_and_unload().eval()
24
 
25
+ # helper: id of "</response>"
26
+ EOS_ID = tokenizer.encode("</response>", add_special_tokens=False)[0]
 
 
 
 
 
 
27
 
28
+ @spaces.GPU(duration=60)
29
+ def reverse_text(user_text: str, temperature: float = 0.0, max_tokens: int = 256):
30
+ prompt = f"{SYSTEM_PROMPT}\n\n{user_text.strip()}"
31
+ inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
32
 
33
+ with torch.no_grad():
34
+ out = model.generate(
35
+ **inputs,
36
+ max_new_tokens=max_tokens,
37
+ do_sample=temperature > 0.0,
38
+ temperature=max(temperature, 1e-6), # avoid 0 with sampling
39
+ eos_token_id=EOS_ID,
40
+ pad_token_id=tokenizer.eos_token_id,
41
+ repetition_penalty=1.1, # tames loops
42
+ )
43
 
44
+ # decode only the newly-generated part
45
+ generated = tokenizer.decode(out[0][inputs["input_ids"].size(1):],
46
+ skip_special_tokens=True)
47
 
48
+ # pull the answer out of the XML
49
+ m = re.search(r"<answer>(.*?)</answer>", generated, re.S)
50
+ return m.group(1).strip() if m else generated.strip()
51
 
52
  demo = gr.Interface(
53
  fn=reverse_text,
54
+ inputs=[
55
+ gr.Textbox(label="Input Text", lines=3, placeholder="Enter text…"),
56
+ gr.Slider(minimum=0.0, maximum=1.0, step=0.05,
57
+ value=0.0, label="Temperature"),
58
+ gr.Slider(minimum=32, maximum=512, step=32,
59
+ value=256, label="Max new tokens")
60
+ ],
61
  outputs=gr.Textbox(label="Reversed Text", lines=3),
62
  title="🔄 Reverse Text Model Demo",
63
+ description="Give it a sentence; it returns the reversed version."
 
 
 
 
 
64
  )
65
 
66
  if __name__ == "__main__":