empathy-framework 3.2.3__py3-none-any.whl → 3.8.2__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.
- coach_wizards/__init__.py +11 -12
- coach_wizards/accessibility_wizard.py +12 -12
- coach_wizards/api_wizard.py +12 -12
- coach_wizards/base_wizard.py +26 -20
- coach_wizards/cicd_wizard.py +15 -13
- coach_wizards/code_reviewer_README.md +60 -0
- coach_wizards/code_reviewer_wizard.py +180 -0
- coach_wizards/compliance_wizard.py +12 -12
- coach_wizards/database_wizard.py +12 -12
- coach_wizards/debugging_wizard.py +12 -12
- coach_wizards/documentation_wizard.py +12 -12
- coach_wizards/generate_wizards.py +1 -2
- coach_wizards/localization_wizard.py +101 -19
- coach_wizards/migration_wizard.py +12 -12
- coach_wizards/monitoring_wizard.py +12 -12
- coach_wizards/observability_wizard.py +12 -12
- coach_wizards/performance_wizard.py +12 -12
- coach_wizards/prompt_engineering_wizard.py +22 -25
- coach_wizards/refactoring_wizard.py +12 -12
- coach_wizards/scaling_wizard.py +12 -12
- coach_wizards/security_wizard.py +12 -12
- coach_wizards/testing_wizard.py +12 -12
- {empathy_framework-3.2.3.dist-info → empathy_framework-3.8.2.dist-info}/METADATA +513 -58
- empathy_framework-3.8.2.dist-info/RECORD +333 -0
- empathy_framework-3.8.2.dist-info/entry_points.txt +22 -0
- {empathy_framework-3.2.3.dist-info → empathy_framework-3.8.2.dist-info}/top_level.txt +5 -1
- empathy_healthcare_plugin/__init__.py +1 -2
- empathy_healthcare_plugin/monitors/__init__.py +9 -0
- empathy_healthcare_plugin/monitors/clinical_protocol_monitor.py +315 -0
- empathy_healthcare_plugin/monitors/monitoring/__init__.py +44 -0
- empathy_healthcare_plugin/monitors/monitoring/protocol_checker.py +300 -0
- empathy_healthcare_plugin/monitors/monitoring/protocol_loader.py +214 -0
- empathy_healthcare_plugin/monitors/monitoring/sensor_parsers.py +306 -0
- empathy_healthcare_plugin/monitors/monitoring/trajectory_analyzer.py +389 -0
- empathy_llm_toolkit/__init__.py +7 -7
- empathy_llm_toolkit/agent_factory/__init__.py +53 -0
- empathy_llm_toolkit/agent_factory/adapters/__init__.py +85 -0
- empathy_llm_toolkit/agent_factory/adapters/autogen_adapter.py +312 -0
- empathy_llm_toolkit/agent_factory/adapters/crewai_adapter.py +454 -0
- empathy_llm_toolkit/agent_factory/adapters/haystack_adapter.py +298 -0
- empathy_llm_toolkit/agent_factory/adapters/langchain_adapter.py +362 -0
- empathy_llm_toolkit/agent_factory/adapters/langgraph_adapter.py +333 -0
- empathy_llm_toolkit/agent_factory/adapters/native.py +228 -0
- empathy_llm_toolkit/agent_factory/adapters/wizard_adapter.py +426 -0
- empathy_llm_toolkit/agent_factory/base.py +305 -0
- empathy_llm_toolkit/agent_factory/crews/__init__.py +67 -0
- empathy_llm_toolkit/agent_factory/crews/code_review.py +1113 -0
- empathy_llm_toolkit/agent_factory/crews/health_check.py +1246 -0
- empathy_llm_toolkit/agent_factory/crews/refactoring.py +1128 -0
- empathy_llm_toolkit/agent_factory/crews/security_audit.py +1018 -0
- empathy_llm_toolkit/agent_factory/decorators.py +286 -0
- empathy_llm_toolkit/agent_factory/factory.py +558 -0
- empathy_llm_toolkit/agent_factory/framework.py +192 -0
- empathy_llm_toolkit/agent_factory/memory_integration.py +324 -0
- empathy_llm_toolkit/agent_factory/resilient.py +320 -0
- empathy_llm_toolkit/claude_memory.py +14 -15
- empathy_llm_toolkit/cli/__init__.py +8 -0
- empathy_llm_toolkit/cli/sync_claude.py +487 -0
- empathy_llm_toolkit/code_health.py +177 -22
- empathy_llm_toolkit/config/__init__.py +29 -0
- empathy_llm_toolkit/config/unified.py +295 -0
- empathy_llm_toolkit/contextual_patterns.py +11 -12
- empathy_llm_toolkit/core.py +51 -49
- empathy_llm_toolkit/git_pattern_extractor.py +16 -12
- empathy_llm_toolkit/levels.py +6 -13
- empathy_llm_toolkit/pattern_confidence.py +14 -18
- empathy_llm_toolkit/pattern_resolver.py +10 -12
- empathy_llm_toolkit/pattern_summary.py +13 -11
- empathy_llm_toolkit/providers.py +194 -28
- empathy_llm_toolkit/routing/__init__.py +32 -0
- empathy_llm_toolkit/routing/model_router.py +362 -0
- empathy_llm_toolkit/security/IMPLEMENTATION_SUMMARY.md +413 -0
- empathy_llm_toolkit/security/PHASE2_COMPLETE.md +384 -0
- empathy_llm_toolkit/security/PHASE2_SECRETS_DETECTOR_COMPLETE.md +271 -0
- empathy_llm_toolkit/security/QUICK_REFERENCE.md +316 -0
- empathy_llm_toolkit/security/README.md +262 -0
- empathy_llm_toolkit/security/__init__.py +62 -0
- empathy_llm_toolkit/security/audit_logger.py +929 -0
- empathy_llm_toolkit/security/audit_logger_example.py +152 -0
- empathy_llm_toolkit/security/pii_scrubber.py +640 -0
- empathy_llm_toolkit/security/secrets_detector.py +678 -0
- empathy_llm_toolkit/security/secrets_detector_example.py +304 -0
- empathy_llm_toolkit/security/secure_memdocs.py +1192 -0
- empathy_llm_toolkit/security/secure_memdocs_example.py +278 -0
- empathy_llm_toolkit/session_status.py +18 -20
- empathy_llm_toolkit/state.py +20 -21
- empathy_llm_toolkit/wizards/__init__.py +38 -0
- empathy_llm_toolkit/wizards/base_wizard.py +364 -0
- empathy_llm_toolkit/wizards/customer_support_wizard.py +190 -0
- empathy_llm_toolkit/wizards/healthcare_wizard.py +362 -0
- empathy_llm_toolkit/wizards/patient_assessment_README.md +64 -0
- empathy_llm_toolkit/wizards/patient_assessment_wizard.py +193 -0
- empathy_llm_toolkit/wizards/technology_wizard.py +194 -0
- empathy_os/__init__.py +76 -77
- empathy_os/adaptive/__init__.py +13 -0
- empathy_os/adaptive/task_complexity.py +127 -0
- empathy_os/{monitoring.py → agent_monitoring.py} +27 -27
- empathy_os/cache/__init__.py +117 -0
- empathy_os/cache/base.py +166 -0
- empathy_os/cache/dependency_manager.py +253 -0
- empathy_os/cache/hash_only.py +248 -0
- empathy_os/cache/hybrid.py +390 -0
- empathy_os/cache/storage.py +282 -0
- empathy_os/cli.py +515 -109
- empathy_os/cli_unified.py +189 -42
- empathy_os/config/__init__.py +63 -0
- empathy_os/config/xml_config.py +239 -0
- empathy_os/config.py +87 -36
- empathy_os/coordination.py +48 -54
- empathy_os/core.py +90 -99
- empathy_os/cost_tracker.py +20 -23
- empathy_os/dashboard/__init__.py +15 -0
- empathy_os/dashboard/server.py +743 -0
- empathy_os/discovery.py +9 -11
- empathy_os/emergence.py +20 -21
- empathy_os/exceptions.py +18 -30
- empathy_os/feedback_loops.py +27 -30
- empathy_os/levels.py +31 -34
- empathy_os/leverage_points.py +27 -28
- empathy_os/logging_config.py +11 -12
- empathy_os/memory/__init__.py +195 -0
- empathy_os/memory/claude_memory.py +466 -0
- empathy_os/memory/config.py +224 -0
- empathy_os/memory/control_panel.py +1298 -0
- empathy_os/memory/edges.py +179 -0
- empathy_os/memory/graph.py +567 -0
- empathy_os/memory/long_term.py +1194 -0
- empathy_os/memory/nodes.py +179 -0
- empathy_os/memory/redis_bootstrap.py +540 -0
- empathy_os/memory/security/__init__.py +31 -0
- empathy_os/memory/security/audit_logger.py +930 -0
- empathy_os/memory/security/pii_scrubber.py +640 -0
- empathy_os/memory/security/secrets_detector.py +678 -0
- empathy_os/memory/short_term.py +2119 -0
- empathy_os/memory/storage/__init__.py +15 -0
- empathy_os/memory/summary_index.py +583 -0
- empathy_os/memory/unified.py +619 -0
- empathy_os/metrics/__init__.py +12 -0
- empathy_os/metrics/prompt_metrics.py +190 -0
- empathy_os/models/__init__.py +136 -0
- empathy_os/models/__main__.py +13 -0
- empathy_os/models/cli.py +655 -0
- empathy_os/models/empathy_executor.py +354 -0
- empathy_os/models/executor.py +252 -0
- empathy_os/models/fallback.py +671 -0
- empathy_os/models/provider_config.py +563 -0
- empathy_os/models/registry.py +382 -0
- empathy_os/models/tasks.py +302 -0
- empathy_os/models/telemetry.py +548 -0
- empathy_os/models/token_estimator.py +378 -0
- empathy_os/models/validation.py +274 -0
- empathy_os/monitoring/__init__.py +52 -0
- empathy_os/monitoring/alerts.py +23 -0
- empathy_os/monitoring/alerts_cli.py +268 -0
- empathy_os/monitoring/multi_backend.py +271 -0
- empathy_os/monitoring/otel_backend.py +363 -0
- empathy_os/optimization/__init__.py +19 -0
- empathy_os/optimization/context_optimizer.py +272 -0
- empathy_os/pattern_library.py +29 -28
- empathy_os/persistence.py +30 -34
- empathy_os/platform_utils.py +261 -0
- empathy_os/plugins/__init__.py +28 -0
- empathy_os/plugins/base.py +361 -0
- empathy_os/plugins/registry.py +268 -0
- empathy_os/project_index/__init__.py +30 -0
- empathy_os/project_index/cli.py +335 -0
- empathy_os/project_index/crew_integration.py +430 -0
- empathy_os/project_index/index.py +425 -0
- empathy_os/project_index/models.py +501 -0
- empathy_os/project_index/reports.py +473 -0
- empathy_os/project_index/scanner.py +538 -0
- empathy_os/prompts/__init__.py +61 -0
- empathy_os/prompts/config.py +77 -0
- empathy_os/prompts/context.py +177 -0
- empathy_os/prompts/parser.py +285 -0
- empathy_os/prompts/registry.py +313 -0
- empathy_os/prompts/templates.py +208 -0
- empathy_os/redis_config.py +144 -58
- empathy_os/redis_memory.py +53 -56
- empathy_os/resilience/__init__.py +56 -0
- empathy_os/resilience/circuit_breaker.py +256 -0
- empathy_os/resilience/fallback.py +179 -0
- empathy_os/resilience/health.py +300 -0
- empathy_os/resilience/retry.py +209 -0
- empathy_os/resilience/timeout.py +135 -0
- empathy_os/routing/__init__.py +43 -0
- empathy_os/routing/chain_executor.py +433 -0
- empathy_os/routing/classifier.py +217 -0
- empathy_os/routing/smart_router.py +234 -0
- empathy_os/routing/wizard_registry.py +307 -0
- empathy_os/templates.py +12 -11
- empathy_os/trust/__init__.py +28 -0
- empathy_os/trust/circuit_breaker.py +579 -0
- empathy_os/trust_building.py +44 -36
- empathy_os/validation/__init__.py +19 -0
- empathy_os/validation/xml_validator.py +281 -0
- empathy_os/wizard_factory_cli.py +170 -0
- empathy_os/{workflows.py → workflow_commands.py} +123 -31
- empathy_os/workflows/__init__.py +360 -0
- empathy_os/workflows/base.py +1660 -0
- empathy_os/workflows/bug_predict.py +962 -0
- empathy_os/workflows/code_review.py +960 -0
- empathy_os/workflows/code_review_adapters.py +310 -0
- empathy_os/workflows/code_review_pipeline.py +720 -0
- empathy_os/workflows/config.py +600 -0
- empathy_os/workflows/dependency_check.py +648 -0
- empathy_os/workflows/document_gen.py +1069 -0
- empathy_os/workflows/documentation_orchestrator.py +1205 -0
- empathy_os/workflows/health_check.py +679 -0
- empathy_os/workflows/keyboard_shortcuts/__init__.py +39 -0
- empathy_os/workflows/keyboard_shortcuts/generators.py +386 -0
- empathy_os/workflows/keyboard_shortcuts/parsers.py +414 -0
- empathy_os/workflows/keyboard_shortcuts/prompts.py +295 -0
- empathy_os/workflows/keyboard_shortcuts/schema.py +193 -0
- empathy_os/workflows/keyboard_shortcuts/workflow.py +505 -0
- empathy_os/workflows/manage_documentation.py +804 -0
- empathy_os/workflows/new_sample_workflow1.py +146 -0
- empathy_os/workflows/new_sample_workflow1_README.md +150 -0
- empathy_os/workflows/perf_audit.py +687 -0
- empathy_os/workflows/pr_review.py +748 -0
- empathy_os/workflows/progress.py +445 -0
- empathy_os/workflows/progress_server.py +322 -0
- empathy_os/workflows/refactor_plan.py +693 -0
- empathy_os/workflows/release_prep.py +808 -0
- empathy_os/workflows/research_synthesis.py +404 -0
- empathy_os/workflows/secure_release.py +585 -0
- empathy_os/workflows/security_adapters.py +297 -0
- empathy_os/workflows/security_audit.py +1046 -0
- empathy_os/workflows/step_config.py +234 -0
- empathy_os/workflows/test5.py +125 -0
- empathy_os/workflows/test5_README.md +158 -0
- empathy_os/workflows/test_gen.py +1855 -0
- empathy_os/workflows/test_lifecycle.py +526 -0
- empathy_os/workflows/test_maintenance.py +626 -0
- empathy_os/workflows/test_maintenance_cli.py +590 -0
- empathy_os/workflows/test_maintenance_crew.py +821 -0
- empathy_os/workflows/xml_enhanced_crew.py +285 -0
- empathy_software_plugin/__init__.py +1 -2
- empathy_software_plugin/cli/__init__.py +120 -0
- empathy_software_plugin/cli/inspect.py +362 -0
- empathy_software_plugin/cli.py +35 -26
- empathy_software_plugin/plugin.py +4 -8
- empathy_software_plugin/wizards/__init__.py +42 -0
- empathy_software_plugin/wizards/advanced_debugging_wizard.py +392 -0
- empathy_software_plugin/wizards/agent_orchestration_wizard.py +511 -0
- empathy_software_plugin/wizards/ai_collaboration_wizard.py +503 -0
- empathy_software_plugin/wizards/ai_context_wizard.py +441 -0
- empathy_software_plugin/wizards/ai_documentation_wizard.py +503 -0
- empathy_software_plugin/wizards/base_wizard.py +288 -0
- empathy_software_plugin/wizards/book_chapter_wizard.py +519 -0
- empathy_software_plugin/wizards/code_review_wizard.py +606 -0
- empathy_software_plugin/wizards/debugging/__init__.py +50 -0
- empathy_software_plugin/wizards/debugging/bug_risk_analyzer.py +414 -0
- empathy_software_plugin/wizards/debugging/config_loaders.py +442 -0
- empathy_software_plugin/wizards/debugging/fix_applier.py +469 -0
- empathy_software_plugin/wizards/debugging/language_patterns.py +383 -0
- empathy_software_plugin/wizards/debugging/linter_parsers.py +470 -0
- empathy_software_plugin/wizards/debugging/verification.py +369 -0
- empathy_software_plugin/wizards/enhanced_testing_wizard.py +537 -0
- empathy_software_plugin/wizards/memory_enhanced_debugging_wizard.py +816 -0
- empathy_software_plugin/wizards/multi_model_wizard.py +501 -0
- empathy_software_plugin/wizards/pattern_extraction_wizard.py +422 -0
- empathy_software_plugin/wizards/pattern_retriever_wizard.py +400 -0
- empathy_software_plugin/wizards/performance/__init__.py +9 -0
- empathy_software_plugin/wizards/performance/bottleneck_detector.py +221 -0
- empathy_software_plugin/wizards/performance/profiler_parsers.py +278 -0
- empathy_software_plugin/wizards/performance/trajectory_analyzer.py +429 -0
- empathy_software_plugin/wizards/performance_profiling_wizard.py +305 -0
- empathy_software_plugin/wizards/prompt_engineering_wizard.py +425 -0
- empathy_software_plugin/wizards/rag_pattern_wizard.py +461 -0
- empathy_software_plugin/wizards/security/__init__.py +32 -0
- empathy_software_plugin/wizards/security/exploit_analyzer.py +290 -0
- empathy_software_plugin/wizards/security/owasp_patterns.py +241 -0
- empathy_software_plugin/wizards/security/vulnerability_scanner.py +604 -0
- empathy_software_plugin/wizards/security_analysis_wizard.py +322 -0
- empathy_software_plugin/wizards/security_learning_wizard.py +740 -0
- empathy_software_plugin/wizards/tech_debt_wizard.py +726 -0
- empathy_software_plugin/wizards/testing/__init__.py +27 -0
- empathy_software_plugin/wizards/testing/coverage_analyzer.py +459 -0
- empathy_software_plugin/wizards/testing/quality_analyzer.py +531 -0
- empathy_software_plugin/wizards/testing/test_suggester.py +533 -0
- empathy_software_plugin/wizards/testing_wizard.py +274 -0
- hot_reload/README.md +473 -0
- hot_reload/__init__.py +62 -0
- hot_reload/config.py +84 -0
- hot_reload/integration.py +228 -0
- hot_reload/reloader.py +298 -0
- hot_reload/watcher.py +179 -0
- hot_reload/websocket.py +176 -0
- scaffolding/README.md +589 -0
- scaffolding/__init__.py +35 -0
- scaffolding/__main__.py +14 -0
- scaffolding/cli.py +240 -0
- test_generator/__init__.py +38 -0
- test_generator/__main__.py +14 -0
- test_generator/cli.py +226 -0
- test_generator/generator.py +325 -0
- test_generator/risk_analyzer.py +216 -0
- workflow_patterns/__init__.py +33 -0
- workflow_patterns/behavior.py +249 -0
- workflow_patterns/core.py +76 -0
- workflow_patterns/output.py +99 -0
- workflow_patterns/registry.py +255 -0
- workflow_patterns/structural.py +288 -0
- workflow_scaffolding/__init__.py +11 -0
- workflow_scaffolding/__main__.py +12 -0
- workflow_scaffolding/cli.py +206 -0
- workflow_scaffolding/generator.py +265 -0
- agents/code_inspection/patterns/inspection/recurring_B112.json +0 -18
- agents/code_inspection/patterns/inspection/recurring_F541.json +0 -16
- agents/code_inspection/patterns/inspection/recurring_FORMAT.json +0 -25
- agents/code_inspection/patterns/inspection/recurring_bug_20250822_def456.json +0 -16
- agents/code_inspection/patterns/inspection/recurring_bug_20250915_abc123.json +0 -16
- agents/code_inspection/patterns/inspection/recurring_bug_20251212_3c5b9951.json +0 -16
- agents/code_inspection/patterns/inspection/recurring_bug_20251212_97c0f72f.json +0 -16
- agents/code_inspection/patterns/inspection/recurring_bug_20251212_a0871d53.json +0 -16
- agents/code_inspection/patterns/inspection/recurring_bug_20251212_a9b6ec41.json +0 -16
- agents/code_inspection/patterns/inspection/recurring_bug_null_001.json +0 -16
- agents/code_inspection/patterns/inspection/recurring_builtin.json +0 -16
- agents/compliance_anticipation_agent.py +0 -1427
- agents/epic_integration_wizard.py +0 -541
- agents/trust_building_behaviors.py +0 -891
- empathy_framework-3.2.3.dist-info/RECORD +0 -104
- empathy_framework-3.2.3.dist-info/entry_points.txt +0 -7
- empathy_llm_toolkit/htmlcov/status.json +0 -1
- empathy_llm_toolkit/security/htmlcov/status.json +0 -1
- {empathy_framework-3.2.3.dist-info → empathy_framework-3.8.2.dist-info}/WHEEL +0 -0
- {empathy_framework-3.2.3.dist-info → empathy_framework-3.8.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
"""Trajectory Analyzer (Level 4)
|
|
2
|
+
|
|
3
|
+
Analyzes vital sign trends to predict patient deterioration BEFORE critical.
|
|
4
|
+
|
|
5
|
+
This is Level 4 Anticipatory Empathy - alerting before the patient meets full crisis criteria.
|
|
6
|
+
|
|
7
|
+
Copyright 2025 Smart AI Memory, LLC
|
|
8
|
+
Licensed under Fair Source 0.9
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from dataclasses import dataclass
|
|
12
|
+
from typing import Any
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@dataclass
|
|
16
|
+
class VitalTrend:
|
|
17
|
+
"""Trend analysis for a single vital sign"""
|
|
18
|
+
|
|
19
|
+
parameter: str
|
|
20
|
+
current_value: float
|
|
21
|
+
previous_value: float
|
|
22
|
+
change: float
|
|
23
|
+
change_percent: float
|
|
24
|
+
direction: str # "increasing", "decreasing", "stable"
|
|
25
|
+
rate_of_change: float # units per hour
|
|
26
|
+
concerning: bool
|
|
27
|
+
reasoning: str
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@dataclass
|
|
31
|
+
class TrajectoryPrediction:
|
|
32
|
+
"""Prediction of patient trajectory.
|
|
33
|
+
|
|
34
|
+
This is Level 4 - predicting BEFORE criteria met.
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
trajectory_state: str # "stable", "improving", "concerning", "critical"
|
|
38
|
+
estimated_time_to_critical: str | None
|
|
39
|
+
vital_trends: list[VitalTrend]
|
|
40
|
+
overall_assessment: str
|
|
41
|
+
confidence: float
|
|
42
|
+
recommendations: list[str]
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class TrajectoryAnalyzer:
|
|
46
|
+
"""Analyzes vital sign trajectory to predict deterioration.
|
|
47
|
+
|
|
48
|
+
This implements Level 4 Anticipatory Empathy.
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
def __init__(self):
|
|
52
|
+
# Define normal ranges
|
|
53
|
+
self.normal_ranges = {
|
|
54
|
+
"hr": (60, 100),
|
|
55
|
+
"systolic_bp": (90, 140),
|
|
56
|
+
"diastolic_bp": (60, 90),
|
|
57
|
+
"respiratory_rate": (12, 20),
|
|
58
|
+
"temp_f": (97.0, 99.5),
|
|
59
|
+
"o2_sat": (95, 100),
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
# Define concerning rates of change
|
|
63
|
+
self.concerning_rates = {
|
|
64
|
+
"hr": 15, # bpm increase over 2 hours
|
|
65
|
+
"systolic_bp": 20, # mmHg decrease
|
|
66
|
+
"respiratory_rate": 5, # breaths/min increase
|
|
67
|
+
"temp_f": 2.0, # degrees increase
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
def analyze_trajectory(
|
|
71
|
+
self,
|
|
72
|
+
current_data: dict[str, float],
|
|
73
|
+
historical_data: list[dict[str, Any]],
|
|
74
|
+
) -> TrajectoryPrediction:
|
|
75
|
+
"""Analyze patient trajectory from historical vitals.
|
|
76
|
+
|
|
77
|
+
Args:
|
|
78
|
+
current_data: Current vital signs
|
|
79
|
+
historical_data: List of previous readings (last 6-12 hours)
|
|
80
|
+
|
|
81
|
+
Returns:
|
|
82
|
+
TrajectoryPrediction with assessment
|
|
83
|
+
|
|
84
|
+
Example:
|
|
85
|
+
>>> history = [
|
|
86
|
+
... {"timestamp": "12:00", "hr": 95, "systolic_bp": 120},
|
|
87
|
+
... {"timestamp": "13:00", "hr": 105, "systolic_bp": 110},
|
|
88
|
+
... {"timestamp": "14:00", "hr": 112, "systolic_bp": 95}
|
|
89
|
+
... ]
|
|
90
|
+
>>> prediction = analyzer.analyze_trajectory(current_vitals, history)
|
|
91
|
+
>>> if prediction.trajectory_state == "concerning":
|
|
92
|
+
... print(f"ALERT: {prediction.overall_assessment}")
|
|
93
|
+
|
|
94
|
+
"""
|
|
95
|
+
if not historical_data:
|
|
96
|
+
return TrajectoryPrediction(
|
|
97
|
+
trajectory_state="stable",
|
|
98
|
+
estimated_time_to_critical=None,
|
|
99
|
+
vital_trends=[],
|
|
100
|
+
overall_assessment="Insufficient historical data for trajectory analysis",
|
|
101
|
+
confidence=0.3,
|
|
102
|
+
recommendations=["Continue monitoring"],
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
# Analyze trends for each vital sign
|
|
106
|
+
vital_trends = []
|
|
107
|
+
|
|
108
|
+
for parameter, current_value in current_data.items():
|
|
109
|
+
if parameter in ["mental_status"]: # Skip non-numeric
|
|
110
|
+
continue
|
|
111
|
+
|
|
112
|
+
trend = self._analyze_parameter_trend(parameter, current_value, historical_data)
|
|
113
|
+
|
|
114
|
+
if trend:
|
|
115
|
+
vital_trends.append(trend)
|
|
116
|
+
|
|
117
|
+
# Determine overall trajectory state
|
|
118
|
+
trajectory_state = self._determine_trajectory_state(vital_trends)
|
|
119
|
+
|
|
120
|
+
# Estimate time to critical (if concerning)
|
|
121
|
+
time_to_critical = None
|
|
122
|
+
if trajectory_state in ["concerning", "critical"]:
|
|
123
|
+
time_to_critical = self._estimate_time_to_critical(vital_trends, current_data)
|
|
124
|
+
|
|
125
|
+
# Generate overall assessment
|
|
126
|
+
assessment = self._generate_assessment(trajectory_state, vital_trends, time_to_critical)
|
|
127
|
+
|
|
128
|
+
# Generate recommendations
|
|
129
|
+
recommendations = self._generate_recommendations(trajectory_state, vital_trends)
|
|
130
|
+
|
|
131
|
+
# Calculate confidence
|
|
132
|
+
confidence = self._calculate_confidence(historical_data, vital_trends)
|
|
133
|
+
|
|
134
|
+
return TrajectoryPrediction(
|
|
135
|
+
trajectory_state=trajectory_state,
|
|
136
|
+
estimated_time_to_critical=time_to_critical,
|
|
137
|
+
vital_trends=vital_trends,
|
|
138
|
+
overall_assessment=assessment,
|
|
139
|
+
confidence=confidence,
|
|
140
|
+
recommendations=recommendations,
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
def _analyze_parameter_trend(
|
|
144
|
+
self,
|
|
145
|
+
parameter: str,
|
|
146
|
+
current_value: float,
|
|
147
|
+
historical_data: list[dict[str, Any]],
|
|
148
|
+
) -> VitalTrend | None:
|
|
149
|
+
"""Analyze trend for single parameter"""
|
|
150
|
+
# Extract historical values
|
|
151
|
+
historical_values = []
|
|
152
|
+
for entry in historical_data:
|
|
153
|
+
if parameter in entry and entry[parameter] is not None:
|
|
154
|
+
historical_values.append(entry[parameter])
|
|
155
|
+
|
|
156
|
+
if not historical_values:
|
|
157
|
+
return None
|
|
158
|
+
|
|
159
|
+
# Calculate change from most recent
|
|
160
|
+
previous_value = historical_values[-1]
|
|
161
|
+
change = current_value - previous_value
|
|
162
|
+
change_percent = (change / previous_value * 100) if previous_value != 0 else 0
|
|
163
|
+
|
|
164
|
+
# Determine direction
|
|
165
|
+
if abs(change_percent) < 5:
|
|
166
|
+
direction = "stable"
|
|
167
|
+
elif change > 0:
|
|
168
|
+
direction = "increasing"
|
|
169
|
+
else:
|
|
170
|
+
direction = "decreasing"
|
|
171
|
+
|
|
172
|
+
# Calculate rate of change (per hour)
|
|
173
|
+
# Assuming historical data spans 2-6 hours
|
|
174
|
+
hours_elapsed = len(historical_values) / 2 # Rough estimate
|
|
175
|
+
rate_of_change = abs(change) / hours_elapsed if hours_elapsed > 0 else 0
|
|
176
|
+
|
|
177
|
+
# Determine if concerning
|
|
178
|
+
concerning, reasoning = self._is_trend_concerning(
|
|
179
|
+
parameter,
|
|
180
|
+
current_value,
|
|
181
|
+
change,
|
|
182
|
+
rate_of_change,
|
|
183
|
+
direction,
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
return VitalTrend(
|
|
187
|
+
parameter=parameter,
|
|
188
|
+
current_value=current_value,
|
|
189
|
+
previous_value=previous_value,
|
|
190
|
+
change=change,
|
|
191
|
+
change_percent=change_percent,
|
|
192
|
+
direction=direction,
|
|
193
|
+
rate_of_change=rate_of_change,
|
|
194
|
+
concerning=concerning,
|
|
195
|
+
reasoning=reasoning,
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
def _is_trend_concerning(
|
|
199
|
+
self,
|
|
200
|
+
parameter: str,
|
|
201
|
+
current_value: float,
|
|
202
|
+
change: float,
|
|
203
|
+
rate_of_change: float,
|
|
204
|
+
direction: str,
|
|
205
|
+
) -> tuple[bool, str]:
|
|
206
|
+
"""Determine if trend is concerning"""
|
|
207
|
+
# Check if currently out of normal range
|
|
208
|
+
if parameter in self.normal_ranges:
|
|
209
|
+
min_val, max_val = self.normal_ranges[parameter]
|
|
210
|
+
|
|
211
|
+
if current_value < min_val:
|
|
212
|
+
return True, f"{parameter} below normal range ({min_val}-{max_val})"
|
|
213
|
+
if current_value > max_val:
|
|
214
|
+
return True, f"{parameter} above normal range ({min_val}-{max_val})"
|
|
215
|
+
|
|
216
|
+
# Check rate of change
|
|
217
|
+
if parameter in self.concerning_rates:
|
|
218
|
+
threshold = self.concerning_rates[parameter]
|
|
219
|
+
|
|
220
|
+
if parameter == "hr" and direction == "increasing" and rate_of_change > threshold:
|
|
221
|
+
return True, f"HR increasing rapidly (+{change:.0f} bpm)"
|
|
222
|
+
|
|
223
|
+
if (
|
|
224
|
+
parameter == "systolic_bp"
|
|
225
|
+
and direction == "decreasing"
|
|
226
|
+
and rate_of_change > threshold
|
|
227
|
+
):
|
|
228
|
+
return True, f"BP decreasing rapidly (-{abs(change):.0f} mmHg)"
|
|
229
|
+
|
|
230
|
+
if (
|
|
231
|
+
parameter == "respiratory_rate"
|
|
232
|
+
and direction == "increasing"
|
|
233
|
+
and rate_of_change > threshold
|
|
234
|
+
):
|
|
235
|
+
return True, f"RR increasing rapidly (+{change:.0f} /min)"
|
|
236
|
+
|
|
237
|
+
if parameter == "temp_f" and direction == "increasing" and rate_of_change > threshold:
|
|
238
|
+
return True, f"Temp increasing rapidly (+{change:.1f}°F)"
|
|
239
|
+
|
|
240
|
+
return False, "Within normal trajectory"
|
|
241
|
+
|
|
242
|
+
def _determine_trajectory_state(self, vital_trends: list[VitalTrend]) -> str:
|
|
243
|
+
"""Determine overall trajectory state"""
|
|
244
|
+
concerning_trends = [t for t in vital_trends if t.concerning]
|
|
245
|
+
|
|
246
|
+
if not concerning_trends:
|
|
247
|
+
return "stable"
|
|
248
|
+
|
|
249
|
+
# Count concerning trends by severity
|
|
250
|
+
critical_parameters = ["systolic_bp", "o2_sat"]
|
|
251
|
+
critical_concerning = sum(
|
|
252
|
+
1 for t in concerning_trends if t.parameter in critical_parameters
|
|
253
|
+
)
|
|
254
|
+
|
|
255
|
+
if critical_concerning >= 1:
|
|
256
|
+
return "critical"
|
|
257
|
+
|
|
258
|
+
if len(concerning_trends) >= 2:
|
|
259
|
+
return "concerning"
|
|
260
|
+
|
|
261
|
+
if len(concerning_trends) == 1:
|
|
262
|
+
return "concerning"
|
|
263
|
+
|
|
264
|
+
return "stable"
|
|
265
|
+
|
|
266
|
+
def _estimate_time_to_critical(
|
|
267
|
+
self,
|
|
268
|
+
vital_trends: list[VitalTrend],
|
|
269
|
+
current_data: dict[str, float],
|
|
270
|
+
) -> str | None:
|
|
271
|
+
"""Estimate time until patient meets critical criteria.
|
|
272
|
+
|
|
273
|
+
This is core Level 4 - predicting the future.
|
|
274
|
+
"""
|
|
275
|
+
# Example: If BP dropping at 10 mmHg/hour, currently 95, critical is 85
|
|
276
|
+
# Time to critical = (95 - 85) / 10 = 1 hour
|
|
277
|
+
|
|
278
|
+
for trend in vital_trends:
|
|
279
|
+
if not trend.concerning:
|
|
280
|
+
continue
|
|
281
|
+
|
|
282
|
+
if trend.parameter == "systolic_bp" and trend.direction == "decreasing":
|
|
283
|
+
critical_threshold = 90
|
|
284
|
+
current = trend.current_value
|
|
285
|
+
rate = trend.rate_of_change
|
|
286
|
+
|
|
287
|
+
if rate > 0:
|
|
288
|
+
hours_to_critical = (current - critical_threshold) / rate
|
|
289
|
+
if 0 < hours_to_critical < 24:
|
|
290
|
+
return f"~{int(hours_to_critical)} hours"
|
|
291
|
+
|
|
292
|
+
if trend.parameter == "o2_sat" and trend.direction == "decreasing":
|
|
293
|
+
critical_threshold = 90
|
|
294
|
+
current = trend.current_value
|
|
295
|
+
rate = trend.rate_of_change
|
|
296
|
+
|
|
297
|
+
if rate > 0:
|
|
298
|
+
hours_to_critical = (current - critical_threshold) / rate
|
|
299
|
+
if 0 < hours_to_critical < 24:
|
|
300
|
+
return f"~{int(hours_to_critical)} hours"
|
|
301
|
+
|
|
302
|
+
return None
|
|
303
|
+
|
|
304
|
+
def _generate_assessment(
|
|
305
|
+
self,
|
|
306
|
+
trajectory_state: str,
|
|
307
|
+
vital_trends: list[VitalTrend],
|
|
308
|
+
time_to_critical: str | None,
|
|
309
|
+
) -> str:
|
|
310
|
+
"""Generate overall assessment"""
|
|
311
|
+
if trajectory_state == "stable":
|
|
312
|
+
return "Patient vitals stable. Continue routine monitoring."
|
|
313
|
+
|
|
314
|
+
concerning = [t for t in vital_trends if t.concerning]
|
|
315
|
+
|
|
316
|
+
if trajectory_state == "critical":
|
|
317
|
+
trends_desc = ", ".join(f"{t.parameter} {t.direction}" for t in concerning[:3])
|
|
318
|
+
return (
|
|
319
|
+
f"CRITICAL trajectory detected: {trends_desc}. Immediate intervention recommended."
|
|
320
|
+
)
|
|
321
|
+
|
|
322
|
+
if trajectory_state == "concerning":
|
|
323
|
+
trends_desc = ", ".join(f"{t.parameter} {t.direction}" for t in concerning[:3])
|
|
324
|
+
|
|
325
|
+
if time_to_critical:
|
|
326
|
+
return (
|
|
327
|
+
f"Concerning trajectory: {trends_desc}. "
|
|
328
|
+
f"In our experience, this pattern suggests deterioration. "
|
|
329
|
+
f"Estimated time to critical: {time_to_critical}. "
|
|
330
|
+
"Early intervention may prevent escalation."
|
|
331
|
+
)
|
|
332
|
+
|
|
333
|
+
return (
|
|
334
|
+
f"Concerning trajectory: {trends_desc}. "
|
|
335
|
+
"In our experience, this pattern warrants closer monitoring."
|
|
336
|
+
)
|
|
337
|
+
|
|
338
|
+
return "Patient trajectory under assessment."
|
|
339
|
+
|
|
340
|
+
def _generate_recommendations(
|
|
341
|
+
self,
|
|
342
|
+
trajectory_state: str,
|
|
343
|
+
vital_trends: list[VitalTrend],
|
|
344
|
+
) -> list[str]:
|
|
345
|
+
"""Generate actionable recommendations"""
|
|
346
|
+
if trajectory_state == "stable":
|
|
347
|
+
return ["Continue routine monitoring"]
|
|
348
|
+
|
|
349
|
+
recommendations = []
|
|
350
|
+
|
|
351
|
+
if trajectory_state in ["concerning", "critical"]:
|
|
352
|
+
recommendations.append("Notify physician of trajectory")
|
|
353
|
+
recommendations.append("Increase monitoring frequency")
|
|
354
|
+
|
|
355
|
+
concerning = [t for t in vital_trends if t.concerning]
|
|
356
|
+
|
|
357
|
+
for trend in concerning:
|
|
358
|
+
if trend.parameter == "systolic_bp":
|
|
359
|
+
recommendations.append("Assess volume status and perfusion")
|
|
360
|
+
elif trend.parameter == "hr":
|
|
361
|
+
recommendations.append("Assess for infection or pain")
|
|
362
|
+
elif trend.parameter == "respiratory_rate":
|
|
363
|
+
recommendations.append("Assess respiratory status and oxygenation")
|
|
364
|
+
elif trend.parameter == "temp_f":
|
|
365
|
+
recommendations.append("Assess for infection")
|
|
366
|
+
|
|
367
|
+
if trajectory_state == "critical":
|
|
368
|
+
recommendations.append("Consider rapid response team activation")
|
|
369
|
+
|
|
370
|
+
return recommendations
|
|
371
|
+
|
|
372
|
+
def _calculate_confidence(
|
|
373
|
+
self,
|
|
374
|
+
historical_data: list[dict[str, Any]],
|
|
375
|
+
vital_trends: list[VitalTrend],
|
|
376
|
+
) -> float:
|
|
377
|
+
"""Calculate confidence in prediction"""
|
|
378
|
+
# More data = higher confidence
|
|
379
|
+
data_points = len(historical_data)
|
|
380
|
+
data_confidence = min(data_points / 10, 1.0)
|
|
381
|
+
|
|
382
|
+
# More consistent trends = higher confidence
|
|
383
|
+
if vital_trends:
|
|
384
|
+
concerning_count = sum(1 for t in vital_trends if t.concerning)
|
|
385
|
+
trend_confidence = concerning_count / len(vital_trends)
|
|
386
|
+
else:
|
|
387
|
+
trend_confidence = 0.5
|
|
388
|
+
|
|
389
|
+
return (data_confidence + trend_confidence) / 2
|
empathy_llm_toolkit/__init__.py
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Empathy LLM Toolkit
|
|
1
|
+
"""Empathy LLM Toolkit
|
|
3
2
|
|
|
4
3
|
Wraps LLM providers (OpenAI, Anthropic, local models) with Empathy Framework levels.
|
|
5
4
|
|
|
@@ -12,17 +11,18 @@ Licensed under Fair Source 0.9
|
|
|
12
11
|
|
|
13
12
|
from .core import EmpathyLLM
|
|
14
13
|
from .levels import EmpathyLevel
|
|
15
|
-
from .providers import AnthropicProvider, LocalProvider, OpenAIProvider
|
|
14
|
+
from .providers import AnthropicProvider, GeminiProvider, LocalProvider, OpenAIProvider
|
|
16
15
|
from .state import CollaborationState, UserPattern
|
|
17
16
|
|
|
18
17
|
__version__ = "1.9.5"
|
|
19
18
|
|
|
20
19
|
__all__ = [
|
|
21
|
-
"EmpathyLLM",
|
|
22
|
-
"OpenAIProvider",
|
|
23
20
|
"AnthropicProvider",
|
|
24
|
-
"LocalProvider",
|
|
25
21
|
"CollaborationState",
|
|
26
|
-
"
|
|
22
|
+
"EmpathyLLM",
|
|
27
23
|
"EmpathyLevel",
|
|
24
|
+
"GeminiProvider",
|
|
25
|
+
"LocalProvider",
|
|
26
|
+
"OpenAIProvider",
|
|
27
|
+
"UserPattern",
|
|
28
28
|
]
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"""Empathy Framework - Universal Agent Factory
|
|
2
|
+
|
|
3
|
+
Create agents using your preferred framework while retaining Empathy's
|
|
4
|
+
cost optimization, pattern learning, and memory features.
|
|
5
|
+
|
|
6
|
+
Supported Frameworks:
|
|
7
|
+
- LangChain: Chains, tools, and retrieval
|
|
8
|
+
- LangGraph: Stateful multi-agent graphs
|
|
9
|
+
- AutoGen: Conversational multi-agent systems
|
|
10
|
+
- Haystack: RAG and document pipelines
|
|
11
|
+
- Native: Empathy's built-in agent system
|
|
12
|
+
|
|
13
|
+
Usage:
|
|
14
|
+
from empathy_llm_toolkit.agent_factory import AgentFactory, Framework
|
|
15
|
+
|
|
16
|
+
# Create factory with preferred framework
|
|
17
|
+
factory = AgentFactory(framework=Framework.LANGGRAPH)
|
|
18
|
+
|
|
19
|
+
# Create agents
|
|
20
|
+
researcher = factory.create_agent("researcher", tools=[...])
|
|
21
|
+
writer = factory.create_agent("writer", model_tier="premium")
|
|
22
|
+
|
|
23
|
+
# Create workflows
|
|
24
|
+
pipeline = factory.create_workflow([researcher, writer])
|
|
25
|
+
|
|
26
|
+
# Create wizards with framework backing
|
|
27
|
+
debug_wizard = factory.create_wizard("debugging")
|
|
28
|
+
|
|
29
|
+
Copyright 2025 Smart-AI-Memory
|
|
30
|
+
Licensed under Fair Source License 0.9
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
from empathy_llm_toolkit.agent_factory.base import (
|
|
34
|
+
AgentCapability,
|
|
35
|
+
AgentConfig,
|
|
36
|
+
AgentRole,
|
|
37
|
+
BaseAdapter,
|
|
38
|
+
BaseAgent,
|
|
39
|
+
WorkflowConfig,
|
|
40
|
+
)
|
|
41
|
+
from empathy_llm_toolkit.agent_factory.factory import AgentFactory
|
|
42
|
+
from empathy_llm_toolkit.agent_factory.framework import Framework
|
|
43
|
+
|
|
44
|
+
__all__ = [
|
|
45
|
+
"AgentCapability",
|
|
46
|
+
"AgentConfig",
|
|
47
|
+
"AgentFactory",
|
|
48
|
+
"AgentRole",
|
|
49
|
+
"BaseAdapter",
|
|
50
|
+
"BaseAgent",
|
|
51
|
+
"Framework",
|
|
52
|
+
"WorkflowConfig",
|
|
53
|
+
]
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"""Framework Adapters for Agent Factory
|
|
2
|
+
|
|
3
|
+
Each adapter implements the BaseAdapter interface for a specific
|
|
4
|
+
agent framework, allowing seamless switching between frameworks.
|
|
5
|
+
|
|
6
|
+
Copyright 2025 Smart-AI-Memory
|
|
7
|
+
Licensed under Fair Source License 0.9
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from empathy_llm_toolkit.agent_factory.adapters.native import NativeAdapter
|
|
11
|
+
from empathy_llm_toolkit.agent_factory.adapters.wizard_adapter import (
|
|
12
|
+
WizardAdapter,
|
|
13
|
+
WizardAgent,
|
|
14
|
+
wrap_wizard,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
# Lazy imports for optional frameworks
|
|
18
|
+
_langchain_adapter = None
|
|
19
|
+
_langgraph_adapter = None
|
|
20
|
+
_autogen_adapter = None
|
|
21
|
+
_haystack_adapter = None
|
|
22
|
+
_crewai_adapter = None
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def get_langchain_adapter():
|
|
26
|
+
"""Get LangChain adapter (lazy import)."""
|
|
27
|
+
global _langchain_adapter
|
|
28
|
+
if _langchain_adapter is None:
|
|
29
|
+
from empathy_llm_toolkit.agent_factory.adapters.langchain_adapter import LangChainAdapter
|
|
30
|
+
|
|
31
|
+
_langchain_adapter = LangChainAdapter
|
|
32
|
+
return _langchain_adapter
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def get_langgraph_adapter():
|
|
36
|
+
"""Get LangGraph adapter (lazy import)."""
|
|
37
|
+
global _langgraph_adapter
|
|
38
|
+
if _langgraph_adapter is None:
|
|
39
|
+
from empathy_llm_toolkit.agent_factory.adapters.langgraph_adapter import LangGraphAdapter
|
|
40
|
+
|
|
41
|
+
_langgraph_adapter = LangGraphAdapter
|
|
42
|
+
return _langgraph_adapter
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def get_autogen_adapter():
|
|
46
|
+
"""Get AutoGen adapter (lazy import)."""
|
|
47
|
+
global _autogen_adapter
|
|
48
|
+
if _autogen_adapter is None:
|
|
49
|
+
from empathy_llm_toolkit.agent_factory.adapters.autogen_adapter import AutoGenAdapter
|
|
50
|
+
|
|
51
|
+
_autogen_adapter = AutoGenAdapter
|
|
52
|
+
return _autogen_adapter
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def get_haystack_adapter():
|
|
56
|
+
"""Get Haystack adapter (lazy import)."""
|
|
57
|
+
global _haystack_adapter
|
|
58
|
+
if _haystack_adapter is None:
|
|
59
|
+
from empathy_llm_toolkit.agent_factory.adapters.haystack_adapter import HaystackAdapter
|
|
60
|
+
|
|
61
|
+
_haystack_adapter = HaystackAdapter
|
|
62
|
+
return _haystack_adapter
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def get_crewai_adapter():
|
|
66
|
+
"""Get CrewAI adapter (lazy import)."""
|
|
67
|
+
global _crewai_adapter
|
|
68
|
+
if _crewai_adapter is None:
|
|
69
|
+
from empathy_llm_toolkit.agent_factory.adapters.crewai_adapter import CrewAIAdapter
|
|
70
|
+
|
|
71
|
+
_crewai_adapter = CrewAIAdapter
|
|
72
|
+
return _crewai_adapter
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
__all__ = [
|
|
76
|
+
"NativeAdapter",
|
|
77
|
+
"WizardAdapter",
|
|
78
|
+
"WizardAgent",
|
|
79
|
+
"get_autogen_adapter",
|
|
80
|
+
"get_crewai_adapter",
|
|
81
|
+
"get_haystack_adapter",
|
|
82
|
+
"get_langchain_adapter",
|
|
83
|
+
"get_langgraph_adapter",
|
|
84
|
+
"wrap_wizard",
|
|
85
|
+
]
|