Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions apps/models_provider/base_model_provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,12 @@ def get_model_credential(self, model_type, model_name):
api_base = model_credential.api_base
if hasattr(api_base, "default_value") and not api_base.default_value:
api_base.default_value = "https://dashscope.aliyuncs.com/api/v1"
# MiniMax H3 视频模型固定走 v2 API
if model_type in ("TTV", "ITV") and model_name.upper().startswith(("MiniMax-H3")):
if hasattr(model_credential, "api_base"):
api_base = model_credential.api_base
if hasattr(api_base, "default_value"):
api_base.default_value = "https://api.minimaxi.com/v2"
return model_credential

def get_model_params(self, model_type, model_name):
Expand Down
16 changes: 4 additions & 12 deletions apps/models_provider/impl/minimax_model_provider/model/ttv.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ class GenerationVideoModel(MaxKBBaseModel, BaseGenerationVideo):
api_key: str
api_base: str
model_name: str
params: dict
params: dict = {}
max_retries: int = 3
retry_delay: int = 10 # 秒

Expand All @@ -37,8 +37,6 @@ def __init__(self, **kwargs):
self.params = kwargs.get("params", {}) or {}
self.max_retries = kwargs.get("max_retries", 3)
self.retry_delay = kwargs.get("retry_delay", 10)
# 显式参数可覆盖自动探测(params.api_version: 'v1' / 'v2')
self.api_version = self.params.get("api_version", "auto")
self._session = self._build_session()

@staticmethod
Expand Down Expand Up @@ -73,13 +71,7 @@ def _build_session(self) -> requests.Session:
# ---------- API 版本探测 / URL 构建 ----------

def _detect_api_version(self) -> str:
"""探测当前使用 V1 还是 V2 (MiniMax-H3)。"""
if self.api_version in ("v1", "v2"):
return self.api_version
# 模型名包含 H3 -> V2
if self.model_name and "H3" in self.model_name.upper():
return "v2"
# api_base 路径包含 /v2 -> V2
"""根据 api_base 路径判断当前使用 V1 还是 V2 (MiniMax-H3)。"""
base_path = self.api_base.split("://", 1)[-1] if "://" in self.api_base else self.api_base
if "/v2" in base_path:
return "v2"
Expand Down Expand Up @@ -228,8 +220,8 @@ def _generate_video_v1(self, prompt, first_frame_url=None, last_frame_url=None,
elif first_frame_url:
payload["first_frame_image"] = first_frame_url

# 合并额外参数(duration, resolution 等),跳过版本探测专用字段
payload.update({k: v for k, v in self.params.items() if k != "api_version"})
# 合并额外参数(duration, resolution 等)
payload.update(self.params)

maxkb_logger.info(f"提交视频生成任务(V1),模型: {self.model_name}")
response_data = self._request("POST", base_url, json=payload)
Expand Down
Loading