File size: 2,635 Bytes
899ee70
96988ff
 
36a7c0a
 
96988ff
36a7c0a
74ecf07
36a7c0a
 
82afd49
 
 
96988ff
0572681
 
 
 
 
 
96988ff
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
899ee70
 
96988ff
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0572681
899ee70
96988ff
 
 
 
 
 
 
 
 
0572681
899ee70
 
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
import gradio as gr
import os
import shutil
from transformers import AutoTokenizer, AutoModelForCausalLM

# Model details and token
model_name = "Salesforce/codegen-350M-mono"
token = "token"  # Replace with your actual token

# Load tokenizer and model with authentication token
tokenizer = AutoTokenizer.from_pretrained(model_name, use_auth_token=token)
model = AutoModelForCausalLM.from_pretrained(model_name, use_auth_token=token)

# Function to explain the Java code
def explain_code(code):
    inputs = tokenizer(code, return_tensors="pt")
    outputs = model.generate(inputs['input_ids'], max_length=500)
    explanation = tokenizer.decode(outputs[0], skip_special_tokens=True)
    return explanation

# Function to extract Java files from a directory
def extract_java_files(src_dir, dest_dir=None):
    java_files = []
    for root, dirs, files in os.walk(src_dir):
        for file in files:
            if file.endswith('.java'):
                java_file_path = os.path.join(root, file)
                java_files.append(java_file_path)
                # If a destination directory is provided, copy the file
                if dest_dir:
                    if not os.path.exists(dest_dir):
                        os.makedirs(dest_dir)
                    shutil.copy(java_file_path, os.path.join(dest_dir, file))
    return java_files

# Function to read and process uploaded file
def process_uploaded_file(file):
    code = file.read().decode("utf-8")
    return explain_code(code)

# Create a folder for storing extracted Java files (optional)
src_directory = "path_to_your_directory"  # replace with your folder path
dest_directory = "extracted_java_files"  # Folder where Java files will be copied
java_files = extract_java_files(src_directory, dest_directory)

# Gradio Interface for selecting uploaded Java file or explaining code
def explain_from_uploaded_or_folder(file=None):
    if file:
        code = file.read().decode("utf-8")
    else:
        # If no file uploaded, use the first Java file from the extracted folder (or prompt user)
        if java_files:
            with open(java_files[0], "r") as f:
                code = f.read()
        else:
            return "No Java files found."

    # Process and return explanation of the code
    return explain_code(code)

# Create the Gradio interface
iface = gr.Interface(
    fn=explain_from_uploaded_or_folder,
    inputs=[
        gr.File(label="Upload Java File", file_types=[".java"]),
        gr.Button("Use First Extracted Java File", visible=not bool(java_files))
    ],
    outputs="text",
    live=True
)

# Launch the interface
iface.launch()