Ephraimmm commited on
Commit
5ca8718
·
verified ·
1 Parent(s): 6f6de24

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +15 -13
app.py CHANGED
@@ -16,21 +16,25 @@ SYSTEM_PROMPT = (
16
  "No use English unless person ask am."
17
  )
18
 
 
 
 
19
 
20
  def load_model():
21
- # Tokenizer (use base tokenizer)
22
  tokenizer = AutoTokenizer.from_pretrained(
23
  BASE_MODEL,
24
  trust_remote_code=True,
25
  )
26
 
27
  if not torch.cuda.is_available():
28
- raise RuntimeError(
29
- "CUDA GPU not detected. gpt-oss-20b needs a GPU for this demo."
30
- )
 
31
 
32
- # If the base model is MXFP4-quantized, DO NOT use BitsAndBytes.
33
- # Dequantize=True makes this run on non-H100 GPUs too (L4/A10/T4 etc).
34
  qconfig = Mxfp4Config(dequantize=True)
35
 
36
  base = AutoModelForCausalLM.from_pretrained(
@@ -39,6 +43,8 @@ def load_model():
39
  torch_dtype=torch.bfloat16,
40
  quantization_config=qconfig,
41
  trust_remote_code=True,
 
 
42
  )
43
 
44
  model = PeftModel.from_pretrained(base, ADAPTER_ID)
@@ -49,10 +55,8 @@ def load_model():
49
  tokenizer, model = load_model()
50
 
51
 
52
- def build_prompt(message, history):
53
- # Keep prompt bounded: last N turns
54
- MAX_TURNS = 8
55
- history = history[-MAX_TURNS:]
56
 
57
  lines = [SYSTEM_PROMPT, ""]
58
  for u, a in history:
@@ -84,8 +88,6 @@ def chat(message, history, max_new_tokens, temperature, top_p):
84
  )
85
 
86
  decoded = tokenizer.decode(out[0], skip_special_tokens=True)
87
-
88
- # Extract only the latest assistant segment
89
  reply = decoded.split("Assistant:")[-1].strip()
90
  return reply
91
 
@@ -101,4 +103,4 @@ demo = gr.ChatInterface(
101
  description=f"Base: {BASE_MODEL} | Adapter: {ADAPTER_ID}",
102
  )
103
 
104
- demo.launch(server_name="0.0.0.0", server_port=int(os.getenv("PORT", "7860")))
 
16
  "No use English unless person ask am."
17
  )
18
 
19
+ # Hugging Face Spaces-safe writable dir for disk offload
20
+ OFFLOAD_DIR = os.getenv("OFFLOAD_DIR", "/tmp/offload")
21
+
22
 
23
  def load_model():
24
+ # Tokenizer (base)
25
  tokenizer = AutoTokenizer.from_pretrained(
26
  BASE_MODEL,
27
  trust_remote_code=True,
28
  )
29
 
30
  if not torch.cuda.is_available():
31
+ raise RuntimeError("CUDA GPU not detected. gpt-oss-20b needs a GPU for this demo.")
32
+
33
+ # Make sure offload folder exists (required when device_map triggers disk offload)
34
+ os.makedirs(OFFLOAD_DIR, exist_ok=True)
35
 
36
+ # MXFP4 model: do NOT use BitsAndBytes.
37
+ # dequantize=True allows running on non-H100 GPUs too (L4/A10/T4 etc).
38
  qconfig = Mxfp4Config(dequantize=True)
39
 
40
  base = AutoModelForCausalLM.from_pretrained(
 
43
  torch_dtype=torch.bfloat16,
44
  quantization_config=qconfig,
45
  trust_remote_code=True,
46
+ offload_folder=OFFLOAD_DIR,
47
+ offload_state_dict=True,
48
  )
49
 
50
  model = PeftModel.from_pretrained(base, ADAPTER_ID)
 
55
  tokenizer, model = load_model()
56
 
57
 
58
+ def build_prompt(message, history, max_turns=8):
59
+ history = (history or [])[-max_turns:]
 
 
60
 
61
  lines = [SYSTEM_PROMPT, ""]
62
  for u, a in history:
 
88
  )
89
 
90
  decoded = tokenizer.decode(out[0], skip_special_tokens=True)
 
 
91
  reply = decoded.split("Assistant:")[-1].strip()
92
  return reply
93
 
 
103
  description=f"Base: {BASE_MODEL} | Adapter: {ADAPTER_ID}",
104
  )
105
 
106
+ demo.launch(server_name="0.0.0.0", server_port=int(os.getenv('PORT', '7860')))