Skip to content

Commit

Permalink
Fix: AIVMX ファイルインストール時に PC のストレージ容量が不足した際のエラーハンドリングを追加
Browse files Browse the repository at this point in the history
  • Loading branch information
tsukumijima committed Jan 9, 2025
1 parent 434f42a commit 9e9fc6f
Showing 1 changed file with 22 additions and 4 deletions.
26 changes: 22 additions & 4 deletions voicevox_engine/aivm_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -517,7 +517,7 @@ async def fetch_latest_version(aivm_info: AivmInfo) -> None:
except Exception as ex:
# エラーが発生しても起動に影響を与えないよう、ログ出力のみ行う
# - httpx.RequestError: ネットワークエラーなど
# - KeyError: レスポンスのJSONに必要なキーが存在しない
# - KeyError: レスポンスの JSON に必要なキーが存在しない
# - StopIteration: model_files に AIVMX が存在しない
# - ValueError: Version.parse() が失敗
logger.warning(
Expand Down Expand Up @@ -626,9 +626,27 @@ def install_aivm(self, file: BinaryIO) -> None:
## 通常は重複防止のため "(音声合成モデルの UUID).aivmx" のフォーマットのファイル名でインストールされるが、
## 手動で .aivmx ファイルをインストール先ディレクトリにコピーしても一通り動作するように考慮している
logger.info(f"Installing AIVMX file to {aivm_file_path}...")
with open(aivm_file_path, mode="wb") as f:
f.write(file.read())
logger.info(f"Installed AIVMX file to {aivm_file_path}.")
try:
with open(aivm_file_path, mode="wb") as f:
f.write(file.read())
logger.info(f"Installed AIVMX file to {aivm_file_path}.")
except OSError as ex:
logger.error(
f"Failed to write AIVMX file to {aivm_file_path}:", exc_info=ex
)
error_message = str(ex).lower()
if "no space" in error_message:
detail = f"AIVMX ファイルの書き込みに失敗しました。ストレージ容量が不足しています。({ex})"
elif "permission denied" in error_message:
detail = f"AIVMX ファイルの書き込みに失敗しました。インストール先フォルダへのアクセス権限が不足しています。({ex})"
elif "read-only" in error_message:
detail = f"AIVMX ファイルの書き込みに失敗しました。インストール先フォルダが読み取り専用権限になっています。({ex})"
else:
detail = f"AIVMX ファイルの書き込みに失敗しました。({ex})"
raise HTTPException(
status_code=500,
detail=detail,
)

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

0 comments on commit 9e9fc6f

Please sign in to comment.