Files
lm-launcher/src/de/extio/lm_launcher/Model.java

98 lines
2.6 KiB
Java

package de.extio.lm_launcher;
import java.math.BigDecimal;
record Model(String path, int contextSize, int maxContextSize, int gpuLayers, int threads, Double temperature, Double topP,
Integer topK, Double minP, String promptTemplate, long ctime) {
static final double DEFAULT_TEMPERATURE = 0.8d;
static final double DEFAULT_TOP_P = 0.95d;
static final int DEFAULT_TOP_K = 40;
static final double DEFAULT_MIN_P = 0.05d;
static final double MIN_TEMPERATURE = 0d;
static final double MAX_TEMPERATURE = 2d;
static final double MIN_TOP_P = 0d;
static final double MAX_TOP_P = 1d;
static final int MIN_TOP_K = 0;
static final int MAX_TOP_K = 250;
static final double MIN_MIN_P = 0d;
static final double MAX_MIN_P = 1d;
public Model {
maxContextSize = Math.max(Math.max(1, maxContextSize), Math.max(1, contextSize));
contextSize = clampInt(contextSize, 1, maxContextSize);
gpuLayers = Math.max(0, gpuLayers);
threads = Math.max(0, threads);
temperature = sanitizeDouble(temperature, DEFAULT_TEMPERATURE, MIN_TEMPERATURE, MAX_TEMPERATURE);
topP = sanitizeDouble(topP, DEFAULT_TOP_P, MIN_TOP_P, MAX_TOP_P);
topK = sanitizeInt(topK, DEFAULT_TOP_K, MIN_TOP_K, MAX_TOP_K);
minP = sanitizeDouble(minP, DEFAULT_MIN_P, MIN_MIN_P, MAX_MIN_P);
promptTemplate = promptTemplate == null ? "" : promptTemplate;
}
double temperatureValue() {
return this.temperature;
}
double topPValue() {
return this.topP;
}
int topKValue() {
return this.topK;
}
double minPValue() {
return this.minP;
}
String temperatureDisplay() {
return formatDecimal(this.temperatureValue());
}
String topPDisplay() {
return formatDecimal(this.topPValue());
}
String topKDisplay() {
return String.valueOf(this.topKValue());
}
String minPDisplay() {
return formatDecimal(this.minPValue());
}
private static Double sanitizeDouble(final Double value, final double defaultValue, final double minValue, final double maxValue) {
if (value == null || value.isNaN() || value.isInfinite()) {
return defaultValue;
}
return Math.max(minValue, Math.min(maxValue, value));
}
private static Integer sanitizeInt(final Integer value, final int defaultValue, final int minValue, final int maxValue) {
if (value == null) {
return defaultValue;
}
return clampInt(value, minValue, maxValue);
}
private static int clampInt(final int value, final int minValue, final int maxValue) {
return Math.max(minValue, Math.min(maxValue, value));
}
static String formatDecimal(final double value) {
return BigDecimal.valueOf(value).stripTrailingZeros().toPlainString();
}
}