diff --git a/apps/ai-game-creator-shell/src-tauri/src/ui_editor/commands/recognition.rs b/apps/ai-game-creator-shell/src-tauri/src/ui_editor/commands/recognition.rs index ec02aa150..15aa62bdb 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/ui_editor/commands/recognition.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/ui_editor/commands/recognition.rs @@ -12,7 +12,7 @@ use crate::ui_editor::layout::node::{Node as LayoutNode, NodeMetadata, NodeSourc use crate::ui_editor::layout::transform::Transform; use crate::ui_editor::resource::ui_design_image::UIDesignImage; use crate::ui_editor::state::{State, UITree}; -use crate::ui_editor::utils::{random_node_id, NodeId, UIDesignImageId}; +use crate::ui_editor::utils::{NodeId, UIDesignImageId, random_node_id}; use nalgebra::{Point2, Vector2}; use platform_llm::{ LlmFunctionTool, LlmMessage, LlmMessageContentPart, LlmRunRequest, LlmToolChoice, @@ -463,19 +463,23 @@ mod tests { let oversized = (0..=MAX_RECOGNITION_TREE_NODES) .map(|_| serde_json::json!({"children": []})) .collect::>(); - assert!(validate_recognition_response_shape(&serde_json::json!({ - "trees": [{"root": {"children": oversized}}] - })) - .is_err()); + assert!( + validate_recognition_response_shape(&serde_json::json!({ + "trees": [{"root": {"children": oversized}}] + })) + .is_err() + ); let mut nested = serde_json::json!({"children": []}); for _ in 0..MAX_RECOGNITION_TREE_DEPTH { nested = serde_json::json!({"children": [nested]}); } - assert!(validate_recognition_response_shape(&serde_json::json!({ - "trees": [{"root": {"children": [nested]}}] - })) - .is_err()); + assert!( + validate_recognition_response_shape(&serde_json::json!({ + "trees": [{"root": {"children": [nested]}}] + })) + .is_err() + ); } #[test] @@ -595,11 +599,13 @@ mod tests { root: test_node(), }; - assert!(validate_tree_image_ids( - &[tree(page.clone()), tree(slave.clone())], - &[page.clone(), slave.clone()], - ) - .is_ok()); + assert!( + validate_tree_image_ids( + &[tree(page.clone()), tree(slave.clone())], + &[page.clone(), slave.clone()], + ) + .is_ok() + ); assert!( validate_tree_image_ids(&[tree(page.clone())], &[page.clone(), slave.clone()]).is_err() ); @@ -838,11 +844,16 @@ pub(crate) async fn recognize_ui_impl_with_provider( Confidence::Confident => StageStatus::NoProblem, Confidence::UnSure(reason) => StageStatus::NeedReview(reason), }; + let root_name = if recognition_root.name.trim().is_empty() { + "页面根节点".to_string() + } else { + recognition_root.name + }; let root = LayoutNode { id: random_node_id(), layout: ControlLayout::with_transform(Transform::stretch()), metadata: NodeMetadata { - name: recognition_root.name, + name: root_name, description: recognition_root.description, layout_status: root_layout_status, component_status: StageStatus::NoProblem,