|
import requests |
|
import random |
|
|
|
CL = ['clang-11', 'clang-12', 'clang-9', 'gcc-11', 'gcc-7', 'gcc-9'] |
|
OP = ['O0', 'O1', 'O2', 'O3', 'Os'] |
|
ST = ['stripped', 'unstripped'] |
|
|
|
|
|
def process(source_code): |
|
compiler = random.choice(CL) |
|
optimizer = random.choice(OP) |
|
strip_type = random.choice(ST) |
|
prompt = f'Please compile this source code using {compiler} with optimization level {optimizer} into assembly code.' |
|
if strip_type == 'stripped': |
|
prompt += ' Strip the assembly code.' |
|
else: |
|
prompt += ' No strip the assembly code.' |
|
query_prompt = "<s>system\n" + prompt + \ |
|
"</s>\n<s>user\n" + source_code + "</s>\n<s>assistant\n" |
|
return query_prompt, compiler, optimizer, strip_type |
|
|
|
|
|
def do_request(src): |
|
url = "http://localhost:8080/v1/completions" |
|
|
|
query_prompt, _, _, _ = process(src) |
|
|
|
model_name = "VirtualCompiler" |
|
|
|
ret = requests.post(url, json={ |
|
"prompt": query_prompt, |
|
"max_tokens": 4096, |
|
"temperature": 0.3, |
|
"stop": ["</s>"], |
|
"model": model_name, |
|
"echo": False, |
|
"logprobs": True, |
|
}) |
|
|
|
return ret.json() |
|
|
|
|
|
src = '''static int |
|
layout_append(struct layout_cell *lc, char *buf, size_t len) |
|
{ |
|
if (len == 0) |
|
return (-1); |
|
|
|
return (0); |
|
} |
|
''' |
|
|
|
ret = do_request(src) |
|
|
|
print(ret['choices'][0]['text']) |
|
|