From 5cb45c219c590dbeb5c787deddcd2236b484fb43 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Wed, 31 Dec 2025 06:15:55 -0500 Subject: [PATCH] Grok, but the image resolutions appear broken --- .../convert/aspect_ratio_to_grok_image.rs | 28 ++++++ .../api_adapters/aspect_ratio/convert/mod.rs | 3 +- .../enqueue/text_to_image/grok/handle_grok.rs | 98 ++++--------------- .../model-list/src/lib/lists/ImageModels.ts | 6 ++ 4 files changed, 57 insertions(+), 78 deletions(-) create mode 100644 crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_grok_image.rs diff --git a/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_grok_image.rs b/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_grok_image.rs new file mode 100644 index 0000000000..f2f7305198 --- /dev/null +++ b/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_grok_image.rs @@ -0,0 +1,28 @@ +use crate::core::api_adapters::aspect_ratio::common_aspect_ratio::CommonAspectRatio; +use grok_client::requests::image_websocket::messages::websocket_client_message::ClientMessageAspectRatio; + +pub fn aspect_ratio_to_grok_image(aspect_ratio: CommonAspectRatio) -> ClientMessageAspectRatio { + match aspect_ratio { + // Exact + CommonAspectRatio::Square => ClientMessageAspectRatio::Square, + CommonAspectRatio::WideThreeByTwo => ClientMessageAspectRatio::WideThreeByTwo, + CommonAspectRatio::TallTwoByThree => ClientMessageAspectRatio::TallTwoByThree, + + // Non-matching + CommonAspectRatio::Auto => ClientMessageAspectRatio::Square, + + // Mismatch - wide + CommonAspectRatio::Wide + | CommonAspectRatio::WideFiveByFour + | CommonAspectRatio::WideFourByThree + | CommonAspectRatio::WideSixteenByNine + | CommonAspectRatio::WideTwentyOneByNine => ClientMessageAspectRatio::WideThreeByTwo, + + // Mismatch - tall + CommonAspectRatio::Tall + | CommonAspectRatio::TallFourByFive + | CommonAspectRatio::TallThreeByFour + | CommonAspectRatio::TallNineBySixteen + | CommonAspectRatio::TallNineByTwentyOne => ClientMessageAspectRatio::TallTwoByThree, + } +} diff --git a/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/mod.rs b/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/mod.rs index 13cdac612f..cf4f1fc168 100644 --- a/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/mod.rs +++ b/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/mod.rs @@ -1,2 +1,3 @@ pub mod aspect_ratio_to_artcraft_nano_banana_pro; -pub mod aspect_ratio_to_artcraft_nano_banana; \ No newline at end of file +pub mod aspect_ratio_to_artcraft_nano_banana; +pub mod aspect_ratio_to_grok_image; \ No newline at end of file diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/grok/handle_grok.rs b/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/grok/handle_grok.rs index 249f78aeec..dee51f43cd 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/grok/handle_grok.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/grok/handle_grok.rs @@ -1,3 +1,4 @@ +use crate::core::api_adapters::aspect_ratio::convert::aspect_ratio_to_grok_image::aspect_ratio_to_grok_image; use crate::core::commands::enqueue::generate_error::GenerateError; use crate::core::commands::enqueue::task_enqueue_success::TaskEnqueueSuccess; use crate::core::commands::enqueue::text_to_image::enqueue_text_to_image_command::{EnqueueTextToImageRequest, TextToImageSize}; @@ -54,18 +55,12 @@ pub async fn handle_grok( .map(|prompt| prompt.trim().to_string()) .unwrap_or_else(|| "".to_string()); - let aspect_ratio = match request.aspect_ratio { - None => ClientMessageAspectRatio::Square, - Some(TextToImageSize::Auto) => ClientMessageAspectRatio::Square, - Some(TextToImageSize::Square) => ClientMessageAspectRatio::Square, - Some(TextToImageSize::Wide) => ClientMessageAspectRatio::WideThreeByTwo, - Some(TextToImageSize::Tall) => ClientMessageAspectRatio::TallTwoByThree, - }; + let aspect_ratio = get_aspect_ratio(request); grok_image_prompt_queue.enqueue(PromptItem { task_id: job_id.clone(), prompt, - aspect_ratio, + aspect_ratio: aspect_ratio.unwrap_or(ClientMessageAspectRatio::Square), })?; Ok(TaskEnqueueSuccess { @@ -76,73 +71,22 @@ pub async fn handle_grok( }) } -// TODO: -// fn handle_midjourney_errors( -// app: &AppHandle, -// maybe_errors: Option> -// ) -> Result { -// if let Some(errors) = maybe_errors { -// if !errors.is_empty() { -// let messages: Vec = errors.iter() -// .map(|e| format!("{:?}", e)) -// .collect(); -// -// let combined_message = messages.join("; "); -// -// let event = FlashUserInputErrorEvent { -// message: format!("Midjourney Error: {}", combined_message), -// }; -// -// if let Err(err) = event.send(&app) { -// error!("Failed to send FlashUserInputErrorEvent: {:?}", err); // Fail open -// } -// } -// } -// -// Err(GenerateError::ProviderFailure(ProviderFailureReason::MidjourneyJobEnqueueFailed)) -// } +fn get_aspect_ratio(request: &EnqueueTextToImageRequest) -> Option { + if let Some(common_aspect_ratio) = request.common_aspect_ratio { + // Handle modern aspect ratio + let aspect = aspect_ratio_to_grok_image(common_aspect_ratio); + return Some(aspect); + } -//async fn get_websocket(app: &AppHandle, creds_manager: &GrokCredentialManager, websocket_manager: &GrokWebsocketManager) -> Result { -// let maybe_websocket = websocket_manager.grab_websocket()?; -// -// let websocket = match maybe_websocket { -// Some(websocket) => websocket, -// None => { -// let cookies = match creds_manager.maybe_copy_cookie_store() { -// Ok(Some(cookies)) => cookies.to_cookie_string(), -// Ok(None) => { -// error!("Grok credentials not found."); -// ShowProviderLoginModalEvent::send_for_provider(GenerationProvider::Grok, &app); -// return Err(GenerateError::needs_grok_credentials()); -// } -// Err(err) => { -// error!("Error reading Midjourney credentials: {:?}", err); -// ShowProviderLoginModalEvent::send_for_provider(GenerationProvider::Grok, &app); -// return Err(GenerateError::needs_grok_credentials()); -// }, -// }; -// -// info!("Creating Grok websocket..."); -// -// let create_websocket_result = create_listen_websocket(CreateListenWebsocketArgs { -// cookies: &cookies, -// }).await; -// -// let websocket = match create_websocket_result { -// Ok(websocket) => GrokWebsocket::new(websocket), -// Err(err) => { -// error!("Error creating websocket: {:?}", err); -// ShowProviderLoginModalEvent::send_for_provider(GenerationProvider::Grok, &app); -// return Err(GenerateError::needs_grok_credentials()); -// } -// }; -// -// info!("Setting managed Grok websocket..."); -// websocket_manager.set_websocket(websocket.clone())?; -// -// websocket -// } -// }; -// -// Ok(websocket) -//} + if let Some(aspect_ratio) = request.aspect_ratio { + // Handle deprecated aspect ratio + return match aspect_ratio { + TextToImageSize::Auto => Some(ClientMessageAspectRatio::Square), + TextToImageSize::Square => Some(ClientMessageAspectRatio::Square), + TextToImageSize::Wide => Some(ClientMessageAspectRatio::WideThreeByTwo), + TextToImageSize::Tall => Some(ClientMessageAspectRatio::TallTwoByThree), + } + } + + None +} diff --git a/frontend/libs/model-list/src/lib/lists/ImageModels.ts b/frontend/libs/model-list/src/lib/lists/ImageModels.ts index 3bb8a820c3..21363ba20c 100644 --- a/frontend/libs/model-list/src/lib/lists/ImageModels.ts +++ b/frontend/libs/model-list/src/lib/lists/ImageModels.ts @@ -25,6 +25,12 @@ export const IMAGE_MODELS: ImageModel[] = [ maxImagePromptCount: 6, progressBarTime: 10000, canChangeAspectRatio: true, + defaultAspectRatio: CommonAspectRatio.Square, + aspectRatios: [ + CommonAspectRatio.Square, + CommonAspectRatio.WideThreeByTwo, + CommonAspectRatio.TallTwoByThree, + ] }), new ImageModel({ id: "midjourney",