From d4c48b750594075646fe131ff152b16a9f73204b Mon Sep 17 00:00:00 2001 From: Hanashi Date: Mon, 3 Aug 2026 21:27:56 -0400 Subject: [PATCH] call image gen --- Cargo.lock | 58 ++--- Cargo.toml | 4 +- crates/CLAUDE.md | 2 +- .../{artcraft_router => router}/Cargo.toml | 4 +- .../src/api/audio_list_ref.rs | 0 .../src/api/character_list_ref.rs | 0 .../src/api/image_list_ref.rs | 0 .../src/api/image_ref.rs | 0 .../src/api/mesh_ref.rs | 0 .../src/api/mod.rs | 0 .../src/api/router_aspect_ratio.rs | 0 .../src/api/router_audio_model.rs | 0 .../src/api/router_bitrate.rs | 0 .../src/api/router_image_model.rs | 0 .../src/api/router_mesh_model.rs | 0 .../src/api/router_provider.rs | 0 .../src/api/router_quality.rs | 0 .../src/api/router_resolution.rs | 0 .../src/api/router_splat_model.rs | 0 .../src/api/router_video_model.rs | 0 .../src/api/video_list_ref.rs | 0 .../src/api/video_ref.rs | 0 .../generation_mode_mismatch_strategy.rs | 0 .../src/client/mod.rs | 0 .../src/client/multi_router_client.rs | 0 .../src/client/multi_router_client_builder.rs | 0 .../request_mismatch_mitigation_strategy.rs | 0 .../src/client/router_artcraft_client.rs | 0 .../src/client/router_client.rs | 0 .../src/client/router_fal_client.rs | 0 .../src/client/router_gmicloud_client.rs | 0 .../src/client/router_grok_api_client.rs | 0 .../src/client/router_seedance2pro_client.rs | 0 .../src/client/router_worldlabs_client.rs | 0 .../src/errors/artcraft_router_error.rs | 0 .../src/errors/client_error.rs | 0 .../src/errors/download_error.rs | 0 .../src/errors/mod.rs | 0 .../src/errors/provider_error.rs | 0 .../audio_generation_cost_estimate.rs | 0 .../generate_audio/audio_generation_draft.rs | 0 .../audio_generation_draft_context.rs | 0 .../audio_generation_draft_or_request.rs | 0 .../audio_generation_request.rs | 0 .../generate_audio_request_builder.rs | 0 .../generate_audio/generate_audio_response.rs | 0 .../src/generate/generate_audio/mod.rs | 0 .../providers/artcraft/build_common.rs | 0 .../generate_audio/providers/artcraft/mod.rs | 0 .../providers/artcraft/request_common.rs | 0 .../providers/artcraft/resolve.rs | 0 .../artcraft/seed_audio_1p0/build.rs | 0 .../providers/artcraft/seed_audio_1p0/cost.rs | 0 .../providers/artcraft/seed_audio_1p0/mod.rs | 0 .../artcraft/seed_audio_1p0/request.rs | 0 .../providers/artcraft/suno_music/build.rs | 0 .../providers/artcraft/suno_music/cost.rs | 0 .../providers/artcraft/suno_music/mod.rs | 0 .../providers/artcraft/suno_music/request.rs | 0 .../providers/artcraft/suno_remix/build.rs | 0 .../providers/artcraft/suno_remix/cost.rs | 0 .../providers/artcraft/suno_remix/mod.rs | 0 .../providers/artcraft/suno_remix/request.rs | 0 .../providers/artcraft/suno_sample/build.rs | 0 .../providers/artcraft/suno_sample/cost.rs | 0 .../providers/artcraft/suno_sample/mod.rs | 0 .../providers/artcraft/suno_sample/request.rs | 0 .../providers/artcraft/suno_sounds/build.rs | 0 .../providers/artcraft/suno_sounds/cost.rs | 0 .../providers/artcraft/suno_sounds/mod.rs | 0 .../providers/artcraft/suno_sounds/request.rs | 0 .../generate_audio/providers/fal/mod.rs | 0 .../providers/fal/seed_audio_1p0/build.rs | 0 .../providers/fal/seed_audio_1p0/cost.rs | 0 .../providers/fal/seed_audio_1p0/mod.rs | 0 .../providers/fal/seed_audio_1p0/request.rs | 0 .../generate_audio/providers/kinovi/mod.rs | 0 .../providers/kinovi/resolve.rs | 0 .../providers/kinovi/suno_music/build.rs | 0 .../providers/kinovi/suno_music/cost.rs | 0 .../providers/kinovi/suno_music/mod.rs | 0 .../providers/kinovi/suno_music/request.rs | 0 .../providers/kinovi/suno_remix/build.rs | 0 .../providers/kinovi/suno_remix/cost.rs | 0 .../providers/kinovi/suno_remix/draft.rs | 0 .../providers/kinovi/suno_remix/mod.rs | 0 .../providers/kinovi/suno_remix/request.rs | 0 .../providers/kinovi/suno_sample/build.rs | 0 .../providers/kinovi/suno_sample/cost.rs | 0 .../providers/kinovi/suno_sample/draft.rs | 0 .../providers/kinovi/suno_sample/mod.rs | 0 .../providers/kinovi/suno_sample/request.rs | 0 .../providers/kinovi/suno_sounds/build.rs | 0 .../providers/kinovi/suno_sounds/cost.rs | 0 .../providers/kinovi/suno_sounds/mod.rs | 0 .../providers/kinovi/suno_sounds/request.rs | 0 .../generate/generate_audio/providers/mod.rs | 0 .../providers/reject_unsupported.rs | 0 .../generate_image_request_builder.rs | 0 .../generate_image/generate_image_response.rs | 0 .../image_generation_cost_estimate.rs | 0 .../generate_image/image_generation_draft.rs | 0 .../image_generation_draft_context.rs | 0 .../image_generation_draft_or_request.rs | 0 .../image_generation_request.rs | 0 .../src/generate/generate_image/mod.rs | 0 .../providers/artcraft/angle_validation.rs | 0 .../providers/artcraft/build_common.rs | 0 .../providers/artcraft/flux_1_dev/build.rs | 0 .../providers/artcraft/flux_1_dev/cost.rs | 0 .../providers/artcraft/flux_1_dev/mod.rs | 0 .../providers/artcraft/flux_1_dev/request.rs | 0 .../artcraft/flux_1_schnell/build.rs | 0 .../providers/artcraft/flux_1_schnell/cost.rs | 0 .../providers/artcraft/flux_1_schnell/mod.rs | 0 .../artcraft/flux_1_schnell/request.rs | 0 .../artcraft/flux_2_lora_angles/build.rs | 0 .../artcraft/flux_2_lora_angles/cost.rs | 0 .../artcraft/flux_2_lora_angles/mod.rs | 0 .../artcraft/flux_2_lora_angles/request.rs | 0 .../providers/artcraft/flux_pro_1p1/build.rs | 0 .../providers/artcraft/flux_pro_1p1/cost.rs | 0 .../providers/artcraft/flux_pro_1p1/mod.rs | 0 .../artcraft/flux_pro_1p1/request.rs | 0 .../artcraft/flux_pro_1p1_ultra/build.rs | 0 .../artcraft/flux_pro_1p1_ultra/cost.rs | 0 .../artcraft/flux_pro_1p1_ultra/mod.rs | 0 .../artcraft/flux_pro_1p1_ultra/request.rs | 0 .../providers/artcraft/gpt_image_1/build.rs | 0 .../providers/artcraft/gpt_image_1/cost.rs | 0 .../providers/artcraft/gpt_image_1/mod.rs | 0 .../providers/artcraft/gpt_image_1/request.rs | 0 .../providers/artcraft/gpt_image_1p5/build.rs | 0 .../providers/artcraft/gpt_image_1p5/cost.rs | 0 .../providers/artcraft/gpt_image_1p5/mod.rs | 0 .../artcraft/gpt_image_1p5/request.rs | 0 .../providers/artcraft/gpt_image_2/build.rs | 0 .../providers/artcraft/gpt_image_2/cost.rs | 0 .../providers/artcraft/gpt_image_2/mod.rs | 0 .../providers/artcraft/gpt_image_2/request.rs | 0 .../providers/artcraft/midjourney_7/build.rs | 0 .../providers/artcraft/midjourney_7/cost.rs | 0 .../providers/artcraft/midjourney_7/mod.rs | 0 .../artcraft/midjourney_7/request.rs | 0 .../artcraft/midjourney_7_niji/build.rs | 0 .../artcraft/midjourney_7_niji/cost.rs | 0 .../artcraft/midjourney_7_niji/mod.rs | 0 .../artcraft/midjourney_7_niji/request.rs | 0 .../providers/artcraft/midjourney_8/build.rs | 0 .../providers/artcraft/midjourney_8/cost.rs | 0 .../providers/artcraft/midjourney_8/mod.rs | 0 .../artcraft/midjourney_8/request.rs | 0 .../generate_image/providers/artcraft/mod.rs | 0 .../providers/artcraft/nano_banana/build.rs | 0 .../providers/artcraft/nano_banana/cost.rs | 0 .../providers/artcraft/nano_banana/mod.rs | 0 .../providers/artcraft/nano_banana/request.rs | 0 .../providers/artcraft/nano_banana_2/build.rs | 0 .../providers/artcraft/nano_banana_2/cost.rs | 0 .../providers/artcraft/nano_banana_2/mod.rs | 0 .../artcraft/nano_banana_2/request.rs | 0 .../artcraft/nano_banana_pro/build.rs | 0 .../artcraft/nano_banana_pro/cost.rs | 0 .../providers/artcraft/nano_banana_pro/mod.rs | 0 .../artcraft/nano_banana_pro/request.rs | 0 .../artcraft/qwen_edit_2511_angles/build.rs | 0 .../artcraft/qwen_edit_2511_angles/cost.rs | 0 .../artcraft/qwen_edit_2511_angles/mod.rs | 0 .../artcraft/qwen_edit_2511_angles/request.rs | 0 .../providers/artcraft/request_common.rs | 0 .../providers/artcraft/seedream_4/build.rs | 0 .../providers/artcraft/seedream_4/cost.rs | 0 .../providers/artcraft/seedream_4/mod.rs | 0 .../providers/artcraft/seedream_4/request.rs | 0 .../providers/artcraft/seedream_4p5/build.rs | 0 .../providers/artcraft/seedream_4p5/cost.rs | 0 .../providers/artcraft/seedream_4p5/mod.rs | 0 .../artcraft/seedream_4p5/request.rs | 0 .../artcraft/seedream_5_lite/build.rs | 0 .../artcraft/seedream_5_lite/cost.rs | 0 .../providers/artcraft/seedream_5_lite/mod.rs | 0 .../artcraft/seedream_5_lite/request.rs | 0 .../artcraft/seedream_5p0_pro/build.rs | 0 .../artcraft/seedream_5p0_pro/cost.rs | 0 .../artcraft/seedream_5p0_pro/mod.rs | 0 .../artcraft/seedream_5p0_pro/request.rs | 0 .../artcraft/seedream_5p0_pro_ultra/build.rs | 0 .../artcraft/seedream_5p0_pro_ultra/cost.rs | 0 .../artcraft/seedream_5p0_pro_ultra/mod.rs | 0 .../seedream_5p0_pro_ultra/request.rs | 0 .../providers/fal/flux_1_dev/build.rs | 0 .../providers/fal/flux_1_dev/cost.rs | 0 .../providers/fal/flux_1_dev/mod.rs | 0 .../providers/fal/flux_1_dev/request.rs | 0 .../providers/fal/flux_1_schnell/build.rs | 0 .../providers/fal/flux_1_schnell/cost.rs | 0 .../providers/fal/flux_1_schnell/mod.rs | 0 .../providers/fal/flux_1_schnell/request.rs | 0 .../providers/fal/flux_2_lora_angles/build.rs | 0 .../providers/fal/flux_2_lora_angles/cost.rs | 0 .../providers/fal/flux_2_lora_angles/mod.rs | 0 .../fal/flux_2_lora_angles/request.rs | 0 .../providers/fal/flux_pro_1p1/build.rs | 0 .../providers/fal/flux_pro_1p1/cost.rs | 0 .../providers/fal/flux_pro_1p1/mod.rs | 0 .../providers/fal/flux_pro_1p1/request.rs | 0 .../providers/fal/flux_pro_1p1_ultra/build.rs | 0 .../providers/fal/flux_pro_1p1_ultra/cost.rs | 0 .../providers/fal/flux_pro_1p1_ultra/mod.rs | 0 .../fal/flux_pro_1p1_ultra/request.rs | 0 .../providers/fal/gpt_image_1/build.rs | 0 .../providers/fal/gpt_image_1/cost.rs | 0 .../providers/fal/gpt_image_1/mod.rs | 0 .../providers/fal/gpt_image_1/request.rs | 0 .../providers/fal/gpt_image_1p5/build.rs | 0 .../providers/fal/gpt_image_1p5/cost.rs | 0 .../providers/fal/gpt_image_1p5/mod.rs | 0 .../providers/fal/gpt_image_1p5/request.rs | 0 .../providers/fal/gpt_image_2/build.rs | 0 .../providers/fal/gpt_image_2/cost.rs | 0 .../providers/fal/gpt_image_2/mod.rs | 0 .../providers/fal/gpt_image_2/request.rs | 0 .../generate_image/providers/fal/mod.rs | 0 .../providers/fal/nano_banana/build.rs | 0 .../providers/fal/nano_banana/cost.rs | 0 .../providers/fal/nano_banana/mod.rs | 0 .../providers/fal/nano_banana/request.rs | 0 .../providers/fal/nano_banana_2/build.rs | 0 .../providers/fal/nano_banana_2/cost.rs | 0 .../providers/fal/nano_banana_2/mod.rs | 0 .../providers/fal/nano_banana_2/request.rs | 0 .../providers/fal/nano_banana_pro/build.rs | 0 .../providers/fal/nano_banana_pro/cost.rs | 0 .../providers/fal/nano_banana_pro/mod.rs | 0 .../providers/fal/nano_banana_pro/request.rs | 0 .../fal/qwen_edit_2511_angles/build.rs | 0 .../fal/qwen_edit_2511_angles/cost.rs | 0 .../fal/qwen_edit_2511_angles/mod.rs | 0 .../fal/qwen_edit_2511_angles/request.rs | 0 .../providers/fal/seedream_4/build.rs | 0 .../providers/fal/seedream_4/cost.rs | 0 .../providers/fal/seedream_4/mod.rs | 0 .../providers/fal/seedream_4/request.rs | 0 .../providers/fal/seedream_4p5/build.rs | 0 .../providers/fal/seedream_4p5/cost.rs | 0 .../providers/fal/seedream_4p5/mod.rs | 0 .../providers/fal/seedream_4p5/request.rs | 0 .../providers/fal/seedream_5_lite/build.rs | 0 .../providers/fal/seedream_5_lite/cost.rs | 0 .../providers/fal/seedream_5_lite/mod.rs | 0 .../providers/fal/seedream_5_lite/request.rs | 0 .../providers/kinovi/midjourney_7/build.rs | 0 .../providers/kinovi/midjourney_7/cost.rs | 0 .../providers/kinovi/midjourney_7/draft.rs | 0 .../providers/kinovi/midjourney_7/mod.rs | 0 .../providers/kinovi/midjourney_7/request.rs | 0 .../kinovi/midjourney_7_niji/build.rs | 0 .../kinovi/midjourney_7_niji/cost.rs | 0 .../kinovi/midjourney_7_niji/draft.rs | 0 .../providers/kinovi/midjourney_7_niji/mod.rs | 0 .../kinovi/midjourney_7_niji/request.rs | 0 .../providers/kinovi/midjourney_8/build.rs | 0 .../providers/kinovi/midjourney_8/cost.rs | 0 .../providers/kinovi/midjourney_8/draft.rs | 0 .../providers/kinovi/midjourney_8/mod.rs | 0 .../providers/kinovi/midjourney_8/request.rs | 0 .../generate_image/providers/kinovi/mod.rs | 0 .../providers/kinovi/resolve.rs | 0 .../kinovi/seedream_5p0_pro/build.rs | 0 .../providers/kinovi/seedream_5p0_pro/cost.rs | 0 .../kinovi/seedream_5p0_pro/draft.rs | 0 .../providers/kinovi/seedream_5p0_pro/mod.rs | 0 .../kinovi/seedream_5p0_pro/request.rs | 0 .../generate_image/providers/kinovi/upload.rs | 0 .../generate/generate_image/providers/mod.rs | 0 .../generate_mesh_request_builder.rs | 0 .../generate_mesh/generate_mesh_response.rs | 0 .../mesh_generation_cost_estimate.rs | 0 .../generate_mesh/mesh_generation_draft.rs | 0 .../mesh_generation_draft_context.rs | 0 .../mesh_generation_draft_or_request.rs | 0 .../generate_mesh/mesh_generation_request.rs | 0 .../src/generate/generate_mesh/mod.rs | 0 .../providers/artcraft/build_common.rs | 0 .../providers/artcraft/hunyuan3d_3/build.rs | 0 .../providers/artcraft/hunyuan3d_3/cost.rs | 0 .../providers/artcraft/hunyuan3d_3/mod.rs | 0 .../providers/artcraft/hunyuan3d_3/request.rs | 0 .../artcraft/hunyuan3d_3_sketch/build.rs | 0 .../artcraft/hunyuan3d_3_sketch/cost.rs | 0 .../artcraft/hunyuan3d_3_sketch/mod.rs | 0 .../artcraft/hunyuan3d_3_sketch/request.rs | 0 .../artcraft/hunyuan_3d_2p0/build.rs | 0 .../providers/artcraft/hunyuan_3d_2p0/cost.rs | 0 .../providers/artcraft/hunyuan_3d_2p0/mod.rs | 0 .../artcraft/hunyuan_3d_2p0/request.rs | 0 .../artcraft/hunyuan_3d_2p1/build.rs | 0 .../providers/artcraft/hunyuan_3d_2p1/cost.rs | 0 .../providers/artcraft/hunyuan_3d_2p1/mod.rs | 0 .../artcraft/hunyuan_3d_2p1/request.rs | 0 .../artcraft/hunyuan_3d_3p1_part/build.rs | 0 .../artcraft/hunyuan_3d_3p1_part/cost.rs | 0 .../artcraft/hunyuan_3d_3p1_part/mod.rs | 0 .../artcraft/hunyuan_3d_3p1_part/request.rs | 0 .../artcraft/hunyuan_3d_3p1_pro/build.rs | 0 .../artcraft/hunyuan_3d_3p1_pro/cost.rs | 0 .../artcraft/hunyuan_3d_3p1_pro/mod.rs | 0 .../artcraft/hunyuan_3d_3p1_pro/request.rs | 0 .../artcraft/hunyuan_3d_3p1_rapid/build.rs | 0 .../artcraft/hunyuan_3d_3p1_rapid/cost.rs | 0 .../artcraft/hunyuan_3d_3p1_rapid/mod.rs | 0 .../artcraft/hunyuan_3d_3p1_rapid/request.rs | 0 .../hunyuan_3d_3p1_smart_topology/build.rs | 0 .../hunyuan_3d_3p1_smart_topology/cost.rs | 0 .../hunyuan_3d_3p1_smart_topology/mod.rs | 0 .../hunyuan_3d_3p1_smart_topology/request.rs | 0 .../providers/artcraft/meshy_v6/build.rs | 0 .../providers/artcraft/meshy_v6/cost.rs | 0 .../providers/artcraft/meshy_v6/mod.rs | 0 .../providers/artcraft/meshy_v6/request.rs | 0 .../generate_mesh/providers/artcraft/mod.rs | 0 .../providers/artcraft/request_common.rs | 0 .../providers/artcraft/resolve.rs | 0 .../artcraft/rodin_2p5_fast/build.rs | 0 .../providers/artcraft/rodin_2p5_fast/cost.rs | 0 .../providers/artcraft/rodin_2p5_fast/mod.rs | 0 .../artcraft/rodin_2p5_fast/request.rs | 0 .../providers/artcraft/tripo3d_h3p1/build.rs | 0 .../providers/artcraft/tripo3d_h3p1/cost.rs | 0 .../providers/artcraft/tripo3d_h3p1/mod.rs | 0 .../artcraft/tripo3d_h3p1/request.rs | 0 .../providers/fal/hunyuan3d_3/build.rs | 0 .../providers/fal/hunyuan3d_3/cost.rs | 0 .../providers/fal/hunyuan3d_3/mod.rs | 0 .../providers/fal/hunyuan3d_3/request.rs | 0 .../providers/fal/hunyuan3d_3_sketch/build.rs | 0 .../providers/fal/hunyuan3d_3_sketch/cost.rs | 0 .../providers/fal/hunyuan3d_3_sketch/mod.rs | 0 .../fal/hunyuan3d_3_sketch/request.rs | 0 .../providers/fal/hunyuan_3d_2p0/build.rs | 0 .../providers/fal/hunyuan_3d_2p0/cost.rs | 0 .../providers/fal/hunyuan_3d_2p0/mod.rs | 0 .../providers/fal/hunyuan_3d_2p0/request.rs | 0 .../providers/fal/hunyuan_3d_2p1/build.rs | 0 .../providers/fal/hunyuan_3d_2p1/cost.rs | 0 .../providers/fal/hunyuan_3d_2p1/mod.rs | 0 .../providers/fal/hunyuan_3d_2p1/request.rs | 0 .../fal/hunyuan_3d_3p1_part/build.rs | 0 .../providers/fal/hunyuan_3d_3p1_part/cost.rs | 0 .../providers/fal/hunyuan_3d_3p1_part/mod.rs | 0 .../fal/hunyuan_3d_3p1_part/request.rs | 0 .../providers/fal/hunyuan_3d_3p1_pro/build.rs | 0 .../providers/fal/hunyuan_3d_3p1_pro/cost.rs | 0 .../providers/fal/hunyuan_3d_3p1_pro/mod.rs | 0 .../fal/hunyuan_3d_3p1_pro/request.rs | 0 .../fal/hunyuan_3d_3p1_rapid/build.rs | 0 .../fal/hunyuan_3d_3p1_rapid/cost.rs | 0 .../providers/fal/hunyuan_3d_3p1_rapid/mod.rs | 0 .../fal/hunyuan_3d_3p1_rapid/request.rs | 0 .../hunyuan_3d_3p1_smart_topology/build.rs | 0 .../fal/hunyuan_3d_3p1_smart_topology/cost.rs | 0 .../fal/hunyuan_3d_3p1_smart_topology/mod.rs | 0 .../hunyuan_3d_3p1_smart_topology/request.rs | 0 .../providers/fal/meshy_v6/build.rs | 0 .../providers/fal/meshy_v6/cost.rs | 0 .../providers/fal/meshy_v6/mod.rs | 0 .../providers/fal/meshy_v6/request.rs | 0 .../generate_mesh/providers/fal/mod.rs | 0 .../generate_mesh/providers/fal/resolve.rs | 0 .../providers/fal/rodin_2p5_fast/build.rs | 0 .../providers/fal/rodin_2p5_fast/cost.rs | 0 .../providers/fal/rodin_2p5_fast/mod.rs | 0 .../providers/fal/rodin_2p5_fast/request.rs | 0 .../providers/fal/tripo3d_h3p1/build.rs | 0 .../providers/fal/tripo3d_h3p1/cost.rs | 0 .../providers/fal/tripo3d_h3p1/mod.rs | 0 .../providers/fal/tripo3d_h3p1/request.rs | 0 .../generate/generate_mesh/providers/mod.rs | 0 .../providers/reject_unsupported.rs | 0 ...ate_splat_cost_artcraft_marble_0p1_mini.rs | 0 ...ate_splat_cost_artcraft_marble_0p1_plus.rs | 0 .../generate_splat/cost/artcraft/mod.rs | 0 .../src/generate/generate_splat/cost/mod.rs | 0 ...generate_splat_artcraft_marble_0p1_mini.rs | 0 ...generate_splat_artcraft_marble_0p1_plus.rs | 0 .../generate_splat/execute/artcraft/mod.rs | 0 .../generate/generate_splat/execute/mod.rs | 0 .../generate_splat/generate_splat_request.rs | 0 .../generate_splat_request_builder.rs | 0 .../generate_splat/generate_splat_response.rs | 0 .../src/generate/generate_splat/mod.rs | 0 .../generate_splat/plan/artcraft/mod.rs | 0 ...generate_splat_artcraft_marble_0p1_mini.rs | 0 ...generate_splat_artcraft_marble_0p1_plus.rs | 0 .../src/generate/generate_splat/plan/mod.rs | 0 .../providers/artcraft/build_common.rs | 0 .../providers/artcraft/cost_common.rs | 0 .../providers/artcraft/marble_1p0/build.rs | 0 .../providers/artcraft/marble_1p0/cost.rs | 0 .../providers/artcraft/marble_1p0/mod.rs | 0 .../providers/artcraft/marble_1p0/request.rs | 0 .../artcraft/marble_1p0_draft/build.rs | 0 .../artcraft/marble_1p0_draft/cost.rs | 0 .../artcraft/marble_1p0_draft/mod.rs | 0 .../artcraft/marble_1p0_draft/request.rs | 0 .../providers/artcraft/marble_1p1/build.rs | 0 .../providers/artcraft/marble_1p1/cost.rs | 0 .../providers/artcraft/marble_1p1/mod.rs | 0 .../providers/artcraft/marble_1p1/request.rs | 0 .../artcraft/marble_1p1_plus/build.rs | 0 .../artcraft/marble_1p1_plus/cost.rs | 0 .../providers/artcraft/marble_1p1_plus/mod.rs | 0 .../artcraft/marble_1p1_plus/request.rs | 0 .../generate_splat/providers/artcraft/mod.rs | 0 .../providers/artcraft/request_common.rs | 0 .../providers/artcraft/resolve.rs | 0 .../providers/artcraft/triposplat/build.rs | 0 .../providers/artcraft/triposplat/cost.rs | 0 .../providers/artcraft/triposplat/mod.rs | 0 .../providers/artcraft/triposplat/request.rs | 0 .../generate_splat/providers/fal/mod.rs | 0 .../providers/fal/request_common.rs | 0 .../providers/fal/triposplat/build.rs | 0 .../providers/fal/triposplat/cost.rs | 0 .../providers/fal/triposplat/mod.rs | 0 .../providers/fal/triposplat/request.rs | 0 .../generate/generate_splat/providers/mod.rs | 0 .../providers/worldlabs/build_common.rs | 0 .../providers/worldlabs/draft_common.rs | 0 .../providers/worldlabs/marble_1p0/build.rs | 0 .../providers/worldlabs/marble_1p0/cost.rs | 0 .../providers/worldlabs/marble_1p0/draft.rs | 0 .../providers/worldlabs/marble_1p0/mod.rs | 0 .../providers/worldlabs/marble_1p0/request.rs | 0 .../worldlabs/marble_1p0_draft/build.rs | 0 .../worldlabs/marble_1p0_draft/cost.rs | 0 .../worldlabs/marble_1p0_draft/draft.rs | 0 .../worldlabs/marble_1p0_draft/mod.rs | 0 .../worldlabs/marble_1p0_draft/request.rs | 0 .../providers/worldlabs/marble_1p1/build.rs | 0 .../providers/worldlabs/marble_1p1/cost.rs | 0 .../providers/worldlabs/marble_1p1/draft.rs | 0 .../providers/worldlabs/marble_1p1/mod.rs | 0 .../providers/worldlabs/marble_1p1/request.rs | 0 .../worldlabs/marble_1p1_plus/build.rs | 0 .../worldlabs/marble_1p1_plus/cost.rs | 0 .../worldlabs/marble_1p1_plus/draft.rs | 0 .../worldlabs/marble_1p1_plus/mod.rs | 0 .../worldlabs/marble_1p1_plus/request.rs | 0 .../generate_splat/providers/worldlabs/mod.rs | 0 .../providers/worldlabs/request_common.rs | 0 .../providers/worldlabs/resolve.rs | 0 .../splat_generation_cost_estimate.rs | 0 .../generate_splat/splat_generation_draft.rs | 0 .../splat_generation_draft_context.rs | 0 .../splat_generation_draft_or_request.rs | 0 .../generate_splat/splat_generation_plan.rs | 0 .../splat_generation_request.rs | 0 .../src/generate/generate_video/CLAUDE.md | 0 .../generate_video_request_builder.rs | 0 .../generate_video/generate_video_response.rs | 0 .../src/generate/generate_video/mod.rs | 0 .../providers/artcraft/build_common.rs | 0 .../artcraft/grok_imagine_video/build.rs | 0 .../artcraft/grok_imagine_video/cost.rs | 0 .../artcraft/grok_imagine_video/mod.rs | 0 .../artcraft/grok_imagine_video/request.rs | 0 .../artcraft/grok_imagine_video_1p5/build.rs | 0 .../artcraft/grok_imagine_video_1p5/cost.rs | 0 .../artcraft/grok_imagine_video_1p5/mod.rs | 0 .../grok_imagine_video_1p5/request.rs | 0 .../artcraft/happy_horse_1p0/build.rs | 0 .../artcraft/happy_horse_1p0/cost.rs | 0 .../providers/artcraft/happy_horse_1p0/mod.rs | 0 .../artcraft/happy_horse_1p0/request.rs | 0 .../providers/artcraft/kling_1_6_pro/build.rs | 0 .../providers/artcraft/kling_1_6_pro/cost.rs | 0 .../providers/artcraft/kling_1_6_pro/mod.rs | 0 .../artcraft/kling_1_6_pro/request.rs | 0 .../artcraft/kling_2_1_master/build.rs | 0 .../artcraft/kling_2_1_master/cost.rs | 0 .../artcraft/kling_2_1_master/mod.rs | 0 .../artcraft/kling_2_1_master/request.rs | 0 .../providers/artcraft/kling_2_1_pro/build.rs | 0 .../providers/artcraft/kling_2_1_pro/cost.rs | 0 .../providers/artcraft/kling_2_1_pro/mod.rs | 0 .../artcraft/kling_2_1_pro/request.rs | 0 .../artcraft/kling_2_5_turbo_pro/build.rs | 0 .../artcraft/kling_2_5_turbo_pro/cost.rs | 0 .../artcraft/kling_2_5_turbo_pro/mod.rs | 0 .../artcraft/kling_2_5_turbo_pro/request.rs | 0 .../providers/artcraft/kling_2_6_pro/build.rs | 0 .../providers/artcraft/kling_2_6_pro/cost.rs | 0 .../providers/artcraft/kling_2_6_pro/mod.rs | 0 .../artcraft/kling_2_6_pro/request.rs | 0 .../providers/artcraft/kling_3p0_pro/build.rs | 0 .../providers/artcraft/kling_3p0_pro/cost.rs | 0 .../providers/artcraft/kling_3p0_pro/mod.rs | 0 .../artcraft/kling_3p0_pro/request.rs | 0 .../artcraft/kling_3p0_standard/build.rs | 0 .../artcraft/kling_3p0_standard/cost.rs | 0 .../artcraft/kling_3p0_standard/mod.rs | 0 .../artcraft/kling_3p0_standard/request.rs | 0 .../generate_video/providers/artcraft/mod.rs | 0 .../providers/artcraft/parity_tests.rs | 0 .../providers/artcraft/preview_model/build.rs | 0 .../providers/artcraft/preview_model/cost.rs | 0 .../providers/artcraft/preview_model/mod.rs | 0 .../artcraft/preview_model/request.rs | 0 .../artcraft/preview_model_fast/build.rs | 0 .../artcraft/preview_model_fast/cost.rs | 0 .../artcraft/preview_model_fast/mod.rs | 0 .../artcraft/preview_model_fast/request.rs | 0 .../providers/artcraft/request_common.rs | 0 .../providers/artcraft/resolve.rs | 0 .../artcraft/seedance_1p0_lite/build.rs | 0 .../artcraft/seedance_1p0_lite/cost.rs | 0 .../artcraft/seedance_1p0_lite/mod.rs | 0 .../artcraft/seedance_1p0_lite/request.rs | 0 .../artcraft/seedance_1p5_pro/build.rs | 0 .../artcraft/seedance_1p5_pro/cost.rs | 0 .../artcraft/seedance_1p5_pro/mod.rs | 0 .../artcraft/seedance_1p5_pro/request.rs | 0 .../providers/artcraft/seedance_2p0/build.rs | 0 .../providers/artcraft/seedance_2p0/cost.rs | 0 .../providers/artcraft/seedance_2p0/mod.rs | 0 .../artcraft/seedance_2p0/request.rs | 0 .../artcraft/seedance_2p0_bp/build.rs | 0 .../artcraft/seedance_2p0_bp/cost.rs | 0 .../providers/artcraft/seedance_2p0_bp/mod.rs | 0 .../artcraft/seedance_2p0_bp/request.rs | 0 .../artcraft/seedance_2p0_bp_fast/build.rs | 0 .../artcraft/seedance_2p0_bp_fast/cost.rs | 0 .../artcraft/seedance_2p0_bp_fast/mod.rs | 0 .../artcraft/seedance_2p0_bp_fast/request.rs | 0 .../artcraft/seedance_2p0_bp_mini/build.rs | 0 .../artcraft/seedance_2p0_bp_mini/cost.rs | 0 .../artcraft/seedance_2p0_bp_mini/mod.rs | 0 .../artcraft/seedance_2p0_bp_mini/request.rs | 0 .../artcraft/seedance_2p0_bpu/build.rs | 0 .../artcraft/seedance_2p0_bpu/cost.rs | 0 .../artcraft/seedance_2p0_bpu/mod.rs | 0 .../artcraft/seedance_2p0_bpu/request.rs | 0 .../artcraft/seedance_2p0_bpu_fast/build.rs | 0 .../artcraft/seedance_2p0_bpu_fast/cost.rs | 0 .../artcraft/seedance_2p0_bpu_fast/mod.rs | 0 .../artcraft/seedance_2p0_bpu_fast/request.rs | 0 .../artcraft/seedance_2p0_bpu_mini/build.rs | 0 .../artcraft/seedance_2p0_bpu_mini/cost.rs | 0 .../artcraft/seedance_2p0_bpu_mini/mod.rs | 0 .../artcraft/seedance_2p0_bpu_mini/request.rs | 0 .../artcraft/seedance_2p0_fast/build.rs | 0 .../artcraft/seedance_2p0_fast/cost.rs | 0 .../artcraft/seedance_2p0_fast/mod.rs | 0 .../artcraft/seedance_2p0_fast/request.rs | 0 .../artcraft/seedance_2p0_mini/build.rs | 0 .../artcraft/seedance_2p0_mini/cost.rs | 0 .../artcraft/seedance_2p0_mini/mod.rs | 0 .../artcraft/seedance_2p0_mini/request.rs | 0 .../artcraft/seedance_2p0_u/build.rs | 0 .../providers/artcraft/seedance_2p0_u/cost.rs | 0 .../providers/artcraft/seedance_2p0_u/mod.rs | 0 .../artcraft/seedance_2p0_u/request.rs | 0 .../artcraft/seedance_2p0_u_fast/build.rs | 0 .../artcraft/seedance_2p0_u_fast/cost.rs | 0 .../artcraft/seedance_2p0_u_fast/mod.rs | 0 .../artcraft/seedance_2p0_u_fast/request.rs | 0 .../providers/artcraft/seedance_common.rs | 0 .../providers/artcraft/sora_2/build.rs | 0 .../providers/artcraft/sora_2/cost.rs | 0 .../providers/artcraft/sora_2/mod.rs | 0 .../providers/artcraft/sora_2/request.rs | 0 .../providers/artcraft/sora_2_pro/build.rs | 0 .../providers/artcraft/sora_2_pro/cost.rs | 0 .../providers/artcraft/sora_2_pro/mod.rs | 0 .../providers/artcraft/sora_2_pro/request.rs | 0 .../providers/artcraft/veo_2/build.rs | 0 .../providers/artcraft/veo_2/cost.rs | 0 .../providers/artcraft/veo_2/mod.rs | 0 .../providers/artcraft/veo_2/request.rs | 0 .../providers/artcraft/veo_3/build.rs | 0 .../providers/artcraft/veo_3/cost.rs | 0 .../providers/artcraft/veo_3/mod.rs | 0 .../providers/artcraft/veo_3/request.rs | 0 .../providers/artcraft/veo_3_fast/build.rs | 0 .../providers/artcraft/veo_3_fast/cost.rs | 0 .../providers/artcraft/veo_3_fast/mod.rs | 0 .../providers/artcraft/veo_3_fast/request.rs | 0 .../providers/artcraft/veo_3p1/build.rs | 0 .../providers/artcraft/veo_3p1/cost.rs | 0 .../providers/artcraft/veo_3p1/mod.rs | 0 .../providers/artcraft/veo_3p1/request.rs | 0 .../providers/artcraft/veo_3p1_fast/build.rs | 0 .../providers/artcraft/veo_3p1_fast/cost.rs | 0 .../providers/artcraft/veo_3p1_fast/mod.rs | 0 .../artcraft/veo_3p1_fast/request.rs | 0 .../providers/artcraft/veo_3p1_lite/build.rs | 0 .../providers/artcraft/veo_3p1_lite/cost.rs | 0 .../providers/artcraft/veo_3p1_lite/mod.rs | 0 .../artcraft/veo_3p1_lite/request.rs | 0 .../providers/artcraft/vidu_q3/build.rs | 0 .../providers/artcraft/vidu_q3/cost.rs | 0 .../providers/artcraft/vidu_q3/mod.rs | 0 .../providers/artcraft/vidu_q3/request.rs | 0 .../providers/artcraft/vidu_q3_turbo/build.rs | 0 .../providers/artcraft/vidu_q3_turbo/cost.rs | 0 .../providers/artcraft/vidu_q3_turbo/mod.rs | 0 .../artcraft/vidu_q3_turbo/request.rs | 0 .../providers/fal/kling_1_6_pro/build.rs | 0 .../providers/fal/kling_1_6_pro/cost.rs | 0 .../providers/fal/kling_1_6_pro/mod.rs | 0 .../providers/fal/kling_1_6_pro/request.rs | 0 .../providers/fal/kling_2_1_master/build.rs | 0 .../providers/fal/kling_2_1_master/cost.rs | 0 .../providers/fal/kling_2_1_master/mod.rs | 0 .../providers/fal/kling_2_1_master/request.rs | 0 .../providers/fal/kling_2_1_pro/build.rs | 0 .../providers/fal/kling_2_1_pro/cost.rs | 0 .../providers/fal/kling_2_1_pro/mod.rs | 0 .../providers/fal/kling_2_1_pro/request.rs | 0 .../fal/kling_2_5_turbo_pro/build.rs | 0 .../providers/fal/kling_2_5_turbo_pro/cost.rs | 0 .../providers/fal/kling_2_5_turbo_pro/mod.rs | 0 .../fal/kling_2_5_turbo_pro/request.rs | 0 .../providers/fal/kling_2_6_pro/build.rs | 0 .../providers/fal/kling_2_6_pro/cost.rs | 0 .../providers/fal/kling_2_6_pro/mod.rs | 0 .../providers/fal/kling_2_6_pro/request.rs | 0 .../providers/fal/kling_3p0_pro/build.rs | 0 .../providers/fal/kling_3p0_pro/cost.rs | 0 .../providers/fal/kling_3p0_pro/mod.rs | 0 .../providers/fal/kling_3p0_pro/request.rs | 0 .../providers/fal/kling_3p0_standard/build.rs | 0 .../providers/fal/kling_3p0_standard/cost.rs | 0 .../providers/fal/kling_3p0_standard/mod.rs | 0 .../fal/kling_3p0_standard/request.rs | 0 .../generate_video/providers/fal/mod.rs | 0 .../providers/fal/seedance_1p0_lite/build.rs | 0 .../providers/fal/seedance_1p0_lite/cost.rs | 0 .../providers/fal/seedance_1p0_lite/mod.rs | 0 .../fal/seedance_1p0_lite/request.rs | 0 .../providers/fal/seedance_1p5_pro/build.rs | 0 .../providers/fal/seedance_1p5_pro/cost.rs | 0 .../providers/fal/seedance_1p5_pro/mod.rs | 0 .../providers/fal/seedance_1p5_pro/request.rs | 0 .../providers/fal/sora_2/build.rs | 0 .../providers/fal/sora_2/cost.rs | 0 .../providers/fal/sora_2/mod.rs | 0 .../providers/fal/sora_2/request.rs | 0 .../providers/fal/sora_2_pro/build.rs | 0 .../providers/fal/sora_2_pro/cost.rs | 0 .../providers/fal/sora_2_pro/mod.rs | 0 .../providers/fal/sora_2_pro/request.rs | 0 .../providers/fal/veo_2/build.rs | 0 .../providers/fal/veo_2/cost.rs | 0 .../generate_video/providers/fal/veo_2/mod.rs | 0 .../providers/fal/veo_2/request.rs | 0 .../providers/fal/veo_3/build.rs | 0 .../providers/fal/veo_3/cost.rs | 0 .../generate_video/providers/fal/veo_3/mod.rs | 0 .../providers/fal/veo_3/request.rs | 0 .../providers/fal/veo_3_fast/build.rs | 0 .../providers/fal/veo_3_fast/cost.rs | 0 .../providers/fal/veo_3_fast/mod.rs | 0 .../providers/fal/veo_3_fast/request.rs | 0 .../providers/fal/veo_3p1/build.rs | 0 .../providers/fal/veo_3p1/cost.rs | 0 .../providers/fal/veo_3p1/mod.rs | 0 .../providers/fal/veo_3p1/request.rs | 0 .../providers/fal/veo_3p1_fast/build.rs | 0 .../providers/fal/veo_3p1_fast/cost.rs | 0 .../providers/fal/veo_3p1_fast/mod.rs | 0 .../providers/fal/veo_3p1_fast/request.rs | 0 .../providers/fal/veo_3p1_lite/build.rs | 0 .../providers/fal/veo_3p1_lite/cost.rs | 0 .../providers/fal/veo_3p1_lite/mod.rs | 0 .../providers/fal/veo_3p1_lite/request.rs | 0 .../providers/fal/vidu_q3/build.rs | 0 .../providers/fal/vidu_q3/cost.rs | 0 .../providers/fal/vidu_q3/mod.rs | 0 .../providers/fal/vidu_q3/request.rs | 0 .../providers/fal/vidu_q3_turbo/build.rs | 0 .../providers/fal/vidu_q3_turbo/cost.rs | 0 .../providers/fal/vidu_q3_turbo/mod.rs | 0 .../providers/fal/vidu_q3_turbo/request.rs | 0 .../generate_video/providers/gmicloud/mod.rs | 0 .../gmicloud/seedance_2p0_fast_g/build.rs | 0 .../gmicloud/seedance_2p0_fast_g/cost.rs | 0 .../gmicloud/seedance_2p0_fast_g/mod.rs | 0 .../gmicloud/seedance_2p0_fast_g/request.rs | 0 .../gmicloud/seedance_2p0_g/build.rs | 0 .../providers/gmicloud/seedance_2p0_g/cost.rs | 0 .../providers/gmicloud/seedance_2p0_g/mod.rs | 0 .../gmicloud/seedance_2p0_g/request.rs | 0 .../grok_api/grok_imagine_video/build.rs | 0 .../grok_api/grok_imagine_video/cost.rs | 0 .../grok_api/grok_imagine_video/mod.rs | 0 .../grok_api/grok_imagine_video/request.rs | 0 .../grok_api/grok_imagine_video_1p5/build.rs | 0 .../grok_api/grok_imagine_video_1p5/cost.rs | 0 .../grok_api/grok_imagine_video_1p5/mod.rs | 0 .../grok_imagine_video_1p5/request.rs | 0 .../generate_video/providers/grok_api/mod.rs | 0 .../providers/kinovi/happy_horse_1p0/build.rs | 0 .../providers/kinovi/happy_horse_1p0/cost.rs | 0 .../providers/kinovi/happy_horse_1p0/draft.rs | 0 .../providers/kinovi/happy_horse_1p0/mod.rs | 0 .../kinovi/happy_horse_1p0/request.rs | 0 .../generate_video/providers/kinovi/mod.rs | 0 .../providers/kinovi/resolve.rs | 0 .../providers/kinovi/seedance_2p0/build.rs | 0 .../providers/kinovi/seedance_2p0/cost.rs | 0 .../providers/kinovi/seedance_2p0/draft.rs | 0 .../providers/kinovi/seedance_2p0/mod.rs | 0 .../providers/kinovi/seedance_2p0/request.rs | 0 .../kinovi/seedance_2p0_fast/build.rs | 0 .../kinovi/seedance_2p0_fast/cost.rs | 0 .../kinovi/seedance_2p0_fast/draft.rs | 0 .../providers/kinovi/seedance_2p0_fast/mod.rs | 0 .../kinovi/seedance_2p0_fast/request.rs | 0 .../kinovi/seedance_2p0_mini/build.rs | 0 .../kinovi/seedance_2p0_mini/cost.rs | 0 .../kinovi/seedance_2p0_mini/draft.rs | 0 .../providers/kinovi/seedance_2p0_mini/mod.rs | 0 .../kinovi/seedance_2p0_mini/request.rs | 0 .../generate_video/providers/kinovi/upload.rs | 0 .../generate/generate_video/providers/mod.rs | 0 .../video_generation_cost_estimate.rs | 0 .../generate_video/video_generation_draft.rs | 0 .../video_generation_draft_context.rs | 0 .../video_generation_draft_or_request.rs | 0 .../video_generation_request.rs | 0 .../src/generate/mod.rs | 0 .../{artcraft_router => router}/src/lib.rs | 0 .../src/test_helpers.rs | 0 .../src/utils/download_file.rs | 0 .../src/utils/mod.rs | 0 crates/artcraftx/Cargo.toml | 2 +- ...uter_aspect_ratio_to_enums_aspect_ratio.rs | 2 +- .../tauri_image_model_to_router_model.rs | 2 +- .../tauri_video_model_to_router_model.rs | 2 +- .../api_adapters/quality/common_quality.rs | 2 +- .../router_resolution_to_enums_resolution.rs | 2 +- .../credentials/artcraft_login_command.rs | 31 +-- .../artcraft/handle_image_edit_artcraft.rs | 2 +- .../handle_image_edit_artcraft_via_router.rs | 20 +- .../artcraft/handle_text_to_image_artcraft.rs | 2 +- ...andle_text_to_image_artcraft_via_router.rs | 22 +- ...be_notify_frontend_of_credential_errors.rs | 35 +++ .../src/commands/enqueue/common/mod.rs | 1 + .../common/notify_frontend_of_errors.rs | 2 + .../src/commands/enqueue/generate_error.rs | 19 +- .../artcraft/handle_artcraft_gaussian.rs | 2 +- .../handle_artcraft_splat_via_router.rs | 12 +- ...router_image_request_to_artcraft_prompt.rs | 14 +- ...router_video_request_to_artcraft_prompt.rs | 22 +- .../generate_image/generate_image_command.rs | 44 +--- .../legacy/artcraft_flux_2_lora_angles.rs | 16 +- .../legacy/artcraft_qwen_edit_2511_angles.rs | 16 +- .../generate/generate_image/providers/mod.rs | 2 +- .../handle_api_providers.rs | 22 +- .../router/handle_credential_router.rs | 243 ++++++++++++++++++ .../handle_router.rs | 4 +- .../handle_web_login_providers.rs | 0 .../{artcraft_router => router}/mod.rs | 1 + .../utils/convert_enums_to_router.rs | 6 +- .../utils/map_media_files_to_urls.rs | 0 .../{artcraft_router => router}/utils/mod.rs | 0 .../tauri_generate_image_request.rs | 8 + .../handle_artcraft_video_via_router.rs | 26 +- .../generate/generate_video/request.rs | 4 +- .../src/credentials/artcraft_api_host.rs | 21 ++ crates/artcraftx/src/credentials/mod.rs | 1 + .../src/events/functional_events/mod.rs | 1 + .../show_credential_error_modal_event.rs | 17 ++ .../enums/src/tauri/ux/tauri_event_name.rs | 14 +- .../CredentialErrorModal.tsx | 41 +++ .../apps/artcraft/app/src/pages/MainApp.tsx | 2 + .../app/src/pages/PageImage/TextToImage.tsx | 3 + .../promptbox/src/lib/PromptBoxImage.tsx | 9 + .../src/lib/generate/GenerateImage.ts | 10 + frontend/libs/tauri-events/src/index.ts | 1 + .../ShowCredentialErrorModalEvent.ts | 34 +++ 783 files changed, 623 insertions(+), 187 deletions(-) rename crates/api_clients/{artcraft_router => router}/Cargo.toml (94%) rename crates/api_clients/{artcraft_router => router}/src/api/audio_list_ref.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/api/character_list_ref.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/api/image_list_ref.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/api/image_ref.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/api/mesh_ref.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/api/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/api/router_aspect_ratio.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/api/router_audio_model.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/api/router_bitrate.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/api/router_image_model.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/api/router_mesh_model.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/api/router_provider.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/api/router_quality.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/api/router_resolution.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/api/router_splat_model.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/api/router_video_model.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/api/video_list_ref.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/api/video_ref.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/client/generation_mode_mismatch_strategy.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/client/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/client/multi_router_client.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/client/multi_router_client_builder.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/client/request_mismatch_mitigation_strategy.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/client/router_artcraft_client.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/client/router_client.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/client/router_fal_client.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/client/router_gmicloud_client.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/client/router_grok_api_client.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/client/router_seedance2pro_client.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/client/router_worldlabs_client.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/errors/artcraft_router_error.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/errors/client_error.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/errors/download_error.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/errors/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/errors/provider_error.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/audio_generation_cost_estimate.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/audio_generation_draft.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/audio_generation_draft_context.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/audio_generation_draft_or_request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/audio_generation_request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/generate_audio_request_builder.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/generate_audio_response.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/artcraft/build_common.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/artcraft/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/artcraft/request_common.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/artcraft/resolve.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/artcraft/seed_audio_1p0/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/artcraft/seed_audio_1p0/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/artcraft/seed_audio_1p0/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/artcraft/seed_audio_1p0/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/artcraft/suno_music/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/artcraft/suno_music/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/artcraft/suno_music/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/artcraft/suno_music/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/artcraft/suno_remix/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/artcraft/suno_remix/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/artcraft/suno_remix/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/artcraft/suno_remix/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/artcraft/suno_sample/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/artcraft/suno_sample/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/artcraft/suno_sample/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/artcraft/suno_sample/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/artcraft/suno_sounds/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/artcraft/suno_sounds/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/artcraft/suno_sounds/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/artcraft/suno_sounds/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/fal/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/fal/seed_audio_1p0/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/fal/seed_audio_1p0/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/fal/seed_audio_1p0/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/fal/seed_audio_1p0/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/kinovi/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/kinovi/resolve.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/kinovi/suno_music/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/kinovi/suno_music/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/kinovi/suno_music/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/kinovi/suno_music/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/kinovi/suno_remix/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/kinovi/suno_remix/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/kinovi/suno_remix/draft.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/kinovi/suno_remix/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/kinovi/suno_remix/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/kinovi/suno_sample/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/kinovi/suno_sample/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/kinovi/suno_sample/draft.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/kinovi/suno_sample/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/kinovi/suno_sample/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/kinovi/suno_sounds/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/kinovi/suno_sounds/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/kinovi/suno_sounds/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/kinovi/suno_sounds/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_audio/providers/reject_unsupported.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/generate_image_request_builder.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/generate_image_response.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/image_generation_cost_estimate.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/image_generation_draft.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/image_generation_draft_context.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/image_generation_draft_or_request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/image_generation_request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/angle_validation.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/build_common.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/flux_1_dev/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/flux_1_dev/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/flux_1_dev/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/flux_1_dev/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/flux_1_schnell/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/flux_1_schnell/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/flux_1_schnell/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/flux_1_schnell/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/flux_2_lora_angles/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/flux_2_lora_angles/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/flux_2_lora_angles/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/flux_2_lora_angles/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/flux_pro_1p1/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/flux_pro_1p1/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/flux_pro_1p1/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/flux_pro_1p1/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/flux_pro_1p1_ultra/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/flux_pro_1p1_ultra/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/flux_pro_1p1_ultra/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/flux_pro_1p1_ultra/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/gpt_image_1/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/gpt_image_1/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/gpt_image_1/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/gpt_image_1/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/gpt_image_1p5/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/gpt_image_1p5/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/gpt_image_1p5/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/gpt_image_1p5/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/gpt_image_2/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/gpt_image_2/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/gpt_image_2/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/gpt_image_2/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/midjourney_7/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/midjourney_7/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/midjourney_7/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/midjourney_7/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/midjourney_7_niji/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/midjourney_7_niji/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/midjourney_7_niji/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/midjourney_7_niji/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/midjourney_8/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/midjourney_8/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/midjourney_8/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/midjourney_8/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/nano_banana/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/nano_banana/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/nano_banana/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/nano_banana/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/nano_banana_2/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/nano_banana_2/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/nano_banana_2/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/nano_banana_2/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/nano_banana_pro/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/nano_banana_pro/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/nano_banana_pro/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/nano_banana_pro/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/qwen_edit_2511_angles/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/qwen_edit_2511_angles/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/qwen_edit_2511_angles/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/qwen_edit_2511_angles/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/request_common.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/seedream_4/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/seedream_4/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/seedream_4/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/seedream_4/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/seedream_4p5/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/seedream_4p5/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/seedream_4p5/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/seedream_4p5/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/seedream_5_lite/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/seedream_5_lite/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/seedream_5_lite/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/seedream_5_lite/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/seedream_5p0_pro/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/seedream_5p0_pro/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/seedream_5p0_pro/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/seedream_5p0_pro/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/seedream_5p0_pro_ultra/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/seedream_5p0_pro_ultra/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/seedream_5p0_pro_ultra/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/artcraft/seedream_5p0_pro_ultra/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/flux_1_dev/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/flux_1_dev/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/flux_1_dev/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/flux_1_dev/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/flux_1_schnell/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/flux_1_schnell/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/flux_1_schnell/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/flux_1_schnell/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/flux_2_lora_angles/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/flux_2_lora_angles/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/flux_2_lora_angles/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/flux_2_lora_angles/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/flux_pro_1p1/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/flux_pro_1p1/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/flux_pro_1p1/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/flux_pro_1p1/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/flux_pro_1p1_ultra/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/flux_pro_1p1_ultra/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/flux_pro_1p1_ultra/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/flux_pro_1p1_ultra/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/gpt_image_1/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/gpt_image_1/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/gpt_image_1/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/gpt_image_1/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/gpt_image_1p5/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/gpt_image_1p5/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/gpt_image_1p5/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/gpt_image_1p5/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/gpt_image_2/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/gpt_image_2/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/gpt_image_2/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/gpt_image_2/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/nano_banana/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/nano_banana/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/nano_banana/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/nano_banana/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/nano_banana_2/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/nano_banana_2/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/nano_banana_2/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/nano_banana_2/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/nano_banana_pro/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/nano_banana_pro/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/nano_banana_pro/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/nano_banana_pro/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/qwen_edit_2511_angles/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/qwen_edit_2511_angles/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/qwen_edit_2511_angles/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/qwen_edit_2511_angles/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/seedream_4/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/seedream_4/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/seedream_4/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/seedream_4/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/seedream_4p5/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/seedream_4p5/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/seedream_4p5/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/seedream_4p5/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/seedream_5_lite/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/seedream_5_lite/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/seedream_5_lite/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/fal/seedream_5_lite/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/kinovi/midjourney_7/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/kinovi/midjourney_7/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/kinovi/midjourney_7/draft.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/kinovi/midjourney_7/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/kinovi/midjourney_7/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/kinovi/midjourney_7_niji/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/kinovi/midjourney_7_niji/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/kinovi/midjourney_7_niji/draft.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/kinovi/midjourney_7_niji/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/kinovi/midjourney_7_niji/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/kinovi/midjourney_8/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/kinovi/midjourney_8/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/kinovi/midjourney_8/draft.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/kinovi/midjourney_8/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/kinovi/midjourney_8/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/kinovi/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/kinovi/resolve.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/kinovi/seedream_5p0_pro/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/kinovi/seedream_5p0_pro/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/kinovi/seedream_5p0_pro/draft.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/kinovi/seedream_5p0_pro/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/kinovi/seedream_5p0_pro/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/kinovi/upload.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_image/providers/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/generate_mesh_request_builder.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/generate_mesh_response.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/mesh_generation_cost_estimate.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/mesh_generation_draft.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/mesh_generation_draft_context.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/mesh_generation_draft_or_request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/mesh_generation_request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/build_common.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3_sketch/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3_sketch/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3_sketch/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3_sketch/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p0/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p0/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p0/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p0/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p1/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p1/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p1/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p1/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_part/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_part/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_part/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_part/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_pro/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_pro/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_pro/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_pro/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_rapid/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_rapid/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_rapid/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_rapid/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_smart_topology/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_smart_topology/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_smart_topology/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_smart_topology/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/meshy_v6/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/meshy_v6/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/meshy_v6/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/meshy_v6/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/request_common.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/resolve.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/rodin_2p5_fast/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/rodin_2p5_fast/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/rodin_2p5_fast/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/rodin_2p5_fast/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/tripo3d_h3p1/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/tripo3d_h3p1/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/tripo3d_h3p1/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/artcraft/tripo3d_h3p1/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan3d_3/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan3d_3/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan3d_3/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan3d_3/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan3d_3_sketch/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan3d_3_sketch/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan3d_3_sketch/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan3d_3_sketch/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p0/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p0/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p0/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p0/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p1/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p1/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p1/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p1/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_part/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_part/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_part/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_part/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_pro/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_pro/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_pro/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_pro/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_rapid/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_rapid/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_rapid/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_rapid/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_smart_topology/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_smart_topology/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_smart_topology/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_smart_topology/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/meshy_v6/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/meshy_v6/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/meshy_v6/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/meshy_v6/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/resolve.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/rodin_2p5_fast/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/rodin_2p5_fast/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/rodin_2p5_fast/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/rodin_2p5_fast/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/tripo3d_h3p1/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/tripo3d_h3p1/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/tripo3d_h3p1/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/fal/tripo3d_h3p1/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_mesh/providers/reject_unsupported.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/cost/artcraft/estimate_splat_cost_artcraft_marble_0p1_mini.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/cost/artcraft/estimate_splat_cost_artcraft_marble_0p1_plus.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/cost/artcraft/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/cost/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/execute/artcraft/generate_splat_artcraft_marble_0p1_mini.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/execute/artcraft/generate_splat_artcraft_marble_0p1_plus.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/execute/artcraft/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/execute/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/generate_splat_request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/generate_splat_request_builder.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/generate_splat_response.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/plan/artcraft/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/plan/artcraft/plan_generate_splat_artcraft_marble_0p1_mini.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/plan/artcraft/plan_generate_splat_artcraft_marble_0p1_plus.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/plan/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/artcraft/build_common.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/artcraft/cost_common.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/artcraft/marble_1p0/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/artcraft/marble_1p0/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/artcraft/marble_1p0/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/artcraft/marble_1p0/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/artcraft/marble_1p0_draft/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/artcraft/marble_1p0_draft/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/artcraft/marble_1p0_draft/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/artcraft/marble_1p0_draft/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/artcraft/marble_1p1/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/artcraft/marble_1p1/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/artcraft/marble_1p1/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/artcraft/marble_1p1/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/artcraft/marble_1p1_plus/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/artcraft/marble_1p1_plus/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/artcraft/marble_1p1_plus/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/artcraft/marble_1p1_plus/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/artcraft/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/artcraft/request_common.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/artcraft/resolve.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/artcraft/triposplat/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/artcraft/triposplat/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/artcraft/triposplat/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/artcraft/triposplat/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/fal/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/fal/request_common.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/fal/triposplat/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/fal/triposplat/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/fal/triposplat/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/fal/triposplat/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/worldlabs/build_common.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/worldlabs/draft_common.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/worldlabs/marble_1p0/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/worldlabs/marble_1p0/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/worldlabs/marble_1p0/draft.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/worldlabs/marble_1p0/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/worldlabs/marble_1p0/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/worldlabs/marble_1p0_draft/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/worldlabs/marble_1p0_draft/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/worldlabs/marble_1p0_draft/draft.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/worldlabs/marble_1p0_draft/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/worldlabs/marble_1p0_draft/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/worldlabs/marble_1p1/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/worldlabs/marble_1p1/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/worldlabs/marble_1p1/draft.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/worldlabs/marble_1p1/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/worldlabs/marble_1p1/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/worldlabs/marble_1p1_plus/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/worldlabs/marble_1p1_plus/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/worldlabs/marble_1p1_plus/draft.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/worldlabs/marble_1p1_plus/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/worldlabs/marble_1p1_plus/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/worldlabs/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/worldlabs/request_common.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/providers/worldlabs/resolve.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/splat_generation_cost_estimate.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/splat_generation_draft.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/splat_generation_draft_context.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/splat_generation_draft_or_request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/splat_generation_plan.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_splat/splat_generation_request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/CLAUDE.md (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/generate_video_request_builder.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/generate_video_response.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/build_common.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/grok_imagine_video/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/grok_imagine_video/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/grok_imagine_video/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/grok_imagine_video/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/grok_imagine_video_1p5/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/grok_imagine_video_1p5/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/grok_imagine_video_1p5/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/grok_imagine_video_1p5/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/happy_horse_1p0/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/happy_horse_1p0/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/happy_horse_1p0/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/happy_horse_1p0/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/kling_1_6_pro/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/kling_1_6_pro/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/kling_1_6_pro/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/kling_1_6_pro/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/kling_2_1_master/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/kling_2_1_master/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/kling_2_1_master/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/kling_2_1_master/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/kling_2_1_pro/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/kling_2_1_pro/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/kling_2_1_pro/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/kling_2_1_pro/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/kling_2_5_turbo_pro/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/kling_2_5_turbo_pro/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/kling_2_5_turbo_pro/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/kling_2_5_turbo_pro/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/kling_2_6_pro/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/kling_2_6_pro/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/kling_2_6_pro/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/kling_2_6_pro/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/kling_3p0_pro/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/kling_3p0_pro/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/kling_3p0_pro/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/kling_3p0_pro/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/kling_3p0_standard/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/kling_3p0_standard/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/kling_3p0_standard/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/kling_3p0_standard/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/parity_tests.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/preview_model/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/preview_model/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/preview_model/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/preview_model/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/preview_model_fast/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/preview_model_fast/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/preview_model_fast/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/preview_model_fast/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/request_common.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/resolve.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_1p0_lite/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_1p0_lite/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_1p0_lite/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_1p0_lite/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_1p5_pro/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_1p5_pro/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_1p5_pro/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_1p5_pro/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_bp/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_bp/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_bp/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_bp/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_fast/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_fast/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_fast/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_fast/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_mini/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_mini/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_mini/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_mini/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_fast/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_fast/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_fast/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_fast/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_mini/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_mini/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_mini/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_mini/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_fast/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_fast/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_fast/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_fast/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_mini/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_mini/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_mini/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_mini/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_u/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_u/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_u/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_u/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_u_fast/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_u_fast/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_u_fast/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_2p0_u_fast/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/seedance_common.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/sora_2/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/sora_2/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/sora_2/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/sora_2/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/sora_2_pro/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/sora_2_pro/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/sora_2_pro/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/sora_2_pro/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/veo_2/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/veo_2/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/veo_2/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/veo_2/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/veo_3/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/veo_3/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/veo_3/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/veo_3/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/veo_3_fast/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/veo_3_fast/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/veo_3_fast/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/veo_3_fast/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/veo_3p1/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/veo_3p1/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/veo_3p1/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/veo_3p1/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/veo_3p1_fast/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/veo_3p1_fast/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/veo_3p1_fast/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/veo_3p1_fast/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/veo_3p1_lite/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/veo_3p1_lite/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/veo_3p1_lite/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/veo_3p1_lite/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/vidu_q3/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/vidu_q3/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/vidu_q3/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/vidu_q3/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/vidu_q3_turbo/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/vidu_q3_turbo/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/vidu_q3_turbo/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/artcraft/vidu_q3_turbo/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/kling_1_6_pro/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/kling_1_6_pro/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/kling_1_6_pro/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/kling_1_6_pro/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/kling_2_1_master/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/kling_2_1_master/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/kling_2_1_master/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/kling_2_1_master/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/kling_2_1_pro/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/kling_2_1_pro/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/kling_2_1_pro/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/kling_2_1_pro/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/kling_2_5_turbo_pro/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/kling_2_5_turbo_pro/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/kling_2_5_turbo_pro/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/kling_2_5_turbo_pro/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/kling_2_6_pro/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/kling_2_6_pro/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/kling_2_6_pro/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/kling_2_6_pro/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/kling_3p0_pro/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/kling_3p0_pro/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/kling_3p0_pro/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/kling_3p0_pro/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/kling_3p0_standard/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/kling_3p0_standard/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/kling_3p0_standard/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/kling_3p0_standard/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/seedance_1p0_lite/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/seedance_1p0_lite/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/seedance_1p0_lite/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/seedance_1p0_lite/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/seedance_1p5_pro/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/seedance_1p5_pro/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/seedance_1p5_pro/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/seedance_1p5_pro/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/sora_2/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/sora_2/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/sora_2/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/sora_2/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/sora_2_pro/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/sora_2_pro/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/sora_2_pro/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/sora_2_pro/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/veo_2/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/veo_2/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/veo_2/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/veo_2/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/veo_3/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/veo_3/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/veo_3/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/veo_3/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/veo_3_fast/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/veo_3_fast/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/veo_3_fast/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/veo_3_fast/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/veo_3p1/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/veo_3p1/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/veo_3p1/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/veo_3p1/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/veo_3p1_fast/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/veo_3p1_fast/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/veo_3p1_fast/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/veo_3p1_fast/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/veo_3p1_lite/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/veo_3p1_lite/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/veo_3p1_lite/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/veo_3p1_lite/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/vidu_q3/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/vidu_q3/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/vidu_q3/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/vidu_q3/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/vidu_q3_turbo/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/vidu_q3_turbo/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/vidu_q3_turbo/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/fal/vidu_q3_turbo/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/gmicloud/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/gmicloud/seedance_2p0_fast_g/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/gmicloud/seedance_2p0_fast_g/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/gmicloud/seedance_2p0_fast_g/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/gmicloud/seedance_2p0_fast_g/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/gmicloud/seedance_2p0_g/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/gmicloud/seedance_2p0_g/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/gmicloud/seedance_2p0_g/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/gmicloud/seedance_2p0_g/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/grok_api/grok_imagine_video/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/grok_api/grok_imagine_video/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/grok_api/grok_imagine_video/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/grok_api/grok_imagine_video/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/grok_api/grok_imagine_video_1p5/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/grok_api/grok_imagine_video_1p5/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/grok_api/grok_imagine_video_1p5/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/grok_api/grok_imagine_video_1p5/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/grok_api/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/kinovi/happy_horse_1p0/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/kinovi/happy_horse_1p0/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/kinovi/happy_horse_1p0/draft.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/kinovi/happy_horse_1p0/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/kinovi/happy_horse_1p0/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/kinovi/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/kinovi/resolve.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/kinovi/seedance_2p0/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/kinovi/seedance_2p0/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/kinovi/seedance_2p0/draft.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/kinovi/seedance_2p0/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/kinovi/seedance_2p0/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/kinovi/seedance_2p0_fast/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/kinovi/seedance_2p0_fast/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/kinovi/seedance_2p0_fast/draft.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/kinovi/seedance_2p0_fast/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/kinovi/seedance_2p0_fast/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/kinovi/seedance_2p0_mini/build.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/kinovi/seedance_2p0_mini/cost.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/kinovi/seedance_2p0_mini/draft.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/kinovi/seedance_2p0_mini/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/kinovi/seedance_2p0_mini/request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/kinovi/upload.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/providers/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/video_generation_cost_estimate.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/video_generation_draft.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/video_generation_draft_context.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/video_generation_draft_or_request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/generate_video/video_generation_request.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/generate/mod.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/lib.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/test_helpers.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/utils/download_file.rs (100%) rename crates/api_clients/{artcraft_router => router}/src/utils/mod.rs (100%) create mode 100644 crates/artcraftx/src/commands/enqueue/common/maybe_notify_frontend_of_credential_errors.rs rename crates/artcraftx/src/commands/generate/generate_image/providers/{artcraft_router => router}/handle_api_providers.rs (87%) create mode 100644 crates/artcraftx/src/commands/generate/generate_image/providers/router/handle_credential_router.rs rename crates/artcraftx/src/commands/generate/generate_image/providers/{artcraft_router => router}/handle_router.rs (92%) rename crates/artcraftx/src/commands/generate/generate_image/providers/{artcraft_router => router}/handle_web_login_providers.rs (100%) rename crates/artcraftx/src/commands/generate/generate_image/providers/{artcraft_router => router}/mod.rs (73%) rename crates/artcraftx/src/commands/generate/generate_image/providers/{artcraft_router => router}/utils/convert_enums_to_router.rs (92%) rename crates/artcraftx/src/commands/generate/generate_image/providers/{artcraft_router => router}/utils/map_media_files_to_urls.rs (100%) rename crates/artcraftx/src/commands/generate/generate_image/providers/{artcraft_router => router}/utils/mod.rs (100%) create mode 100644 crates/artcraftx/src/credentials/artcraft_api_host.rs create mode 100644 crates/artcraftx/src/events/functional_events/show_credential_error_modal_event.rs create mode 100644 frontend/apps/artcraft/app/src/components/CredentialErrorModal/CredentialErrorModal.tsx create mode 100644 frontend/libs/tauri-events/src/lib/events/functional/ShowCredentialErrorModalEvent.ts diff --git a/Cargo.lock b/Cargo.lock index 9b7b41cc..b3bc2bbf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -205,41 +205,12 @@ dependencies = [ "workspace-build-acceleration", ] -[[package]] -name = "artcraft_router" -version = "0.0.1" -dependencies = [ - "anyhow", - "artcraft_client", - "enums", - "fal_client", - "gmicloud_client", - "grok_api_client", - "log", - "reqwest 0.12.23", - "seedance2pro_client", - "serde", - "serde_derive", - "serde_json", - "strum", - "test_data", - "test_utils", - "tokens", - "tokio", - "url_utils", - "uuid 1.22.0", - "workspace-build-acceleration", - "worldlabs_api_client", - "wreq", -] - [[package]] name = "artcraftx" version = "0.0.1" dependencies = [ "anyhow", "artcraft_client", - "artcraft_router", "base64 0.22.1", "build_metadata", "bytes", @@ -268,6 +239,7 @@ dependencies = [ "primitives", "rand 0.9.2", "reqwest 0.12.23", + "router", "serde", "serde_derive", "serde_json", @@ -5492,6 +5464,34 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "router" +version = "0.0.1" +dependencies = [ + "anyhow", + "artcraft_client", + "enums", + "fal_client", + "gmicloud_client", + "grok_api_client", + "log", + "reqwest 0.12.23", + "seedance2pro_client", + "serde", + "serde_derive", + "serde_json", + "strum", + "test_data", + "test_utils", + "tokens", + "tokio", + "url_utils", + "uuid 1.22.0", + "workspace-build-acceleration", + "worldlabs_api_client", + "wreq", +] + [[package]] name = "rsa" version = "0.9.6" diff --git a/Cargo.toml b/Cargo.toml index c2363350..6c51de95 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,13 +7,13 @@ members = [ # API clients for external services # These might be custom implementations or wrappers over other client libraries. "crates/api_clients/artcraft_client", - "crates/api_clients/artcraft_router", "crates/api_clients/fal_client", "crates/api_clients/gmicloud_client", "crates/api_clients/grok_api_client", "crates/api_clients/grok_consumer_client", "crates/api_clients/midjourney_client", "crates/api_clients/openai_sora_client", + "crates/api_clients/router", "crates/api_clients/seedance2pro_client", "crates/api_clients/worldlabs_api_client", "crates/api_clients/worldlabs_consumer_client", @@ -84,7 +84,6 @@ workspace-build-acceleration = { path = "crates/workspace-build-acceleration" } # Setting paths here ensures we don't need to do so in every crate's Cargo.toml # It makes refactoring much easier. artcraft_client = { path = "crates/api_clients/artcraft_client" } -artcraft_router = { path = "crates/api_clients/artcraft_router" } build_metadata = { path = "crates/lib/build_metadata" } cloudflare_errors = { path = "crates/lib/cloudflare_errors" } cloudflare_mitigation = { path = "crates/lib/cloudflare_mitigation" } @@ -106,6 +105,7 @@ midjourney_client = { path = "crates/api_clients/midjourney_client" } mimetypes = { path = "crates/lib/files/mimetypes" } openai_sora_client = { path = "crates/api_clients/openai_sora_client" } primitives = { path = "crates/lib/data/primitives" } +router = { path = "crates/api_clients/router" } seedance2pro_client = { path = "crates/api_clients/seedance2pro_client" } sqlite_database = { path = "crates/sqlite_database" } test_data = { path = "crates/testing/test_data" } diff --git a/crates/CLAUDE.md b/crates/CLAUDE.md index b57da136..a94648ab 100644 --- a/crates/CLAUDE.md +++ b/crates/CLAUDE.md @@ -48,7 +48,7 @@ helpers go in the parent `mod tests` so sub-modules can `use super::*`. ## Key Crates - `artcraftx` (desktop) — Tauri desktop app -- `artcraft_router` — provider routing for image/video generation (Artcraft, Fal, Seedance2Pro) +- `router` — provider routing for image/video generation (Artcraft, Fal, Seedance2Pro) - `artcraft_client` — HTTP client for the Artcraft/Storyteller API, including the API type definitions (`artcraft_client::api_defs`) - `seedance2pro_client` — HTTP client for the Kinovi/Seedance2Pro video generation service - `enums` — enum variants stored as strings diff --git a/crates/api_clients/artcraft_router/Cargo.toml b/crates/api_clients/router/Cargo.toml similarity index 94% rename from crates/api_clients/artcraft_router/Cargo.toml rename to crates/api_clients/router/Cargo.toml index e278cff4..47d6bae6 100644 --- a/crates/api_clients/artcraft_router/Cargo.toml +++ b/crates/api_clients/router/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "artcraft_router" +name = "router" edition = "2024" version = "0.0.1" publish = false @@ -8,7 +8,7 @@ publish = false normal = ["workspace-build-acceleration"] [lib] -name = "artcraft_router" +name = "router" path = "src/lib.rs" [dependencies] diff --git a/crates/api_clients/artcraft_router/src/api/audio_list_ref.rs b/crates/api_clients/router/src/api/audio_list_ref.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/api/audio_list_ref.rs rename to crates/api_clients/router/src/api/audio_list_ref.rs diff --git a/crates/api_clients/artcraft_router/src/api/character_list_ref.rs b/crates/api_clients/router/src/api/character_list_ref.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/api/character_list_ref.rs rename to crates/api_clients/router/src/api/character_list_ref.rs diff --git a/crates/api_clients/artcraft_router/src/api/image_list_ref.rs b/crates/api_clients/router/src/api/image_list_ref.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/api/image_list_ref.rs rename to crates/api_clients/router/src/api/image_list_ref.rs diff --git a/crates/api_clients/artcraft_router/src/api/image_ref.rs b/crates/api_clients/router/src/api/image_ref.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/api/image_ref.rs rename to crates/api_clients/router/src/api/image_ref.rs diff --git a/crates/api_clients/artcraft_router/src/api/mesh_ref.rs b/crates/api_clients/router/src/api/mesh_ref.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/api/mesh_ref.rs rename to crates/api_clients/router/src/api/mesh_ref.rs diff --git a/crates/api_clients/artcraft_router/src/api/mod.rs b/crates/api_clients/router/src/api/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/api/mod.rs rename to crates/api_clients/router/src/api/mod.rs diff --git a/crates/api_clients/artcraft_router/src/api/router_aspect_ratio.rs b/crates/api_clients/router/src/api/router_aspect_ratio.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/api/router_aspect_ratio.rs rename to crates/api_clients/router/src/api/router_aspect_ratio.rs diff --git a/crates/api_clients/artcraft_router/src/api/router_audio_model.rs b/crates/api_clients/router/src/api/router_audio_model.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/api/router_audio_model.rs rename to crates/api_clients/router/src/api/router_audio_model.rs diff --git a/crates/api_clients/artcraft_router/src/api/router_bitrate.rs b/crates/api_clients/router/src/api/router_bitrate.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/api/router_bitrate.rs rename to crates/api_clients/router/src/api/router_bitrate.rs diff --git a/crates/api_clients/artcraft_router/src/api/router_image_model.rs b/crates/api_clients/router/src/api/router_image_model.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/api/router_image_model.rs rename to crates/api_clients/router/src/api/router_image_model.rs diff --git a/crates/api_clients/artcraft_router/src/api/router_mesh_model.rs b/crates/api_clients/router/src/api/router_mesh_model.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/api/router_mesh_model.rs rename to crates/api_clients/router/src/api/router_mesh_model.rs diff --git a/crates/api_clients/artcraft_router/src/api/router_provider.rs b/crates/api_clients/router/src/api/router_provider.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/api/router_provider.rs rename to crates/api_clients/router/src/api/router_provider.rs diff --git a/crates/api_clients/artcraft_router/src/api/router_quality.rs b/crates/api_clients/router/src/api/router_quality.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/api/router_quality.rs rename to crates/api_clients/router/src/api/router_quality.rs diff --git a/crates/api_clients/artcraft_router/src/api/router_resolution.rs b/crates/api_clients/router/src/api/router_resolution.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/api/router_resolution.rs rename to crates/api_clients/router/src/api/router_resolution.rs diff --git a/crates/api_clients/artcraft_router/src/api/router_splat_model.rs b/crates/api_clients/router/src/api/router_splat_model.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/api/router_splat_model.rs rename to crates/api_clients/router/src/api/router_splat_model.rs diff --git a/crates/api_clients/artcraft_router/src/api/router_video_model.rs b/crates/api_clients/router/src/api/router_video_model.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/api/router_video_model.rs rename to crates/api_clients/router/src/api/router_video_model.rs diff --git a/crates/api_clients/artcraft_router/src/api/video_list_ref.rs b/crates/api_clients/router/src/api/video_list_ref.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/api/video_list_ref.rs rename to crates/api_clients/router/src/api/video_list_ref.rs diff --git a/crates/api_clients/artcraft_router/src/api/video_ref.rs b/crates/api_clients/router/src/api/video_ref.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/api/video_ref.rs rename to crates/api_clients/router/src/api/video_ref.rs diff --git a/crates/api_clients/artcraft_router/src/client/generation_mode_mismatch_strategy.rs b/crates/api_clients/router/src/client/generation_mode_mismatch_strategy.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/client/generation_mode_mismatch_strategy.rs rename to crates/api_clients/router/src/client/generation_mode_mismatch_strategy.rs diff --git a/crates/api_clients/artcraft_router/src/client/mod.rs b/crates/api_clients/router/src/client/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/client/mod.rs rename to crates/api_clients/router/src/client/mod.rs diff --git a/crates/api_clients/artcraft_router/src/client/multi_router_client.rs b/crates/api_clients/router/src/client/multi_router_client.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/client/multi_router_client.rs rename to crates/api_clients/router/src/client/multi_router_client.rs diff --git a/crates/api_clients/artcraft_router/src/client/multi_router_client_builder.rs b/crates/api_clients/router/src/client/multi_router_client_builder.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/client/multi_router_client_builder.rs rename to crates/api_clients/router/src/client/multi_router_client_builder.rs diff --git a/crates/api_clients/artcraft_router/src/client/request_mismatch_mitigation_strategy.rs b/crates/api_clients/router/src/client/request_mismatch_mitigation_strategy.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/client/request_mismatch_mitigation_strategy.rs rename to crates/api_clients/router/src/client/request_mismatch_mitigation_strategy.rs diff --git a/crates/api_clients/artcraft_router/src/client/router_artcraft_client.rs b/crates/api_clients/router/src/client/router_artcraft_client.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/client/router_artcraft_client.rs rename to crates/api_clients/router/src/client/router_artcraft_client.rs diff --git a/crates/api_clients/artcraft_router/src/client/router_client.rs b/crates/api_clients/router/src/client/router_client.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/client/router_client.rs rename to crates/api_clients/router/src/client/router_client.rs diff --git a/crates/api_clients/artcraft_router/src/client/router_fal_client.rs b/crates/api_clients/router/src/client/router_fal_client.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/client/router_fal_client.rs rename to crates/api_clients/router/src/client/router_fal_client.rs diff --git a/crates/api_clients/artcraft_router/src/client/router_gmicloud_client.rs b/crates/api_clients/router/src/client/router_gmicloud_client.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/client/router_gmicloud_client.rs rename to crates/api_clients/router/src/client/router_gmicloud_client.rs diff --git a/crates/api_clients/artcraft_router/src/client/router_grok_api_client.rs b/crates/api_clients/router/src/client/router_grok_api_client.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/client/router_grok_api_client.rs rename to crates/api_clients/router/src/client/router_grok_api_client.rs diff --git a/crates/api_clients/artcraft_router/src/client/router_seedance2pro_client.rs b/crates/api_clients/router/src/client/router_seedance2pro_client.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/client/router_seedance2pro_client.rs rename to crates/api_clients/router/src/client/router_seedance2pro_client.rs diff --git a/crates/api_clients/artcraft_router/src/client/router_worldlabs_client.rs b/crates/api_clients/router/src/client/router_worldlabs_client.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/client/router_worldlabs_client.rs rename to crates/api_clients/router/src/client/router_worldlabs_client.rs diff --git a/crates/api_clients/artcraft_router/src/errors/artcraft_router_error.rs b/crates/api_clients/router/src/errors/artcraft_router_error.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/errors/artcraft_router_error.rs rename to crates/api_clients/router/src/errors/artcraft_router_error.rs diff --git a/crates/api_clients/artcraft_router/src/errors/client_error.rs b/crates/api_clients/router/src/errors/client_error.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/errors/client_error.rs rename to crates/api_clients/router/src/errors/client_error.rs diff --git a/crates/api_clients/artcraft_router/src/errors/download_error.rs b/crates/api_clients/router/src/errors/download_error.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/errors/download_error.rs rename to crates/api_clients/router/src/errors/download_error.rs diff --git a/crates/api_clients/artcraft_router/src/errors/mod.rs b/crates/api_clients/router/src/errors/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/errors/mod.rs rename to crates/api_clients/router/src/errors/mod.rs diff --git a/crates/api_clients/artcraft_router/src/errors/provider_error.rs b/crates/api_clients/router/src/errors/provider_error.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/errors/provider_error.rs rename to crates/api_clients/router/src/errors/provider_error.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/audio_generation_cost_estimate.rs b/crates/api_clients/router/src/generate/generate_audio/audio_generation_cost_estimate.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/audio_generation_cost_estimate.rs rename to crates/api_clients/router/src/generate/generate_audio/audio_generation_cost_estimate.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/audio_generation_draft.rs b/crates/api_clients/router/src/generate/generate_audio/audio_generation_draft.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/audio_generation_draft.rs rename to crates/api_clients/router/src/generate/generate_audio/audio_generation_draft.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/audio_generation_draft_context.rs b/crates/api_clients/router/src/generate/generate_audio/audio_generation_draft_context.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/audio_generation_draft_context.rs rename to crates/api_clients/router/src/generate/generate_audio/audio_generation_draft_context.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/audio_generation_draft_or_request.rs b/crates/api_clients/router/src/generate/generate_audio/audio_generation_draft_or_request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/audio_generation_draft_or_request.rs rename to crates/api_clients/router/src/generate/generate_audio/audio_generation_draft_or_request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/audio_generation_request.rs b/crates/api_clients/router/src/generate/generate_audio/audio_generation_request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/audio_generation_request.rs rename to crates/api_clients/router/src/generate/generate_audio/audio_generation_request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/generate_audio_request_builder.rs b/crates/api_clients/router/src/generate/generate_audio/generate_audio_request_builder.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/generate_audio_request_builder.rs rename to crates/api_clients/router/src/generate/generate_audio/generate_audio_request_builder.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/generate_audio_response.rs b/crates/api_clients/router/src/generate/generate_audio/generate_audio_response.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/generate_audio_response.rs rename to crates/api_clients/router/src/generate/generate_audio/generate_audio_response.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/mod.rs b/crates/api_clients/router/src/generate/generate_audio/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/mod.rs rename to crates/api_clients/router/src/generate/generate_audio/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/build_common.rs b/crates/api_clients/router/src/generate/generate_audio/providers/artcraft/build_common.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/build_common.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/artcraft/build_common.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/mod.rs b/crates/api_clients/router/src/generate/generate_audio/providers/artcraft/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/mod.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/artcraft/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/request_common.rs b/crates/api_clients/router/src/generate/generate_audio/providers/artcraft/request_common.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/request_common.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/artcraft/request_common.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/resolve.rs b/crates/api_clients/router/src/generate/generate_audio/providers/artcraft/resolve.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/resolve.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/artcraft/resolve.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/seed_audio_1p0/build.rs b/crates/api_clients/router/src/generate/generate_audio/providers/artcraft/seed_audio_1p0/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/seed_audio_1p0/build.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/artcraft/seed_audio_1p0/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/seed_audio_1p0/cost.rs b/crates/api_clients/router/src/generate/generate_audio/providers/artcraft/seed_audio_1p0/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/seed_audio_1p0/cost.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/artcraft/seed_audio_1p0/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/seed_audio_1p0/mod.rs b/crates/api_clients/router/src/generate/generate_audio/providers/artcraft/seed_audio_1p0/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/seed_audio_1p0/mod.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/artcraft/seed_audio_1p0/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/seed_audio_1p0/request.rs b/crates/api_clients/router/src/generate/generate_audio/providers/artcraft/seed_audio_1p0/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/seed_audio_1p0/request.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/artcraft/seed_audio_1p0/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_music/build.rs b/crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_music/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_music/build.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_music/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_music/cost.rs b/crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_music/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_music/cost.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_music/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_music/mod.rs b/crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_music/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_music/mod.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_music/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_music/request.rs b/crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_music/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_music/request.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_music/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_remix/build.rs b/crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_remix/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_remix/build.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_remix/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_remix/cost.rs b/crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_remix/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_remix/cost.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_remix/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_remix/mod.rs b/crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_remix/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_remix/mod.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_remix/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_remix/request.rs b/crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_remix/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_remix/request.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_remix/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_sample/build.rs b/crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_sample/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_sample/build.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_sample/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_sample/cost.rs b/crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_sample/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_sample/cost.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_sample/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_sample/mod.rs b/crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_sample/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_sample/mod.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_sample/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_sample/request.rs b/crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_sample/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_sample/request.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_sample/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_sounds/build.rs b/crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_sounds/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_sounds/build.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_sounds/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_sounds/cost.rs b/crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_sounds/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_sounds/cost.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_sounds/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_sounds/mod.rs b/crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_sounds/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_sounds/mod.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_sounds/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_sounds/request.rs b/crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_sounds/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/artcraft/suno_sounds/request.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/artcraft/suno_sounds/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/fal/mod.rs b/crates/api_clients/router/src/generate/generate_audio/providers/fal/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/fal/mod.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/fal/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/fal/seed_audio_1p0/build.rs b/crates/api_clients/router/src/generate/generate_audio/providers/fal/seed_audio_1p0/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/fal/seed_audio_1p0/build.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/fal/seed_audio_1p0/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/fal/seed_audio_1p0/cost.rs b/crates/api_clients/router/src/generate/generate_audio/providers/fal/seed_audio_1p0/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/fal/seed_audio_1p0/cost.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/fal/seed_audio_1p0/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/fal/seed_audio_1p0/mod.rs b/crates/api_clients/router/src/generate/generate_audio/providers/fal/seed_audio_1p0/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/fal/seed_audio_1p0/mod.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/fal/seed_audio_1p0/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/fal/seed_audio_1p0/request.rs b/crates/api_clients/router/src/generate/generate_audio/providers/fal/seed_audio_1p0/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/fal/seed_audio_1p0/request.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/fal/seed_audio_1p0/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/mod.rs b/crates/api_clients/router/src/generate/generate_audio/providers/kinovi/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/mod.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/kinovi/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/resolve.rs b/crates/api_clients/router/src/generate/generate_audio/providers/kinovi/resolve.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/resolve.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/kinovi/resolve.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_music/build.rs b/crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_music/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_music/build.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_music/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_music/cost.rs b/crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_music/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_music/cost.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_music/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_music/mod.rs b/crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_music/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_music/mod.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_music/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_music/request.rs b/crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_music/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_music/request.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_music/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_remix/build.rs b/crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_remix/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_remix/build.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_remix/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_remix/cost.rs b/crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_remix/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_remix/cost.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_remix/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_remix/draft.rs b/crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_remix/draft.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_remix/draft.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_remix/draft.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_remix/mod.rs b/crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_remix/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_remix/mod.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_remix/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_remix/request.rs b/crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_remix/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_remix/request.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_remix/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_sample/build.rs b/crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_sample/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_sample/build.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_sample/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_sample/cost.rs b/crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_sample/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_sample/cost.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_sample/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_sample/draft.rs b/crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_sample/draft.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_sample/draft.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_sample/draft.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_sample/mod.rs b/crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_sample/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_sample/mod.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_sample/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_sample/request.rs b/crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_sample/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_sample/request.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_sample/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_sounds/build.rs b/crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_sounds/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_sounds/build.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_sounds/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_sounds/cost.rs b/crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_sounds/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_sounds/cost.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_sounds/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_sounds/mod.rs b/crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_sounds/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_sounds/mod.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_sounds/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_sounds/request.rs b/crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_sounds/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/kinovi/suno_sounds/request.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/kinovi/suno_sounds/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/mod.rs b/crates/api_clients/router/src/generate/generate_audio/providers/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/mod.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_audio/providers/reject_unsupported.rs b/crates/api_clients/router/src/generate/generate_audio/providers/reject_unsupported.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_audio/providers/reject_unsupported.rs rename to crates/api_clients/router/src/generate/generate_audio/providers/reject_unsupported.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/generate_image_request_builder.rs b/crates/api_clients/router/src/generate/generate_image/generate_image_request_builder.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/generate_image_request_builder.rs rename to crates/api_clients/router/src/generate/generate_image/generate_image_request_builder.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/generate_image_response.rs b/crates/api_clients/router/src/generate/generate_image/generate_image_response.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/generate_image_response.rs rename to crates/api_clients/router/src/generate/generate_image/generate_image_response.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/image_generation_cost_estimate.rs b/crates/api_clients/router/src/generate/generate_image/image_generation_cost_estimate.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/image_generation_cost_estimate.rs rename to crates/api_clients/router/src/generate/generate_image/image_generation_cost_estimate.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/image_generation_draft.rs b/crates/api_clients/router/src/generate/generate_image/image_generation_draft.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/image_generation_draft.rs rename to crates/api_clients/router/src/generate/generate_image/image_generation_draft.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/image_generation_draft_context.rs b/crates/api_clients/router/src/generate/generate_image/image_generation_draft_context.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/image_generation_draft_context.rs rename to crates/api_clients/router/src/generate/generate_image/image_generation_draft_context.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/image_generation_draft_or_request.rs b/crates/api_clients/router/src/generate/generate_image/image_generation_draft_or_request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/image_generation_draft_or_request.rs rename to crates/api_clients/router/src/generate/generate_image/image_generation_draft_or_request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/image_generation_request.rs b/crates/api_clients/router/src/generate/generate_image/image_generation_request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/image_generation_request.rs rename to crates/api_clients/router/src/generate/generate_image/image_generation_request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/mod.rs b/crates/api_clients/router/src/generate/generate_image/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/mod.rs rename to crates/api_clients/router/src/generate/generate_image/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/angle_validation.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/angle_validation.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/angle_validation.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/angle_validation.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/build_common.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/build_common.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/build_common.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/build_common.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_1_dev/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_1_dev/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_1_dev/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_1_dev/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_1_dev/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_1_dev/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_1_dev/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_1_dev/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_1_dev/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_1_dev/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_1_dev/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_1_dev/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_1_dev/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_1_dev/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_1_dev/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_1_dev/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_1_schnell/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_1_schnell/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_1_schnell/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_1_schnell/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_1_schnell/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_1_schnell/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_1_schnell/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_1_schnell/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_1_schnell/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_1_schnell/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_1_schnell/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_1_schnell/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_1_schnell/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_1_schnell/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_1_schnell/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_1_schnell/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_2_lora_angles/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_2_lora_angles/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_2_lora_angles/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_2_lora_angles/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_2_lora_angles/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_2_lora_angles/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_2_lora_angles/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_2_lora_angles/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_2_lora_angles/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_2_lora_angles/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_2_lora_angles/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_2_lora_angles/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_2_lora_angles/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_2_lora_angles/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_2_lora_angles/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_2_lora_angles/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_pro_1p1/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_pro_1p1/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_pro_1p1/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_pro_1p1/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_pro_1p1/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_pro_1p1/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_pro_1p1/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_pro_1p1/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_pro_1p1/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_pro_1p1/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_pro_1p1/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_pro_1p1/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_pro_1p1/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_pro_1p1/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_pro_1p1/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_pro_1p1/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_pro_1p1_ultra/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_pro_1p1_ultra/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_pro_1p1_ultra/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_pro_1p1_ultra/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_pro_1p1_ultra/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_pro_1p1_ultra/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_pro_1p1_ultra/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_pro_1p1_ultra/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_pro_1p1_ultra/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_pro_1p1_ultra/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_pro_1p1_ultra/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_pro_1p1_ultra/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_pro_1p1_ultra/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_pro_1p1_ultra/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/flux_pro_1p1_ultra/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/flux_pro_1p1_ultra/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/gpt_image_1/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/gpt_image_1/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/gpt_image_1/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/gpt_image_1/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/gpt_image_1/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/gpt_image_1/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/gpt_image_1/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/gpt_image_1/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/gpt_image_1/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/gpt_image_1/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/gpt_image_1/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/gpt_image_1/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/gpt_image_1/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/gpt_image_1/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/gpt_image_1/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/gpt_image_1/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/gpt_image_1p5/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/gpt_image_1p5/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/gpt_image_1p5/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/gpt_image_1p5/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/gpt_image_1p5/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/gpt_image_1p5/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/gpt_image_1p5/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/gpt_image_1p5/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/gpt_image_1p5/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/gpt_image_1p5/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/gpt_image_1p5/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/gpt_image_1p5/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/gpt_image_1p5/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/gpt_image_1p5/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/gpt_image_1p5/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/gpt_image_1p5/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/gpt_image_2/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/gpt_image_2/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/gpt_image_2/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/gpt_image_2/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/gpt_image_2/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/gpt_image_2/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/gpt_image_2/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/gpt_image_2/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/gpt_image_2/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/gpt_image_2/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/gpt_image_2/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/gpt_image_2/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/gpt_image_2/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/gpt_image_2/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/gpt_image_2/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/gpt_image_2/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/midjourney_7/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/midjourney_7/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/midjourney_7/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/midjourney_7/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/midjourney_7/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/midjourney_7/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/midjourney_7/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/midjourney_7/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/midjourney_7/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/midjourney_7/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/midjourney_7/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/midjourney_7/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/midjourney_7/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/midjourney_7/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/midjourney_7/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/midjourney_7/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/midjourney_7_niji/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/midjourney_7_niji/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/midjourney_7_niji/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/midjourney_7_niji/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/midjourney_7_niji/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/midjourney_7_niji/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/midjourney_7_niji/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/midjourney_7_niji/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/midjourney_7_niji/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/midjourney_7_niji/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/midjourney_7_niji/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/midjourney_7_niji/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/midjourney_7_niji/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/midjourney_7_niji/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/midjourney_7_niji/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/midjourney_7_niji/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/midjourney_8/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/midjourney_8/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/midjourney_8/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/midjourney_8/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/midjourney_8/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/midjourney_8/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/midjourney_8/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/midjourney_8/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/midjourney_8/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/midjourney_8/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/midjourney_8/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/midjourney_8/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/midjourney_8/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/midjourney_8/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/midjourney_8/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/midjourney_8/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/nano_banana/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/nano_banana/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/nano_banana/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/nano_banana/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/nano_banana/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/nano_banana/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/nano_banana/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/nano_banana/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/nano_banana/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/nano_banana/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/nano_banana/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/nano_banana/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/nano_banana/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/nano_banana/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/nano_banana/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/nano_banana/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/nano_banana_2/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/nano_banana_2/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/nano_banana_2/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/nano_banana_2/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/nano_banana_2/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/nano_banana_2/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/nano_banana_2/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/nano_banana_2/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/nano_banana_2/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/nano_banana_2/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/nano_banana_2/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/nano_banana_2/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/nano_banana_2/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/nano_banana_2/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/nano_banana_2/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/nano_banana_2/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/nano_banana_pro/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/nano_banana_pro/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/nano_banana_pro/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/nano_banana_pro/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/nano_banana_pro/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/nano_banana_pro/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/nano_banana_pro/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/nano_banana_pro/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/nano_banana_pro/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/nano_banana_pro/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/nano_banana_pro/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/nano_banana_pro/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/nano_banana_pro/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/nano_banana_pro/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/nano_banana_pro/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/nano_banana_pro/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/qwen_edit_2511_angles/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/qwen_edit_2511_angles/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/qwen_edit_2511_angles/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/qwen_edit_2511_angles/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/qwen_edit_2511_angles/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/qwen_edit_2511_angles/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/qwen_edit_2511_angles/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/qwen_edit_2511_angles/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/qwen_edit_2511_angles/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/qwen_edit_2511_angles/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/qwen_edit_2511_angles/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/qwen_edit_2511_angles/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/qwen_edit_2511_angles/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/qwen_edit_2511_angles/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/qwen_edit_2511_angles/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/qwen_edit_2511_angles/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/request_common.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/request_common.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/request_common.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/request_common.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_4/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_4/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_4/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_4/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_4/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_4/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_4/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_4/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_4/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_4/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_4/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_4/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_4/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_4/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_4/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_4/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_4p5/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_4p5/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_4p5/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_4p5/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_4p5/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_4p5/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_4p5/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_4p5/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_4p5/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_4p5/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_4p5/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_4p5/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_4p5/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_4p5/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_4p5/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_4p5/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_5_lite/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_5_lite/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_5_lite/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_5_lite/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_5_lite/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_5_lite/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_5_lite/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_5_lite/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_5_lite/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_5_lite/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_5_lite/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_5_lite/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_5_lite/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_5_lite/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_5_lite/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_5_lite/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro_ultra/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro_ultra/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro_ultra/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro_ultra/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro_ultra/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro_ultra/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro_ultra/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro_ultra/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro_ultra/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro_ultra/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro_ultra/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro_ultra/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro_ultra/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro_ultra/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro_ultra/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/artcraft/seedream_5p0_pro_ultra/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_1_dev/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/flux_1_dev/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_1_dev/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/flux_1_dev/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_1_dev/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/flux_1_dev/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_1_dev/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/flux_1_dev/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_1_dev/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/flux_1_dev/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_1_dev/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/flux_1_dev/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_1_dev/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/flux_1_dev/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_1_dev/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/flux_1_dev/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_1_schnell/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/flux_1_schnell/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_1_schnell/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/flux_1_schnell/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_1_schnell/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/flux_1_schnell/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_1_schnell/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/flux_1_schnell/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_1_schnell/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/flux_1_schnell/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_1_schnell/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/flux_1_schnell/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_1_schnell/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/flux_1_schnell/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_1_schnell/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/flux_1_schnell/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_2_lora_angles/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/flux_2_lora_angles/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_2_lora_angles/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/flux_2_lora_angles/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_2_lora_angles/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/flux_2_lora_angles/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_2_lora_angles/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/flux_2_lora_angles/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_2_lora_angles/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/flux_2_lora_angles/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_2_lora_angles/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/flux_2_lora_angles/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_2_lora_angles/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/flux_2_lora_angles/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_2_lora_angles/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/flux_2_lora_angles/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_pro_1p1/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/flux_pro_1p1/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_pro_1p1/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/flux_pro_1p1/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_pro_1p1/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/flux_pro_1p1/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_pro_1p1/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/flux_pro_1p1/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_pro_1p1/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/flux_pro_1p1/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_pro_1p1/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/flux_pro_1p1/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_pro_1p1/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/flux_pro_1p1/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_pro_1p1/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/flux_pro_1p1/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_pro_1p1_ultra/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/flux_pro_1p1_ultra/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_pro_1p1_ultra/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/flux_pro_1p1_ultra/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_pro_1p1_ultra/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/flux_pro_1p1_ultra/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_pro_1p1_ultra/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/flux_pro_1p1_ultra/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_pro_1p1_ultra/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/flux_pro_1p1_ultra/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_pro_1p1_ultra/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/flux_pro_1p1_ultra/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_pro_1p1_ultra/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/flux_pro_1p1_ultra/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/flux_pro_1p1_ultra/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/flux_pro_1p1_ultra/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/gpt_image_1/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/gpt_image_1/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/gpt_image_1/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/gpt_image_1/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/gpt_image_1/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/gpt_image_1/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/gpt_image_1/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/gpt_image_1/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/gpt_image_1/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/gpt_image_1/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/gpt_image_1/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/gpt_image_1/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/gpt_image_1/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/gpt_image_1/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/gpt_image_1/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/gpt_image_1/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/gpt_image_1p5/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/gpt_image_1p5/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/gpt_image_1p5/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/gpt_image_1p5/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/gpt_image_1p5/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/gpt_image_1p5/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/gpt_image_1p5/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/gpt_image_1p5/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/gpt_image_1p5/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/gpt_image_1p5/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/gpt_image_1p5/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/gpt_image_1p5/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/gpt_image_1p5/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/gpt_image_1p5/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/gpt_image_1p5/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/gpt_image_1p5/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/gpt_image_2/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/gpt_image_2/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/gpt_image_2/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/gpt_image_2/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/gpt_image_2/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/gpt_image_2/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/gpt_image_2/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/gpt_image_2/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/gpt_image_2/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/gpt_image_2/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/gpt_image_2/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/gpt_image_2/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/gpt_image_2/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/gpt_image_2/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/gpt_image_2/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/gpt_image_2/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/nano_banana/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/nano_banana/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/nano_banana/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/nano_banana/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/nano_banana/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/nano_banana/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/nano_banana/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/nano_banana/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/nano_banana/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/nano_banana/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/nano_banana/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/nano_banana/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/nano_banana/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/nano_banana/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/nano_banana/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/nano_banana/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/nano_banana_2/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/nano_banana_2/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/nano_banana_2/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/nano_banana_2/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/nano_banana_2/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/nano_banana_2/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/nano_banana_2/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/nano_banana_2/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/nano_banana_2/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/nano_banana_2/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/nano_banana_2/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/nano_banana_2/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/nano_banana_2/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/nano_banana_2/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/nano_banana_2/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/nano_banana_2/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/nano_banana_pro/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/nano_banana_pro/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/nano_banana_pro/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/nano_banana_pro/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/nano_banana_pro/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/nano_banana_pro/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/nano_banana_pro/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/nano_banana_pro/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/nano_banana_pro/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/nano_banana_pro/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/nano_banana_pro/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/nano_banana_pro/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/nano_banana_pro/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/nano_banana_pro/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/nano_banana_pro/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/nano_banana_pro/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/qwen_edit_2511_angles/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/qwen_edit_2511_angles/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/qwen_edit_2511_angles/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/qwen_edit_2511_angles/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/qwen_edit_2511_angles/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/qwen_edit_2511_angles/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/qwen_edit_2511_angles/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/qwen_edit_2511_angles/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/qwen_edit_2511_angles/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/qwen_edit_2511_angles/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/qwen_edit_2511_angles/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/qwen_edit_2511_angles/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/qwen_edit_2511_angles/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/qwen_edit_2511_angles/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/qwen_edit_2511_angles/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/qwen_edit_2511_angles/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/seedream_4/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/seedream_4/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/seedream_4/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/seedream_4/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/seedream_4/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/seedream_4/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/seedream_4/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/seedream_4/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/seedream_4/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/seedream_4/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/seedream_4/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/seedream_4/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/seedream_4/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/seedream_4/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/seedream_4/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/seedream_4/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/seedream_4p5/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/seedream_4p5/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/seedream_4p5/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/seedream_4p5/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/seedream_4p5/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/seedream_4p5/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/seedream_4p5/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/seedream_4p5/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/seedream_4p5/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/seedream_4p5/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/seedream_4p5/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/seedream_4p5/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/seedream_4p5/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/seedream_4p5/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/seedream_4p5/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/seedream_4p5/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/seedream_5_lite/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/seedream_5_lite/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/seedream_5_lite/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/seedream_5_lite/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/seedream_5_lite/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/seedream_5_lite/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/seedream_5_lite/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/seedream_5_lite/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/seedream_5_lite/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/seedream_5_lite/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/seedream_5_lite/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/seedream_5_lite/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/seedream_5_lite/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/fal/seedream_5_lite/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/fal/seedream_5_lite/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/fal/seedream_5_lite/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/midjourney_7/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/kinovi/midjourney_7/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/midjourney_7/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/kinovi/midjourney_7/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/midjourney_7/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/kinovi/midjourney_7/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/midjourney_7/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/kinovi/midjourney_7/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/midjourney_7/draft.rs b/crates/api_clients/router/src/generate/generate_image/providers/kinovi/midjourney_7/draft.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/midjourney_7/draft.rs rename to crates/api_clients/router/src/generate/generate_image/providers/kinovi/midjourney_7/draft.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/midjourney_7/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/kinovi/midjourney_7/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/midjourney_7/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/kinovi/midjourney_7/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/midjourney_7/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/kinovi/midjourney_7/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/midjourney_7/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/kinovi/midjourney_7/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/midjourney_7_niji/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/kinovi/midjourney_7_niji/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/midjourney_7_niji/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/kinovi/midjourney_7_niji/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/midjourney_7_niji/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/kinovi/midjourney_7_niji/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/midjourney_7_niji/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/kinovi/midjourney_7_niji/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/midjourney_7_niji/draft.rs b/crates/api_clients/router/src/generate/generate_image/providers/kinovi/midjourney_7_niji/draft.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/midjourney_7_niji/draft.rs rename to crates/api_clients/router/src/generate/generate_image/providers/kinovi/midjourney_7_niji/draft.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/midjourney_7_niji/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/kinovi/midjourney_7_niji/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/midjourney_7_niji/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/kinovi/midjourney_7_niji/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/midjourney_7_niji/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/kinovi/midjourney_7_niji/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/midjourney_7_niji/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/kinovi/midjourney_7_niji/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/midjourney_8/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/kinovi/midjourney_8/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/midjourney_8/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/kinovi/midjourney_8/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/midjourney_8/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/kinovi/midjourney_8/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/midjourney_8/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/kinovi/midjourney_8/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/midjourney_8/draft.rs b/crates/api_clients/router/src/generate/generate_image/providers/kinovi/midjourney_8/draft.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/midjourney_8/draft.rs rename to crates/api_clients/router/src/generate/generate_image/providers/kinovi/midjourney_8/draft.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/midjourney_8/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/kinovi/midjourney_8/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/midjourney_8/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/kinovi/midjourney_8/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/midjourney_8/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/kinovi/midjourney_8/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/midjourney_8/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/kinovi/midjourney_8/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/kinovi/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/kinovi/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/resolve.rs b/crates/api_clients/router/src/generate/generate_image/providers/kinovi/resolve.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/resolve.rs rename to crates/api_clients/router/src/generate/generate_image/providers/kinovi/resolve.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/seedream_5p0_pro/build.rs b/crates/api_clients/router/src/generate/generate_image/providers/kinovi/seedream_5p0_pro/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/seedream_5p0_pro/build.rs rename to crates/api_clients/router/src/generate/generate_image/providers/kinovi/seedream_5p0_pro/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/seedream_5p0_pro/cost.rs b/crates/api_clients/router/src/generate/generate_image/providers/kinovi/seedream_5p0_pro/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/seedream_5p0_pro/cost.rs rename to crates/api_clients/router/src/generate/generate_image/providers/kinovi/seedream_5p0_pro/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/seedream_5p0_pro/draft.rs b/crates/api_clients/router/src/generate/generate_image/providers/kinovi/seedream_5p0_pro/draft.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/seedream_5p0_pro/draft.rs rename to crates/api_clients/router/src/generate/generate_image/providers/kinovi/seedream_5p0_pro/draft.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/seedream_5p0_pro/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/kinovi/seedream_5p0_pro/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/seedream_5p0_pro/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/kinovi/seedream_5p0_pro/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/seedream_5p0_pro/request.rs b/crates/api_clients/router/src/generate/generate_image/providers/kinovi/seedream_5p0_pro/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/seedream_5p0_pro/request.rs rename to crates/api_clients/router/src/generate/generate_image/providers/kinovi/seedream_5p0_pro/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/upload.rs b/crates/api_clients/router/src/generate/generate_image/providers/kinovi/upload.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/kinovi/upload.rs rename to crates/api_clients/router/src/generate/generate_image/providers/kinovi/upload.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_image/providers/mod.rs b/crates/api_clients/router/src/generate/generate_image/providers/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_image/providers/mod.rs rename to crates/api_clients/router/src/generate/generate_image/providers/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/generate_mesh_request_builder.rs b/crates/api_clients/router/src/generate/generate_mesh/generate_mesh_request_builder.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/generate_mesh_request_builder.rs rename to crates/api_clients/router/src/generate/generate_mesh/generate_mesh_request_builder.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/generate_mesh_response.rs b/crates/api_clients/router/src/generate/generate_mesh/generate_mesh_response.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/generate_mesh_response.rs rename to crates/api_clients/router/src/generate/generate_mesh/generate_mesh_response.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/mesh_generation_cost_estimate.rs b/crates/api_clients/router/src/generate/generate_mesh/mesh_generation_cost_estimate.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/mesh_generation_cost_estimate.rs rename to crates/api_clients/router/src/generate/generate_mesh/mesh_generation_cost_estimate.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/mesh_generation_draft.rs b/crates/api_clients/router/src/generate/generate_mesh/mesh_generation_draft.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/mesh_generation_draft.rs rename to crates/api_clients/router/src/generate/generate_mesh/mesh_generation_draft.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/mesh_generation_draft_context.rs b/crates/api_clients/router/src/generate/generate_mesh/mesh_generation_draft_context.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/mesh_generation_draft_context.rs rename to crates/api_clients/router/src/generate/generate_mesh/mesh_generation_draft_context.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/mesh_generation_draft_or_request.rs b/crates/api_clients/router/src/generate/generate_mesh/mesh_generation_draft_or_request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/mesh_generation_draft_or_request.rs rename to crates/api_clients/router/src/generate/generate_mesh/mesh_generation_draft_or_request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/mesh_generation_request.rs b/crates/api_clients/router/src/generate/generate_mesh/mesh_generation_request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/mesh_generation_request.rs rename to crates/api_clients/router/src/generate/generate_mesh/mesh_generation_request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/mod.rs b/crates/api_clients/router/src/generate/generate_mesh/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/mod.rs rename to crates/api_clients/router/src/generate/generate_mesh/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/build_common.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/build_common.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/build_common.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/build_common.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3/build.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3/build.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3/cost.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3/cost.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3/mod.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3/mod.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3/request.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3/request.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3_sketch/build.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3_sketch/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3_sketch/build.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3_sketch/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3_sketch/cost.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3_sketch/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3_sketch/cost.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3_sketch/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3_sketch/mod.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3_sketch/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3_sketch/mod.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3_sketch/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3_sketch/request.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3_sketch/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3_sketch/request.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan3d_3_sketch/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p0/build.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p0/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p0/build.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p0/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p0/cost.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p0/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p0/cost.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p0/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p0/mod.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p0/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p0/mod.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p0/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p0/request.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p0/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p0/request.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p0/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p1/build.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p1/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p1/build.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p1/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p1/cost.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p1/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p1/cost.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p1/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p1/mod.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p1/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p1/mod.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p1/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p1/request.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p1/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p1/request.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_2p1/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_part/build.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_part/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_part/build.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_part/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_part/cost.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_part/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_part/cost.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_part/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_part/mod.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_part/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_part/mod.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_part/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_part/request.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_part/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_part/request.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_part/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_pro/build.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_pro/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_pro/build.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_pro/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_pro/cost.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_pro/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_pro/cost.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_pro/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_pro/mod.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_pro/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_pro/mod.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_pro/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_pro/request.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_pro/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_pro/request.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_pro/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_rapid/build.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_rapid/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_rapid/build.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_rapid/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_rapid/cost.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_rapid/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_rapid/cost.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_rapid/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_rapid/mod.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_rapid/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_rapid/mod.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_rapid/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_rapid/request.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_rapid/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_rapid/request.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_rapid/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_smart_topology/build.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_smart_topology/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_smart_topology/build.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_smart_topology/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_smart_topology/cost.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_smart_topology/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_smart_topology/cost.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_smart_topology/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_smart_topology/mod.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_smart_topology/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_smart_topology/mod.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_smart_topology/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_smart_topology/request.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_smart_topology/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_smart_topology/request.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/hunyuan_3d_3p1_smart_topology/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/meshy_v6/build.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/meshy_v6/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/meshy_v6/build.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/meshy_v6/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/meshy_v6/cost.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/meshy_v6/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/meshy_v6/cost.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/meshy_v6/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/meshy_v6/mod.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/meshy_v6/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/meshy_v6/mod.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/meshy_v6/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/meshy_v6/request.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/meshy_v6/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/meshy_v6/request.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/meshy_v6/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/mod.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/mod.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/request_common.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/request_common.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/request_common.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/request_common.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/resolve.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/resolve.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/resolve.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/resolve.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/rodin_2p5_fast/build.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/rodin_2p5_fast/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/rodin_2p5_fast/build.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/rodin_2p5_fast/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/rodin_2p5_fast/cost.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/rodin_2p5_fast/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/rodin_2p5_fast/cost.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/rodin_2p5_fast/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/rodin_2p5_fast/mod.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/rodin_2p5_fast/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/rodin_2p5_fast/mod.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/rodin_2p5_fast/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/rodin_2p5_fast/request.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/rodin_2p5_fast/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/rodin_2p5_fast/request.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/rodin_2p5_fast/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/tripo3d_h3p1/build.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/tripo3d_h3p1/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/tripo3d_h3p1/build.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/tripo3d_h3p1/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/tripo3d_h3p1/cost.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/tripo3d_h3p1/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/tripo3d_h3p1/cost.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/tripo3d_h3p1/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/tripo3d_h3p1/mod.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/tripo3d_h3p1/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/tripo3d_h3p1/mod.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/tripo3d_h3p1/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/tripo3d_h3p1/request.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/tripo3d_h3p1/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/artcraft/tripo3d_h3p1/request.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/artcraft/tripo3d_h3p1/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan3d_3/build.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan3d_3/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan3d_3/build.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan3d_3/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan3d_3/cost.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan3d_3/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan3d_3/cost.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan3d_3/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan3d_3/mod.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan3d_3/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan3d_3/mod.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan3d_3/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan3d_3/request.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan3d_3/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan3d_3/request.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan3d_3/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan3d_3_sketch/build.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan3d_3_sketch/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan3d_3_sketch/build.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan3d_3_sketch/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan3d_3_sketch/cost.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan3d_3_sketch/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan3d_3_sketch/cost.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan3d_3_sketch/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan3d_3_sketch/mod.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan3d_3_sketch/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan3d_3_sketch/mod.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan3d_3_sketch/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan3d_3_sketch/request.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan3d_3_sketch/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan3d_3_sketch/request.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan3d_3_sketch/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p0/build.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p0/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p0/build.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p0/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p0/cost.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p0/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p0/cost.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p0/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p0/mod.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p0/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p0/mod.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p0/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p0/request.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p0/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p0/request.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p0/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p1/build.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p1/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p1/build.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p1/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p1/cost.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p1/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p1/cost.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p1/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p1/mod.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p1/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p1/mod.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p1/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p1/request.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p1/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p1/request.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_2p1/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_part/build.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_part/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_part/build.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_part/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_part/cost.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_part/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_part/cost.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_part/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_part/mod.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_part/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_part/mod.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_part/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_part/request.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_part/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_part/request.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_part/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_pro/build.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_pro/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_pro/build.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_pro/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_pro/cost.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_pro/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_pro/cost.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_pro/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_pro/mod.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_pro/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_pro/mod.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_pro/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_pro/request.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_pro/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_pro/request.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_pro/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_rapid/build.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_rapid/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_rapid/build.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_rapid/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_rapid/cost.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_rapid/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_rapid/cost.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_rapid/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_rapid/mod.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_rapid/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_rapid/mod.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_rapid/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_rapid/request.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_rapid/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_rapid/request.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_rapid/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_smart_topology/build.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_smart_topology/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_smart_topology/build.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_smart_topology/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_smart_topology/cost.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_smart_topology/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_smart_topology/cost.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_smart_topology/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_smart_topology/mod.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_smart_topology/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_smart_topology/mod.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_smart_topology/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_smart_topology/request.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_smart_topology/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_smart_topology/request.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/hunyuan_3d_3p1_smart_topology/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/meshy_v6/build.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/meshy_v6/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/meshy_v6/build.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/meshy_v6/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/meshy_v6/cost.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/meshy_v6/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/meshy_v6/cost.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/meshy_v6/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/meshy_v6/mod.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/meshy_v6/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/meshy_v6/mod.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/meshy_v6/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/meshy_v6/request.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/meshy_v6/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/meshy_v6/request.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/meshy_v6/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/mod.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/mod.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/resolve.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/resolve.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/resolve.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/resolve.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/rodin_2p5_fast/build.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/rodin_2p5_fast/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/rodin_2p5_fast/build.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/rodin_2p5_fast/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/rodin_2p5_fast/cost.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/rodin_2p5_fast/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/rodin_2p5_fast/cost.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/rodin_2p5_fast/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/rodin_2p5_fast/mod.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/rodin_2p5_fast/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/rodin_2p5_fast/mod.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/rodin_2p5_fast/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/rodin_2p5_fast/request.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/rodin_2p5_fast/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/rodin_2p5_fast/request.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/rodin_2p5_fast/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/tripo3d_h3p1/build.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/tripo3d_h3p1/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/tripo3d_h3p1/build.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/tripo3d_h3p1/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/tripo3d_h3p1/cost.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/tripo3d_h3p1/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/tripo3d_h3p1/cost.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/tripo3d_h3p1/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/tripo3d_h3p1/mod.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/tripo3d_h3p1/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/tripo3d_h3p1/mod.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/tripo3d_h3p1/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/tripo3d_h3p1/request.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/fal/tripo3d_h3p1/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/fal/tripo3d_h3p1/request.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/fal/tripo3d_h3p1/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/mod.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/mod.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/reject_unsupported.rs b/crates/api_clients/router/src/generate/generate_mesh/providers/reject_unsupported.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_mesh/providers/reject_unsupported.rs rename to crates/api_clients/router/src/generate/generate_mesh/providers/reject_unsupported.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/cost/artcraft/estimate_splat_cost_artcraft_marble_0p1_mini.rs b/crates/api_clients/router/src/generate/generate_splat/cost/artcraft/estimate_splat_cost_artcraft_marble_0p1_mini.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/cost/artcraft/estimate_splat_cost_artcraft_marble_0p1_mini.rs rename to crates/api_clients/router/src/generate/generate_splat/cost/artcraft/estimate_splat_cost_artcraft_marble_0p1_mini.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/cost/artcraft/estimate_splat_cost_artcraft_marble_0p1_plus.rs b/crates/api_clients/router/src/generate/generate_splat/cost/artcraft/estimate_splat_cost_artcraft_marble_0p1_plus.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/cost/artcraft/estimate_splat_cost_artcraft_marble_0p1_plus.rs rename to crates/api_clients/router/src/generate/generate_splat/cost/artcraft/estimate_splat_cost_artcraft_marble_0p1_plus.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/cost/artcraft/mod.rs b/crates/api_clients/router/src/generate/generate_splat/cost/artcraft/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/cost/artcraft/mod.rs rename to crates/api_clients/router/src/generate/generate_splat/cost/artcraft/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/cost/mod.rs b/crates/api_clients/router/src/generate/generate_splat/cost/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/cost/mod.rs rename to crates/api_clients/router/src/generate/generate_splat/cost/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/execute/artcraft/generate_splat_artcraft_marble_0p1_mini.rs b/crates/api_clients/router/src/generate/generate_splat/execute/artcraft/generate_splat_artcraft_marble_0p1_mini.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/execute/artcraft/generate_splat_artcraft_marble_0p1_mini.rs rename to crates/api_clients/router/src/generate/generate_splat/execute/artcraft/generate_splat_artcraft_marble_0p1_mini.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/execute/artcraft/generate_splat_artcraft_marble_0p1_plus.rs b/crates/api_clients/router/src/generate/generate_splat/execute/artcraft/generate_splat_artcraft_marble_0p1_plus.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/execute/artcraft/generate_splat_artcraft_marble_0p1_plus.rs rename to crates/api_clients/router/src/generate/generate_splat/execute/artcraft/generate_splat_artcraft_marble_0p1_plus.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/execute/artcraft/mod.rs b/crates/api_clients/router/src/generate/generate_splat/execute/artcraft/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/execute/artcraft/mod.rs rename to crates/api_clients/router/src/generate/generate_splat/execute/artcraft/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/execute/mod.rs b/crates/api_clients/router/src/generate/generate_splat/execute/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/execute/mod.rs rename to crates/api_clients/router/src/generate/generate_splat/execute/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/generate_splat_request.rs b/crates/api_clients/router/src/generate/generate_splat/generate_splat_request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/generate_splat_request.rs rename to crates/api_clients/router/src/generate/generate_splat/generate_splat_request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/generate_splat_request_builder.rs b/crates/api_clients/router/src/generate/generate_splat/generate_splat_request_builder.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/generate_splat_request_builder.rs rename to crates/api_clients/router/src/generate/generate_splat/generate_splat_request_builder.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/generate_splat_response.rs b/crates/api_clients/router/src/generate/generate_splat/generate_splat_response.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/generate_splat_response.rs rename to crates/api_clients/router/src/generate/generate_splat/generate_splat_response.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/mod.rs b/crates/api_clients/router/src/generate/generate_splat/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/mod.rs rename to crates/api_clients/router/src/generate/generate_splat/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/plan/artcraft/mod.rs b/crates/api_clients/router/src/generate/generate_splat/plan/artcraft/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/plan/artcraft/mod.rs rename to crates/api_clients/router/src/generate/generate_splat/plan/artcraft/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/plan/artcraft/plan_generate_splat_artcraft_marble_0p1_mini.rs b/crates/api_clients/router/src/generate/generate_splat/plan/artcraft/plan_generate_splat_artcraft_marble_0p1_mini.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/plan/artcraft/plan_generate_splat_artcraft_marble_0p1_mini.rs rename to crates/api_clients/router/src/generate/generate_splat/plan/artcraft/plan_generate_splat_artcraft_marble_0p1_mini.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/plan/artcraft/plan_generate_splat_artcraft_marble_0p1_plus.rs b/crates/api_clients/router/src/generate/generate_splat/plan/artcraft/plan_generate_splat_artcraft_marble_0p1_plus.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/plan/artcraft/plan_generate_splat_artcraft_marble_0p1_plus.rs rename to crates/api_clients/router/src/generate/generate_splat/plan/artcraft/plan_generate_splat_artcraft_marble_0p1_plus.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/plan/mod.rs b/crates/api_clients/router/src/generate/generate_splat/plan/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/plan/mod.rs rename to crates/api_clients/router/src/generate/generate_splat/plan/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/build_common.rs b/crates/api_clients/router/src/generate/generate_splat/providers/artcraft/build_common.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/build_common.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/artcraft/build_common.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/cost_common.rs b/crates/api_clients/router/src/generate/generate_splat/providers/artcraft/cost_common.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/cost_common.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/artcraft/cost_common.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p0/build.rs b/crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p0/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p0/build.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p0/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p0/cost.rs b/crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p0/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p0/cost.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p0/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p0/mod.rs b/crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p0/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p0/mod.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p0/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p0/request.rs b/crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p0/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p0/request.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p0/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p0_draft/build.rs b/crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p0_draft/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p0_draft/build.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p0_draft/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p0_draft/cost.rs b/crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p0_draft/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p0_draft/cost.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p0_draft/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p0_draft/mod.rs b/crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p0_draft/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p0_draft/mod.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p0_draft/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p0_draft/request.rs b/crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p0_draft/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p0_draft/request.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p0_draft/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p1/build.rs b/crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p1/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p1/build.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p1/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p1/cost.rs b/crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p1/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p1/cost.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p1/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p1/mod.rs b/crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p1/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p1/mod.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p1/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p1/request.rs b/crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p1/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p1/request.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p1/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p1_plus/build.rs b/crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p1_plus/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p1_plus/build.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p1_plus/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p1_plus/cost.rs b/crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p1_plus/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p1_plus/cost.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p1_plus/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p1_plus/mod.rs b/crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p1_plus/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p1_plus/mod.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p1_plus/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p1_plus/request.rs b/crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p1_plus/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/marble_1p1_plus/request.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/artcraft/marble_1p1_plus/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/mod.rs b/crates/api_clients/router/src/generate/generate_splat/providers/artcraft/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/mod.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/artcraft/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/request_common.rs b/crates/api_clients/router/src/generate/generate_splat/providers/artcraft/request_common.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/request_common.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/artcraft/request_common.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/resolve.rs b/crates/api_clients/router/src/generate/generate_splat/providers/artcraft/resolve.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/resolve.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/artcraft/resolve.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/triposplat/build.rs b/crates/api_clients/router/src/generate/generate_splat/providers/artcraft/triposplat/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/triposplat/build.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/artcraft/triposplat/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/triposplat/cost.rs b/crates/api_clients/router/src/generate/generate_splat/providers/artcraft/triposplat/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/triposplat/cost.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/artcraft/triposplat/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/triposplat/mod.rs b/crates/api_clients/router/src/generate/generate_splat/providers/artcraft/triposplat/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/triposplat/mod.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/artcraft/triposplat/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/triposplat/request.rs b/crates/api_clients/router/src/generate/generate_splat/providers/artcraft/triposplat/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/artcraft/triposplat/request.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/artcraft/triposplat/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/fal/mod.rs b/crates/api_clients/router/src/generate/generate_splat/providers/fal/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/fal/mod.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/fal/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/fal/request_common.rs b/crates/api_clients/router/src/generate/generate_splat/providers/fal/request_common.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/fal/request_common.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/fal/request_common.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/fal/triposplat/build.rs b/crates/api_clients/router/src/generate/generate_splat/providers/fal/triposplat/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/fal/triposplat/build.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/fal/triposplat/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/fal/triposplat/cost.rs b/crates/api_clients/router/src/generate/generate_splat/providers/fal/triposplat/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/fal/triposplat/cost.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/fal/triposplat/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/fal/triposplat/mod.rs b/crates/api_clients/router/src/generate/generate_splat/providers/fal/triposplat/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/fal/triposplat/mod.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/fal/triposplat/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/fal/triposplat/request.rs b/crates/api_clients/router/src/generate/generate_splat/providers/fal/triposplat/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/fal/triposplat/request.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/fal/triposplat/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/mod.rs b/crates/api_clients/router/src/generate/generate_splat/providers/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/mod.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/build_common.rs b/crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/build_common.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/build_common.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/build_common.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/draft_common.rs b/crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/draft_common.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/draft_common.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/draft_common.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p0/build.rs b/crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p0/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p0/build.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p0/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p0/cost.rs b/crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p0/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p0/cost.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p0/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p0/draft.rs b/crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p0/draft.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p0/draft.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p0/draft.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p0/mod.rs b/crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p0/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p0/mod.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p0/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p0/request.rs b/crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p0/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p0/request.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p0/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p0_draft/build.rs b/crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p0_draft/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p0_draft/build.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p0_draft/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p0_draft/cost.rs b/crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p0_draft/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p0_draft/cost.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p0_draft/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p0_draft/draft.rs b/crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p0_draft/draft.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p0_draft/draft.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p0_draft/draft.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p0_draft/mod.rs b/crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p0_draft/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p0_draft/mod.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p0_draft/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p0_draft/request.rs b/crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p0_draft/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p0_draft/request.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p0_draft/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p1/build.rs b/crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p1/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p1/build.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p1/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p1/cost.rs b/crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p1/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p1/cost.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p1/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p1/draft.rs b/crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p1/draft.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p1/draft.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p1/draft.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p1/mod.rs b/crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p1/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p1/mod.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p1/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p1/request.rs b/crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p1/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p1/request.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p1/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p1_plus/build.rs b/crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p1_plus/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p1_plus/build.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p1_plus/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p1_plus/cost.rs b/crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p1_plus/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p1_plus/cost.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p1_plus/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p1_plus/draft.rs b/crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p1_plus/draft.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p1_plus/draft.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p1_plus/draft.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p1_plus/mod.rs b/crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p1_plus/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p1_plus/mod.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p1_plus/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p1_plus/request.rs b/crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p1_plus/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/marble_1p1_plus/request.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/marble_1p1_plus/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/mod.rs b/crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/mod.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/request_common.rs b/crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/request_common.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/request_common.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/request_common.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/resolve.rs b/crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/resolve.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/providers/worldlabs/resolve.rs rename to crates/api_clients/router/src/generate/generate_splat/providers/worldlabs/resolve.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/splat_generation_cost_estimate.rs b/crates/api_clients/router/src/generate/generate_splat/splat_generation_cost_estimate.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/splat_generation_cost_estimate.rs rename to crates/api_clients/router/src/generate/generate_splat/splat_generation_cost_estimate.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/splat_generation_draft.rs b/crates/api_clients/router/src/generate/generate_splat/splat_generation_draft.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/splat_generation_draft.rs rename to crates/api_clients/router/src/generate/generate_splat/splat_generation_draft.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/splat_generation_draft_context.rs b/crates/api_clients/router/src/generate/generate_splat/splat_generation_draft_context.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/splat_generation_draft_context.rs rename to crates/api_clients/router/src/generate/generate_splat/splat_generation_draft_context.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/splat_generation_draft_or_request.rs b/crates/api_clients/router/src/generate/generate_splat/splat_generation_draft_or_request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/splat_generation_draft_or_request.rs rename to crates/api_clients/router/src/generate/generate_splat/splat_generation_draft_or_request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/splat_generation_plan.rs b/crates/api_clients/router/src/generate/generate_splat/splat_generation_plan.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/splat_generation_plan.rs rename to crates/api_clients/router/src/generate/generate_splat/splat_generation_plan.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_splat/splat_generation_request.rs b/crates/api_clients/router/src/generate/generate_splat/splat_generation_request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_splat/splat_generation_request.rs rename to crates/api_clients/router/src/generate/generate_splat/splat_generation_request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/CLAUDE.md b/crates/api_clients/router/src/generate/generate_video/CLAUDE.md similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/CLAUDE.md rename to crates/api_clients/router/src/generate/generate_video/CLAUDE.md diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/generate_video_request_builder.rs b/crates/api_clients/router/src/generate/generate_video/generate_video_request_builder.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/generate_video_request_builder.rs rename to crates/api_clients/router/src/generate/generate_video/generate_video_request_builder.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/generate_video_response.rs b/crates/api_clients/router/src/generate/generate_video/generate_video_response.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/generate_video_response.rs rename to crates/api_clients/router/src/generate/generate_video/generate_video_response.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/mod.rs b/crates/api_clients/router/src/generate/generate_video/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/mod.rs rename to crates/api_clients/router/src/generate/generate_video/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/build_common.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/build_common.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/build_common.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/build_common.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/grok_imagine_video/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/grok_imagine_video/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/grok_imagine_video/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/grok_imagine_video/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/grok_imagine_video/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/grok_imagine_video/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/grok_imagine_video/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/grok_imagine_video/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/grok_imagine_video/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/grok_imagine_video/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/grok_imagine_video/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/grok_imagine_video/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/grok_imagine_video/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/grok_imagine_video/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/grok_imagine_video/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/grok_imagine_video/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/grok_imagine_video_1p5/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/grok_imagine_video_1p5/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/grok_imagine_video_1p5/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/grok_imagine_video_1p5/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/grok_imagine_video_1p5/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/grok_imagine_video_1p5/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/grok_imagine_video_1p5/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/grok_imagine_video_1p5/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/grok_imagine_video_1p5/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/grok_imagine_video_1p5/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/grok_imagine_video_1p5/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/grok_imagine_video_1p5/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/grok_imagine_video_1p5/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/grok_imagine_video_1p5/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/grok_imagine_video_1p5/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/grok_imagine_video_1p5/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/happy_horse_1p0/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/happy_horse_1p0/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/happy_horse_1p0/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/happy_horse_1p0/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/happy_horse_1p0/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/happy_horse_1p0/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/happy_horse_1p0/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/happy_horse_1p0/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/happy_horse_1p0/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/happy_horse_1p0/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/happy_horse_1p0/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/happy_horse_1p0/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/happy_horse_1p0/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/happy_horse_1p0/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/happy_horse_1p0/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/happy_horse_1p0/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_1_6_pro/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_1_6_pro/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_1_6_pro/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_1_6_pro/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_1_6_pro/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_1_6_pro/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_1_6_pro/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_1_6_pro/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_1_6_pro/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_1_6_pro/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_1_6_pro/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_1_6_pro/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_1_6_pro/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_1_6_pro/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_1_6_pro/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_1_6_pro/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_1_master/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_1_master/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_1_master/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_1_master/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_1_master/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_1_master/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_1_master/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_1_master/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_1_master/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_1_master/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_1_master/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_1_master/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_1_master/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_1_master/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_1_master/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_1_master/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_1_pro/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_1_pro/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_1_pro/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_1_pro/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_1_pro/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_1_pro/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_1_pro/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_1_pro/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_1_pro/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_1_pro/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_1_pro/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_1_pro/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_1_pro/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_1_pro/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_1_pro/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_1_pro/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_5_turbo_pro/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_5_turbo_pro/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_5_turbo_pro/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_5_turbo_pro/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_5_turbo_pro/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_5_turbo_pro/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_5_turbo_pro/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_5_turbo_pro/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_5_turbo_pro/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_5_turbo_pro/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_5_turbo_pro/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_5_turbo_pro/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_5_turbo_pro/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_5_turbo_pro/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_5_turbo_pro/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_5_turbo_pro/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_6_pro/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_6_pro/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_6_pro/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_6_pro/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_6_pro/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_6_pro/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_6_pro/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_6_pro/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_6_pro/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_6_pro/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_6_pro/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_6_pro/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_6_pro/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_6_pro/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_2_6_pro/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_2_6_pro/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_3p0_pro/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_3p0_pro/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_3p0_pro/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_3p0_pro/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_3p0_pro/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_3p0_pro/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_3p0_pro/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_3p0_pro/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_3p0_pro/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_3p0_pro/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_3p0_pro/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_3p0_pro/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_3p0_pro/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_3p0_pro/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_3p0_pro/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_3p0_pro/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_3p0_standard/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_3p0_standard/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_3p0_standard/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_3p0_standard/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_3p0_standard/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_3p0_standard/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_3p0_standard/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_3p0_standard/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_3p0_standard/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_3p0_standard/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_3p0_standard/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_3p0_standard/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_3p0_standard/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_3p0_standard/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/kling_3p0_standard/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/kling_3p0_standard/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/parity_tests.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/parity_tests.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/parity_tests.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/parity_tests.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/preview_model/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/preview_model/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/preview_model/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/preview_model/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/preview_model/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/preview_model/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/preview_model/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/preview_model/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/preview_model/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/preview_model/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/preview_model/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/preview_model/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/preview_model/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/preview_model/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/preview_model/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/preview_model/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/preview_model_fast/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/preview_model_fast/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/preview_model_fast/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/preview_model_fast/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/preview_model_fast/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/preview_model_fast/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/preview_model_fast/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/preview_model_fast/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/preview_model_fast/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/preview_model_fast/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/preview_model_fast/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/preview_model_fast/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/preview_model_fast/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/preview_model_fast/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/preview_model_fast/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/preview_model_fast/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/request_common.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/request_common.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/request_common.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/request_common.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/resolve.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/resolve.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/resolve.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/resolve.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_1p0_lite/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_1p0_lite/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_1p0_lite/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_1p0_lite/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_1p0_lite/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_1p0_lite/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_1p0_lite/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_1p0_lite/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_1p0_lite/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_1p0_lite/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_1p0_lite/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_1p0_lite/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_1p0_lite/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_1p0_lite/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_1p0_lite/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_1p0_lite/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_1p5_pro/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_1p5_pro/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_1p5_pro/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_1p5_pro/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_1p5_pro/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_1p5_pro/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_1p5_pro/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_1p5_pro/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_1p5_pro/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_1p5_pro/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_1p5_pro/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_1p5_pro/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_1p5_pro/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_1p5_pro/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_1p5_pro/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_1p5_pro/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_fast/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_fast/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_fast/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_fast/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_fast/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_fast/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_fast/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_fast/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_fast/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_fast/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_fast/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_fast/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_fast/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_fast/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_fast/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_fast/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_mini/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_mini/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_mini/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_mini/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_mini/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_mini/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_mini/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_mini/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_mini/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_mini/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_mini/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_mini/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_mini/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_mini/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_mini/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bp_mini/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_fast/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_fast/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_fast/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_fast/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_fast/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_fast/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_fast/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_fast/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_fast/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_fast/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_fast/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_fast/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_fast/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_fast/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_fast/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_fast/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_mini/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_mini/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_mini/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_mini/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_mini/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_mini/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_mini/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_mini/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_mini/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_mini/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_mini/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_mini/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_mini/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_mini/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_mini/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_bpu_mini/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_fast/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_fast/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_fast/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_fast/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_fast/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_fast/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_fast/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_fast/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_fast/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_fast/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_fast/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_fast/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_fast/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_fast/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_fast/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_fast/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_mini/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_mini/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_mini/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_mini/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_mini/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_mini/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_mini/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_mini/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_mini/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_mini/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_mini/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_mini/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_mini/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_mini/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_mini/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_mini/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_u/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_u/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_u/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_u/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_u/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_u/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_u/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_u/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_u/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_u/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_u/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_u/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_u/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_u/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_u/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_u/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_u_fast/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_u_fast/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_u_fast/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_u_fast/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_u_fast/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_u_fast/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_u_fast/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_u_fast/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_u_fast/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_u_fast/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_u_fast/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_u_fast/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_u_fast/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_u_fast/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_2p0_u_fast/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_2p0_u_fast/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_common.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_common.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/seedance_common.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/seedance_common.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/sora_2/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/sora_2/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/sora_2/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/sora_2/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/sora_2/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/sora_2/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/sora_2/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/sora_2/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/sora_2/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/sora_2/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/sora_2/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/sora_2/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/sora_2/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/sora_2/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/sora_2/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/sora_2/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/sora_2_pro/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/sora_2_pro/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/sora_2_pro/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/sora_2_pro/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/sora_2_pro/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/sora_2_pro/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/sora_2_pro/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/sora_2_pro/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/sora_2_pro/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/sora_2_pro/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/sora_2_pro/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/sora_2_pro/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/sora_2_pro/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/sora_2_pro/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/sora_2_pro/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/sora_2_pro/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_2/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_2/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_2/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_2/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_2/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_2/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_2/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_2/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_2/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_2/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_2/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_2/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_2/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_2/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_2/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_2/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3_fast/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3_fast/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3_fast/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3_fast/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3_fast/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3_fast/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3_fast/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3_fast/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3_fast/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3_fast/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3_fast/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3_fast/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3_fast/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3_fast/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3_fast/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3_fast/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3p1/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3p1/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3p1/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3p1/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3p1/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3p1/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3p1/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3p1/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3p1/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3p1/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3p1/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3p1/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3p1/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3p1/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3p1/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3p1/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3p1_fast/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3p1_fast/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3p1_fast/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3p1_fast/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3p1_fast/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3p1_fast/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3p1_fast/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3p1_fast/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3p1_fast/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3p1_fast/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3p1_fast/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3p1_fast/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3p1_fast/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3p1_fast/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3p1_fast/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3p1_fast/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3p1_lite/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3p1_lite/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3p1_lite/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3p1_lite/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3p1_lite/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3p1_lite/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3p1_lite/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3p1_lite/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3p1_lite/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3p1_lite/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3p1_lite/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3p1_lite/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3p1_lite/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3p1_lite/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/veo_3p1_lite/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/veo_3p1_lite/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/vidu_q3/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/vidu_q3/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/vidu_q3/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/vidu_q3/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/vidu_q3/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/vidu_q3/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/vidu_q3/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/vidu_q3/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/vidu_q3/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/vidu_q3/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/vidu_q3/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/vidu_q3/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/vidu_q3/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/vidu_q3/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/vidu_q3/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/vidu_q3/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/vidu_q3_turbo/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/vidu_q3_turbo/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/vidu_q3_turbo/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/vidu_q3_turbo/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/vidu_q3_turbo/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/vidu_q3_turbo/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/vidu_q3_turbo/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/vidu_q3_turbo/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/vidu_q3_turbo/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/vidu_q3_turbo/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/vidu_q3_turbo/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/vidu_q3_turbo/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/vidu_q3_turbo/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/artcraft/vidu_q3_turbo/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/artcraft/vidu_q3_turbo/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/artcraft/vidu_q3_turbo/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_1_6_pro/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/kling_1_6_pro/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_1_6_pro/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/kling_1_6_pro/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_1_6_pro/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/kling_1_6_pro/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_1_6_pro/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/kling_1_6_pro/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_1_6_pro/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/kling_1_6_pro/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_1_6_pro/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/kling_1_6_pro/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_1_6_pro/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/kling_1_6_pro/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_1_6_pro/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/kling_1_6_pro/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_1_master/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_1_master/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_1_master/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_1_master/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_1_master/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_1_master/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_1_master/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_1_master/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_1_master/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_1_master/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_1_master/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_1_master/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_1_master/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_1_master/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_1_master/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_1_master/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_1_pro/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_1_pro/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_1_pro/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_1_pro/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_1_pro/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_1_pro/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_1_pro/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_1_pro/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_1_pro/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_1_pro/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_1_pro/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_1_pro/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_1_pro/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_1_pro/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_1_pro/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_1_pro/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_5_turbo_pro/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_5_turbo_pro/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_5_turbo_pro/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_5_turbo_pro/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_5_turbo_pro/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_5_turbo_pro/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_5_turbo_pro/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_5_turbo_pro/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_5_turbo_pro/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_5_turbo_pro/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_5_turbo_pro/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_5_turbo_pro/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_5_turbo_pro/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_5_turbo_pro/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_5_turbo_pro/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_5_turbo_pro/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_6_pro/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_6_pro/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_6_pro/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_6_pro/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_6_pro/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_6_pro/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_6_pro/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_6_pro/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_6_pro/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_6_pro/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_6_pro/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_6_pro/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_6_pro/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_6_pro/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_2_6_pro/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/kling_2_6_pro/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_3p0_pro/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/kling_3p0_pro/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_3p0_pro/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/kling_3p0_pro/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_3p0_pro/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/kling_3p0_pro/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_3p0_pro/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/kling_3p0_pro/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_3p0_pro/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/kling_3p0_pro/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_3p0_pro/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/kling_3p0_pro/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_3p0_pro/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/kling_3p0_pro/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_3p0_pro/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/kling_3p0_pro/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_3p0_standard/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/kling_3p0_standard/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_3p0_standard/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/kling_3p0_standard/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_3p0_standard/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/kling_3p0_standard/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_3p0_standard/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/kling_3p0_standard/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_3p0_standard/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/kling_3p0_standard/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_3p0_standard/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/kling_3p0_standard/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_3p0_standard/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/kling_3p0_standard/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/kling_3p0_standard/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/kling_3p0_standard/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/seedance_1p0_lite/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/seedance_1p0_lite/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/seedance_1p0_lite/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/seedance_1p0_lite/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/seedance_1p0_lite/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/seedance_1p0_lite/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/seedance_1p0_lite/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/seedance_1p0_lite/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/seedance_1p0_lite/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/seedance_1p0_lite/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/seedance_1p0_lite/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/seedance_1p0_lite/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/seedance_1p0_lite/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/seedance_1p0_lite/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/seedance_1p0_lite/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/seedance_1p0_lite/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/seedance_1p5_pro/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/seedance_1p5_pro/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/seedance_1p5_pro/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/seedance_1p5_pro/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/seedance_1p5_pro/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/seedance_1p5_pro/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/seedance_1p5_pro/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/seedance_1p5_pro/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/seedance_1p5_pro/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/seedance_1p5_pro/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/seedance_1p5_pro/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/seedance_1p5_pro/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/seedance_1p5_pro/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/seedance_1p5_pro/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/seedance_1p5_pro/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/seedance_1p5_pro/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/sora_2/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/sora_2/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/sora_2/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/sora_2/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/sora_2/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/sora_2/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/sora_2/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/sora_2/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/sora_2/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/sora_2/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/sora_2/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/sora_2/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/sora_2/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/sora_2/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/sora_2/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/sora_2/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/sora_2_pro/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/sora_2_pro/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/sora_2_pro/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/sora_2_pro/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/sora_2_pro/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/sora_2_pro/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/sora_2_pro/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/sora_2_pro/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/sora_2_pro/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/sora_2_pro/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/sora_2_pro/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/sora_2_pro/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/sora_2_pro/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/sora_2_pro/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/sora_2_pro/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/sora_2_pro/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_2/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/veo_2/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_2/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/veo_2/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_2/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/veo_2/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_2/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/veo_2/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_2/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/veo_2/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_2/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/veo_2/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_2/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/veo_2/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_2/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/veo_2/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3_fast/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3_fast/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3_fast/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3_fast/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3_fast/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3_fast/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3_fast/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3_fast/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3_fast/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3_fast/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3_fast/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3_fast/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3_fast/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3_fast/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3_fast/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3_fast/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3p1/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3p1/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3p1/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3p1/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3p1/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3p1/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3p1/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3p1/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3p1/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3p1/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3p1/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3p1/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3p1/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3p1/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3p1/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3p1/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3p1_fast/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3p1_fast/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3p1_fast/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3p1_fast/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3p1_fast/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3p1_fast/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3p1_fast/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3p1_fast/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3p1_fast/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3p1_fast/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3p1_fast/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3p1_fast/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3p1_fast/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3p1_fast/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3p1_fast/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3p1_fast/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3p1_lite/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3p1_lite/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3p1_lite/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3p1_lite/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3p1_lite/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3p1_lite/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3p1_lite/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3p1_lite/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3p1_lite/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3p1_lite/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3p1_lite/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3p1_lite/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3p1_lite/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3p1_lite/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/veo_3p1_lite/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/veo_3p1_lite/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/vidu_q3/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/vidu_q3/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/vidu_q3/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/vidu_q3/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/vidu_q3/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/vidu_q3/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/vidu_q3/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/vidu_q3/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/vidu_q3/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/vidu_q3/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/vidu_q3/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/vidu_q3/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/vidu_q3/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/vidu_q3/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/vidu_q3/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/vidu_q3/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/vidu_q3_turbo/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/vidu_q3_turbo/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/vidu_q3_turbo/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/vidu_q3_turbo/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/vidu_q3_turbo/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/vidu_q3_turbo/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/vidu_q3_turbo/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/vidu_q3_turbo/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/vidu_q3_turbo/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/vidu_q3_turbo/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/vidu_q3_turbo/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/vidu_q3_turbo/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/vidu_q3_turbo/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/fal/vidu_q3_turbo/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/fal/vidu_q3_turbo/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/fal/vidu_q3_turbo/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/gmicloud/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/gmicloud/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/gmicloud/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/gmicloud/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/gmicloud/seedance_2p0_fast_g/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/gmicloud/seedance_2p0_fast_g/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/gmicloud/seedance_2p0_fast_g/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/gmicloud/seedance_2p0_fast_g/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/gmicloud/seedance_2p0_fast_g/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/gmicloud/seedance_2p0_fast_g/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/gmicloud/seedance_2p0_fast_g/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/gmicloud/seedance_2p0_fast_g/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/gmicloud/seedance_2p0_fast_g/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/gmicloud/seedance_2p0_fast_g/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/gmicloud/seedance_2p0_fast_g/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/gmicloud/seedance_2p0_fast_g/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/gmicloud/seedance_2p0_fast_g/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/gmicloud/seedance_2p0_fast_g/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/gmicloud/seedance_2p0_fast_g/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/gmicloud/seedance_2p0_fast_g/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/gmicloud/seedance_2p0_g/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/gmicloud/seedance_2p0_g/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/gmicloud/seedance_2p0_g/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/gmicloud/seedance_2p0_g/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/gmicloud/seedance_2p0_g/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/gmicloud/seedance_2p0_g/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/gmicloud/seedance_2p0_g/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/gmicloud/seedance_2p0_g/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/gmicloud/seedance_2p0_g/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/gmicloud/seedance_2p0_g/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/gmicloud/seedance_2p0_g/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/gmicloud/seedance_2p0_g/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/gmicloud/seedance_2p0_g/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/gmicloud/seedance_2p0_g/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/gmicloud/seedance_2p0_g/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/gmicloud/seedance_2p0_g/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/grok_api/grok_imagine_video/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/grok_api/grok_imagine_video/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/grok_api/grok_imagine_video/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/grok_api/grok_imagine_video/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/grok_api/grok_imagine_video/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/grok_api/grok_imagine_video/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/grok_api/grok_imagine_video/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/grok_api/grok_imagine_video/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/grok_api/grok_imagine_video/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/grok_api/grok_imagine_video/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/grok_api/grok_imagine_video/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/grok_api/grok_imagine_video/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/grok_api/grok_imagine_video/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/grok_api/grok_imagine_video/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/grok_api/grok_imagine_video/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/grok_api/grok_imagine_video/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/grok_api/grok_imagine_video_1p5/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/grok_api/grok_imagine_video_1p5/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/grok_api/grok_imagine_video_1p5/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/grok_api/grok_imagine_video_1p5/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/grok_api/grok_imagine_video_1p5/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/grok_api/grok_imagine_video_1p5/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/grok_api/grok_imagine_video_1p5/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/grok_api/grok_imagine_video_1p5/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/grok_api/grok_imagine_video_1p5/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/grok_api/grok_imagine_video_1p5/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/grok_api/grok_imagine_video_1p5/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/grok_api/grok_imagine_video_1p5/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/grok_api/grok_imagine_video_1p5/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/grok_api/grok_imagine_video_1p5/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/grok_api/grok_imagine_video_1p5/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/grok_api/grok_imagine_video_1p5/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/grok_api/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/grok_api/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/grok_api/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/grok_api/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/happy_horse_1p0/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/kinovi/happy_horse_1p0/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/happy_horse_1p0/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/kinovi/happy_horse_1p0/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/happy_horse_1p0/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/kinovi/happy_horse_1p0/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/happy_horse_1p0/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/kinovi/happy_horse_1p0/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/happy_horse_1p0/draft.rs b/crates/api_clients/router/src/generate/generate_video/providers/kinovi/happy_horse_1p0/draft.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/happy_horse_1p0/draft.rs rename to crates/api_clients/router/src/generate/generate_video/providers/kinovi/happy_horse_1p0/draft.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/happy_horse_1p0/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/kinovi/happy_horse_1p0/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/happy_horse_1p0/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/kinovi/happy_horse_1p0/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/happy_horse_1p0/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/kinovi/happy_horse_1p0/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/happy_horse_1p0/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/kinovi/happy_horse_1p0/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/kinovi/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/kinovi/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/resolve.rs b/crates/api_clients/router/src/generate/generate_video/providers/kinovi/resolve.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/resolve.rs rename to crates/api_clients/router/src/generate/generate_video/providers/kinovi/resolve.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/seedance_2p0/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/kinovi/seedance_2p0/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/seedance_2p0/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/kinovi/seedance_2p0/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/seedance_2p0/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/kinovi/seedance_2p0/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/seedance_2p0/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/kinovi/seedance_2p0/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/seedance_2p0/draft.rs b/crates/api_clients/router/src/generate/generate_video/providers/kinovi/seedance_2p0/draft.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/seedance_2p0/draft.rs rename to crates/api_clients/router/src/generate/generate_video/providers/kinovi/seedance_2p0/draft.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/seedance_2p0/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/kinovi/seedance_2p0/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/seedance_2p0/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/kinovi/seedance_2p0/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/seedance_2p0/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/kinovi/seedance_2p0/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/seedance_2p0/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/kinovi/seedance_2p0/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/seedance_2p0_fast/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/kinovi/seedance_2p0_fast/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/seedance_2p0_fast/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/kinovi/seedance_2p0_fast/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/seedance_2p0_fast/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/kinovi/seedance_2p0_fast/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/seedance_2p0_fast/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/kinovi/seedance_2p0_fast/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/seedance_2p0_fast/draft.rs b/crates/api_clients/router/src/generate/generate_video/providers/kinovi/seedance_2p0_fast/draft.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/seedance_2p0_fast/draft.rs rename to crates/api_clients/router/src/generate/generate_video/providers/kinovi/seedance_2p0_fast/draft.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/seedance_2p0_fast/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/kinovi/seedance_2p0_fast/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/seedance_2p0_fast/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/kinovi/seedance_2p0_fast/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/seedance_2p0_fast/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/kinovi/seedance_2p0_fast/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/seedance_2p0_fast/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/kinovi/seedance_2p0_fast/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/seedance_2p0_mini/build.rs b/crates/api_clients/router/src/generate/generate_video/providers/kinovi/seedance_2p0_mini/build.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/seedance_2p0_mini/build.rs rename to crates/api_clients/router/src/generate/generate_video/providers/kinovi/seedance_2p0_mini/build.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/seedance_2p0_mini/cost.rs b/crates/api_clients/router/src/generate/generate_video/providers/kinovi/seedance_2p0_mini/cost.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/seedance_2p0_mini/cost.rs rename to crates/api_clients/router/src/generate/generate_video/providers/kinovi/seedance_2p0_mini/cost.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/seedance_2p0_mini/draft.rs b/crates/api_clients/router/src/generate/generate_video/providers/kinovi/seedance_2p0_mini/draft.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/seedance_2p0_mini/draft.rs rename to crates/api_clients/router/src/generate/generate_video/providers/kinovi/seedance_2p0_mini/draft.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/seedance_2p0_mini/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/kinovi/seedance_2p0_mini/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/seedance_2p0_mini/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/kinovi/seedance_2p0_mini/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/seedance_2p0_mini/request.rs b/crates/api_clients/router/src/generate/generate_video/providers/kinovi/seedance_2p0_mini/request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/seedance_2p0_mini/request.rs rename to crates/api_clients/router/src/generate/generate_video/providers/kinovi/seedance_2p0_mini/request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/upload.rs b/crates/api_clients/router/src/generate/generate_video/providers/kinovi/upload.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/kinovi/upload.rs rename to crates/api_clients/router/src/generate/generate_video/providers/kinovi/upload.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/providers/mod.rs b/crates/api_clients/router/src/generate/generate_video/providers/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/providers/mod.rs rename to crates/api_clients/router/src/generate/generate_video/providers/mod.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/video_generation_cost_estimate.rs b/crates/api_clients/router/src/generate/generate_video/video_generation_cost_estimate.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/video_generation_cost_estimate.rs rename to crates/api_clients/router/src/generate/generate_video/video_generation_cost_estimate.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/video_generation_draft.rs b/crates/api_clients/router/src/generate/generate_video/video_generation_draft.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/video_generation_draft.rs rename to crates/api_clients/router/src/generate/generate_video/video_generation_draft.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/video_generation_draft_context.rs b/crates/api_clients/router/src/generate/generate_video/video_generation_draft_context.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/video_generation_draft_context.rs rename to crates/api_clients/router/src/generate/generate_video/video_generation_draft_context.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/video_generation_draft_or_request.rs b/crates/api_clients/router/src/generate/generate_video/video_generation_draft_or_request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/video_generation_draft_or_request.rs rename to crates/api_clients/router/src/generate/generate_video/video_generation_draft_or_request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/generate_video/video_generation_request.rs b/crates/api_clients/router/src/generate/generate_video/video_generation_request.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/generate_video/video_generation_request.rs rename to crates/api_clients/router/src/generate/generate_video/video_generation_request.rs diff --git a/crates/api_clients/artcraft_router/src/generate/mod.rs b/crates/api_clients/router/src/generate/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/generate/mod.rs rename to crates/api_clients/router/src/generate/mod.rs diff --git a/crates/api_clients/artcraft_router/src/lib.rs b/crates/api_clients/router/src/lib.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/lib.rs rename to crates/api_clients/router/src/lib.rs diff --git a/crates/api_clients/artcraft_router/src/test_helpers.rs b/crates/api_clients/router/src/test_helpers.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/test_helpers.rs rename to crates/api_clients/router/src/test_helpers.rs diff --git a/crates/api_clients/artcraft_router/src/utils/download_file.rs b/crates/api_clients/router/src/utils/download_file.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/utils/download_file.rs rename to crates/api_clients/router/src/utils/download_file.rs diff --git a/crates/api_clients/artcraft_router/src/utils/mod.rs b/crates/api_clients/router/src/utils/mod.rs similarity index 100% rename from crates/api_clients/artcraft_router/src/utils/mod.rs rename to crates/api_clients/router/src/utils/mod.rs diff --git a/crates/artcraftx/Cargo.toml b/crates/artcraftx/Cargo.toml index 94728fd2..9976c7cb 100644 --- a/crates/artcraftx/Cargo.toml +++ b/crates/artcraftx/Cargo.toml @@ -27,7 +27,7 @@ workspace-build-acceleration.workspace = true # Internal artcraft_client.workspace = true -artcraft_router.workspace = true +router.workspace = true build_metadata.workspace = true cookie_store.workspace = true enums.workspace = true diff --git a/crates/artcraftx/src/api_adapters/aspect_ratio/convert/router_aspect_ratio_to_enums_aspect_ratio.rs b/crates/artcraftx/src/api_adapters/aspect_ratio/convert/router_aspect_ratio_to_enums_aspect_ratio.rs index 5f72b24b..a4be5c1d 100644 --- a/crates/artcraftx/src/api_adapters/aspect_ratio/convert/router_aspect_ratio_to_enums_aspect_ratio.rs +++ b/crates/artcraftx/src/api_adapters/aspect_ratio/convert/router_aspect_ratio_to_enums_aspect_ratio.rs @@ -1,4 +1,4 @@ -use artcraft_router::api::router_aspect_ratio::RouterAspectRatio; +use router::api::router_aspect_ratio::RouterAspectRatio; use enums::common::generation::common_aspect_ratio::CommonAspectRatio as EnumsCommonAspectRatio; /// Map from the router's CommonAspectRatio to the enums crate's CommonAspectRatio. diff --git a/crates/artcraftx/src/api_adapters/models/image/tauri_image_model_to_router_model.rs b/crates/artcraftx/src/api_adapters/models/image/tauri_image_model_to_router_model.rs index 79cecb9c..c405d450 100644 --- a/crates/artcraftx/src/api_adapters/models/image/tauri_image_model_to_router_model.rs +++ b/crates/artcraftx/src/api_adapters/models/image/tauri_image_model_to_router_model.rs @@ -1,4 +1,4 @@ -use artcraft_router::api::router_image_model::RouterImageModel; +use router::api::router_image_model::RouterImageModel; use crate::commands::generate::generate_image::tauri_image_model::TauriImageModel; diff --git a/crates/artcraftx/src/api_adapters/models/video/tauri_video_model_to_router_model.rs b/crates/artcraftx/src/api_adapters/models/video/tauri_video_model_to_router_model.rs index 637fbed9..3d3f5a45 100644 --- a/crates/artcraftx/src/api_adapters/models/video/tauri_video_model_to_router_model.rs +++ b/crates/artcraftx/src/api_adapters/models/video/tauri_video_model_to_router_model.rs @@ -1,4 +1,4 @@ -use artcraft_router::api::router_video_model::RouterVideoModel; +use router::api::router_video_model::RouterVideoModel; use crate::commands::generate::generate_video::request::TauriVideoModel; diff --git a/crates/artcraftx/src/api_adapters/quality/common_quality.rs b/crates/artcraftx/src/api_adapters/quality/common_quality.rs index a28d9522..cd234e58 100644 --- a/crates/artcraftx/src/api_adapters/quality/common_quality.rs +++ b/crates/artcraftx/src/api_adapters/quality/common_quality.rs @@ -1,5 +1,5 @@ use serde_derive::{Deserialize, Serialize}; -use artcraft_router::api::router_quality::RouterQuality; +use router::api::router_quality::RouterQuality; /// Just cargo culting this. might not be necessary for standalone types anymore #[derive(Copy, Clone, Debug, Serialize, Deserialize)] diff --git a/crates/artcraftx/src/api_adapters/resolution/convert/router_resolution_to_enums_resolution.rs b/crates/artcraftx/src/api_adapters/resolution/convert/router_resolution_to_enums_resolution.rs index 3dbbce67..42102548 100644 --- a/crates/artcraftx/src/api_adapters/resolution/convert/router_resolution_to_enums_resolution.rs +++ b/crates/artcraftx/src/api_adapters/resolution/convert/router_resolution_to_enums_resolution.rs @@ -1,4 +1,4 @@ -use artcraft_router::api::router_resolution::RouterResolution; +use router::api::router_resolution::RouterResolution; use enums::common::generation::common_resolution::CommonResolution as EnumsCommonResolution; /// Map from the router's CommonResolution to the enums crate's CommonResolution. diff --git a/crates/artcraftx/src/commands/credentials/artcraft_login_command.rs b/crates/artcraftx/src/commands/credentials/artcraft_login_command.rs index 57c4b8a8..eef7f094 100644 --- a/crates/artcraftx/src/commands/credentials/artcraft_login_command.rs +++ b/crates/artcraftx/src/commands/credentials/artcraft_login_command.rs @@ -1,6 +1,5 @@ use artcraft_client::api_defs::users::login::{LoginErrorType, LoginRequest}; use artcraft_client::endpoints::users::login::{login, LoginArgs, LoginError}; -use artcraft_client::utils::api_host::ApiHost; use chrono::Utc; use enums::common::generation_provider::GenerationProvider; use log::{error, info, warn}; @@ -8,6 +7,7 @@ use serde_derive::Serialize; use tauri::{AppHandle, State}; use crate::commands::credentials::credential_payload::CredentialPayload; +use crate::credentials::artcraft_api_host::maybe_artcraft_api_host_for_service; use crate::credentials::cookie_credential::CookieCredential; use crate::credentials::credential::{Credential, CredentialSecret}; use crate::credentials::credential_service_type::CredentialServiceType; @@ -16,9 +16,6 @@ use crate::events::basic_sendable_event_trait::BasicSendableEvent; use crate::events::functional_events::refresh_account_state_event::RefreshAccountStateEvent; use crate::state::data_dir::app_data_root::AppDataRoot; -/// Port the local ArtCraft development server listens on. -const LOCAL_DEV_PORT: u32 = 12345; - #[derive(Serialize)] pub struct ArtcraftLoginResponse { pub credential: CredentialPayload, @@ -68,17 +65,21 @@ pub async fn artcraft_login_command( ) -> Result { info!("artcraft_login_command called for service: {}", service); - let api_host = match service { - CredentialServiceType::Artcraft => ApiHost::Storyteller, - CredentialServiceType::ArtcraftLocal => ApiHost::Localhost { port: LOCAL_DEV_PORT }, - other => { - let message = format!("Service {} does not support password login", other); - error!("{}", message); - return Err(ArtcraftLoginCommandError { - error_type: ArtcraftLoginErrorType::BadRequest, - message, - }); - } + let is_password_login_service = matches!( + service, + CredentialServiceType::Artcraft | CredentialServiceType::ArtcraftLocal, + ); + + let maybe_api_host = maybe_artcraft_api_host_for_service(service) + .filter(|_| is_password_login_service); + + let Some(api_host) = maybe_api_host else { + let message = format!("Service {} does not support password login", service); + error!("{}", message); + return Err(ArtcraftLoginCommandError { + error_type: ArtcraftLoginErrorType::BadRequest, + message, + }); }; let username_or_email = username_or_email.trim().to_string(); diff --git a/crates/artcraftx/src/commands/deprecated/image_edit/artcraft/handle_image_edit_artcraft.rs b/crates/artcraftx/src/commands/deprecated/image_edit/artcraft/handle_image_edit_artcraft.rs index 6367f3f5..f786f8b3 100644 --- a/crates/artcraftx/src/commands/deprecated/image_edit/artcraft/handle_image_edit_artcraft.rs +++ b/crates/artcraftx/src/commands/deprecated/image_edit/artcraft/handle_image_edit_artcraft.rs @@ -8,7 +8,7 @@ use crate::events::generation_events::common::GenerationModel; use crate::state::app_env_configs::app_env_configs::AppEnvConfigs; use crate::state::data_dir::app_data_root::AppDataRoot; use crate::services::storyteller::state::storyteller_credential_manager::StorytellerCredentialManager; -use artcraft_router::api::router_image_model::RouterImageModel; +use router::api::router_image_model::RouterImageModel; use tauri::AppHandle; pub async fn handle_image_edit_artcraft( diff --git a/crates/artcraftx/src/commands/deprecated/image_edit/artcraft/handle_image_edit_artcraft_via_router.rs b/crates/artcraftx/src/commands/deprecated/image_edit/artcraft/handle_image_edit_artcraft_via_router.rs index 35a36cdf..f89c02a0 100644 --- a/crates/artcraftx/src/commands/deprecated/image_edit/artcraft/handle_image_edit_artcraft_via_router.rs +++ b/crates/artcraftx/src/commands/deprecated/image_edit/artcraft/handle_image_edit_artcraft_via_router.rs @@ -7,16 +7,16 @@ use crate::commands::enqueue::task_enqueue_success::TaskEnqueueSuccess; use crate::events::generation_events::common::GenerationModel; use crate::state::app_env_configs::app_env_configs::AppEnvConfigs; use crate::services::storyteller::state::storyteller_credential_manager::StorytellerCredentialManager; -use artcraft_router::api::router_aspect_ratio::RouterAspectRatio; -use artcraft_router::api::router_image_model::RouterImageModel; -use artcraft_router::api::router_resolution::RouterResolution; -use artcraft_router::api::image_list_ref::ImageListRef; -use artcraft_router::api::router_provider::RouterProvider; -use artcraft_router::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy; -use artcraft_router::client::router_artcraft_client::RouterArtcraftClient; -use artcraft_router::client::router_client::RouterClient; -use artcraft_router::generate::generate_image::generate_image_request_builder::GenerateImageRequestBuilder; -use artcraft_router::generate::generate_image::image_generation_draft_or_request::ImageGenerationDraftOrRequest; +use router::api::router_aspect_ratio::RouterAspectRatio; +use router::api::router_image_model::RouterImageModel; +use router::api::router_resolution::RouterResolution; +use router::api::image_list_ref::ImageListRef; +use router::api::router_provider::RouterProvider; +use router::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy; +use router::client::router_artcraft_client::RouterArtcraftClient; +use router::client::router_client::RouterClient; +use router::generate::generate_image::generate_image_request_builder::GenerateImageRequestBuilder; +use router::generate::generate_image::image_generation_draft_or_request::ImageGenerationDraftOrRequest; use enums::common::generation_provider::GenerationProvider; use enums::tauri::tasks::task_type::TaskType; use log::{error, info}; diff --git a/crates/artcraftx/src/commands/deprecated/text_to_image/artcraft/handle_text_to_image_artcraft.rs b/crates/artcraftx/src/commands/deprecated/text_to_image/artcraft/handle_text_to_image_artcraft.rs index 7c701491..96b4cf0a 100644 --- a/crates/artcraftx/src/commands/deprecated/text_to_image/artcraft/handle_text_to_image_artcraft.rs +++ b/crates/artcraftx/src/commands/deprecated/text_to_image/artcraft/handle_text_to_image_artcraft.rs @@ -8,7 +8,7 @@ use crate::events::generation_events::common::GenerationModel; use crate::state::app_env_configs::app_env_configs::AppEnvConfigs; use crate::state::data_dir::app_data_root::AppDataRoot; use crate::services::storyteller::state::storyteller_credential_manager::StorytellerCredentialManager; -use artcraft_router::api::router_image_model::RouterImageModel; +use router::api::router_image_model::RouterImageModel; use enums::common::generation_provider::GenerationProvider; use tauri::AppHandle; diff --git a/crates/artcraftx/src/commands/deprecated/text_to_image/artcraft/handle_text_to_image_artcraft_via_router.rs b/crates/artcraftx/src/commands/deprecated/text_to_image/artcraft/handle_text_to_image_artcraft_via_router.rs index 06ce513f..3b7b4b0a 100644 --- a/crates/artcraftx/src/commands/deprecated/text_to_image/artcraft/handle_text_to_image_artcraft_via_router.rs +++ b/crates/artcraftx/src/commands/deprecated/text_to_image/artcraft/handle_text_to_image_artcraft_via_router.rs @@ -8,17 +8,17 @@ use crate::commands::deprecated::text_to_image::enqueue_text_to_image_command::{ use crate::events::generation_events::common::GenerationModel; use crate::state::app_env_configs::app_env_configs::AppEnvConfigs; use crate::services::storyteller::state::storyteller_credential_manager::StorytellerCredentialManager; -use artcraft_router::api::router_aspect_ratio::RouterAspectRatio; -use artcraft_router::api::router_image_model::RouterImageModel; -use artcraft_router::api::router_resolution::RouterResolution; -use artcraft_router::api::router_quality::RouterQuality; -use artcraft_router::api::image_list_ref::ImageListRef; -use artcraft_router::api::router_provider::RouterProvider; -use artcraft_router::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy; -use artcraft_router::client::router_artcraft_client::RouterArtcraftClient; -use artcraft_router::client::router_client::RouterClient; -use artcraft_router::generate::generate_image::generate_image_request_builder::GenerateImageRequestBuilder; -use artcraft_router::generate::generate_image::image_generation_draft_or_request::ImageGenerationDraftOrRequest; +use router::api::router_aspect_ratio::RouterAspectRatio; +use router::api::router_image_model::RouterImageModel; +use router::api::router_resolution::RouterResolution; +use router::api::router_quality::RouterQuality; +use router::api::image_list_ref::ImageListRef; +use router::api::router_provider::RouterProvider; +use router::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy; +use router::client::router_artcraft_client::RouterArtcraftClient; +use router::client::router_client::RouterClient; +use router::generate::generate_image::generate_image_request_builder::GenerateImageRequestBuilder; +use router::generate::generate_image::image_generation_draft_or_request::ImageGenerationDraftOrRequest; use enums::common::generation_provider::GenerationProvider; use enums::tauri::tasks::task_type::TaskType; use log::{error, info}; diff --git a/crates/artcraftx/src/commands/enqueue/common/maybe_notify_frontend_of_credential_errors.rs b/crates/artcraftx/src/commands/enqueue/common/maybe_notify_frontend_of_credential_errors.rs new file mode 100644 index 00000000..37cb4609 --- /dev/null +++ b/crates/artcraftx/src/commands/enqueue/common/maybe_notify_frontend_of_credential_errors.rs @@ -0,0 +1,35 @@ +use tauri::AppHandle; + +use crate::commands::enqueue::generate_error::{CredentialProblemReason, GenerateError}; +use crate::events::basic_sendable_event_trait::BasicSendableEvent; +use crate::events::functional_events::show_credential_error_modal_event::ShowCredentialErrorModalEvent; + +/// If the error is a credential problem, tell the frontend to show the +/// dismissable credential-error modal. +pub async fn maybe_notify_frontend_of_credential_errors( + app: &AppHandle, + error: &GenerateError, +) { + let GenerateError::CredentialProblem(reason) = error else { + return; + }; + + let message = match reason { + CredentialProblemReason::NoCredentialSupplied => { + "No account selected. Pick an account in the account selector, \ + or add one in Settings → Accounts.".to_string() + } + CredentialProblemReason::CredentialNotFound { credential_id } => { + format!( + "The selected account no longer exists (credential {}). \ + Pick another account and try again.", + credential_id, + ) + } + CredentialProblemReason::CredentialNotUsable { reason, .. } => { + format!("The selected account can't be used for this request: {}", reason) + } + }; + + ShowCredentialErrorModalEvent { message }.send_infallible(app); +} diff --git a/crates/artcraftx/src/commands/enqueue/common/mod.rs b/crates/artcraftx/src/commands/enqueue/common/mod.rs index feab773f..89f14fcc 100644 --- a/crates/artcraftx/src/commands/enqueue/common/mod.rs +++ b/crates/artcraftx/src/commands/enqueue/common/mod.rs @@ -1,3 +1,4 @@ pub mod maybe_notify_frontend_of_billing_errors; +pub mod maybe_notify_frontend_of_credential_errors; pub mod maybe_notify_frontend_of_grok_errors; pub mod notify_frontend_of_errors; \ No newline at end of file diff --git a/crates/artcraftx/src/commands/enqueue/common/notify_frontend_of_errors.rs b/crates/artcraftx/src/commands/enqueue/common/notify_frontend_of_errors.rs index 264559a1..41c82a4f 100644 --- a/crates/artcraftx/src/commands/enqueue/common/notify_frontend_of_errors.rs +++ b/crates/artcraftx/src/commands/enqueue/common/notify_frontend_of_errors.rs @@ -1,4 +1,5 @@ use crate::commands::enqueue::common::maybe_notify_frontend_of_billing_errors::maybe_notify_frontend_of_billing_errors; +use crate::commands::enqueue::common::maybe_notify_frontend_of_credential_errors::maybe_notify_frontend_of_credential_errors; use crate::commands::enqueue::common::maybe_notify_frontend_of_grok_errors::maybe_notify_frontend_of_grok_errors; use crate::commands::enqueue::generate_error::GenerateError; use tauri::AppHandle; @@ -8,5 +9,6 @@ pub async fn notify_frontend_of_errors( error: &GenerateError, ) { maybe_notify_frontend_of_billing_errors(app, error).await; + maybe_notify_frontend_of_credential_errors(app, error).await; maybe_notify_frontend_of_grok_errors(app, error).await; } diff --git a/crates/artcraftx/src/commands/enqueue/generate_error.rs b/crates/artcraftx/src/commands/enqueue/generate_error.rs index 006a9de2..a451c5f1 100644 --- a/crates/artcraftx/src/commands/enqueue/generate_error.rs +++ b/crates/artcraftx/src/commands/enqueue/generate_error.rs @@ -1,7 +1,7 @@ use crate::error::artcraftx_error::ArtcraftXError; use anyhow::anyhow; -use artcraft_router::errors::artcraft_router_error::ArtcraftRouterError; -use artcraft_router::errors::provider_error::ProviderError; +use router::errors::artcraft_router_error::ArtcraftRouterError; +use router::errors::provider_error::ProviderError; use base64::DecodeError; use enums::common::generation_provider::GenerationProvider; use enums::common::generation::common_model_type::CommonModelType; @@ -10,7 +10,7 @@ use grok_consumer_client::error::grok_error::GrokError; use midjourney_client::error::midjourney_error::MidjourneyError; use openai_sora_client::error::sora_error::SoraError; use artcraft_client::error::storyteller_error::StorytellerError; -use artcraft_router::errors::download_error::DownloadError; +use router::errors::download_error::DownloadError; use worldlabs_consumer_client::error::world_labs_error::WorldLabsError; //use fal_client::error::fal_error_plus::FalErrorPlus; @@ -18,6 +18,9 @@ use worldlabs_consumer_client::error::world_labs_error::WorldLabsError; pub enum GenerateError { BadInput(BadInputReason), MissingCredentials(MissingCredentialsReason), + /// Problem with the stored credential named by the request + /// (`credential_id`): absent, unknown, or unusable. + CredentialProblem(CredentialProblemReason), ProviderFailure(ProviderFailureReason), /// We couldn't find a provider to dispatch the request to. @@ -74,6 +77,16 @@ pub enum BadInputReason { WrongImageArguments(String), } +#[derive(Debug)] +pub enum CredentialProblemReason { + /// The request didn't name a credential (no account selected). + NoCredentialSupplied, + /// The named credential doesn't exist on disk. + CredentialNotFound { credential_id: String }, + /// The credential exists but can't serve this request. + CredentialNotUsable { credential_id: String, reason: String }, +} + #[derive(Debug)] pub enum MissingCredentialsReason { NeedsGrokCredentials, diff --git a/crates/artcraftx/src/commands/enqueue/image_to_gaussian/artcraft/handle_artcraft_gaussian.rs b/crates/artcraftx/src/commands/enqueue/image_to_gaussian/artcraft/handle_artcraft_gaussian.rs index 407fdfa8..71db3d3f 100644 --- a/crates/artcraftx/src/commands/enqueue/image_to_gaussian/artcraft/handle_artcraft_gaussian.rs +++ b/crates/artcraftx/src/commands/enqueue/image_to_gaussian/artcraft/handle_artcraft_gaussian.rs @@ -6,7 +6,7 @@ use crate::commands::enqueue::task_enqueue_success::TaskEnqueueSuccess; use crate::events::generation_events::common::GenerationModel; use crate::state::app_env_configs::app_env_configs::AppEnvConfigs; use crate::services::storyteller::state::storyteller_credential_manager::StorytellerCredentialManager; -use artcraft_router::api::router_splat_model::RouterSplatModel; +use router::api::router_splat_model::RouterSplatModel; use tauri::AppHandle; pub async fn handle_gaussian_artcraft( diff --git a/crates/artcraftx/src/commands/enqueue/image_to_gaussian/artcraft/handle_artcraft_splat_via_router.rs b/crates/artcraftx/src/commands/enqueue/image_to_gaussian/artcraft/handle_artcraft_splat_via_router.rs index 1c035bca..ebdd1203 100644 --- a/crates/artcraftx/src/commands/enqueue/image_to_gaussian/artcraft/handle_artcraft_splat_via_router.rs +++ b/crates/artcraftx/src/commands/enqueue/image_to_gaussian/artcraft/handle_artcraft_splat_via_router.rs @@ -4,12 +4,12 @@ use crate::commands::enqueue::task_enqueue_success::TaskEnqueueSuccess; use crate::events::generation_events::common::GenerationModel; use crate::state::app_env_configs::app_env_configs::AppEnvConfigs; use artcraft_client::credentials::storyteller_credential_set::StorytellerCredentialSet; -use artcraft_router::api::router_splat_model::RouterSplatModel; -use artcraft_router::api::image_list_ref::ImageListRef; -use artcraft_router::api::router_provider::RouterProvider; -use artcraft_router::client::router_artcraft_client::RouterArtcraftClient; -use artcraft_router::client::router_client::RouterClient; -use artcraft_router::generate::generate_splat::generate_splat_request::GenerateSplatRequest; +use router::api::router_splat_model::RouterSplatModel; +use router::api::image_list_ref::ImageListRef; +use router::api::router_provider::RouterProvider; +use router::client::router_artcraft_client::RouterArtcraftClient; +use router::client::router_client::RouterClient; +use router::generate::generate_splat::generate_splat_request::GenerateSplatRequest; use enums::common::generation_provider::GenerationProvider; use enums::tauri::tasks::task_type::TaskType; use log::{error, info}; diff --git a/crates/artcraftx/src/commands/generate/common/router_image_request_to_artcraft_prompt.rs b/crates/artcraftx/src/commands/generate/common/router_image_request_to_artcraft_prompt.rs index 713b1705..7ab1cded 100644 --- a/crates/artcraftx/src/commands/generate/common/router_image_request_to_artcraft_prompt.rs +++ b/crates/artcraftx/src/commands/generate/common/router_image_request_to_artcraft_prompt.rs @@ -1,9 +1,9 @@ use artcraft_client::api_defs::prompts::create_prompt::CreatePromptRequest; -use artcraft_router::api::router_aspect_ratio::RouterAspectRatio; -use artcraft_router::api::router_image_model::RouterImageModel; -use artcraft_router::api::router_resolution::RouterResolution; -use artcraft_router::api::router_provider::RouterProvider; -use artcraft_router::generate::generate_image::generate_image_request_builder::GenerateImageRequestBuilder; +use router::api::router_aspect_ratio::RouterAspectRatio; +use router::api::router_image_model::RouterImageModel; +use router::api::router_resolution::RouterResolution; +use router::api::router_provider::RouterProvider; +use 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; @@ -117,7 +117,7 @@ fn router_resolution_to_enums(res: RouterResolution) -> EnumsResolution { #[cfg(test)] mod tests { use super::*; - use artcraft_router::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy; + use router::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy; fn base_builder() -> GenerateImageRequestBuilder { GenerateImageRequestBuilder { @@ -162,7 +162,7 @@ mod tests { #[test] fn edit_mode_when_images_present() { - use artcraft_router::api::image_list_ref::ImageListRef; + use router::api::image_list_ref::ImageListRef; let builder = GenerateImageRequestBuilder { image_inputs: Some(ImageListRef::Urls(vec!["https://example.com/img.jpg".to_string()])), ..base_builder() diff --git a/crates/artcraftx/src/commands/generate/common/router_video_request_to_artcraft_prompt.rs b/crates/artcraftx/src/commands/generate/common/router_video_request_to_artcraft_prompt.rs index 146a90c9..13a51c2a 100644 --- a/crates/artcraftx/src/commands/generate/common/router_video_request_to_artcraft_prompt.rs +++ b/crates/artcraftx/src/commands/generate/common/router_video_request_to_artcraft_prompt.rs @@ -1,9 +1,9 @@ use artcraft_client::api_defs::prompts::create_prompt::CreatePromptRequest; -use artcraft_router::api::router_aspect_ratio::RouterAspectRatio; -use artcraft_router::api::router_resolution::RouterResolution; -use artcraft_router::api::router_video_model::RouterVideoModel; -use artcraft_router::api::router_provider::RouterProvider; -use artcraft_router::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder; +use router::api::router_aspect_ratio::RouterAspectRatio; +use router::api::router_resolution::RouterResolution; +use router::api::router_video_model::RouterVideoModel; +use router::api::router_provider::RouterProvider; +use 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; @@ -158,7 +158,7 @@ mod tests { video_batch_count: None, generate_audio: None, request_mismatch_mitigation_strategy: - artcraft_router::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy::ErrorOut, + router::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy::ErrorOut, idempotency_token: None, } } @@ -208,7 +208,7 @@ mod tests { #[test] fn keyframe_mode_with_start_frame() { - use artcraft_router::api::image_ref::ImageRef; + use router::api::image_ref::ImageRef; let builder = GenerateVideoRequestBuilder { start_frame: Some(ImageRef::Url("https://example.com/frame.jpg".to_string())), ..base_builder() @@ -219,7 +219,7 @@ mod tests { #[test] fn keyframe_mode_with_end_frame() { - use artcraft_router::api::image_ref::ImageRef; + use router::api::image_ref::ImageRef; let builder = GenerateVideoRequestBuilder { end_frame: Some(ImageRef::Url("https://example.com/frame.jpg".to_string())), ..base_builder() @@ -230,7 +230,7 @@ mod tests { #[test] fn reference_mode_with_reference_images() { - use artcraft_router::api::image_list_ref::ImageListRef; + use router::api::image_list_ref::ImageListRef; let builder = GenerateVideoRequestBuilder { reference_images: Some(ImageListRef::Urls(vec!["https://example.com/ref.jpg".to_string()])), ..base_builder() @@ -241,8 +241,8 @@ mod tests { #[test] fn keyframe_takes_priority_over_reference() { - use artcraft_router::api::image_ref::ImageRef; - use artcraft_router::api::image_list_ref::ImageListRef; + use router::api::image_ref::ImageRef; + use 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()])), diff --git a/crates/artcraftx/src/commands/generate/generate_image/generate_image_command.rs b/crates/artcraftx/src/commands/generate/generate_image/generate_image_command.rs index 65980184..f45d5436 100644 --- a/crates/artcraftx/src/commands/generate/generate_image/generate_image_command.rs +++ b/crates/artcraftx/src/commands/generate/generate_image/generate_image_command.rs @@ -1,8 +1,7 @@ use crate::commands::enqueue::common::notify_frontend_of_errors::notify_frontend_of_errors; use crate::commands::enqueue::generate_error::{GenerateError, MissingCredentialsReason}; use crate::commands::enqueue::task_enqueue_success::TaskEnqueueSuccess; -use crate::commands::generate::generate_image::providers::artcraft::handle_artcraft; -use crate::commands::generate::generate_image::providers::artcraft_router::handle_router::handle_router; +use crate::commands::generate::generate_image::providers::router::handle_credential_router::handle_credential_router; use crate::commands::generate::generate_image::tauri_generate_image_request::{ TauriGenerateImageErrorType, TauriGenerateImageRequest, TauriGenerateImageResponse, }; @@ -11,11 +10,10 @@ use crate::commands::response::shorthand::Response; use crate::events::basic_sendable_event_trait::BasicSendableEvent; use crate::events::functional_events::credits_balance_changed_event::CreditsBalanceChangedEvent; use crate::events::generation_events::generation_enqueue_success_event::GenerationEnqueueSuccessEvent; -use crate::providers::credentials::provider_credential_loading_cache::ProviderCredentialLoadingCache; use crate::state::app_env_configs::app_env_configs::AppEnvConfigs; +use crate::state::data_dir::app_data_root::AppDataRoot; use crate::state::task_database::TaskDatabase; use crate::services::storyteller::state::storyteller_credential_manager::StorytellerCredentialManager; -use enums::common::generation_provider::GenerationProvider; use log::{error, info}; use tauri::{AppHandle, State}; @@ -23,41 +21,22 @@ use tauri::{AppHandle, State}; pub async fn generate_image_command( request: TauriGenerateImageRequest, app: AppHandle, + app_data_root: State<'_, AppDataRoot>, app_env_configs: State<'_, AppEnvConfigs>, task_database: State<'_, TaskDatabase>, storyteller_creds_manager: State<'_, StorytellerCredentialManager>, - credential_cache: State<'_, ProviderCredentialLoadingCache>, ) -> Response { info!("generate_image_command called, request: {:?}", request); - let provider = request.provider.unwrap_or(GenerationProvider::Artcraft); - - let result = match provider { - GenerationProvider::Artcraft => { - handle_artcraft( - &request, - &app_env_configs, - &storyteller_creds_manager, - ).await - } - // Midjourney uses its own legacy command path, not this one. - GenerationProvider::Midjourney => { - Err(GenerateError::NotYetImplemented( - "Midjourney should use its dedicated command".to_string(), - )) - } - // All other providers go through the router. - other => { - handle_router( - &request, - other, - &app_env_configs, - &credential_cache, - &storyteller_creds_manager, - ).await - } - }; + // Generation is credential-driven: the request names a stored credential, + // and the router dispatches to that credential's service. + let result = handle_credential_router( + &request, + &app_data_root, + &app_env_configs, + &storyteller_creds_manager, + ).await; match result { Ok(success) => handle_success_behavior(&app, &task_database, &request, success).await, @@ -130,6 +109,7 @@ async fn handle_error_behavior( GenerateError::MissingCredentials(MissingCredentialsReason::NeedsFalApiKey) => TauriGenerateImageErrorType::NeedsFalApiKey, GenerateError::MissingCredentials(MissingCredentialsReason::NeedsGrokCredentials) => TauriGenerateImageErrorType::NeedsGrokCredentials, GenerateError::MissingCredentials(_) => TauriGenerateImageErrorType::NeedsStorytellerCredentials, + GenerateError::CredentialProblem(_) => TauriGenerateImageErrorType::CredentialProblem, GenerateError::NoProviderAvailable => TauriGenerateImageErrorType::NoProviderAvailable, GenerateError::BillingIssue(_) => TauriGenerateImageErrorType::BillingIssue, _ => TauriGenerateImageErrorType::ServerError, diff --git a/crates/artcraftx/src/commands/generate/generate_image/providers/artcraft/legacy/artcraft_flux_2_lora_angles.rs b/crates/artcraftx/src/commands/generate/generate_image/providers/artcraft/legacy/artcraft_flux_2_lora_angles.rs index aa410eba..9e7ee6d0 100644 --- a/crates/artcraftx/src/commands/generate/generate_image/providers/artcraft/legacy/artcraft_flux_2_lora_angles.rs +++ b/crates/artcraftx/src/commands/generate/generate_image/providers/artcraft/legacy/artcraft_flux_2_lora_angles.rs @@ -1,14 +1,14 @@ use log::{error, info}; use artcraft_client::credentials::storyteller_credential_set::StorytellerCredentialSet; -use artcraft_router::api::router_image_model::RouterImageModel; -use artcraft_router::api::image_list_ref::ImageListRef; -use artcraft_router::api::router_provider::RouterProvider; -use artcraft_router::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy; -use artcraft_router::client::router_artcraft_client::RouterArtcraftClient; -use artcraft_router::client::router_client::RouterClient; -use artcraft_router::generate::generate_image::generate_image_request_builder::GenerateImageRequestBuilder; -use artcraft_router::generate::generate_image::image_generation_draft_or_request::ImageGenerationDraftOrRequest; +use router::api::router_image_model::RouterImageModel; +use router::api::image_list_ref::ImageListRef; +use router::api::router_provider::RouterProvider; +use router::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy; +use router::client::router_artcraft_client::RouterArtcraftClient; +use router::client::router_client::RouterClient; +use router::generate::generate_image::generate_image_request_builder::GenerateImageRequestBuilder; +use router::generate::generate_image::image_generation_draft_or_request::ImageGenerationDraftOrRequest; use enums::common::generation_provider::GenerationProvider; use enums::tauri::tasks::task_type::TaskType; diff --git a/crates/artcraftx/src/commands/generate/generate_image/providers/artcraft/legacy/artcraft_qwen_edit_2511_angles.rs b/crates/artcraftx/src/commands/generate/generate_image/providers/artcraft/legacy/artcraft_qwen_edit_2511_angles.rs index e6b43677..74cfa581 100644 --- a/crates/artcraftx/src/commands/generate/generate_image/providers/artcraft/legacy/artcraft_qwen_edit_2511_angles.rs +++ b/crates/artcraftx/src/commands/generate/generate_image/providers/artcraft/legacy/artcraft_qwen_edit_2511_angles.rs @@ -1,14 +1,14 @@ use log::{error, info}; use artcraft_client::credentials::storyteller_credential_set::StorytellerCredentialSet; -use artcraft_router::api::router_image_model::RouterImageModel; -use artcraft_router::api::image_list_ref::ImageListRef; -use artcraft_router::api::router_provider::RouterProvider; -use artcraft_router::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy; -use artcraft_router::client::router_artcraft_client::RouterArtcraftClient; -use artcraft_router::client::router_client::RouterClient; -use artcraft_router::generate::generate_image::generate_image_request_builder::GenerateImageRequestBuilder; -use artcraft_router::generate::generate_image::image_generation_draft_or_request::ImageGenerationDraftOrRequest; +use router::api::router_image_model::RouterImageModel; +use router::api::image_list_ref::ImageListRef; +use router::api::router_provider::RouterProvider; +use router::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy; +use router::client::router_artcraft_client::RouterArtcraftClient; +use router::client::router_client::RouterClient; +use router::generate::generate_image::generate_image_request_builder::GenerateImageRequestBuilder; +use router::generate::generate_image::image_generation_draft_or_request::ImageGenerationDraftOrRequest; use enums::common::generation_provider::GenerationProvider; use enums::tauri::tasks::task_type::TaskType; diff --git a/crates/artcraftx/src/commands/generate/generate_image/providers/mod.rs b/crates/artcraftx/src/commands/generate/generate_image/providers/mod.rs index c260241c..cd026817 100644 --- a/crates/artcraftx/src/commands/generate/generate_image/providers/mod.rs +++ b/crates/artcraftx/src/commands/generate/generate_image/providers/mod.rs @@ -1,2 +1,2 @@ pub mod artcraft; -pub mod artcraft_router; \ No newline at end of file +pub mod router; \ No newline at end of file diff --git a/crates/artcraftx/src/commands/generate/generate_image/providers/artcraft_router/handle_api_providers.rs b/crates/artcraftx/src/commands/generate/generate_image/providers/router/handle_api_providers.rs similarity index 87% rename from crates/artcraftx/src/commands/generate/generate_image/providers/artcraft_router/handle_api_providers.rs rename to crates/artcraftx/src/commands/generate/generate_image/providers/router/handle_api_providers.rs index aa08c4ea..ee578868 100644 --- a/crates/artcraftx/src/commands/generate/generate_image/providers/artcraft_router/handle_api_providers.rs +++ b/crates/artcraftx/src/commands/generate/generate_image/providers/router/handle_api_providers.rs @@ -1,14 +1,14 @@ use artcraft_client::endpoints::prompts::create_prompt::create_prompt; use artcraft_client::utils::api_host::ApiHost; -use artcraft_router::api::image_list_ref::ImageListRef; -use artcraft_router::api::router_provider::RouterProvider; -use artcraft_router::client::generation_mode_mismatch_strategy::GenerationModeMismatchStrategy; -use artcraft_router::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy; -use artcraft_router::client::router_client::RouterClient; -use artcraft_router::client::router_fal_client::RouterFalClient; -use artcraft_router::generate::generate_image::generate_image_request_builder::GenerateImageRequestBuilder; -use artcraft_router::generate::generate_image::generate_image_response::GenerateImageResponse; -use artcraft_router::generate::generate_image::image_generation_draft_or_request::ImageGenerationDraftOrRequest; +use router::api::image_list_ref::ImageListRef; +use router::api::router_provider::RouterProvider; +use router::client::generation_mode_mismatch_strategy::GenerationModeMismatchStrategy; +use router::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy; +use router::client::router_client::RouterClient; +use router::client::router_fal_client::RouterFalClient; +use router::generate::generate_image::generate_image_request_builder::GenerateImageRequestBuilder; +use router::generate::generate_image::generate_image_response::GenerateImageResponse; +use router::generate::generate_image::image_generation_draft_or_request::ImageGenerationDraftOrRequest; use enums::common::generation_provider::GenerationProvider; use enums::tauri::tasks::task_type::TaskType; use log::{error, info, warn}; @@ -20,8 +20,8 @@ use crate::api_adapters::models::image::tauri_image_model_to_router_model::tauri use crate::commands::enqueue::generate_error::GenerateError; use crate::commands::enqueue::task_enqueue_success::TaskEnqueueSuccess; use crate::commands::generate::common::router_image_request_to_artcraft_prompt::router_image_request_to_artcraft_prompt; -use crate::commands::generate::generate_image::providers::artcraft_router::utils::convert_enums_to_router::{convert_aspect_ratio, convert_quality, convert_resolution}; -use crate::commands::generate::generate_image::providers::artcraft_router::utils::map_media_files_to_urls::map_media_file_tokens_to_cdn_urls; +use crate::commands::generate::generate_image::providers::router::utils::convert_enums_to_router::{convert_aspect_ratio, convert_quality, convert_resolution}; +use crate::commands::generate::generate_image::providers::router::utils::map_media_files_to_urls::map_media_file_tokens_to_cdn_urls; use crate::commands::generate::generate_image::tauri_generate_image_request::TauriGenerateImageRequest; use crate::commands::generate::generate_image::tauri_image_model::TauriImageModel; use crate::state::app_env_configs::app_env_configs::AppEnvConfigs; diff --git a/crates/artcraftx/src/commands/generate/generate_image/providers/router/handle_credential_router.rs b/crates/artcraftx/src/commands/generate/generate_image/providers/router/handle_credential_router.rs new file mode 100644 index 00000000..57e014c0 --- /dev/null +++ b/crates/artcraftx/src/commands/generate/generate_image/providers/router/handle_credential_router.rs @@ -0,0 +1,243 @@ +use artcraft_client::credentials::storyteller_credential_set::StorytellerCredentialSet; +use artcraft_client::utils::api_host::ApiHost; +use enums::common::generation_provider::GenerationProvider; +use enums::tauri::tasks::task_type::TaskType; +use log::{info, warn}; +use router::api::image_list_ref::ImageListRef; +use router::api::router_provider::RouterProvider; +use router::client::generation_mode_mismatch_strategy::GenerationModeMismatchStrategy; +use router::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy; +use router::client::router_artcraft_client::RouterArtcraftClient; +use router::client::router_client::RouterClient; +use router::generate::generate_image::generate_image_request_builder::GenerateImageRequestBuilder; +use router::generate::generate_image::image_generation_draft_or_request::ImageGenerationDraftOrRequest; +use tokens::tokens::media_files::MediaFileToken; + +use crate::api_adapters::models::image::tauri_image_model_to_generation_model::tauri_image_model_to_generation_model; +use crate::api_adapters::models::image::tauri_image_model_to_router_model::tauri_image_model_to_router_model; +use crate::commands::enqueue::generate_error::{CredentialProblemReason, GenerateError}; +use crate::commands::enqueue::task_enqueue_success::TaskEnqueueSuccess; +use crate::commands::generate::generate_image::providers::router::handle_api_providers::handle_api_key_provider; +use crate::commands::generate::generate_image::providers::router::utils::convert_enums_to_router::{convert_aspect_ratio, convert_quality, convert_resolution}; +use crate::commands::generate::generate_image::tauri_generate_image_request::TauriGenerateImageRequest; +use crate::commands::generate::generate_image::utils::parse_semantic_media_files::{parse_semantic_media_files, SemanticMediaFiles}; +use crate::credentials::artcraft_api_host::maybe_artcraft_api_host_for_service; +use crate::credentials::credential::Credential; +use crate::credentials::credential_service_type::CredentialServiceType; +use crate::state::app_env_configs::app_env_configs::AppEnvConfigs; +use crate::state::data_dir::app_data_root::AppDataRoot; +use crate::services::storyteller::state::storyteller_credential_manager::StorytellerCredentialManager; + +/// Credential-driven image generation: resolve the stored credential named +/// by the request's `credential_id`, then route to that credential's service +/// via the router. The router owns upload + dispatch mechanics per provider. +pub async fn handle_credential_router( + request: &TauriGenerateImageRequest, + app_data_root: &AppDataRoot, + app_env_configs: &AppEnvConfigs, + storyteller_creds_manager: &StorytellerCredentialManager, +) -> Result { + let credential = resolve_credential(request, app_data_root)?; + + info!( + "handle_credential_router: credential={} service={}", + credential.id.as_str(), + credential.service, + ); + + match credential.service { + CredentialServiceType::Artcraft + | CredentialServiceType::ArtcraftLocal + | CredentialServiceType::ArtcraftCookies => { + handle_artcraft_credential(request, &credential).await + } + CredentialServiceType::FalApi => { + let api_key = credential.api_key().ok_or_else(|| { + credential_not_usable(&credential, "the FAL credential has no API key") + })?; + handle_api_key_provider( + request, + GenerationProvider::Fal, + &api_key.api_key, + app_env_configs, + storyteller_creds_manager, + ).await + } + other => Err(credential_not_usable( + &credential, + &format!("accounts for service {} can't generate images yet", other), + )), + } +} + +/// Require and load the credential named by the request. +fn resolve_credential( + request: &TauriGenerateImageRequest, + app_data_root: &AppDataRoot, +) -> Result { + let credential_id = request.credential_id.as_deref() + .filter(|id| !id.trim().is_empty()) + .ok_or(GenerateError::CredentialProblem( + CredentialProblemReason::NoCredentialSupplied, + ))?; + + let maybe_credential = app_data_root + .credentials_dir() + .find_credential_by_id(credential_id) + .map_err(GenerateError::from)?; + + maybe_credential.ok_or_else(|| { + GenerateError::CredentialProblem(CredentialProblemReason::CredentialNotFound { + credential_id: credential_id.to_string(), + }) + }) +} + +/// Generate via the router's Artcraft provider, authenticating with the +/// stored session cookies. Raw canvas/scene/mask bytes are uploaded to +/// ArtCraft first (with the same credential) so the router request only +/// carries media tokens. +async fn handle_artcraft_credential( + request: &TauriGenerateImageRequest, + credential: &Credential, +) -> Result { + let tauri_model = request.model.ok_or(GenerateError::no_model_specified())?; + + let router_model = tauri_image_model_to_router_model(tauri_model) + .ok_or(GenerateError::NotYetImplemented( + format!("Model {:?} is not supported via the router", tauri_model), + ))?; + + let api_host = maybe_artcraft_api_host_for_service(credential.service) + .expect("caller only routes ArtCraft services here"); + + let creds = storyteller_creds_from_credential(credential)?; + + // Upload any raw image bytes before the generate request. + let semantic_media_files = parse_semantic_media_files( + request, + &creds, + &api_host, + ).await?; + + let image_inputs = collect_image_inputs(request, &semantic_media_files); + + let router_request = GenerateImageRequestBuilder { + model: router_model, + provider: RouterProvider::Artcraft, + prompt: request.prompt.clone(), + image_inputs, + resolution: request.resolution.map(convert_resolution), + aspect_ratio: request.aspect_ratio.map(convert_aspect_ratio), + quality: request.quality.map(convert_quality), + image_batch_count: request.batch_size.map(|n| n as u16), + horizontal_angle: request.adjust_horizontal_angle, + vertical_angle: request.adjust_vertical_angle, + zoom: request.adjust_zoom, + request_mismatch_mitigation_strategy: RequestMismatchMitigationStrategy::PayMoreUpgrade, + generation_mode_mismatch_strategy: Some(GenerationModeMismatchStrategy::GenerateAnyway), + idempotency_token: None, + }; + + let client = RouterClient::Artcraft(RouterArtcraftClient::new( + api_host, + creds, + )); + + info!("Building Artcraft image generation plan: model={:?}", router_model); + + let generation_request = match router_request.build2() { + Ok(ImageGenerationDraftOrRequest::Request(generation_request)) => generation_request, + Ok(ImageGenerationDraftOrRequest::Draft(draft)) => { + warn!("Artcraft build unexpectedly produced a draft: {:?}", draft); + return Err(GenerateError::NotYetImplemented( + "Artcraft requests should not require a draft phase".to_string(), + )); + } + Err(err) => { + warn!("Could not build Artcraft router request: {:?}", err); + return Err(err.into()); + } + }; + + let response = generation_request.send_request(&client).await + .map_err(|err| { + warn!("Artcraft router image generation failed: {:?}", err); + GenerateError::from(err) + })?; + + let payload = response.get_artcraft_payload() + .ok_or(GenerateError::ResponseHadNoJobTokens)?; + + info!( + "Router image generation enqueued: inference_job_token={}, response={:?}", + payload.inference_job_token.as_str(), + response, + ); + + Ok(TaskEnqueueSuccess { + task_type: TaskType::ImageGeneration, + model: Some(tauri_image_model_to_generation_model(tauri_model)), + provider: GenerationProvider::Artcraft, + provider_job_id: Some(payload.inference_job_token.to_string()), + maybe_queue_status_url: None, + maybe_queue_response_url: None, + maybe_prompt_token: None, + }) +} + +/// Rebuild the web-session credential set from the stored cookie header. +fn storyteller_creds_from_credential( + credential: &Credential, +) -> Result { + let cookie = credential.cookies().ok_or_else(|| { + credential_not_usable(credential, "the account has no session cookies") + })?; + + StorytellerCredentialSet::parse_multi_cookie_header(&cookie.cookie_header) + .map_err(|err| { + credential_not_usable( + credential, + &format!("the stored session cookies could not be parsed ({})", err), + ) + })? + .filter(|creds| !creds.is_empty()) + .ok_or_else(|| { + credential_not_usable(credential, "the stored session cookies are empty") + }) +} + +/// Reference images for the router request: canvas first, then scene, then +/// the un-semantic reference images. (Artcraft accepts media tokens +/// directly; no URL resolution needed.) +fn collect_image_inputs( + request: &TauriGenerateImageRequest, + semantic_media_files: &SemanticMediaFiles, +) -> Option { + let mut tokens: Vec = Vec::new(); + + if let Some(canvas_token) = &semantic_media_files.canvas_image_media_token { + tokens.push(canvas_token.clone()); + } + + if let Some(scene_token) = &semantic_media_files.scene_image_media_token { + tokens.push(scene_token.clone()); + } + + if let Some(media_tokens) = &request.image_media_tokens { + tokens.extend(media_tokens.clone()); + } + + if tokens.is_empty() { + None + } else { + Some(ImageListRef::MediaFileTokens(tokens)) + } +} + +fn credential_not_usable(credential: &Credential, reason: &str) -> GenerateError { + GenerateError::CredentialProblem(CredentialProblemReason::CredentialNotUsable { + credential_id: credential.id.to_string(), + reason: reason.to_string(), + }) +} diff --git a/crates/artcraftx/src/commands/generate/generate_image/providers/artcraft_router/handle_router.rs b/crates/artcraftx/src/commands/generate/generate_image/providers/router/handle_router.rs similarity index 92% rename from crates/artcraftx/src/commands/generate/generate_image/providers/artcraft_router/handle_router.rs rename to crates/artcraftx/src/commands/generate/generate_image/providers/router/handle_router.rs index 228fcc7d..ded03096 100644 --- a/crates/artcraftx/src/commands/generate/generate_image/providers/artcraft_router/handle_router.rs +++ b/crates/artcraftx/src/commands/generate/generate_image/providers/router/handle_router.rs @@ -3,8 +3,8 @@ use log::info; use crate::commands::enqueue::generate_error::{GenerateError, MissingCredentialsReason}; use crate::commands::enqueue::task_enqueue_success::TaskEnqueueSuccess; -use crate::commands::generate::generate_image::providers::artcraft_router::handle_api_providers::handle_api_key_provider; -use crate::commands::generate::generate_image::providers::artcraft_router::handle_web_login_providers::handle_web_login_provider; +use crate::commands::generate::generate_image::providers::router::handle_api_providers::handle_api_key_provider; +use crate::commands::generate::generate_image::providers::router::handle_web_login_providers::handle_web_login_provider; use crate::commands::generate::generate_image::tauri_generate_image_request::TauriGenerateImageRequest; use crate::providers::credentials::payload::provider_credential_payload::ProviderCredentialPayload; use crate::providers::credentials::provider_credential_key::ProviderCredentialKey; diff --git a/crates/artcraftx/src/commands/generate/generate_image/providers/artcraft_router/handle_web_login_providers.rs b/crates/artcraftx/src/commands/generate/generate_image/providers/router/handle_web_login_providers.rs similarity index 100% rename from crates/artcraftx/src/commands/generate/generate_image/providers/artcraft_router/handle_web_login_providers.rs rename to crates/artcraftx/src/commands/generate/generate_image/providers/router/handle_web_login_providers.rs diff --git a/crates/artcraftx/src/commands/generate/generate_image/providers/artcraft_router/mod.rs b/crates/artcraftx/src/commands/generate/generate_image/providers/router/mod.rs similarity index 73% rename from crates/artcraftx/src/commands/generate/generate_image/providers/artcraft_router/mod.rs rename to crates/artcraftx/src/commands/generate/generate_image/providers/router/mod.rs index ea74c39d..833ea065 100644 --- a/crates/artcraftx/src/commands/generate/generate_image/providers/artcraft_router/mod.rs +++ b/crates/artcraftx/src/commands/generate/generate_image/providers/router/mod.rs @@ -1,3 +1,4 @@ +pub mod handle_credential_router; pub mod handle_router; mod handle_api_providers; mod handle_web_login_providers; diff --git a/crates/artcraftx/src/commands/generate/generate_image/providers/artcraft_router/utils/convert_enums_to_router.rs b/crates/artcraftx/src/commands/generate/generate_image/providers/router/utils/convert_enums_to_router.rs similarity index 92% rename from crates/artcraftx/src/commands/generate/generate_image/providers/artcraft_router/utils/convert_enums_to_router.rs rename to crates/artcraftx/src/commands/generate/generate_image/providers/router/utils/convert_enums_to_router.rs index 33c23040..cc278f54 100644 --- a/crates/artcraftx/src/commands/generate/generate_image/providers/artcraft_router/utils/convert_enums_to_router.rs +++ b/crates/artcraftx/src/commands/generate/generate_image/providers/router/utils/convert_enums_to_router.rs @@ -1,6 +1,6 @@ -use artcraft_router::api::router_aspect_ratio::RouterAspectRatio; -use artcraft_router::api::router_quality::RouterQuality; -use artcraft_router::api::router_resolution::RouterResolution; +use router::api::router_aspect_ratio::RouterAspectRatio; +use router::api::router_quality::RouterQuality; +use router::api::router_resolution::RouterResolution; use enums::common::generation::common_aspect_ratio::CommonAspectRatio as EnumsAspectRatio; use enums::common::generation::common_quality::CommonQuality as EnumsQuality; use enums::common::generation::common_resolution::CommonResolution as EnumsResolution; diff --git a/crates/artcraftx/src/commands/generate/generate_image/providers/artcraft_router/utils/map_media_files_to_urls.rs b/crates/artcraftx/src/commands/generate/generate_image/providers/router/utils/map_media_files_to_urls.rs similarity index 100% rename from crates/artcraftx/src/commands/generate/generate_image/providers/artcraft_router/utils/map_media_files_to_urls.rs rename to crates/artcraftx/src/commands/generate/generate_image/providers/router/utils/map_media_files_to_urls.rs diff --git a/crates/artcraftx/src/commands/generate/generate_image/providers/artcraft_router/utils/mod.rs b/crates/artcraftx/src/commands/generate/generate_image/providers/router/utils/mod.rs similarity index 100% rename from crates/artcraftx/src/commands/generate/generate_image/providers/artcraft_router/utils/mod.rs rename to crates/artcraftx/src/commands/generate/generate_image/providers/router/utils/mod.rs diff --git a/crates/artcraftx/src/commands/generate/generate_image/tauri_generate_image_request.rs b/crates/artcraftx/src/commands/generate/generate_image/tauri_generate_image_request.rs index 0bd50b68..879bc852 100644 --- a/crates/artcraftx/src/commands/generate/generate_image/tauri_generate_image_request.rs +++ b/crates/artcraftx/src/commands/generate/generate_image/tauri_generate_image_request.rs @@ -13,6 +13,11 @@ use crate::commands::response::success_response_wrapper::SerializeMarker; #[derive(Deserialize, Debug)] pub struct TauriGenerateImageRequest { + /// Stable id (`credential_{entropy}`) of the stored credential (account) + /// to generate with. Loaded from disk; generation routes to the + /// credential's service. + pub credential_id: Option, + /// The provider to use (defaults to Artcraft/Storyteller). /// Not all (provider, model) combinations are valid. pub provider: Option, @@ -122,4 +127,7 @@ pub enum TauriGenerateImageErrorType { NeedsGrokCredentials, /// Billing issue BillingIssue, + /// Problem with the selected account credential (absent, unknown, or + /// unusable). The backend also flashes a dismissable modal. + CredentialProblem, } diff --git a/crates/artcraftx/src/commands/generate/generate_video/artcraft/handle_artcraft_video_via_router.rs b/crates/artcraftx/src/commands/generate/generate_video/artcraft/handle_artcraft_video_via_router.rs index a4941c78..e9950c26 100644 --- a/crates/artcraftx/src/commands/generate/generate_video/artcraft/handle_artcraft_video_via_router.rs +++ b/crates/artcraftx/src/commands/generate/generate_video/artcraft/handle_artcraft_video_via_router.rs @@ -4,19 +4,19 @@ use crate::commands::enqueue::task_enqueue_success::TaskEnqueueSuccess; use crate::events::generation_events::common::GenerationModel; use crate::state::app_env_configs::app_env_configs::AppEnvConfigs; use artcraft_client::credentials::storyteller_credential_set::StorytellerCredentialSet; -use artcraft_router::api::audio_list_ref::AudioListRef; -use artcraft_router::api::character_list_ref::CharacterListRef; -use artcraft_router::api::router_video_model::RouterVideoModel; -use artcraft_router::api::image_list_ref::ImageListRef; -use artcraft_router::api::image_ref::ImageRef; -use artcraft_router::api::router_provider::RouterProvider; -use artcraft_router::api::video_list_ref::VideoListRef; -use artcraft_router::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy; -use artcraft_router::client::router_artcraft_client::RouterArtcraftClient; -use artcraft_router::client::router_client::RouterClient; -use artcraft_router::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder; -use artcraft_router::generate::generate_video::generate_video_response::GenerateVideoResponse; -use artcraft_router::generate::generate_video::video_generation_draft_or_request::VideoGenerationDraftOrRequest; +use router::api::audio_list_ref::AudioListRef; +use router::api::character_list_ref::CharacterListRef; +use router::api::router_video_model::RouterVideoModel; +use router::api::image_list_ref::ImageListRef; +use router::api::image_ref::ImageRef; +use router::api::router_provider::RouterProvider; +use router::api::video_list_ref::VideoListRef; +use router::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy; +use router::client::router_artcraft_client::RouterArtcraftClient; +use router::client::router_client::RouterClient; +use router::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder; +use router::generate::generate_video::generate_video_response::GenerateVideoResponse; +use router::generate::generate_video::video_generation_draft_or_request::VideoGenerationDraftOrRequest; use enums::common::generation_provider::GenerationProvider; use enums::tauri::tasks::task_type::TaskType; use log::{error, info}; diff --git a/crates/artcraftx/src/commands/generate/generate_video/request.rs b/crates/artcraftx/src/commands/generate/generate_video/request.rs index 1af0491c..5791ae63 100644 --- a/crates/artcraftx/src/commands/generate/generate_video/request.rs +++ b/crates/artcraftx/src/commands/generate/generate_video/request.rs @@ -1,5 +1,5 @@ -use artcraft_router::api::router_aspect_ratio::RouterAspectRatio; -use artcraft_router::api::router_resolution::RouterResolution; +use router::api::router_aspect_ratio::RouterAspectRatio; +use router::api::router_resolution::RouterResolution; use enums::common::generation_provider::GenerationProvider; use enums::tauri::ux::tauri_command_caller::TauriCommandCaller; use serde_derive::{Deserialize, Serialize}; diff --git a/crates/artcraftx/src/credentials/artcraft_api_host.rs b/crates/artcraftx/src/credentials/artcraft_api_host.rs new file mode 100644 index 00000000..8b19690d --- /dev/null +++ b/crates/artcraftx/src/credentials/artcraft_api_host.rs @@ -0,0 +1,21 @@ +use artcraft_client::utils::api_host::ApiHost; + +use crate::credentials::credential_service_type::CredentialServiceType; + +/// Port the local ArtCraft development server listens on. +pub const ARTCRAFT_LOCAL_DEV_PORT: u32 = 12345; + +/// The API host an ArtCraft-family credential authenticates against. +/// `None` for services that aren't ArtCraft accounts. +pub fn maybe_artcraft_api_host_for_service( + service: CredentialServiceType, +) -> Option { + match service { + CredentialServiceType::Artcraft + | CredentialServiceType::ArtcraftCookies => Some(ApiHost::Storyteller), + CredentialServiceType::ArtcraftLocal => { + Some(ApiHost::Localhost { port: ARTCRAFT_LOCAL_DEV_PORT }) + } + _ => None, + } +} diff --git a/crates/artcraftx/src/credentials/mod.rs b/crates/artcraftx/src/credentials/mod.rs index ea39b4bf..a02301b4 100644 --- a/crates/artcraftx/src/credentials/mod.rs +++ b/crates/artcraftx/src/credentials/mod.rs @@ -14,6 +14,7 @@ //! secret (cookie XOR api key), tied back to its source file path. pub mod api_key_credential; +pub mod artcraft_api_host; pub mod cookie_credential; pub mod credential; pub mod credential_file; diff --git a/crates/artcraftx/src/events/functional_events/mod.rs b/crates/artcraftx/src/events/functional_events/mod.rs index 2ef48538..0f046cf9 100644 --- a/crates/artcraftx/src/events/functional_events/mod.rs +++ b/crates/artcraftx/src/events/functional_events/mod.rs @@ -5,6 +5,7 @@ pub mod image_edit_complete_event; pub mod media_file_deleted_event; pub mod object_generation_complete_event; pub mod refresh_account_state_event; +pub mod show_credential_error_modal_event; pub mod show_provider_billing_modal_event; pub mod show_provider_login_modal_event; pub mod subscription_plan_changed_event; diff --git a/crates/artcraftx/src/events/functional_events/show_credential_error_modal_event.rs b/crates/artcraftx/src/events/functional_events/show_credential_error_modal_event.rs new file mode 100644 index 00000000..f754c4a5 --- /dev/null +++ b/crates/artcraftx/src/events/functional_events/show_credential_error_modal_event.rs @@ -0,0 +1,17 @@ +use crate::events::basic_sendable_event_trait::{BasicEventStatus, BasicSendableEvent}; +use enums::tauri::ux::tauri_event_name::TauriEventName; +use serde_derive::Serialize; + +/// Tell the frontend to show a dismissable modal explaining a credential +/// problem: the request named no credential, the credential id didn't match +/// anything on disk, or the credential can't be used for the request. +#[derive(Clone, Debug, Serialize)] +#[serde(rename_all = "snake_case")] +pub struct ShowCredentialErrorModalEvent { + pub message: String, +} + +impl BasicSendableEvent for ShowCredentialErrorModalEvent { + const FRONTEND_EVENT_NAME: TauriEventName = TauriEventName::ShowCredentialErrorModalEvent; + const EVENT_STATUS: BasicEventStatus = BasicEventStatus::Failure; +} diff --git a/crates/schema/public/enums/src/tauri/ux/tauri_event_name.rs b/crates/schema/public/enums/src/tauri/ux/tauri_event_name.rs index e4ecd986..c5fbab47 100644 --- a/crates/schema/public/enums/src/tauri/ux/tauri_event_name.rs +++ b/crates/schema/public/enums/src/tauri/ux/tauri_event_name.rs @@ -97,6 +97,12 @@ pub enum TauriEventName { #[serde(rename = "show_provider_login_modal_event")] ShowProviderLoginModalEvent, + /// Special event: + /// Show a dismissable modal explaining a credential problem (missing, + /// unknown, or unusable credential for a generation request) + #[serde(rename = "show_credential_error_modal_event")] + ShowCredentialErrorModalEvent, + /// Warning event: /// Flash a user input error message #[serde(rename = "flash_user_input_error_event")] @@ -133,6 +139,7 @@ impl TauriEventName { Self::RefreshAccountStateEvent => "refresh_account_state_event", Self::ShowProviderBillingModalEvent => "show_provider_billing_modal_event", Self::ShowProviderLoginModalEvent => "show_provider_login_modal_event", + Self::ShowCredentialErrorModalEvent => "show_credential_error_modal_event", Self::FlashUserInputErrorEvent => "flash_user_input_error_event", Self::FlashFileDownloadErrorEvent => "flash_file_download_error_event", } @@ -156,6 +163,7 @@ impl TauriEventName { "refresh_account_state_event" => Ok(Self::RefreshAccountStateEvent), "show_provider_billing_modal_event" => Ok(Self::ShowProviderBillingModalEvent), "show_provider_login_modal_event" => Ok(Self::ShowProviderLoginModalEvent), + "show_credential_error_modal_event" => Ok(Self::ShowCredentialErrorModalEvent), "flash_user_input_error_event" => Ok(Self::FlashUserInputErrorEvent), "flash_file_download_error_event" => Ok(Self::FlashFileDownloadErrorEvent), _ => Err(format!("invalid tauri_event_name: {:?}", job_status)), @@ -182,6 +190,7 @@ impl TauriEventName { Self::RefreshAccountStateEvent, Self::ShowProviderBillingModalEvent, Self::ShowProviderLoginModalEvent, + Self::ShowCredentialErrorModalEvent, Self::FlashUserInputErrorEvent, Self::FlashFileDownloadErrorEvent, ]) @@ -214,6 +223,7 @@ mod tests { assert_serialization(TauriEventName::RefreshAccountStateEvent, "refresh_account_state_event"); assert_serialization(TauriEventName::ShowProviderBillingModalEvent, "show_provider_billing_modal_event"); assert_serialization(TauriEventName::ShowProviderLoginModalEvent, "show_provider_login_modal_event"); + assert_serialization(TauriEventName::ShowCredentialErrorModalEvent, "show_credential_error_modal_event"); assert_serialization(TauriEventName::FlashUserInputErrorEvent, "flash_user_input_error_event"); assert_serialization(TauriEventName::FlashFileDownloadErrorEvent, "flash_file_download_error_event"); } @@ -258,6 +268,7 @@ mod tests { assert_eq!(TauriEventName::from_str("refresh_account_state_event").unwrap(), TauriEventName::RefreshAccountStateEvent); assert_eq!(TauriEventName::from_str("show_provider_billing_modal_event").unwrap(), TauriEventName::ShowProviderBillingModalEvent); assert_eq!(TauriEventName::from_str("show_provider_login_modal_event").unwrap(), TauriEventName::ShowProviderLoginModalEvent); + assert_eq!(TauriEventName::from_str("show_credential_error_modal_event").unwrap(), TauriEventName::ShowCredentialErrorModalEvent); assert_eq!(TauriEventName::from_str("flash_user_input_error_event").unwrap(), TauriEventName::FlashUserInputErrorEvent); assert_eq!(TauriEventName::from_str("flash_file_download_error_event").unwrap(), TauriEventName::FlashFileDownloadErrorEvent); } @@ -265,7 +276,7 @@ mod tests { #[test] fn all_variants() { let mut variants = TauriEventName::all_variants(); - assert_eq!(variants.len(), 18); + assert_eq!(variants.len(), 19); assert_eq!(variants.pop_first(), Some(TauriEventName::GenerationEnqueueSuccessEvent)); assert_eq!(variants.pop_first(), Some(TauriEventName::GenerationEnqueueFailureEvent)); assert_eq!(variants.pop_first(), Some(TauriEventName::GenerationCompleteEvent)); @@ -282,6 +293,7 @@ mod tests { assert_eq!(variants.pop_first(), Some(TauriEventName::RefreshAccountStateEvent)); assert_eq!(variants.pop_first(), Some(TauriEventName::ShowProviderBillingModalEvent)); assert_eq!(variants.pop_first(), Some(TauriEventName::ShowProviderLoginModalEvent)); + assert_eq!(variants.pop_first(), Some(TauriEventName::ShowCredentialErrorModalEvent)); assert_eq!(variants.pop_first(), Some(TauriEventName::FlashUserInputErrorEvent)); assert_eq!(variants.pop_first(), Some(TauriEventName::FlashFileDownloadErrorEvent)); assert_eq!(variants.pop_first(), None); diff --git a/frontend/apps/artcraft/app/src/components/CredentialErrorModal/CredentialErrorModal.tsx b/frontend/apps/artcraft/app/src/components/CredentialErrorModal/CredentialErrorModal.tsx new file mode 100644 index 00000000..8c4a8b80 --- /dev/null +++ b/frontend/apps/artcraft/app/src/components/CredentialErrorModal/CredentialErrorModal.tsx @@ -0,0 +1,41 @@ +import { useState } from "react"; +import { Modal } from "@storyteller/ui-modal"; +import { Button } from "@storyteller/ui-button"; +import { faUserSlash } from "@fortawesome/pro-solid-svg-icons"; +import { useShowCredentialErrorModalEvent } from "@storyteller/tauri-events"; + +/** + * Dismissable modal shown when the backend reports a credential problem with + * a generation request (no account selected, unknown credential id, or a + * credential that can't serve the request). Mounted once in MainApp; opens + * itself on `show_credential_error_modal_event`. + */ +export const CredentialErrorModal = () => { + const [message, setMessage] = useState(null); + + useShowCredentialErrorModalEvent(async (event) => { + setMessage(event.message); + }); + + return ( + setMessage(null)} + title="Account problem" + titleIcon={faUserSlash} + width={440} + showClose={true} + > +
+

{message}

+ +
+
+ ); +}; diff --git a/frontend/apps/artcraft/app/src/pages/MainApp.tsx b/frontend/apps/artcraft/app/src/pages/MainApp.tsx index 88194dc7..8085630b 100644 --- a/frontend/apps/artcraft/app/src/pages/MainApp.tsx +++ b/frontend/apps/artcraft/app/src/pages/MainApp.tsx @@ -35,6 +35,7 @@ import { useStoryboardPageEnabled } from "@storyteller/ui-settings-modal"; import { useActiveJobs } from "~/hooks/useActiveJobs"; import { useBackgroundLoadingMedia } from "~/hooks/useBackgroundLoadingMedia"; +import { CredentialErrorModal } from "~/components/CredentialErrorModal/CredentialErrorModal"; import { useTabStore } from "./Stores/TabState"; import { useTextToImageStore } from "./PageImage/TextToImageStore"; @@ -124,6 +125,7 @@ export const MainApp = () => { + {currentReminderModalProps && ( { const textToImageModelList = useTextToImagePageModelList(); const startBatch = useTextToImageStore((s) => s.startBatch); + const selectedAccountId = useAccountSelectorStore((s) => s.selectedAccountId); const selectedImageModel: ImageModel | undefined = useSelectedImageModel(PAGE_ID); @@ -66,6 +68,7 @@ const TextToImage = ({ imageMediaId, imageUrl }: TextToImageProps) => { url={imageUrl ?? undefined} credits={imageCredits} accountSelector={} + credentialId={selectedAccountId} modelSelector={ { @@ -385,6 +390,10 @@ export const PromptBoxImage = ({ frontend_subscriber_id: subscriberId, }; + if (!!credentialId) { + request.credential_id = credentialId; + } + if (!!selectedProvider) { request.provider = selectedProvider; } diff --git a/frontend/libs/tauri-api/src/lib/generate/GenerateImage.ts b/frontend/libs/tauri-api/src/lib/generate/GenerateImage.ts index 5ce3dbee..22ea77da 100644 --- a/frontend/libs/tauri-api/src/lib/generate/GenerateImage.ts +++ b/frontend/libs/tauri-api/src/lib/generate/GenerateImage.ts @@ -9,6 +9,11 @@ import { import { GenerationProvider } from "@storyteller/api-enums"; export interface GenerateImageRequest { + // Stable id (`credential_{entropy}`) of the stored credential (account) + // to generate with. The backend loads it from disk and routes to that + // credential's service. + credential_id?: string; + // The provider to use (defaults to Artcraft/Storyteller). provider?: GenerationProvider; @@ -61,6 +66,7 @@ export interface GenerateImageRequest { } interface RawGenerateImageRequest { + credential_id?: string; provider?: GenerationProvider; model?: string; prompt?: string; @@ -92,6 +98,9 @@ export enum GenerateImageErrorType { NeedsStorytellerCredentials = "needs_storyteller_credentials", NeedsGrokCredentials = "needs_grok_credentials", BillingIssue = "billing_issue", + // Problem with the selected account credential; the backend also flashes + // a dismissable modal. + CredentialProblem = "credential_problem", } export interface GenerateImageError extends CommandResult { @@ -130,6 +139,7 @@ export const GenerateImage = async ( model: modelName, }; + if (!!request.credential_id) mutableRequest.credential_id = request.credential_id; if (!!request.provider) mutableRequest.provider = request.provider; if (!!request.prompt) mutableRequest.prompt = request.prompt; if (!!request.aspect_ratio) mutableRequest.aspect_ratio = request.aspect_ratio; diff --git a/frontend/libs/tauri-events/src/index.ts b/frontend/libs/tauri-events/src/index.ts index 1dfd3d33..33de1379 100644 --- a/frontend/libs/tauri-events/src/index.ts +++ b/frontend/libs/tauri-events/src/index.ts @@ -5,6 +5,7 @@ export * from "./lib/events/functional/MediaFileDeletedEvent"; export * from "./lib/events/functional/ObjectGenerationCompleteEvent"; export * from "./lib/events/functional/RefreshAccountStateEvent"; export * from "./lib/events/functional/ShowProviderBillingModalEvent"; +export * from "./lib/events/functional/ShowCredentialErrorModalEvent"; export * from "./lib/events/functional/ShowProviderLoginModalEvent"; export * from "./lib/events/functional/SubscriptionPlanChangedEvent"; export * from "./lib/events/functional/TextToImageGenerationCompleteEvent"; diff --git a/frontend/libs/tauri-events/src/lib/events/functional/ShowCredentialErrorModalEvent.ts b/frontend/libs/tauri-events/src/lib/events/functional/ShowCredentialErrorModalEvent.ts new file mode 100644 index 00000000..40530cdc --- /dev/null +++ b/frontend/libs/tauri-events/src/lib/events/functional/ShowCredentialErrorModalEvent.ts @@ -0,0 +1,34 @@ +import { listen, UnlistenFn } from '@tauri-apps/api/event'; +import { BasicEventWrapper } from '../../common/BasicEventWrapper'; +import { useEffect } from 'react'; + +const EVENT_NAME : string = 'show_credential_error_modal_event'; + +export interface ShowCredentialErrorModalEvent { + message: string, +} + +export const useShowCredentialErrorModalEvent = (asyncCallback: (event: ShowCredentialErrorModalEvent) => Promise) => { + useEffect(() => { + let isUnmounted = false; + let unlisten: Promise; + + const setup = async () => { + unlisten = listen>(EVENT_NAME, async (wrappedEvent) => { + await asyncCallback(wrappedEvent.payload.data); + }); + + if (isUnmounted) { + unlisten.then(f => f()); // Unsubscribe if unmounted early. + } + }; + + setup(); + + return () => { + isUnmounted = true; + unlisten.then(f => f()); + }; + + }, []); +}