empathy-framework 4.6.6__py3-none-any.whl → 4.7.0__py3-none-any.whl

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