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,364 +0,0 @@
1
- """Base Wizard - Foundation for all EmpathyLLM wizards
2
-
3
- Provides common functionality for security-aware AI assistants with domain-specific
4
- configurations and integrated privacy controls.
5
-
6
- Copyright 2025 Smart AI Memory, LLC
7
- Licensed under Fair Source 0.9
8
- """
9
-
10
- import logging
11
- from dataclasses import dataclass, field
12
- from typing import Any
13
-
14
- from empathy_llm_toolkit import EmpathyLLM
15
- from empathy_llm_toolkit.claude_memory import ClaudeMemoryConfig
16
-
17
- logger = logging.getLogger(__name__)
18
-
19
-
20
- @dataclass
21
- class WizardConfig:
22
- """Configuration for an Empathy wizard"""
23
-
24
- # Wizard identity
25
- name: str
26
- description: str
27
- domain: str # healthcare, finance, legal, general, etc.
28
-
29
- # Empathy level (0-4)
30
- default_empathy_level: int = 2
31
-
32
- # Security configuration
33
- enable_security: bool = False
34
- pii_patterns: list[str] = field(default_factory=list)
35
- enable_secrets_detection: bool = False
36
- block_on_secrets: bool = True
37
-
38
- # Audit configuration
39
- audit_all_access: bool = False
40
- retention_days: int = 180
41
-
42
- # Classification
43
- default_classification: str = "INTERNAL" # PUBLIC, INTERNAL, SENSITIVE
44
- auto_classify: bool = True
45
-
46
- # Memory configuration
47
- enable_memory: bool = False
48
- memory_config: ClaudeMemoryConfig | None = None
49
-
50
- # XML-enhanced prompts (Phase 4)
51
- xml_prompts_enabled: bool = True # Enable by default for better Claude API performance
52
- xml_schema_version: str = "1.0"
53
- enforce_xml_response: bool = False # Require XML-structured responses
54
-
55
-
56
- class BaseWizard:
57
- """Base class for all Empathy LLM wizards
58
-
59
- Provides:
60
- - Integration with EmpathyLLM
61
- - Security pipeline configuration
62
- - Domain-specific prompting
63
- - Audit logging
64
- - Session management
65
- """
66
-
67
- def __init__(
68
- self,
69
- llm: EmpathyLLM,
70
- config: WizardConfig,
71
- ):
72
- """Initialize wizard with LLM and configuration
73
-
74
- Args:
75
- llm: EmpathyLLM instance (with or without security enabled)
76
- config: Wizard configuration
77
-
78
- """
79
- self.llm = llm
80
- self.config = config
81
- self.logger = logging.getLogger(f"wizard.{config.name}")
82
-
83
- # Validate configuration
84
- self._validate_config()
85
-
86
- def _validate_config(self):
87
- """Validate wizard configuration"""
88
- if not 0 <= self.config.default_empathy_level <= 4:
89
- raise ValueError(f"Empathy level must be 0-4, got {self.config.default_empathy_level}")
90
-
91
- if self.config.default_classification not in ["PUBLIC", "INTERNAL", "SENSITIVE"]:
92
- raise ValueError(f"Invalid classification: {self.config.default_classification}")
93
-
94
- async def process(
95
- self,
96
- user_input: str,
97
- user_id: str,
98
- empathy_level: int | None = None,
99
- session_context: dict[str, Any] | None = None,
100
- ) -> dict[str, Any]:
101
- """Process user input through the wizard
102
-
103
- Args:
104
- user_input: User's message or request
105
- user_id: Identifier for the user
106
- empathy_level: Override default empathy level (optional)
107
- session_context: Additional context for the conversation
108
-
109
- Returns:
110
- Dictionary containing:
111
- - response: AI response
112
- - empathy_level: Level used
113
- - security_report: Security scan results (if enabled)
114
- - metadata: Additional wizard metadata
115
-
116
- """
117
- level = empathy_level if empathy_level is not None else self.config.default_empathy_level
118
-
119
- self.logger.info(
120
- "processing_request: wizard=%s user_id=%s empathy_level=%s",
121
- self.config.name,
122
- user_id,
123
- level,
124
- )
125
-
126
- # Build system prompt with domain knowledge
127
- system_prompt = self._build_system_prompt()
128
-
129
- # Add session context if provided
130
- if session_context:
131
- context_str = self._format_context(session_context)
132
- user_input = f"{context_str}\n\n{user_input}"
133
-
134
- # Process through EmpathyLLM (with security if enabled)
135
- # Note: EmpathyLLM uses 'force_level' and 'context' parameters
136
- context_dict = session_context.copy() if session_context else {}
137
- context_dict["system_prompt"] = system_prompt
138
-
139
- result = await self.llm.interact(
140
- user_id=user_id,
141
- user_input=user_input,
142
- force_level=level,
143
- context=context_dict,
144
- )
145
-
146
- # Enhance result with wizard metadata
147
- result["wizard"] = {
148
- "name": self.config.name,
149
- "domain": self.config.domain,
150
- "empathy_level": level,
151
- }
152
-
153
- return result
154
-
155
- def _build_system_prompt(self) -> str:
156
- """Build domain-specific system prompt
157
-
158
- Override in subclasses to add domain knowledge
159
- """
160
- return f"""You are an AI assistant specialized in {self.config.domain}.
161
-
162
- Description: {self.config.description}
163
-
164
- Guidelines:
165
- - Provide accurate, helpful responses
166
- - Be empathetic and understanding
167
- - Follow domain best practices
168
- - Maintain user privacy and confidentiality
169
- """
170
-
171
- def _format_context(self, context: dict[str, Any]) -> str:
172
- """Format session context for inclusion in prompt"""
173
- lines = ["Context:"]
174
- for key, value in context.items():
175
- lines.append(f"- {key}: {value}")
176
- return "\n".join(lines)
177
-
178
- # =========================================================================
179
- # XML-Enhanced Prompt Support (Phase 4)
180
- # =========================================================================
181
-
182
- def _is_xml_enabled(self) -> bool:
183
- """Check if XML prompts are enabled for this wizard."""
184
- return self.config.xml_prompts_enabled
185
-
186
- def _render_xml_prompt(
187
- self,
188
- role: str,
189
- goal: str,
190
- instructions: list[str],
191
- constraints: list[str],
192
- input_type: str,
193
- input_payload: str,
194
- extra: dict[str, Any] | None = None,
195
- ) -> str:
196
- """Render a wizard prompt using XML structure.
197
-
198
- This method follows Claude API best practices for XML-enhanced prompts,
199
- providing clearer structure and better performance.
200
-
201
- Args:
202
- role: The role/expertise for the AI (e.g., "registered nurse")
203
- goal: The primary objective of the task
204
- instructions: Step-by-step instructions list
205
- constraints: Guidelines and boundaries list
206
- input_type: Type of input data (e.g., "patient_data", "code", "document")
207
- input_payload: The actual input content
208
- extra: Additional context fields (optional)
209
-
210
- Returns:
211
- XML-formatted prompt string
212
-
213
- Example:
214
- prompt = self._render_xml_prompt(
215
- role="HIPAA compliance specialist",
216
- goal="Review patient handoff for completeness",
217
- instructions=[
218
- "Check for required SBAR elements",
219
- "Verify patient identifiers present",
220
- "Confirm allergies documented",
221
- ],
222
- constraints=[
223
- "Follow Joint Commission standards",
224
- "Maintain professional medical terminology",
225
- ],
226
- input_type="shift_handoff",
227
- input_payload=json.dumps(handoff_data),
228
- )
229
-
230
- """
231
- if not self._is_xml_enabled():
232
- # Fallback to plain text if XML disabled
233
- return self._render_plain_prompt(
234
- role,
235
- goal,
236
- instructions,
237
- constraints,
238
- input_payload,
239
- )
240
-
241
- parts = [f'<task role="{role}" version="{self.config.xml_schema_version}">']
242
- parts.append(f" <goal>{goal}</goal>")
243
- parts.append("")
244
-
245
- if instructions:
246
- parts.append(" <instructions>")
247
- for i, inst in enumerate(instructions, 1):
248
- parts.append(f" {i}. {inst}")
249
- parts.append(" </instructions>")
250
- parts.append("")
251
-
252
- if constraints:
253
- parts.append(" <constraints>")
254
- for constraint in constraints:
255
- parts.append(f" - {constraint}")
256
- parts.append(" </constraints>")
257
- parts.append("")
258
-
259
- # Add extra context if provided
260
- if extra:
261
- parts.append(" <context>")
262
- for key, value in extra.items():
263
- parts.append(f" <{key}>{value}</{key}>")
264
- parts.append(" </context>")
265
- parts.append("")
266
-
267
- parts.append(f' <input type="{input_type}">')
268
- parts.append(f" {input_payload}")
269
- parts.append(" </input>")
270
- parts.append("</task>")
271
-
272
- return "\n".join(parts)
273
-
274
- def _render_plain_prompt(
275
- self,
276
- role: str,
277
- goal: str,
278
- instructions: list[str],
279
- constraints: list[str],
280
- input_payload: str,
281
- ) -> str:
282
- """Render plain text prompt (fallback for non-XML mode).
283
-
284
- Args:
285
- role: The role/expertise for the AI
286
- goal: The primary objective
287
- instructions: Step-by-step instructions
288
- constraints: Guidelines and boundaries
289
- input_payload: The input content
290
-
291
- Returns:
292
- Plain text formatted prompt
293
-
294
- """
295
- parts = [f"Role: {role}"]
296
- parts.append(f"Goal: {goal}")
297
- parts.append("")
298
-
299
- if instructions:
300
- parts.append("Instructions:")
301
- for i, inst in enumerate(instructions, 1):
302
- parts.append(f"{i}. {inst}")
303
- parts.append("")
304
-
305
- if constraints:
306
- parts.append("Guidelines:")
307
- for constraint in constraints:
308
- parts.append(f"- {constraint}")
309
- parts.append("")
310
-
311
- parts.append("Input:")
312
- parts.append(input_payload)
313
-
314
- return "\n".join(parts)
315
-
316
- def _parse_xml_response(self, response: str) -> dict[str, Any]:
317
- """Parse XML-structured response if enforcement is enabled.
318
-
319
- Args:
320
- response: The LLM response text
321
-
322
- Returns:
323
- Dictionary with parsed fields or raw response
324
-
325
- Note:
326
- This is a basic parser. For production use, consider
327
- using the full XmlResponseParser from empathy_os.prompts.
328
-
329
- """
330
- if not self.config.enforce_xml_response:
331
- return {"xml_parsed": False, "content": response}
332
-
333
- # Basic XML parsing - extract common tags
334
- import re
335
-
336
- result: dict[str, Any] = {"xml_parsed": True}
337
-
338
- # Extract <summary> tag
339
- summary_match = re.search(r"<summary>(.*?)</summary>", response, re.DOTALL)
340
- if summary_match:
341
- result["summary"] = summary_match.group(1).strip()
342
-
343
- # Extract <recommendation> tags
344
- recommendations = re.findall(r"<recommendation>(.*?)</recommendation>", response, re.DOTALL)
345
- if recommendations:
346
- result["recommendations"] = [r.strip() for r in recommendations]
347
-
348
- # Extract <finding> tags
349
- findings = re.findall(r"<finding>(.*?)</finding>", response, re.DOTALL)
350
- if findings:
351
- result["findings"] = [f.strip() for f in findings]
352
-
353
- # Always include raw content
354
- result["content"] = response
355
-
356
- return result
357
-
358
- def get_config(self) -> WizardConfig:
359
- """Get wizard configuration"""
360
- return self.config
361
-
362
- def get_name(self) -> str:
363
- """Get wizard name"""
364
- return self.config.name
@@ -1,190 +0,0 @@
1
- """Customer Support Wizard - Privacy-Compliant AI Assistant
2
-
3
- Specialized wizard for customer support with PII protection, ticket management,
4
- and comprehensive audit logging.
5
-
6
- Key Features:
7
- - Customer PII detection and protection
8
- - Automatic de-identification before LLM processing
9
- - Ticket and case number tracking
10
- - Comprehensive audit trail
11
- - Support escalation handling
12
- - Automatic classification as INTERNAL
13
-
14
- Copyright 2025 Smart AI Memory, LLC
15
- Licensed under Fair Source 0.9
16
- """
17
-
18
- import logging
19
-
20
- from empathy_llm_toolkit import EmpathyLLM
21
-
22
- from .base_wizard import BaseWizard, WizardConfig
23
-
24
- logger = logging.getLogger(__name__)
25
-
26
-
27
- # Customer support PII patterns
28
- SUPPORT_PII_PATTERNS = [
29
- # Standard PII
30
- "email",
31
- "phone",
32
- "address",
33
- "credit_card",
34
- "ip_address",
35
- # Support-specific
36
- "customer_id",
37
- "ticket_number",
38
- "order_number",
39
- "account_number",
40
- ]
41
-
42
-
43
- class CustomerSupportWizard(BaseWizard):
44
- """Privacy-compliant customer support AI assistant
45
-
46
- Implements customer PII protection for support operations:
47
- 1. Customer PII detection and scrubbing
48
- 2. Ticket tracking and management
49
- 3. Encryption for sensitive customer data
50
- 4. Comprehensive audit logging
51
- 5. 2-year retention
52
- 6. Access control enforcement
53
-
54
- Example:
55
- >>> from empathy_llm_toolkit import EmpathyLLM
56
- >>> from empathy_llm_toolkit.wizards import CustomerSupportWizard
57
- >>>
58
- >>> llm = EmpathyLLM(
59
- ... provider="anthropic",
60
- ... api_key=os.getenv("ANTHROPIC_API_KEY"),
61
- ... enable_security=True,
62
- ... )
63
- >>>
64
- >>> wizard = CustomerSupportWizard(llm)
65
- >>>
66
- >>> result = await wizard.process(
67
- ... user_input="Help resolve customer issue with order #12345",
68
- ... user_id="agent@company.com"
69
- ... )
70
-
71
- """
72
-
73
- def __init__(
74
- self,
75
- llm: EmpathyLLM,
76
- custom_pii_patterns: list[str] | None = None,
77
- ):
78
- """Initialize customer support wizard
79
-
80
- Args:
81
- llm: EmpathyLLM instance (security recommended)
82
- custom_pii_patterns: Additional company-specific PII patterns
83
-
84
- """
85
- pii_patterns = SUPPORT_PII_PATTERNS.copy()
86
-
87
- if custom_pii_patterns:
88
- pii_patterns.extend(custom_pii_patterns)
89
-
90
- config = WizardConfig(
91
- name="Customer Support Assistant",
92
- description="Privacy-compliant AI assistant for customer support teams",
93
- domain="customer_support",
94
- default_empathy_level=4, # Anticipatory - predicts customer needs
95
- enable_security=True,
96
- pii_patterns=pii_patterns,
97
- enable_secrets_detection=True,
98
- block_on_secrets=True,
99
- audit_all_access=True,
100
- retention_days=730, # 2 years
101
- default_classification="INTERNAL",
102
- auto_classify=True,
103
- )
104
-
105
- super().__init__(llm, config)
106
-
107
- logger.info(
108
- f"CustomerSupportWizard initialized: {len(pii_patterns)} PII patterns, "
109
- f"empathy level={config.default_empathy_level}, security={llm.enable_security}",
110
- )
111
-
112
- def _build_system_prompt(self, user_input: str = "") -> str:
113
- """Build customer support system prompt
114
-
115
- Uses XML-enhanced prompts if enabled for improved consistency
116
- and reduced hallucinations in customer-facing scenarios.
117
- """
118
- # Check if XML prompts are enabled
119
- if self._is_xml_enabled():
120
- # Use XML-enhanced prompt for better structure
121
- return self._render_xml_prompt(
122
- role="privacy-compliant AI customer support assistant for help desk operations",
123
- goal="Assist support agents with customer inquiries, issue resolution, and excellent service delivery",
124
- instructions=[
125
- "Assist support agents with customer inquiries and technical issues",
126
- "Provide product knowledge, troubleshooting steps, and resolution guidance",
127
- "Help draft clear, empathetic customer communications",
128
- "Support ticket management, resolution tracking, and escalation decisions",
129
- "Recommend solutions based on company policies and best practices",
130
- "Maintain professional yet friendly communication style",
131
- ],
132
- constraints=[
133
- "CRITICAL: All customer PII automatically de-identified - never request or display customer names, emails, accounts",
134
- "You are a support tool assisting agents, NOT a replacement for human judgment",
135
- "CANNOT make refund, replacement, or policy exception decisions autonomously",
136
- "Always defer to supervisors for complex, sensitive, or high-value cases",
137
- "Prioritize customer satisfaction while following company policies",
138
- "Customer privacy paramount - all interactions logged for audit",
139
- ],
140
- input_type="support_query",
141
- input_payload=user_input if user_input else "[Support agent query]",
142
- extra={
143
- "domain": "Customer Support / Help Desk",
144
- "empathy_level": self.config.default_empathy_level,
145
- "pii_patterns_enabled": len(self.config.pii_patterns),
146
- "retention_days": self.config.retention_days,
147
- },
148
- )
149
- else:
150
- # Fallback to legacy plain text prompt
151
- return """You are a privacy-compliant AI customer support assistant.
152
-
153
- **Domain**: Customer Support / Help Desk
154
-
155
- **Your Role**:
156
- - Assist support agents with customer inquiries and issues
157
- - Provide product knowledge and troubleshooting guidance
158
- - Help draft customer communications
159
- - Support ticket resolution and escalation
160
-
161
- **Customer Privacy**:
162
- - All customer PII is automatically de-identified before you see it
163
- - Never request or display customer names, emails, or account numbers
164
- - Maintain customer confidentiality at all times
165
- - Focus on issue resolution and service excellence
166
-
167
- **Support Guidelines**:
168
- - Prioritize customer satisfaction and issue resolution
169
- - Provide clear, actionable solutions
170
- - Escalate complex issues appropriately
171
- - Follow company policies and procedures
172
-
173
- **Communication Style**:
174
- - Empathetic and patient
175
- - Clear and helpful
176
- - Solution-oriented
177
- - Professional yet friendly
178
-
179
- **Important Disclaimers**:
180
- - You are a support tool to assist agents, not a replacement for human judgment
181
- - Cannot make refund, replacement, or policy exception decisions
182
- - Always defer to supervisors for complex or sensitive cases
183
- - Recommendations should be reviewed by support agents
184
-
185
- Remember: Customer satisfaction and privacy are paramount. Interactions are logged.
186
- """
187
-
188
- def get_pii_patterns(self) -> list[str]:
189
- """Get list of customer support PII patterns being detected"""
190
- return self.config.pii_patterns.copy()