This commit is contained in:
unknown
2025-12-30 15:38:58 -08:00
parent 8989b5a1bf
commit 1f1b5308b5
3 changed files with 67 additions and 52 deletions

View File

@@ -4,7 +4,7 @@ FROM python:${PYTHON_VERSION}-slim-bookworm
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
ARG APP_VERSION=25.12.31
ARG DEVICE_TAG=cpu
ARG DEVICE_TAG=cu128
ARG DOCKER_DEVICE_STR='{"name": "cu128", "os": "manylinux_2_28", "arch": "x86_64", "pyvenv": [3, 12], "tag": "cu128", "note": "default device"}'
ARG DOCKER_PROGRAMS_STR="curl ffmpeg nodejs npm espeak-ng sox tesseract-ocr"
ARG CALIBRE_INSTALLER_URL="https://download.calibre-ebook.com/linux-installer.sh"

View File

@@ -428,7 +428,8 @@ class DeviceInstaller():
):
if os.path.exists(p):
with open(p, 'r', encoding='utf-8', errors='ignore') as f:
version = f.read()
v = f.read()
version = lib_version_parse(v)
break
elif os.name == 'nt':
for env in ('ROCM_PATH', 'HIP_PATH'):
@@ -447,10 +448,14 @@ class DeviceInstaller():
break
if version:
cmp = toolkit_version_compare(version, rocm_version_range)
min_version = rocm_version_range["min"]
max_version = rocm_version_range["max"]
min_version_str = ".".join(map(str, min_version)) if isinstance(min_version, (tuple, list)) else str(min_version)
max_version_str = ".".join(map(str, max_version)) if isinstance(max_version, (tuple, list)) else str(max_version)
if cmp == -1:
msg = f'ROCm {version} < min {rocm_version_range["min"]}. Please upgrade.'
msg = f'ROCm {version} < min {min_version_str}. Please upgrade.'
elif cmp == 1:
msg = f'ROCm {version} > max {rocm_version_range["max"]}. Falling back to CPU.'
msg = f'ROCm {version} > max {max_version_str}. Falling back to CPU.'
elif cmp == 0:
devices['ROCM']['found'] = True
parts = version.split(".")
@@ -531,10 +536,12 @@ class DeviceInstaller():
break
if version:
cmp = toolkit_version_compare(version, cuda_version_range)
min_ver = ".".join(str(part) for part in cuda_version_range["min"])
max_ver = ".".join(str(part) for part in cuda_version_range["max"])
if cmp == -1:
msg = f'CUDA {version} < min {cuda_version_range["min"]}. Please upgrade.'
msg = f'CUDA {version} < min {min_ver}. Please upgrade.'
elif cmp == 1:
msg = f'CUDA {version} > max {cuda_version_range["max"]}. Falling back to CPU.'
msg = f'CUDA {version} > max {max_ver}. Falling back to CPU.'
elif cmp == 0:
devices['CUDA']['found'] = True
parts = version.split(".")
@@ -580,7 +587,14 @@ class DeviceInstaller():
if version:
cmp = toolkit_version_compare(version, xpu_version_range)
if cmp == -1 or cmp == 1:
msg = f'XPU {version} out of supported range {xpu_version_range}. Falling back to CPU.'
range_display = (
f"{xpu_version_range.get('min')} to {xpu_version_range.get('max')}"
if isinstance(xpu_version_range, dict)
and 'min' in xpu_version_range
and 'max' in xpu_version_range
else str(xpu_version_range)
)
msg = f'XPU {version} out of supported range {range_display}. Falling back to CPU.'
elif cmp == 0:
devices['XPU']['found'] = True
name = 'xpu'

View File

@@ -1679,55 +1679,56 @@ def convert_chapters2audio(id:str)->bool:
print(msg)
if session['is_gui_process']:
progress_bar = gr.Progress(track_tqdm=False)
ebook_name = Path(session['ebook']).name
with tqdm(total=total_iterations, desc='0.00%', bar_format='{desc}: {n_fmt}/{total_fmt} ', unit='step', initial=0) as t:
for x in range(0, total_chapters):
chapter_num = x + 1
chapter_audio_file = f'chapter_{chapter_num}.{default_audio_proc_format}'
sentences = session['chapters'][x]
sentences_count = sum(1 for row in sentences if row.strip() not in TTS_SML.values())
start = sentence_number
msg = f'Block {chapter_num} containing {sentences_count} sentences...'
print(msg)
for i, sentence in enumerate(sentences):
if session['cancellation_requested']:
msg = 'Cancel requested'
print(msg)
return False
if sentence_number in missing_sentences or sentence_number > resume_sentence or (sentence_number == 0 and resume_sentence == 0):
if sentence_number <= resume_sentence and sentence_number > 0:
msg = f'**Recovering missing file sentence {sentence_number}'
if session['ebook']:
ebook_name = Path(session['ebook']).name
with tqdm(total=total_iterations, desc='0.00%', bar_format='{desc}: {n_fmt}/{total_fmt} ', unit='step', initial=0) as t:
for x in range(0, total_chapters):
chapter_num = x + 1
chapter_audio_file = f'chapter_{chapter_num}.{default_audio_proc_format}'
sentences = session['chapters'][x]
sentences_count = sum(1 for row in sentences if row.strip() not in TTS_SML.values())
start = sentence_number
msg = f'Block {chapter_num} containing {sentences_count} sentences...'
print(msg)
for i, sentence in enumerate(sentences):
if session['cancellation_requested']:
msg = 'Cancel requested'
print(msg)
sentence = sentence.strip()
success = tts_manager.convert_sentence2audio(sentence_number, sentence) if sentence else True
if success:
total_progress = (t.n + 1) / total_iterations
if session['is_gui_process']:
progress_bar(progress=total_progress, desc=ebook_name)
is_sentence = sentence.strip() not in TTS_SML.values()
percentage = total_progress * 100
t.set_description(f"{percentage:.2f}%")
msg = f' : {sentence}' if is_sentence else f' : {sentence}'
return False
if sentence_number in missing_sentences or sentence_number > resume_sentence or (sentence_number == 0 and resume_sentence == 0):
if sentence_number <= resume_sentence and sentence_number > 0:
msg = f'**Recovering missing file sentence {sentence_number}'
print(msg)
sentence = sentence.strip()
success = tts_manager.convert_sentence2audio(sentence_number, sentence) if sentence else True
if success:
total_progress = (t.n + 1) / total_iterations
if session['is_gui_process']:
progress_bar(progress=total_progress, desc=ebook_name)
is_sentence = sentence.strip() not in TTS_SML.values()
percentage = total_progress * 100
t.set_description(f"{percentage:.2f}%")
msg = f' : {sentence}' if is_sentence else f' : {sentence}'
print(msg)
else:
return False
if sentence.strip() not in TTS_SML.values():
sentence_number += 1
t.update(1)
end = sentence_number - 1 if sentence_number > 1 else sentence_number
msg = f'End of Block {chapter_num}'
print(msg)
if chapter_num in missing_chapters or sentence_number > resume_sentence:
if chapter_num <= resume_chapter:
msg = f'**Recovering missing file block {chapter_num}'
print(msg)
if combine_audio_sentences(chapter_audio_file, int(start), int(end), id):
msg = f'Combining block {chapter_num} to audio, sentence {start} to {end}'
print(msg)
else:
msg = 'combine_audio_sentences() failed!'
print(msg)
return False
if sentence.strip() not in TTS_SML.values():
sentence_number += 1
t.update(1)
end = sentence_number - 1 if sentence_number > 1 else sentence_number
msg = f'End of Block {chapter_num}'
print(msg)
if chapter_num in missing_chapters or sentence_number > resume_sentence:
if chapter_num <= resume_chapter:
msg = f'**Recovering missing file block {chapter_num}'
print(msg)
if combine_audio_sentences(chapter_audio_file, int(start), int(end), id):
msg = f'Combining block {chapter_num} to audio, sentence {start} to {end}'
print(msg)
else:
msg = 'combine_audio_sentences() failed!'
print(msg)
return False
return True
except Exception as e:
DependencyError(e)