This commit is contained in:
Brandon Thomas committed 2025-05-16 00:02:09 -04:00
1 parent a610d90389
commit 336bb4c6e5
11 files changed
+83 -11

No files matched your search

Generated
+1
View File
@@ -4254,6 +4254,7 @@ dependencies = [
"file_to_base64_url",
"filesys",
"futures 0.3.31",
"reqwest 0.12.15",
"serde",
"testing",
"tokio",
@@ -25,6 +25,7 @@ anyhow = { workspace = true }
chrono = { workspace = true }
fal = { version = "0.3.6", features = ["endpoints"] }
futures = { workspace = true }
reqwest = { workspace = true }
serde = { workspace = true }
tokio = { workspace = true }
url = { workspace = true }
@@ -6,5 +6,6 @@ extern crate fal;
pub mod creds;
pub mod fal_error_plus;
pub mod model;
pub mod requests;
pub mod utils;
@@ -0,0 +1,12 @@
#[derive(Clone, Copy, Debug)]
pub enum FalEndpoint {
Kling16ImageToVideo,
}
impl FalEndpoint {
pub fn url(&self) -> String {
match self {
FalEndpoint::Kling16ImageToVideo => "https://api.fal.ai/v1/kling16/image-to-video".to_string(),
}
}
}
@@ -0,0 +1,2 @@
pub mod queue_tracking_data;
mod fal_endpoint;
@@ -0,0 +1,41 @@
use fal::queue::{Queue, QueueResponse};
use reqwest::Client;
use serde::de::DeserializeOwned;
use errors::AnyhowResult;
use crate::creds::fal_api_key::FalApiKey;
use crate::model::fal_endpoint::FalEndpoint;
#[derive(Clone, Debug)]
pub struct QueueTrackingData {
pub fal_endpoint: FalEndpoint,
pub request_id: String,
pub response_url: String,
pub status_url: String,
pub cancel_url: String,
}
impl QueueTrackingData {
pub fn from_queue_response<R: DeserializeOwned>(queue: &Queue<R>) -> AnyhowResult<Self> {
let fal_endpoint = FalEndpoint::Kling16ImageToVideo; // TODO: Get the endpoint from the queue response
Ok(Self {
fal_endpoint,
request_id: queue.payload.request_id.clone(),
response_url: queue.payload.response_url.clone(),
status_url: queue.payload.status_url.clone(),
cancel_url: queue.payload.cancel_url.clone(),
})
}
pub fn to_queue_response<R: DeserializeOwned>(&self, api_key: &FalApiKey) -> AnyhowResult<Queue<R>> {
let client = Client::new();
let endpoint = self.fal_endpoint.url();
let payload = QueueResponse {
request_id: self.request_id.clone(),
response_url: self.response_url.clone(),
status_url: self.status_url.clone(),
cancel_url: self.cancel_url.clone(),
};
Ok(Queue::new(client, endpoint, api_key.0.clone(), payload))
}
}
@@ -65,12 +65,6 @@ pub async fn kling_16_image_to_video<P: AsRef<Path>>(args: Kling16Args<'_, P>) -
let payload = result.payload;
let test : Queue<I2VOutput> = Queue::new(;
result.client().clone(),
result.endpoint(),
args.api_key.0.clone(),
result.payload().clone(),
);
println!("Result... {:?} - {:?}", result, Utc::now().format("%Y-%m-%dT%H:%M:%S").to_string());
std::io::stdout().flush().unwrap();
@@ -1,6 +1,7 @@
use crate::utils::clone_queue_response::clone_queue_response;
use fal::queue::{Queue, QueueResponse};
use serde::de::DeserializeOwned;
pub fn clone_queue_payload<R: DeserializeOwned>(payload: &Queue<R>) -> QueueResponse {
// TODO...
}
pub fn clone_queue_payload<R: DeserializeOwned>(queue: &Queue<R>) -> QueueResponse {
clone_queue_response(&queue.payload)
}
Whitespace-only changes.
@@ -1,2 +1,2 @@
pub mod clone_queue_payload;
mod clone_queue_response;
pub mod clone_queue_response;
@@ -1,5 +1,5 @@
use anyhow::anyhow;
use base64::prelude::{BASE64_STANDARD, BASE64_URL_SAFE, BASE64_URL_SAFE_NO_PAD};
use base64::prelude::BASE64_STANDARD;
use base64::Engine;
use errors::AnyhowResult;
use mimetypes::mimetype_info::mimetype_info::MimetypeInfo;
@@ -24,3 +24,22 @@ pub fn file_to_base64_url<P: AsRef<Path>>(path: P) -> AnyhowResult<String> {
_ => Err(anyhow!("unknown or unsupported mime type: {}", mime.mime_type())),
}
}
#[cfg(test)]
mod tests {
use errors::AnyhowResult;
use testing::test_file_path::test_file_path;
use crate::file_to_base64_url::file_to_base64_url;
#[test]
fn test_file_to_base64_url() -> AnyhowResult<()> {
let path = test_file_path("test_data/image/juno.jpg")?;
let base64_url = file_to_base64_url(path)?;
assert!(base64_url.starts_with("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEBLAEsAAD"));
assert!(base64_url.ends_with("z8c2LAteJ5zOIDcX5m04K3P/2Q=="));
assert_eq!(base64_url.len(), 223991);
Ok(())
}
}