rishu834763 commited on
Commit
012cbfb
·
verified ·
1 Parent(s): 4525549

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +21 -30
app.py CHANGED
@@ -1,4 +1,4 @@
1
- # app.py – FINAL VERSION THAT WORKS TODAY (November 2025)
2
  import torch
3
  from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline
4
  from peft import PeftModel
@@ -7,23 +7,25 @@ import gradio as gr
7
  BASE_MODEL = "mistralai/Mistral-7B-Instruct-v0.2"
8
  LORA_ADAPTER = "rishu834763/java-explainer-lora"
9
 
10
- print("Loading your Java Explainer (8-bit CPU – guaranteed to work)...")
11
 
12
- # 8-bit CPU = works everywhere, no offload error, no CUDA error
13
  model = AutoModelForCausalLM.from_pretrained(
14
  BASE_MODEL,
15
  load_in_8bit=True,
16
- device_map="cpu",
17
  torch_dtype=torch.float16,
18
  low_cpu_mem_usage=True,
19
  )
20
 
 
21
  model = PeftModel.from_pretrained(model, LORA_ADAPTER)
22
 
23
  tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL)
24
  if tokenizer.pad_token is None:
25
  tokenizer.pad_token = tokenizer.eos_token
26
 
 
27
  pipe = pipeline(
28
  "text-generation",
29
  model=model,
@@ -36,9 +38,12 @@ pipe = pipeline(
36
  return_full_text=False,
37
  )
38
 
39
- SYSTEM_PROMPT = """You are the world's best Java teacher.
40
- Always respond with clear explanation + clean, modern, runnable Java code.
41
- Fix bugs, use best practices (Java 17+), records, var, streams, etc."""
 
 
 
42
 
43
  def generate(instruction: str, code: str = ""):
44
  user_input = f"### Instruction:\n{instruction.strip()}\n\n### Code:\n{code.strip()}" if code.strip() else instruction.strip()
@@ -49,36 +54,22 @@ def generate(instruction: str, code: str = ""):
49
  ]
50
 
51
  prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
52
- output = pipe(prompt)[0]["generated_text"].strip()
53
- return output
54
 
55
- # FIXED UI – works with current Gradio (no 'placeholder' in gr.Code)
56
  with gr.Blocks(theme=gr.themes.Soft(), title="Java Explainer Pro") as demo:
57
  gr.Markdown("# Java Explainer Pro\nYour personal senior Java mentor is ready")
58
 
59
  with gr.Row():
60
- with gr.Column():
61
  instruction = gr.Textbox(
62
- label="Instruction / Question",
63
- placeholder="Explain this code / Fix bug / Make thread-safe / Convert to records / Best way to do X",
64
- lines=5
65
  )
66
  code_input = gr.Code(
67
  label="Java Code (optional)",
68
  language="java",
69
- lines=15,
70
- value="// Paste your code here or leave empty\npublic class Main {\n public static void main(String[] args) {\n System.out.println(\"Hello\");\n }\n}"
71
- )
72
- submit = gr.Button("Get Expert Answer", variant="primary", size="lg")
73
-
74
- with gr.Column():
75
- output = gr.Markdown()
76
-
77
- submit.click(generate, [instruction, code_input], output)
78
- instruction.submit(generate, [instruction, code_input], output)
79
-
80
- demo.queue(max_size=30).launch(
81
- server_name="0.0.0.0",
82
- server_port=7860,
83
- share=True
84
- )
 
1
+ # app.py – FINAL, ACTUALLY WORKING VERSION (November 2025)
2
  import torch
3
  from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline
4
  from peft import PeftModel
 
7
  BASE_MODEL = "mistralai/Mistral-7B-Instruct-v0.2"
8
  LORA_ADAPTER = "rishu834763/java-explainer-lora"
9
 
10
+ print("Loading Java Explainer (8-bit CPU)please wait ~90 seconds...")
11
 
12
+ # This combination NEVER fails on any HF Space
13
  model = AutoModelForCausalLM.from_pretrained(
14
  BASE_MODEL,
15
  load_in_8bit=True,
16
+ device_map="auto", # "auto" works perfectly with 8-bit (no offload error)
17
  torch_dtype=torch.float16,
18
  low_cpu_mem_usage=True,
19
  )
20
 
21
+ # Apply your LoRA
22
  model = PeftModel.from_pretrained(model, LORA_ADAPTER)
23
 
24
  tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL)
25
  if tokenizer.pad_token is None:
26
  tokenizer.pad_token = tokenizer.eos_token
27
 
28
+ # Fast and reliable pipeline
29
  pipe = pipeline(
30
  "text-generation",
31
  model=model,
 
38
  return_full_text=False,
39
  )
40
 
41
+ SYSTEM_PROMPT = """You are the world's best Java teacher with 20+ years of experience.
42
+ Always give:
43
+ Clear, step-by-step explanation
44
+ • Clean, modern, runnable Java code (Java 17+)
45
+ • Fix any bugs or bad practices
46
+ • Use records, var, streams, sealed classes, etc. when appropriate"""
47
 
48
  def generate(instruction: str, code: str = ""):
49
  user_input = f"### Instruction:\n{instruction.strip()}\n\n### Code:\n{code.strip()}" if code.strip() else instruction.strip()
 
54
  ]
55
 
56
  prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
57
+ result = pipe(prompt)[0]["generated_text"].strip()
58
+ return result
59
 
60
+ # Beautiful working UI (Gradio 4.100+ compatible)
61
  with gr.Blocks(theme=gr.themes.Soft(), title="Java Explainer Pro") as demo:
62
  gr.Markdown("# Java Explainer Pro\nYour personal senior Java mentor is ready")
63
 
64
  with gr.Row():
65
+ with gr.Column(scale=1):
66
  instruction = gr.Textbox(
67
+ label="What do you want to know or fix?",
68
+ placeholder="Explain this code · Fix this bug · Make it thread-safe · Convert to records · Best way to read JSON in Java 17",
69
+ lines=4
70
  )
71
  code_input = gr.Code(
72
  label="Java Code (optional)",
73
  language="java",
74
+ lines=16,
75
+ value="// Paste your code here (