empathy-framework 4.6.6__py3-none-any.whl → 4.7.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 (247) hide show
  1. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.0.dist-info}/METADATA +7 -6
  2. empathy_framework-4.7.0.dist-info/RECORD +354 -0
  3. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.0.dist-info}/top_level.txt +0 -2
  4. empathy_healthcare_plugin/monitors/monitoring/__init__.py +9 -9
  5. empathy_llm_toolkit/agent_factory/__init__.py +6 -6
  6. empathy_llm_toolkit/agent_factory/adapters/wizard_adapter.py +7 -10
  7. empathy_llm_toolkit/agents_md/__init__.py +22 -0
  8. empathy_llm_toolkit/agents_md/loader.py +218 -0
  9. empathy_llm_toolkit/agents_md/parser.py +271 -0
  10. empathy_llm_toolkit/agents_md/registry.py +307 -0
  11. empathy_llm_toolkit/commands/__init__.py +51 -0
  12. empathy_llm_toolkit/commands/context.py +375 -0
  13. empathy_llm_toolkit/commands/loader.py +301 -0
  14. empathy_llm_toolkit/commands/models.py +231 -0
  15. empathy_llm_toolkit/commands/parser.py +371 -0
  16. empathy_llm_toolkit/commands/registry.py +429 -0
  17. empathy_llm_toolkit/config/__init__.py +8 -8
  18. empathy_llm_toolkit/config/unified.py +3 -7
  19. empathy_llm_toolkit/context/__init__.py +22 -0
  20. empathy_llm_toolkit/context/compaction.py +455 -0
  21. empathy_llm_toolkit/context/manager.py +434 -0
  22. empathy_llm_toolkit/hooks/__init__.py +24 -0
  23. empathy_llm_toolkit/hooks/config.py +306 -0
  24. empathy_llm_toolkit/hooks/executor.py +289 -0
  25. empathy_llm_toolkit/hooks/registry.py +302 -0
  26. empathy_llm_toolkit/hooks/scripts/__init__.py +39 -0
  27. empathy_llm_toolkit/hooks/scripts/evaluate_session.py +201 -0
  28. empathy_llm_toolkit/hooks/scripts/first_time_init.py +285 -0
  29. empathy_llm_toolkit/hooks/scripts/pre_compact.py +207 -0
  30. empathy_llm_toolkit/hooks/scripts/session_end.py +183 -0
  31. empathy_llm_toolkit/hooks/scripts/session_start.py +163 -0
  32. empathy_llm_toolkit/hooks/scripts/suggest_compact.py +225 -0
  33. empathy_llm_toolkit/learning/__init__.py +30 -0
  34. empathy_llm_toolkit/learning/evaluator.py +438 -0
  35. empathy_llm_toolkit/learning/extractor.py +514 -0
  36. empathy_llm_toolkit/learning/storage.py +560 -0
  37. empathy_llm_toolkit/providers.py +4 -11
  38. empathy_llm_toolkit/security/__init__.py +17 -17
  39. empathy_llm_toolkit/utils/tokens.py +2 -5
  40. empathy_os/__init__.py +202 -70
  41. empathy_os/cache_monitor.py +5 -3
  42. empathy_os/cli/__init__.py +11 -55
  43. empathy_os/cli/__main__.py +29 -15
  44. empathy_os/cli/commands/inspection.py +21 -12
  45. empathy_os/cli/commands/memory.py +4 -12
  46. empathy_os/cli/commands/profiling.py +198 -0
  47. empathy_os/cli/commands/utilities.py +27 -7
  48. empathy_os/cli.py +28 -57
  49. empathy_os/cli_unified.py +525 -1164
  50. empathy_os/cost_tracker.py +9 -3
  51. empathy_os/dashboard/server.py +200 -2
  52. empathy_os/hot_reload/__init__.py +7 -7
  53. empathy_os/hot_reload/config.py +6 -7
  54. empathy_os/hot_reload/integration.py +35 -35
  55. empathy_os/hot_reload/reloader.py +57 -57
  56. empathy_os/hot_reload/watcher.py +28 -28
  57. empathy_os/hot_reload/websocket.py +2 -2
  58. empathy_os/memory/__init__.py +11 -4
  59. empathy_os/memory/claude_memory.py +1 -1
  60. empathy_os/memory/cross_session.py +8 -12
  61. empathy_os/memory/edges.py +6 -6
  62. empathy_os/memory/file_session.py +770 -0
  63. empathy_os/memory/graph.py +30 -30
  64. empathy_os/memory/nodes.py +6 -6
  65. empathy_os/memory/short_term.py +15 -9
  66. empathy_os/memory/unified.py +606 -140
  67. empathy_os/meta_workflows/agent_creator.py +3 -9
  68. empathy_os/meta_workflows/cli_meta_workflows.py +113 -53
  69. empathy_os/meta_workflows/form_engine.py +6 -18
  70. empathy_os/meta_workflows/intent_detector.py +64 -24
  71. empathy_os/meta_workflows/models.py +3 -1
  72. empathy_os/meta_workflows/pattern_learner.py +13 -31
  73. empathy_os/meta_workflows/plan_generator.py +55 -47
  74. empathy_os/meta_workflows/session_context.py +2 -3
  75. empathy_os/meta_workflows/workflow.py +20 -51
  76. empathy_os/models/cli.py +2 -2
  77. empathy_os/models/tasks.py +1 -2
  78. empathy_os/models/telemetry.py +4 -1
  79. empathy_os/models/token_estimator.py +3 -1
  80. empathy_os/monitoring/alerts.py +938 -9
  81. empathy_os/monitoring/alerts_cli.py +346 -183
  82. empathy_os/orchestration/execution_strategies.py +12 -29
  83. empathy_os/orchestration/pattern_learner.py +20 -26
  84. empathy_os/orchestration/real_tools.py +6 -15
  85. empathy_os/platform_utils.py +2 -1
  86. empathy_os/plugins/__init__.py +2 -2
  87. empathy_os/plugins/base.py +64 -64
  88. empathy_os/plugins/registry.py +32 -32
  89. empathy_os/project_index/index.py +49 -15
  90. empathy_os/project_index/models.py +1 -2
  91. empathy_os/project_index/reports.py +1 -1
  92. empathy_os/project_index/scanner.py +1 -0
  93. empathy_os/redis_memory.py +10 -7
  94. empathy_os/resilience/__init__.py +1 -1
  95. empathy_os/resilience/health.py +10 -10
  96. empathy_os/routing/__init__.py +7 -7
  97. empathy_os/routing/chain_executor.py +37 -37
  98. empathy_os/routing/classifier.py +36 -36
  99. empathy_os/routing/smart_router.py +40 -40
  100. empathy_os/routing/{wizard_registry.py → workflow_registry.py} +47 -47
  101. empathy_os/scaffolding/__init__.py +8 -8
  102. empathy_os/scaffolding/__main__.py +1 -1
  103. empathy_os/scaffolding/cli.py +28 -28
  104. empathy_os/socratic/__init__.py +3 -19
  105. empathy_os/socratic/ab_testing.py +25 -36
  106. empathy_os/socratic/blueprint.py +38 -38
  107. empathy_os/socratic/cli.py +34 -20
  108. empathy_os/socratic/collaboration.py +30 -28
  109. empathy_os/socratic/domain_templates.py +9 -1
  110. empathy_os/socratic/embeddings.py +17 -13
  111. empathy_os/socratic/engine.py +135 -70
  112. empathy_os/socratic/explainer.py +70 -60
  113. empathy_os/socratic/feedback.py +24 -19
  114. empathy_os/socratic/forms.py +15 -10
  115. empathy_os/socratic/generator.py +51 -35
  116. empathy_os/socratic/llm_analyzer.py +25 -23
  117. empathy_os/socratic/mcp_server.py +99 -159
  118. empathy_os/socratic/session.py +19 -13
  119. empathy_os/socratic/storage.py +98 -67
  120. empathy_os/socratic/success.py +38 -27
  121. empathy_os/socratic/visual_editor.py +51 -39
  122. empathy_os/socratic/web_ui.py +99 -66
  123. empathy_os/telemetry/cli.py +3 -1
  124. empathy_os/telemetry/usage_tracker.py +1 -3
  125. empathy_os/test_generator/__init__.py +3 -3
  126. empathy_os/test_generator/cli.py +28 -28
  127. empathy_os/test_generator/generator.py +64 -66
  128. empathy_os/test_generator/risk_analyzer.py +11 -11
  129. empathy_os/vscode_bridge.py +173 -0
  130. empathy_os/workflows/__init__.py +212 -120
  131. empathy_os/workflows/batch_processing.py +8 -24
  132. empathy_os/workflows/bug_predict.py +1 -1
  133. empathy_os/workflows/code_review.py +20 -5
  134. empathy_os/workflows/code_review_pipeline.py +13 -8
  135. empathy_os/workflows/keyboard_shortcuts/workflow.py +6 -2
  136. empathy_os/workflows/manage_documentation.py +1 -0
  137. empathy_os/workflows/orchestrated_health_check.py +6 -11
  138. empathy_os/workflows/orchestrated_release_prep.py +3 -3
  139. empathy_os/workflows/pr_review.py +18 -10
  140. empathy_os/workflows/progressive/__init__.py +2 -12
  141. empathy_os/workflows/progressive/cli.py +14 -37
  142. empathy_os/workflows/progressive/core.py +12 -12
  143. empathy_os/workflows/progressive/orchestrator.py +166 -144
  144. empathy_os/workflows/progressive/reports.py +22 -31
  145. empathy_os/workflows/progressive/telemetry.py +8 -14
  146. empathy_os/workflows/progressive/test_gen.py +29 -48
  147. empathy_os/workflows/progressive/workflow.py +31 -70
  148. empathy_os/workflows/release_prep.py +21 -6
  149. empathy_os/workflows/release_prep_crew.py +1 -0
  150. empathy_os/workflows/secure_release.py +13 -6
  151. empathy_os/workflows/security_audit.py +8 -3
  152. empathy_os/workflows/test_coverage_boost_crew.py +3 -2
  153. empathy_os/workflows/test_maintenance_crew.py +1 -0
  154. empathy_os/workflows/test_runner.py +16 -12
  155. empathy_software_plugin/SOFTWARE_PLUGIN_README.md +25 -703
  156. empathy_software_plugin/cli.py +0 -122
  157. coach_wizards/__init__.py +0 -45
  158. coach_wizards/accessibility_wizard.py +0 -91
  159. coach_wizards/api_wizard.py +0 -91
  160. coach_wizards/base_wizard.py +0 -209
  161. coach_wizards/cicd_wizard.py +0 -91
  162. coach_wizards/code_reviewer_README.md +0 -60
  163. coach_wizards/code_reviewer_wizard.py +0 -180
  164. coach_wizards/compliance_wizard.py +0 -91
  165. coach_wizards/database_wizard.py +0 -91
  166. coach_wizards/debugging_wizard.py +0 -91
  167. coach_wizards/documentation_wizard.py +0 -91
  168. coach_wizards/generate_wizards.py +0 -347
  169. coach_wizards/localization_wizard.py +0 -173
  170. coach_wizards/migration_wizard.py +0 -91
  171. coach_wizards/monitoring_wizard.py +0 -91
  172. coach_wizards/observability_wizard.py +0 -91
  173. coach_wizards/performance_wizard.py +0 -91
  174. coach_wizards/prompt_engineering_wizard.py +0 -661
  175. coach_wizards/refactoring_wizard.py +0 -91
  176. coach_wizards/scaling_wizard.py +0 -90
  177. coach_wizards/security_wizard.py +0 -92
  178. coach_wizards/testing_wizard.py +0 -91
  179. empathy_framework-4.6.6.dist-info/RECORD +0 -410
  180. empathy_llm_toolkit/wizards/__init__.py +0 -43
  181. empathy_llm_toolkit/wizards/base_wizard.py +0 -364
  182. empathy_llm_toolkit/wizards/customer_support_wizard.py +0 -190
  183. empathy_llm_toolkit/wizards/healthcare_wizard.py +0 -378
  184. empathy_llm_toolkit/wizards/patient_assessment_README.md +0 -64
  185. empathy_llm_toolkit/wizards/patient_assessment_wizard.py +0 -193
  186. empathy_llm_toolkit/wizards/technology_wizard.py +0 -209
  187. empathy_os/wizard_factory_cli.py +0 -170
  188. empathy_software_plugin/wizards/__init__.py +0 -42
  189. empathy_software_plugin/wizards/advanced_debugging_wizard.py +0 -395
  190. empathy_software_plugin/wizards/agent_orchestration_wizard.py +0 -511
  191. empathy_software_plugin/wizards/ai_collaboration_wizard.py +0 -503
  192. empathy_software_plugin/wizards/ai_context_wizard.py +0 -441
  193. empathy_software_plugin/wizards/ai_documentation_wizard.py +0 -503
  194. empathy_software_plugin/wizards/base_wizard.py +0 -288
  195. empathy_software_plugin/wizards/book_chapter_wizard.py +0 -519
  196. empathy_software_plugin/wizards/code_review_wizard.py +0 -604
  197. empathy_software_plugin/wizards/debugging/__init__.py +0 -50
  198. empathy_software_plugin/wizards/debugging/bug_risk_analyzer.py +0 -414
  199. empathy_software_plugin/wizards/debugging/config_loaders.py +0 -446
  200. empathy_software_plugin/wizards/debugging/fix_applier.py +0 -469
  201. empathy_software_plugin/wizards/debugging/language_patterns.py +0 -385
  202. empathy_software_plugin/wizards/debugging/linter_parsers.py +0 -470
  203. empathy_software_plugin/wizards/debugging/verification.py +0 -369
  204. empathy_software_plugin/wizards/enhanced_testing_wizard.py +0 -537
  205. empathy_software_plugin/wizards/memory_enhanced_debugging_wizard.py +0 -816
  206. empathy_software_plugin/wizards/multi_model_wizard.py +0 -501
  207. empathy_software_plugin/wizards/pattern_extraction_wizard.py +0 -422
  208. empathy_software_plugin/wizards/pattern_retriever_wizard.py +0 -400
  209. empathy_software_plugin/wizards/performance/__init__.py +0 -9
  210. empathy_software_plugin/wizards/performance/bottleneck_detector.py +0 -221
  211. empathy_software_plugin/wizards/performance/profiler_parsers.py +0 -278
  212. empathy_software_plugin/wizards/performance/trajectory_analyzer.py +0 -429
  213. empathy_software_plugin/wizards/performance_profiling_wizard.py +0 -305
  214. empathy_software_plugin/wizards/prompt_engineering_wizard.py +0 -425
  215. empathy_software_plugin/wizards/rag_pattern_wizard.py +0 -461
  216. empathy_software_plugin/wizards/security/__init__.py +0 -32
  217. empathy_software_plugin/wizards/security/exploit_analyzer.py +0 -290
  218. empathy_software_plugin/wizards/security/owasp_patterns.py +0 -241
  219. empathy_software_plugin/wizards/security/vulnerability_scanner.py +0 -604
  220. empathy_software_plugin/wizards/security_analysis_wizard.py +0 -322
  221. empathy_software_plugin/wizards/security_learning_wizard.py +0 -740
  222. empathy_software_plugin/wizards/tech_debt_wizard.py +0 -726
  223. empathy_software_plugin/wizards/testing/__init__.py +0 -27
  224. empathy_software_plugin/wizards/testing/coverage_analyzer.py +0 -459
  225. empathy_software_plugin/wizards/testing/quality_analyzer.py +0 -525
  226. empathy_software_plugin/wizards/testing/test_suggester.py +0 -533
  227. empathy_software_plugin/wizards/testing_wizard.py +0 -274
  228. wizards/__init__.py +0 -82
  229. wizards/admission_assessment_wizard.py +0 -644
  230. wizards/care_plan.py +0 -321
  231. wizards/clinical_assessment.py +0 -769
  232. wizards/discharge_planning.py +0 -77
  233. wizards/discharge_summary_wizard.py +0 -468
  234. wizards/dosage_calculation.py +0 -497
  235. wizards/incident_report_wizard.py +0 -454
  236. wizards/medication_reconciliation.py +0 -85
  237. wizards/nursing_assessment.py +0 -171
  238. wizards/patient_education.py +0 -654
  239. wizards/quality_improvement.py +0 -705
  240. wizards/sbar_report.py +0 -324
  241. wizards/sbar_wizard.py +0 -608
  242. wizards/shift_handoff_wizard.py +0 -535
  243. wizards/soap_note_wizard.py +0 -679
  244. wizards/treatment_plan.py +0 -15
  245. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.0.dist-info}/WHEEL +0 -0
  246. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.0.dist-info}/entry_points.txt +0 -0
  247. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,305 +0,0 @@
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(dict.fromkeys(recommendations)) # Deduplicate (preserves order)