diff --git a/src/main/java/de/extio/lmlib/client/oai/textcompletion/TextCompletionClient.java b/src/main/java/de/extio/lmlib/client/oai/textcompletion/TextCompletionClient.java index 46c9a52..74800c9 100755 --- a/src/main/java/de/extio/lmlib/client/oai/textcompletion/TextCompletionClient.java +++ b/src/main/java/de/extio/lmlib/client/oai/textcompletion/TextCompletionClient.java @@ -168,7 +168,7 @@ public class TextCompletionClient implements Client, DisposableBean { } if (first && userTurn != null) { - prompt.append(promptStrategy.start(systemTurn != null ? systemTurn.text() : "", "", userTurn.text())); + prompt.append(promptStrategy.start(systemTurn != null ? systemTurn.text() : "", userTurn.text())); userTurn = null; first = false; } diff --git a/src/main/java/de/extio/lmlib/prompt/AlpacaShortPromptStrategy.java b/src/main/java/de/extio/lmlib/prompt/AlpacaShortPromptStrategy.java index 81247fd..953998a 100644 --- a/src/main/java/de/extio/lmlib/prompt/AlpacaShortPromptStrategy.java +++ b/src/main/java/de/extio/lmlib/prompt/AlpacaShortPromptStrategy.java @@ -3,7 +3,7 @@ package de.extio.lmlib.prompt; public class AlpacaShortPromptStrategy implements PromptStrategy { @Override - public StringBuilder start(final String instruction, final String question, final String text) { + public StringBuilder start(final String instruction, final String user) { final StringBuilder prompt = new StringBuilder(); if (! instruction.isEmpty()) { prompt.append("### Instruction:\n"); @@ -11,11 +11,7 @@ public class AlpacaShortPromptStrategy implements PromptStrategy { prompt.append("\n\n"); } prompt.append("### Input:\n"); - prompt.append(question); - if (!question.isEmpty() && !text.isEmpty()) { - prompt.append("\n"); - } - prompt.append(text); + prompt.append(user); prompt.append("\n\n### Response:\n"); return prompt; } diff --git a/src/main/java/de/extio/lmlib/prompt/ChatMLPromptStrategy.java b/src/main/java/de/extio/lmlib/prompt/ChatMLPromptStrategy.java index a35a431..9b99a17 100755 --- a/src/main/java/de/extio/lmlib/prompt/ChatMLPromptStrategy.java +++ b/src/main/java/de/extio/lmlib/prompt/ChatMLPromptStrategy.java @@ -6,7 +6,7 @@ import org.springframework.stereotype.Component; public class ChatMLPromptStrategy implements PromptStrategy { @Override - public StringBuilder start(final String system, final String question, final String text) { + public StringBuilder start(final String system, final String user) { final StringBuilder prompt = new StringBuilder(); prompt.append("<|im_start|>"); if (!system.isEmpty()) { @@ -15,11 +15,7 @@ public class ChatMLPromptStrategy implements PromptStrategy { prompt.append("<|im_end|>\n"); } prompt.append("<|im_start|>user\n"); - prompt.append(question); - if (!question.isEmpty() && !text.isEmpty()) { - prompt.append("\n"); - } - prompt.append(text); + prompt.append(user); prompt.append("<|im_end|>\n<|im_start|>assistant\n"); return prompt; } diff --git a/src/main/java/de/extio/lmlib/prompt/Gemma2PromptStrategy.java b/src/main/java/de/extio/lmlib/prompt/Gemma2PromptStrategy.java index 3503233..8fa1724 100755 --- a/src/main/java/de/extio/lmlib/prompt/Gemma2PromptStrategy.java +++ b/src/main/java/de/extio/lmlib/prompt/Gemma2PromptStrategy.java @@ -2,22 +2,22 @@ package de.extio.lmlib.prompt; import org.springframework.stereotype.Component; +/** + * Works for both Gemma2 and Gemma3 + * @see https://ai.google.dev/gemma/docs/core/prompt-structure + */ @Component public class Gemma2PromptStrategy implements PromptStrategy { @Override - public StringBuilder start(final String system, final String question, final String text) { + public StringBuilder start(final String system, final String user) { final StringBuilder prompt = new StringBuilder(); prompt.append("user\n"); if (!system.isEmpty()) { prompt.append(system); - prompt.append("\n"); + prompt.append("\n\n"); } - prompt.append(question); - if (!question.isEmpty() && !text.isEmpty()) { - prompt.append("\n"); - } - prompt.append(text); + prompt.append(user); prompt.append("\nmodel\n"); return prompt; } diff --git a/src/main/java/de/extio/lmlib/prompt/Llama3PromptStrategy.java b/src/main/java/de/extio/lmlib/prompt/Llama3PromptStrategy.java index 56fbeeb..5d76b34 100755 --- a/src/main/java/de/extio/lmlib/prompt/Llama3PromptStrategy.java +++ b/src/main/java/de/extio/lmlib/prompt/Llama3PromptStrategy.java @@ -9,7 +9,7 @@ import org.springframework.stereotype.Component; public class Llama3PromptStrategy implements PromptStrategy { @Override - public StringBuilder start(final String system, final String question, final String text) { + public StringBuilder start(final String system, final String user) { final StringBuilder prompt = new StringBuilder(); prompt.append("<|begin_of_text|>"); if (!system.isEmpty()) { @@ -18,11 +18,7 @@ public class Llama3PromptStrategy implements PromptStrategy { prompt.append("<|eot_id|>"); } prompt.append("<|start_header_id|>user<|end_header_id|>\n\n"); - prompt.append(question); - if (!question.isEmpty() && !text.isEmpty()) { - prompt.append("\n\n"); - } - prompt.append(text); + prompt.append(user); prompt.append("<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n"); return prompt; diff --git a/src/main/java/de/extio/lmlib/prompt/Llama4PromptStrategy.java b/src/main/java/de/extio/lmlib/prompt/Llama4PromptStrategy.java index b8dd4d5..1e08bf5 100644 --- a/src/main/java/de/extio/lmlib/prompt/Llama4PromptStrategy.java +++ b/src/main/java/de/extio/lmlib/prompt/Llama4PromptStrategy.java @@ -3,13 +3,13 @@ package de.extio.lmlib.prompt; import org.springframework.stereotype.Component; /** - * @see https://llama.meta.com/docs/model-cards-and-prompt-formats/meta-llama-3 + * @see https://www.llama.com/docs/model-cards-and-prompt-formats/llama4/ */ @Component public class Llama4PromptStrategy implements PromptStrategy { @Override - public StringBuilder start(final String system, final String question, final String text) { + public StringBuilder start(final String system, final String user) { final StringBuilder prompt = new StringBuilder(); prompt.append("<|begin_of_text|>"); if (!system.isEmpty()) { @@ -18,11 +18,7 @@ public class Llama4PromptStrategy implements PromptStrategy { prompt.append("<|eot|>"); } prompt.append("<|header_start|>user<|header_end|>\n\n"); - prompt.append(question); - if (!question.isEmpty() && !text.isEmpty()) { - prompt.append("\n\n"); - } - prompt.append(text); + prompt.append(user); prompt.append("<|eot|><|header_start|>assistant<|header_end|>\n"); return prompt; diff --git a/src/main/java/de/extio/lmlib/prompt/MistralNemoPromptStrategy.java b/src/main/java/de/extio/lmlib/prompt/MistralNemoPromptStrategy.java index ea72c8f..631bef3 100644 --- a/src/main/java/de/extio/lmlib/prompt/MistralNemoPromptStrategy.java +++ b/src/main/java/de/extio/lmlib/prompt/MistralNemoPromptStrategy.java @@ -6,20 +6,14 @@ import org.springframework.stereotype.Component; public class MistralNemoPromptStrategy implements PromptStrategy { @Override - public StringBuilder start(final String instruction, final String question, final String text) { + public StringBuilder start(final String instruction, final String user) { final StringBuilder prompt = new StringBuilder(); prompt.append("[INST]"); if (! instruction.isEmpty()) { prompt.append(instruction); prompt.append("\n"); } - if (!question.isEmpty() || !text.isEmpty()) { - prompt.append(question); - if (!question.isEmpty() && !text.isEmpty()) { - prompt.append("\n"); - } - prompt.append(text); - } + prompt.append(user); prompt.append("[/INST]"); return prompt; } diff --git a/src/main/java/de/extio/lmlib/prompt/MistralPromptStrategy.java b/src/main/java/de/extio/lmlib/prompt/MistralPromptStrategy.java index 30a2a84..3571ffb 100755 --- a/src/main/java/de/extio/lmlib/prompt/MistralPromptStrategy.java +++ b/src/main/java/de/extio/lmlib/prompt/MistralPromptStrategy.java @@ -6,18 +6,14 @@ import org.springframework.stereotype.Component; public class MistralPromptStrategy implements PromptStrategy { @Override - public StringBuilder start(final String instruction, final String question, final String text) { + public StringBuilder start(final String instruction, final String user) { final StringBuilder prompt = new StringBuilder(); prompt.append("[INST]"); prompt.append(instruction); - if (!instruction.isEmpty() && !question.isEmpty()) { + if (!instruction.isEmpty() && !user.isEmpty()) { prompt.append("\n"); } - prompt.append(question); - if ((!instruction.isEmpty() || !question.isEmpty()) && !text.isEmpty()) { - prompt.append("\n"); - } - prompt.append(text); + prompt.append(user); prompt.append(" [/INST]"); return prompt; } diff --git a/src/main/java/de/extio/lmlib/prompt/Phi3PromptStrategy.java b/src/main/java/de/extio/lmlib/prompt/Phi3PromptStrategy.java index 0116132..0a7d17f 100755 --- a/src/main/java/de/extio/lmlib/prompt/Phi3PromptStrategy.java +++ b/src/main/java/de/extio/lmlib/prompt/Phi3PromptStrategy.java @@ -6,18 +6,14 @@ import org.springframework.stereotype.Component; public class Phi3PromptStrategy implements PromptStrategy { @Override - public StringBuilder start(final String system, final String question, final String text) { + public StringBuilder start(final String system, final String user) { final StringBuilder prompt = new StringBuilder(); prompt.append("<|user|>\n"); prompt.append(system); if (!system.isEmpty()) { prompt.append("\n"); } - prompt.append(question); - if (!question.isEmpty() && !text.isEmpty()) { - prompt.append("\n"); - } - prompt.append(text); + prompt.append(user); prompt.append(" <|end|>\n<|assistant|>"); return prompt; } diff --git a/src/main/java/de/extio/lmlib/prompt/Phi4PromptStrategy.java b/src/main/java/de/extio/lmlib/prompt/Phi4PromptStrategy.java index 5b64678..248d48d 100644 --- a/src/main/java/de/extio/lmlib/prompt/Phi4PromptStrategy.java +++ b/src/main/java/de/extio/lmlib/prompt/Phi4PromptStrategy.java @@ -6,7 +6,7 @@ import org.springframework.stereotype.Component; public class Phi4PromptStrategy implements PromptStrategy { @Override - public StringBuilder start(final String system, final String question, final String text) { + public StringBuilder start(final String system, final String user) { final StringBuilder prompt = new StringBuilder(); if (! system.isEmpty()) { prompt.append("<|im_start|>system<|im_sep|>\n"); @@ -14,11 +14,7 @@ public class Phi4PromptStrategy implements PromptStrategy { prompt.append("<|im_end|>\n"); } prompt.append("<|im_start|>user<|im_sep|>\n"); - prompt.append(question); - if (!question.isEmpty() && !text.isEmpty()) { - prompt.append("\n"); - } - prompt.append(text); + prompt.append(user); prompt.append("<|im_end|>\n<|im_start|>assistant<|im_sep|>"); return prompt; } diff --git a/src/main/java/de/extio/lmlib/prompt/PromptStrategy.java b/src/main/java/de/extio/lmlib/prompt/PromptStrategy.java index 98ad5b5..db0c9cf 100755 --- a/src/main/java/de/extio/lmlib/prompt/PromptStrategy.java +++ b/src/main/java/de/extio/lmlib/prompt/PromptStrategy.java @@ -4,7 +4,7 @@ public interface PromptStrategy { String getPromptName(); - StringBuilder start(String system, String question, String text); + StringBuilder start(String system, String user); void continue_(StringBuilder prompt, String assistant); diff --git a/src/main/java/de/extio/lmlib/prompt/VicunaPromptStrategy.java b/src/main/java/de/extio/lmlib/prompt/VicunaPromptStrategy.java index e498b05..2362a7a 100755 --- a/src/main/java/de/extio/lmlib/prompt/VicunaPromptStrategy.java +++ b/src/main/java/de/extio/lmlib/prompt/VicunaPromptStrategy.java @@ -6,16 +6,15 @@ import org.springframework.stereotype.Component; public class VicunaPromptStrategy implements PromptStrategy { @Override - public StringBuilder start(final String system, final String question, final String text) { + public StringBuilder start(final String system, final String user) { final StringBuilder prompt = new StringBuilder(); - prompt.append(system); - prompt.append(" USER: "); - prompt.append(question); - if (!question.isEmpty() && !text.isEmpty()) { + if (system.isEmpty()) { + prompt.append(system); prompt.append("\n"); } - prompt.append(text); - prompt.append(" ASSISTANT:"); + prompt.append("USER: "); + prompt.append(user); + prompt.append("\nASSISTANT:"); return prompt; } @@ -30,7 +29,7 @@ public class VicunaPromptStrategy implements PromptStrategy { prompt.append(assistant); prompt.append("USER: "); prompt.append(user); - prompt.append(" ASSISTANT:"); + prompt.append("\nASSISTANT:"); } @Override