debug: Add comprehensive placeholder resolution logging to workflow executor
All checks were successful
Deploy Development / deploy (push) Successful in 50s
Build Test / pytest-backend (push) Successful in 4s
Build Test / lint-backend (push) Successful in 1s
Build Test / build-frontend (push) Successful in 15s

- Log placeholder loading (count, sample keys)
- Log key cleaning process (before/after)
- Log sample values (name, age, geschlecht)
- Log template before/after resolution
- Log resolved and unresolved placeholders
- Add .strip() to key cleaning to handle spaces

This will help diagnose why {{ name }}, {{ age }}, {{ geschlecht }} are not resolving in inline templates.
Issue: Part 3 Inline Prompts - placeholder resolution debugging
This commit is contained in:
Lars 2026-04-11 09:38:18 +02:00
parent a4c8b4bd9a
commit aeb0ee6ad9

View File

@ -878,14 +878,20 @@ async def load_prompt_template(node: WorkflowNode, context: Dict[str, Any]) -> s
try:
# Get all placeholder values from registry
processed_placeholders = get_placeholder_example_values(profile_id)
logger.info(f"🔍 DEBUG: Loaded {len(processed_placeholders)} placeholders from registry")
logger.info(f"🔍 DEBUG: Sample keys (first 3): {list(processed_placeholders.keys())[:3]}")
# Remove {{ }} from keys (placeholder_resolver returns them with wrappers)
cleaned_placeholders = {
key.replace('{{', '').replace('}}', ''): value
key.replace('{{', '').replace('}}', '').strip(): value
for key, value in processed_placeholders.items()
}
logger.info(f"🔍 DEBUG: Cleaned keys (first 3): {list(cleaned_placeholders.keys())[:3]}")
logger.info(f"🔍 DEBUG: Sample values: name={cleaned_placeholders.get('name')}, age={cleaned_placeholders.get('age')}, geschlecht={cleaned_placeholders.get('geschlecht')}")
variables.update(cleaned_placeholders)
except Exception as e:
logger.warning(f"Failed to load placeholders for workflow: {e}")
logger.error(f"❌ CRITICAL: Failed to load placeholders for workflow: {e}", exc_info=True)
# Load catalog for |d modifier support
try:
@ -894,13 +900,22 @@ async def load_prompt_template(node: WorkflowNode, context: Dict[str, Any]) -> s
catalog = None
logger.warning(f"Failed to load placeholder catalog for workflow: {e}")
logger.info(f"🔍 DEBUG: Template before resolution:\n{template[:200]}...")
logger.info(f"🔍 DEBUG: Variables dict has {len(variables)} entries")
# Resolve with modern executor
debug_info = {}
resolved = resolve_placeholders(
template=template,
variables=variables,
debug_info=debug_info,
catalog=catalog
)
logger.info(f"🔍 DEBUG: Resolved placeholders: {debug_info.get('resolved_placeholders', {})}")
logger.info(f"🔍 DEBUG: Unresolved placeholders: {debug_info.get('unresolved_placeholders', [])}")
logger.info(f"🔍 DEBUG: Template after resolution:\n{resolved[:200]}...")
return resolved