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,305 @@
|
|
|
1
|
+
"""Base Classes for Agent Factory
|
|
2
|
+
|
|
3
|
+
Defines the common interfaces that all framework adapters must implement.
|
|
4
|
+
These abstractions allow seamless switching between LangChain, LangGraph,
|
|
5
|
+
AutoGen, Haystack, and native Empathy agents.
|
|
6
|
+
|
|
7
|
+
Copyright 2025 Smart-AI-Memory
|
|
8
|
+
Licensed under Fair Source License 0.9
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from abc import ABC, abstractmethod
|
|
12
|
+
from collections.abc import Callable
|
|
13
|
+
from dataclasses import dataclass, field
|
|
14
|
+
from enum import Enum
|
|
15
|
+
from typing import Any
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class AgentRole(Enum):
|
|
19
|
+
"""Standard agent roles for multi-agent systems."""
|
|
20
|
+
|
|
21
|
+
# Core roles
|
|
22
|
+
COORDINATOR = "coordinator" # Orchestrates other agents
|
|
23
|
+
RESEARCHER = "researcher" # Gathers information
|
|
24
|
+
WRITER = "writer" # Produces content
|
|
25
|
+
REVIEWER = "reviewer" # Reviews/critiques
|
|
26
|
+
EDITOR = "editor" # Refines content
|
|
27
|
+
EXECUTOR = "executor" # Runs code/commands
|
|
28
|
+
|
|
29
|
+
# Specialized roles
|
|
30
|
+
DEBUGGER = "debugger" # Finds and fixes bugs
|
|
31
|
+
SECURITY = "security" # Security analysis
|
|
32
|
+
ARCHITECT = "architect" # System design
|
|
33
|
+
TESTER = "tester" # Creates tests
|
|
34
|
+
DOCUMENTER = "documenter" # Documentation
|
|
35
|
+
|
|
36
|
+
# RAG roles
|
|
37
|
+
RETRIEVER = "retriever" # Document retrieval
|
|
38
|
+
SUMMARIZER = "summarizer" # Summarization
|
|
39
|
+
ANSWERER = "answerer" # Question answering
|
|
40
|
+
|
|
41
|
+
# Custom
|
|
42
|
+
CUSTOM = "custom"
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class AgentCapability(Enum):
|
|
46
|
+
"""Capabilities an agent can have."""
|
|
47
|
+
|
|
48
|
+
CODE_EXECUTION = "code_execution"
|
|
49
|
+
TOOL_USE = "tool_use"
|
|
50
|
+
WEB_SEARCH = "web_search"
|
|
51
|
+
FILE_ACCESS = "file_access"
|
|
52
|
+
MEMORY = "memory"
|
|
53
|
+
RETRIEVAL = "retrieval"
|
|
54
|
+
VISION = "vision"
|
|
55
|
+
FUNCTION_CALLING = "function_calling"
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
@dataclass
|
|
59
|
+
class AgentConfig:
|
|
60
|
+
"""Configuration for creating an agent."""
|
|
61
|
+
|
|
62
|
+
# Identity
|
|
63
|
+
name: str
|
|
64
|
+
role: AgentRole = AgentRole.CUSTOM
|
|
65
|
+
description: str = ""
|
|
66
|
+
|
|
67
|
+
# Model selection
|
|
68
|
+
model_tier: str = "capable" # cheap, capable, premium
|
|
69
|
+
model_override: str | None = None # Specific model ID
|
|
70
|
+
|
|
71
|
+
# Capabilities
|
|
72
|
+
capabilities: list[AgentCapability] = field(default_factory=list)
|
|
73
|
+
tools: list[Any] = field(default_factory=list)
|
|
74
|
+
|
|
75
|
+
# Behavior
|
|
76
|
+
system_prompt: str | None = None
|
|
77
|
+
temperature: float = 0.7
|
|
78
|
+
max_tokens: int = 4096
|
|
79
|
+
|
|
80
|
+
# Empathy integration
|
|
81
|
+
empathy_level: int = 4 # 1-5
|
|
82
|
+
use_patterns: bool = True # Load learned patterns
|
|
83
|
+
track_costs: bool = True # Track API costs
|
|
84
|
+
|
|
85
|
+
# Memory
|
|
86
|
+
memory_enabled: bool = True
|
|
87
|
+
memory_type: str = "conversation" # conversation, summary, vector
|
|
88
|
+
|
|
89
|
+
# Framework-specific options
|
|
90
|
+
framework_options: dict = field(default_factory=dict)
|
|
91
|
+
|
|
92
|
+
# Resilience patterns
|
|
93
|
+
resilience_enabled: bool = False
|
|
94
|
+
circuit_breaker_threshold: int = 3
|
|
95
|
+
retry_max_attempts: int = 2
|
|
96
|
+
timeout_seconds: float = 30.0
|
|
97
|
+
|
|
98
|
+
# Memory Graph integration
|
|
99
|
+
memory_graph_enabled: bool = False
|
|
100
|
+
memory_graph_path: str = "patterns/memory_graph.json"
|
|
101
|
+
store_findings: bool = True
|
|
102
|
+
query_similar: bool = True
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
@dataclass
|
|
106
|
+
class WorkflowConfig:
|
|
107
|
+
"""Configuration for creating a workflow/graph."""
|
|
108
|
+
|
|
109
|
+
name: str
|
|
110
|
+
description: str = ""
|
|
111
|
+
|
|
112
|
+
# Execution mode
|
|
113
|
+
mode: str = "sequential" # sequential, parallel, graph, conversation
|
|
114
|
+
max_iterations: int = 10
|
|
115
|
+
timeout_seconds: int = 300
|
|
116
|
+
|
|
117
|
+
# State management
|
|
118
|
+
state_schema: dict | None = None
|
|
119
|
+
checkpointing: bool = True
|
|
120
|
+
|
|
121
|
+
# Error handling
|
|
122
|
+
retry_on_error: bool = True
|
|
123
|
+
max_retries: int = 3
|
|
124
|
+
|
|
125
|
+
# Framework-specific options
|
|
126
|
+
framework_options: dict = field(default_factory=dict)
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
class BaseAgent(ABC):
|
|
130
|
+
"""Abstract base class for framework-agnostic agents.
|
|
131
|
+
|
|
132
|
+
All framework adapters create agents that implement this interface,
|
|
133
|
+
allowing seamless switching between frameworks.
|
|
134
|
+
"""
|
|
135
|
+
|
|
136
|
+
def __init__(self, config: AgentConfig):
|
|
137
|
+
self.config = config
|
|
138
|
+
self.name = config.name
|
|
139
|
+
self.role = config.role
|
|
140
|
+
self._conversation_history: list[dict] = []
|
|
141
|
+
|
|
142
|
+
@abstractmethod
|
|
143
|
+
async def invoke(self, input_data: str | dict, context: dict | None = None) -> dict:
|
|
144
|
+
"""Invoke the agent with input.
|
|
145
|
+
|
|
146
|
+
Args:
|
|
147
|
+
input_data: User input or structured data
|
|
148
|
+
context: Optional context (previous results, shared state)
|
|
149
|
+
|
|
150
|
+
Returns:
|
|
151
|
+
Dict with at least {"output": str, "metadata": dict}
|
|
152
|
+
|
|
153
|
+
"""
|
|
154
|
+
|
|
155
|
+
@abstractmethod
|
|
156
|
+
async def stream(self, input_data: str | dict, context: dict | None = None):
|
|
157
|
+
"""Stream agent response.
|
|
158
|
+
|
|
159
|
+
Yields chunks of the response as they're generated.
|
|
160
|
+
"""
|
|
161
|
+
|
|
162
|
+
def add_tool(self, tool: Any) -> None:
|
|
163
|
+
"""Add a tool to the agent."""
|
|
164
|
+
self.config.tools.append(tool)
|
|
165
|
+
|
|
166
|
+
def get_conversation_history(self) -> list[dict]:
|
|
167
|
+
"""Get conversation history."""
|
|
168
|
+
return self._conversation_history.copy()
|
|
169
|
+
|
|
170
|
+
def clear_history(self) -> None:
|
|
171
|
+
"""Clear conversation history."""
|
|
172
|
+
self._conversation_history.clear()
|
|
173
|
+
|
|
174
|
+
@property
|
|
175
|
+
def model(self) -> str:
|
|
176
|
+
"""Get the model being used."""
|
|
177
|
+
return self.config.model_override or f"tier:{self.config.model_tier}"
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
class BaseWorkflow(ABC):
|
|
181
|
+
"""Abstract base class for framework-agnostic workflows.
|
|
182
|
+
|
|
183
|
+
Workflows orchestrate multiple agents to complete complex tasks.
|
|
184
|
+
"""
|
|
185
|
+
|
|
186
|
+
def __init__(self, config: WorkflowConfig, agents: list[BaseAgent]):
|
|
187
|
+
self.config = config
|
|
188
|
+
self.agents = {agent.name: agent for agent in agents}
|
|
189
|
+
self._state: dict = {}
|
|
190
|
+
|
|
191
|
+
@abstractmethod
|
|
192
|
+
async def run(self, input_data: str | dict, initial_state: dict | None = None) -> dict:
|
|
193
|
+
"""Run the workflow.
|
|
194
|
+
|
|
195
|
+
Args:
|
|
196
|
+
input_data: Initial input
|
|
197
|
+
initial_state: Optional initial state
|
|
198
|
+
|
|
199
|
+
Returns:
|
|
200
|
+
Dict with final output and execution metadata
|
|
201
|
+
|
|
202
|
+
"""
|
|
203
|
+
|
|
204
|
+
@abstractmethod
|
|
205
|
+
async def stream(self, input_data: str | dict, initial_state: dict | None = None):
|
|
206
|
+
"""Stream workflow execution.
|
|
207
|
+
|
|
208
|
+
Yields updates as agents complete their work.
|
|
209
|
+
"""
|
|
210
|
+
|
|
211
|
+
def get_state(self) -> dict:
|
|
212
|
+
"""Get current workflow state."""
|
|
213
|
+
return self._state.copy()
|
|
214
|
+
|
|
215
|
+
def get_agent(self, name: str) -> BaseAgent | None:
|
|
216
|
+
"""Get agent by name."""
|
|
217
|
+
return self.agents.get(name)
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
class BaseAdapter(ABC):
|
|
221
|
+
"""Abstract base class for framework adapters.
|
|
222
|
+
|
|
223
|
+
Each framework (LangChain, LangGraph, AutoGen, Haystack) implements
|
|
224
|
+
an adapter that creates agents and workflows using that framework's
|
|
225
|
+
native primitives while exposing a common interface.
|
|
226
|
+
"""
|
|
227
|
+
|
|
228
|
+
@property
|
|
229
|
+
@abstractmethod
|
|
230
|
+
def framework_name(self) -> str:
|
|
231
|
+
"""Name of the framework this adapter supports."""
|
|
232
|
+
|
|
233
|
+
@abstractmethod
|
|
234
|
+
def is_available(self) -> bool:
|
|
235
|
+
"""Check if the framework is installed and available."""
|
|
236
|
+
|
|
237
|
+
@abstractmethod
|
|
238
|
+
def create_agent(self, config: AgentConfig) -> BaseAgent:
|
|
239
|
+
"""Create an agent using this framework.
|
|
240
|
+
|
|
241
|
+
Args:
|
|
242
|
+
config: Agent configuration
|
|
243
|
+
|
|
244
|
+
Returns:
|
|
245
|
+
Agent implementing BaseAgent interface
|
|
246
|
+
|
|
247
|
+
"""
|
|
248
|
+
|
|
249
|
+
@abstractmethod
|
|
250
|
+
def create_workflow(self, config: WorkflowConfig, agents: list[BaseAgent]) -> BaseWorkflow:
|
|
251
|
+
"""Create a workflow using this framework.
|
|
252
|
+
|
|
253
|
+
Args:
|
|
254
|
+
config: Workflow configuration
|
|
255
|
+
agents: List of agents to include
|
|
256
|
+
|
|
257
|
+
Returns:
|
|
258
|
+
Workflow implementing BaseWorkflow interface
|
|
259
|
+
|
|
260
|
+
"""
|
|
261
|
+
|
|
262
|
+
def create_tool(
|
|
263
|
+
self,
|
|
264
|
+
name: str,
|
|
265
|
+
description: str,
|
|
266
|
+
func: Callable,
|
|
267
|
+
args_schema: dict | None = None,
|
|
268
|
+
) -> Any:
|
|
269
|
+
"""Create a tool for agents in this framework's format.
|
|
270
|
+
|
|
271
|
+
Default implementation returns a dict; override for framework-specific.
|
|
272
|
+
"""
|
|
273
|
+
return {"name": name, "description": description, "func": func, "args_schema": args_schema}
|
|
274
|
+
|
|
275
|
+
def get_model_for_tier(self, tier: str, provider: str = "anthropic") -> str:
|
|
276
|
+
"""Get the model ID for a given tier.
|
|
277
|
+
|
|
278
|
+
Uses Empathy's ModelRouter if available, otherwise defaults.
|
|
279
|
+
"""
|
|
280
|
+
try:
|
|
281
|
+
from attune_llm.routing import ModelRouter
|
|
282
|
+
|
|
283
|
+
router = ModelRouter()
|
|
284
|
+
# Map tier to a task type
|
|
285
|
+
task_map = {
|
|
286
|
+
"cheap": "summarize",
|
|
287
|
+
"capable": "generate_code",
|
|
288
|
+
"premium": "architectural_decision",
|
|
289
|
+
}
|
|
290
|
+
task = task_map.get(tier, "generate_code")
|
|
291
|
+
return router.route(task, provider)
|
|
292
|
+
except ImportError:
|
|
293
|
+
# Fallback defaults
|
|
294
|
+
defaults = {
|
|
295
|
+
"anthropic": {
|
|
296
|
+
"cheap": "claude-3-haiku-20240307",
|
|
297
|
+
"capable": "claude-sonnet-4-20250514",
|
|
298
|
+
"premium": "claude-opus-4-20250514",
|
|
299
|
+
},
|
|
300
|
+
"openai": {"cheap": "gpt-4o-mini", "capable": "gpt-4o", "premium": "o1"},
|
|
301
|
+
}
|
|
302
|
+
return defaults.get(provider, defaults["anthropic"]).get(
|
|
303
|
+
tier,
|
|
304
|
+
"claude-sonnet-4-20250514",
|
|
305
|
+
)
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"""Empathy Framework - Pre-built Crews
|
|
2
|
+
|
|
3
|
+
Ready-to-use multi-agent crews for common tasks.
|
|
4
|
+
Each crew leverages CrewAI's hierarchical collaboration patterns
|
|
5
|
+
with XML-enhanced prompts for structured output.
|
|
6
|
+
|
|
7
|
+
Copyright 2025 Smart-AI-Memory
|
|
8
|
+
Licensed under Fair Source License 0.9
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from attune_llm.agent_factory.crews.code_review import (
|
|
12
|
+
CodeReviewConfig,
|
|
13
|
+
CodeReviewCrew,
|
|
14
|
+
CodeReviewReport,
|
|
15
|
+
ReviewFinding,
|
|
16
|
+
Verdict,
|
|
17
|
+
)
|
|
18
|
+
from attune_llm.agent_factory.crews.health_check import (
|
|
19
|
+
HealthCheckConfig,
|
|
20
|
+
HealthCheckCrew,
|
|
21
|
+
HealthCheckReport,
|
|
22
|
+
HealthFix,
|
|
23
|
+
HealthIssue,
|
|
24
|
+
)
|
|
25
|
+
from attune_llm.agent_factory.crews.refactoring import (
|
|
26
|
+
CodeCheckpoint,
|
|
27
|
+
RefactoringCategory,
|
|
28
|
+
RefactoringConfig,
|
|
29
|
+
RefactoringCrew,
|
|
30
|
+
RefactoringFinding,
|
|
31
|
+
RefactoringReport,
|
|
32
|
+
UserProfile,
|
|
33
|
+
)
|
|
34
|
+
from attune_llm.agent_factory.crews.security_audit import (
|
|
35
|
+
SecurityAuditConfig,
|
|
36
|
+
SecurityAuditCrew,
|
|
37
|
+
SecurityFinding,
|
|
38
|
+
SecurityReport,
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
__all__ = [
|
|
42
|
+
"CodeCheckpoint",
|
|
43
|
+
"CodeReviewConfig",
|
|
44
|
+
# Code Review Crew
|
|
45
|
+
"CodeReviewCrew",
|
|
46
|
+
"CodeReviewReport",
|
|
47
|
+
"HealthCheckConfig",
|
|
48
|
+
# Health Check Crew
|
|
49
|
+
"HealthCheckCrew",
|
|
50
|
+
"HealthCheckReport",
|
|
51
|
+
"HealthFix",
|
|
52
|
+
"HealthIssue",
|
|
53
|
+
"RefactoringCategory",
|
|
54
|
+
"RefactoringConfig",
|
|
55
|
+
# Refactoring Crew
|
|
56
|
+
"RefactoringCrew",
|
|
57
|
+
"RefactoringFinding",
|
|
58
|
+
"RefactoringReport",
|
|
59
|
+
"ReviewFinding",
|
|
60
|
+
"SecurityAuditConfig",
|
|
61
|
+
# Security Audit Crew
|
|
62
|
+
"SecurityAuditCrew",
|
|
63
|
+
"SecurityFinding",
|
|
64
|
+
"SecurityReport",
|
|
65
|
+
"UserProfile",
|
|
66
|
+
"Verdict",
|
|
67
|
+
]
|