| """Generate training variations from verified macros.""" | |
| from __future__ import annotations | |
| import random | |
| from cl_macros.schema import TransformationExample | |
| class VariationGenerator: | |
| def generate_from_verified( | |
| self, | |
| verified: TransformationExample, | |
| max_variations: int = 8, | |
| ) -> list[TransformationExample]: | |
| """Create variations using different call sites as input.""" | |
| variations = [] | |
| for i, call_site in enumerate(verified.call_sites[:max_variations]): | |
| var = TransformationExample( | |
| id=f"{verified.id}-var-{i}", | |
| before_code=call_site, | |
| problem_pattern=verified.problem_pattern, | |
| macro_definition=verified.macro_definition, | |
| after_expansion=verified.macroexpand_1_result or verified.after_expansion, | |
| macro_category=verified.macro_category, | |
| technique=verified.technique, | |
| source=verified.source, | |
| complexity=verified.complexity, | |
| has_capture_risk=verified.has_capture_risk, | |
| requires_gensyms=verified.requires_gensyms, | |
| library_name=verified.library_name, | |
| macro_name=verified.macro_name, | |
| is_verified=verified.is_verified, | |
| is_synthetic=True, | |
| macroexpand_1_result=verified.macroexpand_1_result, | |
| commentary=verified.commentary, | |
| ) | |
| variations.append(var) | |
| return variations | |
| def generate_multi_example( | |
| self, | |
| verified: TransformationExample, | |
| n_examples: int = 3, | |
| ) -> list[TransformationExample]: | |
| """Generate macro-from-spec records using multiple call sites.""" | |
| if len(verified.call_sites) < n_examples: | |
| return self.generate_from_verified(verified, max_variations=1) | |
| selected = random.sample(verified.call_sites, n_examples) | |
| combined_input = "\n\n".join( | |
| f"Example {i+1}:\nCall: {cs}" | |
| for i, cs in enumerate(selected) | |
| ) | |
| spec = TransformationExample( | |
| id=f"{verified.id}-spec", | |
| before_code=combined_input, | |
| problem_pattern=f"Macro that implements: {verified.nl_description or verified.problem_pattern}", | |
| macro_definition=verified.macro_definition, | |
| after_expansion=verified.macroexpand_1_result or verified.after_expansion, | |
| macro_category=verified.macro_category, | |
| technique=verified.technique, | |
| source=verified.source, | |
| complexity=verified.complexity, | |
| has_capture_risk=verified.has_capture_risk, | |
| requires_gensyms=verified.requires_gensyms, | |
| library_name=verified.library_name, | |
| macro_name=verified.macro_name, | |
| formulation="macro-from-spec", | |
| is_synthetic=True, | |
| nl_description=verified.nl_description, | |
| ) | |
| return [spec] | |