Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pydanticをv2に上げる #695

Merged
merged 1 commit into from
Nov 27, 2023
Merged

Conversation

qryxip
Copy link
Member

@qryxip qryxip commented Nov 26, 2023

内容

Pydanticをv2に上げます。

マイグレーションガイド

関連 Issue

#545

その他

@@ -183,7 +183,7 @@ class AudioQuery:
output_stereo: bool
"""音声データをステレオ出力するか否か。"""

kana: Optional[str]
kana: Optional[str] # FIXME: requiredになっている(他の`Optional`も同様)
Copy link
Member Author

@qryxip qryxip Nov 26, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

: Optional[...]はrequiredになる(=Noneと指定する必要が出てくる)ようになる」とのことだったので対応しようとしたが、@pydantic.dataclasses.dataclassはそもそも元々この指定でオプショナルになるようにはなってなかったらしい。( = dataclasses.field(default=None)とちゃんと指定する必要がある)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
kana: Optional[str] # FIXME: requiredになっている(他の`Optional`も同様)
kana: Optional[str] = None

でも良さそう?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

確かにclass末尾にあるAudioQuery::kanaはそれで大丈夫ですね。ただclassの真ん中に挟まっている他のOptionalはそれだと駄目だったと思います(標準ライブラリのdataclassと同様)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

あーー 確かにです。

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

これ勘違いしていました。BaseModelとは異なり、 dataclasses.field(default=None)でもclassの末尾に持って来る必要があります (逆に末尾なら= NoneでもOK)。標準ライブラリのdataclassesの制約のようです。

python
Python 3.8.15 (default, Nov  6 2022, 22:50:15)
[GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import dataclasses
>>> from typing import Optional
>>> @dataclasses.dataclass
... class S:
...     a: Optional[int] = dataclasses.field(default=None)
...     b: int
...
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
  File "/home/ryo/.pyenv/versions/3.8.15/lib/python3.8/dataclasses.py", line 1019, in dataclass
    return wrap(cls)
  File "/home/ryo/.pyenv/versions/3.8.15/lib/python3.8/dataclasses.py", line 1011, in wrap
    return _process_class(cls, init, repr, eq, order, unsafe_hash, frozen)
  File "/home/ryo/.pyenv/versions/3.8.15/lib/python3.8/dataclasses.py", line 925, in _process_class
    _init_fn(flds,
  File "/home/ryo/.pyenv/versions/3.8.15/lib/python3.8/dataclasses.py", line 502, in _init_fn
    raise TypeError(f'non-default argument {f.name!r} '
TypeError: non-default argument 'b' follows default argument

Copy link
Member

@Hiroshiba Hiroshiba left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!!

= Noneでちゃんと動くなら良さそう感。(別PRでもこのPRでも)

@qryxip
Copy link
Member Author

qryxip commented Nov 27, 2023

(別PRでもこのPRでも)

0.14→0.15のchangelog的なものに入れたいので、別PRにしようと思います。

@takaaki-inada
Copy link

大変失礼致します。
pythonでvoicevox-core (0.15.7+cpu)を使ってvoicevoxにアクセスしようとしたところ、pydanticのversionで別のpackage(line-bot-sdk)とconflictが発生してしまいました。

line-bot-sdk (3.14.4) depends on pydantic (>=2.0.3,<3)
 and voicevox-core (0.15.7+cpu) @ https://github.com/VOICEVOX/voicevox_core/releases/download/0.15.7/voicevox_core-0.15.7+cpu-cp38-abi3-linux_x86_64.whl depends on pydantic (>=1.9.2,<2)

そこで質問です。
このPRはrelease-0.15ブランチにマージされたりしますでしょうか?
discordをのぞいてみたのですが、次のvoicevox_coreのリリース予定に何が入りそうなのかわからなかったもので質問させて頂きました。お手数をお掛けします。

@qryxip qryxip deleted the bump-pydantic-to-v2 branch January 31, 2025 13:41
@qryxip
Copy link
Member Author

qryxip commented Jan 31, 2025

このPRはrelease-0.15ブランチにマージされたりしますでしょうか?

すみません、とりいそぎ結論から書くと厳しいのではないかと思います。release-0.15ブランチは現在最低限のメンテナンスのみがされております。

現在2月を目標としてバージョン0.16をリリースする予定です。0.16は、現在のmainブランチのものをそのまま出す予定になります。
(その辺の会話は #545 (comment)あたり)

#704 とともにマイグレーションガイドも書く予定ですが、0.15(=0.14)から500個近いプルリエスト分の整理をするのにちょっと時間がかかると思います。

なお現在VOICEVOX/voicevox_project#24が(ほぼほぼ)完了したことにより、誰でもmainブランチを利用してずんだもん達を利用できるようにはなったと思います。

ただドキュメント自体もちょっと未完成ではあります。今ある0.16(予定)のドキュメントは次の通りです。

おおざっぱに書くと、mainブランチのダウンローダーの説明(-h, --help)にあるmodelsonnxruntimeが必要です。ただし onnxruntimeはこれである必要があります。
https://github.com/VOICEVOX/onnxruntime-builder/releases/tag/voicevox_onnxruntime-999.999.999
(正式なやつを出す前に、一回くらいサイレントに差し替えるかもしれません)

(ちょっと後で続きを書こうと思います)

@qryxip
Copy link
Member Author

qryxip commented Jan 31, 2025

image

この表示を見て思い出しました。0.15.0-preview.16には既に本PRは入っていますね。

というのも、非っ常ーーーにわかりにくいのですが、バージョンの関係は今こうなっています。

0.14.6 +----> 0.15.0-preview.0 -----> 0.15.0-preview.16 ---+----> 0.16 (予定)
       |                                                   |
       +----> 0.15.0 --------------------------> 0.15.7 ---+ (`git merge`)
              (内部APIの増設を除けば0.14.6と同一)

そして現0.15系列はソング用内部APIの変更のみであるため、実質的に0.14系と変わりません。そのため0.15.7よりも0.15.0-preview.16の方が実質的には「後」とも言えると思います。

ただいずれにしろ、今0.15.0-preview.16を使って頂くくらいなら0.16予定のmainブランチを使って頂ける方がよいのではないかとは思ってます。

@qryxip
Copy link
Member Author

qryxip commented Feb 1, 2025

(ちょっと後で続きを書こうと思います)

もし0.16予定のmainブランチをお使いになる場合ですが、0.16には次のものが必要です。

  1. VOICEVOX CORE Python APIのwhl
  2. VOICEVOX ONNX Runtime (voicevox_onnxruntime。ダウンローダーで言うonnxruntime)
  3. VOICEVOX音声モデルファイル (VVM。ダウンローダーで言うmodels)
  4. Open JTalk辞書 (ダウンローダーで言うdict)
  5. 必要に応じて2.用のDirectMLやCUDA (ダウンローダーで言うadditional-libraries)

1.ですが、VOICEVOX CORE Python APIのwhlはまだビルドされていません。ただこのリポジトリをフォークし、そのbuild and deploy workflowworkflow_dispatchを起動すればビルドができます。

image

例として、これが私(qryxip)のリポジトリでビルドしたものです。
https://github.com/qryxip/voicevox_core/releases/tag/999.999.999
(3日前のものなので、mainブランチよりちょっと古い)

ちなみに手元でビルドする方法としては、多分あまり親切に書かれていないと思うので説明すると以下のようになります。

ビルド方法

まずpyproject.tomlがあるのはcrates/voicevox_core_python_apiなので、そこにcdしてpoetry sync --no-root --with devします。

cd ./crates/voicevox_core_python_apipoetry sync --no-root --with dev

そうするとPoetryのvenvにMaturinが入るのでそれでwhlをビルドします。

# poetry runでも可. <(poetry env activate)maturin build --locked --release

whlは{リポジトリのルート}/target/wheelsに作られます。

ls -l ../../target/wheels

またcrates/voicevox_core_python_api/README.mdにある通り、maturin buildではなくmaturin developを使うと、whlがビルドされる代わりにeditableなパッケージとしてvoicevox_coreがインストールされます。

2.は先述した通りです。ダウンローダーでダウンロードできます。

3.はVOICEVOX/voicevox_vvmにあるものです。こちらもダウンローダーでダウンロードできます。

4.は0.14および0.15と同じです。こちらもダウンローダーでダウンロードできます。

5.はダウンローダーでダウンロードできるやつはちょっと古い可能性があるので、その場合ONNX Runtime 1.17用のものを自前で用意する必要があります。

@takaaki-inada
Copy link

丁寧にありがとうございます!すごく理解出来ました!
0.16予定のmainブランチを使わせて頂きます。感謝です 🙇

@qryxip
Copy link
Member Author

qryxip commented Feb 1, 2025

あ、次の2点を失念しておりました。

  1. 0.16のリリースまでにあとちょっと破壊的変更を入れる予定です。最近はConventional Commitsに従った形¹でGitログを残すようにしているので、破壊的変更についてはある程度ならわかるようになっている…はず。
    • ¹ commit prefixに'!'を付ける、BREAKING-CHANGEのfooterを入れるという形で破壊的変更を記述。
  2. VOICEVOX ONNX Runtimeには、元のONNX Runtimeのライセンス(MIT License)とは異なる利用規約 (ToU)が適用されます。配布物内のTERMS.mdがそれです。利用規約の内容は、これを書いている現段階では、VOICEVOX音声モデル (VVM)のものと同一です。
    • ダウンローダーでVVMをダウンロードしようとするとVVMの利用規約に同意を求められると思いますが、VOICEVOX ONNX Runtimeについては現状そうなっていません。後でそうするようにせねば…

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants