refactor: audit-tail 정리 — FusionPolicy inline + dual-YAML 통일 + NLI required
ponytail-audit 의 작은 over-engineering 잔여 3건 (output/동작 불변):
1. FusionPolicy 1-arm enum 제거 — kebab-search 내부 전용(외부 importer 0)이던
`enum FusionPolicy { Rrf { k_rrf } }` 를 `HybridRetriever.k_rrf: u32` 로 inline.
parse_fusion 은 u32 반환. RRF 수식 `Σ 1/(k_rrf+rank)` byte-identical.
2. dual YAML 통일 — serde_yaml(0.9) 를 maintained fork serde_yaml_ng(0.10) 로 일원화.
k8s manifest chunker + eval golden loader 2 site 마이그레이션(API drop-in),
workspace dep 에서 serde_yaml 제거. parse 결과 불변.
3. NliVerifier::hypothesis_token_count 의 `Ok(0)` default 제거 → required.
prod OnnxNliVerifier 가 이미 override 라 동작 불변, MockNliVerifier 에 explicit 추가.
문서 동기화: search/eval/parse component README + ARCHITECTURE 의 FusionPolicy/
serde_yaml 참조를 현 상태로 갱신. net −37줄. 적대적 검증 2렌즈(output-identity +
completeness-build) 통과, 영향 crate 테스트 + clippy -D warnings 클린.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Mc6W1fgsrbFKTsqA6P8La
This commit is contained in:
@@ -30,16 +30,12 @@ classDiagram
|
||||
}
|
||||
class HybridRetriever {
|
||||
+new(cfg, lexical, vector) Self
|
||||
+with_policy(lex, vec, FusionPolicy, k)
|
||||
+with_policy(lex, vec, k_rrf, default_k)
|
||||
-lexical: Arc~dyn Retriever~
|
||||
-vector: Arc~dyn Retriever~
|
||||
-fusion: FusionPolicy
|
||||
-k_rrf: u32
|
||||
-default_k: usize
|
||||
}
|
||||
class FusionPolicy {
|
||||
<<enum>>
|
||||
Rrf{k_rrf}
|
||||
}
|
||||
class SearchMode {
|
||||
<<enum>>
|
||||
Lexical
|
||||
@@ -51,7 +47,6 @@ classDiagram
|
||||
Retriever <|.. HybridRetriever
|
||||
HybridRetriever --> LexicalRetriever
|
||||
HybridRetriever --> VectorRetriever
|
||||
HybridRetriever ..> FusionPolicy
|
||||
HybridRetriever ..> SearchMode : dispatch
|
||||
```
|
||||
|
||||
@@ -95,7 +90,7 @@ flowchart LR
|
||||
|
||||
**HybridRetriever** (`kebab-search::hybrid`):
|
||||
- `HybridRetriever::new(&Config, Arc<dyn Retriever> lex, Arc<dyn Retriever> vec) -> Self` — `config.search.hybrid_fusion` (`"rrf"`) + `config.search.rrf_k` 읽음. 두 retriever 의 `index_version` 가 다르면 `tracing::warn`.
|
||||
- `FusionPolicy::Rrf { k_rrf }` — default 60. `with_policy` 헬퍼로 explicit 지정 가능.
|
||||
- `k_rrf: u32` — default 60. `with_policy` 헬퍼로 explicit 지정 가능.
|
||||
- 상수: `DEFAULT_K = 10` (query.k == 0 fallback), `DEFAULT_K_RRF = 60`, `HYBRID_FANOUT_MULTIPLIER = 2`.
|
||||
- merge rule: 양측 등장 chunk 의 `snippet` / `citation` / `heading_path` 는 lexical 측에서 가져옴 (FTS5 highlight 가 vector 의 truncated text 보다 user-relevant).
|
||||
|
||||
|
||||
Reference in New Issue
Block a user