loocorez commited on
Commit
79e4e0f
·
verified ·
1 Parent(s): 6248fb9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +46 -51
app.py CHANGED
@@ -1,76 +1,71 @@
1
- import spaces
2
- import gradio as gr
3
- import torch
4
  from transformers import AutoTokenizer, AutoModelForCausalLM
5
 
6
- # Load tokenizer globally (CPU operation)
7
- model_name = "loocorez/reverse-text-warmup"
8
- tokenizer = AutoTokenizer.from_pretrained(model_name)
9
 
10
- # Load model globally but keep on CPU initially
 
 
 
 
 
 
 
 
 
 
11
  model = AutoModelForCausalLM.from_pretrained(
12
- model_name,
13
- torch_dtype=torch.float16 # Use half precision for memory efficiency
14
  )
 
15
 
16
- @spaces.GPU(duration=60) # Reserve GPU for 60 seconds
17
- def reverse_text(input_text):
18
- # Move model to GPU only when needed
19
- model.to("cuda")
20
-
21
  try:
22
- # Tokenize and move to GPU
23
- inputs = tokenizer(
24
- input_text,
25
- return_tensors="pt",
26
- max_length=512,
27
- truncation=True
28
- ).to("cuda")
29
-
30
- # Generate
31
  with torch.no_grad():
32
- outputs = model.generate(
33
  **inputs,
34
- max_new_tokens=1000,
35
- do_sample=True,
36
- temperature=0.7,
37
  pad_token_id=tokenizer.eos_token_id,
38
- eos_token_id=tokenizer.eos_token_id
39
  )
40
-
41
- # Decode result
42
- result = tokenizer.decode(outputs[0], skip_special_tokens=True)
43
- generated_text = result[len(input_text):].strip()
44
-
45
- return generated_text
46
-
 
 
47
  except Exception as e:
48
- return f"Error: {str(e)}"
49
-
50
  finally:
51
- # Move model back to CPU to free GPU memory
52
  model.to("cpu")
53
  torch.cuda.empty_cache()
54
 
55
- # Create interface
56
  demo = gr.Interface(
57
  fn=reverse_text,
58
- inputs=gr.Textbox(
59
- label="Input Text",
60
- placeholder="Enter text to process...",
61
- lines=3
62
- ),
63
- outputs=gr.Textbox(
64
- label="Generated Text",
65
- lines=3
66
- ),
67
  title="🔄 Reverse Text Model Demo",
68
- description="Test your custom reverse-text-warmup model using ZeroGPU",
69
  examples=[
70
  ["Hello world"],
71
- ["The quick brown fox"],
72
  ["Machine learning is amazing"]
73
  ]
74
  )
75
 
76
- demo.launch()
 
 
1
+ import re, spaces, gradio as gr, torch
 
 
2
  from transformers import AutoTokenizer, AutoModelForCausalLM
3
 
4
+ MODEL_NAME = "loocorez/reverse-text-warmup"
 
 
5
 
6
+ SYSTEM_PROMPT = """Reverse the given text.
7
+
8
+ Respond in the following format:
9
+ <response>
10
+ <think>...</think>
11
+ <answer>...</answer>
12
+ </response>"""
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=256,
36
+ do_sample=False, # <- deterministic
37
+ temperature=0.0,
38
  pad_token_id=tokenizer.eos_token_id,
39
+ eos_token_id=tokenizer.convert_tokens_to_ids("</response>")
40
  )
41
+
42
+ # decode ONLY the newly-generated tokens
43
+ generated = tokenizer.decode(out[0][inputs["input_ids"].size(1):],
44
+ skip_special_tokens=True)
45
+
46
+ # pull out <answer>...</answer>
47
+ m = re.search(r"<answer>(.*?)</answer>", generated, re.S)
48
+ return (m.group(1).strip() if m else generated.strip())
49
+
50
  except Exception as e:
51
+ return f"Error: {e}"
52
+
53
  finally:
 
54
  model.to("cpu")
55
  torch.cuda.empty_cache()
56
 
 
57
  demo = gr.Interface(
58
  fn=reverse_text,
59
+ inputs=gr.Textbox(label="Input Text", lines=3, placeholder="Enter text…"),
60
+ outputs=gr.Textbox(label="Reversed Text", lines=3),
 
 
 
 
 
 
 
61
  title="🔄 Reverse Text Model Demo",
62
+ description="Give it a sentence; it returns the reversed version.",
63
  examples=[
64
  ["Hello world"],
65
+ ["The quick brown fox jumps over the lazy dog."],
66
  ["Machine learning is amazing"]
67
  ]
68
  )
69
 
70
+ if __name__ == "__main__":
71
+ demo.launch()