attune-ai 2.0.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.
- attune/__init__.py +358 -0
- attune/adaptive/__init__.py +13 -0
- attune/adaptive/task_complexity.py +127 -0
- attune/agent_monitoring.py +414 -0
- attune/cache/__init__.py +117 -0
- attune/cache/base.py +166 -0
- attune/cache/dependency_manager.py +256 -0
- attune/cache/hash_only.py +251 -0
- attune/cache/hybrid.py +457 -0
- attune/cache/storage.py +285 -0
- attune/cache_monitor.py +356 -0
- attune/cache_stats.py +298 -0
- attune/cli/__init__.py +152 -0
- attune/cli/__main__.py +12 -0
- attune/cli/commands/__init__.py +1 -0
- attune/cli/commands/batch.py +264 -0
- attune/cli/commands/cache.py +248 -0
- attune/cli/commands/help.py +331 -0
- attune/cli/commands/info.py +140 -0
- attune/cli/commands/inspect.py +436 -0
- attune/cli/commands/inspection.py +57 -0
- attune/cli/commands/memory.py +48 -0
- attune/cli/commands/metrics.py +92 -0
- attune/cli/commands/orchestrate.py +184 -0
- attune/cli/commands/patterns.py +207 -0
- attune/cli/commands/profiling.py +202 -0
- attune/cli/commands/provider.py +98 -0
- attune/cli/commands/routing.py +285 -0
- attune/cli/commands/setup.py +96 -0
- attune/cli/commands/status.py +235 -0
- attune/cli/commands/sync.py +166 -0
- attune/cli/commands/tier.py +121 -0
- attune/cli/commands/utilities.py +114 -0
- attune/cli/commands/workflow.py +579 -0
- attune/cli/core.py +32 -0
- attune/cli/parsers/__init__.py +68 -0
- attune/cli/parsers/batch.py +118 -0
- attune/cli/parsers/cache.py +65 -0
- attune/cli/parsers/help.py +41 -0
- attune/cli/parsers/info.py +26 -0
- attune/cli/parsers/inspect.py +66 -0
- attune/cli/parsers/metrics.py +42 -0
- attune/cli/parsers/orchestrate.py +61 -0
- attune/cli/parsers/patterns.py +54 -0
- attune/cli/parsers/provider.py +40 -0
- attune/cli/parsers/routing.py +110 -0
- attune/cli/parsers/setup.py +42 -0
- attune/cli/parsers/status.py +47 -0
- attune/cli/parsers/sync.py +31 -0
- attune/cli/parsers/tier.py +33 -0
- attune/cli/parsers/workflow.py +77 -0
- attune/cli/utils/__init__.py +1 -0
- attune/cli/utils/data.py +242 -0
- attune/cli/utils/helpers.py +68 -0
- attune/cli_legacy.py +3957 -0
- attune/cli_minimal.py +1159 -0
- attune/cli_router.py +437 -0
- attune/cli_unified.py +814 -0
- attune/config/__init__.py +66 -0
- attune/config/xml_config.py +286 -0
- attune/config.py +545 -0
- attune/coordination.py +870 -0
- attune/core.py +1511 -0
- attune/core_modules/__init__.py +15 -0
- attune/cost_tracker.py +626 -0
- attune/dashboard/__init__.py +41 -0
- attune/dashboard/app.py +512 -0
- attune/dashboard/simple_server.py +435 -0
- attune/dashboard/standalone_server.py +547 -0
- attune/discovery.py +306 -0
- attune/emergence.py +306 -0
- attune/exceptions.py +123 -0
- attune/feedback_loops.py +373 -0
- attune/hot_reload/README.md +473 -0
- attune/hot_reload/__init__.py +62 -0
- attune/hot_reload/config.py +83 -0
- attune/hot_reload/integration.py +229 -0
- attune/hot_reload/reloader.py +298 -0
- attune/hot_reload/watcher.py +183 -0
- attune/hot_reload/websocket.py +177 -0
- attune/levels.py +577 -0
- attune/leverage_points.py +441 -0
- attune/logging_config.py +261 -0
- attune/mcp/__init__.py +10 -0
- attune/mcp/server.py +506 -0
- attune/memory/__init__.py +237 -0
- attune/memory/claude_memory.py +469 -0
- attune/memory/config.py +224 -0
- attune/memory/control_panel.py +1290 -0
- attune/memory/control_panel_support.py +145 -0
- attune/memory/cross_session.py +845 -0
- attune/memory/edges.py +179 -0
- attune/memory/encryption.py +159 -0
- attune/memory/file_session.py +770 -0
- attune/memory/graph.py +570 -0
- attune/memory/long_term.py +913 -0
- attune/memory/long_term_types.py +99 -0
- attune/memory/mixins/__init__.py +25 -0
- attune/memory/mixins/backend_init_mixin.py +249 -0
- attune/memory/mixins/capabilities_mixin.py +208 -0
- attune/memory/mixins/handoff_mixin.py +208 -0
- attune/memory/mixins/lifecycle_mixin.py +49 -0
- attune/memory/mixins/long_term_mixin.py +352 -0
- attune/memory/mixins/promotion_mixin.py +109 -0
- attune/memory/mixins/short_term_mixin.py +182 -0
- attune/memory/nodes.py +179 -0
- attune/memory/redis_bootstrap.py +540 -0
- attune/memory/security/__init__.py +31 -0
- attune/memory/security/audit_logger.py +932 -0
- attune/memory/security/pii_scrubber.py +640 -0
- attune/memory/security/secrets_detector.py +678 -0
- attune/memory/short_term.py +2192 -0
- attune/memory/simple_storage.py +302 -0
- attune/memory/storage/__init__.py +15 -0
- attune/memory/storage_backend.py +167 -0
- attune/memory/summary_index.py +583 -0
- attune/memory/types.py +446 -0
- attune/memory/unified.py +182 -0
- attune/meta_workflows/__init__.py +74 -0
- attune/meta_workflows/agent_creator.py +248 -0
- attune/meta_workflows/builtin_templates.py +567 -0
- attune/meta_workflows/cli_commands/__init__.py +56 -0
- attune/meta_workflows/cli_commands/agent_commands.py +321 -0
- attune/meta_workflows/cli_commands/analytics_commands.py +442 -0
- attune/meta_workflows/cli_commands/config_commands.py +232 -0
- attune/meta_workflows/cli_commands/memory_commands.py +182 -0
- attune/meta_workflows/cli_commands/template_commands.py +354 -0
- attune/meta_workflows/cli_commands/workflow_commands.py +382 -0
- attune/meta_workflows/cli_meta_workflows.py +59 -0
- attune/meta_workflows/form_engine.py +292 -0
- attune/meta_workflows/intent_detector.py +409 -0
- attune/meta_workflows/models.py +569 -0
- attune/meta_workflows/pattern_learner.py +738 -0
- attune/meta_workflows/plan_generator.py +384 -0
- attune/meta_workflows/session_context.py +397 -0
- attune/meta_workflows/template_registry.py +229 -0
- attune/meta_workflows/workflow.py +984 -0
- attune/metrics/__init__.py +12 -0
- attune/metrics/collector.py +31 -0
- attune/metrics/prompt_metrics.py +194 -0
- attune/models/__init__.py +172 -0
- attune/models/__main__.py +13 -0
- attune/models/adaptive_routing.py +437 -0
- attune/models/auth_cli.py +444 -0
- attune/models/auth_strategy.py +450 -0
- attune/models/cli.py +655 -0
- attune/models/empathy_executor.py +354 -0
- attune/models/executor.py +257 -0
- attune/models/fallback.py +762 -0
- attune/models/provider_config.py +282 -0
- attune/models/registry.py +472 -0
- attune/models/tasks.py +359 -0
- attune/models/telemetry/__init__.py +71 -0
- attune/models/telemetry/analytics.py +594 -0
- attune/models/telemetry/backend.py +196 -0
- attune/models/telemetry/data_models.py +431 -0
- attune/models/telemetry/storage.py +489 -0
- attune/models/token_estimator.py +420 -0
- attune/models/validation.py +280 -0
- attune/monitoring/__init__.py +52 -0
- attune/monitoring/alerts.py +946 -0
- attune/monitoring/alerts_cli.py +448 -0
- attune/monitoring/multi_backend.py +271 -0
- attune/monitoring/otel_backend.py +362 -0
- attune/optimization/__init__.py +19 -0
- attune/optimization/context_optimizer.py +272 -0
- attune/orchestration/__init__.py +67 -0
- attune/orchestration/agent_templates.py +707 -0
- attune/orchestration/config_store.py +499 -0
- attune/orchestration/execution_strategies.py +2111 -0
- attune/orchestration/meta_orchestrator.py +1168 -0
- attune/orchestration/pattern_learner.py +696 -0
- attune/orchestration/real_tools.py +931 -0
- attune/pattern_cache.py +187 -0
- attune/pattern_library.py +542 -0
- attune/patterns/debugging/all_patterns.json +81 -0
- attune/patterns/debugging/workflow_20260107_1770825e.json +77 -0
- attune/patterns/refactoring_memory.json +89 -0
- attune/persistence.py +564 -0
- attune/platform_utils.py +265 -0
- attune/plugins/__init__.py +28 -0
- attune/plugins/base.py +361 -0
- attune/plugins/registry.py +268 -0
- attune/project_index/__init__.py +32 -0
- attune/project_index/cli.py +335 -0
- attune/project_index/index.py +667 -0
- attune/project_index/models.py +504 -0
- attune/project_index/reports.py +474 -0
- attune/project_index/scanner.py +777 -0
- attune/project_index/scanner_parallel.py +291 -0
- attune/prompts/__init__.py +61 -0
- attune/prompts/config.py +77 -0
- attune/prompts/context.py +177 -0
- attune/prompts/parser.py +285 -0
- attune/prompts/registry.py +313 -0
- attune/prompts/templates.py +208 -0
- attune/redis_config.py +302 -0
- attune/redis_memory.py +799 -0
- attune/resilience/__init__.py +56 -0
- attune/resilience/circuit_breaker.py +256 -0
- attune/resilience/fallback.py +179 -0
- attune/resilience/health.py +300 -0
- attune/resilience/retry.py +209 -0
- attune/resilience/timeout.py +135 -0
- attune/routing/__init__.py +43 -0
- attune/routing/chain_executor.py +433 -0
- attune/routing/classifier.py +217 -0
- attune/routing/smart_router.py +234 -0
- attune/routing/workflow_registry.py +343 -0
- attune/scaffolding/README.md +589 -0
- attune/scaffolding/__init__.py +35 -0
- attune/scaffolding/__main__.py +14 -0
- attune/scaffolding/cli.py +240 -0
- attune/scaffolding/templates/base_wizard.py.jinja2 +121 -0
- attune/scaffolding/templates/coach_wizard.py.jinja2 +321 -0
- attune/scaffolding/templates/domain_wizard.py.jinja2 +408 -0
- attune/scaffolding/templates/linear_flow_wizard.py.jinja2 +203 -0
- attune/socratic/__init__.py +256 -0
- attune/socratic/ab_testing.py +958 -0
- attune/socratic/blueprint.py +533 -0
- attune/socratic/cli.py +703 -0
- attune/socratic/collaboration.py +1114 -0
- attune/socratic/domain_templates.py +924 -0
- attune/socratic/embeddings.py +738 -0
- attune/socratic/engine.py +794 -0
- attune/socratic/explainer.py +682 -0
- attune/socratic/feedback.py +772 -0
- attune/socratic/forms.py +629 -0
- attune/socratic/generator.py +732 -0
- attune/socratic/llm_analyzer.py +637 -0
- attune/socratic/mcp_server.py +702 -0
- attune/socratic/session.py +312 -0
- attune/socratic/storage.py +667 -0
- attune/socratic/success.py +730 -0
- attune/socratic/visual_editor.py +860 -0
- attune/socratic/web_ui.py +958 -0
- attune/telemetry/__init__.py +39 -0
- attune/telemetry/agent_coordination.py +475 -0
- attune/telemetry/agent_tracking.py +367 -0
- attune/telemetry/approval_gates.py +545 -0
- attune/telemetry/cli.py +1231 -0
- attune/telemetry/commands/__init__.py +14 -0
- attune/telemetry/commands/dashboard_commands.py +696 -0
- attune/telemetry/event_streaming.py +409 -0
- attune/telemetry/feedback_loop.py +567 -0
- attune/telemetry/usage_tracker.py +591 -0
- attune/templates.py +754 -0
- attune/test_generator/__init__.py +38 -0
- attune/test_generator/__main__.py +14 -0
- attune/test_generator/cli.py +234 -0
- attune/test_generator/generator.py +355 -0
- attune/test_generator/risk_analyzer.py +216 -0
- attune/test_generator/templates/unit_test.py.jinja2 +272 -0
- attune/tier_recommender.py +384 -0
- attune/tools.py +183 -0
- attune/trust/__init__.py +28 -0
- attune/trust/circuit_breaker.py +579 -0
- attune/trust_building.py +527 -0
- attune/validation/__init__.py +19 -0
- attune/validation/xml_validator.py +281 -0
- attune/vscode_bridge.py +173 -0
- attune/workflow_commands.py +780 -0
- attune/workflow_patterns/__init__.py +33 -0
- attune/workflow_patterns/behavior.py +249 -0
- attune/workflow_patterns/core.py +76 -0
- attune/workflow_patterns/output.py +99 -0
- attune/workflow_patterns/registry.py +255 -0
- attune/workflow_patterns/structural.py +288 -0
- attune/workflows/__init__.py +539 -0
- attune/workflows/autonomous_test_gen.py +1268 -0
- attune/workflows/base.py +2667 -0
- attune/workflows/batch_processing.py +342 -0
- attune/workflows/bug_predict.py +1084 -0
- attune/workflows/builder.py +273 -0
- attune/workflows/caching.py +253 -0
- attune/workflows/code_review.py +1048 -0
- attune/workflows/code_review_adapters.py +312 -0
- attune/workflows/code_review_pipeline.py +722 -0
- attune/workflows/config.py +645 -0
- attune/workflows/dependency_check.py +644 -0
- attune/workflows/document_gen/__init__.py +25 -0
- attune/workflows/document_gen/config.py +30 -0
- attune/workflows/document_gen/report_formatter.py +162 -0
- attune/workflows/document_gen/workflow.py +1426 -0
- attune/workflows/document_manager.py +216 -0
- attune/workflows/document_manager_README.md +134 -0
- attune/workflows/documentation_orchestrator.py +1205 -0
- attune/workflows/history.py +510 -0
- attune/workflows/keyboard_shortcuts/__init__.py +39 -0
- attune/workflows/keyboard_shortcuts/generators.py +391 -0
- attune/workflows/keyboard_shortcuts/parsers.py +416 -0
- attune/workflows/keyboard_shortcuts/prompts.py +295 -0
- attune/workflows/keyboard_shortcuts/schema.py +193 -0
- attune/workflows/keyboard_shortcuts/workflow.py +509 -0
- attune/workflows/llm_base.py +363 -0
- attune/workflows/manage_docs.py +87 -0
- attune/workflows/manage_docs_README.md +134 -0
- attune/workflows/manage_documentation.py +821 -0
- attune/workflows/new_sample_workflow1.py +149 -0
- attune/workflows/new_sample_workflow1_README.md +150 -0
- attune/workflows/orchestrated_health_check.py +849 -0
- attune/workflows/orchestrated_release_prep.py +600 -0
- attune/workflows/output.py +413 -0
- attune/workflows/perf_audit.py +863 -0
- attune/workflows/pr_review.py +762 -0
- attune/workflows/progress.py +785 -0
- attune/workflows/progress_server.py +322 -0
- attune/workflows/progressive/README 2.md +454 -0
- attune/workflows/progressive/README.md +454 -0
- attune/workflows/progressive/__init__.py +82 -0
- attune/workflows/progressive/cli.py +219 -0
- attune/workflows/progressive/core.py +488 -0
- attune/workflows/progressive/orchestrator.py +723 -0
- attune/workflows/progressive/reports.py +520 -0
- attune/workflows/progressive/telemetry.py +274 -0
- attune/workflows/progressive/test_gen.py +495 -0
- attune/workflows/progressive/workflow.py +589 -0
- attune/workflows/refactor_plan.py +694 -0
- attune/workflows/release_prep.py +895 -0
- attune/workflows/release_prep_crew.py +969 -0
- attune/workflows/research_synthesis.py +404 -0
- attune/workflows/routing.py +168 -0
- attune/workflows/secure_release.py +593 -0
- attune/workflows/security_adapters.py +297 -0
- attune/workflows/security_audit.py +1329 -0
- attune/workflows/security_audit_phase3.py +355 -0
- attune/workflows/seo_optimization.py +633 -0
- attune/workflows/step_config.py +234 -0
- attune/workflows/telemetry_mixin.py +269 -0
- attune/workflows/test5.py +125 -0
- attune/workflows/test5_README.md +158 -0
- attune/workflows/test_coverage_boost_crew.py +849 -0
- attune/workflows/test_gen/__init__.py +52 -0
- attune/workflows/test_gen/ast_analyzer.py +249 -0
- attune/workflows/test_gen/config.py +88 -0
- attune/workflows/test_gen/data_models.py +38 -0
- attune/workflows/test_gen/report_formatter.py +289 -0
- attune/workflows/test_gen/test_templates.py +381 -0
- attune/workflows/test_gen/workflow.py +655 -0
- attune/workflows/test_gen.py +54 -0
- attune/workflows/test_gen_behavioral.py +477 -0
- attune/workflows/test_gen_parallel.py +341 -0
- attune/workflows/test_lifecycle.py +526 -0
- attune/workflows/test_maintenance.py +627 -0
- attune/workflows/test_maintenance_cli.py +590 -0
- attune/workflows/test_maintenance_crew.py +840 -0
- attune/workflows/test_runner.py +622 -0
- attune/workflows/tier_tracking.py +531 -0
- attune/workflows/xml_enhanced_crew.py +285 -0
- attune_ai-2.0.0.dist-info/METADATA +1026 -0
- attune_ai-2.0.0.dist-info/RECORD +457 -0
- attune_ai-2.0.0.dist-info/WHEEL +5 -0
- attune_ai-2.0.0.dist-info/entry_points.txt +26 -0
- attune_ai-2.0.0.dist-info/licenses/LICENSE +201 -0
- attune_ai-2.0.0.dist-info/licenses/LICENSE_CHANGE_ANNOUNCEMENT.md +101 -0
- attune_ai-2.0.0.dist-info/top_level.txt +5 -0
- attune_healthcare/__init__.py +13 -0
- attune_healthcare/monitors/__init__.py +9 -0
- attune_healthcare/monitors/clinical_protocol_monitor.py +315 -0
- attune_healthcare/monitors/monitoring/__init__.py +44 -0
- attune_healthcare/monitors/monitoring/protocol_checker.py +300 -0
- attune_healthcare/monitors/monitoring/protocol_loader.py +214 -0
- attune_healthcare/monitors/monitoring/sensor_parsers.py +306 -0
- attune_healthcare/monitors/monitoring/trajectory_analyzer.py +389 -0
- attune_llm/README.md +553 -0
- attune_llm/__init__.py +28 -0
- attune_llm/agent_factory/__init__.py +53 -0
- attune_llm/agent_factory/adapters/__init__.py +85 -0
- attune_llm/agent_factory/adapters/autogen_adapter.py +312 -0
- attune_llm/agent_factory/adapters/crewai_adapter.py +483 -0
- attune_llm/agent_factory/adapters/haystack_adapter.py +298 -0
- attune_llm/agent_factory/adapters/langchain_adapter.py +362 -0
- attune_llm/agent_factory/adapters/langgraph_adapter.py +333 -0
- attune_llm/agent_factory/adapters/native.py +228 -0
- attune_llm/agent_factory/adapters/wizard_adapter.py +423 -0
- attune_llm/agent_factory/base.py +305 -0
- attune_llm/agent_factory/crews/__init__.py +67 -0
- attune_llm/agent_factory/crews/code_review.py +1113 -0
- attune_llm/agent_factory/crews/health_check.py +1262 -0
- attune_llm/agent_factory/crews/refactoring.py +1128 -0
- attune_llm/agent_factory/crews/security_audit.py +1018 -0
- attune_llm/agent_factory/decorators.py +287 -0
- attune_llm/agent_factory/factory.py +558 -0
- attune_llm/agent_factory/framework.py +193 -0
- attune_llm/agent_factory/memory_integration.py +328 -0
- attune_llm/agent_factory/resilient.py +320 -0
- attune_llm/agents_md/__init__.py +22 -0
- attune_llm/agents_md/loader.py +218 -0
- attune_llm/agents_md/parser.py +271 -0
- attune_llm/agents_md/registry.py +307 -0
- attune_llm/claude_memory.py +466 -0
- attune_llm/cli/__init__.py +8 -0
- attune_llm/cli/sync_claude.py +487 -0
- attune_llm/code_health.py +1313 -0
- attune_llm/commands/__init__.py +51 -0
- attune_llm/commands/context.py +375 -0
- attune_llm/commands/loader.py +301 -0
- attune_llm/commands/models.py +231 -0
- attune_llm/commands/parser.py +371 -0
- attune_llm/commands/registry.py +429 -0
- attune_llm/config/__init__.py +29 -0
- attune_llm/config/unified.py +291 -0
- attune_llm/context/__init__.py +22 -0
- attune_llm/context/compaction.py +455 -0
- attune_llm/context/manager.py +434 -0
- attune_llm/contextual_patterns.py +361 -0
- attune_llm/core.py +907 -0
- attune_llm/git_pattern_extractor.py +435 -0
- attune_llm/hooks/__init__.py +24 -0
- attune_llm/hooks/config.py +306 -0
- attune_llm/hooks/executor.py +289 -0
- attune_llm/hooks/registry.py +302 -0
- attune_llm/hooks/scripts/__init__.py +39 -0
- attune_llm/hooks/scripts/evaluate_session.py +201 -0
- attune_llm/hooks/scripts/first_time_init.py +285 -0
- attune_llm/hooks/scripts/pre_compact.py +207 -0
- attune_llm/hooks/scripts/session_end.py +183 -0
- attune_llm/hooks/scripts/session_start.py +163 -0
- attune_llm/hooks/scripts/suggest_compact.py +225 -0
- attune_llm/learning/__init__.py +30 -0
- attune_llm/learning/evaluator.py +438 -0
- attune_llm/learning/extractor.py +514 -0
- attune_llm/learning/storage.py +560 -0
- attune_llm/levels.py +227 -0
- attune_llm/pattern_confidence.py +414 -0
- attune_llm/pattern_resolver.py +272 -0
- attune_llm/pattern_summary.py +350 -0
- attune_llm/providers.py +967 -0
- attune_llm/routing/__init__.py +32 -0
- attune_llm/routing/model_router.py +362 -0
- attune_llm/security/IMPLEMENTATION_SUMMARY.md +413 -0
- attune_llm/security/PHASE2_COMPLETE.md +384 -0
- attune_llm/security/PHASE2_SECRETS_DETECTOR_COMPLETE.md +271 -0
- attune_llm/security/QUICK_REFERENCE.md +316 -0
- attune_llm/security/README.md +262 -0
- attune_llm/security/__init__.py +62 -0
- attune_llm/security/audit_logger.py +929 -0
- attune_llm/security/audit_logger_example.py +152 -0
- attune_llm/security/pii_scrubber.py +640 -0
- attune_llm/security/secrets_detector.py +678 -0
- attune_llm/security/secrets_detector_example.py +304 -0
- attune_llm/security/secure_memdocs.py +1192 -0
- attune_llm/security/secure_memdocs_example.py +278 -0
- attune_llm/session_status.py +745 -0
- attune_llm/state.py +246 -0
- attune_llm/utils/__init__.py +5 -0
- attune_llm/utils/tokens.py +349 -0
- attune_software/SOFTWARE_PLUGIN_README.md +57 -0
- attune_software/__init__.py +13 -0
- attune_software/cli/__init__.py +120 -0
- attune_software/cli/inspect.py +362 -0
- attune_software/cli.py +574 -0
- attune_software/plugin.py +188 -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
attune/levels.py
ADDED
|
@@ -0,0 +1,577 @@
|
|
|
1
|
+
"""Five Levels of AI Empathy - Individual Level Classes
|
|
2
|
+
|
|
3
|
+
Provides concrete implementations for each empathy level:
|
|
4
|
+
- Level 1: Reactive Empathy (respond to explicit requests)
|
|
5
|
+
- Level 2: Guided Empathy (collaborative exploration)
|
|
6
|
+
- Level 3: Proactive Empathy (act before being asked)
|
|
7
|
+
- Level 4: Anticipatory Empathy (predict and prepare for future needs)
|
|
8
|
+
- Level 5: Systems Empathy (build structures that help at scale)
|
|
9
|
+
|
|
10
|
+
Each level represents increasing sophistication in understanding and
|
|
11
|
+
responding to human needs.
|
|
12
|
+
|
|
13
|
+
Copyright 2025 Smart AI Memory, LLC
|
|
14
|
+
Licensed under Fair Source 0.9
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
from abc import ABC, abstractmethod
|
|
18
|
+
from dataclasses import dataclass, field
|
|
19
|
+
from datetime import datetime
|
|
20
|
+
from typing import Any
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@dataclass
|
|
24
|
+
class EmpathyAction:
|
|
25
|
+
"""An action taken at a specific empathy level
|
|
26
|
+
|
|
27
|
+
Records what action was taken, at what level, and the outcome.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
level: int # 1-5
|
|
31
|
+
action_type: str
|
|
32
|
+
description: str
|
|
33
|
+
context: dict[str, Any] = field(default_factory=dict)
|
|
34
|
+
outcome: str | None = None
|
|
35
|
+
timestamp: datetime = field(default_factory=datetime.now)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class EmpathyLevel(ABC):
|
|
39
|
+
"""Abstract base class for empathy levels
|
|
40
|
+
|
|
41
|
+
Each level implements specific behaviors appropriate to that
|
|
42
|
+
level of empathy sophistication.
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
level_number: int
|
|
46
|
+
level_name: str
|
|
47
|
+
|
|
48
|
+
def __init__(self):
|
|
49
|
+
self.actions_taken: list[EmpathyAction] = []
|
|
50
|
+
|
|
51
|
+
@abstractmethod
|
|
52
|
+
def respond(self, context: dict[str, Any]) -> dict[str, Any]:
|
|
53
|
+
"""Respond to a situation at this empathy level.
|
|
54
|
+
|
|
55
|
+
This abstract method defines the core behavior for each empathy level.
|
|
56
|
+
Subclasses must implement level-specific response logic that corresponds
|
|
57
|
+
to their empathy sophistication.
|
|
58
|
+
|
|
59
|
+
Args:
|
|
60
|
+
context: dict[str, Any]
|
|
61
|
+
Dictionary containing situation-specific context. The structure
|
|
62
|
+
varies by level but typically includes fields like 'request',
|
|
63
|
+
'observed_need', 'current_state', 'trajectory', or 'problem_class'.
|
|
64
|
+
|
|
65
|
+
Returns:
|
|
66
|
+
dict[str, Any]
|
|
67
|
+
A response dictionary containing:
|
|
68
|
+
- 'level': int - The empathy level (1-5)
|
|
69
|
+
- 'level_name': str - Human-readable level name
|
|
70
|
+
- 'action': str - Type of action taken
|
|
71
|
+
- 'description': str - Description of the response
|
|
72
|
+
- 'initiative': str - Level ('none'|'guided'|'proactive'|'anticipatory'|'systems')
|
|
73
|
+
- 'reasoning': str - Explanation of why this level's approach was used
|
|
74
|
+
- Additional fields specific to the level implementation
|
|
75
|
+
|
|
76
|
+
Raises:
|
|
77
|
+
KeyError: If required context keys are missing
|
|
78
|
+
ValueError: If context values are invalid or insufficient
|
|
79
|
+
|
|
80
|
+
Note:
|
|
81
|
+
- Level 1 (Reactive): Only provide what was explicitly requested
|
|
82
|
+
- Level 2 (Guided): Ask clarifying questions and suggest options
|
|
83
|
+
- Level 3 (Proactive): Identify and offer help for observed needs
|
|
84
|
+
- Level 4 (Anticipatory): Predict future needs and prepare solutions
|
|
85
|
+
- Level 5 (Systems): Design solutions that help at scale
|
|
86
|
+
|
|
87
|
+
Implementations should record actions via self.record_action() and
|
|
88
|
+
maintain consistency in the response format across levels.
|
|
89
|
+
|
|
90
|
+
"""
|
|
91
|
+
|
|
92
|
+
def record_action(
|
|
93
|
+
self,
|
|
94
|
+
action_type: str,
|
|
95
|
+
description: str,
|
|
96
|
+
context: dict[str, Any],
|
|
97
|
+
outcome: str | None = None,
|
|
98
|
+
):
|
|
99
|
+
"""Record an action taken at this level"""
|
|
100
|
+
action = EmpathyAction(
|
|
101
|
+
level=self.level_number,
|
|
102
|
+
action_type=action_type,
|
|
103
|
+
description=description,
|
|
104
|
+
context=context,
|
|
105
|
+
outcome=outcome,
|
|
106
|
+
)
|
|
107
|
+
self.actions_taken.append(action)
|
|
108
|
+
|
|
109
|
+
def get_action_history(self) -> list[EmpathyAction]:
|
|
110
|
+
"""Get history of actions at this level"""
|
|
111
|
+
return self.actions_taken
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
class Level1Reactive(EmpathyLevel):
|
|
115
|
+
"""Level 1: Reactive Empathy
|
|
116
|
+
|
|
117
|
+
**Principle**: Help after being asked
|
|
118
|
+
|
|
119
|
+
**Characteristics:**
|
|
120
|
+
- Waits for explicit requests
|
|
121
|
+
- Responds to direct questions
|
|
122
|
+
- Provides what was asked for (nothing more)
|
|
123
|
+
- Zero initiative or anticipation
|
|
124
|
+
|
|
125
|
+
**Example:**
|
|
126
|
+
- User: "What's the status of the project?"
|
|
127
|
+
- AI: "The project is 60% complete."
|
|
128
|
+
- (Stops there, doesn't volunteer next steps)
|
|
129
|
+
|
|
130
|
+
**Appropriate When:**
|
|
131
|
+
- User wants full control
|
|
132
|
+
- Trust hasn't been established yet
|
|
133
|
+
- Task is purely informational
|
|
134
|
+
- Overstepping would be inappropriate
|
|
135
|
+
|
|
136
|
+
Example:
|
|
137
|
+
>>> level1 = Level1Reactive()
|
|
138
|
+
>>> response = level1.respond({"request": "status", "subject": "project"})
|
|
139
|
+
>>> print(response["action"])
|
|
140
|
+
'provide_requested_information'
|
|
141
|
+
|
|
142
|
+
"""
|
|
143
|
+
|
|
144
|
+
level_number = 1
|
|
145
|
+
level_name = "Reactive Empathy"
|
|
146
|
+
|
|
147
|
+
def respond(self, context: dict[str, Any]) -> dict[str, Any]:
|
|
148
|
+
"""Respond reactively to explicit request
|
|
149
|
+
|
|
150
|
+
Only provides what was directly asked for.
|
|
151
|
+
"""
|
|
152
|
+
request = context.get("request", "unknown")
|
|
153
|
+
subject = context.get("subject", "")
|
|
154
|
+
|
|
155
|
+
response = {
|
|
156
|
+
"level": self.level_number,
|
|
157
|
+
"level_name": self.level_name,
|
|
158
|
+
"action": "provide_requested_information",
|
|
159
|
+
"description": f"Responding to request: {request}",
|
|
160
|
+
"initiative": "none",
|
|
161
|
+
"reasoning": "Level 1: Responding only to explicit request",
|
|
162
|
+
"additional_offers": [], # No proactive offers at Level 1
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
self.record_action(
|
|
166
|
+
action_type="reactive_response",
|
|
167
|
+
description=f"Responded to {request} about {subject}",
|
|
168
|
+
context=context,
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
return response
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
class Level2Guided(EmpathyLevel):
|
|
175
|
+
"""Level 2: Guided Empathy
|
|
176
|
+
|
|
177
|
+
**Principle**: Collaborative exploration with user input
|
|
178
|
+
|
|
179
|
+
**Characteristics:**
|
|
180
|
+
- Asks clarifying questions
|
|
181
|
+
- Explores user needs together
|
|
182
|
+
- Suggests options (doesn't decide alone)
|
|
183
|
+
- Collaborative, not directive
|
|
184
|
+
|
|
185
|
+
**Example:**
|
|
186
|
+
- User: "I need to improve the system."
|
|
187
|
+
- AI: "What aspects are you most concerned about? Performance,
|
|
188
|
+
maintainability, or features? I can help with any of these."
|
|
189
|
+
- (Guides exploration but lets user lead)
|
|
190
|
+
|
|
191
|
+
**Appropriate When:**
|
|
192
|
+
- Requirements are unclear
|
|
193
|
+
- Multiple valid approaches exist
|
|
194
|
+
- User expertise should guide direction
|
|
195
|
+
- Building shared understanding
|
|
196
|
+
|
|
197
|
+
Example:
|
|
198
|
+
>>> level2 = Level2Guided()
|
|
199
|
+
>>> response = level2.respond({
|
|
200
|
+
... "request": "improve system",
|
|
201
|
+
... "ambiguity": "high"
|
|
202
|
+
... })
|
|
203
|
+
>>> print(len(response["clarifying_questions"]))
|
|
204
|
+
3
|
|
205
|
+
|
|
206
|
+
"""
|
|
207
|
+
|
|
208
|
+
level_number = 2
|
|
209
|
+
level_name = "Guided Empathy"
|
|
210
|
+
|
|
211
|
+
def respond(self, context: dict[str, Any]) -> dict[str, Any]:
|
|
212
|
+
"""Respond with guided exploration
|
|
213
|
+
|
|
214
|
+
Asks questions to understand needs and collaboratively explore solutions.
|
|
215
|
+
"""
|
|
216
|
+
request = context.get("request", "")
|
|
217
|
+
ambiguity = context.get("ambiguity", "medium")
|
|
218
|
+
|
|
219
|
+
clarifying_questions = self._generate_clarifying_questions(request, ambiguity)
|
|
220
|
+
|
|
221
|
+
response = {
|
|
222
|
+
"level": self.level_number,
|
|
223
|
+
"level_name": self.level_name,
|
|
224
|
+
"action": "collaborative_exploration",
|
|
225
|
+
"description": "Guiding exploration of needs through clarifying questions",
|
|
226
|
+
"initiative": "guided",
|
|
227
|
+
"clarifying_questions": clarifying_questions,
|
|
228
|
+
"suggested_options": self._suggest_exploration_paths(request),
|
|
229
|
+
"reasoning": "Level 2: Collaboratively exploring to understand needs",
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
self.record_action(
|
|
233
|
+
action_type="guided_exploration",
|
|
234
|
+
description=f"Asked {len(clarifying_questions)} clarifying questions",
|
|
235
|
+
context=context,
|
|
236
|
+
)
|
|
237
|
+
|
|
238
|
+
return response
|
|
239
|
+
|
|
240
|
+
def _generate_clarifying_questions(self, request: str, ambiguity: str) -> list[str]:
|
|
241
|
+
"""Generate clarifying questions based on ambiguity"""
|
|
242
|
+
questions = [
|
|
243
|
+
"What specific aspects are most important to you?",
|
|
244
|
+
"What constraints should we consider?",
|
|
245
|
+
"What does success look like for this?",
|
|
246
|
+
]
|
|
247
|
+
|
|
248
|
+
if ambiguity == "high":
|
|
249
|
+
questions.append("Can you help me understand the broader context?")
|
|
250
|
+
|
|
251
|
+
return questions
|
|
252
|
+
|
|
253
|
+
def _suggest_exploration_paths(self, request: str) -> list[str]:
|
|
254
|
+
"""Suggest paths for collaborative exploration"""
|
|
255
|
+
return [
|
|
256
|
+
"We could explore technical approaches",
|
|
257
|
+
"We could focus on user impact",
|
|
258
|
+
"We could analyze risks and tradeoffs",
|
|
259
|
+
]
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
class Level3Proactive(EmpathyLevel):
|
|
263
|
+
"""Level 3: Proactive Empathy
|
|
264
|
+
|
|
265
|
+
**Principle**: Act before being asked (when confidence is high)
|
|
266
|
+
|
|
267
|
+
**Characteristics:**
|
|
268
|
+
- Takes initiative on obvious needs
|
|
269
|
+
- Acts without explicit request
|
|
270
|
+
- Stays within clear boundaries
|
|
271
|
+
- Volunteers help for common pain points
|
|
272
|
+
|
|
273
|
+
**Example:**
|
|
274
|
+
- User commits code with failing tests
|
|
275
|
+
- AI: "I noticed tests are failing. I've identified the 3 broken tests
|
|
276
|
+
and can help fix them. Would you like me to proceed?"
|
|
277
|
+
- (Takes initiative but asks permission for action)
|
|
278
|
+
|
|
279
|
+
**Appropriate When:**
|
|
280
|
+
- Need is obvious and low-risk
|
|
281
|
+
- Pattern has been established
|
|
282
|
+
- Action won't overstep boundaries
|
|
283
|
+
- Can save significant time/effort
|
|
284
|
+
|
|
285
|
+
Example:
|
|
286
|
+
>>> level3 = Level3Proactive()
|
|
287
|
+
>>> response = level3.respond({
|
|
288
|
+
... "observed_need": "failing_tests",
|
|
289
|
+
... "confidence": 0.9
|
|
290
|
+
... })
|
|
291
|
+
>>> print(response["proactive_offer"])
|
|
292
|
+
|
|
293
|
+
"""
|
|
294
|
+
|
|
295
|
+
level_number = 3
|
|
296
|
+
level_name = "Proactive Empathy"
|
|
297
|
+
|
|
298
|
+
def respond(self, context: dict[str, Any]) -> dict[str, Any]:
|
|
299
|
+
"""Respond proactively to observed needs
|
|
300
|
+
|
|
301
|
+
Takes initiative on obvious needs without being asked.
|
|
302
|
+
"""
|
|
303
|
+
observed_need = context.get("observed_need", "unknown")
|
|
304
|
+
confidence = context.get("confidence", 0.5)
|
|
305
|
+
|
|
306
|
+
proactive_actions = self._identify_proactive_actions(observed_need, confidence)
|
|
307
|
+
|
|
308
|
+
response = {
|
|
309
|
+
"level": self.level_number,
|
|
310
|
+
"level_name": self.level_name,
|
|
311
|
+
"action": "proactive_assistance",
|
|
312
|
+
"description": f"Proactively addressing: {observed_need}",
|
|
313
|
+
"initiative": "proactive",
|
|
314
|
+
"observed_need": observed_need,
|
|
315
|
+
"confidence": confidence,
|
|
316
|
+
"proactive_offer": proactive_actions,
|
|
317
|
+
"reasoning": "Level 3: Taking initiative on obvious need",
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
self.record_action(
|
|
321
|
+
action_type="proactive_action",
|
|
322
|
+
description=f"Proactively offered help for {observed_need}",
|
|
323
|
+
context=context,
|
|
324
|
+
)
|
|
325
|
+
|
|
326
|
+
return response
|
|
327
|
+
|
|
328
|
+
def _identify_proactive_actions(self, need: str, confidence: float) -> dict[str, Any]:
|
|
329
|
+
"""Identify appropriate proactive actions"""
|
|
330
|
+
if confidence >= 0.8:
|
|
331
|
+
permission_needed = False
|
|
332
|
+
action = "Will proceed automatically"
|
|
333
|
+
else:
|
|
334
|
+
permission_needed = True
|
|
335
|
+
action = "Offering to help, awaiting permission"
|
|
336
|
+
|
|
337
|
+
return {
|
|
338
|
+
"need_identified": need,
|
|
339
|
+
"proposed_action": f"Address {need}",
|
|
340
|
+
"permission_needed": permission_needed,
|
|
341
|
+
"confidence_level": confidence,
|
|
342
|
+
"action_plan": action,
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
class Level4Anticipatory(EmpathyLevel):
|
|
347
|
+
"""Level 4: Anticipatory Empathy
|
|
348
|
+
|
|
349
|
+
**Principle**: Predict and prepare for future needs
|
|
350
|
+
|
|
351
|
+
**Characteristics:**
|
|
352
|
+
- Predicts needs before they arise
|
|
353
|
+
- Analyzes trajectories and trends
|
|
354
|
+
- Prepares solutions in advance
|
|
355
|
+
- Prevents problems proactively
|
|
356
|
+
|
|
357
|
+
**Example:**
|
|
358
|
+
- Compliance audit in 30 days
|
|
359
|
+
- AI analyzes current state, predicts gaps that will exist in 30 days
|
|
360
|
+
- Pre-generates compliance documentation
|
|
361
|
+
- Alerts team to preventable issues
|
|
362
|
+
- (Sees around corners, prevents future problems)
|
|
363
|
+
|
|
364
|
+
**Appropriate When:**
|
|
365
|
+
- Patterns are predictable
|
|
366
|
+
- Preventing > Reacting
|
|
367
|
+
- Can see trajectory clearly
|
|
368
|
+
- High confidence in prediction
|
|
369
|
+
|
|
370
|
+
**Real-world Example:**
|
|
371
|
+
AI Nurse Florence predicts CMS compliance gaps 30 days before audit,
|
|
372
|
+
giving hospital time to remediate (demonstrated Level 4).
|
|
373
|
+
|
|
374
|
+
Example:
|
|
375
|
+
>>> level4 = Level4Anticipatory()
|
|
376
|
+
>>> response = level4.respond({
|
|
377
|
+
... "current_state": {...},
|
|
378
|
+
... "trajectory": "compliance_gap",
|
|
379
|
+
... "prediction_horizon": "30_days"
|
|
380
|
+
... })
|
|
381
|
+
>>> print(response["predicted_needs"])
|
|
382
|
+
|
|
383
|
+
"""
|
|
384
|
+
|
|
385
|
+
level_number = 4
|
|
386
|
+
level_name = "Anticipatory Empathy"
|
|
387
|
+
|
|
388
|
+
def respond(self, context: dict[str, Any]) -> dict[str, Any]:
|
|
389
|
+
"""Respond anticipatorily to predicted future needs
|
|
390
|
+
|
|
391
|
+
Analyzes trajectory and prepares for future needs before they arise.
|
|
392
|
+
"""
|
|
393
|
+
current_state = context.get("current_state", {})
|
|
394
|
+
trajectory = context.get("trajectory", "unknown")
|
|
395
|
+
horizon = context.get("prediction_horizon", "unknown")
|
|
396
|
+
|
|
397
|
+
predictions = self._predict_future_needs(current_state, trajectory, horizon)
|
|
398
|
+
|
|
399
|
+
response = {
|
|
400
|
+
"level": self.level_number,
|
|
401
|
+
"level_name": self.level_name,
|
|
402
|
+
"action": "anticipatory_preparation",
|
|
403
|
+
"description": f"Anticipating needs in {horizon}",
|
|
404
|
+
"initiative": "anticipatory",
|
|
405
|
+
"current_trajectory": trajectory,
|
|
406
|
+
"prediction_horizon": horizon,
|
|
407
|
+
"predicted_needs": predictions["needs"],
|
|
408
|
+
"preventive_actions": predictions["actions"],
|
|
409
|
+
"confidence": predictions["confidence"],
|
|
410
|
+
"reasoning": "Level 4: Predicting and preparing for future needs",
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
self.record_action(
|
|
414
|
+
action_type="anticipatory_preparation",
|
|
415
|
+
description=f"Predicted {len(predictions['needs'])} future needs",
|
|
416
|
+
context=context,
|
|
417
|
+
)
|
|
418
|
+
|
|
419
|
+
return response
|
|
420
|
+
|
|
421
|
+
def _predict_future_needs(
|
|
422
|
+
self,
|
|
423
|
+
current_state: dict[str, Any],
|
|
424
|
+
trajectory: str,
|
|
425
|
+
horizon: str,
|
|
426
|
+
) -> dict[str, Any]:
|
|
427
|
+
"""Predict future needs based on current trajectory"""
|
|
428
|
+
# Simulate prediction logic
|
|
429
|
+
predicted_needs = [
|
|
430
|
+
f"Based on {trajectory} trajectory, will need X in {horizon}",
|
|
431
|
+
"Current trend suggests Y will become bottleneck",
|
|
432
|
+
"Preparation for Z should begin now",
|
|
433
|
+
]
|
|
434
|
+
|
|
435
|
+
preventive_actions = [
|
|
436
|
+
"Pre-generate required resources",
|
|
437
|
+
"Alert stakeholders to predicted issues",
|
|
438
|
+
"Prepare mitigation strategies",
|
|
439
|
+
]
|
|
440
|
+
|
|
441
|
+
return {
|
|
442
|
+
"needs": predicted_needs,
|
|
443
|
+
"actions": preventive_actions,
|
|
444
|
+
"confidence": 0.85,
|
|
445
|
+
"prediction_basis": "trajectory_analysis",
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
|
|
449
|
+
class Level5Systems(EmpathyLevel):
|
|
450
|
+
"""Level 5: Systems Empathy
|
|
451
|
+
|
|
452
|
+
**Principle**: Build structures that help at scale
|
|
453
|
+
|
|
454
|
+
**Characteristics:**
|
|
455
|
+
- Creates reusable frameworks
|
|
456
|
+
- Enables AI-AI cooperation
|
|
457
|
+
- Shares patterns across agents
|
|
458
|
+
- Builds systems that compound value
|
|
459
|
+
|
|
460
|
+
**Example:**
|
|
461
|
+
- One agent discovers documentation burden (18 cases)
|
|
462
|
+
- Doesn't just solve each case individually
|
|
463
|
+
- Creates a pattern-detection system
|
|
464
|
+
- Shares pattern with other agents
|
|
465
|
+
- All agents now benefit from discovery
|
|
466
|
+
- (Solves the class of problems, not just instances)
|
|
467
|
+
|
|
468
|
+
**Appropriate When:**
|
|
469
|
+
- Pattern repeats across domains
|
|
470
|
+
- Can help beyond current user
|
|
471
|
+
- System-level solution exists
|
|
472
|
+
- Value compounds over time
|
|
473
|
+
|
|
474
|
+
**Real-world Example:**
|
|
475
|
+
Instead of manually documenting each compliance gap, create a
|
|
476
|
+
documentation framework that auto-generates from patterns.
|
|
477
|
+
|
|
478
|
+
Example:
|
|
479
|
+
>>> level5 = Level5Systems()
|
|
480
|
+
>>> response = level5.respond({
|
|
481
|
+
... "problem_class": "documentation_burden",
|
|
482
|
+
... "instances": 18,
|
|
483
|
+
... "pattern": "repetitive_structure"
|
|
484
|
+
... })
|
|
485
|
+
>>> print(response["system_created"])
|
|
486
|
+
|
|
487
|
+
"""
|
|
488
|
+
|
|
489
|
+
level_number = 5
|
|
490
|
+
level_name = "Systems Empathy"
|
|
491
|
+
|
|
492
|
+
def respond(self, context: dict[str, Any]) -> dict[str, Any]:
|
|
493
|
+
"""Respond with systems-level solution
|
|
494
|
+
|
|
495
|
+
Creates reusable structures that help at scale.
|
|
496
|
+
"""
|
|
497
|
+
problem_class = context.get("problem_class", "unknown")
|
|
498
|
+
instances = context.get("instances", 0)
|
|
499
|
+
pattern = context.get("pattern")
|
|
500
|
+
|
|
501
|
+
system_design = self._design_system_solution(problem_class, instances, pattern)
|
|
502
|
+
|
|
503
|
+
response = {
|
|
504
|
+
"level": self.level_number,
|
|
505
|
+
"level_name": self.level_name,
|
|
506
|
+
"action": "systems_level_solution",
|
|
507
|
+
"description": f"Creating system to solve {problem_class} at scale",
|
|
508
|
+
"initiative": "systems_thinking",
|
|
509
|
+
"problem_class": problem_class,
|
|
510
|
+
"instances_addressed": instances,
|
|
511
|
+
"system_created": system_design["system"],
|
|
512
|
+
"leverage_point": system_design["leverage"],
|
|
513
|
+
"compounding_value": system_design["value"],
|
|
514
|
+
"ai_ai_sharing": system_design["sharing"],
|
|
515
|
+
"reasoning": "Level 5: Building structures that help at scale",
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
self.record_action(
|
|
519
|
+
action_type="systems_solution",
|
|
520
|
+
description=f"Created system solution for {problem_class}",
|
|
521
|
+
context=context,
|
|
522
|
+
)
|
|
523
|
+
|
|
524
|
+
return response
|
|
525
|
+
|
|
526
|
+
def _design_system_solution(
|
|
527
|
+
self,
|
|
528
|
+
problem_class: str,
|
|
529
|
+
instances: int,
|
|
530
|
+
pattern: str | None,
|
|
531
|
+
) -> dict[str, Any]:
|
|
532
|
+
"""Design a system-level solution"""
|
|
533
|
+
return {
|
|
534
|
+
"system": {
|
|
535
|
+
"name": f"{problem_class}_framework",
|
|
536
|
+
"description": f"Automated system to solve {problem_class}",
|
|
537
|
+
"components": ["Pattern detection", "Auto-generation", "Shared learning library"],
|
|
538
|
+
},
|
|
539
|
+
"leverage": "Self-organization (Meadows Level 9)",
|
|
540
|
+
"value": {
|
|
541
|
+
"immediate": f"Solves {instances} existing instances",
|
|
542
|
+
"compounding": "Each future instance solved automatically",
|
|
543
|
+
"multiplier": "All agents benefit from pattern library",
|
|
544
|
+
},
|
|
545
|
+
"sharing": {
|
|
546
|
+
"mechanism": "Pattern Library",
|
|
547
|
+
"scope": "All agents in collective",
|
|
548
|
+
"benefit": "One agent's discovery helps all",
|
|
549
|
+
},
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
|
|
553
|
+
# Convenience function to get level class by number
|
|
554
|
+
def get_level_class(level: int) -> type:
|
|
555
|
+
"""Get the class for a specific empathy level
|
|
556
|
+
|
|
557
|
+
Args:
|
|
558
|
+
level: Level number (1-5)
|
|
559
|
+
|
|
560
|
+
Returns:
|
|
561
|
+
Level class
|
|
562
|
+
|
|
563
|
+
Example:
|
|
564
|
+
>>> LevelClass = get_level_class(4)
|
|
565
|
+
>>> level4 = LevelClass()
|
|
566
|
+
>>> print(level4.level_name)
|
|
567
|
+
'Anticipatory Empathy'
|
|
568
|
+
|
|
569
|
+
"""
|
|
570
|
+
levels = {
|
|
571
|
+
1: Level1Reactive,
|
|
572
|
+
2: Level2Guided,
|
|
573
|
+
3: Level3Proactive,
|
|
574
|
+
4: Level4Anticipatory,
|
|
575
|
+
5: Level5Systems,
|
|
576
|
+
}
|
|
577
|
+
return levels.get(level, Level1Reactive)
|