1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
from evaluator import *

DESCRIPTION = "Test if the model can write rust code that can be imported from python and knows how to build it."

TAGS = ['rust', 'c', 'python', 'code']

question = """I want to call some rust code from python on a linux machine. Specifically, I want to be able to run

python3 -c 'import magic; print(magic.do_add(3, 4))'

and have it give me the sum of these numbers. Here, do_add should be a rust function that adds two integers.

Please give me a complete set of instructions for how to make this run, so that when I run this code as-is it will work.
"""

question2 = """
Now please conver this answer into a JSON array that packages it all up so I don't need to think and can just copy files to specific locations and then run things. Format your answer

{"path/to/file": "contents of rust file",
 "path/to/python_file": "contents of any necessary python file that exposes do_add",
 "build.sh": "contents of a bash file to build the project",
 ...  # any other files necessary
}


The only thing I will do is put files in the right place and run `bash build.sh`. Do not give any explanation of the code. ONLY ANSWER WITH A SINGLE JSON OBJECT. Your answer should start ```json and end with ```.
"""

def is_ok():
    import os
    os.popen("bash build.sh").read()
    
    return os.popen("python3 -c 'import magic; print(magic.do_add(31, 11))'").read() == "42\n"

    
TestCallRustFromPy = question >> LLMConversation() >> LLMConversation(question2) >> ExtractJSON() >> MakeFilesFromJSON() >> PyEvaluator(is_ok)
TestCallCFromPy = question.replace("rust", "C") >> LLMConversation() >> LLMConversation(question2.replace("rust", "C")) >> ExtractJSON() >> MakeFilesFromJSON() >> PyEvaluator(is_ok)


if __name__ == "__main__":
    print(run_test(TestCallCFromPy))