+ private static String getDoneLine(MailQuery mailQuery) {
+ 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;
+ long durationSeconds = durationMillis / 1000;
+
+ if (durationSeconds < 180){
+ return String.valueOf(durationSeconds) + "s";
+ }
+
+ long durationMinutes = durationSeconds / 60;
+ if (durationMinutes < 180) {
+ return durationMinutes + "m";
+ }
+
+ long durationHours = durationMinutes / 60;
+ return durationHours + "h";
+ }
+
+ 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);
+ }
+
+ // The First line should start with "TOCOMPUTE:" and contain settings
+ String firstLine = inputFileContent.substring(0, firstNewLineIndex);
+ Map<String, String> fileProcessingSettings = parseSettings(firstLine);
+
+ // The rest of the file is the user prompt
+ result.userPrompt = inputFileContent.substring(firstNewLineIndex + 1);
+
+ // Set system prompt
+ result.systemPromptName = fileProcessingSettings.getOrDefault("prompt", "default");
+ result.systemPrompt = configuration.getPromptByName(result.systemPromptName);
+
+ // Set AI model
+ String modelAlias = fileProcessingSettings.getOrDefault("model", "default");
+ Optional<Model> modelOptional = modelLibrary.findModelByAlias(modelAlias);
+ if (!modelOptional.isPresent()) {
+ throw new IllegalArgumentException("Model with alias '" + modelAlias + "' not found.");
+ }
+ result.model = modelOptional.get();
+
+ return result;
+ }
+