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
wizards/sbar_report.py DELETED
@@ -1,324 +0,0 @@
1
- """
2
- A wizard for generating SBAR (Situation, Background, Assessment, Recommendation) reports.
3
-
4
- This multi-step wizard guides users through creating a structured SBAR report,
5
- which is a standard communication tool in healthcare settings.
6
- """
7
-
8
- from datetime import datetime
9
-
10
- from fastapi import APIRouter, HTTPException, status
11
- from pydantic import BaseModel, Field
12
- from utils.api_responses import create_error_response, create_success_response
13
- from utils.logging import get_logger
14
-
15
- from services.openai_client import get_client
16
-
17
- router = APIRouter(prefix="/wizards/sbar-report", tags=["wizards"])
18
- logger = get_logger(__name__)
19
-
20
- # In-memory storage for wizard state. In production, use Redis or a database.
21
- wizard_sessions: dict[str, dict[str, str]] = {}
22
-
23
- # --- Pydantic Models for Wizard Steps ---
24
-
25
-
26
- class StartSbarResponse(BaseModel):
27
- wizard_id: str
28
- message: str
29
- next_step: str
30
-
31
-
32
- class SbarStepInput(BaseModel):
33
- wizard_id: str = Field(..., description="The unique ID for this wizard session.")
34
- text: str = Field(..., description="The text content for the current step.")
35
-
36
-
37
- class SbarStepResponse(BaseModel):
38
- wizard_id: str
39
- next_step: str
40
- message: str
41
-
42
-
43
- class GenerateSbarInput(BaseModel):
44
- wizard_id: str = Field(..., description="The unique ID for this wizard session.")
45
- recommendation: str = Field(..., description="The 'Recommendation' text.")
46
-
47
-
48
- class GenerateSbarResponse(BaseModel):
49
- wizard_id: str
50
- sbar_report: str
51
-
52
-
53
- class DirectSbarInput(BaseModel):
54
- patient_id: str = Field(..., description="Patient identifier")
55
- situation: str = Field(..., description="The 'Situation' text")
56
- background: str = Field(..., description="The 'Background' text")
57
- assessment: str = Field(..., description="The 'Assessment' text")
58
- recommendation: str = Field(..., description="The 'Recommendation' text")
59
- care_setting: str = Field(default="med-surg", description="Care setting context")
60
-
61
-
62
- class DirectSbarResponse(BaseModel):
63
- sbar_report: str
64
- care_setting: str
65
-
66
-
67
- # --- Wizard Endpoints ---
68
-
69
-
70
- @router.post("/start", response_model=StartSbarResponse, summary="Step 1: Start the SBAR wizard")
71
- async def start_sbar_wizard():
72
- """
73
- Initializes a new SBAR report wizard session and returns a unique `wizard_id`.
74
- """
75
- import uuid
76
-
77
- wizard_id = str(uuid.uuid4())
78
- wizard_sessions[wizard_id] = {}
79
- logger.info(f"Started SBAR wizard session: {wizard_id}")
80
-
81
- return create_success_response(
82
- {
83
- "wizard_id": wizard_id,
84
- "message": "SBAR wizard started. Please proceed to add the 'Situation'.",
85
- "next_step": "situation",
86
- }
87
- )
88
-
89
-
90
- def _update_step(wizard_id: str, step_name: str, text: str, next_step_name: str):
91
- """Helper function to update a step in the wizard session."""
92
- if wizard_id not in wizard_sessions:
93
- return create_error_response(
94
- "Wizard session not found.", status.HTTP_404_NOT_FOUND, "wizard_not_found"
95
- )
96
-
97
- wizard_sessions[wizard_id][step_name] = text
98
- logger.info(f"Updated SBAR session {wizard_id} with step: {step_name}")
99
-
100
- return create_success_response(
101
- {
102
- "wizard_id": wizard_id,
103
- "message": f"'{step_name.capitalize()}' received. Please proceed to add the '{next_step_name.capitalize()}'.",
104
- "next_step": next_step_name,
105
- }
106
- )
107
-
108
-
109
- @router.post("/situation", response_model=SbarStepResponse, summary="Step 2: Add Situation")
110
- async def add_situation(step_input: SbarStepInput):
111
- """Adds the **Situation** component to the SBAR report."""
112
- return _update_step(step_input.wizard_id, "situation", step_input.text, "background")
113
-
114
-
115
- @router.post("/background", response_model=SbarStepResponse, summary="Step 3: Add Background")
116
- async def add_background(step_input: SbarStepInput):
117
- """Adds the **Background** component to the SBAR report."""
118
- return _update_step(step_input.wizard_id, "background", step_input.text, "assessment")
119
-
120
-
121
- @router.post("/assessment", response_model=SbarStepResponse, summary="Step 4: Add Assessment")
122
- async def add_assessment(step_input: SbarStepInput):
123
- """Adds the **Assessment** component to the SBAR report."""
124
- return _update_step(step_input.wizard_id, "assessment", step_input.text, "recommendation")
125
-
126
-
127
- @router.post(
128
- "/generate",
129
- response_model=DirectSbarResponse,
130
- summary="Generate Complete SBAR Report (Direct)",
131
- )
132
- async def generate_sbar_report_direct(input_data: DirectSbarInput):
133
- """
134
- Generate a complete SBAR report directly from all provided components.
135
- This is a simplified endpoint that doesn't require wizard session management.
136
- """
137
- # Validate that all required fields are present
138
- if not all(
139
- [
140
- input_data.situation,
141
- input_data.background,
142
- input_data.assessment,
143
- input_data.recommendation,
144
- ]
145
- ):
146
- return create_error_response(
147
- "All SBAR components (situation, background, assessment, recommendation) are required.",
148
- status.HTTP_400_BAD_REQUEST,
149
- "missing_required_fields",
150
- )
151
-
152
- # Build context-aware prompt based on care setting
153
- care_setting_context = {
154
- "icu": "critical care setting with focus on hemodynamic stability and ventilator management",
155
- "emergency": "emergency department with focus on rapid assessment and triage",
156
- "home-health": "home health setting with focus on patient/caregiver education and safety",
157
- "med-surg": "medical-surgical unit with focus on routine monitoring and care coordination",
158
- }.get(input_data.care_setting, "general clinical setting")
159
-
160
- prompt = f"""
161
- Format the following clinical information into a clear, professional SBAR report for a {care_setting_context}.
162
-
163
- Use these exact headings:
164
- - SITUATION
165
- - BACKGROUND
166
- - ASSESSMENT
167
- - RECOMMENDATION
168
-
169
- Format the report professionally with proper spacing and organization suitable for clinical handoff.
170
- Patient ID: {input_data.patient_id}
171
-
172
- Situation: {input_data.situation}
173
-
174
- Background: {input_data.background}
175
-
176
- Assessment: {input_data.assessment}
177
-
178
- Recommendation: {input_data.recommendation}
179
- """
180
-
181
- try:
182
- client = get_client()
183
- if not client:
184
- # Fallback: Generate basic SBAR report without AI enhancement
185
- logger.warning(
186
- "OpenAI client not available - generating basic SBAR report without AI formatting"
187
- )
188
- sbar_report = f"""SBAR Report - Patient ID: {input_data.patient_id}
189
- Care Setting: {care_setting_context.upper()}
190
-
191
- SITUATION
192
- {input_data.situation}
193
-
194
- BACKGROUND
195
- {input_data.background}
196
-
197
- ASSESSMENT
198
- {input_data.assessment}
199
-
200
- RECOMMENDATION
201
- {input_data.recommendation}
202
-
203
- Generated: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
204
- Note: This report was generated without AI enhancement. Configure OPENAI_API_KEY for enhanced formatting.
205
- """
206
- return {"sbar_report": sbar_report, "care_setting": input_data.care_setting}
207
-
208
- response = client.chat.completions.create(
209
- model="gpt-4o-mini",
210
- messages=[
211
- {
212
- "role": "system",
213
- "content": f"You are an expert nursing assistant specializing in clinical communication in a {care_setting_context}. Format SBAR reports clearly and professionally.",
214
- },
215
- {"role": "user", "content": prompt},
216
- ],
217
- temperature=0.3, # Lower temperature for more consistent formatting
218
- )
219
- sbar_report = response.choices[0].message.content
220
- logger.info(
221
- f"Successfully generated SBAR report for patient {input_data.patient_id} in {input_data.care_setting} setting"
222
- )
223
-
224
- return {"sbar_report": sbar_report, "care_setting": input_data.care_setting}
225
- except Exception as e:
226
- logger.error(f"SBAR report generation failed: {e}", exc_info=True)
227
- raise HTTPException(
228
- status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
229
- detail=f"Failed to generate SBAR report: {str(e)}",
230
- )
231
-
232
-
233
- @router.post(
234
- "/generate-wizard",
235
- response_model=GenerateSbarResponse,
236
- summary="Step 5: Add Recommendation and Generate Report (Wizard)",
237
- )
238
- async def generate_sbar_report_wizard(step_input: GenerateSbarInput):
239
- """
240
- Adds the final **Recommendation** component and generates the complete,
241
- formatted SBAR report using an AI model. (Wizard session-based flow)
242
- """
243
- wizard_id = step_input.wizard_id
244
- if wizard_id not in wizard_sessions:
245
- return create_error_response(
246
- "Wizard session not found.", status.HTTP_404_NOT_FOUND, "wizard_not_found"
247
- )
248
-
249
- session_data = wizard_sessions[wizard_id]
250
- session_data["recommendation"] = step_input.recommendation
251
-
252
- # Verify all parts are present
253
- required_parts = ["situation", "background", "assessment", "recommendation"]
254
- if not all(part in session_data for part in required_parts):
255
- missing = [part for part in required_parts if part not in session_data]
256
- return create_error_response(
257
- f"Cannot generate report. Missing parts: {', '.join(missing)}",
258
- status.HTTP_400_BAD_REQUEST,
259
- "missing_sbar_parts",
260
- )
261
-
262
- prompt = f"""
263
- Format the following clinical information into a clear and concise SBAR report.
264
- Use clear headings for each section (Situation, Background, Assessment, Recommendation).
265
- Ensure the language is professional and suitable for a clinical handoff.
266
-
267
- Situation: {session_data['situation']}
268
- Background: {session_data['background']}
269
- Assessment: {session_data['assessment']}
270
- Recommendation: {session_data['recommendation']}
271
- """
272
-
273
- try:
274
- client = get_client()
275
- if not client:
276
- # Fallback: Generate basic SBAR report without AI enhancement
277
- logger.warning(
278
- f"OpenAI client not available for session {wizard_id} - generating basic SBAR report"
279
- )
280
- sbar_report = f"""SBAR Report
281
-
282
- SITUATION
283
- {session_data['situation']}
284
-
285
- BACKGROUND
286
- {session_data['background']}
287
-
288
- ASSESSMENT
289
- {session_data['assessment']}
290
-
291
- RECOMMENDATION
292
- {session_data['recommendation']}
293
-
294
- Generated: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
295
- Note: This report was generated without AI enhancement. Configure OPENAI_API_KEY for enhanced formatting.
296
- """
297
- # Clean up the session
298
- del wizard_sessions[wizard_id]
299
-
300
- return {"wizard_id": wizard_id, "sbar_report": sbar_report}
301
-
302
- response = client.chat.completions.create(
303
- model="gpt-4o-mini",
304
- messages=[
305
- {
306
- "role": "system",
307
- "content": "You are an expert nursing assistant specializing in clinical communication.",
308
- },
309
- {"role": "user", "content": prompt},
310
- ],
311
- )
312
- sbar_report = response.choices[0].message.content
313
- logger.info(f"Successfully generated SBAR report for session {wizard_id}")
314
-
315
- # Clean up the session
316
- del wizard_sessions[wizard_id]
317
-
318
- return {"wizard_id": wizard_id, "sbar_report": sbar_report}
319
- except Exception as e:
320
- logger.error(f"SBAR report generation failed for session {wizard_id}: {e}", exc_info=True)
321
- raise HTTPException(
322
- status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
323
- detail=f"Failed to generate SBAR report: {str(e)}",
324
- )