fix(models): 补齐显式横屏模型并兼容缺失监控依赖

This commit is contained in:
genz27
2026-05-03 19:57:13 +08:00
parent e882317e92
commit b9838fea98
5 changed files with 161 additions and 33 deletions

View File

@@ -187,13 +187,13 @@ Prometheus 可直接抓 `/metrics`。如果部署到 Kubernetes建议只在
| `veo_3_1_t2v_fast_ultra_relaxed` | 文生视频 | 横屏 |
| `veo_3_1_t2v_portrait` | 文生视频 | 竖屏 |
| `veo_3_1_t2v_landscape` | 文生视频 | 横屏 |
| `veo_3_1_t2v_4s` | 文生视频 4秒 | 横屏 |
| `veo_3_1_t2v_landscape_4s` | 文生视频 4秒 | 横屏 |
| `veo_3_1_t2v_portrait_4s` | 文生视频 4秒 | 竖屏 |
| `veo_3_1_t2v_6s` | 文生视频 6秒 | 横屏 |
| `veo_3_1_t2v_landscape_6s` | 文生视频 6秒 | 横屏 |
| `veo_3_1_t2v_portrait_6s` | 文生视频 6秒 | 竖屏 |
| `veo_3_1_t2v_fast_4s` | 文生视频 Fast 4秒 | 横屏 |
| `veo_3_1_t2v_fast_landscape_4s` | 文生视频 Fast 4秒 | 横屏 |
| `veo_3_1_t2v_fast_portrait_4s` | 文生视频 Fast 4秒 | 竖屏 |
| `veo_3_1_t2v_fast_6s` | 文生视频 Fast 6秒 | 横屏 |
| `veo_3_1_t2v_fast_landscape_6s` | 文生视频 Fast 6秒 | 横屏 |
| `veo_3_1_t2v_fast_portrait_6s` | 文生视频 Fast 6秒 | 竖屏 |
| `veo_3_1_t2v_lite_portrait` | 文生视频 Lite | 竖屏 |
| `veo_3_1_t2v_lite_landscape` | 文生视频 Lite | 横屏 |
@@ -221,13 +221,13 @@ Prometheus 可直接抓 `/metrics`。如果部署到 Kubernetes建议只在
| `veo_3_1_i2v_s_fast_ultra_relaxed` | 图生视频 | 横屏 |
| `veo_3_1_i2v_s_portrait` | 图生视频 | 竖屏 |
| `veo_3_1_i2v_s_landscape` | 图生视频 | 横屏 |
| `veo_3_1_i2v_s_4s` | 图生视频 4秒 | 横屏 |
| `veo_3_1_i2v_s_landscape_4s` | 图生视频 4秒 | 横屏 |
| `veo_3_1_i2v_s_portrait_4s` | 图生视频 4秒 | 竖屏 |
| `veo_3_1_i2v_s_6s` | 图生视频 6秒 | 横屏 |
| `veo_3_1_i2v_s_landscape_6s` | 图生视频 6秒 | 横屏 |
| `veo_3_1_i2v_s_portrait_6s` | 图生视频 6秒 | 竖屏 |
| `veo_3_1_i2v_s_fast_4s_fl` | 图生视频 Fast 4秒 | 横屏 |
| `veo_3_1_i2v_s_fast_landscape_4s_fl` | 图生视频 Fast 4秒 | 横屏 |
| `veo_3_1_i2v_s_fast_portrait_4s_fl` | 图生视频 Fast 4秒 | 竖屏 |
| `veo_3_1_i2v_s_fast_6s_fl` | 图生视频 Fast 6秒 | 横屏 |
| `veo_3_1_i2v_s_fast_landscape_6s_fl` | 图生视频 Fast 6秒 | 横屏 |
| `veo_3_1_i2v_s_fast_portrait_6s_fl` | 图生视频 Fast 6秒 | 竖屏 |
| `veo_3_1_i2v_lite_portrait` | 图生视频 Lite仅首帧 | 竖屏 |
| `veo_3_1_i2v_lite_landscape` | 图生视频 Lite仅首帧 | 横屏 |
@@ -258,11 +258,11 @@ Prometheus 可直接抓 `/metrics`。如果部署到 Kubernetes建议只在
| 模型名称 | 说明| 尺寸 |
|---------|---------|--------|
| `veo_3_1_r2v_fast_portrait` | 图生视频 | 竖屏 |
| `veo_3_1_r2v_fast` | 图生视频 | 横屏 |
| `veo_3_1_r2v_fast_landscape` | 图生视频 | 横屏 |
| `veo_3_1_r2v_fast_portrait_ultra` | 图生视频 | 竖屏 |
| `veo_3_1_r2v_fast_ultra` | 图生视频 | 横屏 |
| `veo_3_1_r2v_fast_landscape_ultra` | 图生视频 | 横屏 |
| `veo_3_1_r2v_fast_portrait_ultra_relaxed` | 图生视频 | 竖屏 |
| `veo_3_1_r2v_fast_ultra_relaxed` | 图生视频 | 横屏 |
| `veo_3_1_r2v_fast_landscape_ultra_relaxed` | 图生视频 | 横屏 |
#### 视频放大模型 (Upsample)
@@ -270,17 +270,17 @@ Prometheus 可直接抓 `/metrics`。如果部署到 Kubernetes建议只在
| 模型名称 | 说明 | 输出 |
|---------|---------|--------|
| `veo_3_1_t2v_4k` | 文生视频放大 | 4K |
| `veo_3_1_t2v_landscape_4k` | 文生视频放大 | 4K |
| `veo_3_1_t2v_portrait_4k` | 文生视频放大 | 4K |
| `veo_3_1_t2v_1080p` | 文生视频放大 | 1080P |
| `veo_3_1_t2v_landscape_1080p` | 文生视频放大 | 1080P |
| `veo_3_1_t2v_portrait_1080p` | 文生视频放大 | 1080P |
| `veo_3_1_t2v_4s_4k` | 文生视频 4秒放大 | 4K |
| `veo_3_1_t2v_landscape_4s_4k` | 文生视频 4秒放大 | 4K |
| `veo_3_1_t2v_portrait_4s_4k` | 文生视频 4秒放大 | 4K |
| `veo_3_1_t2v_4s_1080p` | 文生视频 4秒放大 | 1080P |
| `veo_3_1_t2v_landscape_4s_1080p` | 文生视频 4秒放大 | 1080P |
| `veo_3_1_t2v_portrait_4s_1080p` | 文生视频 4秒放大 | 1080P |
| `veo_3_1_t2v_6s_4k` | 文生视频 6秒放大 | 4K |
| `veo_3_1_t2v_landscape_6s_4k` | 文生视频 6秒放大 | 4K |
| `veo_3_1_t2v_portrait_6s_4k` | 文生视频 6秒放大 | 4K |
| `veo_3_1_t2v_6s_1080p` | 文生视频 6秒放大 | 1080P |
| `veo_3_1_t2v_landscape_6s_1080p` | 文生视频 6秒放大 | 1080P |
| `veo_3_1_t2v_portrait_6s_1080p` | 文生视频 6秒放大 | 1080P |
| `veo_3_1_t2v_fast_portrait_4k` | 文生视频放大 | 4K |
| `veo_3_1_t2v_fast_4k` | 文生视频放大 | 4K |
@@ -294,22 +294,22 @@ Prometheus 可直接抓 `/metrics`。如果部署到 Kubernetes建议只在
| `veo_3_1_i2v_s_fast_ultra_fl_4k` | 图生视频放大 | 4K |
| `veo_3_1_i2v_s_fast_portrait_ultra_fl_1080p` | 图生视频放大 | 1080P |
| `veo_3_1_i2v_s_fast_ultra_fl_1080p` | 图生视频放大 | 1080P |
| `veo_3_1_i2v_s_4k` | 图生视频放大 | 4K |
| `veo_3_1_i2v_s_landscape_4k` | 图生视频放大 | 4K |
| `veo_3_1_i2v_s_portrait_4k` | 图生视频放大 | 4K |
| `veo_3_1_i2v_s_1080p` | 图生视频放大 | 1080P |
| `veo_3_1_i2v_s_landscape_1080p` | 图生视频放大 | 1080P |
| `veo_3_1_i2v_s_portrait_1080p` | 图生视频放大 | 1080P |
| `veo_3_1_i2v_s_4s_4k` | 图生视频 4秒放大 | 4K |
| `veo_3_1_i2v_s_landscape_4s_4k` | 图生视频 4秒放大 | 4K |
| `veo_3_1_i2v_s_portrait_4s_4k` | 图生视频 4秒放大 | 4K |
| `veo_3_1_i2v_s_4s_1080p` | 图生视频 4秒放大 | 1080P |
| `veo_3_1_i2v_s_landscape_4s_1080p` | 图生视频 4秒放大 | 1080P |
| `veo_3_1_i2v_s_portrait_4s_1080p` | 图生视频 4秒放大 | 1080P |
| `veo_3_1_i2v_s_6s_4k` | 图生视频 6秒放大 | 4K |
| `veo_3_1_i2v_s_landscape_6s_4k` | 图生视频 6秒放大 | 4K |
| `veo_3_1_i2v_s_portrait_6s_4k` | 图生视频 6秒放大 | 4K |
| `veo_3_1_i2v_s_6s_1080p` | 图生视频 6秒放大 | 1080P |
| `veo_3_1_i2v_s_landscape_6s_1080p` | 图生视频 6秒放大 | 1080P |
| `veo_3_1_i2v_s_portrait_6s_1080p` | 图生视频 6秒放大 | 1080P |
| `veo_3_1_r2v_fast_portrait_ultra_4k` | 多图视频放大 | 4K |
| `veo_3_1_r2v_fast_ultra_4k` | 多图视频放大 | 4K |
| `veo_3_1_r2v_fast_landscape_ultra_4k` | 多图视频放大 | 4K |
| `veo_3_1_r2v_fast_portrait_ultra_1080p` | 多图视频放大 | 1080P |
| `veo_3_1_r2v_fast_ultra_1080p` | 多图视频放大 | 1080P |
| `veo_3_1_r2v_fast_landscape_ultra_1080p` | 多图视频放大 | 1080P |
## 📡 API 使用示例(需要使用流式)

View File

@@ -10,14 +10,45 @@ import urllib.request
from datetime import datetime, timezone
from typing import Any, Optional
from prometheus_client import (
CONTENT_TYPE_LATEST,
CollectorRegistry,
Counter,
Gauge,
Histogram,
generate_latest,
)
try:
from prometheus_client import (
CONTENT_TYPE_LATEST,
CollectorRegistry,
Counter,
Gauge,
Histogram,
generate_latest,
)
except ModuleNotFoundError:
CONTENT_TYPE_LATEST = "text/plain; version=0.0.4; charset=utf-8"
class _NoopMetric:
def __init__(self, *args: Any, **kwargs: Any):
pass
def labels(self, **kwargs: Any) -> "_NoopMetric":
return self
def inc(self, *args: Any, **kwargs: Any) -> None:
return None
def set(self, *args: Any, **kwargs: Any) -> None:
return None
def observe(self, *args: Any, **kwargs: Any) -> None:
return None
def clear(self) -> None:
return None
class CollectorRegistry:
def __init__(self, *args: Any, **kwargs: Any):
pass
Counter = Gauge = Histogram = _NoopMetric
def generate_latest(registry: Any = None) -> bytes:
return b"# prometheus_client is not installed; metrics are disabled\n"
from .config import config

View File

@@ -732,6 +732,9 @@ def _apply_veo_3_1_model_updates():
landscape = "VIDEO_ASPECT_RATIO_LANDSCAPE"
portrait = "VIDEO_ASPECT_RATIO_PORTRAIT"
def add_alias(alias: str, target: str):
MODEL_CONFIG[alias] = dict(MODEL_CONFIG[target])
# Non-fast/non-lite Veo 3.1 aliases must call Quality upstream keys.
MODEL_CONFIG["veo_3_1_t2v_landscape"].update({"model_key": "veo_3_1_t2v"})
MODEL_CONFIG["veo_3_1_t2v_portrait"].update({"model_key": "veo_3_1_t2v_portrait"})
@@ -851,6 +854,48 @@ def _apply_veo_3_1_model_updates():
"veo_3_1_i2v_s_portrait_fl", portrait, upsample=upsample
)
for seconds in (4, 6):
suffix = f"{seconds}s"
# Explicit landscape names for /v1/models; short landscape names remain compatible.
add_alias(f"veo_3_1_t2v_fast_landscape_{suffix}", f"veo_3_1_t2v_fast_{suffix}")
add_alias(f"veo_3_1_t2v_landscape_{suffix}", f"veo_3_1_t2v_{suffix}")
add_alias(f"veo_3_1_i2v_s_fast_landscape_{suffix}_fl", f"veo_3_1_i2v_s_fast_{suffix}_fl")
add_alias(f"veo_3_1_i2v_s_landscape_{suffix}", f"veo_3_1_i2v_s_{suffix}")
add_alias(f"veo_3_1_t2v_lite_landscape_{suffix}", f"veo_3_1_t2v_lite_{suffix}_landscape")
add_alias(f"veo_3_1_t2v_lite_portrait_{suffix}", f"veo_3_1_t2v_lite_{suffix}_portrait")
add_alias(f"veo_3_1_i2v_lite_landscape_{suffix}", f"veo_3_1_i2v_lite_{suffix}_landscape")
add_alias(f"veo_3_1_i2v_lite_portrait_{suffix}", f"veo_3_1_i2v_lite_{suffix}_portrait")
add_alias(
f"veo_3_1_interpolation_lite_landscape_{suffix}",
f"veo_3_1_interpolation_lite_{suffix}_landscape",
)
add_alias(
f"veo_3_1_interpolation_lite_portrait_{suffix}",
f"veo_3_1_interpolation_lite_{suffix}_portrait",
)
for resolution_name in ("4k", "1080p"):
add_alias(
f"veo_3_1_t2v_landscape_{suffix}_{resolution_name}",
f"veo_3_1_t2v_{suffix}_{resolution_name}",
)
add_alias(
f"veo_3_1_i2v_s_landscape_{suffix}_{resolution_name}",
f"veo_3_1_i2v_s_{suffix}_{resolution_name}",
)
for resolution_name in ("4k", "1080p"):
add_alias(f"veo_3_1_t2v_landscape_{resolution_name}", f"veo_3_1_t2v_{resolution_name}")
add_alias(f"veo_3_1_i2v_s_landscape_{resolution_name}", f"veo_3_1_i2v_s_{resolution_name}")
add_alias("veo_3_1_r2v_fast_landscape", "veo_3_1_r2v_fast")
add_alias("veo_3_1_r2v_fast_landscape_ultra", "veo_3_1_r2v_fast_ultra")
add_alias("veo_3_1_r2v_fast_landscape_ultra_relaxed", "veo_3_1_r2v_fast_ultra_relaxed")
add_alias("veo_3_1_r2v_fast_landscape_ultra_4k", "veo_3_1_r2v_fast_ultra_4k")
add_alias("veo_3_1_r2v_fast_landscape_ultra_1080p", "veo_3_1_r2v_fast_ultra_1080p")
_apply_veo_3_1_model_updates()

View File

@@ -188,35 +188,60 @@ const FALLBACK_MODELS = {
"imagen-4.0-generate-preview": "Image generation (alias) - aspects: landscape, portrait",
"veo_3_1_t2v_fast": "Video generation (alias) - supports landscape/portrait via generationConfig",
"veo_3_1_t2v_fast_4s": "Video generation (alias) - 4s, supports landscape/portrait via generationConfig",
"veo_3_1_t2v_fast_landscape_4s": "Video generation - fast 4s landscape",
"veo_3_1_t2v_fast_6s": "Video generation (alias) - 6s, supports landscape/portrait via generationConfig",
"veo_3_1_t2v_fast_landscape_6s": "Video generation - fast 6s landscape",
"veo_3_1_t2v_fast_ultra": "Video generation (alias) - supports landscape/portrait via generationConfig",
"veo_3_1_t2v_fast_ultra_relaxed": "Video generation (alias) - supports landscape/portrait via generationConfig",
"veo_3_1_t2v": "Video generation (alias) - supports landscape/portrait via generationConfig",
"veo_3_1_t2v_4s": "Video generation (alias) - 4s, supports landscape/portrait via generationConfig",
"veo_3_1_t2v_landscape_4s": "Video generation - quality 4s landscape",
"veo_3_1_t2v_6s": "Video generation (alias) - 6s, supports landscape/portrait via generationConfig",
"veo_3_1_t2v_landscape_6s": "Video generation - quality 6s landscape",
"veo_3_1_t2v_4k": "Video upsample alias - generate then upscale to 4K",
"veo_3_1_t2v_landscape_4k": "Video upsample alias - generate landscape then upscale to 4K",
"veo_3_1_t2v_1080p": "Video upsample alias - generate then upscale to 1080P",
"veo_3_1_t2v_landscape_1080p": "Video upsample alias - generate landscape then upscale to 1080P",
"veo_3_1_t2v_4s_4k": "Video upsample alias - generate 4s then upscale to 4K",
"veo_3_1_t2v_landscape_4s_4k": "Video upsample alias - generate 4s landscape then upscale to 4K",
"veo_3_1_t2v_4s_1080p": "Video upsample alias - generate 4s then upscale to 1080P",
"veo_3_1_t2v_landscape_4s_1080p": "Video upsample alias - generate 4s landscape then upscale to 1080P",
"veo_3_1_t2v_6s_4k": "Video upsample alias - generate 6s then upscale to 4K",
"veo_3_1_t2v_landscape_6s_4k": "Video upsample alias - generate 6s landscape then upscale to 4K",
"veo_3_1_t2v_6s_1080p": "Video upsample alias - generate 6s then upscale to 1080P",
"veo_3_1_t2v_landscape_6s_1080p": "Video upsample alias - generate 6s landscape then upscale to 1080P",
"veo_3_1_i2v_s_fast_fl": "Video generation (alias) - supports landscape/portrait via generationConfig",
"veo_3_1_i2v_s_fast_4s_fl": "Video generation (alias) - 4s, supports landscape/portrait via generationConfig",
"veo_3_1_i2v_s_fast_landscape_4s_fl": "Video generation - fast 4s landscape",
"veo_3_1_i2v_s_fast_6s_fl": "Video generation (alias) - 6s, supports landscape/portrait via generationConfig",
"veo_3_1_i2v_s_fast_landscape_6s_fl": "Video generation - fast 6s landscape",
"veo_3_1_i2v_s_fast_ultra_fl": "Video generation (alias) - supports landscape/portrait via generationConfig",
"veo_3_1_i2v_s_fast_ultra_relaxed": "Video generation (alias) - supports landscape/portrait via generationConfig",
"veo_3_1_i2v_s": "Video generation (alias) - supports landscape/portrait via generationConfig",
"veo_3_1_i2v_s_4s": "Video generation (alias) - 4s, supports landscape/portrait via generationConfig",
"veo_3_1_i2v_s_landscape_4s": "Video generation - quality 4s landscape",
"veo_3_1_i2v_s_6s": "Video generation (alias) - 6s, supports landscape/portrait via generationConfig",
"veo_3_1_i2v_s_landscape_6s": "Video generation - quality 6s landscape",
"veo_3_1_i2v_s_4k": "Video upsample alias - generate then upscale to 4K",
"veo_3_1_i2v_s_landscape_4k": "Video upsample alias - generate landscape then upscale to 4K",
"veo_3_1_i2v_s_1080p": "Video upsample alias - generate then upscale to 1080P",
"veo_3_1_i2v_s_landscape_1080p": "Video upsample alias - generate landscape then upscale to 1080P",
"veo_3_1_i2v_s_4s_4k": "Video upsample alias - generate 4s then upscale to 4K",
"veo_3_1_i2v_s_landscape_4s_4k": "Video upsample alias - generate 4s landscape then upscale to 4K",
"veo_3_1_i2v_s_4s_1080p": "Video upsample alias - generate 4s then upscale to 1080P",
"veo_3_1_i2v_s_landscape_4s_1080p": "Video upsample alias - generate 4s landscape then upscale to 1080P",
"veo_3_1_i2v_s_6s_4k": "Video upsample alias - generate 6s then upscale to 4K",
"veo_3_1_i2v_s_landscape_6s_4k": "Video upsample alias - generate 6s landscape then upscale to 4K",
"veo_3_1_i2v_s_6s_1080p": "Video upsample alias - generate 6s then upscale to 1080P",
"veo_3_1_i2v_s_landscape_6s_1080p": "Video upsample alias - generate 6s landscape then upscale to 1080P",
"veo_3_1_r2v_fast": "Video generation (alias) - supports landscape/portrait via generationConfig",
"veo_3_1_r2v_fast_landscape": "Video generation - R2V fast landscape",
"veo_3_1_r2v_fast_ultra": "Video generation (alias) - supports landscape/portrait via generationConfig",
"veo_3_1_r2v_fast_landscape_ultra": "Video generation - R2V fast ultra landscape",
"veo_3_1_r2v_fast_ultra_relaxed": "Video generation (alias) - supports landscape/portrait via generationConfig",
"veo_3_1_r2v_fast_landscape_ultra_relaxed": "Video generation - R2V fast ultra relaxed landscape",
"veo_3_1_r2v_fast_landscape_ultra_4k": "Video upsample alias - generate R2V landscape then upscale to 4K",
"veo_3_1_r2v_fast_landscape_ultra_1080p": "Video upsample alias - generate R2V landscape then upscale to 1080P",
};
let ALL_MODELS = {};

View File

@@ -105,6 +105,33 @@ class VeoLiteGenerationHandlerTests(unittest.TestCase):
self.assertEqual(cfg["upsample"]["model_key"], "veo_3_1_upsampler_1080p")
self.assertEqual(cfg["upsample"]["resolution"], "VIDEO_RESOLUTION_1080P")
def test_short_duration_models_include_explicit_landscape_aliases(self):
expected_aliases = {
"veo_3_1_t2v_landscape_4s": "veo_3_1_t2v_4s",
"veo_3_1_t2v_landscape_6s": "veo_3_1_t2v_6s",
"veo_3_1_i2v_s_landscape_4s": "veo_3_1_i2v_s_4s",
"veo_3_1_i2v_s_landscape_6s": "veo_3_1_i2v_s_6s",
"veo_3_1_t2v_landscape_4s_4k": "veo_3_1_t2v_4s_4k",
"veo_3_1_i2v_s_landscape_6s_1080p": "veo_3_1_i2v_s_6s_1080p",
}
for alias, target in expected_aliases.items():
self.assertIn(alias, MODEL_CONFIG)
self.assertEqual(MODEL_CONFIG[alias], MODEL_CONFIG[target])
def test_r2v_models_include_explicit_landscape_aliases(self):
expected_aliases = {
"veo_3_1_r2v_fast_landscape": "veo_3_1_r2v_fast",
"veo_3_1_r2v_fast_landscape_ultra": "veo_3_1_r2v_fast_ultra",
"veo_3_1_r2v_fast_landscape_ultra_relaxed": "veo_3_1_r2v_fast_ultra_relaxed",
"veo_3_1_r2v_fast_landscape_ultra_4k": "veo_3_1_r2v_fast_ultra_4k",
"veo_3_1_r2v_fast_landscape_ultra_1080p": "veo_3_1_r2v_fast_ultra_1080p",
}
for alias, target in expected_aliases.items():
self.assertIn(alias, MODEL_CONFIG)
self.assertEqual(MODEL_CONFIG[alias], MODEL_CONFIG[target])
def test_direct_upsampler_keys_are_not_public_models(self):
self.assertNotIn("veo_3_1_upsampler_4k", MODEL_CONFIG)
self.assertNotIn("veo_3_1_upsampler_1080p", MODEL_CONFIG)