Files
87d9525176 feat(resolver): opt-in semantic nearest-neighbour fallback (#34) (#140)
Closes #114, #115, #116, #117.

- Deterministic, offline, dependency-free char-ngram embedding backend + config
  section (semantic.enabled default false, min_similarity, backend).
- Committed embedding index (data/kb_embedding_index.json) mapping vectors to real
  KB entry ids only; built by scripts/build_embedding_index.py, loaded once/cached.
- Resolver falls back to the nearest entry on a deterministic miss when enabled,
  accepting >= min_similarity and emitting SC0020; NSFW-gated neighbours are
  skipped. Disabled => byte-identical to before.
- Guarantee tests: deterministic lookup always wins (exact hit never queries the
  index), fallback emits only KB tags (no invention), identical input => identical
  output. SC0020 registered.

Co-authored-by: kunail0804 <kunail0804@gmail.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13 18:23:38 +02:00

37 lines
724 B
JSON

{
"schema": "1.0",
"analyzer": {
"backend": "ollama",
"model": "llama3",
"temperature": 0.0,
"max_retries": 3,
"timeout": 60
},
"resolver": {
"knowledge_base": "knowledge_base/",
"strict_mode": true,
"allow_aliases": true,
"expansion_enabled": true,
"max_expansion_depth": 8,
"include_nsfw": false,
"knowledge_base_version": null
},
"validator": {
"allow_unknown_fields": false
},
"prompt_builder": {
"target": "easy_illustrious",
"separator": ",",
"remove_duplicate_tags": true
},
"semantic": {
"enabled": false,
"min_similarity": 0.5,
"backend": "char_ngram"
},
"debug": {
"enabled": false,
"level": "basic"
}
}