[PR #16651] fix: using the number type to filter metadata manually not working pr… #28550

Closed
opened 2026-02-21 20:43:39 -05:00 by yindo · 0 comments
Owner

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

State: closed
Merged: No


Summary

Fixes #16649

The issue occurred because of how variable substitution was implemented in the metadata filtering logic. When the system replaces template variables using convert_template(), it returns a SegmentGroup object whose value property is a list of Segment objects. The original code was incorrectly accessing this returned value:

expected_value = self.graph_runtime_state.variable_pool.convert_template(expected_value).text

To improve code maintainability and provide a cleaner API for accessing values from SegmentGroup objects, I implemented a get_single_value() helper method on the SegmentGroup class that intelligently returns:
The actual value from the first segment if there's only one segment
The text representation if there are multiple segments
This solution is more robust and semantically clearer than directly accessing internal structure.

Checklist

Important

Please review the checklist below before submitting your pull request.

  • This change requires a documentation update, included: Dify Document
  • I understand that this PR may be closed in case there was no previous discussion or issues. (This doesn't apply to typos!)
  • I've added a test for each change that was introduced, and I tried as much as possible to make a single atomic change.
  • I've updated the documentation accordingly.
  • I ran dev/reformat(backend) and cd web && npx lint-staged(frontend) to appease the lint gods
**Original Pull Request:** https://github.com/langgenius/dify/pull/16651 **State:** closed **Merged:** No --- # Summary Fixes #16649 The issue occurred because of how variable substitution was implemented in the metadata filtering logic. When the system replaces template variables using convert_template(), it returns a SegmentGroup object whose value property is a list of Segment objects. The original code was incorrectly accessing this returned value: ```python expected_value = self.graph_runtime_state.variable_pool.convert_template(expected_value).text ``` To improve code maintainability and provide a cleaner API for accessing values from SegmentGroup objects, I implemented a get_single_value() helper method on the SegmentGroup class that intelligently returns: The actual value from the first segment if there's only one segment The text representation if there are multiple segments This solution is more robust and semantically clearer than directly accessing internal structure. # Checklist > [!IMPORTANT] > Please review the checklist below before submitting your pull request. - [ ] This change requires a documentation update, included: [Dify Document](https://github.com/langgenius/dify-docs) - [x] I understand that this PR may be closed in case there was no previous discussion or issues. (This doesn't apply to typos!) - [x] I've added a test for each change that was introduced, and I tried as much as possible to make a single atomic change. - [x] I've updated the documentation accordingly. - [x] I ran `dev/reformat`(backend) and `cd web && npx lint-staged`(frontend) to appease the lint gods
yindo added the pull-request label 2026-02-21 20:43:39 -05:00
yindo closed this issue 2026-02-21 20:43:40 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: langgenius/dify#28550