From eb36e11c5fa2bd512e6f868eae28c1e69bdd0359 Mon Sep 17 00:00:00 2001 From: Carl-Robert Linnupuu Date: Sun, 22 Sep 2024 01:43:42 +0300 Subject: [PATCH] feat: add Qwen 2.5 Coder model --- .../codegpt/completions/HuggingFaceModel.java | 12 ++++++++++++ .../codegpt/completions/llama/LlamaModel.java | 17 +++++++++++++++++ .../completions/llama/PromptTemplate.java | 2 +- .../service/llama/LlamaSettingsState.java | 2 +- .../codecompletions/CodeCompletionService.kt | 3 ++- .../codecompletions/InfillPromptTemplate.kt | 17 +++++++++++++++++ 6 files changed, 50 insertions(+), 3 deletions(-) diff --git a/src/main/java/ee/carlrobert/codegpt/completions/HuggingFaceModel.java b/src/main/java/ee/carlrobert/codegpt/completions/HuggingFaceModel.java index 8ee9308b..1bd3ac98 100644 --- a/src/main/java/ee/carlrobert/codegpt/completions/HuggingFaceModel.java +++ b/src/main/java/ee/carlrobert/codegpt/completions/HuggingFaceModel.java @@ -120,6 +120,18 @@ public enum HuggingFaceModel { CODE_QWEN_1_5_7B_Q6_K(7, 6, "Qwen_-_CodeQwen1.5-7B-Chat-gguf", "CodeQwen1.5-7B-Chat.Q6_K.gguf", "RichardErkhov", 6.38), + CODE_QWEN_2_5_1_5B_Q6_K(1, 6, "Qwen2.5-Coder-1.5B-Instruct-GGUF", + "qwen2.5-coder-1.5b-instruct-q6_k.gguf", "Qwen", 1.46), + CODE_QWEN_2_5_1_5B_Q8_0(1, 8, "Qwen2.5-Coder-1.5B-Instruct-GGUF", + "qwen2.5-coder-1.5b-instruct-q8_0.gguf", "Qwen", 1.89), + + CODE_QWEN_2_5_7B_Q4_K_M(7, 4, "Qwen2.5-Coder-7B-Instruct-GGUF", + "Qwen2.5-Coder-7B-Instruct-Q4_K_M.gguf", "bartowski", 4.68), + CODE_QWEN_2_5_7B_Q6_K(7, 6, "Qwen2.5-Coder-7B-Instruct-GGUF", + "Qwen2.5-Coder-7B-Instruct-Q6_K.gguf", "bartowski", 6.25), + CODE_QWEN_2_5_7B_Q8_0(7, 8, "Qwen2.5-Coder-7B-Instruct-GGUF", + "Qwen2.5-Coder-7B-Instruct-Q8_0.gguf", "bartowski", 8.1), + STABLE_CODE_3B_Q3_K_M(SC3, 3, "stable-code-instruct-3b-Q3_K_M.gguf", 1.39), STABLE_CODE_3B_Q4_K_M(SC3, 4, "stable-code-instruct-3b-Q4_K_M.gguf", 1.71), STABLE_CODE_3B_Q5_K_M(SC3, 5, "stable-code-instruct-3b-Q5_K_M.gguf", 1.99), diff --git a/src/main/java/ee/carlrobert/codegpt/completions/llama/LlamaModel.java b/src/main/java/ee/carlrobert/codegpt/completions/llama/LlamaModel.java index 980237e5..e7e4da00 100644 --- a/src/main/java/ee/carlrobert/codegpt/completions/llama/LlamaModel.java +++ b/src/main/java/ee/carlrobert/codegpt/completions/llama/LlamaModel.java @@ -170,6 +170,23 @@ public enum LlamaModel { HuggingFaceModel.CODE_QWEN_1_5_7B_Q4_K_M, HuggingFaceModel.CODE_QWEN_1_5_7B_Q5_K_M, HuggingFaceModel.CODE_QWEN_1_5_7B_Q6_K)), + CODE_QWEN2_5_CODER( + "CodeQwen2.5 Coder", """ + Qwen2.5-Coder is the latest series of Code-Specific Qwen large language models (formerly known as CodeQwen).\ + It brings the following improvements upon CodeQwen1.5: + + - Significantly improvements in code generation, code reasoning and code fixing. Base on the strong Qwen2.5, we scale up the training tokens into 5.5 trillion including source code, text-code grounding, Synthetic data, etc. + - A more comprehensive foundation for real-world applications such as Code Agents. Not only enhancing coding capabilities but also maintaining its strengths in mathematics and general competencies. + - Long-context Support up to 128K tokens. + """, + PromptTemplate.CODE_QWEN, + InfillPromptTemplate.CODE_QWEN_2_5, + List.of( + HuggingFaceModel.CODE_QWEN_2_5_1_5B_Q6_K, + HuggingFaceModel.CODE_QWEN_2_5_1_5B_Q8_0, + HuggingFaceModel.CODE_QWEN_2_5_7B_Q4_K_M, + HuggingFaceModel.CODE_QWEN_2_5_7B_Q6_K, + HuggingFaceModel.CODE_QWEN_2_5_7B_Q8_0)), STABLE_CODE( "Stable Code Instruct", """ stable-code-instruct-3b is a 2.7B billion parameter decoder-only language model tuned from \ diff --git a/src/main/java/ee/carlrobert/codegpt/completions/llama/PromptTemplate.java b/src/main/java/ee/carlrobert/codegpt/completions/llama/PromptTemplate.java index 24fe7789..7bfa5a25 100644 --- a/src/main/java/ee/carlrobert/codegpt/completions/llama/PromptTemplate.java +++ b/src/main/java/ee/carlrobert/codegpt/completions/llama/PromptTemplate.java @@ -162,7 +162,7 @@ public enum PromptTemplate { .toString(); } }, - CODE_QWEN("CodeQwen1.5", List.of("<|endoftext|>")) { + CODE_QWEN("CodeQwen", List.of("<|endoftext|>")) { @Override public String buildPrompt(String systemPrompt, String userPrompt, List history) { StringBuilder prompt = new StringBuilder(); diff --git a/src/main/java/ee/carlrobert/codegpt/settings/service/llama/LlamaSettingsState.java b/src/main/java/ee/carlrobert/codegpt/settings/service/llama/LlamaSettingsState.java index 933632fc..68164ff5 100644 --- a/src/main/java/ee/carlrobert/codegpt/settings/service/llama/LlamaSettingsState.java +++ b/src/main/java/ee/carlrobert/codegpt/settings/service/llama/LlamaSettingsState.java @@ -13,7 +13,7 @@ public class LlamaSettingsState { private boolean runLocalServer = SystemInfoRt.isUnix; private boolean useCustomModel; private String customLlamaModelPath = ""; - private HuggingFaceModel huggingFaceModel = HuggingFaceModel.CODE_LLAMA_7B_Q4; + private HuggingFaceModel huggingFaceModel = HuggingFaceModel.CODE_QWEN_2_5_1_5B_Q8_0; private PromptTemplate localModelPromptTemplate = PromptTemplate.LLAMA; private PromptTemplate remoteModelPromptTemplate = PromptTemplate.LLAMA; private InfillPromptTemplate localModelInfillPromptTemplate = InfillPromptTemplate.CODE_LLAMA; diff --git a/src/main/kotlin/ee/carlrobert/codegpt/codecompletions/CodeCompletionService.kt b/src/main/kotlin/ee/carlrobert/codegpt/codecompletions/CodeCompletionService.kt index ede79420..bf1cf06d 100644 --- a/src/main/kotlin/ee/carlrobert/codegpt/codecompletions/CodeCompletionService.kt +++ b/src/main/kotlin/ee/carlrobert/codegpt/codecompletions/CodeCompletionService.kt @@ -8,6 +8,7 @@ import ee.carlrobert.codegpt.codecompletions.CodeCompletionRequestFactory.buildL import ee.carlrobert.codegpt.codecompletions.CodeCompletionRequestFactory.buildOllamaRequest import ee.carlrobert.codegpt.codecompletions.CodeCompletionRequestFactory.buildOpenAIRequest import ee.carlrobert.codegpt.completions.CompletionClientProvider +import ee.carlrobert.codegpt.completions.llama.LlamaModel import ee.carlrobert.codegpt.settings.GeneralSettings import ee.carlrobert.codegpt.settings.service.ServiceType import ee.carlrobert.codegpt.settings.service.ServiceType.* @@ -34,7 +35,7 @@ class CodeCompletionService { .body .getOrDefault("model", null) as String - LLAMA_CPP -> "LlamaSettings.getCurrentState()." + LLAMA_CPP -> LlamaModel.findByHuggingFaceModel(LlamaSettings.getCurrentState().huggingFaceModel).label OLLAMA -> service().state.model else -> null } diff --git a/src/main/kotlin/ee/carlrobert/codegpt/codecompletions/InfillPromptTemplate.kt b/src/main/kotlin/ee/carlrobert/codegpt/codecompletions/InfillPromptTemplate.kt index dbdd2860..a7d96699 100644 --- a/src/main/kotlin/ee/carlrobert/codegpt/codecompletions/InfillPromptTemplate.kt +++ b/src/main/kotlin/ee/carlrobert/codegpt/codecompletions/InfillPromptTemplate.kt @@ -50,6 +50,23 @@ enum class InfillPromptTemplate(val label: String, val stopTokens: List? } } }, + CODE_QWEN_2_5("CodeQwen2.5", listOf()) { + override fun buildPrompt(infillDetails: InfillRequest): String { + val infillPrompt = + "<|fim_prefix|> ${infillDetails.prefix} <|fim_suffix|>${infillDetails.suffix} <|fim_middle|>" + return if (infillDetails.context == null || infillDetails.context.contextElements.isEmpty()) { + infillPrompt + } else { + "<|repo_name|>${infillDetails.context.getRepoName()}\n" + + infillDetails.context.contextElements.map { + "<|file_sep|>${it.filePath()} \n" + + it.text() + }.joinToString("") { it + "\n" } + + "<|file_sep|>${infillDetails.context.enclosingElement.filePath()} \n" + + infillPrompt + } + } + }, STABILITY("Stability AI", listOf("<|endoftext|>")) { override fun buildPrompt(infillDetails: InfillRequest): String { val infillPrompt =