47 lines
1.3 KiB
Markdown
47 lines
1.3 KiB
Markdown
# search-engine-widget(子模块规范)
|
||
|
||
## 子模块名称
|
||
|
||
search-engine-widget(WIDGET 搜索器:Beam Search)
|
||
|
||
## 目标描述
|
||
|
||
在 WIDGET 场景实现确定性 Beam Search:
|
||
|
||
- 每一行扩展时只保留 TopK partial layouts(beam)
|
||
- 每步扩展断点数 M 受控(更强裁剪)
|
||
- 支持 width unknown / approx mode
|
||
- 最终选择 pos==N 的最优解;无解走 `overflow-fallback`
|
||
|
||
## 输入/输出定义
|
||
|
||
### 输入
|
||
|
||
- `tokens: Token[]`
|
||
- `breakpoints: Breakpoint[]`
|
||
- `availableWidth: number`(可为常量 profile)
|
||
- `maxLines: number`
|
||
- `context: 'WIDGET'`
|
||
- `measure: { widthMode: 'MEASURE' | 'APPROX' }`
|
||
- `config: { beamK: number; expandM: number }`
|
||
|
||
### 输出
|
||
|
||
- `bestLayout: { breaks: number[]; lines: string[]; wrappedText: string; meta?: { breaks: number[]; scoreTopTerms?: ... } }`
|
||
|
||
## 验收标准(可验证)
|
||
|
||
- **确定性**:beam 扩展、剪枝、排序规则固定;同输入同输出
|
||
- **性能约束生效**:
|
||
- beamK 默认 5
|
||
- 每步扩展 M 默认不超过 12
|
||
- **宽度不可用降级一致**:
|
||
- 进入 approx mode 时 meta 标记 `reason=WIDTH_UNKNOWN`
|
||
- 搜索仍可运行并输出可解释结果
|
||
|
||
## 依赖与关联
|
||
|
||
- **依赖**:`core-contract`、`width-measurement`、`breakpoint-candidates`、`scoring-tiebreak`、`overflow-fallback`
|
||
- **被依赖**:`integration`、`golden-tests`
|
||
|