translation buffer is now displayed in frontend
This commit is contained in:
parent
16461052ed
commit
8d9be88fe6
5 changed files with 36 additions and 8 deletions
|
|
@ -387,10 +387,10 @@ class AudioProcessor:
|
||||||
tokens_to_process.append(additional_token)
|
tokens_to_process.append(additional_token)
|
||||||
if tokens_to_process:
|
if tokens_to_process:
|
||||||
self.translation.insert_tokens(tokens_to_process)
|
self.translation.insert_tokens(tokens_to_process)
|
||||||
translation_validated_segments, translation_buffer = await asyncio.to_thread(self.translation.process)
|
translation_validated_segments, buffer_translation = await asyncio.to_thread(self.translation.process)
|
||||||
async with self.lock:
|
async with self.lock:
|
||||||
self.state.translation_validated_segments = translation_validated_segments
|
self.state.translation_validated_segments = translation_validated_segments
|
||||||
self.state.translation_buffer = translation_buffer
|
self.state.buffer_translation = buffer_translation
|
||||||
self.translation_queue.task_done()
|
self.translation_queue.task_done()
|
||||||
for _ in additional_tokens:
|
for _ in additional_tokens:
|
||||||
self.translation_queue.task_done()
|
self.translation_queue.task_done()
|
||||||
|
|
@ -438,6 +438,12 @@ class AudioProcessor:
|
||||||
|
|
||||||
async with self.lock:
|
async with self.lock:
|
||||||
self.state.end_attributed_speaker = state.end_attributed_speaker
|
self.state.end_attributed_speaker = state.end_attributed_speaker
|
||||||
|
|
||||||
|
buffer_translation_text = ''
|
||||||
|
if state.buffer_translation:
|
||||||
|
raw_buffer_translation = getattr(state.buffer_translation, 'text', state.buffer_translation)
|
||||||
|
if raw_buffer_translation:
|
||||||
|
buffer_translation_text = raw_buffer_translation.strip()
|
||||||
|
|
||||||
response_status = "active_transcription"
|
response_status = "active_transcription"
|
||||||
if not state.tokens and not buffer_transcription and not buffer_diarization:
|
if not state.tokens and not buffer_transcription and not buffer_diarization:
|
||||||
|
|
@ -455,6 +461,7 @@ class AudioProcessor:
|
||||||
lines=lines,
|
lines=lines,
|
||||||
buffer_transcription=buffer_transcription.text.strip(),
|
buffer_transcription=buffer_transcription.text.strip(),
|
||||||
buffer_diarization=buffer_diarization,
|
buffer_diarization=buffer_diarization,
|
||||||
|
buffer_translation=buffer_translation_text,
|
||||||
remaining_time_transcription=state.remaining_time_transcription,
|
remaining_time_transcription=state.remaining_time_transcription,
|
||||||
remaining_time_diarization=state.remaining_time_diarization if self.args.diarization else 0
|
remaining_time_diarization=state.remaining_time_diarization if self.args.diarization else 0
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,6 @@ def format_output(state, silence, args, sep):
|
||||||
disable_punctuation_split = args.disable_punctuation_split
|
disable_punctuation_split = args.disable_punctuation_split
|
||||||
tokens = state.tokens
|
tokens = state.tokens
|
||||||
translation_validated_segments = state.translation_validated_segments # Here we will attribute the speakers only based on the timestamps of the segments
|
translation_validated_segments = state.translation_validated_segments # Here we will attribute the speakers only based on the timestamps of the segments
|
||||||
translation_buffer = state.translation_buffer
|
|
||||||
last_validated_token = state.last_validated_token
|
last_validated_token = state.last_validated_token
|
||||||
|
|
||||||
previous_speaker = 1
|
previous_speaker = 1
|
||||||
|
|
|
||||||
|
|
@ -151,6 +151,7 @@ class FrontData():
|
||||||
lines: list[Line] = field(default_factory=list)
|
lines: list[Line] = field(default_factory=list)
|
||||||
buffer_transcription: str = ''
|
buffer_transcription: str = ''
|
||||||
buffer_diarization: str = ''
|
buffer_diarization: str = ''
|
||||||
|
buffer_translation: str = ''
|
||||||
remaining_time_transcription: float = 0.
|
remaining_time_transcription: float = 0.
|
||||||
remaining_time_diarization: float = 0.
|
remaining_time_diarization: float = 0.
|
||||||
|
|
||||||
|
|
@ -160,6 +161,7 @@ class FrontData():
|
||||||
'lines': [line.to_dict() for line in self.lines if (line.text or line.speaker == -2)],
|
'lines': [line.to_dict() for line in self.lines if (line.text or line.speaker == -2)],
|
||||||
'buffer_transcription': self.buffer_transcription,
|
'buffer_transcription': self.buffer_transcription,
|
||||||
'buffer_diarization': self.buffer_diarization,
|
'buffer_diarization': self.buffer_diarization,
|
||||||
|
'buffer_translation': self.buffer_translation,
|
||||||
'remaining_time_transcription': self.remaining_time_transcription,
|
'remaining_time_transcription': self.remaining_time_transcription,
|
||||||
'remaining_time_diarization': self.remaining_time_diarization,
|
'remaining_time_diarization': self.remaining_time_diarization,
|
||||||
}
|
}
|
||||||
|
|
@ -178,10 +180,10 @@ class State():
|
||||||
last_validated_token: int = 0
|
last_validated_token: int = 0
|
||||||
last_punctuation_index: Optional[int] = None
|
last_punctuation_index: Optional[int] = None
|
||||||
translation_validated_segments: list = field(default_factory=list)
|
translation_validated_segments: list = field(default_factory=list)
|
||||||
translation_buffer: list = field(default_factory=list)
|
buffer_translation: str = field(default_factory=Transcript)
|
||||||
buffer_transcription: str = field(default_factory=Transcript)
|
buffer_transcription: str = field(default_factory=Transcript)
|
||||||
end_buffer: float = 0.0
|
end_buffer: float = 0.0
|
||||||
end_attributed_speaker: float = 0.0
|
end_attributed_speaker: float = 0.0
|
||||||
remaining_time_transcription: float = 0.0
|
remaining_time_transcription: float = 0.0
|
||||||
remaining_time_diarization: float = 0.0
|
remaining_time_diarization: float = 0.0
|
||||||
beg_loop: Optional[int] = None
|
beg_loop: Optional[int] = None
|
||||||
|
|
|
||||||
|
|
@ -490,6 +490,11 @@ label {
|
||||||
margin-left: 4px;
|
margin-left: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.buffer_translation {
|
||||||
|
color: #a0a0a0;
|
||||||
|
margin-left: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
.spinner {
|
.spinner {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 8px;
|
width: 8px;
|
||||||
|
|
|
||||||
|
|
@ -232,10 +232,11 @@ function setupWebSocket() {
|
||||||
if (waitingForStop) {
|
if (waitingForStop) {
|
||||||
statusText.textContent = "Processing finalized or connection closed.";
|
statusText.textContent = "Processing finalized or connection closed.";
|
||||||
if (lastReceivedData) {
|
if (lastReceivedData) {
|
||||||
renderLinesWithBuffer(
|
renderLinesWithBuffer(
|
||||||
lastReceivedData.lines || [],
|
lastReceivedData.lines || [],
|
||||||
lastReceivedData.buffer_diarization || "",
|
lastReceivedData.buffer_diarization || "",
|
||||||
lastReceivedData.buffer_transcription || "",
|
lastReceivedData.buffer_transcription || "",
|
||||||
|
lastReceivedData.buffer_translation || "",
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
true
|
true
|
||||||
|
|
@ -281,6 +282,7 @@ function setupWebSocket() {
|
||||||
lastReceivedData.lines || [],
|
lastReceivedData.lines || [],
|
||||||
lastReceivedData.buffer_diarization || "",
|
lastReceivedData.buffer_diarization || "",
|
||||||
lastReceivedData.buffer_transcription || "",
|
lastReceivedData.buffer_transcription || "",
|
||||||
|
lastReceivedData.buffer_translation || "",
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
true
|
true
|
||||||
|
|
@ -301,6 +303,7 @@ function setupWebSocket() {
|
||||||
lines = [],
|
lines = [],
|
||||||
buffer_transcription = "",
|
buffer_transcription = "",
|
||||||
buffer_diarization = "",
|
buffer_diarization = "",
|
||||||
|
buffer_translation = "",
|
||||||
remaining_time_transcription = 0,
|
remaining_time_transcription = 0,
|
||||||
remaining_time_diarization = 0,
|
remaining_time_diarization = 0,
|
||||||
status = "active_transcription",
|
status = "active_transcription",
|
||||||
|
|
@ -310,6 +313,7 @@ function setupWebSocket() {
|
||||||
lines,
|
lines,
|
||||||
buffer_diarization,
|
buffer_diarization,
|
||||||
buffer_transcription,
|
buffer_transcription,
|
||||||
|
buffer_translation,
|
||||||
remaining_time_diarization,
|
remaining_time_diarization,
|
||||||
remaining_time_transcription,
|
remaining_time_transcription,
|
||||||
false,
|
false,
|
||||||
|
|
@ -323,6 +327,7 @@ function renderLinesWithBuffer(
|
||||||
lines,
|
lines,
|
||||||
buffer_diarization,
|
buffer_diarization,
|
||||||
buffer_transcription,
|
buffer_transcription,
|
||||||
|
buffer_translation,
|
||||||
remaining_time_diarization,
|
remaining_time_diarization,
|
||||||
remaining_time_transcription,
|
remaining_time_transcription,
|
||||||
isFinalizing = false,
|
isFinalizing = false,
|
||||||
|
|
@ -341,6 +346,7 @@ function renderLinesWithBuffer(
|
||||||
lines: (lines || []).map((it) => ({ speaker: it.speaker, text: it.text, start: it.start, end: it.end, detected_language: it.detected_language })),
|
lines: (lines || []).map((it) => ({ speaker: it.speaker, text: it.text, start: it.start, end: it.end, detected_language: it.detected_language })),
|
||||||
buffer_transcription: buffer_transcription || "",
|
buffer_transcription: buffer_transcription || "",
|
||||||
buffer_diarization: buffer_diarization || "",
|
buffer_diarization: buffer_diarization || "",
|
||||||
|
buffer_translation: buffer_translation,
|
||||||
status: current_status,
|
status: current_status,
|
||||||
showLoading,
|
showLoading,
|
||||||
showTransLag,
|
showTransLag,
|
||||||
|
|
@ -415,13 +421,22 @@ function renderLinesWithBuffer(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
let translationContent = "";
|
||||||
if (item.translation) {
|
if (item.translation) {
|
||||||
|
translationContent += item.translation.trim();
|
||||||
|
}
|
||||||
|
if (idx === lines.length - 1 && buffer_translation) {
|
||||||
|
const bufferPiece = isFinalizing
|
||||||
|
? buffer_translation
|
||||||
|
: `<span class="buffer_translation">${buffer_translation}</span>`;
|
||||||
|
translationContent += translationContent ? `${bufferPiece}` : bufferPiece;
|
||||||
|
}
|
||||||
|
if (translationContent.trim().length > 0) {
|
||||||
currentLineText += `
|
currentLineText += `
|
||||||
<div>
|
<div>
|
||||||
<div class="label_translation">
|
<div class="label_translation">
|
||||||
${translationIcon}
|
${translationIcon}
|
||||||
<span>${item.translation}</span>
|
<span class="translation_text">${translationContent}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>`;
|
</div>`;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue