-
Notifications
You must be signed in to change notification settings - Fork 204
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
refactor: 内部向け構造体を BaseModel
から dataclass
へ変更する
#1405
Comments
(#1394 より転記)
@Hiroshiba class SurprisingModel(BaseModel):
version: str = Field("話者のバージョン")
x = SurprisingModel() パッと見ると ゆえに内部用構造体に触りたい新規コントリビュータは次のいずれかのパターンに嵌ると考えられます:
どちらのパターンも ENGINE OSS のコントリビュータを増やす観点で好ましくないと考えます。 |
たしかにです!! dataclassのが良さそうですね!! |
👍️ |
本 Issue は直近 180 日間で活動がありません。今後の方針について VOICEVOX チームによる再検討がおこなわれる予定です。 |
内容
概要: 内部向け構造体を
BaseModel
からdataclass
へ変更してリファクタリングVOICEVOX ENGINE は API 用 BaseModel とは別に、ENGINE 内部で引き回すための内部向け構造体を定義している。
これらは BaseModel を継承している場合が多い。これは pydantic v1 時代から BaseModel 経由で提供されてきたバリデーション機能を使うためだったと思われる。
しかし pydantic は独特の仕様がかなり多く、単なる構造体としては
dataclass
で十分である。そして pydantic v2 より dataclass に対して pydantic の TypeAdapter でバリデーションが可能になった。これを利用すれば pydantic の利用を限局したうえで安全な dataclass インスタンスを ENGINE 内部で取り回せる。このような背景から、内部向け構造体を
BaseModel
からdataclass
へ変更するリファクタリングを提案します。Pros 良くなる点
Cons 悪くなる点
無し
実現方法
VOICEVOXのバージョン
0.19.0
その他
実例として
EngineManifestJson
およびPartOfSpeechDetail
へ適用する PR を作成しました(#1394, #1395)。Go/NoGo 判断の一助にお使いください。The text was updated successfully, but these errors were encountered: