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 (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 (int *,...){ return (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()