File size: 2,928 Bytes
c63b084
ca0c1f4
ab15873
ca0c1f4
c334a6c
 
58e04b1
ca0c1f4
c334a6c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b807047
c334a6c
 
 
 
 
b807047
c334a6c
 
 
 
 
 
b807047
c334a6c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import gradio as gr
import inference
    
def translate_fortran_to_rust(fortran_code, fortran_explain):
    """Translate Fortran code to Rust using the provided model."""
    # Translation logic, with example stubbed function call
    rust_code = inference.main(USER_INPUT_CODE = fortran_code, USER_INPUT_EXPLANATION = fortran_explain, MODEL_PATH = "lora_model")
    return rust_code

default_codes = """
    program sum_of_numbers\n
        implicit none\n
        integer :: n, i, sum\n\n
        ! Initialize variables\n
        sum = 0\n\n
        ! Get user input\n
        print *, \Enter a positive integer:\\n
        read *, n\n\n
        ! Calculate the sum of numbers from 1 to n\n
        do i = 1, n\n
            sum = sum + i\n
        end do\n\n
        ! Print the result\n
        print *, \The sum of numbers from 1 to\, n, \is\, sum\n
    end program sum_of_numbers
    """

default_explanation ="""
    The provided Fortran code snippet is a program that calculates the sum of integers from 1 to n, where n is provided by the user. 
    It uses a simple procedural approach, including variable declarations, input handling, and a loop for the summation.\n\n
    The functionality of the program is explained in detail in the elaboration. The program starts by initializing variables and prompting the user for input. 
    It then calculates the sum using a do loop, iterating from 1 to n, and accumulating the result in a variable. Finally, it prints the computed sum to the console.\n\n
    This program demonstrates a straightforward application of Fortran's capabilities for handling loops and basic arithmetic operations. 
    It is a clear example of how Fortran can be used to solve mathematical problems involving user interaction and iterative computations.
    """

# Create the interface

# Create and launch the Gradio interfac
iface = gr.Interface(
    fn=translate_fortran_to_rust,
    inputs=[
        gr.Textbox(
                lines=6,
                value="",
                placeholder="Enter Fortran code here...",
                label="Fortran Code"
            ),
        gr.Textbox(
                lines=6,
                value="",
                placeholder="Enter translation explanation here...",
                label="Fortran Code Explanation"
            )
    ],
    outputs=gr.Textbox(
            lines=6,
            label="Rust Code"
        ),
    title="Fortran to Rust Code Translator",
    description=(
        "This tool translates Fortran code to Rust using a language model.\n\n"
        "How to use:\n"
        "1. Enter your Fortran code in the first text box\n"
        "2. Add an explanation of the code in the second text box\n"
        "3. The translated Rust code will appear in the output box\n\n"
        "Note: The default model is a Llama-3.2-3B-Instruct"
    ),
    examples=[
        [default_codes, default_explanation],
    ]
)

iface.launch()