From: Svjatoslav Agejenko
Date: Sun, 15 Jun 2025 09:44:19 +0000 (+0300)
Subject: Fix JavaDoc. Task priority system. Better precision for computing AI tasks.
X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=commitdiff_plain;h=176cc2201871d0f87fab75b023acb2e0df47e8bc;p=alyverkko-cli.git
Fix JavaDoc. Task priority system. Better precision for computing AI tasks.
---
diff --git a/src/main/java/eu/svjatoslav/alyverkko_cli/AiTask.java b/src/main/java/eu/svjatoslav/alyverkko_cli/AiTask.java
index 06bbc74..8df6bd7 100644
--- a/src/main/java/eu/svjatoslav/alyverkko_cli/AiTask.java
+++ b/src/main/java/eu/svjatoslav/alyverkko_cli/AiTask.java
@@ -10,7 +10,7 @@ import static java.lang.String.join;
/**
* Executes AI inference tasks through llama.cpp CLI. This class handles the complete workflow
- * from prompt construction to response formatting, including temporary file management and process execution.
+ * from prompt construction to response formatting, including temporary file management and process execution.
* Key processing steps:
*
* - Build standardized input prompt
@@ -19,9 +19,9 @@ import static java.lang.String.join;
* - Capture and filter output
* - Perform cleanup operations
*
- *
+ *
* Temperature settings, context size, and thread counts are all derived from the current configuration.
- * The response is formatted to match org-mode conventions while preserving original conversation structure.
+ * The response is formatted to match org-mode conventions while preserving original conversation structure.
*/
public class AiTask {
@@ -246,15 +246,14 @@ public class AiTask {
"--dry-multiplier 0.5",
"--presence-penalty 0.1",
"--mirostat 0",
- "--samplers 'top_k;top_p;min_p;temperature;dry;typ_p;xtc'",
- "--cache-type-k q8_0",
- "--cache-type-v q8_0",
+ // "--cache-type-k q8_0",
+ // "--cache-type-v q8_0",
"--no-display-prompt",
"--no-warmup",
"--flash-attn",
"--temp 0.6",
"--ctx-size " + mailQuery.model.contextSizeTokens,
- "--batch-size 8",
+ "--batch-size 512",
"--no-conversation",
"-n -1",
"--file " + inputFile
diff --git a/src/main/java/eu/svjatoslav/alyverkko_cli/Command.java b/src/main/java/eu/svjatoslav/alyverkko_cli/Command.java
index fca9e37..01b48b3 100644
--- a/src/main/java/eu/svjatoslav/alyverkko_cli/Command.java
+++ b/src/main/java/eu/svjatoslav/alyverkko_cli/Command.java
@@ -3,15 +3,15 @@ package eu.svjatoslav.alyverkko_cli;
import java.io.IOException;
/**
- * Base interface for all subcommands in the Ãlyverkko CLI. Each command must define its name and execution logic.
+ * Base interface for all subcommands in the Ãlyverkko CLI. Each command must define its name and execution logic.
*
Commands typically:
*
* - Parse their own specific arguments
* - Access the global configuration
* - Handle I/O operations
*
- *
- * Commands should be stateless and self-contained, using the configuration object for persistent data when needed.
+ *
+ * Commands should be stateless and self-contained, using the configuration object for persistent data when needed.
*/
public interface Command {
diff --git a/src/main/java/eu/svjatoslav/alyverkko_cli/Utils.java b/src/main/java/eu/svjatoslav/alyverkko_cli/Utils.java
index 4e0c94d..87e8531 100644
--- a/src/main/java/eu/svjatoslav/alyverkko_cli/Utils.java
+++ b/src/main/java/eu/svjatoslav/alyverkko_cli/Utils.java
@@ -2,9 +2,9 @@ package eu.svjatoslav.alyverkko_cli;
/**
*
General utility functions for the Ãlyverkko CLI application. Currently provides ANSI color output capabilities for
- * console messages.
- * Color formatting follows standard ANSI escape sequences, with specific methods for common message types like errors.
- * For future extensions, this class could include additional helper functions for file operations or string processing.
+ * console messages.
+ * Color formatting follows standard ANSI escape sequences, with specific methods for common message types like errors.
+ *
For future extensions, this class could include additional helper functions for file operations or string processing.
*/
public class Utils {
diff --git a/src/main/java/eu/svjatoslav/alyverkko_cli/commands/JoinFilesCommand.java b/src/main/java/eu/svjatoslav/alyverkko_cli/commands/JoinFilesCommand.java
index e74e5a2..622bdc0 100644
--- a/src/main/java/eu/svjatoslav/alyverkko_cli/commands/JoinFilesCommand.java
+++ b/src/main/java/eu/svjatoslav/alyverkko_cli/commands/JoinFilesCommand.java
@@ -30,20 +30,6 @@ import static eu.svjatoslav.alyverkko_cli.configuration.ConfigurationHelper.load
*
*/
-/**
- *
Aggregates files from a source directory into a single file for AI processing.
- * This is particularly useful for creating comprehensive inputs from multiple files
- * matching a specified pattern.
- * Features include:
- *
- * - Recursive file discovery
- * - Glob pattern matching
- * - Header injection for file tracking
- * - Automatic file opening in editor
- *
- *
- * By default, the output file is saved in the mail directory with a .org extension.
- */
public class JoinFilesCommand implements Command {
/**
diff --git a/src/main/java/eu/svjatoslav/alyverkko_cli/commands/ListModelsCommand.java b/src/main/java/eu/svjatoslav/alyverkko_cli/commands/ListModelsCommand.java
index 177a443..2ad1d7c 100644
--- a/src/main/java/eu/svjatoslav/alyverkko_cli/commands/ListModelsCommand.java
+++ b/src/main/java/eu/svjatoslav/alyverkko_cli/commands/ListModelsCommand.java
@@ -11,15 +11,15 @@ import static eu.svjatoslav.alyverkko_cli.configuration.ConfigurationHelper.load
/**
* Displays all available AI models in the configured models directory. This command provides a quick overview of
- * currently available models and their metadata.
+ * currently available models and their metadata.
* The implementation:
*
* - Loads the configuration
* - Instantiates ModelLibrary
* - Prints model details using ModelLibrary's printModels()
*
- *
- * This command is primarily intended for administrative use to verify model availability before running tasks.
+ *
+ * This command is primarily intended for administrative use to verify model availability before running tasks.
*/
public class ListModelsCommand implements Command {
diff --git a/src/main/java/eu/svjatoslav/alyverkko_cli/commands/WizardCommand.java b/src/main/java/eu/svjatoslav/alyverkko_cli/commands/WizardCommand.java
index c9df3ca..f68192f 100644
--- a/src/main/java/eu/svjatoslav/alyverkko_cli/commands/WizardCommand.java
+++ b/src/main/java/eu/svjatoslav/alyverkko_cli/commands/WizardCommand.java
@@ -21,7 +21,7 @@ import static eu.svjatoslav.commons.cli_helper.CLIHelper.*;
/**
*
Interactive configuration wizard that helps users validate and fix their configuration files.
* It performs system checks and offers to fix any missing or invalid paths, discovers new models,
- * and updates the configuration accordingly.
+ * and updates the configuration accordingly.
* Key workflow steps:
*
* - Load or create configuration
@@ -29,9 +29,8 @@ import static eu.svjatoslav.commons.cli_helper.CLIHelper.*;
* - Discover and annotate new models
* - Save updated configuration
*
- *
* When handling split models (.gguf files with part numbering), the wizard automatically
- * detects base models and only adds part-1 files to the configuration.
+ * detects base models and only adds part-1 files to the configuration.
*/
public class WizardCommand implements Command {
diff --git a/src/main/java/eu/svjatoslav/alyverkko_cli/commands/mail_correspondant/MailCorrespondentCommand.java b/src/main/java/eu/svjatoslav/alyverkko_cli/commands/mail_correspondant/MailCorrespondentCommand.java
index cb71e41..3956628 100644
--- a/src/main/java/eu/svjatoslav/alyverkko_cli/commands/mail_correspondant/MailCorrespondentCommand.java
+++ b/src/main/java/eu/svjatoslav/alyverkko_cli/commands/mail_correspondant/MailCorrespondentCommand.java
@@ -1,6 +1,7 @@
package eu.svjatoslav.alyverkko_cli.commands.mail_correspondant;
import eu.svjatoslav.alyverkko_cli.*;
+import eu.svjatoslav.alyverkko_cli.configuration.ConfigurationHelper;
import eu.svjatoslav.alyverkko_cli.model.Model;
import eu.svjatoslav.alyverkko_cli.model.ModelLibrary;
import eu.svjatoslav.commons.cli_helper.parameter_parser.Parser;
@@ -11,34 +12,27 @@ import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.nio.file.*;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Optional;
+import java.util.*;
import static eu.svjatoslav.alyverkko_cli.Main.configuration;
-import static eu.svjatoslav.alyverkko_cli.configuration.ConfigurationHelper.getConfigurationFile;
-import static eu.svjatoslav.alyverkko_cli.configuration.ConfigurationHelper.loadConfiguration;
import static eu.svjatoslav.commons.file.IOHelper.getFileContentsAsString;
import static eu.svjatoslav.commons.file.IOHelper.saveToFile;
import static java.nio.file.StandardWatchEventKinds.ENTRY_CREATE;
import static java.nio.file.StandardWatchEventKinds.ENTRY_MODIFY;
+
/**
- * Monitors a designated mail directory for text files containing "TOCOMPUTE:" markers.
- * When new or modified files are detected, it processes them with appropriate AI models
- * and appends the results using a standardized format.
- * The processing pipeline includes:
- *
- * - Initial scan of existing files
- * - WatchService registration for real-time monitoring
- * - Query construction from file metadata
- * - AI response formatting and appending
- *
- *
- * This implementation uses a sleep delay (1 second) after detecting file changes to allow complete writes before
- * processing. The response format follows org-mode conventions for easy reading and further processing.
+ * The MailCorrespondentCommand continuously monitors a specified mail
+ * directory for new or modified text files, checks if they have a
+ * "TOCOMPUTE:" marker, and if so, adds them to a priority queue to be
+ * processed in priority order. Once processed, results are appended to
+ * the same file.
+ *
+ * Usage:
+ *
+ * alyverkko-cli mail
+ *
*/
-
public class MailCorrespondentCommand implements Command {
/**
@@ -69,6 +63,23 @@ public class MailCorrespondentCommand implements Command {
*/
File mailDir;
+ /**
+ * Priority queue of tasks to process, sorted by priority and a
+ * random tiebreaker.
+ */
+ private final PriorityQueue taskQueue;
+
+ public MailCorrespondentCommand() {
+ Comparator comparator = (a, b) -> {
+ int priorityCompare = Integer.compare(b.priority, a.priority);
+ if (priorityCompare != 0) {
+ return priorityCompare;
+ }
+ return a.tiebreaker.compareTo(b.tiebreaker);
+ };
+ this.taskQueue = new PriorityQueue<>(comparator);
+ }
+
/**
* @return the name of this command, i.e., "mail".
*/
@@ -79,8 +90,8 @@ public class MailCorrespondentCommand implements Command {
/**
* Executes the "mail" command, loading configuration, starting a
- * WatchService on the mail directory, and running an infinite loop
- * that processes newly discovered tasks.
+ * WatchService on the mail directory, adding existing files to the
+ * task queue, and processing tasks in priority order.
*
* @param cliArguments the command-line arguments following the "mail" subcommand.
* @throws IOException if reading/writing tasks fails.
@@ -94,7 +105,7 @@ public class MailCorrespondentCommand implements Command {
return;
}
- configuration = loadConfiguration(getConfigurationFile(configFileOption));
+ configuration = ConfigurationHelper.loadConfiguration(ConfigurationHelper.getConfigurationFile(configFileOption));
if (configuration == null) {
System.out.println("Failed to load configuration file");
return;
@@ -106,27 +117,26 @@ public class MailCorrespondentCommand implements Command {
// Set up directory watch service
initializeFileWatcher();
- // Process any existing files that might already be in the directory
+ // Add all existing mail files to the queue
initialMailScanAndReply();
System.out.println("Mail correspondent running. Press CTRL+c to terminate.");
- // Main loop: watch for file events
+ // Main loop: process tasks from the queue in priority order
while (true) {
- WatchKey key;
- try {
- key = directoryWatcher.take();
- } catch (InterruptedException e) {
- System.out.println("Interrupted while waiting for file system events. Exiting.");
- break;
- }
+ // Process the highest priority task if available
+ if (!taskQueue.isEmpty()) processTask(taskQueue.poll());
- System.out.println("Detected filesystem event.");
+ // Check for filesystem events
+ WatchKey key = directoryWatcher.poll();
// Sleep briefly to allow the file to be fully written
Thread.sleep(1000);
- processDetectedFilesystemEvents(key);
+ if (key != null) {
+ System.out.println("Detected filesystem events in mail directory. Processing ... ");
+ processDetectedFilesystemEvents(key);
+ }
if (!key.reset()) {
break;
@@ -138,17 +148,18 @@ public class MailCorrespondentCommand implements Command {
/**
* Performs an initial scan of existing files in the mail directory,
- * processing those that need AI inference (i.e., that start with "TOCOMPUTE:").
+ * adding those that need processing to the task queue.
*
- * @throws IOException if reading files fails.
- * @throws InterruptedException if the thread is interrupted.
+ * @throws IOException if file scanning fails.
*/
- private void initialMailScanAndReply() throws IOException, InterruptedException {
+ private void initialMailScanAndReply() throws IOException {
File[] files = mailDir.listFiles();
- if (files == null) return;
+ if (files == null) {
+ return;
+ }
for (File file : files) {
- processMailIfNeeded(file);
+ considerFileForQueuing(file.toPath());
}
}
@@ -168,6 +179,11 @@ public class MailCorrespondentCommand implements Command {
return false;
}
+ // Ensure the file exists
+ if (!file.exists()) {
+ return false;
+ }
+
// Check if it's a regular file
if (!file.isFile()) {
return false;
@@ -185,9 +201,13 @@ public class MailCorrespondentCommand implements Command {
* @throws IOException if file reading fails.
*/
private static boolean fileHasToComputeMarker(File file) throws IOException {
+ String firstLine = getFirstLine(file);
+ return firstLine != null && firstLine.startsWith("TOCOMPUTE:");
+ }
+
+ private static String getFirstLine(File file) throws IOException {
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
- String firstLine = reader.readLine();
- return firstLine != null && firstLine.startsWith("TOCOMPUTE:");
+ return reader.readLine();
}
}
@@ -217,7 +237,7 @@ public class MailCorrespondentCommand implements Command {
saveAiResponseToFile(file, mailQuery, aiGeneratedResponse);
}
- private static void saveAiResponseToFile(File file, MailQuery mailQuery, String aiGeneratedResponse) throws IOException {
+ private static void saveAiResponseToFile(File file, MailQuery mailQuery, String aiResponse) throws IOException {
// Build new content
StringBuilder resultFileContent = new StringBuilder();
@@ -235,17 +255,53 @@ public class MailCorrespondentCommand implements Command {
// Append the AI response block
resultFileContent
.append("* ASSISTANT:\n")
- .append(aiGeneratedResponse)
+ .append(aiResponse)
.append("\n");
// Write the combined result back to the same file
saveToFile(file, resultFileContent.toString());
}
+
+ /**
+ * Processes a task by reading the file, building the MailQuery,
+ * running the AI query, and saving the response.
+ *
+ * @param entry the task entry containing the file path and priority.
+ */
+ private void processTask(TaskQueueEntry entry) throws IOException {
+ Path filePath = entry.getFilePath();
+ File file = filePath.toFile();
+
+ if (!isMailProcessingNeeded(file)) {
+ System.out.println("Ignoring file: " + filePath.getFileName() + " (does not need processing now)");
+ return;
+ }
+
+ try {
+ MailQuery mailQuery = buildMailQueryFromFile(file);
+ AiTask aiTask = new AiTask(mailQuery);
+ String aiGeneratedResponse = aiTask.runAiQuery();
+
+ saveAiResponseToFile(file, mailQuery, aiGeneratedResponse);
+ } catch (IOException | InterruptedException | RuntimeException e) {
+ e.printStackTrace();
+ }
+ }
+
+
+ /**
+ * Builds a string for the first line of the output file indicating
+ * that processing is done.
+ *
+ * @param mailQuery the query that was processed.
+ * @return a string for the first line.
+ */
private static String getDoneLine(MailQuery mailQuery) {
- return "DONE: prompt=" + mailQuery.systemPromptName + " model="+ mailQuery.model.alias + " duration=" + getDuration(mailQuery.startTime, mailQuery.endTime) + "\n";
+ return "DONE: prompt=" + mailQuery.systemPromptName + " model=" + mailQuery.model.alias + " duration=" + getDuration(mailQuery.startTime, mailQuery.endTime) + "\n";
}
+
private static String getDuration(long startTime, long endTime) {
long durationMillis = endTime - startTime;
@@ -264,19 +320,22 @@ public class MailCorrespondentCommand implements Command {
return durationHours + "h";
}
+ /**
+ * Builds a MailQuery object from the contents of a file.
+ *
+ * @param file the file to read.
+ * @return the constructed MailQuery.
+ * @throws IOException if reading the file fails.
+ */
private MailQuery buildMailQueryFromFile(File file) throws IOException {
MailQuery result = new MailQuery();
- // Read the mail content
String inputFileContent = getFileContentsAsString(file);
-
- // Split into first line and user prompt
int firstNewLineIndex = inputFileContent.indexOf('\n');
if (firstNewLineIndex == -1) {
- throw new IllegalArgumentException("Input file is only one line long. Content: " + inputFileContent);
+ throw new IllegalArgumentException("Input file is only one line long.");
}
- // The First line should start with "TOCOMPUTE:" and contain settings
String firstLine = inputFileContent.substring(0, firstNewLineIndex);
Map fileProcessingSettings = parseSettings(firstLine);
@@ -295,9 +354,21 @@ public class MailCorrespondentCommand implements Command {
}
result.model = modelOptional.get();
+ // Set priority
+ String priorityStr = fileProcessingSettings.get("priority");
+ result.priority = 0;
+ if (priorityStr != null) {
+ try {
+ result.priority = Integer.parseInt(priorityStr);
+ } catch (NumberFormatException e) {
+ System.err.println("Invalid priority in file: " + priorityStr);
+ }
+ }
+
return result;
}
+
/**
* Parses the "TOCOMPUTE:" line, which should look like:
* TOCOMPUTE: key1=value1 key2=value2 ...
@@ -329,18 +400,18 @@ public class MailCorrespondentCommand implements Command {
}
/**
- * Handles the filesystem events from the WatchService (e.g. file creation
- * or modification), then processes those files if necessary.
+ * Handles the filesystem events from the WatchService (e.g., file
+ * creation or modification), then adds the file to the task queue
+ * if it needs processing.
*
* @param key the watch key containing the events.
- * @throws IOException if file reading/writing fails.
- * @throws InterruptedException if the AI process is interrupted.
+ * @throws IOException if file processing fails.
*/
- private void processDetectedFilesystemEvents(WatchKey key) throws IOException, InterruptedException {
+ private void processDetectedFilesystemEvents(WatchKey key) throws IOException {
for (WatchEvent> event : key.pollEvents()) {
WatchEvent.Kind> kind = event.kind();
- // Skip OVERFLOW event
+ // Skip OVERFLOW events
if (kind == StandardWatchEventKinds.OVERFLOW) {
continue;
}
@@ -349,10 +420,10 @@ public class MailCorrespondentCommand implements Command {
Path filename = ((WatchEvent) event).context();
System.out.println("Event: " + kind + " for file: " + filename);
- // Process the file
+ // Add to task queue if needed
if (kind == ENTRY_CREATE || kind == ENTRY_MODIFY) {
- File file = mailDir.toPath().resolve(filename).toFile();
- processMailIfNeeded(file);
+ Path filePath = mailDir.toPath().resolve(filename);
+ considerFileForQueuing(filePath);
}
}
}
@@ -367,4 +438,66 @@ public class MailCorrespondentCommand implements Command {
this.directoryWatcher = FileSystems.getDefault().newWatchService();
Paths.get(mailDir.getAbsolutePath()).register(directoryWatcher, ENTRY_CREATE, ENTRY_MODIFY);
}
+
+ /**
+ * Adds a file to the task queue if it needs processing.
+ *
+ * @param filePath the path to the file to check.
+ * @throws IOException if reading the first line fails.
+ */
+ private void considerFileForQueuing(Path filePath) throws IOException {
+ File file = filePath.toFile();
+ if (!isMailProcessingNeeded(file)) return;
+
+ String firstLine = getFirstLine(file);
+ Map settings = parseSettings(firstLine);
+ int priority = 0;
+ String priorityStr = settings.get("priority");
+ if (priorityStr != null) {
+ try {
+ priority = Integer.parseInt(priorityStr);
+ } catch (NumberFormatException e) {
+ System.err.println("Invalid priority in file " + filePath.getFileName() + ": " + priorityStr);
+ }
+ }
+ taskQueue.offer(new TaskQueueEntry(filePath, priority));
+ }
+
+ /**
+ * A static nested class representing a task in the queue, with a
+ * priority and a tiebreaker for sorting.
+ */
+ private static class TaskQueueEntry implements Comparable {
+ private final Path filePath;
+ private final int priority;
+ private final String tiebreaker;
+
+ public TaskQueueEntry(Path filePath, int priority) {
+ this.filePath = filePath;
+ this.priority = priority;
+ this.tiebreaker = UUID.randomUUID().toString();
+ }
+
+ public Path getFilePath() {
+ return filePath;
+ }
+
+ public int getPriority() {
+ return priority;
+ }
+
+ public String getTiebreaker() {
+ return tiebreaker;
+ }
+
+ @Override
+ public int compareTo(TaskQueueEntry other) {
+ int priorityCompare = Integer.compare(this.priority, other.priority);
+ if (priorityCompare != 0) {
+ return -priorityCompare; // higher priority first
+ }
+ return this.tiebreaker.compareTo(other.tiebreaker);
+ }
+ }
+
}
diff --git a/src/main/java/eu/svjatoslav/alyverkko_cli/commands/mail_correspondant/MailQuery.java b/src/main/java/eu/svjatoslav/alyverkko_cli/commands/mail_correspondant/MailQuery.java
index 51a3e0b..e17e73d 100644
--- a/src/main/java/eu/svjatoslav/alyverkko_cli/commands/mail_correspondant/MailQuery.java
+++ b/src/main/java/eu/svjatoslav/alyverkko_cli/commands/mail_correspondant/MailQuery.java
@@ -41,6 +41,8 @@ public class MailQuery {
*/
public long endTime;
+ public int priority;
+
/**
* Returns a string containing a summary of the {@link MailQuery} object.
*
diff --git a/src/main/java/eu/svjatoslav/alyverkko_cli/commands/mail_correspondant/package-info.java b/src/main/java/eu/svjatoslav/alyverkko_cli/commands/mail_correspondant/package-info.java
index 3bf376d..7aa5003 100644
--- a/src/main/java/eu/svjatoslav/alyverkko_cli/commands/mail_correspondant/package-info.java
+++ b/src/main/java/eu/svjatoslav/alyverkko_cli/commands/mail_correspondant/package-info.java
@@ -1,13 +1,12 @@
/**
* This subpackage implements the mail-based AI task processing functionality. It watches mail directories for
- * new/modified files with specific markers and processes them using AI models.
+ * new/modified files with specific markers and processes them using AI models.
* Key components:
*
* - File monitoring with WatchService
* - Prompt parsing and execution logic
* - Query object for storing processing parameters
*
- *
*/
package eu.svjatoslav.alyverkko_cli.commands.mail_correspondant;
\ No newline at end of file
diff --git a/src/main/java/eu/svjatoslav/alyverkko_cli/commands/package-info.java b/src/main/java/eu/svjatoslav/alyverkko_cli/commands/package-info.java
index 33f0c48..871a60b 100644
--- a/src/main/java/eu/svjatoslav/alyverkko_cli/commands/package-info.java
+++ b/src/main/java/eu/svjatoslav/alyverkko_cli/commands/package-info.java
@@ -1,6 +1,6 @@
/**
* This package implements all subcommands available in the Ãlyverkko CLI application. Each command class provides a
- * specific functionality through the Command interface.
+ * specific functionality through the Command interface.
* Available commands include:
*
* - Wizard-style configuration builder
@@ -8,7 +8,6 @@
* - File joining for multi-file processing
* - Mail-based AI task processing
*
- *
*/
package eu.svjatoslav.alyverkko_cli.commands;
\ No newline at end of file
diff --git a/src/main/java/eu/svjatoslav/alyverkko_cli/configuration/Configuration.java b/src/main/java/eu/svjatoslav/alyverkko_cli/configuration/Configuration.java
index d25d723..01ed019 100644
--- a/src/main/java/eu/svjatoslav/alyverkko_cli/configuration/Configuration.java
+++ b/src/main/java/eu/svjatoslav/alyverkko_cli/configuration/Configuration.java
@@ -10,16 +10,15 @@ import static eu.svjatoslav.commons.file.IOHelper.getFileContentsAsString;
/**
* Central configuration class storing all application parameters.
- * This class is serialized to YAML format for user editing and persistence.
+ * This class is serialized to YAML format for user editing and persistence.
* Configuration parameters include:
*
* - Model and prompt directories
* - Performance tuning parameters
* - Model-specific configurations
*
- *
* All paths are resolved relative to the user's home directory by default, but can be customized. The class provides
- * direct access to prompt content for AI query construction.
+ * direct access to prompt content for AI query construction.
*/
@Data
public class Configuration {
diff --git a/src/main/java/eu/svjatoslav/alyverkko_cli/configuration/ConfigurationHelper.java b/src/main/java/eu/svjatoslav/alyverkko_cli/configuration/ConfigurationHelper.java
index 7a4a36b..6c39b8a 100644
--- a/src/main/java/eu/svjatoslav/alyverkko_cli/configuration/ConfigurationHelper.java
+++ b/src/main/java/eu/svjatoslav/alyverkko_cli/configuration/ConfigurationHelper.java
@@ -9,14 +9,13 @@ import java.io.IOException;
/**
* Helper class for configuration file operations. Provides methods for loading configurations
- * and determining the default configuration file path in the user's home directory.
+ * and determining the default configuration file path in the user's home directory.
* Key functionality includes:
*
* - Configuration file path resolution
* - YAML deserialization
* - Error handling for missing configurations
*
- *
*/
public class ConfigurationHelper {
diff --git a/src/main/java/eu/svjatoslav/alyverkko_cli/configuration/package-info.java b/src/main/java/eu/svjatoslav/alyverkko_cli/configuration/package-info.java
index 3fb3ba6..fd21d0b 100644
--- a/src/main/java/eu/svjatoslav/alyverkko_cli/configuration/package-info.java
+++ b/src/main/java/eu/svjatoslav/alyverkko_cli/configuration/package-info.java
@@ -1,14 +1,13 @@
/**
* This package handles the configuration system for the Ãlyverkko CLI application.
* It provides classes for storing and retrieving application-wide settings, including
- * model configurations, directory paths, and performance parameters.
+ * model configurations, directory paths, and performance parameters.
* Configuration is stored in YAML format and includes:
*
* - Model directory paths
* - Mail task directories
* - Performance settings (thread counts, temperature)
*
- *
*/
package eu.svjatoslav.alyverkko_cli.configuration;
\ No newline at end of file
diff --git a/src/main/java/eu/svjatoslav/alyverkko_cli/model/Model.java b/src/main/java/eu/svjatoslav/alyverkko_cli/model/Model.java
index 8cf7bfd..b5fcf1a 100644
--- a/src/main/java/eu/svjatoslav/alyverkko_cli/model/Model.java
+++ b/src/main/java/eu/svjatoslav/alyverkko_cli/model/Model.java
@@ -4,7 +4,7 @@ import java.io.File;
/**
* Represents an AI model stored on the filesystem with metadata about its capabilities and identification.
- * This class serves as a lightweight container for model information, enabling quick lookup and validation.
+ * This class serves as a lightweight container for model information, enabling quick lookup and validation.
* Models are typically discovered through configuration files and stored in the ModelLibrary for easy access.
*
Key fields include:
*
@@ -13,7 +13,6 @@ import java.io.File;
* - alias - User-friendly identifier for the model
* - endOfTextMarker - Optional response completion marker
*
- *
*/
public class Model {
@@ -57,14 +56,13 @@ public class Model {
/**
* Prints the model's metadata to standard output in a consistent format. This includes the model's alias,
* filesystem path, and context token capacity. The output format is designed to be both human-readable and
- * machine-parsable when needed.
+ * machine-parsable when needed.
* Typical output:
*
* Model: default
* Path: /path/to/model.gguf
* Context size: 32768
*
- *
*/
public void printModelDetails() {
System.out.println("Model: " + alias);
diff --git a/src/main/java/eu/svjatoslav/alyverkko_cli/model/package-info.java b/src/main/java/eu/svjatoslav/alyverkko_cli/model/package-info.java
index 717d44e..5d8b074 100644
--- a/src/main/java/eu/svjatoslav/alyverkko_cli/model/package-info.java
+++ b/src/main/java/eu/svjatoslav/alyverkko_cli/model/package-info.java
@@ -1,13 +1,12 @@
/**
* This package defines the model management system for the Ãlyverkko CLI.
- * It includes classes for representing AI models and maintaining a library of available models.
+ * It includes classes for representing AI models and maintaining a library of available models.
* Key features:
*
* - Model metadata storage and validation
* - Default model selection and management
* - File system integration for model discovery
*
- *
*/
package eu.svjatoslav.alyverkko_cli.model;
\ No newline at end of file
diff --git a/src/main/java/eu/svjatoslav/alyverkko_cli/package-info.java b/src/main/java/eu/svjatoslav/alyverkko_cli/package-info.java
index 491400e..a3057d0 100644
--- a/src/main/java/eu/svjatoslav/alyverkko_cli/package-info.java
+++ b/src/main/java/eu/svjatoslav/alyverkko_cli/package-info.java
@@ -1,14 +1,14 @@
/**
* This package contains the core components of the Ãlyverkko CLI application, including the main entry point,
* command interfaces, and utility classes. It serves as the central hub for orchestrating subcommands and core
- * application behavior.
+ * application behavior.
* Key responsibilities include:
*
* - Command registration and execution
* - Configuration loading and management
* - Basic utility functions for colored console output
*
- *
+ *
*/
package eu.svjatoslav.alyverkko_cli;
\ No newline at end of file