处理api失败频繁channel closed
This commit is contained in:
parent
735c9ffcfc
commit
6520e49066
@ -455,6 +455,7 @@ async fn incremental_translate(
|
|||||||
let mut buffer: Vec<SubtitleSegment> = Vec::new();
|
let mut buffer: Vec<SubtitleSegment> = Vec::new();
|
||||||
let mut translated_count: usize = 0;
|
let mut translated_count: usize = 0;
|
||||||
let idle_flush_after = Duration::from_secs(3);
|
let idle_flush_after = Duration::from_secs(3);
|
||||||
|
let mut translate_error: Option<String> = None;
|
||||||
|
|
||||||
let emit_translate_progress =
|
let emit_translate_progress =
|
||||||
|window: &Window, task_id: &str, done: usize, total: usize| -> Result<()> {
|
|window: &Window, task_id: &str, done: usize, total: usize| -> Result<()> {
|
||||||
@ -500,7 +501,10 @@ async fn incremental_translate(
|
|||||||
buffer.push(segment);
|
buffer.push(segment);
|
||||||
|
|
||||||
if buffer.len() >= batch_size {
|
if buffer.len() >= batch_size {
|
||||||
translate_buffered_segments(
|
if let Some(ref error) = translate_error {
|
||||||
|
emit_log(window, task_id, format!("translation: skip batch due to previous error: {error}"))?;
|
||||||
|
buffer.clear();
|
||||||
|
} else if let Err(e) = translate_buffered_segments(
|
||||||
&translator,
|
&translator,
|
||||||
window,
|
window,
|
||||||
app_state,
|
app_state,
|
||||||
@ -512,17 +516,23 @@ async fn incremental_translate(
|
|||||||
context_size,
|
context_size,
|
||||||
"batch",
|
"batch",
|
||||||
)
|
)
|
||||||
.await?;
|
.await
|
||||||
emit_translate_progress(window, task_id, translated_count, all_segments.len())?;
|
{
|
||||||
|
eprintln!("translation error: {e:#}");
|
||||||
|
translate_error = Some(e.to_string());
|
||||||
|
let _ = emit_log(window, task_id, format!("translation: batch failed: {e}"));
|
||||||
|
} else {
|
||||||
|
let _ = emit_translate_progress(window, task_id, translated_count, all_segments.len());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(None) => break,
|
Ok(None) => break,
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
if buffer.is_empty() {
|
if !buffer.is_empty() {
|
||||||
continue;
|
if let Some(ref error) = translate_error {
|
||||||
}
|
emit_log(window, task_id, format!("translation: skip idle batch due to previous error: {error}"))?;
|
||||||
|
buffer.clear();
|
||||||
translate_buffered_segments(
|
} else if let Err(e) = translate_buffered_segments(
|
||||||
&translator,
|
&translator,
|
||||||
window,
|
window,
|
||||||
app_state,
|
app_state,
|
||||||
@ -534,15 +544,25 @@ async fn incremental_translate(
|
|||||||
context_size,
|
context_size,
|
||||||
"idle batch",
|
"idle batch",
|
||||||
)
|
)
|
||||||
.await?;
|
.await
|
||||||
emit_translate_progress(window, task_id, translated_count, all_segments.len())?;
|
{
|
||||||
|
eprintln!("translation error: {e:#}");
|
||||||
|
translate_error = Some(e.to_string());
|
||||||
|
let _ = emit_log(window, task_id, format!("translation: idle batch failed: {e}"));
|
||||||
|
} else {
|
||||||
|
let _ = emit_translate_progress(window, task_id, translated_count, all_segments.len());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Flush remaining segments below batch_size
|
// Flush remaining segments below batch_size
|
||||||
if !buffer.is_empty() {
|
if !buffer.is_empty() {
|
||||||
translate_buffered_segments(
|
if let Some(ref error) = translate_error {
|
||||||
|
let _ = emit_log(window, task_id, format!("translation: skip final batch due to previous error: {error}"));
|
||||||
|
buffer.clear();
|
||||||
|
} else if let Err(e) = translate_buffered_segments(
|
||||||
&translator,
|
&translator,
|
||||||
window,
|
window,
|
||||||
app_state,
|
app_state,
|
||||||
@ -554,8 +574,21 @@ async fn incremental_translate(
|
|||||||
context_size,
|
context_size,
|
||||||
"final batch",
|
"final batch",
|
||||||
)
|
)
|
||||||
.await?;
|
.await
|
||||||
emit_translate_progress(window, task_id, translated_count, all_segments.len())?;
|
{
|
||||||
|
eprintln!("translation error: {e:#}");
|
||||||
|
translate_error = Some(e.to_string());
|
||||||
|
let _ = emit_log(window, task_id, format!("translation: final batch failed: {e}"));
|
||||||
|
} else {
|
||||||
|
let _ = emit_translate_progress(window, task_id, translated_count, all_segments.len());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Some(ref error) = translate_error {
|
||||||
|
emit_log(window, task_id, format!("translation: completed with error: {error}"))?;
|
||||||
|
// Return Ok to keep the channel receiver alive until all
|
||||||
|
// whisper segment callback send tasks have completed
|
||||||
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Translation complete
|
// Translation complete
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user