mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-04 17:38:10 +00:00
wip
This commit is contained in:
1 parent
a610d90389
commit
336bb4c6e5
11 files changed
+83
-11
No files matched your search
Generated
+1
@@ -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(())
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user