You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* feat(api): configurable entity_types (global + per-KB) via the config API
entity_types (the entity-extraction vocabulary) is now surfaced through the
config read/write API, layering global.yaml -> KB config.yaml like the other
scalars: a KB list overrides the global list wholesale, an explicit null
inherits, and unset falls back to DEFAULT_ENTITY_TYPES. The compiler already
consumed config["entity_types"] via resolve_entity_types; this just exposes it.
- GLOBAL_SCALAR_KEYS gains "entity_types" (layering + per-key `sources` tracking;
the value-not-None-wins rule is type-agnostic, so it works for a list).
- _KbConfigWritable / GlobalConfigValues / KbConfigResponse / GlobalConfigResponse
carry entity_types; read_kb_config/read_global_config report the cleaned
EFFECTIVE list (resolve_entity_types) plus the raw global value for the badge.
- PATCH /api/v1/kb/config and PATCH /api/v1/config accept entity_types.
Tests: KB override (cleaned + source 'kb') + null revert, global patch, global
inheritance; updated the global-defaults shape assertion. Frontend UI follows.
Claude-Session: https://claude.ai/code/session_01XMxbhmAkxxVV8CFWCZDBaG
* feat(web): entity-types config UI — chips editor (global default + per-KB override)
- EntityTypesEditor: shared controlled chips editor (Enter/comma to add, x to
remove; "other" is a fixed always-included chip; IME-safe composition).
- KbSettingsSheet: an EntityTypesRow with the same inherit/override Switch as the
scalar rows — turning override on seeds+persists the KB's own list, off reverts
via null; inherited state shows the global/default list as a badge. Each chip
change persists and adopts the server-cleaned response.
- Settings (general tab): a global entity-types chips editor, order-sensitive
diff into the save patch (joins the existing dirty/SaveBar flow).
- "changes affect future recompiles only" note on both surfaces.
New keys in common/kbSettings/settings (zh + en, identical sets). Build green
(i18n guard OK). Backend was committed in 92f8f41.
Claude-Session: https://claude.ai/code/session_01XMxbhmAkxxVV8CFWCZDBaG
* fix(entity-types): address xhigh review — DEFAULT_CONFIG parity, empty-list inherit, silent reads, set-diff
- config: define DEFAULT_ENTITY_TYPES before DEFAULT_CONFIG and add
`entity_types` to DEFAULT_CONFIG so the key layers like every other
GLOBAL_SCALAR_KEY and always appears in the effective config (#1).
- config: resolve_effective_config treats an empty entity_types list the
same as null → inherit, so a KB that cleared its override doesn't pin an
empty vocabulary (#2).
- config: resolve_entity_types(config, *, warn=True); config-read paths pass
warn=False so a plain GET doesn't spam coercion warnings (#4).
- api_config: both read paths call resolve_entity_types(..., warn=False).
- KbSettingsSheet: inherited badge shows the effective list, not
`globalValue ?? effective`; drop the now-unused globalValue prop (#3).
- Settings: global entity_types diff is order-insensitive — the vocabulary
is a set, so re-adding a removed type is not a change (#6).
Backend pytest 1240 passed; ruff/format/mypy clean; frontend build green.
Claude-Session: https://claude.ai/code/session_01XMxbhmAkxxVV8CFWCZDBaG
Copy file name to clipboardExpand all lines: frontend/src/locales/en/settings.json
+2Lines changed: 2 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -21,6 +21,8 @@
21
21
},
22
22
"general": {
23
23
"langDesc": "The output language written into the compile prompt, e.g. en / 中文 / 日本語",
24
+
"entityTypesDesc": "The vocabulary used to classify entities extracted at compile time; each KB can inherit or override it in its own settings.",
25
+
"entityTypesNote": "Changes apply to future recompiles only; existing entity pages keep their current type.",
24
26
"kbRootLabel": "Knowledge base root",
25
27
"kbRootDesc": "Default location for new knowledge bases (<root>/<name>); leave empty to restore the built-in default. Individual KBs can set a custom path at creation.",
0 commit comments