| | --- |
| | license: mit |
| | --- |
| | |
| | # exLong |
| | exLong is a large language model instruction-tuned from CodeLlama and embeds reasoning about traces that lead to throw statements, conditional expressions that guard throw statements, and non-exceptional behavior tests that execute similar traces. |
| |
|
| | The model is fine-tuned from CodeLlama-7b-Instruct using LoRA. |
| |
|
| | The source code is [here](git@github.com:EngineeringSoftware/exLong.git) |
| |
|
| | | Size| Base Model | Providing EBT name in the prompt | Not providing EBT name in the prompt | |
| | | --- | ----------------------------------------------------------------------------- | ------------------------------------- | ---------------------------------------------------------| |
| | | 7B | [codellama/CodeLlama-7b-Instruct-hf](https://huggingface.co/codellama/CodeLlama-7b-Instruct-hf) | `revision="with-etest-name" | `revision="no-etest-name" | |
| |
|
| | ## Model Use |
| |
|
| | ```bash |
| | pip install transformers accelerate bitsandbytes peft |
| | ``` |
| |
|
| | ```python |
| | from transformers import AutoModelForCausalLM, AutoTokenizer |
| | from peft import PeftModel, PeftConfig |
| | |
| | # Load the base model |
| | base_model_name = "codellama/CodeLlama-7b-Instruct-hf" |
| | base_model = AutoModelForCausalLM.from_pretrained(base_model_name) |
| | |
| | # Load the LoRA configuration |
| | peft_model_id = "EngineeringSoftware/exLong" |
| | config = PeftConfig.from_pretrained(peft_model_id, revision="with-etest-name") # set revision to "no-etest-name" for no EBT name |
| | |
| | # Load the LoRA model |
| | model = PeftModel.from_pretrained(base_model, peft_model_id) |
| | tokenizer = AutoTokenizer.from_pretrained(base_model_name) |
| | |
| | prompt = """<s>[INST] <<SYS>> |
| | You are a helpful programming assistant and an expert Java programmer. You are helping a user writing exceptional-behavior tests for their Java code. |
| | <</SYS>> |
| | |
| | Please complete an exceptional behavior test method in Java to test the method 'factorial' for the exception 'IllegalArgumentException'. |
| | The method to be tested is defined as: |
| | ```java |
| | public static long factorial(int n) { |
| | if (n < 0) { |
| | throw new IllegalArgumentException("Number must be non-negative."); |
| | } |
| | long result = 1; |
| | for (int i = 1; i <= n; i++) { |
| | result *= i; |
| | } |
| | return result; |
| | } |
| | ` ` ` |
| | Please only give the new exceptional-behavior test method to complete the following test class. Do NOT use extra libraries or define new helper methods. Return **only** the code in the completion: |
| | ```java |
| | public class FactorialTest { |
| | } |
| | ` ` ` |
| | """ |
| | |
| | input_ids = tokenizer(prompt, return_tensors="pt").input_ids |
| | |
| | # Generate code |
| | output = model.generate( |
| | input_ids=input_ids, |
| | max_new_tokens=100, |
| | temperature=0.2, # Sampling temperature (lower is more deterministic) |
| | top_p=0.95, # Top-p (nucleus) sampling |
| | do_sample=True # Enable sampling |
| | ) |
| | |
| | # Decode and print the generated code |
| | generated_code = tokenizer.decode(output[0], skip_special_tokens=True) |
| | print("Generated Code:") |
| | print(generated_code) |
| | ``` |
| | |
| | |