Preparing for production #8
6
.gitignore
vendored
6
.gitignore
vendored
@ -31,3 +31,9 @@ build/
|
||||
|
||||
### VS Code ###
|
||||
.vscode/
|
||||
|
||||
### Whisper Models ###
|
||||
whisper-models/
|
||||
|
||||
### Seshat stuff ###
|
||||
files/
|
@ -4,9 +4,14 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.CommandLineRunner;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
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.WhisperProperties;
|
||||
|
||||
@SpringBootApplication
|
||||
@EnableConfigurationProperties
|
||||
@ConfigurationPropertiesScan
|
||||
public class Application implements CommandLineRunner {
|
||||
|
||||
@Autowired
|
||||
|
@ -23,6 +23,8 @@ import se.su.dsv.seshat.services.UserService;
|
||||
|
||||
import java.io.File;
|
||||
import java.time.LocalDate;
|
||||
import java.util.Comparator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
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);
|
||||
|
||||
return "file-management";
|
||||
|
@ -8,11 +8,8 @@ import org.springframework.web.bind.annotation.GetMapping;
|
||||
public class LandingController {
|
||||
|
||||
@GetMapping("/")
|
||||
public String showHomePage(Authentication authentication) {
|
||||
if (authentication != null) {
|
||||
public String showHomePage() {
|
||||
return "redirect:/files/manage";
|
||||
}
|
||||
return "redirect:/login";
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -11,14 +11,22 @@ import java.io.IOException;
|
||||
public class Transcriber {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(Transcriber.class);
|
||||
private static final String MODEL_PATH = System.getProperty("user.home") + "/playground/whisper.cpp/models";
|
||||
private static final String WHISPER_WORKING_DIRECTORY = System.getProperty("user.home") + "/git/python-whisper/";
|
||||
private String modelPath;
|
||||
private String selectedModel;
|
||||
private String workingDirectory;
|
||||
ProcessBuilder startVirtualEnv;
|
||||
private String selectedDevice;
|
||||
|
||||
String[] activateVirtualEnv = {"/bin/bash", "-c", "source activate"};
|
||||
ProcessBuilder startVirtualEnv = new ProcessBuilder(activateVirtualEnv);
|
||||
public Transcriber(WhisperProperties whisperProperties) {
|
||||
modelPath = whisperProperties.modelPath();
|
||||
selectedModel = whisperProperties.selectedModel();
|
||||
startVirtualEnv = new ProcessBuilder(whisperProperties.activateVirtualEnvCommand());
|
||||
workingDirectory = whisperProperties.workingDirectory();
|
||||
selectedDevice = whisperProperties.selectedDevice();
|
||||
}
|
||||
|
||||
private void setStartVirtualEnv() {
|
||||
startVirtualEnv.directory(new File(WHISPER_WORKING_DIRECTORY + "env/bin/"));
|
||||
startVirtualEnv.directory(new File(workingDirectory + "/env/bin/"));
|
||||
startVirtualEnv.inheritIO();
|
||||
try {
|
||||
Process p = startVirtualEnv.start();
|
||||
@ -33,9 +41,13 @@ public class Transcriber {
|
||||
StringBuilder whisperCommandOptions = new StringBuilder("env/bin/whisper ")
|
||||
.append(inputFilePath)
|
||||
.append(" --model_dir ")
|
||||
.append(MODEL_PATH)
|
||||
.append(" --model medium --output_dir ")
|
||||
.append(outputDirectory);
|
||||
.append(modelPath)
|
||||
.append(" --model ")
|
||||
.append(selectedModel)
|
||||
.append(" --output_dir ")
|
||||
.append(outputDirectory)
|
||||
.append(" --device ")
|
||||
.append(selectedDevice);
|
||||
if(language != null && !language.equalsIgnoreCase("auto")) {
|
||||
whisperCommandOptions.append(" --language ")
|
||||
.append(language);
|
||||
@ -44,7 +56,7 @@ public class Transcriber {
|
||||
String[] whisperCommand = {"/bin/bash", "-c", whisperCommandOptions.toString()};
|
||||
ProcessBuilder transcribeProcess = new ProcessBuilder(whisperCommand);
|
||||
|
||||
transcribeProcess.directory(new File(WHISPER_WORKING_DIRECTORY));
|
||||
transcribeProcess.directory(new File(workingDirectory));
|
||||
transcribeProcess.inheritIO();
|
||||
try {
|
||||
Process p = transcribeProcess.start();
|
||||
|
@ -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) {
|
||||
}
|
@ -4,10 +4,17 @@ server.port=8181
|
||||
spring.servlet.multipart.max-file-size=5GB
|
||||
spring.servlet.multipart.max-request-size=5GB
|
||||
|
||||
app.upload-root=/seshat/uploads
|
||||
app.output-root=/seshat/outputs
|
||||
app.upload-root=@project.basedir@/files/uploads
|
||||
app.output-root=@project.basedir@/files/outputs
|
||||
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)
|
||||
spring.datasource.url=jdbc:mariadb://localhost:3306/seshat
|
||||
spring.datasource.username=myuser
|
||||
|
@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<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://cdnjs.cloudflare.com/ajax/libs/bootstrap-icons/1.9.1/font/bootstrap-icons.min.css">
|
||||
|
Loading…
x
Reference in New Issue
Block a user