AliHamza852 commited on
Commit
6653e99
·
verified ·
1 Parent(s): 4ffb9c6

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +69 -0
app.py ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ from transformers import GPT2LMHeadModel, GPT2TokenizerFast
3
+ import gradio as gr
4
+
5
+ # ============================================================
6
+ # CONFIG
7
+ # ============================================================
8
+ MODEL_NAME = "gpt2"
9
+ WEIGHTS_PATH = "gpt2_spoc.pt" # upload this file to your Space
10
+ DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
11
+
12
+ # ============================================================
13
+ # LOAD MODEL & TOKENIZER
14
+ # ============================================================
15
+ tokenizer = GPT2TokenizerFast.from_pretrained(MODEL_NAME)
16
+ tokenizer.add_special_tokens({
17
+ "additional_special_tokens": ["<|pc|>", "<|code|>", "<|end|>"]
18
+ })
19
+
20
+ model = GPT2LMHeadModel.from_pretrained(MODEL_NAME)
21
+ model.resize_token_embeddings(len(tokenizer))
22
+ model.load_state_dict(torch.load(WEIGHTS_PATH, map_location=DEVICE))
23
+ model.to(DEVICE)
24
+ model.eval()
25
+
26
+ # ============================================================
27
+ # INFERENCE FUNCTION
28
+ # ============================================================
29
+ def generate_code(pseudo, max_new_tokens=200):
30
+ if not pseudo.strip():
31
+ return "⚠️ Please enter some pseudo-code."
32
+
33
+ prompt = f"<|pc|>\n{pseudo.strip()}\n<|code|>\n"
34
+ inputs = tokenizer(prompt, return_tensors="pt").to(DEVICE)
35
+
36
+ outputs = model.generate(
37
+ **inputs,
38
+ max_new_tokens=max_new_tokens,
39
+ temperature=0.7,
40
+ top_p=0.9,
41
+ do_sample=True,
42
+ pad_token_id=tokenizer.eos_token_id
43
+ )
44
+
45
+ text = tokenizer.decode(outputs[0], skip_special_tokens=True)
46
+ return text.split("<|code|>")[-1].split("<|end|>")[0].strip()
47
+
48
+ # ============================================================
49
+ # GRADIO UI
50
+ # ============================================================
51
+ demo = gr.Interface(
52
+ fn=generate_code,
53
+ inputs=gr.Textbox(lines=10, label="🧠 Enter Pseudo-Code"),
54
+ outputs=gr.Code(label="💻 Generated Python Code", language="python"),
55
+ title="Pseudo-Code → Code Generator (GPT-2 SPOC)",
56
+ description="Fine-tuned GPT-2 model that converts pseudo-code into working Python code.",
57
+ examples=[
58
+ ["Read integer n\nRead n integers into a list\nPrint the sum of the list"],
59
+ ["Input two numbers a and b\nIf a > b, print a else print b"],
60
+ ["Read a string s\nReverse it and print"]
61
+ ],
62
+ theme="gradio/soft",
63
+ )
64
+
65
+ # ============================================================
66
+ # LAUNCH
67
+ # ============================================================
68
+ if __name__ == "__main__":
69
+ demo.launch()