Skip to content

fix(config): validate unknown fields in LogConfig and warn in ParserConfig#856

Merged
qin-ctx merged 1 commit intovolcengine:mainfrom
r266-tech:fix/config-validation-unknown-fields
Mar 22, 2026
Merged

fix(config): validate unknown fields in LogConfig and warn in ParserConfig#856
qin-ctx merged 1 commit intovolcengine:mainfrom
r266-tech:fix/config-validation-unknown-fields

Conversation

@r266-tech
Copy link
Contributor

Problem

Config file validation silently ignores unknown fields, causing subtle misconfigurations where users accidentally misspell field names (e.g. instead of ) without any warning.

Reported in #855

Root Cause

Two gaps in config validation:

  1. LogConfig (Pydantic model) — Missing extra='forbid'. In Pydantic v2, the default is extra='ignore', which silently drops unknown fields.

  2. ParserConfig (dataclass) — from_dict() filters unknown fields without any notification.

Fix

  1. LogConfig — Added model_config = {extra: forbid}. Now raises a clear ValidationError listing the unknown field when a user writes e.g. log_level instead of level.

  2. ParserConfig.from_dict() — Now logs a warning for each unknown field with 'did you mean?' suggestions via difflib. For example:

    • Unknown config field 'dimention' in EmbeddingModelConfig — did you mean 'dimension'?
    • Unknown config field 'max_concurent' in SomeConfig — ignoring

Testing

# LogConfig rejects unknown fields
LogConfig(level='DEBUG', typo_field='test')
# → pydantic.ValidationError: Extra inputs are not permitted

# ParserConfig warns about unknown fields
PDFConfig.from_dict({strategy: auto, typo_field: test})
# → WARNING: Unknown config field 'typo_field' in PDFConfig — ignoring

Why warning for dataclass configs?

Parser configs use Python dataclasses (not Pydantic), so we can't use extra='forbid'. A warning approach is less disruptive while still surfacing the problem. The LogConfig fix (strict error) provides the hard rejection the reporter requested for Pydantic-based configs.

…onfig

LogConfig was missing , silently ignoring typos like
'log_level' instead of 'level'. Now raises a clear Pydantic validation
error listing the unknown field.

ParserConfig.from_dict() silently filtered unknown fields. Now logs a
warning with 'did you mean?' suggestions using difflib, helping users
catch typos like 'dimention' -> 'dimension'.

Fixes volcengine#855
@github-actions
Copy link

Failed to generate code suggestions for PR

@qin-ctx qin-ctx merged commit d8ab6d6 into volcengine:main Mar 22, 2026
5 of 6 checks passed
@github-project-automation github-project-automation bot moved this from Backlog to Done in OpenViking project Mar 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants