empathy-framework 3.7.0__py3-none-any.whl → 3.8.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. coach_wizards/code_reviewer_README.md +60 -0
  2. coach_wizards/code_reviewer_wizard.py +180 -0
  3. {empathy_framework-3.7.0.dist-info → empathy_framework-3.8.0.dist-info}/METADATA +148 -11
  4. empathy_framework-3.8.0.dist-info/RECORD +333 -0
  5. {empathy_framework-3.7.0.dist-info → empathy_framework-3.8.0.dist-info}/top_level.txt +5 -1
  6. empathy_healthcare_plugin/monitors/__init__.py +9 -0
  7. empathy_healthcare_plugin/monitors/clinical_protocol_monitor.py +315 -0
  8. empathy_healthcare_plugin/monitors/monitoring/__init__.py +44 -0
  9. empathy_healthcare_plugin/monitors/monitoring/protocol_checker.py +300 -0
  10. empathy_healthcare_plugin/monitors/monitoring/protocol_loader.py +214 -0
  11. empathy_healthcare_plugin/monitors/monitoring/sensor_parsers.py +306 -0
  12. empathy_healthcare_plugin/monitors/monitoring/trajectory_analyzer.py +389 -0
  13. empathy_llm_toolkit/agent_factory/__init__.py +53 -0
  14. empathy_llm_toolkit/agent_factory/adapters/__init__.py +85 -0
  15. empathy_llm_toolkit/agent_factory/adapters/autogen_adapter.py +312 -0
  16. empathy_llm_toolkit/agent_factory/adapters/crewai_adapter.py +454 -0
  17. empathy_llm_toolkit/agent_factory/adapters/haystack_adapter.py +298 -0
  18. empathy_llm_toolkit/agent_factory/adapters/langchain_adapter.py +362 -0
  19. empathy_llm_toolkit/agent_factory/adapters/langgraph_adapter.py +333 -0
  20. empathy_llm_toolkit/agent_factory/adapters/native.py +228 -0
  21. empathy_llm_toolkit/agent_factory/adapters/wizard_adapter.py +426 -0
  22. empathy_llm_toolkit/agent_factory/base.py +305 -0
  23. empathy_llm_toolkit/agent_factory/crews/__init__.py +67 -0
  24. empathy_llm_toolkit/agent_factory/crews/code_review.py +1113 -0
  25. empathy_llm_toolkit/agent_factory/crews/health_check.py +1246 -0
  26. empathy_llm_toolkit/agent_factory/crews/refactoring.py +1128 -0
  27. empathy_llm_toolkit/agent_factory/crews/security_audit.py +1018 -0
  28. empathy_llm_toolkit/agent_factory/decorators.py +286 -0
  29. empathy_llm_toolkit/agent_factory/factory.py +558 -0
  30. empathy_llm_toolkit/agent_factory/framework.py +192 -0
  31. empathy_llm_toolkit/agent_factory/memory_integration.py +324 -0
  32. empathy_llm_toolkit/agent_factory/resilient.py +320 -0
  33. empathy_llm_toolkit/cli/__init__.py +8 -0
  34. empathy_llm_toolkit/cli/sync_claude.py +487 -0
  35. empathy_llm_toolkit/code_health.py +150 -3
  36. empathy_llm_toolkit/config/__init__.py +29 -0
  37. empathy_llm_toolkit/config/unified.py +295 -0
  38. empathy_llm_toolkit/routing/__init__.py +32 -0
  39. empathy_llm_toolkit/routing/model_router.py +362 -0
  40. empathy_llm_toolkit/security/IMPLEMENTATION_SUMMARY.md +413 -0
  41. empathy_llm_toolkit/security/PHASE2_COMPLETE.md +384 -0
  42. empathy_llm_toolkit/security/PHASE2_SECRETS_DETECTOR_COMPLETE.md +271 -0
  43. empathy_llm_toolkit/security/QUICK_REFERENCE.md +316 -0
  44. empathy_llm_toolkit/security/README.md +262 -0
  45. empathy_llm_toolkit/security/__init__.py +62 -0
  46. empathy_llm_toolkit/security/audit_logger.py +929 -0
  47. empathy_llm_toolkit/security/audit_logger_example.py +152 -0
  48. empathy_llm_toolkit/security/pii_scrubber.py +640 -0
  49. empathy_llm_toolkit/security/secrets_detector.py +678 -0
  50. empathy_llm_toolkit/security/secrets_detector_example.py +304 -0
  51. empathy_llm_toolkit/security/secure_memdocs.py +1192 -0
  52. empathy_llm_toolkit/security/secure_memdocs_example.py +278 -0
  53. empathy_llm_toolkit/wizards/__init__.py +38 -0
  54. empathy_llm_toolkit/wizards/base_wizard.py +364 -0
  55. empathy_llm_toolkit/wizards/customer_support_wizard.py +190 -0
  56. empathy_llm_toolkit/wizards/healthcare_wizard.py +362 -0
  57. empathy_llm_toolkit/wizards/patient_assessment_README.md +64 -0
  58. empathy_llm_toolkit/wizards/patient_assessment_wizard.py +193 -0
  59. empathy_llm_toolkit/wizards/technology_wizard.py +194 -0
  60. empathy_os/__init__.py +52 -52
  61. empathy_os/adaptive/__init__.py +13 -0
  62. empathy_os/adaptive/task_complexity.py +127 -0
  63. empathy_os/cache/__init__.py +117 -0
  64. empathy_os/cache/base.py +166 -0
  65. empathy_os/cache/dependency_manager.py +253 -0
  66. empathy_os/cache/hash_only.py +248 -0
  67. empathy_os/cache/hybrid.py +390 -0
  68. empathy_os/cache/storage.py +282 -0
  69. empathy_os/cli.py +118 -8
  70. empathy_os/cli_unified.py +121 -1
  71. empathy_os/config/__init__.py +63 -0
  72. empathy_os/config/xml_config.py +239 -0
  73. empathy_os/config.py +2 -1
  74. empathy_os/dashboard/__init__.py +15 -0
  75. empathy_os/dashboard/server.py +743 -0
  76. empathy_os/memory/__init__.py +195 -0
  77. empathy_os/memory/claude_memory.py +466 -0
  78. empathy_os/memory/config.py +224 -0
  79. empathy_os/memory/control_panel.py +1298 -0
  80. empathy_os/memory/edges.py +179 -0
  81. empathy_os/memory/graph.py +567 -0
  82. empathy_os/memory/long_term.py +1194 -0
  83. empathy_os/memory/nodes.py +179 -0
  84. empathy_os/memory/redis_bootstrap.py +540 -0
  85. empathy_os/memory/security/__init__.py +31 -0
  86. empathy_os/memory/security/audit_logger.py +930 -0
  87. empathy_os/memory/security/pii_scrubber.py +640 -0
  88. empathy_os/memory/security/secrets_detector.py +678 -0
  89. empathy_os/memory/short_term.py +2119 -0
  90. empathy_os/memory/storage/__init__.py +15 -0
  91. empathy_os/memory/summary_index.py +583 -0
  92. empathy_os/memory/unified.py +619 -0
  93. empathy_os/metrics/__init__.py +12 -0
  94. empathy_os/metrics/prompt_metrics.py +190 -0
  95. empathy_os/models/__init__.py +136 -0
  96. empathy_os/models/__main__.py +13 -0
  97. empathy_os/models/cli.py +655 -0
  98. empathy_os/models/empathy_executor.py +354 -0
  99. empathy_os/models/executor.py +252 -0
  100. empathy_os/models/fallback.py +671 -0
  101. empathy_os/models/provider_config.py +563 -0
  102. empathy_os/models/registry.py +382 -0
  103. empathy_os/models/tasks.py +302 -0
  104. empathy_os/models/telemetry.py +548 -0
  105. empathy_os/models/token_estimator.py +378 -0
  106. empathy_os/models/validation.py +274 -0
  107. empathy_os/monitoring/__init__.py +52 -0
  108. empathy_os/monitoring/alerts.py +23 -0
  109. empathy_os/monitoring/alerts_cli.py +268 -0
  110. empathy_os/monitoring/multi_backend.py +271 -0
  111. empathy_os/monitoring/otel_backend.py +363 -0
  112. empathy_os/optimization/__init__.py +19 -0
  113. empathy_os/optimization/context_optimizer.py +272 -0
  114. empathy_os/plugins/__init__.py +28 -0
  115. empathy_os/plugins/base.py +361 -0
  116. empathy_os/plugins/registry.py +268 -0
  117. empathy_os/project_index/__init__.py +30 -0
  118. empathy_os/project_index/cli.py +335 -0
  119. empathy_os/project_index/crew_integration.py +430 -0
  120. empathy_os/project_index/index.py +425 -0
  121. empathy_os/project_index/models.py +501 -0
  122. empathy_os/project_index/reports.py +473 -0
  123. empathy_os/project_index/scanner.py +538 -0
  124. empathy_os/prompts/__init__.py +61 -0
  125. empathy_os/prompts/config.py +77 -0
  126. empathy_os/prompts/context.py +177 -0
  127. empathy_os/prompts/parser.py +285 -0
  128. empathy_os/prompts/registry.py +313 -0
  129. empathy_os/prompts/templates.py +208 -0
  130. empathy_os/resilience/__init__.py +56 -0
  131. empathy_os/resilience/circuit_breaker.py +256 -0
  132. empathy_os/resilience/fallback.py +179 -0
  133. empathy_os/resilience/health.py +300 -0
  134. empathy_os/resilience/retry.py +209 -0
  135. empathy_os/resilience/timeout.py +135 -0
  136. empathy_os/routing/__init__.py +43 -0
  137. empathy_os/routing/chain_executor.py +433 -0
  138. empathy_os/routing/classifier.py +217 -0
  139. empathy_os/routing/smart_router.py +234 -0
  140. empathy_os/routing/wizard_registry.py +307 -0
  141. empathy_os/trust/__init__.py +28 -0
  142. empathy_os/trust/circuit_breaker.py +579 -0
  143. empathy_os/validation/__init__.py +19 -0
  144. empathy_os/validation/xml_validator.py +281 -0
  145. empathy_os/wizard_factory_cli.py +170 -0
  146. empathy_os/workflows/__init__.py +360 -0
  147. empathy_os/workflows/base.py +1660 -0
  148. empathy_os/workflows/bug_predict.py +962 -0
  149. empathy_os/workflows/code_review.py +960 -0
  150. empathy_os/workflows/code_review_adapters.py +310 -0
  151. empathy_os/workflows/code_review_pipeline.py +720 -0
  152. empathy_os/workflows/config.py +600 -0
  153. empathy_os/workflows/dependency_check.py +648 -0
  154. empathy_os/workflows/document_gen.py +1069 -0
  155. empathy_os/workflows/documentation_orchestrator.py +1205 -0
  156. empathy_os/workflows/health_check.py +679 -0
  157. empathy_os/workflows/keyboard_shortcuts/__init__.py +39 -0
  158. empathy_os/workflows/keyboard_shortcuts/generators.py +386 -0
  159. empathy_os/workflows/keyboard_shortcuts/parsers.py +414 -0
  160. empathy_os/workflows/keyboard_shortcuts/prompts.py +295 -0
  161. empathy_os/workflows/keyboard_shortcuts/schema.py +193 -0
  162. empathy_os/workflows/keyboard_shortcuts/workflow.py +505 -0
  163. empathy_os/workflows/manage_documentation.py +804 -0
  164. empathy_os/workflows/new_sample_workflow1.py +146 -0
  165. empathy_os/workflows/new_sample_workflow1_README.md +150 -0
  166. empathy_os/workflows/perf_audit.py +687 -0
  167. empathy_os/workflows/pr_review.py +748 -0
  168. empathy_os/workflows/progress.py +445 -0
  169. empathy_os/workflows/progress_server.py +322 -0
  170. empathy_os/workflows/refactor_plan.py +693 -0
  171. empathy_os/workflows/release_prep.py +808 -0
  172. empathy_os/workflows/research_synthesis.py +404 -0
  173. empathy_os/workflows/secure_release.py +585 -0
  174. empathy_os/workflows/security_adapters.py +297 -0
  175. empathy_os/workflows/security_audit.py +1046 -0
  176. empathy_os/workflows/step_config.py +234 -0
  177. empathy_os/workflows/test5.py +125 -0
  178. empathy_os/workflows/test5_README.md +158 -0
  179. empathy_os/workflows/test_gen.py +1855 -0
  180. empathy_os/workflows/test_lifecycle.py +526 -0
  181. empathy_os/workflows/test_maintenance.py +626 -0
  182. empathy_os/workflows/test_maintenance_cli.py +590 -0
  183. empathy_os/workflows/test_maintenance_crew.py +821 -0
  184. empathy_os/workflows/xml_enhanced_crew.py +285 -0
  185. empathy_software_plugin/cli/__init__.py +120 -0
  186. empathy_software_plugin/cli/inspect.py +362 -0
  187. empathy_software_plugin/cli.py +3 -1
  188. empathy_software_plugin/wizards/__init__.py +42 -0
  189. empathy_software_plugin/wizards/advanced_debugging_wizard.py +392 -0
  190. empathy_software_plugin/wizards/agent_orchestration_wizard.py +511 -0
  191. empathy_software_plugin/wizards/ai_collaboration_wizard.py +503 -0
  192. empathy_software_plugin/wizards/ai_context_wizard.py +441 -0
  193. empathy_software_plugin/wizards/ai_documentation_wizard.py +503 -0
  194. empathy_software_plugin/wizards/base_wizard.py +288 -0
  195. empathy_software_plugin/wizards/book_chapter_wizard.py +519 -0
  196. empathy_software_plugin/wizards/code_review_wizard.py +606 -0
  197. empathy_software_plugin/wizards/debugging/__init__.py +50 -0
  198. empathy_software_plugin/wizards/debugging/bug_risk_analyzer.py +414 -0
  199. empathy_software_plugin/wizards/debugging/config_loaders.py +442 -0
  200. empathy_software_plugin/wizards/debugging/fix_applier.py +469 -0
  201. empathy_software_plugin/wizards/debugging/language_patterns.py +383 -0
  202. empathy_software_plugin/wizards/debugging/linter_parsers.py +470 -0
  203. empathy_software_plugin/wizards/debugging/verification.py +369 -0
  204. empathy_software_plugin/wizards/enhanced_testing_wizard.py +537 -0
  205. empathy_software_plugin/wizards/memory_enhanced_debugging_wizard.py +816 -0
  206. empathy_software_plugin/wizards/multi_model_wizard.py +501 -0
  207. empathy_software_plugin/wizards/pattern_extraction_wizard.py +422 -0
  208. empathy_software_plugin/wizards/pattern_retriever_wizard.py +400 -0
  209. empathy_software_plugin/wizards/performance/__init__.py +9 -0
  210. empathy_software_plugin/wizards/performance/bottleneck_detector.py +221 -0
  211. empathy_software_plugin/wizards/performance/profiler_parsers.py +278 -0
  212. empathy_software_plugin/wizards/performance/trajectory_analyzer.py +429 -0
  213. empathy_software_plugin/wizards/performance_profiling_wizard.py +305 -0
  214. empathy_software_plugin/wizards/prompt_engineering_wizard.py +425 -0
  215. empathy_software_plugin/wizards/rag_pattern_wizard.py +461 -0
  216. empathy_software_plugin/wizards/security/__init__.py +32 -0
  217. empathy_software_plugin/wizards/security/exploit_analyzer.py +290 -0
  218. empathy_software_plugin/wizards/security/owasp_patterns.py +241 -0
  219. empathy_software_plugin/wizards/security/vulnerability_scanner.py +604 -0
  220. empathy_software_plugin/wizards/security_analysis_wizard.py +322 -0
  221. empathy_software_plugin/wizards/security_learning_wizard.py +740 -0
  222. empathy_software_plugin/wizards/tech_debt_wizard.py +726 -0
  223. empathy_software_plugin/wizards/testing/__init__.py +27 -0
  224. empathy_software_plugin/wizards/testing/coverage_analyzer.py +459 -0
  225. empathy_software_plugin/wizards/testing/quality_analyzer.py +531 -0
  226. empathy_software_plugin/wizards/testing/test_suggester.py +533 -0
  227. empathy_software_plugin/wizards/testing_wizard.py +274 -0
  228. hot_reload/README.md +473 -0
  229. hot_reload/__init__.py +62 -0
  230. hot_reload/config.py +84 -0
  231. hot_reload/integration.py +228 -0
  232. hot_reload/reloader.py +298 -0
  233. hot_reload/watcher.py +179 -0
  234. hot_reload/websocket.py +176 -0
  235. scaffolding/README.md +589 -0
  236. scaffolding/__init__.py +35 -0
  237. scaffolding/__main__.py +14 -0
  238. scaffolding/cli.py +240 -0
  239. test_generator/__init__.py +38 -0
  240. test_generator/__main__.py +14 -0
  241. test_generator/cli.py +226 -0
  242. test_generator/generator.py +325 -0
  243. test_generator/risk_analyzer.py +216 -0
  244. workflow_patterns/__init__.py +33 -0
  245. workflow_patterns/behavior.py +249 -0
  246. workflow_patterns/core.py +76 -0
  247. workflow_patterns/output.py +99 -0
  248. workflow_patterns/registry.py +255 -0
  249. workflow_patterns/structural.py +288 -0
  250. workflow_scaffolding/__init__.py +11 -0
  251. workflow_scaffolding/__main__.py +12 -0
  252. workflow_scaffolding/cli.py +206 -0
  253. workflow_scaffolding/generator.py +265 -0
  254. agents/code_inspection/patterns/inspection/recurring_B112.json +0 -18
  255. agents/code_inspection/patterns/inspection/recurring_F541.json +0 -16
  256. agents/code_inspection/patterns/inspection/recurring_FORMAT.json +0 -25
  257. agents/code_inspection/patterns/inspection/recurring_bug_20250822_def456.json +0 -16
  258. agents/code_inspection/patterns/inspection/recurring_bug_20250915_abc123.json +0 -16
  259. agents/code_inspection/patterns/inspection/recurring_bug_20251212_3c5b9951.json +0 -16
  260. agents/code_inspection/patterns/inspection/recurring_bug_20251212_97c0f72f.json +0 -16
  261. agents/code_inspection/patterns/inspection/recurring_bug_20251212_a0871d53.json +0 -16
  262. agents/code_inspection/patterns/inspection/recurring_bug_20251212_a9b6ec41.json +0 -16
  263. agents/code_inspection/patterns/inspection/recurring_bug_null_001.json +0 -16
  264. agents/code_inspection/patterns/inspection/recurring_builtin.json +0 -16
  265. agents/compliance_anticipation_agent.py +0 -1422
  266. agents/compliance_db.py +0 -339
  267. agents/epic_integration_wizard.py +0 -530
  268. agents/notifications.py +0 -291
  269. agents/trust_building_behaviors.py +0 -872
  270. empathy_framework-3.7.0.dist-info/RECORD +0 -105
  271. {empathy_framework-3.7.0.dist-info → empathy_framework-3.8.0.dist-info}/WHEEL +0 -0
  272. {empathy_framework-3.7.0.dist-info → empathy_framework-3.8.0.dist-info}/entry_points.txt +0 -0
  273. {empathy_framework-3.7.0.dist-info → empathy_framework-3.8.0.dist-info}/licenses/LICENSE +0 -0
  274. /empathy_os/{monitoring.py → agent_monitoring.py} +0 -0
@@ -0,0 +1,305 @@
1
+ """Performance Profiling Wizard (Level 4)
2
+
3
+ Predicts performance bottlenecks BEFORE they become critical.
4
+
5
+ Level 4: Anticipatory - alerts to performance degradation trajectory.
6
+
7
+ Copyright 2025 Smart AI Memory, LLC
8
+ Licensed under Fair Source 0.9
9
+ """
10
+
11
+ import logging
12
+ from typing import Any
13
+
14
+ from .base_wizard import BaseWizard
15
+ from .performance.bottleneck_detector import Bottleneck, BottleneckDetector
16
+ from .performance.profiler_parsers import (
17
+ FunctionProfile,
18
+ SimpleJSONProfilerParser,
19
+ parse_profiler_output,
20
+ )
21
+ from .performance.trajectory_analyzer import PerformanceTrajectoryAnalyzer, TrajectoryPrediction
22
+
23
+ logger = logging.getLogger(__name__)
24
+
25
+
26
+ class PerformanceProfilingWizard(BaseWizard):
27
+ """Performance Profiling Wizard - Level 4
28
+
29
+ Beyond identifying current bottlenecks:
30
+ - Predicts future performance degradation
31
+ - Analyzes performance trajectory
32
+ - Suggests optimizations based on impact
33
+ - Cross-language performance patterns
34
+ """
35
+
36
+ @property
37
+ def name(self) -> str:
38
+ return "Performance Profiling Wizard"
39
+
40
+ @property
41
+ def level(self) -> int:
42
+ return 4
43
+
44
+ def __init__(self):
45
+ super().__init__()
46
+
47
+ self.profiler_parser = SimpleJSONProfilerParser() # Default parser
48
+ self.bottleneck_detector = BottleneckDetector()
49
+ self.trajectory_analyzer = PerformanceTrajectoryAnalyzer()
50
+
51
+ async def analyze(self, context: dict[str, Any]) -> dict[str, Any]:
52
+ """Analyze performance and predict bottlenecks.
53
+
54
+ Context expects:
55
+ - profiler_data: Profiling output (string or dict)
56
+ - profiler_type: "cprofile", "chrome_devtools", etc.
57
+ - current_metrics: Current performance metrics (optional)
58
+ - historical_metrics: Historical performance data (optional)
59
+ - threshold_percent: Min % of time to consider (default: 5.0)
60
+
61
+ Returns:
62
+ Analysis with bottlenecks, trajectory, predictions, recommendations
63
+
64
+ """
65
+ profiler_data = context.get("profiler_data")
66
+ profiler_type = context.get("profiler_type", "simple_json")
67
+ current_metrics = context.get("current_metrics", {})
68
+ historical_metrics = context.get("historical_metrics", [])
69
+ threshold_percent = context.get("threshold_percent", 5.0)
70
+
71
+ if not profiler_data:
72
+ return {
73
+ "error": "profiler_data required",
74
+ "help": "Provide profiling output from cProfile, Chrome DevTools, etc.",
75
+ }
76
+
77
+ # Phase 1: Parse profiler output
78
+ profiles = parse_profiler_output(profiler_type, profiler_data)
79
+
80
+ # Phase 2: Detect bottlenecks
81
+ bottlenecks = self.bottleneck_detector.detect_bottlenecks(profiles, threshold_percent)
82
+
83
+ # Phase 3: Analyze trajectory (Level 4)
84
+ trajectory_prediction = None
85
+ if historical_metrics:
86
+ # If no current_metrics provided, analyzer will extract from last historical entry
87
+ trajectory_prediction = self.trajectory_analyzer.analyze_trajectory(
88
+ current_metrics if current_metrics else historical_metrics,
89
+ historical_metrics if current_metrics else None,
90
+ )
91
+
92
+ # Phase 4: Generate insights
93
+ insights = self._generate_insights(profiles, bottlenecks)
94
+
95
+ # Phase 5: Predictions (Level 4)
96
+ predictions = self._generate_predictions(bottlenecks, trajectory_prediction, profiles)
97
+
98
+ # Phase 6: Recommendations
99
+ recommendations = self._generate_recommendations(
100
+ bottlenecks,
101
+ trajectory_prediction,
102
+ insights,
103
+ )
104
+
105
+ # Get top function
106
+ top_func = profiles[0] if profiles else None
107
+ top_function_str = (
108
+ f"{top_func.function_name} ({top_func.percent_total:.1f}% of time)"
109
+ if top_func
110
+ else "None"
111
+ )
112
+
113
+ return {
114
+ "profiling_summary": {
115
+ "total_functions": len(profiles),
116
+ "total_time": sum(p.total_time for p in profiles),
117
+ "top_function": top_function_str,
118
+ "top_5_slowest": [
119
+ {"function": p.function_name, "time": p.total_time, "percent": p.percent_total}
120
+ for p in profiles[:5]
121
+ ],
122
+ },
123
+ "bottlenecks": [b.to_dict() for b in bottlenecks],
124
+ "trajectory": trajectory_prediction.to_dict() if trajectory_prediction else None,
125
+ "trajectory_analysis": (
126
+ trajectory_prediction.to_dict()
127
+ if trajectory_prediction
128
+ else {"state": "unknown", "trends": []}
129
+ ),
130
+ "insights": insights,
131
+ # Standard wizard outputs
132
+ "predictions": predictions,
133
+ "recommendations": recommendations,
134
+ "confidence": 0.85,
135
+ }
136
+
137
+ def _generate_insights(
138
+ self,
139
+ profiles: list[FunctionProfile],
140
+ bottlenecks: list[Bottleneck],
141
+ ) -> dict[str, Any]:
142
+ """Generate performance insights"""
143
+ # Identify patterns
144
+ io_heavy = sum(1 for b in bottlenecks if b.type.value == "io_bound")
145
+ cpu_heavy = sum(1 for b in bottlenecks if b.type.value == "cpu_bound")
146
+ n_plus_one = sum(1 for b in bottlenecks if b.type.value == "n_plus_one")
147
+
148
+ insights = {
149
+ "dominant_pattern": self._identify_dominant_pattern(io_heavy, cpu_heavy, n_plus_one),
150
+ "io_bound_operations": io_heavy,
151
+ "cpu_bound_operations": cpu_heavy,
152
+ "n_plus_one_queries": n_plus_one,
153
+ "optimization_potential": self._estimate_optimization_potential(bottlenecks),
154
+ }
155
+
156
+ return insights
157
+
158
+ def _identify_dominant_pattern(self, io_heavy: int, cpu_heavy: int, n_plus_one: int) -> str:
159
+ """Identify dominant performance pattern"""
160
+ if n_plus_one > 0:
161
+ return "database_n_plus_one"
162
+ if io_heavy > cpu_heavy:
163
+ return "io_bound"
164
+ if cpu_heavy > 0:
165
+ return "cpu_bound"
166
+ return "balanced"
167
+
168
+ def _estimate_optimization_potential(self, bottlenecks: list[Bottleneck]) -> dict[str, Any]:
169
+ """Estimate potential time savings from optimizations"""
170
+ if not bottlenecks:
171
+ return {"potential_savings": 0.0, "percentage": 0.0, "assessment": "LOW"}
172
+
173
+ # Sum time from all bottlenecks
174
+ total_bottleneck_time = sum(b.time_cost for b in bottlenecks)
175
+
176
+ # Assume we can optimize 50% of bottleneck time
177
+ potential_savings = total_bottleneck_time * 0.5
178
+
179
+ # Calculate percentage of total
180
+ total_time = (
181
+ bottlenecks[0].time_cost / (bottlenecks[0].percent_total / 100) if bottlenecks else 1
182
+ )
183
+ percentage = (potential_savings / total_time * 100) if total_time > 0 else 0
184
+
185
+ return {
186
+ "potential_savings": potential_savings,
187
+ "percentage": percentage,
188
+ "assessment": self._assess_optimization_potential(percentage),
189
+ }
190
+
191
+ def _assess_optimization_potential(self, percentage: float) -> str:
192
+ """Assess optimization potential"""
193
+ if percentage > 30:
194
+ return "HIGH"
195
+ if percentage > 15:
196
+ return "MEDIUM"
197
+ if percentage > 5:
198
+ return "LOW"
199
+ return "MINIMAL"
200
+
201
+ def _generate_predictions(
202
+ self,
203
+ bottlenecks: list[Bottleneck],
204
+ trajectory: TrajectoryPrediction | None,
205
+ profiles: list[FunctionProfile],
206
+ ) -> list[dict[str, Any]]:
207
+ """Generate Level 4 predictions"""
208
+ predictions = []
209
+
210
+ # Prediction 1: Critical bottlenecks
211
+ critical_bottlenecks = [b for b in bottlenecks if b.severity == "CRITICAL"]
212
+ if critical_bottlenecks:
213
+ predictions.append(
214
+ {
215
+ "type": "performance_degradation_risk",
216
+ "severity": "critical",
217
+ "description": (
218
+ f"{len(critical_bottlenecks)} critical bottlenecks detected. "
219
+ f"In our experience, functions consuming >30% of execution time "
220
+ "cause timeout errors under load."
221
+ ),
222
+ "affected_functions": [b.function_name for b in critical_bottlenecks[:3]],
223
+ "prevention_steps": [b.fix_suggestion for b in critical_bottlenecks[:3]],
224
+ },
225
+ )
226
+
227
+ # Prediction 2: N+1 query pattern
228
+ n_plus_one = [b for b in bottlenecks if b.type.value == "n_plus_one"]
229
+ if n_plus_one:
230
+ predictions.append(
231
+ {
232
+ "type": "scalability_risk",
233
+ "severity": "high",
234
+ "description": (
235
+ f"{len(n_plus_one)} potential N+1 query patterns detected. "
236
+ "In our experience, these cause exponential slowdown as data grows."
237
+ ),
238
+ "prevention_steps": [
239
+ "Implement eager loading or query batching",
240
+ "Add database query monitoring",
241
+ "Review ORM usage patterns",
242
+ ],
243
+ },
244
+ )
245
+
246
+ # Prediction 3: Trajectory-based prediction
247
+ if trajectory and trajectory.trajectory_state in ["degrading", "critical"]:
248
+ predictions.append(
249
+ {
250
+ "type": "performance_trajectory",
251
+ "severity": "high" if trajectory.trajectory_state == "critical" else "medium",
252
+ "description": trajectory.overall_assessment,
253
+ "time_horizon": trajectory.estimated_time_to_critical,
254
+ "confidence": trajectory.confidence,
255
+ "prevention_steps": trajectory.recommendations,
256
+ },
257
+ )
258
+
259
+ return predictions
260
+
261
+ def _generate_recommendations(
262
+ self,
263
+ bottlenecks: list[Bottleneck],
264
+ trajectory: TrajectoryPrediction | None,
265
+ insights: dict[str, Any],
266
+ ) -> list[str]:
267
+ """Generate actionable recommendations"""
268
+ recommendations = []
269
+
270
+ # Pattern-based recommendations
271
+ dominant_pattern = insights.get("dominant_pattern", "balanced")
272
+
273
+ if dominant_pattern == "database_n_plus_one":
274
+ recommendations.append(
275
+ "⚠️ CRITICAL: Fix N+1 database queries with eager loading or batching",
276
+ )
277
+
278
+ if dominant_pattern == "io_bound":
279
+ recommendations.append(
280
+ "Optimize I/O operations: Use async I/O, connection pooling, or caching",
281
+ )
282
+
283
+ if dominant_pattern == "cpu_bound":
284
+ recommendations.append(
285
+ "Optimize CPU-heavy operations: Review algorithms, consider caching results",
286
+ )
287
+
288
+ # Bottleneck-specific recommendations
289
+ for bottleneck in bottlenecks[:3]: # Top 3
290
+ recommendations.append(
291
+ f"{bottleneck.severity}: {bottleneck.function_name} - {bottleneck.fix_suggestion}",
292
+ )
293
+
294
+ # Trajectory recommendations
295
+ if trajectory and trajectory.trajectory_state != "optimal":
296
+ recommendations.extend(trajectory.recommendations)
297
+
298
+ # Optimization potential
299
+ opt_potential = insights.get("optimization_potential", "LOW")
300
+ if opt_potential in ["HIGH", "MEDIUM"]:
301
+ recommendations.append(
302
+ f"{opt_potential} optimization potential - significant performance gains possible",
303
+ )
304
+
305
+ return list(set(recommendations)) # Deduplicate