Files
lm-lib/src/main/java/de/extio/lmlib/prompt/GptOssPromptStrategy.java
extio-de d5898e35f5 feat: Add Spring Boot auto-configuration for lm-lib modules
- Introduced auto-configuration classes for profile, client, agent, and prompt modules.
- Updated README to reflect new modular architecture and configuration properties.
- Added selective enabling/disabling of modules via application properties.
- Refactored existing services and strategies to remove unnecessary Spring annotations.
- Enhanced test configurations to utilize auto-configuration.
- Updated META-INF imports to include new auto-configuration classes.
2026-01-05 21:58:12 +01:00

108 lines
2.9 KiB
Java

package de.extio.lmlib.prompt;
public class GptOssPromptStrategy implements PromptStrategy {
private static final String finalMarker = "<|channel|>final<|message|>";
private static final String startMarker = "<|start|>";
private static final String assistantStart = startMarker + "assistant";
private static final String analysisMarker = "<|channel|>analysis<|message|>";
@Override
public StringBuilder start(final String system, final String user) {
final StringBuilder prompt = new StringBuilder();
if (!system.isEmpty()) {
prompt.append("<|start|>system<|message|>");
prompt.append(system);
prompt.append("<|end|>");
}
prompt.append("<|start|>user<|message|>");
prompt.append(user);
prompt.append("<|end|>");
prompt.append(assistantStart);
return prompt;
}
@Override
public void next(final StringBuilder prompt, final String assistant, final String user) {
final String assistantContent = assistant == null ? "" : assistant;
if (assistantContent.startsWith(assistantStart)) {
final int assistantStartLength = assistantStart.length();
if (prompt.length() >= assistantStartLength) {
boolean endsWithAssistantStart = true;
for (int i = 0; i < assistantStartLength; i++) {
if (prompt.charAt(prompt.length() - assistantStartLength + i) != assistantStart.charAt(i)) {
endsWithAssistantStart = false;
break;
}
}
if (endsWithAssistantStart) {
prompt.setLength(prompt.length() - assistantStartLength);
}
}
}
if (assistantContent.contains(finalMarker)) {
prompt.append(assistantContent);
if (!assistantContent.endsWith("<|end|>")) {
prompt.append("<|end|>");
}
}
else {
prompt.append("<|channel|>final<|message|>");
prompt.append(assistantContent);
prompt.append("<|end|>");
}
prompt.append("<|start|>user<|message|>");
prompt.append(user == null ? "" : user);
prompt.append("<|end|>");
prompt.append(assistantStart);
}
@Override
public String removeEOT(final String prompt) {
return prompt.strip().replace("<|end|>", "").replace("<|return|>", "");
}
@Override
public String getPromptName() {
return "gpt-oss";
}
@Override
public String getResponse(final String prompt) {
if (prompt == null) {
return null;
}
final int markerIndex = prompt.indexOf(finalMarker);
if (markerIndex == -1) {
return prompt;
}
final int start = markerIndex + finalMarker.length();
int end = prompt.indexOf(startMarker, start);
if (end == -1) {
end = prompt.length();
}
return prompt.substring(start, end).strip();
}
@Override
public String getReasoning(final String prompt) {
if (prompt == null) {
return null;
}
final int markerIndex = prompt.indexOf(analysisMarker);
if (markerIndex == -1) {
return null;
}
final int start = markerIndex + analysisMarker.length();
int end = prompt.indexOf(startMarker, start);
if (end == -1) {
end = prompt.length();
}
return prompt.substring(start, end).strip();
}
}