Combined unnecessary dual prompt template parameters instruction and text to user

This commit is contained in:
extio-de
2025-06-27 17:17:27 +02:00
parent 4e52c1c4ce
commit 5b5f56fa15
12 changed files with 34 additions and 69 deletions

View File

@@ -168,7 +168,7 @@ public class TextCompletionClient implements Client, DisposableBean {
} }
if (first && userTurn != null) { 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; userTurn = null;
first = false; first = false;
} }

View File

@@ -3,7 +3,7 @@ package de.extio.lmlib.prompt;
public class AlpacaShortPromptStrategy implements PromptStrategy { public class AlpacaShortPromptStrategy implements PromptStrategy {
@Override @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(); final StringBuilder prompt = new StringBuilder();
if (! instruction.isEmpty()) { if (! instruction.isEmpty()) {
prompt.append("### Instruction:\n"); prompt.append("### Instruction:\n");
@@ -11,11 +11,7 @@ public class AlpacaShortPromptStrategy implements PromptStrategy {
prompt.append("\n\n"); prompt.append("\n\n");
} }
prompt.append("### Input:\n"); prompt.append("### Input:\n");
prompt.append(question); prompt.append(user);
if (!question.isEmpty() && !text.isEmpty()) {
prompt.append("\n");
}
prompt.append(text);
prompt.append("\n\n### Response:\n"); prompt.append("\n\n### Response:\n");
return prompt; return prompt;
} }

View File

@@ -6,7 +6,7 @@ import org.springframework.stereotype.Component;
public class ChatMLPromptStrategy implements PromptStrategy { public class ChatMLPromptStrategy implements PromptStrategy {
@Override @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(); final StringBuilder prompt = new StringBuilder();
prompt.append("<|im_start|>"); prompt.append("<|im_start|>");
if (!system.isEmpty()) { if (!system.isEmpty()) {
@@ -15,11 +15,7 @@ public class ChatMLPromptStrategy implements PromptStrategy {
prompt.append("<|im_end|>\n"); prompt.append("<|im_end|>\n");
} }
prompt.append("<|im_start|>user\n"); prompt.append("<|im_start|>user\n");
prompt.append(question); prompt.append(user);
if (!question.isEmpty() && !text.isEmpty()) {
prompt.append("\n");
}
prompt.append(text);
prompt.append("<|im_end|>\n<|im_start|>assistant\n"); prompt.append("<|im_end|>\n<|im_start|>assistant\n");
return prompt; return prompt;
} }

View File

@@ -2,22 +2,22 @@ package de.extio.lmlib.prompt;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
/**
* Works for both Gemma2 and Gemma3
* @see https://ai.google.dev/gemma/docs/core/prompt-structure
*/
@Component @Component
public class Gemma2PromptStrategy implements PromptStrategy { public class Gemma2PromptStrategy implements PromptStrategy {
@Override @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(); final StringBuilder prompt = new StringBuilder();
prompt.append("<start_of_turn>user\n"); prompt.append("<start_of_turn>user\n");
if (!system.isEmpty()) { if (!system.isEmpty()) {
prompt.append(system); prompt.append(system);
prompt.append("\n"); prompt.append("\n\n");
} }
prompt.append(question); prompt.append(user);
if (!question.isEmpty() && !text.isEmpty()) {
prompt.append("\n");
}
prompt.append(text);
prompt.append("<end_of_turn>\n<start_of_turn>model\n"); prompt.append("<end_of_turn>\n<start_of_turn>model\n");
return prompt; return prompt;
} }

View File

@@ -9,7 +9,7 @@ import org.springframework.stereotype.Component;
public class Llama3PromptStrategy implements PromptStrategy { public class Llama3PromptStrategy implements PromptStrategy {
@Override @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(); final StringBuilder prompt = new StringBuilder();
prompt.append("<|begin_of_text|>"); prompt.append("<|begin_of_text|>");
if (!system.isEmpty()) { if (!system.isEmpty()) {
@@ -18,11 +18,7 @@ public class Llama3PromptStrategy implements PromptStrategy {
prompt.append("<|eot_id|>"); prompt.append("<|eot_id|>");
} }
prompt.append("<|start_header_id|>user<|end_header_id|>\n\n"); prompt.append("<|start_header_id|>user<|end_header_id|>\n\n");
prompt.append(question); prompt.append(user);
if (!question.isEmpty() && !text.isEmpty()) {
prompt.append("\n\n");
}
prompt.append(text);
prompt.append("<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n"); prompt.append("<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n");
return prompt; return prompt;

View File

@@ -3,13 +3,13 @@ package de.extio.lmlib.prompt;
import org.springframework.stereotype.Component; 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 @Component
public class Llama4PromptStrategy implements PromptStrategy { public class Llama4PromptStrategy implements PromptStrategy {
@Override @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(); final StringBuilder prompt = new StringBuilder();
prompt.append("<|begin_of_text|>"); prompt.append("<|begin_of_text|>");
if (!system.isEmpty()) { if (!system.isEmpty()) {
@@ -18,11 +18,7 @@ public class Llama4PromptStrategy implements PromptStrategy {
prompt.append("<|eot|>"); prompt.append("<|eot|>");
} }
prompt.append("<|header_start|>user<|header_end|>\n\n"); prompt.append("<|header_start|>user<|header_end|>\n\n");
prompt.append(question); prompt.append(user);
if (!question.isEmpty() && !text.isEmpty()) {
prompt.append("\n\n");
}
prompt.append(text);
prompt.append("<|eot|><|header_start|>assistant<|header_end|>\n"); prompt.append("<|eot|><|header_start|>assistant<|header_end|>\n");
return prompt; return prompt;

View File

@@ -6,20 +6,14 @@ import org.springframework.stereotype.Component;
public class MistralNemoPromptStrategy implements PromptStrategy { public class MistralNemoPromptStrategy implements PromptStrategy {
@Override @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(); final StringBuilder prompt = new StringBuilder();
prompt.append("<s>[INST]"); prompt.append("<s>[INST]");
if (! instruction.isEmpty()) { if (! instruction.isEmpty()) {
prompt.append(instruction); prompt.append(instruction);
prompt.append("\n"); prompt.append("\n");
} }
if (!question.isEmpty() || !text.isEmpty()) { prompt.append(user);
prompt.append(question);
if (!question.isEmpty() && !text.isEmpty()) {
prompt.append("\n");
}
prompt.append(text);
}
prompt.append("[/INST]"); prompt.append("[/INST]");
return prompt; return prompt;
} }

View File

@@ -6,18 +6,14 @@ import org.springframework.stereotype.Component;
public class MistralPromptStrategy implements PromptStrategy { public class MistralPromptStrategy implements PromptStrategy {
@Override @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(); final StringBuilder prompt = new StringBuilder();
prompt.append("<s>[INST]"); prompt.append("<s>[INST]");
prompt.append(instruction); prompt.append(instruction);
if (!instruction.isEmpty() && !question.isEmpty()) { if (!instruction.isEmpty() && !user.isEmpty()) {
prompt.append("\n"); prompt.append("\n");
} }
prompt.append(question); prompt.append(user);
if ((!instruction.isEmpty() || !question.isEmpty()) && !text.isEmpty()) {
prompt.append("\n");
}
prompt.append(text);
prompt.append(" [/INST]"); prompt.append(" [/INST]");
return prompt; return prompt;
} }

View File

@@ -6,18 +6,14 @@ import org.springframework.stereotype.Component;
public class Phi3PromptStrategy implements PromptStrategy { public class Phi3PromptStrategy implements PromptStrategy {
@Override @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(); final StringBuilder prompt = new StringBuilder();
prompt.append("<|user|>\n"); prompt.append("<|user|>\n");
prompt.append(system); prompt.append(system);
if (!system.isEmpty()) { if (!system.isEmpty()) {
prompt.append("\n"); prompt.append("\n");
} }
prompt.append(question); prompt.append(user);
if (!question.isEmpty() && !text.isEmpty()) {
prompt.append("\n");
}
prompt.append(text);
prompt.append(" <|end|>\n<|assistant|>"); prompt.append(" <|end|>\n<|assistant|>");
return prompt; return prompt;
} }

View File

@@ -6,7 +6,7 @@ import org.springframework.stereotype.Component;
public class Phi4PromptStrategy implements PromptStrategy { public class Phi4PromptStrategy implements PromptStrategy {
@Override @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(); final StringBuilder prompt = new StringBuilder();
if (! system.isEmpty()) { if (! system.isEmpty()) {
prompt.append("<|im_start|>system<|im_sep|>\n"); 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_end|>\n");
} }
prompt.append("<|im_start|>user<|im_sep|>\n"); prompt.append("<|im_start|>user<|im_sep|>\n");
prompt.append(question); prompt.append(user);
if (!question.isEmpty() && !text.isEmpty()) {
prompt.append("\n");
}
prompt.append(text);
prompt.append("<|im_end|>\n<|im_start|>assistant<|im_sep|>"); prompt.append("<|im_end|>\n<|im_start|>assistant<|im_sep|>");
return prompt; return prompt;
} }

View File

@@ -4,7 +4,7 @@ public interface PromptStrategy {
String getPromptName(); String getPromptName();
StringBuilder start(String system, String question, String text); StringBuilder start(String system, String user);
void continue_(StringBuilder prompt, String assistant); void continue_(StringBuilder prompt, String assistant);

View File

@@ -6,16 +6,15 @@ import org.springframework.stereotype.Component;
public class VicunaPromptStrategy implements PromptStrategy { public class VicunaPromptStrategy implements PromptStrategy {
@Override @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(); final StringBuilder prompt = new StringBuilder();
prompt.append(system); if (system.isEmpty()) {
prompt.append(" USER: "); prompt.append(system);
prompt.append(question);
if (!question.isEmpty() && !text.isEmpty()) {
prompt.append("\n"); prompt.append("\n");
} }
prompt.append(text); prompt.append("USER: ");
prompt.append(" ASSISTANT:"); prompt.append(user);
prompt.append("\nASSISTANT:");
return prompt; return prompt;
} }
@@ -30,7 +29,7 @@ public class VicunaPromptStrategy implements PromptStrategy {
prompt.append(assistant); prompt.append(assistant);
prompt.append("</s>USER: "); prompt.append("</s>USER: ");
prompt.append(user); prompt.append(user);
prompt.append(" ASSISTANT:"); prompt.append("\nASSISTANT:");
} }
@Override @Override