mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-02 00:18:17 +00:00
create prompts
This commit is contained in:
1 parent
84858cf0b7
commit
dd2dfb45c6
2 files changed
+100
-2
No files matched your search
+29
-1
@@ -5,6 +5,7 @@ use artcraft_router::api::common_resolution::CommonResolution as RouterResolutio
|
||||
use artcraft_router::api::provider::Provider;
|
||||
use artcraft_router::generate::generate_image::generate_image_request_builder::GenerateImageRequestBuilder;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio as EnumsAspectRatio;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::generation::common_resolution::CommonResolution as EnumsResolution;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
@@ -19,7 +20,7 @@ pub fn router_image_request_to_artcraft_prompt(
|
||||
negative_prompt: None,
|
||||
model_type: image_model_to_common_model_type(request.model),
|
||||
generation_provider: Some(provider_to_generation_provider(request.provider)),
|
||||
maybe_generation_mode: None,
|
||||
maybe_generation_mode: Some(determine_image_generation_mode(request)),
|
||||
maybe_aspect_ratio: request.aspect_ratio.map(router_aspect_ratio_to_enums),
|
||||
maybe_resolution: request.resolution.map(router_resolution_to_enums),
|
||||
maybe_batch_count: request.image_batch_count.map(|n| n.min(255) as u8),
|
||||
@@ -30,6 +31,14 @@ pub fn router_image_request_to_artcraft_prompt(
|
||||
|
||||
// ── Converters ──
|
||||
|
||||
fn determine_image_generation_mode(request: &GenerateImageRequestBuilder) -> CommonGenerationMode {
|
||||
if request.image_inputs.is_some() {
|
||||
CommonGenerationMode::Edit
|
||||
} else {
|
||||
CommonGenerationMode::Text
|
||||
}
|
||||
}
|
||||
|
||||
fn image_model_to_common_model_type(model: CommonImageModel) -> Option<CommonModelType> {
|
||||
match model {
|
||||
CommonImageModel::Flux1Dev => Some(CommonModelType::Flux1Dev),
|
||||
@@ -127,6 +136,7 @@ mod tests {
|
||||
assert_eq!(prompt.positive_prompt.as_deref(), Some("a cat in space"));
|
||||
assert_eq!(prompt.model_type, Some(CommonModelType::NanoBananaPro));
|
||||
assert_eq!(prompt.generation_provider, Some(GenerationProvider::Fal));
|
||||
assert_eq!(prompt.maybe_generation_mode, Some(CommonGenerationMode::Text));
|
||||
assert!(prompt.negative_prompt.is_none());
|
||||
assert!(prompt.maybe_aspect_ratio.is_none());
|
||||
assert!(prompt.maybe_resolution.is_none());
|
||||
@@ -134,6 +144,24 @@ mod tests {
|
||||
assert!(!prompt.uuid_idempotency_token.is_empty());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn text_mode_when_no_images() {
|
||||
let builder = base_builder();
|
||||
let prompt = router_image_request_to_artcraft_prompt(&builder);
|
||||
assert_eq!(prompt.maybe_generation_mode, Some(CommonGenerationMode::Text));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn edit_mode_when_images_present() {
|
||||
use artcraft_router::api::image_list_ref::ImageListRef;
|
||||
let builder = GenerateImageRequestBuilder {
|
||||
image_inputs: Some(ImageListRef::Urls(vec!["https://example.com/img.jpg".to_string()])),
|
||||
..base_builder()
|
||||
};
|
||||
let prompt = router_image_request_to_artcraft_prompt(&builder);
|
||||
assert_eq!(prompt.maybe_generation_mode, Some(CommonGenerationMode::Edit));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn with_aspect_ratio_and_resolution() {
|
||||
let builder = GenerateImageRequestBuilder {
|
||||
|
||||
+71
-1
@@ -5,6 +5,7 @@ use artcraft_router::api::common_video_model::CommonVideoModel;
|
||||
use artcraft_router::api::provider::Provider;
|
||||
use artcraft_router::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio as EnumsAspectRatio;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::generation::common_resolution::CommonResolution as EnumsResolution;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
@@ -19,7 +20,7 @@ pub fn router_video_request_to_artcraft_prompt(
|
||||
negative_prompt: request.negative_prompt.clone(),
|
||||
model_type: video_model_to_common_model_type(request.model),
|
||||
generation_provider: Some(provider_to_generation_provider(request.provider)),
|
||||
maybe_generation_mode: None,
|
||||
maybe_generation_mode: Some(determine_video_generation_mode(request)),
|
||||
maybe_aspect_ratio: request.aspect_ratio.map(router_aspect_ratio_to_enums),
|
||||
maybe_resolution: request.resolution.map(router_resolution_to_enums),
|
||||
maybe_batch_count: request.video_batch_count.map(|n| n.min(255) as u8),
|
||||
@@ -30,6 +31,21 @@ pub fn router_video_request_to_artcraft_prompt(
|
||||
|
||||
// ── Converters ──
|
||||
|
||||
fn determine_video_generation_mode(request: &GenerateVideoRequestBuilder) -> CommonGenerationMode {
|
||||
let has_keyframes = request.start_frame.is_some() || request.end_frame.is_some();
|
||||
let has_references = request.reference_images.is_some()
|
||||
|| request.reference_videos.is_some()
|
||||
|| request.reference_audio.is_some();
|
||||
|
||||
if has_keyframes {
|
||||
CommonGenerationMode::Keyframe
|
||||
} else if has_references {
|
||||
CommonGenerationMode::Reference
|
||||
} else {
|
||||
CommonGenerationMode::Text
|
||||
}
|
||||
}
|
||||
|
||||
fn video_model_to_common_model_type(model: CommonVideoModel) -> Option<CommonModelType> {
|
||||
match model {
|
||||
CommonVideoModel::GrokVideo => Some(CommonModelType::GrokVideo),
|
||||
@@ -135,6 +151,7 @@ mod tests {
|
||||
assert_eq!(prompt.positive_prompt.as_deref(), Some("a dog running on the beach"));
|
||||
assert_eq!(prompt.model_type, Some(CommonModelType::Kling3p0Standard));
|
||||
assert_eq!(prompt.generation_provider, Some(GenerationProvider::Fal));
|
||||
assert_eq!(prompt.maybe_generation_mode, Some(CommonGenerationMode::Text));
|
||||
assert!(prompt.negative_prompt.is_none());
|
||||
assert!(prompt.maybe_aspect_ratio.is_none());
|
||||
assert!(prompt.maybe_resolution.is_none());
|
||||
@@ -163,6 +180,59 @@ mod tests {
|
||||
assert_eq!(prompt.maybe_generate_audio, Some(true));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn text_mode_when_no_references() {
|
||||
let builder = base_builder();
|
||||
let prompt = router_video_request_to_artcraft_prompt(&builder);
|
||||
assert_eq!(prompt.maybe_generation_mode, Some(CommonGenerationMode::Text));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn keyframe_mode_with_start_frame() {
|
||||
use artcraft_router::api::image_ref::ImageRef;
|
||||
let builder = GenerateVideoRequestBuilder {
|
||||
start_frame: Some(ImageRef::Url("https://example.com/frame.jpg".to_string())),
|
||||
..base_builder()
|
||||
};
|
||||
let prompt = router_video_request_to_artcraft_prompt(&builder);
|
||||
assert_eq!(prompt.maybe_generation_mode, Some(CommonGenerationMode::Keyframe));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn keyframe_mode_with_end_frame() {
|
||||
use artcraft_router::api::image_ref::ImageRef;
|
||||
let builder = GenerateVideoRequestBuilder {
|
||||
end_frame: Some(ImageRef::Url("https://example.com/frame.jpg".to_string())),
|
||||
..base_builder()
|
||||
};
|
||||
let prompt = router_video_request_to_artcraft_prompt(&builder);
|
||||
assert_eq!(prompt.maybe_generation_mode, Some(CommonGenerationMode::Keyframe));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn reference_mode_with_reference_images() {
|
||||
use artcraft_router::api::image_list_ref::ImageListRef;
|
||||
let builder = GenerateVideoRequestBuilder {
|
||||
reference_images: Some(ImageListRef::Urls(vec!["https://example.com/ref.jpg".to_string()])),
|
||||
..base_builder()
|
||||
};
|
||||
let prompt = router_video_request_to_artcraft_prompt(&builder);
|
||||
assert_eq!(prompt.maybe_generation_mode, Some(CommonGenerationMode::Reference));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn keyframe_takes_priority_over_reference() {
|
||||
use artcraft_router::api::image_ref::ImageRef;
|
||||
use artcraft_router::api::image_list_ref::ImageListRef;
|
||||
let builder = GenerateVideoRequestBuilder {
|
||||
start_frame: Some(ImageRef::Url("https://example.com/frame.jpg".to_string())),
|
||||
reference_images: Some(ImageListRef::Urls(vec!["https://example.com/ref.jpg".to_string()])),
|
||||
..base_builder()
|
||||
};
|
||||
let prompt = router_video_request_to_artcraft_prompt(&builder);
|
||||
assert_eq!(prompt.maybe_generation_mode, Some(CommonGenerationMode::Keyframe));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn video_model_mapping() {
|
||||
let models = [
|
||||
|
||||
Reference in new issue
Block a user