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,378 +0,0 @@
1
- """Healthcare Wizard - HIPAA-Compliant AI Assistant
2
-
3
- ⚠️ DEPRECATED: This wizard is a basic example and is no longer actively maintained.
4
- For production healthcare applications, use the specialized healthcare plugin:
5
- pip install empathy-healthcare-wizards
6
-
7
- Or visit: https://healthcare.smartaimemory.com/
8
-
9
- Specialized wizard for healthcare applications with enhanced PHI protection,
10
- mandatory encryption, comprehensive audit logging, and HIPAA compliance features.
11
-
12
- Key Features:
13
- - Enhanced PHI/PII detection (10+ medical patterns)
14
- - Automatic de-identification before LLM processing
15
- - Mandatory AES-256-GCM encryption for all data
16
- - 90-day minimum retention (HIPAA §164.528)
17
- - Comprehensive audit trail (HIPAA §164.312(b))
18
- - Access control and permission enforcement
19
- - Automatic classification as SENSITIVE
20
-
21
- Reference:
22
- - HIPAA Security Rule (45 CFR §164.312)
23
- - HIPAA Privacy Rule (45 CFR §164.514)
24
- - HITECH Act requirements
25
-
26
- Copyright 2025 Smart AI Memory, LLC
27
- Licensed under Fair Source 0.9
28
- """
29
-
30
- import logging
31
- import warnings
32
- from typing import Any
33
-
34
- from empathy_llm_toolkit import EmpathyLLM
35
-
36
- from .base_wizard import BaseWizard, WizardConfig
37
-
38
- logger = logging.getLogger(__name__)
39
-
40
- # Deprecation warning
41
- warnings.warn(
42
- "HealthcareWizard is deprecated and will be removed in v5.0. "
43
- "Use the specialized healthcare plugin instead: "
44
- "pip install empathy-healthcare-wizards",
45
- DeprecationWarning,
46
- stacklevel=2,
47
- )
48
-
49
-
50
- # Enhanced PHI patterns for healthcare (beyond standard PII)
51
- HEALTHCARE_PHI_PATTERNS = [
52
- # Standard PII (enabled by default)
53
- "email",
54
- "phone",
55
- "ssn",
56
- "address",
57
- "credit_card",
58
- "ip_address",
59
- # Healthcare-specific PHI
60
- "mrn", # Medical Record Number
61
- "patient_id", # Patient identifier
62
- "dob", # Date of birth
63
- "insurance_id", # Insurance/policy numbers
64
- "provider_npi", # National Provider Identifier
65
- "cpt_code", # Medical procedure codes
66
- "icd_code", # Diagnosis codes
67
- "medication_name", # Medication names (optional, configurable)
68
- ]
69
-
70
-
71
- class HealthcareWizard(BaseWizard):
72
- """HIPAA-compliant healthcare AI assistant
73
-
74
- Implements defense-in-depth security for Protected Health Information (PHI):
75
- 1. Enhanced PHI detection and scrubbing
76
- 2. Secrets detection (API keys, passwords in medical software configs)
77
- 3. Mandatory encryption (AES-256-GCM)
78
- 4. Comprehensive audit logging
79
- 5. 90-day minimum retention
80
- 6. Access control enforcement
81
-
82
- Example:
83
- >>> from empathy_llm_toolkit import EmpathyLLM
84
- >>> from empathy_llm_toolkit.wizards import HealthcareWizard
85
- >>>
86
- >>> llm = EmpathyLLM(
87
- ... provider="anthropic",
88
- ... api_key=os.getenv("ANTHROPIC_API_KEY"),
89
- ... enable_security=True,
90
- ... )
91
- >>>
92
- >>> wizard = HealthcareWizard(llm)
93
- >>>
94
- >>> result = await wizard.process(
95
- ... user_input="Patient John Doe (MRN 123456) needs follow-up",
96
- ... user_id="doctor@hospital.com"
97
- ... )
98
- >>>
99
- >>> print(result['security_report']['phi_removed']) # PHI was scrubbed
100
-
101
- """
102
-
103
- def __init__(
104
- self,
105
- llm: EmpathyLLM,
106
- enable_medication_scrubbing: bool = False,
107
- enable_diagnosis_scrubbing: bool = False,
108
- custom_phi_patterns: list[str] | None = None,
109
- ):
110
- """Initialize HIPAA-compliant healthcare wizard
111
-
112
- Args:
113
- llm: EmpathyLLM instance (security should be enabled)
114
- enable_medication_scrubbing: Scrub medication names (may reduce context)
115
- enable_diagnosis_scrubbing: Scrub diagnosis codes (may reduce context)
116
- custom_phi_patterns: Additional facility-specific PHI patterns
117
-
118
- Note:
119
- For maximum HIPAA compliance, llm should be initialized with
120
- enable_security=True. This wizard enforces SENSITIVE classification
121
- and 90-day retention regardless of LLM security settings.
122
-
123
- """
124
- # Build PHI pattern list
125
- phi_patterns = HEALTHCARE_PHI_PATTERNS.copy()
126
-
127
- if not enable_medication_scrubbing:
128
- phi_patterns.remove("medication_name")
129
- if not enable_diagnosis_scrubbing:
130
- if "cpt_code" in phi_patterns:
131
- phi_patterns.remove("cpt_code")
132
- if "icd_code" in phi_patterns:
133
- phi_patterns.remove("icd_code")
134
-
135
- if custom_phi_patterns:
136
- phi_patterns.extend(custom_phi_patterns)
137
-
138
- # HIPAA-compliant configuration
139
- config = WizardConfig(
140
- name="Healthcare Assistant",
141
- description="HIPAA-compliant AI assistant for healthcare professionals",
142
- domain="healthcare",
143
- # Empathy configuration
144
- default_empathy_level=3, # Proactive - anticipates needs
145
- # Security configuration (HIPAA requirements)
146
- enable_security=True,
147
- pii_patterns=phi_patterns,
148
- enable_secrets_detection=True,
149
- block_on_secrets=True, # CRITICAL: Block if secrets detected
150
- # Audit configuration (HIPAA §164.312(b))
151
- audit_all_access=True, # Log every interaction
152
- retention_days=90, # HIPAA minimum for audit logs
153
- # Classification (HIPAA §164.514)
154
- default_classification="SENSITIVE", # PHI is always SENSITIVE
155
- auto_classify=True,
156
- )
157
-
158
- super().__init__(llm, config)
159
-
160
- # Verify security is enabled
161
- if not llm.enable_security:
162
- logger.warning(
163
- "HealthcareWizard initialized with security DISABLED. "
164
- "HIPAA compliance requires enable_security=True in EmpathyLLM.",
165
- )
166
-
167
- logger.info(
168
- f"HealthcareWizard initialized: {len(phi_patterns)} PHI patterns, "
169
- f"empathy level={config.default_empathy_level}, security={llm.enable_security}",
170
- )
171
-
172
- async def process(
173
- self,
174
- user_input: str,
175
- user_id: str,
176
- empathy_level: int | None = None,
177
- session_context: dict[str, Any] | None = None,
178
- patient_id: str | None = None,
179
- ) -> dict[str, Any]:
180
- """Process healthcare request with HIPAA compliance
181
-
182
- Args:
183
- user_input: Healthcare professional's message (may contain PHI)
184
- user_id: Healthcare provider identifier (email, NPI, etc.)
185
- empathy_level: Override default empathy level
186
- session_context: Session metadata (encounter ID, facility, etc.)
187
- patient_id: Patient identifier for audit trail (optional)
188
-
189
- Returns:
190
- Dict containing:
191
- - response: De-identified AI response
192
- - security_report: PHI scrubbing and security scan results
193
- - empathy_level: Level used
194
- - hipaa_compliance: Compliance status
195
- - audit_event_id: Audit trail event ID
196
-
197
- Raises:
198
- SecurityError: If secrets detected in input
199
- ValueError: If invalid user_id or parameters
200
-
201
- """
202
- # Enhance session context with patient ID for audit trail
203
- if patient_id:
204
- if session_context is None:
205
- session_context = {}
206
- session_context["patient_id"] = patient_id
207
-
208
- # Log PHI access
209
- self.logger.info(
210
- f"PHI access: user={user_id}, wizard={self.config.name}, "
211
- f"patient={patient_id}, audit=True",
212
- )
213
-
214
- # Process through base wizard (handles security pipeline)
215
- result = await super().process(
216
- user_input=user_input,
217
- user_id=user_id,
218
- empathy_level=empathy_level,
219
- session_context=session_context,
220
- )
221
-
222
- # Add HIPAA compliance metadata
223
- result["hipaa_compliance"] = {
224
- "phi_detected": result.get("security_report", {}).get("pii_count", 0) > 0,
225
- "phi_scrubbed": True if self.llm.enable_security else False,
226
- "encrypted": result.get("security_report", {}).get("encrypted", False),
227
- "audit_logged": True,
228
- "retention_days": self.config.retention_days,
229
- "classification": "SENSITIVE",
230
- }
231
-
232
- # Log completion
233
- self.logger.info(
234
- f"PHI processing complete: user={user_id}, "
235
- f"detected={result['hipaa_compliance']['phi_detected']}, "
236
- f"scrubbed={result['hipaa_compliance']['phi_scrubbed']}",
237
- )
238
-
239
- return result
240
-
241
- def _build_system_prompt(self, user_input: str = "") -> str:
242
- """Build HIPAA-aware system prompt for healthcare domain
243
-
244
- Includes:
245
- - Healthcare domain knowledge
246
- - HIPAA compliance reminders
247
- - Clinical communication best practices
248
- - Patient privacy emphasis
249
-
250
- Uses XML-enhanced prompts if enabled for improved reliability
251
- and reduced hallucinations (critical for HIPAA compliance).
252
- """
253
- # Check if XML prompts are enabled
254
- if self._is_xml_enabled():
255
- # Use XML-enhanced prompt for better structure and HIPAA compliance
256
- return self._render_xml_prompt(
257
- role="HIPAA-compliant AI healthcare assistant for clinical decision support",
258
- goal="Assist healthcare professionals with evidence-based clinical guidance while maintaining strict HIPAA compliance and patient safety",
259
- instructions=[
260
- "Provide clinical decision support based on current evidence-based guidelines",
261
- "Support clinical documentation following standardized formats (SBAR, SOAP, etc.)",
262
- "Help with care coordination and patient management workflows",
263
- "Use standardized medical terminology (ICD-10, CPT, SNOMED) where appropriate",
264
- "Acknowledge limitations and suggest specialist consultation when needed",
265
- "Maintain professional, empathetic communication",
266
- ],
267
- constraints=[
268
- "CRITICAL: All PHI is automatically de-identified - never request or display patient identifiers",
269
- "You are a decision support tool, NOT a replacement for professional clinical judgment",
270
- "NEVER diagnose or prescribe - support licensed healthcare providers who do",
271
- "In emergencies, direct to appropriate emergency services immediately",
272
- "Focus on clinical reasoning and evidence-based medicine",
273
- "Patient safety and privacy are paramount - all interactions logged for HIPAA compliance",
274
- ],
275
- input_type="clinical_query",
276
- input_payload=user_input if user_input else "[Healthcare professional query]",
277
- extra={
278
- "domain": "Healthcare / Clinical Medicine",
279
- "compliance": "HIPAA §164.312 (Security Rule), §164.514 (Privacy Rule)",
280
- "empathy_level": self.config.default_empathy_level,
281
- "phi_detection_enabled": len(self.config.pii_patterns),
282
- },
283
- )
284
- else:
285
- # Fallback to legacy plain text prompt
286
- return """You are a HIPAA-compliant AI healthcare assistant.
287
-
288
- **Domain**: Healthcare / Clinical Medicine
289
-
290
- **Your Role**:
291
- - Assist healthcare professionals with clinical decision support
292
- - Provide evidence-based medical information
293
- - Support clinical documentation and communication
294
- - Help with care coordination and patient management
295
-
296
- **HIPAA Compliance**:
297
- - All patient data (PHI) is automatically de-identified before you see it
298
- - Never request or display patient identifiers in your responses
299
- - Focus on clinical reasoning and medical knowledge
300
- - Maintain patient confidentiality at all times
301
-
302
- **Clinical Guidelines**:
303
- - Base recommendations on current evidence-based guidelines
304
- - Acknowledge limitations and suggest consulting specialists when appropriate
305
- - Use standardized medical terminology (ICD-10, CPT, SNOMED)
306
- - Follow clinical communication best practices (SBAR, SOAP, etc.)
307
-
308
- **Communication Style**:
309
- - Professional and empathetic
310
- - Clear and concise
311
- - Evidence-based
312
- - Action-oriented when appropriate
313
-
314
- **Important Disclaimers**:
315
- - You are a clinical decision support tool, not a replacement for professional judgment
316
- - Always defer to licensed healthcare providers for final decisions
317
- - In emergencies, direct users to appropriate emergency services
318
- - Do not diagnose or prescribe - support healthcare professionals who do
319
-
320
- Remember: Patient safety and privacy are paramount. Interactions are logged for HIPAA compliance.
321
- """
322
-
323
- def get_phi_patterns(self) -> list[str]:
324
- """Get list of PHI patterns being detected"""
325
- return self.config.pii_patterns.copy()
326
-
327
- def get_hipaa_compliance_status(self) -> dict[str, Any]:
328
- """Get HIPAA compliance status for this wizard
329
-
330
- Returns:
331
- Dict with compliance checks and recommendations
332
-
333
- """
334
- status: dict[str, Any] = {
335
- "compliant": True,
336
- "checks": {},
337
- "recommendations": [],
338
- }
339
-
340
- # Check 1: Security enabled
341
- status["checks"]["security_enabled"] = self.llm.enable_security
342
- if not self.llm.enable_security:
343
- status["compliant"] = False
344
- status["recommendations"].append(
345
- "Enable security in EmpathyLLM (enable_security=True) for HIPAA compliance",
346
- )
347
-
348
- # Check 2: Encryption for SENSITIVE data
349
- # Note: Encryption is handled by SecureMemDocsIntegration, not directly by EmpathyLLM
350
- status["checks"]["encryption_enabled"] = self.llm.enable_security
351
- if not status["checks"]["encryption_enabled"]:
352
- status["recommendations"].append(
353
- "Enable encryption for SENSITIVE data (HIPAA §164.312(a)(2)(iv))",
354
- )
355
-
356
- # Check 3: Audit logging
357
- status["checks"]["audit_logging"] = (
358
- self.llm.enable_security and self.config.audit_all_access
359
- )
360
- if not status["checks"]["audit_logging"]:
361
- status["compliant"] = False
362
- status["recommendations"].append(
363
- "Enable comprehensive audit logging (HIPAA §164.312(b))",
364
- )
365
-
366
- # Check 4: PHI detection
367
- status["checks"]["phi_detection"] = len(self.config.pii_patterns) >= 10
368
- if not status["checks"]["phi_detection"]:
369
- status["recommendations"].append("Enable comprehensive PHI detection patterns")
370
-
371
- # Check 5: Minimum retention
372
- status["checks"]["retention_policy"] = self.config.retention_days >= 90
373
- if not status["checks"]["retention_policy"]:
374
- status["recommendations"].append(
375
- "Set minimum 90-day retention for audit logs (HIPAA §164.528)",
376
- )
377
-
378
- return status
@@ -1,64 +0,0 @@
1
- # Patient Assessment Wizard
2
-
3
- **Domain:** healthcare
4
- **Type:** Wizard
5
- **Generated:** Pattern-Compose Methodology
6
-
7
- ## Overview
8
-
9
- Auto-generated wizard using proven patterns from the Empathy Framework.
10
-
11
- ## Patterns Used
12
-
13
- - **Empathy Level**: 0-4 empathy level configuration
14
- - **User Guidance**: Help text, examples, and prompts
15
- - **Linear Flow**: Step-by-step wizard with review and approval
16
- - **Structured Fields**: Predefined fields per step with validation
17
- - **Step Validation**: Ensure steps are completed in order
18
- - **User Approval**: Preview → Explicit Approval → Finalize
19
- - **Educational Banner**: Safety notices and educational content
20
- - **AI Enhancement**: Improve user input with AI
21
- - **Config Validation**: Validate wizard configuration on initialization
22
- - **Session-Based**: State management with session storage
23
-
24
- ## Usage
25
-
26
- ```python
27
- from wizards.patient_assessment_wizard import PatientAssessmentWizard
28
-
29
- wizard = PatientAssessmentWizard()
30
- result = await wizard.process(user_input="...")
31
- ```
32
-
33
- ## API Endpoints
34
-
35
- ```bash
36
- # Process with wizard
37
- POST /api/wizard/patient_assessment/process
38
- {
39
- "input": "your input here",
40
- "context": {}
41
- }
42
- ```
43
-
44
- ## Testing
45
-
46
- ```bash
47
- # Run unit tests
48
- pytest tests/unit/wizards/test_patient_assessment_wizard.py
49
-
50
- # Run with coverage
51
- pytest tests/unit/wizards/test_patient_assessment_wizard.py --cov
52
- ```
53
-
54
- ## Next Steps
55
-
56
- 1. Customize wizard logic as needed
57
- 2. Add domain-specific validation
58
- 3. Extend with additional features
59
- 4. Update tests for custom logic
60
-
61
- ---
62
-
63
- **Generated by:** Empathy Framework - Wizard Factory
64
- **Methodology:** Pattern-Compose
@@ -1,193 +0,0 @@
1
- """PatientAssessmentWizard - Generated by Pattern-Compose
2
-
3
- Domain: healthcare
4
- Patterns: empathy_level, user_guidance, linear_flow, structured_fields, step_validation, approval, educational_banner, ai_enhancement, config_validation, session_based
5
- Generated: Auto-generated by Empathy Framework
6
- """
7
-
8
- from datetime import datetime
9
- from typing import Any
10
- from uuid import uuid4
11
-
12
- from fastapi import APIRouter, HTTPException
13
- from pydantic import BaseModel
14
-
15
- router = APIRouter(
16
- prefix="/wizards/patient_assessment",
17
- tags=["wizards"],
18
- )
19
-
20
-
21
- # Request/Response Models
22
- class WizardRequest(BaseModel):
23
- """Request model for wizard."""
24
-
25
- input: str
26
- context: dict[str, Any] | None = None
27
-
28
-
29
- class WizardResponse(BaseModel):
30
- """Response model for wizard."""
31
-
32
- success: bool
33
- output: str
34
- wizard_id: str | None = None
35
- error: str | None = None
36
-
37
-
38
- # Session storage (Redis in production, memory for development)
39
- _wizard_sessions: dict[str, dict[str, Any]] = {}
40
-
41
-
42
- @router.post("/start")
43
- async def start_wizard():
44
- """Start patient_assessment wizard session.
45
-
46
- Returns wizard_id and first step configuration.
47
- """
48
- wizard_id = str(uuid4())
49
-
50
- session_data = {
51
- "wizard_id": wizard_id,
52
- "wizard_type": "patient_assessment",
53
- "current_step": 1,
54
- "total_steps": 5, # TODO: Adjust based on your wizard
55
- "collected_data": {},
56
- "created_at": datetime.now().isoformat(),
57
- }
58
-
59
- _wizard_sessions[wizard_id] = session_data
60
-
61
- return {
62
- "wizard_id": wizard_id,
63
- "current_step": 1,
64
- "total_steps": 5,
65
- "message": "Wizard started successfully",
66
- }
67
-
68
-
69
- @router.post("/{wizard_id}/step")
70
- async def submit_step(wizard_id: str, step_data: dict[str, Any]):
71
- """Submit data for current step.
72
-
73
- Validates step sequence and stores data.
74
- """
75
- if wizard_id not in _wizard_sessions:
76
- raise HTTPException(404, "Wizard session not found")
77
-
78
- session = _wizard_sessions[wizard_id]
79
- current_step = session["current_step"]
80
- total_steps = session["total_steps"]
81
-
82
- # Validate step number
83
- submitted_step = step_data.get("step", current_step)
84
- if submitted_step != current_step:
85
- raise HTTPException(422, f"Expected step {current_step}, got step {submitted_step}")
86
-
87
- # Store data
88
- session["collected_data"].update(step_data.get("data", {}))
89
- session["updated_at"] = datetime.now().isoformat()
90
-
91
- # Advance to next step
92
- if current_step < total_steps:
93
- session["current_step"] = current_step + 1
94
-
95
- return {
96
- "wizard_id": wizard_id,
97
- "current_step": session["current_step"],
98
- "total_steps": total_steps,
99
- "message": f"Step {current_step} completed",
100
- }
101
-
102
-
103
- @router.post("/{wizard_id}/preview")
104
- async def preview_report(wizard_id: str):
105
- """Generate preview without finalizing.
106
-
107
- Allows user to review before explicit approval.
108
- """
109
- if wizard_id not in _wizard_sessions:
110
- raise HTTPException(404, "Wizard session not found")
111
-
112
- session = _wizard_sessions[wizard_id]
113
-
114
- if session["current_step"] != session["total_steps"]:
115
- raise HTTPException(400, "Complete all steps before preview")
116
-
117
- # Generate preview
118
- preview = _generate_report(session["collected_data"])
119
- session["preview_report"] = preview
120
- session["preview_generated_at"] = datetime.now().isoformat()
121
-
122
- return {
123
- "preview": preview,
124
- "message": "Preview generated. Review and approve to finalize.",
125
- }
126
-
127
-
128
- @router.post("/{wizard_id}/save")
129
- async def save_report(wizard_id: str, approval: dict[str, Any]):
130
- """Finalize report with user approval.
131
-
132
- Requires preview generated and explicit user approval.
133
- """
134
- if wizard_id not in _wizard_sessions:
135
- raise HTTPException(404, "Wizard session not found")
136
-
137
- session = _wizard_sessions[wizard_id]
138
-
139
- # Verify preview generated
140
- if "preview_report" not in session:
141
- raise HTTPException(400, "Must generate preview before saving. Call /preview first.")
142
-
143
- # Verify user approval
144
- if not approval.get("user_approved", False):
145
- raise HTTPException(400, "User approval required. Set 'user_approved': true")
146
-
147
- # Mark as complete
148
- session["completed"] = True
149
- session["completed_at"] = datetime.now().isoformat()
150
- session["final_report"] = session["preview_report"]
151
-
152
- return {
153
- "wizard_id": wizard_id,
154
- "completed": True,
155
- "report": session["final_report"],
156
- "message": "Report finalized successfully",
157
- }
158
-
159
-
160
- @router.get("/{wizard_id}/report")
161
- async def get_report(wizard_id: str):
162
- """Retrieve completed report.
163
-
164
- Only available after wizard is completed.
165
- """
166
- if wizard_id not in _wizard_sessions:
167
- raise HTTPException(404, "Wizard session not found")
168
-
169
- session = _wizard_sessions[wizard_id]
170
-
171
- if not session.get("completed", False):
172
- raise HTTPException(422, "Wizard not yet completed")
173
-
174
- return {
175
- "wizard_id": wizard_id,
176
- "report": _generate_report(session["collected_data"]),
177
- }
178
-
179
-
180
- def _generate_report(collected_data: dict[str, Any]) -> dict[str, Any]:
181
- """Generate report from collected data.
182
-
183
- TODO: Customize report generation for your wizard.
184
- """
185
- return {
186
- "data": collected_data,
187
- "generated_at": datetime.now().isoformat(),
188
- "wizard_type": "patient_assessment",
189
- }
190
-
191
-
192
- # Export router
193
- __all__ = ["router"]