empathy-framework 4.6.6__py3-none-any.whl → 4.7.1__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 (273) hide show
  1. empathy_framework-4.7.1.dist-info/METADATA +690 -0
  2. empathy_framework-4.7.1.dist-info/RECORD +379 -0
  3. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.1.dist-info}/top_level.txt +1 -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 2.py +173 -0
  130. empathy_os/vscode_bridge.py +173 -0
  131. empathy_os/workflows/__init__.py +212 -120
  132. empathy_os/workflows/batch_processing.py +8 -24
  133. empathy_os/workflows/bug_predict.py +1 -1
  134. empathy_os/workflows/code_review.py +20 -5
  135. empathy_os/workflows/code_review_pipeline.py +13 -8
  136. empathy_os/workflows/keyboard_shortcuts/workflow.py +6 -2
  137. empathy_os/workflows/manage_documentation.py +1 -0
  138. empathy_os/workflows/orchestrated_health_check.py +6 -11
  139. empathy_os/workflows/orchestrated_release_prep.py +3 -3
  140. empathy_os/workflows/pr_review.py +18 -10
  141. empathy_os/workflows/progressive/README 2.md +454 -0
  142. empathy_os/workflows/progressive/__init__ 2.py +92 -0
  143. empathy_os/workflows/progressive/__init__.py +2 -12
  144. empathy_os/workflows/progressive/cli 2.py +242 -0
  145. empathy_os/workflows/progressive/cli.py +14 -37
  146. empathy_os/workflows/progressive/core 2.py +488 -0
  147. empathy_os/workflows/progressive/core.py +12 -12
  148. empathy_os/workflows/progressive/orchestrator 2.py +701 -0
  149. empathy_os/workflows/progressive/orchestrator.py +166 -144
  150. empathy_os/workflows/progressive/reports 2.py +528 -0
  151. empathy_os/workflows/progressive/reports.py +22 -31
  152. empathy_os/workflows/progressive/telemetry 2.py +280 -0
  153. empathy_os/workflows/progressive/telemetry.py +8 -14
  154. empathy_os/workflows/progressive/test_gen 2.py +514 -0
  155. empathy_os/workflows/progressive/test_gen.py +29 -48
  156. empathy_os/workflows/progressive/workflow 2.py +628 -0
  157. empathy_os/workflows/progressive/workflow.py +31 -70
  158. empathy_os/workflows/release_prep.py +21 -6
  159. empathy_os/workflows/release_prep_crew.py +1 -0
  160. empathy_os/workflows/secure_release.py +13 -6
  161. empathy_os/workflows/security_audit.py +8 -3
  162. empathy_os/workflows/test_coverage_boost_crew.py +3 -2
  163. empathy_os/workflows/test_maintenance_crew.py +1 -0
  164. empathy_os/workflows/test_runner.py +16 -12
  165. empathy_software_plugin/SOFTWARE_PLUGIN_README.md +25 -703
  166. empathy_software_plugin/cli.py +0 -122
  167. patterns/README.md +119 -0
  168. patterns/__init__.py +95 -0
  169. patterns/behavior.py +298 -0
  170. patterns/code_review_memory.json +441 -0
  171. patterns/core.py +97 -0
  172. patterns/debugging.json +3763 -0
  173. patterns/empathy.py +268 -0
  174. patterns/health_check_memory.json +505 -0
  175. patterns/input.py +161 -0
  176. patterns/memory_graph.json +8 -0
  177. patterns/refactoring_memory.json +1113 -0
  178. patterns/registry.py +663 -0
  179. patterns/security_memory.json +8 -0
  180. patterns/structural.py +415 -0
  181. patterns/validation.py +194 -0
  182. coach_wizards/__init__.py +0 -45
  183. coach_wizards/accessibility_wizard.py +0 -91
  184. coach_wizards/api_wizard.py +0 -91
  185. coach_wizards/base_wizard.py +0 -209
  186. coach_wizards/cicd_wizard.py +0 -91
  187. coach_wizards/code_reviewer_README.md +0 -60
  188. coach_wizards/code_reviewer_wizard.py +0 -180
  189. coach_wizards/compliance_wizard.py +0 -91
  190. coach_wizards/database_wizard.py +0 -91
  191. coach_wizards/debugging_wizard.py +0 -91
  192. coach_wizards/documentation_wizard.py +0 -91
  193. coach_wizards/generate_wizards.py +0 -347
  194. coach_wizards/localization_wizard.py +0 -173
  195. coach_wizards/migration_wizard.py +0 -91
  196. coach_wizards/monitoring_wizard.py +0 -91
  197. coach_wizards/observability_wizard.py +0 -91
  198. coach_wizards/performance_wizard.py +0 -91
  199. coach_wizards/prompt_engineering_wizard.py +0 -661
  200. coach_wizards/refactoring_wizard.py +0 -91
  201. coach_wizards/scaling_wizard.py +0 -90
  202. coach_wizards/security_wizard.py +0 -92
  203. coach_wizards/testing_wizard.py +0 -91
  204. empathy_framework-4.6.6.dist-info/METADATA +0 -1597
  205. empathy_framework-4.6.6.dist-info/RECORD +0 -410
  206. empathy_llm_toolkit/wizards/__init__.py +0 -43
  207. empathy_llm_toolkit/wizards/base_wizard.py +0 -364
  208. empathy_llm_toolkit/wizards/customer_support_wizard.py +0 -190
  209. empathy_llm_toolkit/wizards/healthcare_wizard.py +0 -378
  210. empathy_llm_toolkit/wizards/patient_assessment_README.md +0 -64
  211. empathy_llm_toolkit/wizards/patient_assessment_wizard.py +0 -193
  212. empathy_llm_toolkit/wizards/technology_wizard.py +0 -209
  213. empathy_os/wizard_factory_cli.py +0 -170
  214. empathy_software_plugin/wizards/__init__.py +0 -42
  215. empathy_software_plugin/wizards/advanced_debugging_wizard.py +0 -395
  216. empathy_software_plugin/wizards/agent_orchestration_wizard.py +0 -511
  217. empathy_software_plugin/wizards/ai_collaboration_wizard.py +0 -503
  218. empathy_software_plugin/wizards/ai_context_wizard.py +0 -441
  219. empathy_software_plugin/wizards/ai_documentation_wizard.py +0 -503
  220. empathy_software_plugin/wizards/base_wizard.py +0 -288
  221. empathy_software_plugin/wizards/book_chapter_wizard.py +0 -519
  222. empathy_software_plugin/wizards/code_review_wizard.py +0 -604
  223. empathy_software_plugin/wizards/debugging/__init__.py +0 -50
  224. empathy_software_plugin/wizards/debugging/bug_risk_analyzer.py +0 -414
  225. empathy_software_plugin/wizards/debugging/config_loaders.py +0 -446
  226. empathy_software_plugin/wizards/debugging/fix_applier.py +0 -469
  227. empathy_software_plugin/wizards/debugging/language_patterns.py +0 -385
  228. empathy_software_plugin/wizards/debugging/linter_parsers.py +0 -470
  229. empathy_software_plugin/wizards/debugging/verification.py +0 -369
  230. empathy_software_plugin/wizards/enhanced_testing_wizard.py +0 -537
  231. empathy_software_plugin/wizards/memory_enhanced_debugging_wizard.py +0 -816
  232. empathy_software_plugin/wizards/multi_model_wizard.py +0 -501
  233. empathy_software_plugin/wizards/pattern_extraction_wizard.py +0 -422
  234. empathy_software_plugin/wizards/pattern_retriever_wizard.py +0 -400
  235. empathy_software_plugin/wizards/performance/__init__.py +0 -9
  236. empathy_software_plugin/wizards/performance/bottleneck_detector.py +0 -221
  237. empathy_software_plugin/wizards/performance/profiler_parsers.py +0 -278
  238. empathy_software_plugin/wizards/performance/trajectory_analyzer.py +0 -429
  239. empathy_software_plugin/wizards/performance_profiling_wizard.py +0 -305
  240. empathy_software_plugin/wizards/prompt_engineering_wizard.py +0 -425
  241. empathy_software_plugin/wizards/rag_pattern_wizard.py +0 -461
  242. empathy_software_plugin/wizards/security/__init__.py +0 -32
  243. empathy_software_plugin/wizards/security/exploit_analyzer.py +0 -290
  244. empathy_software_plugin/wizards/security/owasp_patterns.py +0 -241
  245. empathy_software_plugin/wizards/security/vulnerability_scanner.py +0 -604
  246. empathy_software_plugin/wizards/security_analysis_wizard.py +0 -322
  247. empathy_software_plugin/wizards/security_learning_wizard.py +0 -740
  248. empathy_software_plugin/wizards/tech_debt_wizard.py +0 -726
  249. empathy_software_plugin/wizards/testing/__init__.py +0 -27
  250. empathy_software_plugin/wizards/testing/coverage_analyzer.py +0 -459
  251. empathy_software_plugin/wizards/testing/quality_analyzer.py +0 -525
  252. empathy_software_plugin/wizards/testing/test_suggester.py +0 -533
  253. empathy_software_plugin/wizards/testing_wizard.py +0 -274
  254. wizards/__init__.py +0 -82
  255. wizards/admission_assessment_wizard.py +0 -644
  256. wizards/care_plan.py +0 -321
  257. wizards/clinical_assessment.py +0 -769
  258. wizards/discharge_planning.py +0 -77
  259. wizards/discharge_summary_wizard.py +0 -468
  260. wizards/dosage_calculation.py +0 -497
  261. wizards/incident_report_wizard.py +0 -454
  262. wizards/medication_reconciliation.py +0 -85
  263. wizards/nursing_assessment.py +0 -171
  264. wizards/patient_education.py +0 -654
  265. wizards/quality_improvement.py +0 -705
  266. wizards/sbar_report.py +0 -324
  267. wizards/sbar_wizard.py +0 -608
  268. wizards/shift_handoff_wizard.py +0 -535
  269. wizards/soap_note_wizard.py +0 -679
  270. wizards/treatment_plan.py +0 -15
  271. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.1.dist-info}/WHEEL +0 -0
  272. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.1.dist-info}/entry_points.txt +0 -0
  273. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.1.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)