[PR #27135] fix: parameter extractor instructions placeholder not replaced (#26235) #31691

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

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

State: closed
Merged: Yes


Important

  1. Make sure you have read our contribution guidelines
  2. Ensure there is an associated issue and you have been assigned to it
  3. Use the correct syntax to link this PR: Fixes #<issue number>.

Summary

Fixes #26235

The Parameter Extractor node was failing to inject custom instructions into the prompt template, causing instructions to appear as literal {instructions} in the generated prompt instead of being replaced with actual content.

Root Cause

The code was using .format(histories=memory_str) with a template containing {{instructions}}, followed by .replace("{{instructions}}", instruction). This failed because:

  1. .format() escapes double braces {{instructions}} to single braces {instructions}
  2. The subsequent .replace("{{instructions}}", ...) couldn't find the target string anymore

Solution

  • Changed the template to use single braces {instructions}
  • Updated .format() to pass both histories and instructions parameters in a single call
  • This ensures all placeholders are properly replaced

Changes

  • api/core/workflow/nodes/parameter_extractor/parameter_extractor_node.py: Updated to pass both parameters to .format()
  • api/core/workflow/nodes/parameter_extractor/prompts.py: Changed {{instructions}} to {instructions}

Testing

  • Passed ruff format
  • Passed ruff check --fix
  • Passed basedpyright type checking
  • All linting checks passed

Checklist

  • 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/27135 **State:** closed **Merged:** Yes --- > [!IMPORTANT] > > 1. Make sure you have read our [contribution guidelines](https://github.com/langgenius/dify/blob/main/CONTRIBUTING.md) > 1. Ensure there is an associated issue and you have been assigned to it > 1. Use the correct syntax to link this PR: `Fixes #<issue number>`. ## Summary Fixes #26235 The Parameter Extractor node was failing to inject custom instructions into the prompt template, causing instructions to appear as literal `{instructions}` in the generated prompt instead of being replaced with actual content. ## Root Cause The code was using `.format(histories=memory_str)` with a template containing `{{instructions}}`, followed by `.replace("{{instructions}}", instruction)`. This failed because: 1. `.format()` escapes double braces `{{instructions}}` to single braces `{instructions}` 2. The subsequent `.replace("{{instructions}}", ...)` couldn't find the target string anymore ## Solution - Changed the template to use single braces `{instructions}` - Updated `.format()` to pass both `histories` and `instructions` parameters in a single call - This ensures all placeholders are properly replaced ## Changes - `api/core/workflow/nodes/parameter_extractor/parameter_extractor_node.py`: Updated to pass both parameters to `.format()` - `api/core/workflow/nodes/parameter_extractor/prompts.py`: Changed `{{instructions}}` to `{instructions}` ## Testing - ✅ Passed `ruff format` - ✅ Passed `ruff check --fix` - ✅ Passed `basedpyright` type checking - ✅ All linting checks passed ## Checklist - [ ] 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:49:57 -05:00
yindo closed this issue 2026-02-21 20:49:57 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: langgenius/dify#31691