""" Test Phase 2.5 with Complex Multi-Objective Optimization Request This tests the intelligent gap detection with a challenging real-world request involving multi-objective optimization with constraints. """ import sys from pathlib import Path project_root = Path(__file__).parent.parent sys.path.insert(0, str(project_root)) from optimization_engine.utils.codebase_analyzer import CodebaseCapabilityAnalyzer from optimization_engine.future.workflow_decomposer import WorkflowDecomposer from optimization_engine.config.capability_matcher import CapabilityMatcher from optimization_engine.future.targeted_research_planner import TargetedResearchPlanner def main(): user_request = """update a geometry (.prt) with all expressions that have a _opt suffix to make the mass minimized. But the mass is not directly the total mass used, its the value under the part expression mass_of_only_this_part which is the calculation of 1of the body mass of my part, the one that I want to minimize. the objective is to minimize mass but maintain stress of the solution 1 subcase 3 under 100Mpa. And also, as a second objective in my objective function, I want to minimize nodal reaction force in y of the same subcase.""" print('=' * 80) print('PHASE 2.5 TEST: Complex Multi-Objective Optimization') print('=' * 80) print() print('User Request:') print(user_request) print() print('=' * 80) print() # Initialize analyzer = CodebaseCapabilityAnalyzer() decomposer = WorkflowDecomposer() matcher = CapabilityMatcher(analyzer) planner = TargetedResearchPlanner() # Step 1: Decompose print('[1] Decomposing Workflow') print('-' * 80) steps = decomposer.decompose(user_request) print(f'Identified {len(steps)} workflow steps:') print() for i, step in enumerate(steps, 1): print(f' {i}. {step.action.replace("_", " ").title()}') print(f' Domain: {step.domain}') if step.params: print(f' Params: {step.params}') print() # Step 2: Match to capabilities print() print('[2] Matching to Existing Capabilities') print('-' * 80) match = matcher.match(steps) print(f'Coverage: {match.coverage:.0%} ({len(match.known_steps)}/{len(steps)} steps)') print(f'Confidence: {match.overall_confidence:.0%}') print() print('KNOWN Steps (Already Implemented):') for i, known in enumerate(match.known_steps, 1): print(f' {i}. {known.step.action.replace("_", " ").title()} ({known.step.domain})') if known.implementation != 'unknown': impl_name = Path(known.implementation).name if '\\' in known.implementation or '/' in known.implementation else known.implementation print(f' File: {impl_name}') print() print('MISSING Steps (Need Research):') if match.unknown_steps: for i, unknown in enumerate(match.unknown_steps, 1): print(f' {i}. {unknown.step.action.replace("_", " ").title()} ({unknown.step.domain})') print(f' Required: {unknown.step.params}') if unknown.similar_capabilities: similar_str = ', '.join(unknown.similar_capabilities) print(f' Similar to: {similar_str}') print(f' Confidence: {unknown.confidence:.0%} (can adapt)') else: print(f' Confidence: {unknown.confidence:.0%} (needs research)') print() else: print(' None - all capabilities are known!') print() # Step 3: Create research plan print() print('[3] Creating Targeted Research Plan') print('-' * 80) plan = planner.plan(match) print(f'Research steps needed: {len(plan)}') print() if plan: for i, step in enumerate(plan, 1): print(f'Step {i}: {step["description"]}') print(f' Action: {step["action"]}') details = step.get('details', {}) if 'capability' in details: print(f' Study: {details["capability"]}') if 'query' in details: print(f' Query: "{details["query"]}"') print(f' Expected confidence: {step["expected_confidence"]:.0%}') print() else: print('No research needed - all capabilities exist!') print() print() print('=' * 80) print('ANALYSIS SUMMARY') print('=' * 80) print() print('Request Complexity:') print(' - Multi-objective optimization (mass + reaction force)') print(' - Constraint: stress < 100 MPa') print(' - Custom mass expression (not total mass)') print(' - Specific subcase targeting (solution 1, subcase 3)') print(' - Parameters with _opt suffix filter') print() print(f'System Analysis:') print(f' Known capabilities: {len(match.known_steps)}/{len(steps)} ({match.coverage:.0%})') print(f' Missing capabilities: {len(match.unknown_steps)}/{len(steps)}') print(f' Overall confidence: {match.overall_confidence:.0%}') print() if match.unknown_steps: print('What needs research:') for unknown in match.unknown_steps: print(f' - {unknown.step.action} ({unknown.step.domain})') else: print('All capabilities already exist in Atomizer!') print() if __name__ == '__main__': main()