diff --git a/crates/api_clients/grok_client/src/recipes/upload_image_and_generate_video.rs b/crates/api_clients/grok_client/src/recipes/upload_image_and_generate_video.rs index 5e2bd75b94..66ae5ea18e 100644 --- a/crates/api_clients/grok_client/src/recipes/upload_image_and_generate_video.rs +++ b/crates/api_clients/grok_client/src/recipes/upload_image_and_generate_video.rs @@ -37,7 +37,6 @@ pub async fn upload_image_and_generate_video>(args: UploadImageAn info!("Uploading file to Grok..."); let request = GrokUploadFile { - //file: FileSpec::Path("/Users/bt/dev/storyteller/storyteller-rust/test_data/image/mochi.jpg"), file: args.file, cookie: args.full_credentials.cookies.to_string(), request_timeout: args.individual_request_timeout, @@ -94,7 +93,7 @@ pub async fn upload_image_and_generate_video>(args: UploadImageAn }; // TODO: Get URL - let video_gen_result = request.send().await?; + let _video_gen_result = request.send().await?; info!("Video Generation Enqueued"); diff --git a/crates/api_clients/grok_client/src/requests/like_media/grok_like_media.rs b/crates/api_clients/grok_client/src/requests/like_media/grok_like_media.rs index 6f0ea27e1d..59df52df11 100644 --- a/crates/api_clients/grok_client/src/requests/like_media/grok_like_media.rs +++ b/crates/api_clients/grok_client/src/requests/like_media/grok_like_media.rs @@ -22,17 +22,19 @@ use wreq_util::Emulation; const LIKE_MEDIA_POST_URL: &str = "https://grok.com/rest/media/post/like"; +/// "Liking" media is currently necessary to preserve it in your account /// Request builder pub struct GrokLikeMediaPost<'a> { pub file_id: &'a FileId, - pub cookie: &'a str, - pub request_timeout: Option, + pub cookie: &'a str, pub baggage: &'a Baggage, pub sentry_trace: &'a SentryTrace, pub verification_token: &'a VerificationToken, pub svg_data: &'a SvgPathData, pub numbers: &'a XsidNumbers, + + pub request_timeout: Option, } /// Response type @@ -127,19 +129,13 @@ impl <'a> GrokLikeMediaPost<'a> { GrokGenericApiError::WreqError(err) })?; + // TODO: Classify errors if !status.is_success() { - warn!("Not successful liking media: {:?}", response_body); + warn!("Not successful liking media (status: {:?}) : {:?}", status, response_body); + // error!("Upload file request returned an error (code {}) : {:?}", status.as_u16(), response_body); + // return Err(classify_general_http_status_code_and_body(status, response_body)); } - // TODO: Just for now.. - println!("Body: {}", response_body); - - // TODO: - //if !status.is_success() { - // error!("Upload file request returned an error (code {}) : {:?}", status.as_u16(), response_body); - // return Err(classify_general_http_status_code_and_body(status, response_body)); - //} - //let response : GrokApiUploadFileResponse = serde_json::from_str(response_body) // .map_err(|err| GrokGenericApiError::SerdeResponseParseErrorWithBody(err, response_body.to_string()))?; @@ -152,7 +148,7 @@ impl <'a> GrokLikeMediaPost<'a> { mod tests { use super::*; use crate::recipes::request_client_secrets::{request_client_secrets, RequestClientSecretsArgs}; - use crate::test_utils::get_test_cookies::{get_test_cookies, get_typed_test_cookies}; + use crate::test_utils::get_test_cookies::get_typed_test_cookies; use errors::AnyhowResult; #[tokio::test] @@ -161,7 +157,6 @@ mod tests { //setup_test_logging(LevelFilter::Trace); let cookies = get_typed_test_cookies()?; - let user_id = UserId("85980643-ffab-4984-a3de-59a608c47d7f".to_string()); // User let file_id = FileId("990ddf90-8f34-42b1-81a5-39c509d62ff7".to_string()); // Mochi let secrets = request_client_secrets(RequestClientSecretsArgs { @@ -176,14 +171,15 @@ mod tests { let request = GrokLikeMediaPost { file_id: &file_id, - cookie: cookies.as_str(), - request_timeout: None, + cookie: cookies.as_str(), baggage: &secrets.baggage, sentry_trace: &secrets.sentry_trace, verification_token: &secrets.verification_token, svg_data: &secrets.svg_path_data, numbers: &secrets.numbers, + + request_timeout: None, }; let result = request.send().await?; diff --git a/crates/api_clients/grok_client/src/requests/upload_file/metadata/upload_file_request_curl.txt b/crates/api_clients/grok_client/src/requests/upload_file/_metadata/upload_file_request_curl.txt similarity index 100% rename from crates/api_clients/grok_client/src/requests/upload_file/metadata/upload_file_request_curl.txt rename to crates/api_clients/grok_client/src/requests/upload_file/_metadata/upload_file_request_curl.txt diff --git a/crates/api_clients/grok_client/src/requests/upload_file/metadata/upload_file_response.json b/crates/api_clients/grok_client/src/requests/upload_file/_metadata/upload_file_response.json similarity index 100% rename from crates/api_clients/grok_client/src/requests/upload_file/metadata/upload_file_response.json rename to crates/api_clients/grok_client/src/requests/upload_file/_metadata/upload_file_response.json diff --git a/crates/api_clients/grok_client/src/requests/upload_file/grok_upload_file.rs b/crates/api_clients/grok_client/src/requests/upload_file/grok_upload_file.rs index 1c6ca6f6cb..c0dd2a9432 100644 --- a/crates/api_clients/grok_client/src/requests/upload_file/grok_upload_file.rs +++ b/crates/api_clients/grok_client/src/requests/upload_file/grok_upload_file.rs @@ -172,11 +172,11 @@ impl

GrokUploadFile

where P: AsRef { GrokGenericApiError::WreqError(err) })?; - // TODO: - //if !status.is_success() { - // error!("Upload file request returned an error (code {}) : {:?}", status.as_u16(), response_body); - // return Err(classify_general_http_status_code_and_body(status, response_body)); - //} + // TODO: Handle bad statuses + if !status.is_success() { + error!("Upload file request returned an error (code {}) : {:?}", status.as_u16(), response_body); + //return Err(classify_general_http_status_code_and_body(status, response_body)); + } let response : GrokApiUploadFileResponse = serde_json::from_str(response_body) .map_err(|err| GrokGenericApiError::SerdeResponseParseErrorWithBody(err, response_body.to_string()))?; @@ -185,7 +185,7 @@ impl

GrokUploadFile

where P: AsRef { .map(|id| FileId(id)); Ok(GrokUploadFileResponse { - file_id: file_id, + file_id, file_uri: response.file_uri, }) } @@ -202,10 +202,11 @@ mod tests { #[ignore] async fn upload_file() -> AnyhowResult<()> { //setup_test_logging(LevelFilter::Trace); + let cookies = get_test_cookies()?; + let request = GrokUploadFile { - //file: FileUploadSpec::Path("/Users/bt/dev/storyteller/storyteller-rust/test_data/image/mochi.jpg"), - file: FileUploadSpec::Path("/Users/bt/Pictures/Creatures/Spooky/06.1.jpg"), + file: FileUploadSpec::Path("/Users/bt/dev/storyteller/storyteller-rust/test_data/image/mochi.jpg"), cookie: cookies.to_string(), request_timeout: None, }; diff --git a/crates/api_clients/grok_client/src/requests/upload_file/response.rs b/crates/api_clients/grok_client/src/requests/upload_file/response.rs index 3573b94a95..92f10b8ced 100644 --- a/crates/api_clients/grok_client/src/requests/upload_file/response.rs +++ b/crates/api_clients/grok_client/src/requests/upload_file/response.rs @@ -3,9 +3,12 @@ use serde::Deserialize; #[derive(Deserialize)] pub (super) struct GrokApiUploadFileResponse { + /// The uploaded file_id, which is used to reference the file later. #[serde(rename = "fileMetadataId")] pub file_metadata_id: Option, + /// Partial path to the media file, not a full URI. + /// eg. `users/{user_id}/{file_id}/content` #[serde(rename = "fileUri")] pub file_uri: Option, } @@ -20,4 +23,4 @@ pub (super) struct GrokApiUploadFileResponse { "createTime": "2025-10-21T23:40:41.784448Z", "fileSource": "SELF_UPLOAD_FILE_SOURCE" } - */ \ No newline at end of file +*/ diff --git a/crates/api_clients/grok_client/src/requests/video_gen_chat_conversation/grok_video_gen_chat_conversation.rs b/crates/api_clients/grok_client/src/requests/video_gen_chat_conversation/grok_video_gen_chat_conversation.rs index 500ad3940b..c1864382d9 100644 --- a/crates/api_clients/grok_client/src/requests/video_gen_chat_conversation/grok_video_gen_chat_conversation.rs +++ b/crates/api_clients/grok_client/src/requests/video_gen_chat_conversation/grok_video_gen_chat_conversation.rs @@ -206,9 +206,9 @@ mod tests { #[ignore] async fn create_video() -> AnyhowResult<()> { //setup_test_logging(LevelFilter::Trace); + let cookies = get_typed_test_cookies()?; - let user_id = UserId("85980643-ffab-4984-a3de-59a608c47d7f".to_string()); // User let file_id = FileId("990ddf90-8f34-42b1-81a5-39c509d62ff7".to_string()); // Mochi let secrets = request_client_secrets(RequestClientSecretsArgs { @@ -222,7 +222,7 @@ mod tests { println!("Baggage: {:?}", secrets.baggage); let request = GrokVideoGenChatConversationBuilder { - user_id: &user_id, + user_id: &secrets.user_id, file_id: &file_id, media_type: VideoMediaPostType::UserUploadedImage, cookie: cookies.as_str(), @@ -242,5 +242,4 @@ mod tests { assert_eq!(1, 2); Ok(()) } - }