Preparing for production #8

Merged
niat8586 merged 12 commits from develop into main 2025-02-03 11:29:15 +01:00
8 changed files with 70 additions and 18 deletions
Showing only changes of commit 2e680f2bd8 - Show all commits

6
.gitignore vendored
View File

@ -31,3 +31,9 @@ build/
### VS Code ### ### VS Code ###
.vscode/ .vscode/
### Whisper Models ###
whisper-models/
### Seshat stuff ###
files/

View File

@ -4,9 +4,14 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner; import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import se.su.dsv.seshat.services.JobProcessorService; import se.su.dsv.seshat.services.JobProcessorService;
import se.su.dsv.seshat.services.WhisperProperties;
@SpringBootApplication @SpringBootApplication
@EnableConfigurationProperties
@ConfigurationPropertiesScan
public class Application implements CommandLineRunner { public class Application implements CommandLineRunner {
@Autowired @Autowired

View File

@ -23,6 +23,8 @@ import se.su.dsv.seshat.services.UserService;
import java.io.File; import java.io.File;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -64,7 +66,19 @@ public class FileController {
})); }));
model.addAttribute("filesByDirectory", filesByDirectory); Map<FileMetadata, List<FileMetadata>> sortedFilesByDirectory = filesByDirectory.entrySet().stream()
.sorted(Map.Entry.comparingByKey(Comparator.comparing(FileMetadata::getUploadedAt).reversed()))
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(e1, e2) -> {
e1.addAll(e2);
return e1;
},
LinkedHashMap::new
));
model.addAttribute("filesByDirectory", sortedFilesByDirectory);
model.addAttribute("statuses", statuses); model.addAttribute("statuses", statuses);
return "file-management"; return "file-management";

View File

@ -8,11 +8,8 @@ import org.springframework.web.bind.annotation.GetMapping;
public class LandingController { public class LandingController {
@GetMapping("/") @GetMapping("/")
public String showHomePage(Authentication authentication) { public String showHomePage() {
if (authentication != null) { return "redirect:/files/manage";
return "redirect:/files/manage";
}
return "redirect:/login";
} }
} }

View File

@ -11,14 +11,22 @@ import java.io.IOException;
public class Transcriber { public class Transcriber {
private static final Logger logger = LoggerFactory.getLogger(Transcriber.class); private static final Logger logger = LoggerFactory.getLogger(Transcriber.class);
private static final String MODEL_PATH = System.getProperty("user.home") + "/playground/whisper.cpp/models"; private String modelPath;
private static final String WHISPER_WORKING_DIRECTORY = System.getProperty("user.home") + "/git/python-whisper/"; private String selectedModel;
private String workingDirectory;
ProcessBuilder startVirtualEnv;
private String selectedDevice;
String[] activateVirtualEnv = {"/bin/bash", "-c", "source activate"}; public Transcriber(WhisperProperties whisperProperties) {
ProcessBuilder startVirtualEnv = new ProcessBuilder(activateVirtualEnv); modelPath = whisperProperties.modelPath();
selectedModel = whisperProperties.selectedModel();
startVirtualEnv = new ProcessBuilder(whisperProperties.activateVirtualEnvCommand());
workingDirectory = whisperProperties.workingDirectory();
selectedDevice = whisperProperties.selectedDevice();
}
private void setStartVirtualEnv() { private void setStartVirtualEnv() {
startVirtualEnv.directory(new File(WHISPER_WORKING_DIRECTORY + "env/bin/")); startVirtualEnv.directory(new File(workingDirectory + "/env/bin/"));
startVirtualEnv.inheritIO(); startVirtualEnv.inheritIO();
try { try {
Process p = startVirtualEnv.start(); Process p = startVirtualEnv.start();
@ -33,9 +41,13 @@ public class Transcriber {
StringBuilder whisperCommandOptions = new StringBuilder("env/bin/whisper ") StringBuilder whisperCommandOptions = new StringBuilder("env/bin/whisper ")
.append(inputFilePath) .append(inputFilePath)
.append(" --model_dir ") .append(" --model_dir ")
.append(MODEL_PATH) .append(modelPath)
.append(" --model medium --output_dir ") .append(" --model ")
.append(outputDirectory); .append(selectedModel)
.append(" --output_dir ")
.append(outputDirectory)
.append(" --device ")
.append(selectedDevice);
if(language != null && !language.equalsIgnoreCase("auto")) { if(language != null && !language.equalsIgnoreCase("auto")) {
whisperCommandOptions.append(" --language ") whisperCommandOptions.append(" --language ")
.append(language); .append(language);
@ -44,7 +56,7 @@ public class Transcriber {
String[] whisperCommand = {"/bin/bash", "-c", whisperCommandOptions.toString()}; String[] whisperCommand = {"/bin/bash", "-c", whisperCommandOptions.toString()};
ProcessBuilder transcribeProcess = new ProcessBuilder(whisperCommand); ProcessBuilder transcribeProcess = new ProcessBuilder(whisperCommand);
transcribeProcess.directory(new File(WHISPER_WORKING_DIRECTORY)); transcribeProcess.directory(new File(workingDirectory));
transcribeProcess.inheritIO(); transcribeProcess.inheritIO();
try { try {
Process p = transcribeProcess.start(); Process p = transcribeProcess.start();

View File

@ -0,0 +1,11 @@
package se.su.dsv.seshat.services;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "whisper")
public record WhisperProperties(String modelPath,
String selectedModel,
String workingDirectory,
String selectedDevice,
String[] activateVirtualEnvCommand) {
}

View File

@ -4,10 +4,17 @@ server.port=8181
spring.servlet.multipart.max-file-size=5GB spring.servlet.multipart.max-file-size=5GB
spring.servlet.multipart.max-request-size=5GB spring.servlet.multipart.max-request-size=5GB
app.upload-root=/seshat/uploads app.upload-root=@project.basedir@/files/uploads
app.output-root=/seshat/outputs app.output-root=@project.basedir@/files/outputs
app.onSuccess-homepage=/files/manage app.onSuccess-homepage=/files/manage
# Whisper properties
whisper.activate-virtual-env-command=bash, -c, source activate
whisper.model-path=@project.basedir@/whisper-models
whisper.selected-model=medium
whisper.working-directory=${user.home}/git/python-whisper
whisper.selected-device=cpu
# Database properties (local development) # Database properties (local development)
spring.datasource.url=jdbc:mariadb://localhost:3306/seshat spring.datasource.url=jdbc:mariadb://localhost:3306/seshat
spring.datasource.username=myuser spring.datasource.username=myuser

View File

@ -3,7 +3,7 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>File Management - Seshat App</title> <title>Seshat Auido Transcriber</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css">
<link rel="stylesheet" <link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-icons/1.9.1/font/bootstrap-icons.min.css"> href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-icons/1.9.1/font/bootstrap-icons.min.css">