From 79af7cc11935b092b5a1586cde3154770a807978 Mon Sep 17 00:00:00 2001 From: wxg0103 <727495428@qq.com> Date: Wed, 16 Sep 2026 10:36:34 +0800 Subject: [PATCH] chore: add MiniMax H3 model parameters and credentials for enhanced video processing --- .../minimax_model_provider/credential/itv.py | 51 ++++++++++++++++++- .../minimax_model_provider/credential/ttv.py | 51 ++++++++++++++++++- .../minimax_model_provider.py | 16 +++++- .../impl/minimax_model_provider/model/ttv.py | 6 ++- 4 files changed, 117 insertions(+), 7 deletions(-) diff --git a/apps/models_provider/impl/minimax_model_provider/credential/itv.py b/apps/models_provider/impl/minimax_model_provider/credential/itv.py index a3bc12acedb..695cdf38ae2 100644 --- a/apps/models_provider/impl/minimax_model_provider/credential/itv.py +++ b/apps/models_provider/impl/minimax_model_provider/credential/itv.py @@ -14,8 +14,7 @@ class MiniMaxModelParams(BaseForm): """ - Parameters class for the Qwen Text-to-Video model. - Defines fields such as Video size, number of Videos, and style. + Parameters class for the MiniMax V1 (legacy) Video model. """ aigc_watermark = SwitchField( @@ -25,6 +24,40 @@ class MiniMaxModelParams(BaseForm): ) +class MiniMaxH3ModelParams(BaseForm): + """ + Parameters class for the MiniMax V2 (MiniMax-H3) Video model. + """ + + resolution = forms.SingleSelect( + TooltipLabel(_("Resolution"), _("Output video resolution.")), + required=True, + default_value="480P", + option_list=[{"value": value, "label": value} for value in ["480P", "768P", "2K"]], + text_field="label", + value_field="value", + ) + + duration = forms.SliderField( + TooltipLabel(_("Duration"), _("Video duration in seconds (4-15).")), + 4, + 15, + 1, + 0, + required=True, + default_value=10, + ) + + ratio = forms.SingleSelect( + TooltipLabel(_("Aspect ratio"), _("Output video aspect ratio.")), + required=False, + default_value="16:9", + option_list=[{"value": value, "label": value} for value in ["16:9", "9:16", "1:1", "4:3", "3:4"]], + text_field="label", + value_field="value", + ) + + class ImageToVideoModelCredential(BaseForm, BaseModelCredential): """ Credential class for the Qwen Text-to-Video model. @@ -103,3 +136,17 @@ def get_model_params_setting_form(self, model_name: str): :return: Parameter setting form. """ return MiniMaxModelParams() + + +class MiniMaxH3ImageToVideoModelCredential(ImageToVideoModelCredential): + """ + Credential for the MiniMax H3 / H3-Max (V2) image-to-video model. + Uses the V2 endpoint and requires resolution / duration / ratio. + """ + + # BaseForm 只收集本类的字段(vars(self.__class__) 不走 MRO),继承字段需重新声明 + api_base = forms.TextInputField("API URL", required=True, default_value="https://api.minimaxi.com/v2") + api_key = PasswordInputField("API Key", required=True) + + def get_model_params_setting_form(self, model_name: str): + return MiniMaxH3ModelParams() diff --git a/apps/models_provider/impl/minimax_model_provider/credential/ttv.py b/apps/models_provider/impl/minimax_model_provider/credential/ttv.py index 9cc6216916a..9a2d580b766 100644 --- a/apps/models_provider/impl/minimax_model_provider/credential/ttv.py +++ b/apps/models_provider/impl/minimax_model_provider/credential/ttv.py @@ -14,8 +14,7 @@ class MiniMaxModelParams(BaseForm): """ - Parameters class for the Qwen Text-to-Video model. - Defines fields such as Video size, number of Videos, and style. + Parameters class for the MiniMax V1 (legacy) Video model. """ aigc_watermark = SwitchField( @@ -25,6 +24,40 @@ class MiniMaxModelParams(BaseForm): ) +class MiniMaxH3ModelParams(BaseForm): + """ + Parameters class for the MiniMax V2 (MiniMax-H3) Video model. + """ + + resolution = forms.SingleSelect( + TooltipLabel(_("Resolution"), _("Output video resolution.")), + required=True, + default_value="480P", + option_list=[{"value": value, "label": value} for value in ["480P", "768P", "2K"]], + text_field="label", + value_field="value", + ) + + duration = forms.SliderField( + TooltipLabel(_("Duration"), _("Video duration in seconds (4-15).")), + 4, + 15, + 1, + 0, + required=True, + default_value=10, + ) + + ratio = forms.SingleSelect( + TooltipLabel(_("Aspect ratio"), _("Output video aspect ratio.")), + required=False, + default_value="16:9", + option_list=[{"value": value, "label": value} for value in ["16:9", "9:16", "1:1", "4:3", "3:4"]], + text_field="label", + value_field="value", + ) + + class TextToVideoModelCredential(BaseForm, BaseModelCredential): """ Credential class for the Qwen Text-to-Video model. @@ -103,3 +136,17 @@ def get_model_params_setting_form(self, model_name: str): :return: Parameter setting form. """ return MiniMaxModelParams() + + +class MiniMaxH3TextToVideoModelCredential(TextToVideoModelCredential): + """ + Credential for the MiniMax H3 / H3-Max (V2) text-to-video model. + Uses the V2 endpoint and requires resolution / duration / ratio. + """ + + # BaseForm 只收集本类的字段(vars(self.__class__) 不走 MRO),继承字段需重新声明 + api_base = forms.TextInputField("API URL", required=True, default_value="https://api.minimaxi.com/v2") + api_key = PasswordInputField("API Key", required=True) + + def get_model_params_setting_form(self, model_name: str): + return MiniMaxH3ModelParams() diff --git a/apps/models_provider/impl/minimax_model_provider/minimax_model_provider.py b/apps/models_provider/impl/minimax_model_provider/minimax_model_provider.py index c9f1d7f90f1..53a8c8f24f6 100644 --- a/apps/models_provider/impl/minimax_model_provider/minimax_model_provider.py +++ b/apps/models_provider/impl/minimax_model_provider/minimax_model_provider.py @@ -9,11 +9,17 @@ ModelTypeConst, ModelInfoManage, ) -from models_provider.impl.minimax_model_provider.credential.itv import ImageToVideoModelCredential +from models_provider.impl.minimax_model_provider.credential.itv import ( + ImageToVideoModelCredential, + MiniMaxH3ImageToVideoModelCredential, +) from models_provider.impl.minimax_model_provider.credential.llm import MiniMaxLLMModelCredential from models_provider.impl.minimax_model_provider.credential.tti import MiniMaxTextToImageModelCredential from models_provider.impl.minimax_model_provider.credential.tts import MiniMaxTTSModelCredential -from models_provider.impl.minimax_model_provider.credential.ttv import TextToVideoModelCredential +from models_provider.impl.minimax_model_provider.credential.ttv import ( + MiniMaxH3TextToVideoModelCredential, + TextToVideoModelCredential, +) from models_provider.impl.minimax_model_provider.model.llm import MiniMaxChatModel from models_provider.impl.minimax_model_provider.model.tti import MiniMaxTextToImageModel from models_provider.impl.minimax_model_provider.model.tts import MiniMaxTextToSpeech @@ -27,6 +33,8 @@ minimax_tti_model_credential = MiniMaxTextToImageModelCredential() minimax_ttv_model_credential = TextToVideoModelCredential() minimax_itv_model_credential = ImageToVideoModelCredential() +minimax_h3_ttv_model_credential = MiniMaxH3TextToVideoModelCredential() +minimax_h3_itv_model_credential = MiniMaxH3ImageToVideoModelCredential() minimax_m2_7 = ModelInfo( "MiniMax-M2.7", @@ -87,10 +95,14 @@ ModelInfo("image-01", _(""), ModelTypeConst.TTI, minimax_tti_model_credential, MiniMaxTextToImageModel), ] minimax_ttv_list = [ + ModelInfo("MiniMax-H3", _(""), ModelTypeConst.TTV, minimax_h3_ttv_model_credential, GenerationVideoModel), + ModelInfo("MiniMax-H3-Max", _(""), ModelTypeConst.TTV, minimax_h3_ttv_model_credential, GenerationVideoModel), ModelInfo("MiniMax-Hailuo-2.3", _(""), ModelTypeConst.TTV, minimax_ttv_model_credential, GenerationVideoModel), ] model_info_itv_list = [ + ModelInfo("MiniMax-H3", _(""), ModelTypeConst.ITV, minimax_h3_itv_model_credential, GenerationVideoModel), + ModelInfo("MiniMax-H3-Max", _(""), ModelTypeConst.ITV, minimax_h3_itv_model_credential, GenerationVideoModel), ModelInfo("MiniMax-Hailuo-2.3", _(""), ModelTypeConst.ITV, minimax_itv_model_credential, GenerationVideoModel), ] model_info_manage = ( diff --git a/apps/models_provider/impl/minimax_model_provider/model/ttv.py b/apps/models_provider/impl/minimax_model_provider/model/ttv.py index 7a01c5b8e36..4797c3751c2 100644 --- a/apps/models_provider/impl/minimax_model_provider/model/ttv.py +++ b/apps/models_provider/impl/minimax_model_provider/model/ttv.py @@ -71,7 +71,11 @@ def _build_session(self) -> requests.Session: # ---------- API 版本探测 / URL 构建 ---------- def _detect_api_version(self) -> str: - """根据 api_base 路径判断当前使用 V1 还是 V2 (MiniMax-H3)。""" + """探测当前使用 V1 还是 V2 (MiniMax-H3)。""" + # 模型名包含 H3 -> V2 + if self.model_name and "H3" in self.model_name.upper(): + return "v2" + # api_base 路径包含 /v2 -> V2 base_path = self.api_base.split("://", 1)[-1] if "://" in self.api_base else self.api_base if "/v2" in base_path: return "v2"