💫 Community Model> CodeGemma 7b by Google
👾 LM Studio Community models highlights program. Highlighting new & noteworthy models by the community. Join the conversation on Discord.
Model creator: Google
Original model: google/codegemma-7b
GGUF quantization: provided by bartowski based on llama.cpp
release b2589
Model Summary:
CodeGemma 7B is the first in a series of coding models released by Google. This is a code completion model, and as such, cannot be prompted in the same way a chat or instruct model can be prompted.
This model is perfect for code completion and use in tools like co-pilot, where its small size will make completions show up instantly while still being high performance.
This model should not be used as a chat model, and will not answer questions.
Prompt Template:
This model does not support a typical prompt template, but instead uses the following tokens for specifying input parts:
- <|fim_prefix|> precedes the context before the completion we want to run.
- <|fim_suffix|> precedes the suffix. You must put this token exactly where the cursor would be positioned in an editor, as this is the location that will be completed by the model.-
- <|fim_middle|> is the prompt that invites the model to run the generation.
In addition to these, there's also <|file_separator|>, which is used to provide multi-file contexts.
Select LM Studio Blank Preset
to use your own proper format as below.
Use case and examples
This model will excel at code generation and fill-in-the-middle.
Coding 1
<|fim_prefix|>import datetime
def calculate_age(birth_year):
"""Calculates a person's age based on their birth year."""
current_year = datetime.date.today().year
<|fim_suffix|>
return age<|fim_middle|>
age = current_year - birth_year<|file_separator|>test_calculate_age.py
import pytest
from calculate_age import calculate_age
def test_calculate_age_positive():
assert calculate_age(1990) == 33
def test_calculate_age_negative():
assert calculate_age(2023) == -1
def test_calculate_age_future():
assert calculate_age(2030) == -7
def test_calculate_age_zero():
assert calculate_age(0) == -2023<|file_separator|>
Explanation: Here the model was given the fill-in-middle prefix and suffix. The model is then told to generate the fim_middle with the token <|fim_middle|>
to which is replies with the code that would complete the function.
It then gave a file_separator token to indicate a new file called test_calculate_age.py and wrote up several (albeit incorrect) unit tests.
Coding 2
<|fim_prefix|>public class MergeSort {
public static void mergeSort(int[] arr) {
int n = arr.length;
if (n < 2) {
return;
}
<|fim_suffix|>
mergeSort(left);
mergeSort(right);
merge(arr, left, right);
}
public static void merge(int[] arr, int[] left, int[] right) {
int i = 0;
int j = 0;
int k = 0;
while (i < left.length && j < right.length) {
if (left[i] <= right[j]) {
arr[k] = left[i];
i++;
} else {
arr[k] = right[j];
j++;
}
k++;
}
while (i < left.length) {
arr[k] = left[i];
i++;
k++;
}
while (j < right.length) {
arr[k] = right[j];
j++;
k++;
}
}
public static void main(String[] args) {
int[] arr = {5, 2, 4, 6, 1, 3};
mergeSort(arr);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
<|fim_middle|>
int mid = n / 2;
int[] left = new int[mid];
int[] right = new int[n - mid];
for (int i = 0; i < mid; i++) {
left[i] = arr[i];
}
for (int i = mid; i < n; i++) {
right[i - mid] = arr[i];
}<|file_separator|>
Explanation: The model was given the majority of a merge sort implementation in Java with a portion in the middle removed. The model was able to fill in the missing code based on the surrounding details.
Coding 3
<|fim_prefix|>arr = [1, 5, 3, 76, 12, 154, 2, 56]
# Sort the array then print only the even numbers
<|fim_suffix|><|fim_middle|>
puts arr.sort.select { |num| num.even? }
# Sort the array then print only the odd numbers
puts arr.sort.select { |num| num.odd? }
# Sort the array then print only the numbers greater than 10
puts arr.sort.select { |num| num > 10 }<|file_separator|><|file_separator|>
Explanation: While this model cannot be directly prompted, it can be hinted in the right direction by preceeding the fill in middle token by a comment explaning what comes next, then using <|fim_suffix|> followed immediately by <|fim_middle|>
In this example, the comment suggest that what comes next is sorting the array and printing out each one that is even. The model accurately fills in what should be at <|fim_suffix|>.
Interestingly in this example, the model chose to use Ruby as the language to complete this, since it fits the given syntax.
Technical Details
CodeGemma 7b is based on the Gemma 7b model with additional training on web documents, mathematics, and code, with a mixture of 80% code and 20% natural language.
The code used is based on publicly avaialble code repositories.
The model was trained exclusively for the purposes of code completion and excels at it.
Additional details can be found on Google's official report PDF here
Special thanks
🙏 Special thanks to Georgi Gerganov and the whole team working on llama.cpp for making all of this possible.
🙏 Special thanks to Kalomaze for his dataset (linked here) that was used for calculating the imatrix for these quants, which improves the overall quality!
Disclaimers
LM Studio is not the creator, originator, or owner of any Model featured in the Community Model Program. Each Community Model is created and provided by third parties. LM Studio does not endorse, support, represent or guarantee the completeness, truthfulness, accuracy, or reliability of any Community Model. You understand that Community Models can produce content that might be offensive, harmful, inaccurate or otherwise inappropriate, or deceptive. Each Community Model is the sole responsibility of the person or entity who originated such Model. LM Studio may not monitor or control the Community Models and cannot, and does not, take responsibility for any such Model. LM Studio disclaims all warranties or guarantees about the accuracy, reliability or benefits of the Community Models. LM Studio further disclaims any warranty that the Community Model will meet your requirements, be secure, uninterrupted or available at any time or location, or error-free, viruses-free, or that any errors will be corrected, or otherwise. You will be solely responsible for any damage resulting from your use of or access to the Community Models, your downloading of any Community Model, or use of any other Community Model provided by or through LM Studio.
- Downloads last month
- 150