mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-04 01:18:34 +00:00
Router update
This commit is contained in:
1 parent
c39d28b5b3
commit
a437b2dc60
7 files changed
+57
-18
No files matched your search
@@ -0,0 +1,3 @@
|
||||
pub mod router_artcraft_client;
|
||||
pub mod router_client;
|
||||
pub mod router_client_builder;
|
||||
@@ -0,0 +1,7 @@
|
||||
use storyteller_client::credentials::storyteller_credential_set::StorytellerCredentialSet;
|
||||
use storyteller_client::utils::api_host::ApiHost;
|
||||
|
||||
pub struct RouterArtcraftClient {
|
||||
pub(crate) api_host: ApiHost,
|
||||
pub(crate) credentials: StorytellerCredentialSet,
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
use crate::client::router_artcraft_client::RouterArtcraftClient;
|
||||
|
||||
pub struct RouterClient {
|
||||
pub(crate) artcraft_client: Option<RouterArtcraftClient>,
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
use crate::client::router_artcraft_client::RouterArtcraftClient;
|
||||
use crate::client::router_client::RouterClient;
|
||||
|
||||
pub struct RouterClientBuilder {
|
||||
artcraft_client: Option<RouterArtcraftClient>,
|
||||
}
|
||||
|
||||
impl RouterClientBuilder {
|
||||
pub fn new() -> Self {
|
||||
Self {
|
||||
artcraft_client: None,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn set_artcraft_client(mut self, client: RouterArtcraftClient) -> Self {
|
||||
self.artcraft_client = Some(client);
|
||||
self
|
||||
}
|
||||
|
||||
pub fn build(self) -> RouterClient {
|
||||
RouterClient {
|
||||
artcraft_client: self.artcraft_client,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,13 @@
|
||||
use crate::api::common_aspect_ratio::CommonAspectRatio;
|
||||
use crate::api::common_resolution::CommonVideoResolution;
|
||||
use crate::api::common_video_model::CommonVideoModel;
|
||||
use crate::client::router_client::RouterClient;
|
||||
use crate::errors::artcraft_router_error::ArtcraftRouterError;
|
||||
use crate::generate::generate_video::providers::artcraft::generate_video_artcraft_seedance2p0::generate_video_artcraft_seedance2p0;
|
||||
use storyteller_client::credentials::storyteller_credential_set::StorytellerCredentialSet;
|
||||
use storyteller_client::utils::api_host::ApiHost;
|
||||
use tokens::tokens::generic_inference_jobs::InferenceJobToken;
|
||||
|
||||
pub struct GenerateVideoArgs {
|
||||
pub struct GenerateVideoArgs<'a> {
|
||||
pub client: &'a RouterClient,
|
||||
pub model: CommonVideoModel,
|
||||
pub resolution: Option<CommonVideoResolution>,
|
||||
pub aspect_ratio: Option<CommonAspectRatio>,
|
||||
@@ -19,18 +19,12 @@ pub struct GenerateVideoResponse {
|
||||
pub all_inference_job_tokens: Vec<InferenceJobToken>,
|
||||
}
|
||||
|
||||
pub struct GenerateVideoContext<'a> {
|
||||
pub api_host: &'a ApiHost,
|
||||
pub storyteller_creds: Option<&'a StorytellerCredentialSet>,
|
||||
}
|
||||
|
||||
pub async fn generate_video(
|
||||
args: &GenerateVideoArgs,
|
||||
context: &GenerateVideoContext<'_>,
|
||||
args: &GenerateVideoArgs<'_>,
|
||||
) -> Result<GenerateVideoResponse, ArtcraftRouterError> {
|
||||
match args.model {
|
||||
CommonVideoModel::Seedance2p0 => {
|
||||
generate_video_artcraft_seedance2p0(args, context.api_host, context.storyteller_creds).await
|
||||
generate_video_artcraft_seedance2p0(args).await
|
||||
}
|
||||
_ => Err(ArtcraftRouterError::UnsupportedModel(format!("{:?}", args.model))),
|
||||
}
|
||||
|
||||
+11
-7
@@ -5,9 +5,7 @@ use crate::generate::generate_video::generate_video::{GenerateVideoArgs, Generat
|
||||
use artcraft_api_defs::generate::video::multi_function::seedance_2p0_multi_function_video_gen::{
|
||||
Seedance2p0AspectRatio, Seedance2p0BatchCount, Seedance2p0MultiFunctionVideoGenRequest,
|
||||
};
|
||||
use storyteller_client::credentials::storyteller_credential_set::StorytellerCredentialSet;
|
||||
use storyteller_client::endpoints::generate::video::multi_function::seedance_2p0_multi_function_video_gen::seedance_2p0_multi_function_video_gen;
|
||||
use storyteller_client::utils::api_host::ApiHost;
|
||||
use uuid::Uuid;
|
||||
|
||||
fn map_aspect_ratio(aspect_ratio: Option<CommonAspectRatio>) -> Option<Seedance2p0AspectRatio> {
|
||||
@@ -26,12 +24,14 @@ fn map_aspect_ratio(aspect_ratio: Option<CommonAspectRatio>) -> Option<Seedance2
|
||||
}
|
||||
|
||||
pub async fn generate_video_artcraft_seedance2p0(
|
||||
args: &GenerateVideoArgs,
|
||||
api_host: &ApiHost,
|
||||
creds: Option<&StorytellerCredentialSet>,
|
||||
args: &GenerateVideoArgs<'_>,
|
||||
) -> Result<GenerateVideoResponse, ArtcraftRouterError> {
|
||||
let uuid_idempotency_token = Uuid::new_v4().to_string(); // TODO: Make this an optional top-level arg
|
||||
let artcraft_client = args.client.artcraft_client.as_ref()
|
||||
.ok_or_else(|| ArtcraftRouterError::InvalidInput(
|
||||
"Artcraft client is not configured on the RouterClient".to_string()
|
||||
))?;
|
||||
|
||||
let uuid_idempotency_token = Uuid::new_v4().to_string(); // TODO: Make this an optional top-level arg
|
||||
let aspect_ratio = map_aspect_ratio(args.aspect_ratio);
|
||||
|
||||
let request = Seedance2p0MultiFunctionVideoGenRequest {
|
||||
@@ -45,7 +45,11 @@ pub async fn generate_video_artcraft_seedance2p0(
|
||||
batch_count: Some(Seedance2p0BatchCount::One),
|
||||
};
|
||||
|
||||
let response = seedance_2p0_multi_function_video_gen(api_host, creds, request)
|
||||
let response = seedance_2p0_multi_function_video_gen(
|
||||
&artcraft_client.api_host,
|
||||
Some(&artcraft_client.credentials),
|
||||
request,
|
||||
)
|
||||
.await
|
||||
.map_err(|err| ArtcraftRouterError::Provider(ProviderError::Storyteller(err)))?;
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
pub mod api;
|
||||
pub mod client;
|
||||
pub mod errors;
|
||||
pub mod generate;
|
||||
Reference in new issue
Block a user