Preparing for production #8
6
.gitignore
vendored
6
.gitignore
vendored
@ -31,3 +31,9 @@ build/
|
|||||||
|
|
||||||
### VS Code ###
|
### VS Code ###
|
||||||
.vscode/
|
.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.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
|
||||||
|
@ -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";
|
||||||
|
@ -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";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
|
@ -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-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
|
||||||
|
@ -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">
|
||||||
|
Loading…
x
Reference in New Issue
Block a user