Skip to content

Commit 9e9fc6f

Browse files
committed
Fix: AIVMX ファイルインストール時に PC のストレージ容量が不足した際のエラーハンドリングを追加
1 parent 434f42a commit 9e9fc6f

File tree

1 file changed

+22
-4
lines changed

1 file changed

+22
-4
lines changed

voicevox_engine/aivm_manager.py

+22-4
Original file line numberDiff line numberDiff line change
@@ -517,7 +517,7 @@ async def fetch_latest_version(aivm_info: AivmInfo) -> None:
517517
except Exception as ex:
518518
# エラーが発生しても起動に影響を与えないよう、ログ出力のみ行う
519519
# - httpx.RequestError: ネットワークエラーなど
520-
# - KeyError: レスポンスのJSONに必要なキーが存在しない
520+
# - KeyError: レスポンスの JSON に必要なキーが存在しない
521521
# - StopIteration: model_files に AIVMX が存在しない
522522
# - ValueError: Version.parse() が失敗
523523
logger.warning(
@@ -626,9 +626,27 @@ def install_aivm(self, file: BinaryIO) -> None:
626626
## 通常は重複防止のため "(音声合成モデルの UUID).aivmx" のフォーマットのファイル名でインストールされるが、
627627
## 手動で .aivmx ファイルをインストール先ディレクトリにコピーしても一通り動作するように考慮している
628628
logger.info(f"Installing AIVMX file to {aivm_file_path}...")
629-
with open(aivm_file_path, mode="wb") as f:
630-
f.write(file.read())
631-
logger.info(f"Installed AIVMX file to {aivm_file_path}.")
629+
try:
630+
with open(aivm_file_path, mode="wb") as f:
631+
f.write(file.read())
632+
logger.info(f"Installed AIVMX file to {aivm_file_path}.")
633+
except OSError as ex:
634+
logger.error(
635+
f"Failed to write AIVMX file to {aivm_file_path}:", exc_info=ex
636+
)
637+
error_message = str(ex).lower()
638+
if "no space" in error_message:
639+
detail = f"AIVMX ファイルの書き込みに失敗しました。ストレージ容量が不足しています。({ex})"
640+
elif "permission denied" in error_message:
641+
detail = f"AIVMX ファイルの書き込みに失敗しました。インストール先フォルダへのアクセス権限が不足しています。({ex})"
642+
elif "read-only" in error_message:
643+
detail = f"AIVMX ファイルの書き込みに失敗しました。インストール先フォルダが読み取り専用権限になっています。({ex})"
644+
else:
645+
detail = f"AIVMX ファイルの書き込みに失敗しました。({ex})"
646+
raise HTTPException(
647+
status_code=500,
648+
detail=detail,
649+
)
632650

633651
# すべてのインストール済み音声合成モデルの情報のキャッシュを再生成
634652
## インストール完了後にエディタから送られる /aivm_models API へのリクエストで確実に更新情報も返せるように、

0 commit comments

Comments
 (0)