Spaces:
Sleeping
Sleeping
from transformers import T5ForConditionalGeneration, AutoTokenizer | |
import gradio as gr | |
# Load the model and tokenizer | |
model_name = "ejschwartz/hext5" # Replace with your desired model | |
model = T5ForConditionalGeneration.from_pretrained(model_name) | |
tokenizer = AutoTokenizer.from_pretrained(model_name) | |
max_input_length = 4096 | |
examples = [ | |
"void __fastcall __noreturn <func>(int a1, int a2, char a3, __int64 a4, __int64 a5)\n{\n __int64 v5; // rdi\n int v6; // ebx\n const char *v9; // rsi\n char *v10; // r12\n char *v11; // r13\n char *v12; // rax\n char v13[42]; // [rsp+Eh] [rbp-2Ah] BYREF\n\n v5 = (unsigned int)(a1 - 1);\n v6 = status;\n if ( (unsigned int)v5 <= 3 )\n {\n v9 = (&off_413A60)[v5];\n if ( a2 < 0 )\n {\n v13[0] = a3;\n v11 = v13;\n v10 = &asc_412691[-a2];\n v13[1] = 0;\n }\n else\n {\n v10 = \"--\";\n v11 = *(char **)(a4 + 32LL * a2);\n }\n v12 = dcgettext(0LL, v9, 5);\n error(v6, 0, v12, v10, v11, a5);\n abort();\n }\n abort();\n}\n" | |
] | |
# predict summary | |
def predict_summary(code): | |
global model | |
global tokenizer | |
input = tokenizer('summarize: '+code, return_tensors='pt', max_length=max_input_length, truncation=True) | |
output = model.generate(**input, max_new_tokens=256)[0] | |
return tokenizer.decode(output, skip_special_tokens=True) | |
# predict identifier (func name) | |
def predict_identifier(code): | |
global model | |
global tokenizer | |
''' | |
code should be like: "unsigned __int8 *__cdecl <func>(int *<var_0>,...){ return <func_1>(1);}" | |
''' | |
input = tokenizer('identifier_predict: '+code, return_tensors='pt', max_length=max_input_length, truncation=True) | |
output = model.generate(**input, max_new_tokens=10000)[0] | |
return tokenizer.decode(output) | |
# Create the Gradio interface for predicting identifiers | |
identifier_iface = gr.Interface( | |
fn=predict_identifier, | |
inputs="text", | |
outputs="text", | |
title="Predict Identifiers", | |
description="Enter a code snippet and see the model generate function identifiers.", | |
examples=examples | |
) | |
# Create the Gradio interface for predicting summaries | |
summary_iface = gr.Interface( | |
fn=predict_summary, | |
inputs="text", | |
outputs="text", | |
title="Predict Summary", | |
description="Enter a code snippet and see the model generate a summary.", | |
examples=examples | |
) | |
# Combine the interfaces into a single tabbed interface | |
combined_iface = gr.TabbedInterface( | |
interface_list=[identifier_iface, summary_iface], | |
tab_names=["Predict Identifiers", "Predict Summary"] | |
) | |
# Launch the combined interface | |
combined_iface.launch() | |