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
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
"""Unified Agent Configuration
|
|
2
|
+
|
|
3
|
+
Single source of truth for all agent, wizard, and workflow configuration.
|
|
4
|
+
Uses Pydantic for validation and type safety.
|
|
5
|
+
|
|
6
|
+
This resolves the AgentConfig duplication between:
|
|
7
|
+
- empathy_llm_toolkit/agent_factory/base.py
|
|
8
|
+
- agents/book_production/base.py
|
|
9
|
+
|
|
10
|
+
Copyright 2025 Smart-AI-Memory
|
|
11
|
+
Licensed under Fair Source License 0.9
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from enum import Enum
|
|
15
|
+
from typing import Any, Literal
|
|
16
|
+
|
|
17
|
+
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class ModelTier(str, Enum):
|
|
21
|
+
"""Model tier for cost optimization."""
|
|
22
|
+
|
|
23
|
+
CHEAP = "cheap" # Haiku - fast, low cost
|
|
24
|
+
CAPABLE = "capable" # Sonnet - balanced
|
|
25
|
+
PREMIUM = "premium" # Opus - highest quality
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class Provider(str, Enum):
|
|
29
|
+
"""LLM provider options."""
|
|
30
|
+
|
|
31
|
+
ANTHROPIC = "anthropic"
|
|
32
|
+
OPENAI = "openai"
|
|
33
|
+
LOCAL = "local"
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class WorkflowMode(str, Enum):
|
|
37
|
+
"""Workflow execution modes."""
|
|
38
|
+
|
|
39
|
+
SEQUENTIAL = "sequential"
|
|
40
|
+
PARALLEL = "parallel"
|
|
41
|
+
GRAPH = "graph"
|
|
42
|
+
CONVERSATION = "conversation"
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class AgentOperationError(Exception):
|
|
46
|
+
"""Error during agent operation with context."""
|
|
47
|
+
|
|
48
|
+
def __init__(self, operation: str, cause: Exception):
|
|
49
|
+
self.operation = operation
|
|
50
|
+
self.cause = cause
|
|
51
|
+
super().__init__(f"Agent operation '{operation}' failed: {cause}")
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class UnifiedAgentConfig(BaseModel):
|
|
55
|
+
"""Unified configuration model for all agents.
|
|
56
|
+
|
|
57
|
+
This is the single source of truth for agent configuration,
|
|
58
|
+
replacing duplicate definitions across the codebase.
|
|
59
|
+
|
|
60
|
+
Example:
|
|
61
|
+
config = UnifiedAgentConfig(
|
|
62
|
+
name="researcher",
|
|
63
|
+
role="researcher",
|
|
64
|
+
model_tier=ModelTier.CAPABLE,
|
|
65
|
+
empathy_level=4
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
"""
|
|
69
|
+
|
|
70
|
+
# Identity
|
|
71
|
+
name: str = Field(..., min_length=1, description="Unique agent name")
|
|
72
|
+
role: str = Field(default="custom", description="Agent role (researcher, writer, etc.)")
|
|
73
|
+
description: str = Field(default="", description="Agent description")
|
|
74
|
+
|
|
75
|
+
# Model selection
|
|
76
|
+
model_tier: ModelTier = Field(
|
|
77
|
+
default=ModelTier.CAPABLE,
|
|
78
|
+
description="Model tier for cost optimization",
|
|
79
|
+
)
|
|
80
|
+
model_override: str | None = Field(
|
|
81
|
+
default=None,
|
|
82
|
+
description="Specific model ID to use (overrides tier)",
|
|
83
|
+
)
|
|
84
|
+
provider: Provider = Field(default=Provider.ANTHROPIC, description="LLM provider")
|
|
85
|
+
|
|
86
|
+
# Empathy Framework features
|
|
87
|
+
empathy_level: int = Field(
|
|
88
|
+
default=4,
|
|
89
|
+
ge=1,
|
|
90
|
+
le=5,
|
|
91
|
+
description="Empathy level (1=Basic, 4=Anticipatory, 5=Transformative)",
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
# Feature flags
|
|
95
|
+
memory_enabled: bool = Field(default=True, description="Enable conversation memory")
|
|
96
|
+
pattern_learning: bool = Field(default=True, description="Enable pattern learning")
|
|
97
|
+
cost_tracking: bool = Field(default=True, description="Track API costs")
|
|
98
|
+
use_patterns: bool = Field(default=True, description="Use learned patterns")
|
|
99
|
+
|
|
100
|
+
# LLM parameters
|
|
101
|
+
temperature: float = Field(default=0.7, ge=0.0, le=2.0)
|
|
102
|
+
max_tokens: int = Field(default=4096, ge=1, le=200000)
|
|
103
|
+
timeout: int = Field(default=120, ge=1, description="Timeout in seconds")
|
|
104
|
+
|
|
105
|
+
# Retry configuration
|
|
106
|
+
retry_attempts: int = Field(default=3, ge=0, le=10)
|
|
107
|
+
retry_delay: float = Field(default=1.0, ge=0.0)
|
|
108
|
+
|
|
109
|
+
# System prompt
|
|
110
|
+
system_prompt: str | None = Field(default=None, description="Custom system prompt")
|
|
111
|
+
|
|
112
|
+
# Tools and capabilities
|
|
113
|
+
tools: list[Any] = Field(default_factory=list, description="Agent tools")
|
|
114
|
+
capabilities: list[str] = Field(default_factory=list, description="Agent capabilities")
|
|
115
|
+
|
|
116
|
+
# Framework-specific options
|
|
117
|
+
framework_options: dict[str, Any] = Field(
|
|
118
|
+
default_factory=dict,
|
|
119
|
+
description="Framework-specific configuration",
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
# Extensions
|
|
123
|
+
extra: dict[str, Any] = Field(
|
|
124
|
+
default_factory=dict,
|
|
125
|
+
description="Additional custom configuration",
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
@field_validator("role")
|
|
129
|
+
@classmethod
|
|
130
|
+
def normalize_role(cls, v: str) -> str:
|
|
131
|
+
"""Normalize role to lowercase."""
|
|
132
|
+
return v.lower().strip()
|
|
133
|
+
|
|
134
|
+
def get_model_id(self) -> str:
|
|
135
|
+
"""Get the actual model ID based on tier and provider.
|
|
136
|
+
|
|
137
|
+
Returns:
|
|
138
|
+
Model identifier string
|
|
139
|
+
|
|
140
|
+
"""
|
|
141
|
+
if self.model_override:
|
|
142
|
+
return self.model_override
|
|
143
|
+
|
|
144
|
+
# Model mapping by provider and tier
|
|
145
|
+
models = {
|
|
146
|
+
Provider.ANTHROPIC: {
|
|
147
|
+
ModelTier.CHEAP: "claude-3-haiku-20240307",
|
|
148
|
+
ModelTier.CAPABLE: "claude-sonnet-4-20250514",
|
|
149
|
+
ModelTier.PREMIUM: "claude-opus-4-20250514",
|
|
150
|
+
},
|
|
151
|
+
Provider.OPENAI: {
|
|
152
|
+
ModelTier.CHEAP: "gpt-4o-mini",
|
|
153
|
+
ModelTier.CAPABLE: "gpt-4o",
|
|
154
|
+
ModelTier.PREMIUM: "gpt-4o",
|
|
155
|
+
},
|
|
156
|
+
Provider.LOCAL: {
|
|
157
|
+
ModelTier.CHEAP: "llama3.2:3b",
|
|
158
|
+
ModelTier.CAPABLE: "llama3.1:8b",
|
|
159
|
+
ModelTier.PREMIUM: "llama3.1:70b",
|
|
160
|
+
},
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
return models.get(self.provider, {}).get(
|
|
164
|
+
self.model_tier,
|
|
165
|
+
"claude-sonnet-4-20250514", # Fallback
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
def for_book_production(self) -> "BookProductionConfig":
|
|
169
|
+
"""Convert to BookProductionConfig for backward compatibility.
|
|
170
|
+
|
|
171
|
+
Returns:
|
|
172
|
+
BookProductionConfig instance
|
|
173
|
+
|
|
174
|
+
"""
|
|
175
|
+
return BookProductionConfig(
|
|
176
|
+
agent_config=self,
|
|
177
|
+
memdocs_config=MemDocsConfig(),
|
|
178
|
+
redis_config=RedisConfig(),
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
model_config = ConfigDict(use_enum_values=True)
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
class MemDocsConfig(BaseModel):
|
|
185
|
+
"""Configuration for MemDocs pattern storage integration."""
|
|
186
|
+
|
|
187
|
+
enabled: bool = Field(default=True, description="Enable MemDocs integration")
|
|
188
|
+
project: str = Field(default="empathy-framework", description="Project identifier")
|
|
189
|
+
|
|
190
|
+
collections: dict[str, str] = Field(
|
|
191
|
+
default_factory=lambda: {
|
|
192
|
+
"patterns": "learned_patterns",
|
|
193
|
+
"exemplars": "exemplar_examples",
|
|
194
|
+
"transformations": "transformation_examples",
|
|
195
|
+
"feedback": "quality_feedback",
|
|
196
|
+
},
|
|
197
|
+
description="Collection name mappings",
|
|
198
|
+
)
|
|
199
|
+
|
|
200
|
+
# Storage settings
|
|
201
|
+
storage_path: str = Field(default="./patterns", description="Local storage path")
|
|
202
|
+
encryption_enabled: bool = Field(default=False, description="Enable encryption")
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
class RedisConfig(BaseModel):
|
|
206
|
+
"""Configuration for Redis state management."""
|
|
207
|
+
|
|
208
|
+
enabled: bool = Field(default=True, description="Enable Redis")
|
|
209
|
+
host: str = Field(default="localhost", description="Redis host")
|
|
210
|
+
port: int = Field(default=6379, ge=1, le=65535)
|
|
211
|
+
db: int = Field(default=0, ge=0, le=15)
|
|
212
|
+
password: str | None = Field(default=None, description="Redis password")
|
|
213
|
+
|
|
214
|
+
prefix: str = Field(default="empathy", description="Key prefix")
|
|
215
|
+
ttl: int = Field(default=86400, ge=0, description="Default TTL in seconds")
|
|
216
|
+
|
|
217
|
+
# Connection pool settings
|
|
218
|
+
max_connections: int = Field(default=10, ge=1)
|
|
219
|
+
socket_timeout: float = Field(default=5.0, ge=0.1)
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
class BookProductionConfig(BaseModel):
|
|
223
|
+
"""Unified configuration for book production agents.
|
|
224
|
+
|
|
225
|
+
Combines UnifiedAgentConfig with production-specific settings.
|
|
226
|
+
This replaces the duplicate AgentConfig in agents/book_production/base.py.
|
|
227
|
+
"""
|
|
228
|
+
|
|
229
|
+
agent_config: UnifiedAgentConfig
|
|
230
|
+
memdocs_config: MemDocsConfig = Field(default_factory=MemDocsConfig)
|
|
231
|
+
redis_config: RedisConfig = Field(default_factory=RedisConfig)
|
|
232
|
+
|
|
233
|
+
# Book production specific
|
|
234
|
+
chapter_max_words: int = Field(default=5000, ge=100)
|
|
235
|
+
include_code_examples: bool = Field(default=True)
|
|
236
|
+
target_reading_level: Literal["beginner", "intermediate", "advanced"] = "intermediate"
|
|
237
|
+
|
|
238
|
+
@property
|
|
239
|
+
def model(self) -> str:
|
|
240
|
+
"""Get model ID for backward compatibility."""
|
|
241
|
+
return self.agent_config.get_model_id()
|
|
242
|
+
|
|
243
|
+
@property
|
|
244
|
+
def max_tokens(self) -> int:
|
|
245
|
+
"""Get max tokens for backward compatibility."""
|
|
246
|
+
return self.agent_config.max_tokens
|
|
247
|
+
|
|
248
|
+
@property
|
|
249
|
+
def temperature(self) -> float:
|
|
250
|
+
"""Get temperature for backward compatibility."""
|
|
251
|
+
return self.agent_config.temperature
|
|
252
|
+
|
|
253
|
+
@property
|
|
254
|
+
def timeout(self) -> int:
|
|
255
|
+
"""Get timeout for backward compatibility."""
|
|
256
|
+
return self.agent_config.timeout
|
|
257
|
+
|
|
258
|
+
@property
|
|
259
|
+
def retry_attempts(self) -> int:
|
|
260
|
+
"""Get retry attempts for backward compatibility."""
|
|
261
|
+
return self.agent_config.retry_attempts
|
|
262
|
+
|
|
263
|
+
@property
|
|
264
|
+
def retry_delay(self) -> float:
|
|
265
|
+
"""Get retry delay for backward compatibility."""
|
|
266
|
+
return self.agent_config.retry_delay
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
class WorkflowConfig(BaseModel):
|
|
270
|
+
"""Configuration for agent workflows."""
|
|
271
|
+
|
|
272
|
+
name: str = Field(..., min_length=1)
|
|
273
|
+
description: str = Field(default="")
|
|
274
|
+
mode: WorkflowMode = Field(default=WorkflowMode.SEQUENTIAL)
|
|
275
|
+
|
|
276
|
+
# Execution settings
|
|
277
|
+
max_iterations: int = Field(default=10, ge=1, le=100)
|
|
278
|
+
timeout_seconds: int = Field(default=300, ge=1)
|
|
279
|
+
|
|
280
|
+
# State management
|
|
281
|
+
state_schema: dict[str, Any] | None = Field(default=None)
|
|
282
|
+
checkpointing: bool = Field(default=True)
|
|
283
|
+
|
|
284
|
+
# Error handling
|
|
285
|
+
retry_on_error: bool = Field(default=True)
|
|
286
|
+
max_retries: int = Field(default=3, ge=0)
|
|
287
|
+
|
|
288
|
+
# Framework options
|
|
289
|
+
framework_options: dict[str, Any] = Field(default_factory=dict)
|
|
290
|
+
|
|
291
|
+
model_config = ConfigDict(use_enum_values=True)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"""Context Management for Empathy Framework
|
|
2
|
+
|
|
3
|
+
Strategic compaction to preserve critical state through context window resets.
|
|
4
|
+
Ensures trust levels, detected patterns, and session continuity survive compaction events.
|
|
5
|
+
|
|
6
|
+
Architectural patterns inspired by everything-claude-code by Affaan Mustafa.
|
|
7
|
+
See: https://github.com/affaan-m/everything-claude-code (MIT License)
|
|
8
|
+
See: ACKNOWLEDGMENTS.md for full attribution.
|
|
9
|
+
|
|
10
|
+
Copyright 2025 Smart AI Memory, LLC
|
|
11
|
+
Licensed under Fair Source 0.9
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from attune_llm.context.compaction import CompactionStateManager, CompactState, SBARHandoff
|
|
15
|
+
from attune_llm.context.manager import ContextManager
|
|
16
|
+
|
|
17
|
+
__all__ = [
|
|
18
|
+
"CompactionStateManager",
|
|
19
|
+
"CompactState",
|
|
20
|
+
"ContextManager",
|
|
21
|
+
"SBARHandoff",
|
|
22
|
+
]
|