Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -135,12 +135,12 @@ class Transformer(nn.Module):
|
|
135 |
# Device setup
|
136 |
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
|
137 |
|
138 |
-
# Load tokenizers
|
139 |
sp_code = spm.SentencePieceProcessor(model_file="code_tokenizer.model") # C++ tokenizer for input
|
140 |
sp_pseudo = spm.SentencePieceProcessor(model_file="pseudocode_tokenizer.model") # Pseudocode tokenizer for output
|
141 |
|
142 |
# Load the model trained for C++ to pseudocode
|
143 |
-
model_path = "c2p.pth" # Assuming
|
144 |
model = torch.load(model_path, map_location=device, weights_only=False)
|
145 |
model.eval()
|
146 |
model = model.to(device)
|
@@ -149,7 +149,7 @@ model = model.to(device)
|
|
149 |
def generate_pseudocode(cpp_code, max_len=500):
|
150 |
model.eval()
|
151 |
src = torch.tensor([sp_code.encode_as_ids(cpp_code)], dtype=torch.long, device=device) # Tokenize C++ input
|
152 |
-
tgt = torch.tensor([[2]], dtype=torch.long, device=device) # <BOS> token (
|
153 |
|
154 |
generated_tokens = [2] # Start with <BOS>
|
155 |
with torch.no_grad():
|
@@ -158,7 +158,7 @@ def generate_pseudocode(cpp_code, max_len=500):
|
|
158 |
next_token = output[:, -1, :].argmax(-1).item()
|
159 |
generated_tokens.append(next_token)
|
160 |
tgt = torch.cat([tgt, torch.tensor([[next_token]], device=device)], dim=1)
|
161 |
-
if next_token == 3: # <EOS> token (
|
162 |
break
|
163 |
|
164 |
response = sp_pseudo.decode_ids(generated_tokens) # Decode using pseudocode tokenizer
|
@@ -173,9 +173,16 @@ def generate_output(cpp_code):
|
|
173 |
with gr.Blocks(title="C++ to Pseudocode Transformer") as demo:
|
174 |
gr.Markdown("## C++ to Pseudocode Converter")
|
175 |
gr.Markdown("Enter C++ code below to generate pseudocode.")
|
176 |
-
cpp_input = gr.
|
|
|
|
|
|
|
|
|
177 |
generate_btn = gr.Button("Generate", variant="primary", elem_classes="btn-blue")
|
178 |
-
pseudocode_output = gr.
|
|
|
|
|
|
|
179 |
|
180 |
generate_btn.click(
|
181 |
fn=generate_output,
|
@@ -185,7 +192,7 @@ with gr.Blocks(title="C++ to Pseudocode Transformer") as demo:
|
|
185 |
|
186 |
demo.launch()
|
187 |
|
188 |
-
# Custom CSS
|
189 |
demo.css = """
|
190 |
.btn-blue {
|
191 |
background-color: #007bff;
|
|
|
135 |
# Device setup
|
136 |
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
|
137 |
|
138 |
+
# Load tokenizers
|
139 |
sp_code = spm.SentencePieceProcessor(model_file="code_tokenizer.model") # C++ tokenizer for input
|
140 |
sp_pseudo = spm.SentencePieceProcessor(model_file="pseudocode_tokenizer.model") # Pseudocode tokenizer for output
|
141 |
|
142 |
# Load the model trained for C++ to pseudocode
|
143 |
+
model_path = "c2p.pth" # Assuming retrained model for C++ to pseudocode
|
144 |
model = torch.load(model_path, map_location=device, weights_only=False)
|
145 |
model.eval()
|
146 |
model = model.to(device)
|
|
|
149 |
def generate_pseudocode(cpp_code, max_len=500):
|
150 |
model.eval()
|
151 |
src = torch.tensor([sp_code.encode_as_ids(cpp_code)], dtype=torch.long, device=device) # Tokenize C++ input
|
152 |
+
tgt = torch.tensor([[2]], dtype=torch.long, device=device) # <BOS> token (ID=2)
|
153 |
|
154 |
generated_tokens = [2] # Start with <BOS>
|
155 |
with torch.no_grad():
|
|
|
158 |
next_token = output[:, -1, :].argmax(-1).item()
|
159 |
generated_tokens.append(next_token)
|
160 |
tgt = torch.cat([tgt, torch.tensor([[next_token]], device=device)], dim=1)
|
161 |
+
if next_token == 3: # <EOS> token (ID=3)
|
162 |
break
|
163 |
|
164 |
response = sp_pseudo.decode_ids(generated_tokens) # Decode using pseudocode tokenizer
|
|
|
173 |
with gr.Blocks(title="C++ to Pseudocode Transformer") as demo:
|
174 |
gr.Markdown("## C++ to Pseudocode Converter")
|
175 |
gr.Markdown("Enter C++ code below to generate pseudocode.")
|
176 |
+
cpp_input = gr.Textbox(
|
177 |
+
label="C++ Code",
|
178 |
+
placeholder="e.g., 'int main() { int n; cin >> n; }'",
|
179 |
+
lines=5
|
180 |
+
)
|
181 |
generate_btn = gr.Button("Generate", variant="primary", elem_classes="btn-blue")
|
182 |
+
pseudocode_output = gr.Code(
|
183 |
+
label="Generated Pseudocode",
|
184 |
+
language="plaintext" # Pseudocode isn’t a formal language, so use plaintext
|
185 |
+
)
|
186 |
|
187 |
generate_btn.click(
|
188 |
fn=generate_output,
|
|
|
192 |
|
193 |
demo.launch()
|
194 |
|
195 |
+
# Custom CSS
|
196 |
demo.css = """
|
197 |
.btn-blue {
|
198 |
background-color: #007bff;
|