Compare commits

...
Author SHA1 Message Date
Brandon Thomas a8ebc454c4 metadata for models 2026-04-16 17:59:27 -04:00
Brandon Thomas 09cd8456fd model creator 2026-04-16 17:40:59 -04:00
6 changed files with 336 additions and 13 deletions
@@ -2,6 +2,7 @@ use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
use enums::common::generation::common_image_model::CommonImageModel;
use enums::common::generation::common_quality::CommonQuality;
use enums::common::generation::common_resolution::CommonResolution;
use enums::common::generation::model_creator::ModelCreator;
use enums::common::generation_provider::GenerationProvider;
use serde_derive::{Deserialize, Serialize};
use utoipa::{IntoParams, ToSchema};
@@ -56,6 +57,9 @@ pub struct OmniGenImageProviderModelDetails {
pub struct OmniGenImageModelDetails {
pub model: CommonImageModel,
#[serde(skip_serializing_if = "Option::is_none")]
pub model_creator: Option<ModelCreator>,
#[serde(skip_serializing_if = "Option::is_none")]
pub full_name: Option<String>,
@@ -129,6 +133,7 @@ impl Default for OmniGenImageModelDetails {
fn default() -> Self {
Self {
model: CommonImageModel::NanoBananaPro,
model_creator: None,
full_name: None,
text_prompt_supported: None,
text_prompt_max_length: None,
@@ -2,6 +2,7 @@ use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
use enums::common::generation::common_quality::CommonQuality;
use enums::common::generation::common_resolution::CommonResolution;
use enums::common::generation::common_video_model::CommonVideoModel;
use enums::common::generation::model_creator::ModelCreator;
use enums::common::generation_provider::GenerationProvider;
use serde_derive::{Deserialize, Serialize};
use utoipa::{IntoParams, ToSchema};
@@ -65,6 +66,9 @@ pub struct OmniGenVideoModelDetails {
pub model: CommonVideoModel,
#[serde(skip_serializing_if = "Option::is_none")]
pub model_creator: Option<ModelCreator>,
#[serde(skip_serializing_if = "Option::is_none")]
pub full_name: Option<String>,
@@ -172,6 +176,7 @@ impl Default for OmniGenVideoModelDetails {
fn default() -> Self {
Self {
model: DEFAULT_VIDEO_MODEL,
model_creator: None,
full_name: None,
text_prompt_supported: None,
text_prompt_max_length: None,
@@ -4,6 +4,7 @@ pub mod common_image_model;
pub mod common_quality;
pub mod common_model_class;
pub mod common_model_type;
pub mod model_creator;
pub mod common_resolution;
pub mod common_splat_model;
pub mod common_video_model;
@@ -0,0 +1,280 @@
use std::collections::BTreeSet;
use utoipa::ToSchema;
#[cfg(test)]
use strum::EnumCount;
#[cfg(test)]
use strum::EnumIter;
/// The company or organization that created a model.
#[cfg_attr(test, derive(EnumIter, EnumCount))]
#[derive(Clone, Copy, Eq, PartialEq, Hash, Ord, PartialOrd, Serialize, Deserialize, ToSchema)]
pub enum ModelCreator {
#[serde(rename = "alibaba")]
Alibaba,
#[serde(rename = "artcraft")]
ArtCraft,
#[serde(rename = "black_forest_labs")]
BlackForestLabs,
#[serde(rename = "bytedance")]
Bytedance,
#[serde(rename = "fal")]
Fal,
#[serde(rename = "google")]
Google,
#[serde(rename = "grok")]
Grok,
#[serde(rename = "hailuo")]
Hailuo,
#[serde(rename = "higgsfield")]
Higgsfield,
#[serde(rename = "kling")]
Kling,
#[serde(rename = "krea")]
Krea,
#[serde(rename = "midjourney")]
Midjourney,
#[serde(rename = "open_ai")]
OpenAi,
#[serde(rename = "open_art")]
OpenArt,
#[serde(rename = "recraft")]
Recraft,
#[serde(rename = "replicate")]
Replicate,
#[serde(rename = "runway")]
Runway,
#[serde(rename = "stability")]
Stability,
#[serde(rename = "tencent")]
Tencent,
#[serde(rename = "tensor_art")]
TensorArt,
#[serde(rename = "vidu")]
Vidu,
#[serde(rename = "world_labs")]
WorldLabs,
}
impl ModelCreator {
/// Returns the properly formatted human-readable name.
pub fn get_name(&self) -> &'static str {
match self {
Self::Alibaba => "Alibaba",
Self::ArtCraft => "ArtCraft",
Self::BlackForestLabs => "Black Forest Labs",
Self::Bytedance => "ByteDance",
Self::Fal => "fal",
Self::Google => "Google",
Self::Grok => "Grok",
Self::Hailuo => "Hailuo",
Self::Higgsfield => "Higgsfield",
Self::Kling => "Kling",
Self::Krea => "Krea",
Self::Midjourney => "Midjourney",
Self::OpenAi => "OpenAI",
Self::OpenArt => "OpenArt",
Self::Recraft => "Recraft",
Self::Replicate => "Replicate",
Self::Runway => "Runway",
Self::Stability => "Stability AI",
Self::Tencent => "Tencent",
Self::TensorArt => "TensorArt",
Self::Vidu => "Vidu",
Self::WorldLabs => "World Labs",
}
}
pub fn to_str(&self) -> &'static str {
match self {
Self::Alibaba => "alibaba",
Self::ArtCraft => "artcraft",
Self::BlackForestLabs => "black_forest_labs",
Self::Bytedance => "bytedance",
Self::Fal => "fal",
Self::Google => "google",
Self::Grok => "grok",
Self::Hailuo => "hailuo",
Self::Higgsfield => "higgsfield",
Self::Kling => "kling",
Self::Krea => "krea",
Self::Midjourney => "midjourney",
Self::OpenAi => "open_ai",
Self::OpenArt => "open_art",
Self::Recraft => "recraft",
Self::Replicate => "replicate",
Self::Runway => "runway",
Self::Stability => "stability",
Self::Tencent => "tencent",
Self::TensorArt => "tensor_art",
Self::Vidu => "vidu",
Self::WorldLabs => "world_labs",
}
}
pub fn from_str(value: &str) -> Result<Self, String> {
match value {
"alibaba" => Ok(Self::Alibaba),
"artcraft" => Ok(Self::ArtCraft),
"black_forest_labs" => Ok(Self::BlackForestLabs),
"bytedance" => Ok(Self::Bytedance),
"fal" => Ok(Self::Fal),
"google" => Ok(Self::Google),
"grok" => Ok(Self::Grok),
"hailuo" => Ok(Self::Hailuo),
"higgsfield" => Ok(Self::Higgsfield),
"kling" => Ok(Self::Kling),
"krea" => Ok(Self::Krea),
"midjourney" => Ok(Self::Midjourney),
"open_ai" => Ok(Self::OpenAi),
"open_art" => Ok(Self::OpenArt),
"recraft" => Ok(Self::Recraft),
"replicate" => Ok(Self::Replicate),
"runway" => Ok(Self::Runway),
"stability" => Ok(Self::Stability),
"tencent" => Ok(Self::Tencent),
"tensor_art" => Ok(Self::TensorArt),
"vidu" => Ok(Self::Vidu),
"world_labs" => Ok(Self::WorldLabs),
_ => Err(format!("invalid ModelCreator value: {:?}", value)),
}
}
pub fn all_variants() -> BTreeSet<Self> {
BTreeSet::from([
Self::Alibaba,
Self::ArtCraft,
Self::BlackForestLabs,
Self::Bytedance,
Self::Fal,
Self::Google,
Self::Grok,
Self::Hailuo,
Self::Higgsfield,
Self::Kling,
Self::Krea,
Self::Midjourney,
Self::OpenAi,
Self::OpenArt,
Self::Recraft,
Self::Replicate,
Self::Runway,
Self::Stability,
Self::Tencent,
Self::TensorArt,
Self::Vidu,
Self::WorldLabs,
])
}
}
impl_enum_display_and_debug_using_to_str!(ModelCreator);
#[cfg(test)]
mod tests {
use crate::common::generation::model_creator::ModelCreator;
use crate::test_helpers::assert_serialization;
mod explicit_checks {
use super::*;
#[test]
fn test_serialization() {
assert_serialization(ModelCreator::Alibaba, "alibaba");
assert_serialization(ModelCreator::ArtCraft, "artcraft");
assert_serialization(ModelCreator::BlackForestLabs, "black_forest_labs");
assert_serialization(ModelCreator::Bytedance, "bytedance");
assert_serialization(ModelCreator::Fal, "fal");
assert_serialization(ModelCreator::Google, "google");
assert_serialization(ModelCreator::Grok, "grok");
assert_serialization(ModelCreator::Hailuo, "hailuo");
assert_serialization(ModelCreator::Higgsfield, "higgsfield");
assert_serialization(ModelCreator::Kling, "kling");
assert_serialization(ModelCreator::Krea, "krea");
assert_serialization(ModelCreator::Midjourney, "midjourney");
assert_serialization(ModelCreator::OpenAi, "open_ai");
assert_serialization(ModelCreator::OpenArt, "open_art");
assert_serialization(ModelCreator::Recraft, "recraft");
assert_serialization(ModelCreator::Replicate, "replicate");
assert_serialization(ModelCreator::Runway, "runway");
assert_serialization(ModelCreator::Stability, "stability");
assert_serialization(ModelCreator::Tencent, "tencent");
assert_serialization(ModelCreator::TensorArt, "tensor_art");
assert_serialization(ModelCreator::Vidu, "vidu");
assert_serialization(ModelCreator::WorldLabs, "world_labs");
}
#[test]
fn to_str() {
assert_eq!(ModelCreator::Alibaba.to_str(), "alibaba");
assert_eq!(ModelCreator::ArtCraft.to_str(), "artcraft");
assert_eq!(ModelCreator::BlackForestLabs.to_str(), "black_forest_labs");
assert_eq!(ModelCreator::OpenAi.to_str(), "open_ai");
assert_eq!(ModelCreator::WorldLabs.to_str(), "world_labs");
}
#[test]
fn from_str() {
assert_eq!(ModelCreator::from_str("alibaba").unwrap(), ModelCreator::Alibaba);
assert_eq!(ModelCreator::from_str("artcraft").unwrap(), ModelCreator::ArtCraft);
assert_eq!(ModelCreator::from_str("black_forest_labs").unwrap(), ModelCreator::BlackForestLabs);
assert_eq!(ModelCreator::from_str("open_ai").unwrap(), ModelCreator::OpenAi);
assert_eq!(ModelCreator::from_str("world_labs").unwrap(), ModelCreator::WorldLabs);
assert!(ModelCreator::from_str("invalid").is_err());
}
#[test]
fn get_name() {
assert_eq!(ModelCreator::Alibaba.get_name(), "Alibaba");
assert_eq!(ModelCreator::ArtCraft.get_name(), "ArtCraft");
assert_eq!(ModelCreator::BlackForestLabs.get_name(), "Black Forest Labs");
assert_eq!(ModelCreator::Bytedance.get_name(), "ByteDance");
assert_eq!(ModelCreator::Fal.get_name(), "fal");
assert_eq!(ModelCreator::Google.get_name(), "Google");
assert_eq!(ModelCreator::OpenAi.get_name(), "OpenAI");
assert_eq!(ModelCreator::Stability.get_name(), "Stability AI");
assert_eq!(ModelCreator::WorldLabs.get_name(), "World Labs");
}
#[test]
fn all_variants() {
const EXPECTED_COUNT: usize = 22;
assert_eq!(ModelCreator::all_variants().len(), EXPECTED_COUNT);
}
}
mod mechanical_checks {
use super::*;
#[test]
fn variant_length() {
use strum::IntoEnumIterator;
assert_eq!(ModelCreator::all_variants().len(), ModelCreator::iter().len());
}
#[test]
fn round_trip() {
for variant in ModelCreator::all_variants() {
assert_eq!(variant, ModelCreator::from_str(variant.to_str()).unwrap());
}
}
#[test]
fn serialized_length_ok_for_database() {
const MAX_LENGTH: usize = 32;
for variant in ModelCreator::all_variants() {
let serialized = variant.to_str();
assert!(!serialized.is_empty());
assert!(serialized.len() <= MAX_LENGTH, "variant {:?} is too long for VARCHAR({})", variant, MAX_LENGTH);
}
}
#[test]
fn every_variant_has_a_human_name() {
for variant in ModelCreator::all_variants() {
let name = variant.get_name();
assert!(!name.is_empty(), "variant {:?} has empty name", variant);
}
}
}
}
@@ -2,6 +2,7 @@ use artcraft_api_defs::omni_gen::models::omni_gen_image_models::{OmniGenImageMod
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
use enums::common::generation::common_image_model::CommonImageModel;
use enums::common::generation::common_resolution::CommonResolution;
use enums::common::generation::model_creator::ModelCreator;
use enums::common::generation_provider::GenerationProvider;
use once_cell::sync::Lazy;
use enums::common::generation::common_quality::CommonQuality;
@@ -21,7 +22,8 @@ fn build_omni_gen_image_models() -> Vec<OmniGenImageModelDetails> {
models.push(OmniGenImageModelDetails {
model: CommonImageModel::Flux1Dev,
full_name: None,
model_creator: Some(ModelCreator::BlackForestLabs),
full_name: Some("FLUX.1 [dev]".to_string()),
text_prompt_supported: Some(true),
aspect_ratio_options: Some(vec![
CommonAspectRatio::SquareHd,
@@ -40,7 +42,8 @@ fn build_omni_gen_image_models() -> Vec<OmniGenImageModelDetails> {
models.push(OmniGenImageModelDetails {
model: CommonImageModel::Flux1Schnell,
full_name: None,
model_creator: Some(ModelCreator::BlackForestLabs),
full_name: Some("FLUX.1 [schnell]".to_string()),
text_prompt_supported: Some(true),
aspect_ratio_options: Some(vec![
CommonAspectRatio::SquareHd,
@@ -59,6 +62,7 @@ fn build_omni_gen_image_models() -> Vec<OmniGenImageModelDetails> {
models.push(OmniGenImageModelDetails {
model: CommonImageModel::FluxPro11,
model_creator: Some(ModelCreator::BlackForestLabs),
full_name: Some("FLUX 1.1 [pro]".to_string()),
text_prompt_supported: Some(true),
aspect_ratio_options: Some(vec![
@@ -78,6 +82,7 @@ fn build_omni_gen_image_models() -> Vec<OmniGenImageModelDetails> {
models.push(OmniGenImageModelDetails {
model: CommonImageModel::FluxPro11Ultra,
model_creator: Some(ModelCreator::BlackForestLabs),
full_name: Some("FLUX 1.1 [pro] ultra".to_string()),
text_prompt_supported: Some(true),
aspect_ratio_options: Some(vec![
@@ -100,7 +105,8 @@ fn build_omni_gen_image_models() -> Vec<OmniGenImageModelDetails> {
models.push(OmniGenImageModelDetails {
model: CommonImageModel::NanoBanana, // NB: currently Gemini25Flash in our system
full_name: None,
model_creator: Some(ModelCreator::ArtCraft),
full_name: Some("Nano Banana".to_string()),
text_prompt_supported: Some(true),
image_refs_supported: Some(true),
aspect_ratio_options: Some(vec![
@@ -126,7 +132,8 @@ fn build_omni_gen_image_models() -> Vec<OmniGenImageModelDetails> {
models.push(OmniGenImageModelDetails {
model: CommonImageModel::NanoBanana2,
full_name: None,
model_creator: Some(ModelCreator::ArtCraft),
full_name: Some("Nano Banana 2".to_string()),
text_prompt_supported: Some(true),
image_refs_supported: Some(true),
aspect_ratio_options: Some(vec![
@@ -159,7 +166,8 @@ fn build_omni_gen_image_models() -> Vec<OmniGenImageModelDetails> {
models.push(OmniGenImageModelDetails {
model: CommonImageModel::NanoBananaPro,
full_name: None,
model_creator: Some(ModelCreator::ArtCraft),
full_name: Some("Nano Banana Pro".to_string()),
text_prompt_supported: Some(true),
image_refs_supported: Some(true),
aspect_ratio_options: Some(vec![
@@ -191,6 +199,7 @@ fn build_omni_gen_image_models() -> Vec<OmniGenImageModelDetails> {
models.push(OmniGenImageModelDetails {
model: CommonImageModel::GptImage1,
model_creator: Some(ModelCreator::OpenAi),
full_name: Some("GPT Image 1".to_string()),
text_prompt_supported: Some(true),
image_refs_supported: Some(true),
@@ -214,6 +223,7 @@ fn build_omni_gen_image_models() -> Vec<OmniGenImageModelDetails> {
models.push(OmniGenImageModelDetails {
model: CommonImageModel::GptImage1p5,
model_creator: Some(ModelCreator::OpenAi),
full_name: Some("GPT Image 1.5".to_string()),
text_prompt_supported: Some(true),
image_refs_supported: Some(true),
@@ -237,6 +247,7 @@ fn build_omni_gen_image_models() -> Vec<OmniGenImageModelDetails> {
models.push(OmniGenImageModelDetails {
model: CommonImageModel::Seedream4,
model_creator: Some(ModelCreator::Bytedance),
full_name: Some("Seedream 4".to_string()),
text_prompt_supported: Some(true),
image_refs_supported: Some(true),
@@ -261,6 +272,7 @@ fn build_omni_gen_image_models() -> Vec<OmniGenImageModelDetails> {
models.push(OmniGenImageModelDetails {
model: CommonImageModel::Seedream4p5,
model_creator: Some(ModelCreator::Bytedance),
full_name: Some("Seedream 4.5".to_string()),
text_prompt_supported: Some(true),
image_refs_supported: Some(true),
@@ -284,6 +296,7 @@ fn build_omni_gen_image_models() -> Vec<OmniGenImageModelDetails> {
models.push(OmniGenImageModelDetails {
model: CommonImageModel::Seedream5Lite,
model_creator: Some(ModelCreator::Bytedance),
full_name: Some("Seedream 5 Lite".to_string()),
text_prompt_supported: Some(true),
image_refs_supported: Some(true),
@@ -2,6 +2,7 @@ use artcraft_api_defs::omni_gen::models::omni_gen_video_models::{OmniGenVideoMod
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
use enums::common::generation::common_resolution::CommonResolution;
use enums::common::generation::common_video_model::CommonVideoModel;
use enums::common::generation::model_creator::ModelCreator;
use enums::common::generation_provider::GenerationProvider;
use once_cell::sync::Lazy;
@@ -20,7 +21,8 @@ fn build_omni_gen_video_models() -> Vec<OmniGenVideoModelDetails> {
models.push(OmniGenVideoModelDetails {
model: CommonVideoModel::Seedance1p5Pro,
full_name: None,
model_creator: Some(ModelCreator::Bytedance),
full_name: Some("Seedance 1.5 Pro".to_string()),
text_prompt_supported: Some(true),
starting_keyframe_supported: Some(true),
ending_keyframe_supported: Some(true),
@@ -49,7 +51,8 @@ fn build_omni_gen_video_models() -> Vec<OmniGenVideoModelDetails> {
models.push(OmniGenVideoModelDetails {
model: CommonVideoModel::Seedance2p0,
full_name: None,
model_creator: Some(ModelCreator::Bytedance),
full_name: Some("Seedance 2.0".to_string()),
text_prompt_supported: Some(true),
starting_keyframe_supported: Some(true),
ending_keyframe_supported: Some(true),
@@ -81,7 +84,8 @@ fn build_omni_gen_video_models() -> Vec<OmniGenVideoModelDetails> {
models.push(OmniGenVideoModelDetails {
model: CommonVideoModel::Seedance2p0Fast,
full_name: None,
model_creator: Some(ModelCreator::Bytedance),
full_name: Some("Seedance 2.0 Fast".to_string()),
text_prompt_supported: Some(true),
starting_keyframe_supported: Some(true),
ending_keyframe_supported: Some(true),
@@ -115,7 +119,8 @@ fn build_omni_gen_video_models() -> Vec<OmniGenVideoModelDetails> {
models.push(OmniGenVideoModelDetails {
is_disabled: Some(true), // TODO: Temporarily disable
model: CommonVideoModel::Veo2,
full_name: Some("Google Veo 2".to_string()),
model_creator: Some(ModelCreator::Google),
full_name: Some("Veo 2".to_string()),
text_prompt_supported: Some(true),
starting_keyframe_supported: Some(true),
// TODO(bt,2026-04-10): Veo 2 image-to-video doesn't support aspect ratio
@@ -134,7 +139,8 @@ fn build_omni_gen_video_models() -> Vec<OmniGenVideoModelDetails> {
models.push(OmniGenVideoModelDetails {
is_disabled: Some(true), // TODO: Temporarily disable
model: CommonVideoModel::Veo3,
full_name: Some("Google Veo 3".to_string()),
model_creator: Some(ModelCreator::Google),
full_name: Some("Veo 3".to_string()),
text_prompt_supported: Some(true),
starting_keyframe_supported: Some(true),
show_generate_with_sound_toggle: Some(true),
@@ -158,7 +164,8 @@ fn build_omni_gen_video_models() -> Vec<OmniGenVideoModelDetails> {
models.push(OmniGenVideoModelDetails {
model: CommonVideoModel::Veo3Fast,
full_name: Some("Google Veo 3 Fast".to_string()),
model_creator: Some(ModelCreator::Google),
full_name: Some("Veo 3 Fast".to_string()),
text_prompt_supported: Some(true),
starting_keyframe_supported: Some(true),
show_generate_with_sound_toggle: Some(true),
@@ -176,7 +183,8 @@ fn build_omni_gen_video_models() -> Vec<OmniGenVideoModelDetails> {
models.push(OmniGenVideoModelDetails {
is_disabled: Some(true), // TODO: Temporarily disable
model: CommonVideoModel::Veo3p1,
full_name: Some("Google Veo 3.1".to_string()),
model_creator: Some(ModelCreator::Google),
full_name: Some("Veo 3.1".to_string()),
text_prompt_supported: Some(true),
starting_keyframe_supported: Some(true),
ending_keyframe_supported: Some(true),
@@ -201,7 +209,8 @@ fn build_omni_gen_video_models() -> Vec<OmniGenVideoModelDetails> {
models.push(OmniGenVideoModelDetails {
is_disabled: Some(true), // TODO: Temporarily disable
model: CommonVideoModel::Veo3p1Fast,
full_name: Some("Google Veo 3.1 Fast".to_string()),
model_creator: Some(ModelCreator::Google),
full_name: Some("Veo 3.1 Fast".to_string()),
text_prompt_supported: Some(true),
starting_keyframe_supported: Some(true),
ending_keyframe_supported: Some(true),
@@ -226,6 +235,7 @@ fn build_omni_gen_video_models() -> Vec<OmniGenVideoModelDetails> {
models.push(OmniGenVideoModelDetails {
is_disabled: Some(true), // TODO: Temporarily disable
model: CommonVideoModel::Kling16Pro,
model_creator: Some(ModelCreator::Kling),
full_name: Some("Kling 1.6 Pro".to_string()),
starting_keyframe_supported: Some(true),
ending_keyframe_supported: Some(true),
@@ -243,6 +253,7 @@ fn build_omni_gen_video_models() -> Vec<OmniGenVideoModelDetails> {
models.push(OmniGenVideoModelDetails {
is_disabled: Some(true), // TODO: Temporarily disable
model: CommonVideoModel::Kling21Pro,
model_creator: Some(ModelCreator::Kling),
full_name: Some("Kling 2.1 Pro".to_string()),
starting_keyframe_supported: Some(true),
ending_keyframe_supported: Some(true),
@@ -260,6 +271,7 @@ fn build_omni_gen_video_models() -> Vec<OmniGenVideoModelDetails> {
models.push(OmniGenVideoModelDetails {
is_disabled: Some(true), // TODO: Temporarily disable
model: CommonVideoModel::Kling21Master,
model_creator: Some(ModelCreator::Kling),
full_name: Some("Kling 2.1 Master".to_string()),
starting_keyframe_supported: Some(true),
aspect_ratio_options: Some(vec![
@@ -276,6 +288,7 @@ fn build_omni_gen_video_models() -> Vec<OmniGenVideoModelDetails> {
models.push(OmniGenVideoModelDetails {
is_disabled: Some(true), // TODO: Temporarily disable
model: CommonVideoModel::Kling2p5TurboPro,
model_creator: Some(ModelCreator::Kling),
full_name: Some("Kling 2.5 Turbo Pro".to_string()),
text_prompt_supported: Some(true),
starting_keyframe_supported: Some(true),
@@ -294,6 +307,7 @@ fn build_omni_gen_video_models() -> Vec<OmniGenVideoModelDetails> {
models.push(OmniGenVideoModelDetails {
is_disabled: Some(true), // TODO: Temporarily disable
model: CommonVideoModel::Kling2p6Pro,
model_creator: Some(ModelCreator::Kling),
full_name: Some("Kling 2.6 Pro".to_string()),
text_prompt_supported: Some(true),
starting_keyframe_supported: Some(true),
@@ -312,6 +326,7 @@ fn build_omni_gen_video_models() -> Vec<OmniGenVideoModelDetails> {
models.push(OmniGenVideoModelDetails {
is_disabled: Some(true), // TODO: Temporarily disable
model: CommonVideoModel::Kling3p0Pro,
model_creator: Some(ModelCreator::Kling),
full_name: Some("Kling 3.0 Pro".to_string()),
text_prompt_supported: Some(true),
starting_keyframe_supported: Some(true),
@@ -332,6 +347,7 @@ fn build_omni_gen_video_models() -> Vec<OmniGenVideoModelDetails> {
models.push(OmniGenVideoModelDetails {
is_disabled: Some(true), // TODO: Temporarily disable
model: CommonVideoModel::Kling3p0Standard,
model_creator: Some(ModelCreator::Kling),
full_name: Some("Kling 3.0 Standard".to_string()),
text_prompt_supported: Some(true),
starting_keyframe_supported: Some(true),
@@ -352,6 +368,7 @@ fn build_omni_gen_video_models() -> Vec<OmniGenVideoModelDetails> {
models.push(OmniGenVideoModelDetails {
is_disabled: Some(true), // TODO: Temporarily disable
model: CommonVideoModel::Seedance10Lite,
model_creator: Some(ModelCreator::Bytedance),
full_name: Some("Seedance 1.0 Lite".to_string()),
starting_keyframe_supported: Some(true),
ending_keyframe_supported: Some(true),
@@ -379,6 +396,7 @@ fn build_omni_gen_video_models() -> Vec<OmniGenVideoModelDetails> {
models.push(OmniGenVideoModelDetails {
is_disabled: Some(true), // TODO: Temporarily disable
model: CommonVideoModel::Sora2,
model_creator: Some(ModelCreator::OpenAi),
full_name: Some("Sora 2".to_string()),
text_prompt_supported: Some(true),
starting_keyframe_supported: Some(true),
@@ -397,6 +415,7 @@ fn build_omni_gen_video_models() -> Vec<OmniGenVideoModelDetails> {
models.push(OmniGenVideoModelDetails {
is_disabled: Some(true), // TODO: Temporarily disable
model: CommonVideoModel::Sora2Pro,
model_creator: Some(ModelCreator::OpenAi),
full_name: Some("Sora 2 Pro".to_string()),
text_prompt_supported: Some(true),
starting_keyframe_supported: Some(true),