[PR #32411] fix(retrieval): don't require metadata_model_config for manual metadata filtering #33725

Open
opened 2026-02-21 20:53:47 -05:00 by yindo · 0 comments
Owner

Original Pull Request: https://github.com/langgenius/dify/pull/32411

State: open
Merged: No


Summary

Fix knowledge retrieval with metadata_filtering_mode="manual" by requiring metadata_model_config only for automatic mode.

Problem

After the retrieval refactor, knowledge_retrieval raises:

metadata_model_config is required for this method

for all non-disabled metadata modes, including manual.

In manual mode this config is not used to build filter conditions, and existing workflows can have it unset.

Root cause

DatasetRetrieval.knowledge_retrieval currently checks:

  • if request.metadata_filtering_mode != "disabled" then
  • always require request.metadata_model_config

This is stricter than needed and breaks manual filtering flows.

Fix

  • Gate the requirement to automatic mode only.
  • Keep converting metadata_model_config when present.
  • Leave manual mode functional without forcing model config.

Tests

Added unit coverage in:

  • api/tests/unit_tests/core/rag/retrieval/test_dataset_retrieval_methods.py

New test:

  • test_knowledge_retrieval_metadata_filtering_manual_does_not_require_model_config

Targeted test run:

uv run --project api --dev pytest api/tests/unit_tests/core/rag/retrieval/test_dataset_retrieval_methods.py -k "metadata_filtering_manual_does_not_require_model_config or metadata_filtering_disabled"

(2 passed)

Fixes #32372

**Original Pull Request:** https://github.com/langgenius/dify/pull/32411 **State:** open **Merged:** No --- ## Summary Fix knowledge retrieval with `metadata_filtering_mode="manual"` by requiring `metadata_model_config` only for `automatic` mode. ## Problem After the retrieval refactor, `knowledge_retrieval` raises: `metadata_model_config is required for this method` for all non-disabled metadata modes, including `manual`. In manual mode this config is not used to build filter conditions, and existing workflows can have it unset. ## Root cause `DatasetRetrieval.knowledge_retrieval` currently checks: - `if request.metadata_filtering_mode != "disabled"` then - always require `request.metadata_model_config` This is stricter than needed and breaks manual filtering flows. ## Fix - Gate the requirement to `automatic` mode only. - Keep converting `metadata_model_config` when present. - Leave `manual` mode functional without forcing model config. ## Tests Added unit coverage in: - `api/tests/unit_tests/core/rag/retrieval/test_dataset_retrieval_methods.py` New test: - `test_knowledge_retrieval_metadata_filtering_manual_does_not_require_model_config` Targeted test run: ```bash uv run --project api --dev pytest api/tests/unit_tests/core/rag/retrieval/test_dataset_retrieval_methods.py -k "metadata_filtering_manual_does_not_require_model_config or metadata_filtering_disabled" ``` (2 passed) Fixes #32372
yindo added the pull-request label 2026-02-21 20:53:47 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: langgenius/dify#33725