grok video enums

This commit is contained in:
Brandon Thomas committed 2025-10-31 03:36:07 -04:00
1 parent 57534c7a77
commit 706bdb8d83
5 files changed
+35 -16

No files matched your search

@@ -28,8 +28,8 @@ use crate::services::grok::state::grok_credential_manager::GrokCredentialManager
#[derive(Deserialize, Debug, Copy, Clone)]
#[serde(rename_all = "snake_case")]
pub enum VideoModel {
#[serde(rename = "grok")]
Grok,
#[serde(rename = "grok_video")]
GrokVideo,
#[serde(rename = "kling_1.6_pro")]
Kling16Pro,
@@ -213,7 +213,7 @@ pub async fn handle_request(
) -> Result<TaskEnqueueSuccess, GenerateError> {
let result = match request.model {
Some(VideoModel::Grok) => {
Some(VideoModel::GrokVideo) => {
handle_grok_video(
&request,
app,
@@ -71,16 +71,14 @@ pub async fn handle_video_artcraft(
None => {
return Err(GenerateError::no_model_specified());
}
Some(VideoModel::Grok) => {
Some(
VideoModel::GrokVideo |
VideoModel::Sora2
) => {
return Err(GenerateError::AnyhowError(
anyhow!("wrong logic: another branch should handle this: {:?}",
request.model)));
}
Some(VideoModel::Sora2) => {
return Err(GenerateError::AnyhowError(
anyhow!("wrong logic: another branch should handle this: {:?}",
request.model)));
}
Some(VideoModel::Kling16Pro) => {
info!("enqueue Kling 1.6 Pro with Artcraft API");
selected_model = Some(GenerationModel::Kling1_6);
@@ -221,8 +221,8 @@ async fn upload_grok_video(
uuid_idempotency_token: generate_random_uuid(),
positive_prompt: grok_video_post.prompt.clone(),
negative_prompt: None,
model_type: Some(ModelType::Midjourney), // TODO: TEMP
generation_provider: Some(GenerationProvider::Midjourney), // TODO: TEMP
model_type: Some(ModelType::GrokVideo),
generation_provider: Some(GenerationProvider::Grok),
};
let prompt_response = create_prompt(
@@ -339,7 +339,7 @@ async fn upload_grok_video(
let event = GenerationCompleteEvent {
//media_file_token: result.media_file_token,
action: Some(GenerationAction::GenerateVideo),
service: GenerationServiceProvider::Midjourney, // TODO
service: GenerationServiceProvider::Grok,
model: None,
};
@@ -29,6 +29,9 @@ pub enum ModelType {
FluxProKontextMax,
#[serde(rename = "gpt_image_1")]
GptImage1,
// Generic grok image model without a version
#[serde(rename = "grok_image")]
GrokImage,
#[serde(rename = "recraft_3")]
Recraft3,
#[serde(rename = "seededit_3")]
@@ -61,6 +64,10 @@ pub enum ModelType {
//FluxPro1Infill,
// Video models
// Generic grok video model without a version
#[serde(rename = "grok_video")]
GrokVideo,
#[serde(rename = "kling_1p6_pro")]
Kling16Pro,
#[serde(rename = "kling_2p1_pro")]
@@ -105,6 +112,7 @@ impl ModelType {
Self::FluxPro11Ultra => "flux_pro_1p1_ultra",
Self::FluxProKontextMax => "flux_pro_kontext_max",
Self::GptImage1 => "gpt_image_1",
Self::GrokImage => "grok_image",
Self::Recraft3 => "recraft_3",
Self::SeedEdit3 => "seededit_3",
Self::Qwen => "qwen",
@@ -119,6 +127,7 @@ impl ModelType {
Self::MidjourneyV7Raw => "midjourney_v7_raw",
// Video models
Self::GrokVideo => "grok_video",
Self::Kling16Pro => "kling_1p6_pro",
Self::Kling21Pro => "kling_2p1_pro",
Self::Kling21Master => "kling_2p1_master",
@@ -146,6 +155,7 @@ impl ModelType {
"flux_pro_1p1_ultra" => Ok(Self::FluxPro11Ultra),
"flux_pro_kontext_max" => Ok(Self::FluxProKontextMax),
"gpt_image_1" => Ok(Self::GptImage1),
"grok_image" => Ok(Self::GrokImage),
"recraft_3" => Ok(Self::Recraft3),
"seededit_3" => Ok(Self::SeedEdit3),
"qwen" => Ok(Self::Qwen),
@@ -160,6 +170,7 @@ impl ModelType {
"midjourney_v7_raw" => Ok(Self::MidjourneyV7Raw),
// Video models
"grok_video" => Ok(Self::GrokVideo),
"kling_1p6_pro" => Ok(Self::Kling16Pro),
"kling_2p1_pro" => Ok(Self::Kling21Pro),
"kling_2p1_master" => Ok(Self::Kling21Master),
@@ -191,6 +202,7 @@ impl ModelType {
Self::FluxPro11Ultra,
Self::FluxProKontextMax,
Self::GptImage1,
Self::GrokImage,
Self::Recraft3,
Self::SeedEdit3,
Self::Qwen,
@@ -205,6 +217,7 @@ impl ModelType {
Self::MidjourneyV7Raw,
// Video models
Self::GrokVideo,
Self::Kling16Pro,
Self::Kling21Pro,
Self::Kling21Master,
@@ -241,6 +254,7 @@ mod tests {
assert_serialization(ModelType::FluxPro11Ultra, "flux_pro_1p1_ultra");
assert_serialization(ModelType::FluxProKontextMax, "flux_pro_kontext_max");
assert_serialization(ModelType::GptImage1, "gpt_image_1");
assert_serialization(ModelType::GrokImage, "grok_image");
assert_serialization(ModelType::Recraft3, "recraft_3");
assert_serialization(ModelType::SeedEdit3, "seededit_3");
assert_serialization(ModelType::Qwen, "qwen");
@@ -254,6 +268,7 @@ mod tests {
assert_serialization(ModelType::MidjourneyV7DraftRaw, "midjourney_v7_draft_raw");
assert_serialization(ModelType::MidjourneyV7Raw, "midjourney_v7_raw");
// Video models
assert_serialization(ModelType::GrokVideo, "grok_video");
assert_serialization(ModelType::Kling16Pro, "kling_1p6_pro");
assert_serialization(ModelType::Kling21Pro, "kling_2p1_pro");
assert_serialization(ModelType::Kling21Master, "kling_2p1_master");
@@ -279,6 +294,7 @@ mod tests {
assert_eq!(ModelType::FluxPro11Ultra.to_str(), "flux_pro_1p1_ultra");
assert_eq!(ModelType::FluxProKontextMax.to_str(), "flux_pro_kontext_max");
assert_eq!(ModelType::GptImage1.to_str(), "gpt_image_1");
assert_eq!(ModelType::GrokImage.to_str(), "grok_image");
assert_eq!(ModelType::Recraft3.to_str(), "recraft_3");
assert_eq!(ModelType::SeedEdit3.to_str(), "seededit_3");
assert_eq!(ModelType::Qwen.to_str(), "qwen");
@@ -293,6 +309,7 @@ mod tests {
assert_eq!(ModelType::MidjourneyV7Raw.to_str(), "midjourney_v7_raw");
// Video models
assert_eq!(ModelType::GrokVideo.to_str(), "grok_video");
assert_eq!(ModelType::Kling16Pro.to_str(), "kling_1p6_pro");
assert_eq!(ModelType::Kling21Pro.to_str(), "kling_2p1_pro");
assert_eq!(ModelType::Kling21Master.to_str(), "kling_2p1_master");
@@ -319,6 +336,7 @@ mod tests {
assert_eq!(ModelType::from_str("flux_pro_1p1_ultra").unwrap(), ModelType::FluxPro11Ultra);
assert_eq!(ModelType::from_str("flux_pro_kontext_max").unwrap(), ModelType::FluxProKontextMax);
assert_eq!(ModelType::from_str("gpt_image_1").unwrap(), ModelType::GptImage1);
assert_eq!(ModelType::from_str("grok_image").unwrap(), ModelType::GrokImage);
assert_eq!(ModelType::from_str("recraft_3").unwrap(), ModelType::Recraft3);
assert_eq!(ModelType::from_str("seededit_3").unwrap(), ModelType::SeedEdit3);
assert_eq!(ModelType::from_str("qwen").unwrap(), ModelType::Qwen);
@@ -332,6 +350,7 @@ mod tests {
assert_eq!(ModelType::from_str("midjourney_v7_draft_raw").unwrap(), ModelType::MidjourneyV7DraftRaw);
assert_eq!(ModelType::from_str("midjourney_v7_raw").unwrap(), ModelType::MidjourneyV7Raw);
// Video models
assert_eq!(ModelType::from_str("grok_video").unwrap(), ModelType::GrokVideo);
assert_eq!(ModelType::from_str("kling_1p6_pro").unwrap(), ModelType::Kling16Pro);
assert_eq!(ModelType::from_str("kling_2p1_pro").unwrap(), ModelType::Kling21Pro);
assert_eq!(ModelType::from_str("kling_2p1_master").unwrap(), ModelType::Kling21Master);
@@ -349,7 +368,7 @@ mod tests {
#[test]
fn all_variants() {
let mut variants = ModelType::all_variants();
assert_eq!(variants.len(), 31);
assert_eq!(variants.len(), 33);
// Image models
assert_eq!(variants.pop_first(), Some(ModelType::Flux1Dev));
assert_eq!(variants.pop_first(), Some(ModelType::Flux1Schnell));
@@ -359,6 +378,7 @@ mod tests {
assert_eq!(variants.pop_first(), Some(ModelType::FluxPro11Ultra));
assert_eq!(variants.pop_first(), Some(ModelType::FluxProKontextMax));
assert_eq!(variants.pop_first(), Some(ModelType::GptImage1));
assert_eq!(variants.pop_first(), Some(ModelType::GrokImage));
assert_eq!(variants.pop_first(), Some(ModelType::Recraft3));
assert_eq!(variants.pop_first(), Some(ModelType::SeedEdit3));
assert_eq!(variants.pop_first(), Some(ModelType::Qwen));
@@ -372,6 +392,7 @@ mod tests {
assert_eq!(variants.pop_first(), Some(ModelType::MidjourneyV7DraftRaw));
assert_eq!(variants.pop_first(), Some(ModelType::MidjourneyV7Raw));
// Video models
assert_eq!(variants.pop_first(), Some(ModelType::GrokVideo));
assert_eq!(variants.pop_first(), Some(ModelType::Kling16Pro));
assert_eq!(variants.pop_first(), Some(ModelType::Kling21Pro));
assert_eq!(variants.pop_first(), Some(ModelType::Kling21Master));
@@ -4,11 +4,11 @@ import { SizeIconOption } from "../classes/metadata/SizeOption.js";
export const VIDEO_MODELS: VideoModel[] = [
new VideoModel({
id: "grok",
tauriId: "grok",
id: "grok_video",
tauriId: "grok_video",
fullName: "Grok Video",
category: "video",
creator: ModelCreator.Kling,
creator: ModelCreator.Grok,
selectorName: "Grok Video",
selectorDescription: "Fastest video model",
selectorBadges: ["20 sec."],