|
|
--- |
|
|
license: mit |
|
|
--- |
|
|
This is a stable version of BSJCode, a model capable of fixing as well as optimizing java code. |
|
|
|
|
|
------------------ |
|
|
```bash |
|
|
## How to use it: |
|
|
|
|
|
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig |
|
|
import torch |
|
|
|
|
|
# Load the model and tokenizer |
|
|
bnb_config = BitsAndBytesConfig( |
|
|
load_in_4bit=True, |
|
|
bnb_4bit_quant_type="nf4", |
|
|
bnb_4bit_compute_dtype=torch.float16, |
|
|
bnb_4bit_use_double_quant=True, |
|
|
llm_int8_enable_fp32_cpu_offload=True |
|
|
) |
|
|
model = AutoModelForCausalLM.from_pretrained( |
|
|
"BSAtlas/BSJCode-1-Stable", |
|
|
quantization_config=bnb_config, |
|
|
device_map="auto" |
|
|
).to(device="cuda") |
|
|
tokenizer = AutoTokenizer.from_pretrained("BSAtlas/BSJCode-1-Stable") |
|
|
|
|
|
|
|
|
def detect_and_fix_bugs(code_snippet): |
|
|
# Prepare the prompt |
|
|
prompt = f"""You are an expert Java code optimizer and bug fixer. |
|
|
Analyze the following code, identify any bugs or inefficiencies, |
|
|
and provide an optimized and corrected version: |
|
|
|
|
|
```java |
|
|
{code_snippet} |
|
|
``` |
|
|
|
|
|
Optimized and Fixed Code:""" |
|
|
|
|
|
# Tokenize the input |
|
|
inputs = tokenizer(prompt, return_tensors="pt", truncation=True, max_length=1024) |
|
|
|
|
|
# Generate code |
|
|
with torch.no_grad(): |
|
|
outputs = model.generate( |
|
|
input_ids=inputs['input_ids'], |
|
|
attention_mask=inputs['attention_mask'], |
|
|
max_length=1024, # Adjust based on your model's training |
|
|
num_return_sequences=1, |
|
|
do_sample=True, |
|
|
temperature=0.7, |
|
|
top_k=50, |
|
|
top_p=0.95, |
|
|
repetition_penalty=1.2 |
|
|
) |
|
|
|
|
|
# Decode the output |
|
|
generated_code = tokenizer.decode(outputs[0], skip_special_tokens=True) |
|
|
|
|
|
# Extract the code portion after the prompt |
|
|
code_start = generated_code.find("Optimized and Fixed Code:") |
|
|
if code_start != -1: |
|
|
fixed_code = generated_code[code_start + len("Optimized and Fixed Code:"):].strip() |
|
|
else: |
|
|
fixed_code = generated_code |
|
|
|
|
|
return fixed_code |
|
|
|
|
|
|
|
|
sample_code = """ |
|
|
public class ThreadSafetyExample { |
|
|
private int counter = 0; |
|
|
|
|
|
public void increment() { |
|
|
// Not thread-safe method |
|
|
counter++; |
|
|
} |
|
|
|
|
|
public int getCounter() { |
|
|
return counter; |
|
|
} |
|
|
|
|
|
public static void main(String[] args) { |
|
|
ThreadSafetyExample example = new ThreadSafetyExample(); |
|
|
|
|
|
Thread t1 = new Thread(() -> { |
|
|
for (int i = 0; i < 1000; i++) { |
|
|
example.increment(); |
|
|
} |
|
|
}); |
|
|
|
|
|
Thread t2 = new Thread(() -> { |
|
|
for (int i = 0; i < 1000; i++) { |
|
|
example.increment(); |
|
|
} |
|
|
}); |
|
|
|
|
|
t1.start(); |
|
|
t2.start(); |
|
|
|
|
|
try { |
|
|
t1.join(); |
|
|
t2.join(); |
|
|
} catch (InterruptedException e) { |
|
|
e.printStackTrace(); |
|
|
} |
|
|
|
|
|
System.out.println("Final Counter: " + example.getCounter()); |
|
|
} |
|
|
} |
|
|
""" |
|
|
fixed_code = detect_and_fix_bugs(sample_code) |
|
|
print(fixed_code) |
|
|
-------------------------------------------------------------------------- |
|
|
|
|
|
|