限制联合图片上下文总量

将页面参考图与独立素材的单次请求总数限制为128张
This commit is contained in:
2026-09-05 13:30:03 +08:00
parent b772ec3efb
commit 42f1109b90
2 changed files with 8 additions and 5 deletions
@@ -25,7 +25,7 @@ use std::path::Path;
use ts_rs::TS;
const MAX_REFERENCES: usize = 4;
const MAX_SPRITE_ASSETS: usize = 128;
const MAX_CONTEXT_IMAGES: usize = 128;
const MAX_RECOGNITION_TREE_NODES: usize = 512;
const MAX_RECOGNITION_TREE_DEPTH: usize = 32;
const LEGACY_RECOGNITION_SYSTEM_PROMPT: &str = r#"
@@ -628,10 +628,13 @@ pub(crate) async fn recognition_and_binding_impl_with_provider(
if state.ui_design_images.len() > MAX_REFERENCES {
return Err("界面图最多 4 张".to_string());
}
if state.sprite_assets.len() > MAX_SPRITE_ASSETS {
let context_image_count = state
.ui_design_images
.len()
.saturating_add(state.sprite_assets.len());
if context_image_count > MAX_CONTEXT_IMAGES {
return Err(format!(
"独立素材最多 {MAX_SPRITE_ASSETS} ,当前为 {} ",
state.sprite_assets.len()
"联合请求图片总数最多 {MAX_CONTEXT_IMAGES} ,当前为 {context_image_count} "
));
}
let mut context_ids = state.ui_design_images.keys().cloned().collect::<Vec<_>>();
@@ -53,7 +53,7 @@ ui-workflow.completed
`recognize` 是显式的重新计算动作,不做幂等短路:用户或 Runtime 再次点击/调用时,始终重新执行一次识别+绑定请求,并用新生成的 UI 树替换旧树、写入新的 UI State revision。它不会复用上一次 LLM 结果,也不会自动替用户重新执行 `finalize`;如果页面已经有 `application-ready`/`completed` 标记,重新识别后应重新检查状态并按需再次 finalize,使应用标记与最新 State revision 对齐。该行为是有意保留的 demo/workbench 语义,避免“重新点击”被悄悄解释成恢复旧结果。
联合请求一次携带全部页面参考图和已登记独立素材;页面参考图最多 4 张,独立素材最多 128 。超过上限时在发起 Provider 请求前直接失败,不会退回旧的素材 batching 路径。
联合请求一次携带全部页面参考图和已登记独立素材;页面参考图最多 4 张,图片上下文总量(页面参考图 + 独立素材最多 128 张,因此页面图占满 4 张时最多再带 124 个独立素材。超过总量上限时在发起 Provider 请求前直接失败,不会退回旧的素材 batching 路径。
`workflow_stage_rank` 不是前端内存状态,也不是 UI 编辑器的步骤索引。它是 Rust workflow 模块里的内部比较函数:读取 UI JSON manifest 资产上持久化的 `source.generationKind`(例如 `ui-workflow.reference-ready``ui-workflow.binding-ready`),把阶段映射为数字 rank,用于 `update_page_manifest_stage` 的单调推进保护,避免较早阶段覆盖较晚阶段。真正的阶段值在项目 manifest 中持久化,并随项目 revision 更新;历史 `structure-ready`/`merge-ready` 是否迁移或继续认可属于持久化兼容决策,不由前端会话状态解决。