-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
5ec4849
commit 1428a2a
Showing
2 changed files
with
51 additions
and
43 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -305,14 +305,17 @@ class AivmManifest(BaseModel): | |
""" AIVM マニフェストのスキーマ """ | ||
# AIVM マニフェストのバージョン (ex: 1.0) | ||
# 現在は 1.0 のみサポート | ||
manifest_version: Annotated[str, constr(pattern=r'^1\.0$')] | ||
# 音声合成モデルの名前 | ||
name: Annotated[str, constr(min_length=1)] | ||
# 音声合成モデルの説明 (省略時は空文字列になる) | ||
description: str = '' | ||
# 音声合成モデルの作成者名のリスト (省略時は空リストになる) | ||
creators: list[str] = [] | ||
# 音声合成モデルの利用規約 (Markdown 形式 / 省略時は空文字列になる) | ||
manifest_version: Annotated[str, StringConstraints(pattern=r'^1\.0$')] | ||
# 音声合成モデルの名前 (最大 80 文字) | ||
# 音声合成モデル内の話者が 1 名の場合は話者名と同じ値を設定すべき | ||
name: Annotated[str, StringConstraints(min_length=1, max_length=80)] | ||
# 音声合成モデルの簡潔な説明 (最大 140 文字 / 省略時は空文字列を設定) | ||
description: Annotated[str, StringConstraints(max_length=140)] = '' | ||
# 音声合成モデルの作成者名のリスト (省略時は空リストを設定) | ||
# 作成者名には npm package.json の "author", "contributors" に指定できるものと同じ書式を利用できる | ||
# 例: ["John Doe", "Jane Doe <[email protected]>", "John Doe <[email protected]> (https://example.com)"] | ||
creators: list[Annotated[str, StringConstraints(min_length=1, max_length=255)]] = [] | ||
# 音声合成モデルの利用規約 (Markdown 形式 / 省略時は空文字列を設定) | ||
# カスタム利用規約を設定する場合を除き、原則各ライセンスへの URL リンクのみを記述する | ||
# 例: [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/) | ||
terms_of_use: str = '' | ||
|
@@ -321,26 +324,27 @@ class AivmManifest(BaseModel): | |
# 音声合成モデルのモデル形式 (Safetensors または ONNX) | ||
# AIVM ファイル (.aivm) のモデル形式は Safetensors 、AIVMX ファイル (.aivmx) のモデル形式は ONNX である | ||
model_format: ModelFormat | ||
# 音声合成モデル学習時のエポック数 (省略時は None になる) | ||
# 音声合成モデル学習時のエポック数 (省略時は None を設定) | ||
training_epochs: Annotated[int, Field(ge=0)] | None = None | ||
# 音声合成モデル学習時のステップ数 (省略時は None になる) | ||
# 音声合成モデル学習時のステップ数 (省略時は None を設定) | ||
training_steps: Annotated[int, Field(ge=0)] | None = None | ||
# 音声合成モデルを一意に識別する UUID | ||
uuid: UUID | ||
# 音声合成モデルのバージョン (SemVer 2.0 準拠 / ex: 1.0.0) | ||
version: Annotated[str, constr(pattern=r'^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$')] | ||
version: Annotated[str, StringConstraints(pattern=r'^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$')] | ||
# 音声合成モデルの話者情報 (最低 1 人以上の話者が必要) | ||
speakers: list[AivmManifestSpeaker] | ||
|
||
class AivmManifestSpeaker(BaseModel): | ||
""" AIVM マニフェストの話者情報 """ | ||
# 話者の名前 | ||
name: Annotated[str, constr(min_length=1)] | ||
# 話者の名前 (最大 80 文字) | ||
# 音声合成モデル内の話者が 1 名の場合は音声合成モデル名と同じ値を設定すべき | ||
name: Annotated[str, StringConstraints(min_length=1, max_length=80)] | ||
# 話者のアイコン画像 (Data URL) | ||
# 画像ファイル形式は 512×512 の JPEG (image/jpeg)・PNG (image/png) のいずれか (JPEG を推奨) | ||
icon: Annotated[str, constr(pattern=r'^data:image/(jpeg|png);base64,[A-Za-z0-9+/=]+$')] | ||
icon: Annotated[str, StringConstraints(pattern=r'^data:image/(jpeg|png);base64,[A-Za-z0-9+/=]+$')] | ||
# 話者の対応言語のリスト (ja, en, zh のような ISO 639-1 言語コード) | ||
supported_languages: list[Annotated[str, constr(min_length=2, max_length=2)]] | ||
supported_languages: list[Annotated[str, StringConstraints(min_length=2, max_length=2)]] | ||
# 話者を一意に識別する UUID | ||
uuid: UUID | ||
# 話者のローカル ID (この音声合成モデル内で話者を識別するための一意なローカル ID で、uuid とは異なる) | ||
|
@@ -350,23 +354,23 @@ class AivmManifestSpeaker(BaseModel): | |
|
||
class AivmManifestSpeakerStyle(BaseModel): | ||
""" AIVM マニフェストの話者スタイル情報 """ | ||
# スタイルの名前 | ||
name: Annotated[str, constr(min_length=1)] | ||
# スタイルの名前 (最大 20 文字) | ||
name: Annotated[str, StringConstraints(min_length=1, max_length=20)] | ||
# スタイルのアイコン画像 (Data URL, 省略可能) | ||
# 省略時は話者のアイコン画像がスタイルのアイコン画像として使われる想定 | ||
# 画像ファイル形式は 512×512 の JPEG (image/jpeg)・PNG (image/png) のいずれか (JPEG を推奨) | ||
icon: Annotated[str, constr(pattern=r'^data:image/(jpeg|png);base64,[A-Za-z0-9+/=]+$')] | None = None | ||
icon: Annotated[str, StringConstraints(pattern=r'^data:image/(jpeg|png);base64,[A-Za-z0-9+/=]+$')] | None = None | ||
# スタイルの ID (この話者内でスタイルを識別するための一意なローカル ID で、uuid とは異なる) | ||
local_id: Annotated[int, Field(ge=0, le=31)] # 最大 32 スタイルまでサポート | ||
# スタイルのボイスサンプル (省略時は空配列になる) | ||
# スタイルのボイスサンプル (省略時は空リストを設定) | ||
voice_samples: list[AivmManifestVoiceSample] = [] | ||
|
||
class AivmManifestVoiceSample(BaseModel): | ||
""" AIVM マニフェストのボイスサンプル情報 """ | ||
# ボイスサンプルの音声ファイル (Data URL) | ||
# 音声ファイル形式は WAV (audio/wav, Codec: PCM 16bit)・M4A (audio/mp4, Codec: AAC-LC) のいずれか (M4A を推奨) | ||
audio: Annotated[str, constr(pattern=r'^data:audio/(wav|mp4);base64,[A-Za-z0-9+/=]+$')] | ||
audio: Annotated[str, StringConstraints(pattern=r'^data:audio/(wav|mp4);base64,[A-Za-z0-9+/=]+$')] | ||
# ボイスサンプルの書き起こし文 | ||
# 書き起こし文は音声ファイルの発話内容と一致している必要がある | ||
transcript: Annotated[str, constr(min_length=1)] | ||
transcript: Annotated[str, StringConstraints(min_length=1)] | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3,7 +3,7 @@ | |
|
||
from enum import StrEnum | ||
from dataclasses import dataclass | ||
from pydantic import BaseModel, ConfigDict, Field, constr | ||
from pydantic import BaseModel, ConfigDict, Field, StringConstraints | ||
from uuid import UUID | ||
from typing import Annotated | ||
|
||
|
@@ -35,14 +35,17 @@ class AivmManifest(BaseModel): | |
""" AIVM マニフェストのスキーマ """ | ||
# AIVM マニフェストのバージョン (ex: 1.0) | ||
# 現在は 1.0 のみサポート | ||
manifest_version: Annotated[str, constr(pattern=r'^1\.0$')] | ||
# 音声合成モデルの名前 | ||
name: Annotated[str, constr(min_length=1)] | ||
# 音声合成モデルの説明 (省略時は空文字列になる) | ||
description: str = '' | ||
# 音声合成モデルの作成者名のリスト (省略時は空リストになる) | ||
creators: list[str] = [] | ||
# 音声合成モデルの利用規約 (Markdown 形式 / 省略時は空文字列になる) | ||
manifest_version: Annotated[str, StringConstraints(pattern=r'^1\.0$')] | ||
# 音声合成モデルの名前 (最大 80 文字) | ||
# 音声合成モデル内の話者が 1 名の場合は話者名と同じ値を設定すべき | ||
name: Annotated[str, StringConstraints(min_length=1, max_length=80)] | ||
# 音声合成モデルの簡潔な説明 (最大 140 文字 / 省略時は空文字列を設定) | ||
description: Annotated[str, StringConstraints(max_length=140)] = '' | ||
# 音声合成モデルの作成者名のリスト (省略時は空リストを設定) | ||
# 作成者名には npm package.json の "author", "contributors" に指定できるものと同じ書式を利用できる | ||
# 例: ["John Doe", "Jane Doe <[email protected]>", "John Doe <[email protected]> (https://example.com)"] | ||
creators: list[Annotated[str, StringConstraints(min_length=1, max_length=255)]] = [] | ||
# 音声合成モデルの利用規約 (Markdown 形式 / 省略時は空文字列を設定) | ||
# カスタム利用規約を設定する場合を除き、原則各ライセンスへの URL リンクのみを記述する | ||
# 例: [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/) | ||
terms_of_use: str = '' | ||
|
@@ -51,14 +54,14 @@ class AivmManifest(BaseModel): | |
# 音声合成モデルのモデル形式 (Safetensors または ONNX) | ||
# AIVM ファイル (.aivm) のモデル形式は Safetensors 、AIVMX ファイル (.aivmx) のモデル形式は ONNX である | ||
model_format: ModelFormat | ||
# 音声合成モデル学習時のエポック数 (省略時は None になる) | ||
# 音声合成モデル学習時のエポック数 (省略時は None を設定) | ||
training_epochs: Annotated[int, Field(ge=0)] | None = None | ||
# 音声合成モデル学習時のステップ数 (省略時は None になる) | ||
# 音声合成モデル学習時のステップ数 (省略時は None を設定) | ||
training_steps: Annotated[int, Field(ge=0)] | None = None | ||
# 音声合成モデルを一意に識別する UUID | ||
uuid: UUID | ||
# 音声合成モデルのバージョン (SemVer 2.0 準拠 / ex: 1.0.0) | ||
version: Annotated[str, constr(pattern=r'^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$')] | ||
version: Annotated[str, StringConstraints(pattern=r'^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$')] | ||
# 音声合成モデルの話者情報 (最低 1 人以上の話者が必要) | ||
speakers: list[AivmManifestSpeaker] | ||
|
||
|
@@ -67,13 +70,14 @@ class AivmManifest(BaseModel): | |
|
||
class AivmManifestSpeaker(BaseModel): | ||
""" AIVM マニフェストの話者情報 """ | ||
# 話者の名前 | ||
name: Annotated[str, constr(min_length=1)] | ||
# 話者の名前 (最大 80 文字) | ||
# 音声合成モデル内の話者が 1 名の場合は音声合成モデル名と同じ値を設定すべき | ||
name: Annotated[str, StringConstraints(min_length=1, max_length=80)] | ||
# 話者のアイコン画像 (Data URL) | ||
# 画像ファイル形式は 512×512 の JPEG (image/jpeg)・PNG (image/png) のいずれか (JPEG を推奨) | ||
icon: Annotated[str, constr(pattern=r'^data:image/(jpeg|png);base64,[A-Za-z0-9+/=]+$')] | ||
icon: Annotated[str, StringConstraints(pattern=r'^data:image/(jpeg|png);base64,[A-Za-z0-9+/=]+$')] | ||
# 話者の対応言語のリスト (ja, en, zh のような ISO 639-1 言語コード) | ||
supported_languages: list[Annotated[str, constr(min_length=2, max_length=2)]] | ||
supported_languages: list[Annotated[str, StringConstraints(min_length=2, max_length=2)]] | ||
# 話者を一意に識別する UUID | ||
uuid: UUID | ||
# 話者のローカル ID (この音声合成モデル内で話者を識別するための一意なローカル ID で、uuid とは異なる) | ||
|
@@ -83,25 +87,25 @@ class AivmManifestSpeaker(BaseModel): | |
|
||
class AivmManifestSpeakerStyle(BaseModel): | ||
""" AIVM マニフェストの話者スタイル情報 """ | ||
# スタイルの名前 | ||
name: Annotated[str, constr(min_length=1)] | ||
# スタイルの名前 (最大 20 文字) | ||
name: Annotated[str, StringConstraints(min_length=1, max_length=20)] | ||
# スタイルのアイコン画像 (Data URL, 省略可能) | ||
# 省略時は話者のアイコン画像がスタイルのアイコン画像として使われる想定 | ||
# 画像ファイル形式は 512×512 の JPEG (image/jpeg)・PNG (image/png) のいずれか (JPEG を推奨) | ||
icon: Annotated[str, constr(pattern=r'^data:image/(jpeg|png);base64,[A-Za-z0-9+/=]+$')] | None = None | ||
icon: Annotated[str, StringConstraints(pattern=r'^data:image/(jpeg|png);base64,[A-Za-z0-9+/=]+$')] | None = None | ||
# スタイルの ID (この話者内でスタイルを識別するための一意なローカル ID で、uuid とは異なる) | ||
local_id: Annotated[int, Field(ge=0, le=31)] # 最大 32 スタイルまでサポート | ||
# スタイルのボイスサンプル (省略時は空配列になる) | ||
# スタイルのボイスサンプル (省略時は空リストを設定) | ||
voice_samples: list[AivmManifestVoiceSample] = [] | ||
|
||
class AivmManifestVoiceSample(BaseModel): | ||
""" AIVM マニフェストのボイスサンプル情報 """ | ||
# ボイスサンプルの音声ファイル (Data URL) | ||
# 音声ファイル形式は WAV (audio/wav, Codec: PCM 16bit)・M4A (audio/mp4, Codec: AAC-LC) のいずれか (M4A を推奨) | ||
audio: Annotated[str, constr(pattern=r'^data:audio/(wav|mp4);base64,[A-Za-z0-9+/=]+$')] | ||
audio: Annotated[str, StringConstraints(pattern=r'^data:audio/(wav|mp4);base64,[A-Za-z0-9+/=]+$')] | ||
# ボイスサンプルの書き起こし文 | ||
# 書き起こし文は音声ファイルの発話内容と一致している必要がある | ||
transcript: Annotated[str, constr(min_length=1)] | ||
transcript: Annotated[str, StringConstraints(min_length=1)] | ||
|
||
|
||
# デフォルト表示用の AIVM マニフェスト | ||
|