Fix arguments containing spaces

This commit is contained in:
extio-de
2026-06-08 09:55:30 +02:00
parent 61f19fdac0
commit a8ca6f3661
2 changed files with 35 additions and 20 deletions

Binary file not shown.

View File

@@ -6,7 +6,6 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -30,14 +29,14 @@ record App(Path path, Path interpreter, @Deprecated List<String> arguments, List
"MIN_P", Model::minPDisplay,
"REASONING_STOP", m -> "... thinking budget exceeded, let's answer now.\n");
String argumentsToString(boolean showAll) {
String argumentsToString(final boolean showAll) {
return this.argumentsToStringByArgs(this.appArguments.stream(), showAll);
}
String argumentsToString(final List<AppArgument> argumentOverrides, boolean showAll) {
String argumentsToString(final List<AppArgument> argumentOverrides, final boolean showAll) {
return this.argumentsToStringByArgs(this.appArguments
.stream()
.map(arg -> argumentOverrides.stream().filter(a -> a.argument().equals(arg.argument())).findFirst().orElse(arg)),
.map(arg -> argumentOverrides.stream().filter(a -> a.argument().equals(arg.argument())).findFirst().orElse(arg)),
showAll);
}
@@ -45,7 +44,7 @@ record App(Path path, Path interpreter, @Deprecated List<String> arguments, List
if (modelPath == null || modelPath.isBlank()) {
return copyArguments(this.appArguments);
}
final AppModelSettings savedSettings = this.findModelSettings(modelPath);
final var savedSettings = this.findModelSettings(modelPath);
if (savedSettings == null) {
return copyArguments(this.appArguments);
}
@@ -56,8 +55,8 @@ record App(Path path, Path interpreter, @Deprecated List<String> arguments, List
if (modelPath == null || modelPath.isBlank()) {
return;
}
final AppModelSettings updatedSettings = new AppModelSettings(modelPath, copyArguments(selectedArguments));
for (int i = 0; i < this.modelSettings.size(); i++) {
final var updatedSettings = new AppModelSettings(modelPath, copyArguments(selectedArguments));
for (var i = 0; i < this.modelSettings.size(); i++) {
if (this.modelSettings.get(i).modelPath().equals(modelPath)) {
this.modelSettings.set(i, updatedSettings);
return;
@@ -66,7 +65,7 @@ record App(Path path, Path interpreter, @Deprecated List<String> arguments, List
this.modelSettings.add(updatedSettings);
}
private String argumentsToStringByArgs(final Stream<AppArgument> args, boolean showAll) {
private String argumentsToStringByArgs(final Stream<AppArgument> args, final boolean showAll) {
return args
.filter(arg -> showAll || (arg.optional() ? arg.default_() : true))
.map(AppArgument::argument)
@@ -82,7 +81,7 @@ record App(Path path, Path interpreter, @Deprecated List<String> arguments, List
for (final AppArgument baseArgument : this.appArguments) {
final int occurrenceIndex = occurrences.getOrDefault(baseArgument.argument(), 0);
occurrences.put(baseArgument.argument(), occurrenceIndex + 1);
final AppArgument savedArgument = nthArgument(savedArguments, baseArgument.argument(), occurrenceIndex);
final var savedArgument = nthArgument(savedArguments, baseArgument.argument(), occurrenceIndex);
mergedArguments.add(savedArgument == null
? new AppArgument(baseArgument.argument(), baseArgument.optional(), baseArgument.default_())
: new AppArgument(baseArgument.argument(), baseArgument.optional(), baseArgument.optional() ? savedArgument.default_() : baseArgument.default_()));
@@ -98,7 +97,7 @@ record App(Path path, Path interpreter, @Deprecated List<String> arguments, List
}
private static AppArgument nthArgument(final List<AppArgument> arguments, final String argument, final int occurrenceIndex) {
int matchIndex = 0;
var matchIndex = 0;
for (final AppArgument candidate : arguments) {
if (!candidate.argument().equals(argument)) {
continue;
@@ -118,25 +117,41 @@ record App(Path path, Path interpreter, @Deprecated List<String> arguments, List
}
void run(final Model model, final List<AppArgument> argumentOverrides) throws IOException, IllegalArgumentException {
String interpreterStr = "";
final List<String> cmdParts = new ArrayList<>();
if (this.interpreter() != null) {
interpreterStr = this.interpreter().toString().concat(" ");
cmdParts.add(this.interpreter().toString());
}
String consoleCmdStr = Data.props.getProperty("console")
.replace("CMD", interpreterStr + this.path().toString() + " " + this.argumentsToString(argumentOverrides, false));
cmdParts.add(this.path().toString());
if (PLACEHOLDERS.keySet().stream().anyMatch(consoleCmdStr::contains)) {
if (model == null) {
throw new IllegalArgumentException("Select a model first");
for (final AppArgument arg_ : this.appArguments) {
final var arg = argumentOverrides.stream().filter(a -> a.argument().equals(arg_.argument())).findFirst().orElseGet(() -> arg_);
if (!arg.optional() || arg.default_()) {
var argReplaced = arg.argument();
if (PLACEHOLDERS.keySet().contains(arg.argument())) {
if (model == null) {
throw new IllegalArgumentException("Select a model first");
}
argReplaced = PLACEHOLDERS.get(arg.argument()).apply(model);
}
cmdParts.add(argReplaced);
}
for (final Entry<String, Function<Model, String>> placeholder : PLACEHOLDERS.entrySet()) {
consoleCmdStr = consoleCmdStr.replace(placeholder.getKey(), placeholder.getValue().apply(model));
}
final List<String> arguments = new ArrayList<>();
for (final var arg : Data.props.getProperty("console").split("\\s+")) {
if ("CMD".equals(arg)) {
arguments.addAll(cmdParts);
}
else {
arguments.add(arg);
}
}
Runtime.getRuntime().exec(
consoleCmdStr.split("\\s+"),
arguments.toArray(new String[0]),
null,
this.path().toAbsolutePath().getParent().toFile());
}