Compare commits

...
Author SHA1 Message Date
Brandon Thomas 5f18e9f2df plumb aspect ratio 2025-11-27 02:20:07 -05:00
Brandon Thomas 6f14591736 aspect ratio 2025-11-27 01:41:32 -05:00
Brandon Thomas 5df48cf9c5 fix image websockets by adding resolution? 2025-11-27 01:04:44 -05:00
Brandon Thomas afbf122db0 downloading videos works 2025-11-27 00:46:58 -05:00
8 changed files with 46 additions and 4 deletions
@@ -83,6 +83,8 @@ pub async fn download_video_file(args: DownloadVideoFileArgs<'_>) -> Result<Vide
#[cfg(test)]
mod tests {
use std::fs::File;
use std::io::Write;
use crate::datatypes::api::file_id::FileId;
use crate::recipes::request_client_secrets::{request_client_secrets, RequestClientSecretsArgs};
use crate::requests::download_video_file::download_video_file::{download_video_file, DownloadVideoFileArgs};
@@ -117,6 +119,9 @@ mod tests {
println!("Video byte length: {:?}", download.bytes.len());
let mut file = File::create("download_video_file.test.mp4")?;
file.write_all(&download.bytes)?;
assert_eq!(1, 2);
Ok(())
}
@@ -117,6 +117,7 @@ mod tests {
use crate::requests::image_websocket::create_listen_websocket::{create_listen_websocket, CreateListenWebsocketArgs};
use crate::requests::image_websocket::grok_websocket::GrokWebsocket;
use crate::requests::image_websocket::listen_for_websocket_images::{listen_for_websocket_images, ListenForWebsocketImagesArgs};
use crate::requests::image_websocket::messages::websocket_client_message::ClientMessageAspectRatio;
use crate::requests::image_websocket::prompt_websocket_image::{prompt_websocket_image, PromptWebsocketImageArgs};
use crate::test_utils::get_test_cookies::get_test_cookies;
use crate::test_utils::setup_test_logging::setup_test_logging;
@@ -147,6 +148,7 @@ mod tests {
let _result = prompt_websocket_image(PromptWebsocketImageArgs {
websocket: &mut websocket,
prompt,
aspect_ratio: ClientMessageAspectRatio::WideThreeByTwo,
}).await?;
println!("Reading...");
@@ -73,6 +73,7 @@ mod tests {
use crate::requests::image_websocket::create_listen_websocket::{create_listen_websocket, CreateListenWebsocketArgs};
use crate::requests::image_websocket::grok_websocket::GrokWebsocket;
use crate::requests::image_websocket::listen_for_websocket_request_id::{listen_for_websocket_request_id, ListenForWebsocketRequestIdArgs};
use crate::requests::image_websocket::messages::websocket_client_message::ClientMessageAspectRatio;
use crate::requests::image_websocket::prompt_websocket_image::{prompt_websocket_image, PromptWebsocketImageArgs};
use crate::test_utils::get_test_cookies::get_test_cookies;
use crate::test_utils::setup_test_logging::setup_test_logging;
@@ -103,6 +104,7 @@ mod tests {
let _result = prompt_websocket_image(PromptWebsocketImageArgs {
websocket: &mut websocket,
prompt,
aspect_ratio: ClientMessageAspectRatio::Square,
}).await?;
println!("Reading...");
@@ -46,11 +46,24 @@ pub struct ClientMessageItemContentProperties {
pub enable_nsfw: bool,
pub skip_upsampler: bool,
pub is_initial: bool,
pub aspect_ratio: ClientMessageAspectRatio,
}
#[derive(Serialize, Clone, Copy, Debug)]
pub enum ClientMessageAspectRatio {
#[serde(rename = "2:3")]
TallTwoByThree,
#[serde(rename = "3:2")]
WideThreeByTwo,
#[serde(rename = "1:1")]
Square,
}
impl WebsocketClientMessage {
/// Create a new image prompt websocket client message
pub fn new_image_prompt(prompt: &str) -> Self {
pub fn new_image_prompt(prompt: &str, aspect_ratio: ClientMessageAspectRatio) -> Self {
Self {
r#type: "conversation.item.create".to_string(),
timestamp: Utc::now().timestamp_millis() as u64,
@@ -67,6 +80,7 @@ impl WebsocketClientMessage {
enable_nsfw: true,
skip_upsampler: false,
is_initial: false,
aspect_ratio,
},
}
],
@@ -1,15 +1,16 @@
use crate::error::grok_error::GrokError;
use crate::requests::image_websocket::grok_websocket::GrokWebsocket;
use crate::requests::image_websocket::messages::websocket_client_message::WebsocketClientMessage;
use crate::requests::image_websocket::messages::websocket_client_message::{ClientMessageAspectRatio, WebsocketClientMessage};
pub struct PromptWebsocketImageArgs<'a> {
pub websocket: &'a mut GrokWebsocket,
pub prompt: &'a str,
pub aspect_ratio: ClientMessageAspectRatio,
}
pub async fn prompt_websocket_image(args: PromptWebsocketImageArgs<'_>) -> Result<(), GrokError> {
let message = WebsocketClientMessage::new_image_prompt(args.prompt);
let message = WebsocketClientMessage::new_image_prompt(args.prompt, args.aspect_ratio);
args.websocket.send_serializable(&message).await?;
@@ -21,6 +22,7 @@ mod tests {
use crate::requests::image_websocket::create_listen_websocket::{create_listen_websocket, CreateListenWebsocketArgs};
use crate::requests::image_websocket::grok_websocket::GrokWebsocket;
use crate::requests::image_websocket::grok_wrapped_websocket::GrokWrappedWebsocket;
use crate::requests::image_websocket::messages::websocket_client_message::ClientMessageAspectRatio;
use crate::requests::image_websocket::messages::websocket_server_message::WebsocketServerMessage;
use crate::requests::image_websocket::prompt_websocket_image::{prompt_websocket_image, PromptWebsocketImageArgs};
use crate::test_utils::get_test_cookies::get_test_cookies;
@@ -50,6 +52,7 @@ mod tests {
let result = prompt_websocket_image(PromptWebsocketImageArgs {
websocket: &mut websocket,
prompt: "a dog riding a motorcycle",
aspect_ratio: ClientMessageAspectRatio::WideThreeByTwo,
}).await?;
println!("Reading...");
@@ -1,12 +1,13 @@
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;
use crate::core::commands::enqueue::text_to_image::enqueue_text_to_image_command::{EnqueueTextToImageRequest, TextToImageSize};
use crate::core::events::generation_events::common::GenerationModel;
use crate::core::state::app_env_configs::app_env_configs::AppEnvConfigs;
use crate::services::grok::state::grok_credential_manager::GrokCredentialManager;
use crate::services::grok::state::grok_image_prompt_queue::{GrokImagePromptQueue, PromptItem};
use enums::common::generation_provider::GenerationProvider;
use enums::tauri::tasks::task_type::TaskType;
use grok_client::requests::image_websocket::messages::websocket_client_message::ClientMessageAspectRatio;
use idempotency::uuid::generate_random_uuid;
use tauri::AppHandle;
@@ -53,9 +54,18 @@ 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,
};
grok_image_prompt_queue.enqueue(PromptItem {
task_id: job_id.clone(),
prompt,
aspect_ratio,
})?;
Ok(TaskEnqueueSuccess {
@@ -2,6 +2,7 @@ use crate::core::artcraft_error::ArtcraftError;
use log::error;
use std::collections::VecDeque;
use std::sync::{Arc, Mutex};
use grok_client::requests::image_websocket::messages::websocket_client_message::ClientMessageAspectRatio;
#[derive(Clone)]
pub struct GrokImagePromptQueue {
@@ -16,6 +17,9 @@ pub struct PromptItem {
/// Text prompt
pub prompt: String,
/// The aspect ratio of the image
pub aspect_ratio: ClientMessageAspectRatio,
}
impl GrokImagePromptQueue {
@@ -22,6 +22,7 @@ use grok_client::requests::image_websocket::create_listen_websocket::{create_lis
use grok_client::requests::image_websocket::grok_websocket::GrokWebsocket;
use grok_client::requests::image_websocket::grok_wrapped_websocket::GrokWrappedWebsocket;
use grok_client::requests::image_websocket::listen_for_websocket_images::{listen_for_websocket_images, ImageResults, ListenForWebsocketImagesArgs};
use grok_client::requests::image_websocket::messages::websocket_client_message::ClientMessageAspectRatio;
use grok_client::requests::image_websocket::prompt_websocket_image::{prompt_websocket_image, PromptWebsocketImageArgs};
use idempotency::uuid::generate_random_uuid;
use log::{error, info, warn};
@@ -141,6 +142,7 @@ async fn inner_loop(
let _result = prompt_websocket_image(PromptWebsocketImageArgs {
websocket: &mut websocket,
prompt: &prompt_item.prompt,
aspect_ratio: prompt_item.aspect_ratio,
}).await?;
let images = listen_for_websocket_images(ListenForWebsocketImagesArgs {