processor.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. from typing import Any, Dict, List
  2. import logging
  3. from .variables import VariableRegistry
  4. from .template import Template
  5. from .prompt import PromptHandler
  6. logger = logging.getLogger('boilerplates')
  7. class VariableProcessor:
  8. """Variable processor for template generation."""
  9. def __init__(self, variable_registry: VariableRegistry):
  10. self.registry = variable_registry
  11. def process(self, template: Template) -> Dict[str, Any]:
  12. """Process variables for a template."""
  13. # Get variables needed by template
  14. grouped_vars = self.registry.get_variables_for_template(template.vars)
  15. if not grouped_vars:
  16. return {}
  17. # Convert to format expected by PromptHandler
  18. formatted_groups = {}
  19. for group_name, variables in grouped_vars.items():
  20. group_info = self.registry.groups.get(group_name, {
  21. 'display_name': group_name.title(),
  22. 'description': '',
  23. 'icon': ''
  24. })
  25. # Convert variables to dict format expected by PromptHandler
  26. vars_dict = {}
  27. for var in variables:
  28. vars_dict[var.name] = var.to_prompt_config()
  29. formatted_groups[group_name] = {
  30. 'display_name': group_info['display_name'],
  31. 'description': group_info['description'],
  32. 'icon': group_info['icon'],
  33. 'vars': vars_dict,
  34. 'enabler': self.registry.group_enablers.get(group_name, '')
  35. }
  36. # Resolve defaults (template defaults override variable defaults)
  37. defaults = {}
  38. for group_vars in grouped_vars.values():
  39. for var in group_vars:
  40. if var.default is not None:
  41. defaults[var.name] = var.default
  42. # Template defaults have higher priority
  43. defaults.update(template.var_defaults)
  44. # Prompt for values using the PromptHandler
  45. prompt = PromptHandler(formatted_groups, defaults)
  46. return prompt() # Call the handler directly