Merge pull request '修复冲突错误' (#26) from master into release
Reviewed-on: #26
This commit was merged in pull request #26.
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -1154,20 +1154,17 @@ pub(crate) async fn compile_puzzle_draft_with_initial_cover(
|
||||
&target_level.picture_description,
|
||||
&draft.summary,
|
||||
);
|
||||
let image_level_name = if target_level.level_name.trim().is_empty() {
|
||||
build_fallback_puzzle_first_level_name(&target_level.picture_description)
|
||||
} else {
|
||||
target_level.level_name.clone()
|
||||
};
|
||||
// 中文注释:首图 prompt 只依赖画面描述,关卡名分支可以和生图分支并行;OSS 临时路径使用已有名或确定性兜底名。
|
||||
let level_name_future =
|
||||
generate_puzzle_first_level_name(state, &target_level.picture_description);
|
||||
// 点击生成草稿时一次性完成首图生成与正式图选定,前端只展示进度,不再承担业务编排。
|
||||
let generated_naming =
|
||||
generate_puzzle_first_level_name(state, &target_level.picture_description).await;
|
||||
target_level.level_name = generated_naming.level_name.clone();
|
||||
target_level.ui_background_prompt = generated_naming.ui_background_prompt.clone();
|
||||
let mut generated_metadata = generated_naming;
|
||||
// 点击生成草稿时一次性完成首图生成、UI 背景生成与正式图选定,前端只展示进度,不再承担业务编排。
|
||||
let candidates_future = generate_puzzle_image_candidates(
|
||||
state,
|
||||
owner_user_id.as_str(),
|
||||
&compiled_session.session_id,
|
||||
&image_level_name,
|
||||
&target_level.level_name,
|
||||
&image_prompt,
|
||||
reference_image_src,
|
||||
true,
|
||||
@@ -1175,33 +1172,26 @@ pub(crate) async fn compile_puzzle_draft_with_initial_cover(
|
||||
1,
|
||||
target_level.candidates.len(),
|
||||
);
|
||||
let (generated_naming, candidates_result) = tokio::join!(level_name_future, candidates_future);
|
||||
target_level.level_name = generated_naming.level_name.clone();
|
||||
target_level.ui_background_prompt = generated_naming.ui_background_prompt.clone();
|
||||
let mut generated_metadata = generated_naming;
|
||||
let candidates = candidates_result?;
|
||||
let selected_candidate_id = candidates
|
||||
.iter()
|
||||
.find(|candidate| candidate.record.selected)
|
||||
.or_else(|| candidates.first())
|
||||
.map(|candidate| candidate.record.candidate_id.clone())
|
||||
.ok_or_else(|| {
|
||||
AppError::from_status(StatusCode::BAD_GATEWAY).with_details(json!({
|
||||
"provider": PUZZLE_AGENT_API_BASE_PROVIDER,
|
||||
"message": "拼图候选图生成结果为空",
|
||||
}))
|
||||
})?;
|
||||
if let Some(refined_naming) = generate_puzzle_first_level_name_from_image(
|
||||
let ui_background_future = generate_puzzle_initial_ui_background_required(
|
||||
state,
|
||||
owner_user_id.as_str(),
|
||||
compiled_session.session_id.as_str(),
|
||||
&draft,
|
||||
&target_level,
|
||||
);
|
||||
// 中文注释:命名稳定后并行发起首关图与 UI 背景,避免两次外部生图串行等待。
|
||||
let (candidates_result, ui_background_result) =
|
||||
tokio::join!(candidates_future, ui_background_future);
|
||||
let mut candidates = candidates_result?;
|
||||
if let Some(first_candidate) = candidates.first()
|
||||
&& let Some(refined_naming) = generate_puzzle_first_level_name_from_image(
|
||||
state,
|
||||
target_level.picture_description.as_str(),
|
||||
&candidates[0].downloaded_image,
|
||||
&first_candidate.downloaded_image,
|
||||
)
|
||||
.await
|
||||
{
|
||||
target_level.level_name = refined_naming.level_name;
|
||||
if refined_naming.ui_background_prompt.is_some() {
|
||||
target_level.ui_background_prompt = refined_naming.ui_background_prompt;
|
||||
}
|
||||
if refined_naming.work_description.is_some() {
|
||||
generated_metadata.work_description = refined_naming.work_description;
|
||||
}
|
||||
@@ -1214,15 +1204,22 @@ pub(crate) async fn compile_puzzle_draft_with_initial_cover(
|
||||
let generated_level_name = target_level.level_name.clone();
|
||||
let mut updated_levels =
|
||||
build_puzzle_levels_with_primary_update(&draft, &target_level, reference_image_src);
|
||||
for candidate in &mut candidates {
|
||||
candidate.record.prompt = image_prompt.clone();
|
||||
}
|
||||
let selected_candidate_id = candidates
|
||||
.iter()
|
||||
.find(|candidate| candidate.record.selected)
|
||||
.or_else(|| candidates.first())
|
||||
.map(|candidate| candidate.record.candidate_id.clone())
|
||||
.ok_or_else(|| {
|
||||
AppError::from_status(StatusCode::BAD_GATEWAY).with_details(json!({
|
||||
"provider": PUZZLE_AGENT_API_BASE_PROVIDER,
|
||||
"message": "拼图候选图生成结果为空",
|
||||
}))
|
||||
})?;
|
||||
// 中文注释:拼图草稿音频生成临时关闭,首版生成只补首图与 UI 背景。
|
||||
let (ui_prompt, ui_background) = generate_puzzle_initial_ui_background_required(
|
||||
state,
|
||||
owner_user_id.as_str(),
|
||||
compiled_session.session_id.as_str(),
|
||||
&draft,
|
||||
&target_level,
|
||||
)
|
||||
.await?;
|
||||
let (ui_prompt, ui_background) = ui_background_result?;
|
||||
attach_puzzle_level_ui_background(
|
||||
&mut updated_levels,
|
||||
target_level.level_id.as_str(),
|
||||
@@ -1443,11 +1440,6 @@ pub(crate) async fn compile_puzzle_draft_with_uploaded_cover(
|
||||
&target_level.picture_description,
|
||||
&draft.summary,
|
||||
);
|
||||
let image_level_name = if target_level.level_name.trim().is_empty() {
|
||||
build_fallback_puzzle_first_level_name(&target_level.picture_description)
|
||||
} else {
|
||||
target_level.level_name.clone()
|
||||
};
|
||||
// 中文注释:关闭 AI 重绘时首关图不请求 VectorEngine;上传图直接成为首关正式图候选。
|
||||
let candidate_id = format!(
|
||||
"{}-candidate-{}",
|
||||
@@ -1466,21 +1458,8 @@ pub(crate) async fn compile_puzzle_draft_with_uploaded_cover(
|
||||
target_level.picture_description.as_str(),
|
||||
&uploaded_downloaded_image,
|
||||
);
|
||||
let persist_upload_future = persist_puzzle_generated_asset(
|
||||
state,
|
||||
owner_user_id.as_str(),
|
||||
&compiled_session.session_id,
|
||||
image_level_name.as_str(),
|
||||
candidate_id.as_str(),
|
||||
"uploaded-direct",
|
||||
uploaded_downloaded_image.clone(),
|
||||
current_utc_micros(),
|
||||
);
|
||||
let (mut generated_naming, refined_naming, persisted_upload_result) = tokio::join!(
|
||||
level_name_future,
|
||||
image_level_name_future,
|
||||
persist_upload_future
|
||||
);
|
||||
let (mut generated_naming, refined_naming) =
|
||||
tokio::join!(level_name_future, image_level_name_future);
|
||||
if let Some(refined_naming) = refined_naming {
|
||||
generated_naming.level_name = refined_naming.level_name;
|
||||
if refined_naming.ui_background_prompt.is_some() {
|
||||
@@ -1499,18 +1478,30 @@ pub(crate) async fn compile_puzzle_draft_with_uploaded_cover(
|
||||
generated_metadata.level_name = target_level.level_name.clone();
|
||||
generated_metadata.ui_background_prompt = target_level.ui_background_prompt.clone();
|
||||
let generated_level_name = target_level.level_name.clone();
|
||||
let persisted_upload = persisted_upload_result?;
|
||||
let mut updated_levels =
|
||||
build_puzzle_levels_with_primary_update(&draft, &target_level, reference_image_src);
|
||||
// 中文注释:直用上传图时同样只补 UI 背景;音频生成入口临时关闭。
|
||||
let (ui_prompt, ui_background) = generate_puzzle_initial_ui_background_required(
|
||||
let persist_upload_future = persist_puzzle_generated_asset(
|
||||
state,
|
||||
owner_user_id.as_str(),
|
||||
&compiled_session.session_id,
|
||||
target_level.level_name.as_str(),
|
||||
candidate_id.as_str(),
|
||||
"uploaded-direct",
|
||||
uploaded_downloaded_image.clone(),
|
||||
current_utc_micros(),
|
||||
);
|
||||
let ui_background_future = generate_puzzle_initial_ui_background_required(
|
||||
state,
|
||||
owner_user_id.as_str(),
|
||||
compiled_session.session_id.as_str(),
|
||||
&draft,
|
||||
&target_level,
|
||||
)
|
||||
.await?;
|
||||
);
|
||||
// 中文注释:直用上传图时并行完成上传图持久化与 UI 背景生成;音频生成入口临时关闭。
|
||||
let (persisted_upload_result, ui_background_result) =
|
||||
tokio::join!(persist_upload_future, ui_background_future);
|
||||
let persisted_upload = persisted_upload_result?;
|
||||
let (ui_prompt, ui_background) = ui_background_result?;
|
||||
attach_puzzle_level_ui_background(
|
||||
&mut updated_levels,
|
||||
target_level.level_id.as_str(),
|
||||
|
||||
@@ -664,9 +664,9 @@ pub async fn execute_puzzle_agent_action(
|
||||
"compile_puzzle_draft",
|
||||
"首关拼图草稿",
|
||||
if ai_redraw {
|
||||
"已编译首关草稿、生成首关画面并写入正式草稿。"
|
||||
"已编译首关草稿、并行生成首关画面和 UI 背景并写入正式草稿。"
|
||||
} else {
|
||||
"已编译首关草稿,并直接应用上传图片为第一关图片。"
|
||||
"已编译首关草稿,并直接应用上传图片、生成 UI 背景为第一关图片。"
|
||||
},
|
||||
session,
|
||||
)
|
||||
|
||||
@@ -338,7 +338,7 @@ pub(super) fn map_puzzle_work_summary_response(
|
||||
.saturating_sub(item.point_incentive_claimed_points),
|
||||
publish_ready: item.publish_ready,
|
||||
generation_status,
|
||||
levels: Vec::new(),
|
||||
levels: item.levels.iter().map(|x|map_puzzle_draft_level_response(x.clone())).collect(),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user