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,272 @@
|
|
|
1
|
+
"""Context window optimization for reducing token usage.
|
|
2
|
+
|
|
3
|
+
Implements compression strategies to reduce prompt tokens by 20-30%
|
|
4
|
+
while maintaining semantic content and XML structure.
|
|
5
|
+
|
|
6
|
+
Copyright 2026 Smart-AI-Memory
|
|
7
|
+
Licensed under Fair Source License 0.9
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import re
|
|
11
|
+
from enum import Enum
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class CompressionLevel(Enum):
|
|
15
|
+
"""Context window compression levels."""
|
|
16
|
+
|
|
17
|
+
NONE = "none" # No compression
|
|
18
|
+
LIGHT = "light" # Minimal compression (5-10% reduction)
|
|
19
|
+
MODERATE = "moderate" # Balanced compression (15-25% reduction)
|
|
20
|
+
AGGRESSIVE = "aggressive" # Maximum compression (25-35% reduction)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class ContextOptimizer:
|
|
24
|
+
"""Optimizes XML prompts to reduce token usage.
|
|
25
|
+
|
|
26
|
+
Strategies:
|
|
27
|
+
1. Tag compression: <thinking> → <t>, <answer> → <a>
|
|
28
|
+
2. Whitespace optimization: Remove excess whitespace
|
|
29
|
+
3. Comment removal: Strip XML comments
|
|
30
|
+
4. Redundancy elimination: Remove duplicate text
|
|
31
|
+
|
|
32
|
+
Usage:
|
|
33
|
+
optimizer = ContextOptimizer(CompressionLevel.MODERATE)
|
|
34
|
+
optimized = optimizer.optimize(xml_prompt)
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
def __init__(self, level: CompressionLevel = CompressionLevel.MODERATE):
|
|
38
|
+
"""Initialize optimizer with compression level.
|
|
39
|
+
|
|
40
|
+
Args:
|
|
41
|
+
level: Compression level to apply
|
|
42
|
+
"""
|
|
43
|
+
self.level = level
|
|
44
|
+
|
|
45
|
+
# Tag compression mappings
|
|
46
|
+
self._tag_mappings = {
|
|
47
|
+
# Core structure tags
|
|
48
|
+
"thinking": "t",
|
|
49
|
+
"answer": "a",
|
|
50
|
+
"agent_role": "role",
|
|
51
|
+
"agent_goal": "goal",
|
|
52
|
+
"agent_backstory": "back",
|
|
53
|
+
# Common output tags
|
|
54
|
+
"description": "desc",
|
|
55
|
+
"recommendation": "rec",
|
|
56
|
+
"assessment": "assess",
|
|
57
|
+
"analysis": "analyze",
|
|
58
|
+
"explanation": "explain",
|
|
59
|
+
"example": "ex",
|
|
60
|
+
"code_review": "review",
|
|
61
|
+
"security_issue": "sec",
|
|
62
|
+
"performance_issue": "perf",
|
|
63
|
+
"architecture": "arch",
|
|
64
|
+
"implementation": "impl",
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
# Reverse mapping for decompression
|
|
68
|
+
self._reverse_mappings = {v: k for k, v in self._tag_mappings.items()}
|
|
69
|
+
|
|
70
|
+
def optimize(self, xml_prompt: str) -> str:
|
|
71
|
+
"""Optimize XML prompt to reduce token usage.
|
|
72
|
+
|
|
73
|
+
Args:
|
|
74
|
+
xml_prompt: Original XML-structured prompt
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
Optimized prompt with reduced token count
|
|
78
|
+
"""
|
|
79
|
+
if self.level == CompressionLevel.NONE:
|
|
80
|
+
return xml_prompt
|
|
81
|
+
|
|
82
|
+
optimized = xml_prompt
|
|
83
|
+
|
|
84
|
+
# Apply optimizations based on level
|
|
85
|
+
if self.level in (
|
|
86
|
+
CompressionLevel.LIGHT,
|
|
87
|
+
CompressionLevel.MODERATE,
|
|
88
|
+
CompressionLevel.AGGRESSIVE,
|
|
89
|
+
):
|
|
90
|
+
optimized = self._strip_whitespace(optimized)
|
|
91
|
+
optimized = self._remove_comments(optimized)
|
|
92
|
+
|
|
93
|
+
if self.level in (CompressionLevel.MODERATE, CompressionLevel.AGGRESSIVE):
|
|
94
|
+
optimized = self._compress_tags(optimized)
|
|
95
|
+
optimized = self._remove_redundancy(optimized)
|
|
96
|
+
|
|
97
|
+
if self.level == CompressionLevel.AGGRESSIVE:
|
|
98
|
+
optimized = self._aggressive_compression(optimized)
|
|
99
|
+
|
|
100
|
+
return optimized
|
|
101
|
+
|
|
102
|
+
def decompress(self, compressed_response: str) -> str:
|
|
103
|
+
"""Decompress response to restore original tag names.
|
|
104
|
+
|
|
105
|
+
Args:
|
|
106
|
+
compressed_response: Response with compressed tags
|
|
107
|
+
|
|
108
|
+
Returns:
|
|
109
|
+
Response with full tag names restored
|
|
110
|
+
"""
|
|
111
|
+
decompressed = compressed_response
|
|
112
|
+
|
|
113
|
+
# Restore full tag names
|
|
114
|
+
for short, full in self._reverse_mappings.items():
|
|
115
|
+
# Opening tags
|
|
116
|
+
decompressed = decompressed.replace(f"<{short}>", f"<{full}>")
|
|
117
|
+
decompressed = decompressed.replace(f"<{short} ", f"<{full} ")
|
|
118
|
+
# Closing tags
|
|
119
|
+
decompressed = decompressed.replace(f"</{short}>", f"</{full}>")
|
|
120
|
+
|
|
121
|
+
return decompressed
|
|
122
|
+
|
|
123
|
+
def _strip_whitespace(self, text: str) -> str:
|
|
124
|
+
"""Remove excess whitespace while preserving structure.
|
|
125
|
+
|
|
126
|
+
Args:
|
|
127
|
+
text: Input text
|
|
128
|
+
|
|
129
|
+
Returns:
|
|
130
|
+
Text with optimized whitespace
|
|
131
|
+
"""
|
|
132
|
+
# Replace multiple spaces with single space
|
|
133
|
+
text = re.sub(r" {2,}", " ", text)
|
|
134
|
+
|
|
135
|
+
# Remove spaces around XML tags
|
|
136
|
+
text = re.sub(r">\s+<", "><", text)
|
|
137
|
+
|
|
138
|
+
# Remove leading/trailing whitespace from lines
|
|
139
|
+
lines = [line.strip() for line in text.split("\n")]
|
|
140
|
+
|
|
141
|
+
# Remove empty lines
|
|
142
|
+
lines = [line for line in lines if line]
|
|
143
|
+
|
|
144
|
+
return "\n".join(lines)
|
|
145
|
+
|
|
146
|
+
def _remove_comments(self, text: str) -> str:
|
|
147
|
+
"""Remove XML comments.
|
|
148
|
+
|
|
149
|
+
Args:
|
|
150
|
+
text: Input text
|
|
151
|
+
|
|
152
|
+
Returns:
|
|
153
|
+
Text without comments
|
|
154
|
+
"""
|
|
155
|
+
# Remove XML comments
|
|
156
|
+
text = re.sub(r"<!--.*?-->", "", text, flags=re.DOTALL)
|
|
157
|
+
|
|
158
|
+
return text
|
|
159
|
+
|
|
160
|
+
def _compress_tags(self, text: str) -> str:
|
|
161
|
+
"""Compress XML tag names to shorter versions.
|
|
162
|
+
|
|
163
|
+
Args:
|
|
164
|
+
text: Input text
|
|
165
|
+
|
|
166
|
+
Returns:
|
|
167
|
+
Text with compressed tags
|
|
168
|
+
"""
|
|
169
|
+
for full, short in self._tag_mappings.items():
|
|
170
|
+
# Opening tags
|
|
171
|
+
text = text.replace(f"<{full}>", f"<{short}>")
|
|
172
|
+
text = text.replace(f"<{full} ", f"<{short} ")
|
|
173
|
+
# Closing tags
|
|
174
|
+
text = text.replace(f"</{full}>", f"</{short}>")
|
|
175
|
+
|
|
176
|
+
return text
|
|
177
|
+
|
|
178
|
+
def _remove_redundancy(self, text: str) -> str:
|
|
179
|
+
"""Remove redundant phrases and repetition.
|
|
180
|
+
|
|
181
|
+
Args:
|
|
182
|
+
text: Input text
|
|
183
|
+
|
|
184
|
+
Returns:
|
|
185
|
+
Text with redundancy removed
|
|
186
|
+
"""
|
|
187
|
+
# Common redundant phrases in prompts
|
|
188
|
+
redundant_phrases = [
|
|
189
|
+
"Please note that ",
|
|
190
|
+
"It is important to ",
|
|
191
|
+
"Make sure to ",
|
|
192
|
+
"Be sure to ",
|
|
193
|
+
"Remember to ",
|
|
194
|
+
"Don't forget to ",
|
|
195
|
+
]
|
|
196
|
+
|
|
197
|
+
for phrase in redundant_phrases:
|
|
198
|
+
text = text.replace(phrase, "")
|
|
199
|
+
|
|
200
|
+
return text
|
|
201
|
+
|
|
202
|
+
def _aggressive_compression(self, text: str) -> str:
|
|
203
|
+
"""Apply aggressive compression techniques.
|
|
204
|
+
|
|
205
|
+
Args:
|
|
206
|
+
text: Input text
|
|
207
|
+
|
|
208
|
+
Returns:
|
|
209
|
+
Aggressively compressed text
|
|
210
|
+
"""
|
|
211
|
+
# Remove articles (a, an, the) where they don't affect meaning
|
|
212
|
+
# Only in instruction text, not in code or structured output
|
|
213
|
+
lines = []
|
|
214
|
+
for line in text.split("\n"):
|
|
215
|
+
# Skip lines that look like code or XML content
|
|
216
|
+
if "<" in line and ">" in line:
|
|
217
|
+
lines.append(line)
|
|
218
|
+
else:
|
|
219
|
+
# Remove articles from instruction text
|
|
220
|
+
line = re.sub(r"\b(a|an|the)\b\s+", "", line, flags=re.IGNORECASE)
|
|
221
|
+
lines.append(line)
|
|
222
|
+
|
|
223
|
+
text = "\n".join(lines)
|
|
224
|
+
|
|
225
|
+
# Abbreviate common instruction words
|
|
226
|
+
abbreviations = {
|
|
227
|
+
"Generate": "Gen",
|
|
228
|
+
"Analyze": "Analyze", # Keep as is (short)
|
|
229
|
+
"Provide": "Give",
|
|
230
|
+
"Identify": "ID",
|
|
231
|
+
"Determine": "Find",
|
|
232
|
+
"Evaluate": "Eval",
|
|
233
|
+
"Recommend": "Rec",
|
|
234
|
+
"Implement": "Impl",
|
|
235
|
+
"following": "below",
|
|
236
|
+
"should be": "is",
|
|
237
|
+
"you should": "you",
|
|
238
|
+
"must be": "is",
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
for full, abbrev in abbreviations.items():
|
|
242
|
+
text = text.replace(full, abbrev)
|
|
243
|
+
|
|
244
|
+
return text
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
def optimize_xml_prompt(
|
|
248
|
+
prompt: str,
|
|
249
|
+
level: CompressionLevel = CompressionLevel.MODERATE,
|
|
250
|
+
) -> str:
|
|
251
|
+
"""Convenience function to optimize XML prompt.
|
|
252
|
+
|
|
253
|
+
Args:
|
|
254
|
+
prompt: XML-structured prompt to optimize
|
|
255
|
+
level: Compression level to apply
|
|
256
|
+
|
|
257
|
+
Returns:
|
|
258
|
+
Optimized prompt
|
|
259
|
+
|
|
260
|
+
Example:
|
|
261
|
+
>>> prompt = '''<thinking>
|
|
262
|
+
... Analyze the code carefully
|
|
263
|
+
... </thinking>
|
|
264
|
+
... <answer>
|
|
265
|
+
... The code is good
|
|
266
|
+
... </answer>'''
|
|
267
|
+
>>> optimized = optimize_xml_prompt(prompt)
|
|
268
|
+
>>> print(optimized)
|
|
269
|
+
<t>Analyze code carefully</t><a>Code is good</a>
|
|
270
|
+
"""
|
|
271
|
+
optimizer = ContextOptimizer(level)
|
|
272
|
+
return optimizer.optimize(prompt)
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"""Meta-orchestration system for dynamic agent composition.
|
|
2
|
+
|
|
3
|
+
This package provides the infrastructure for dynamically composing
|
|
4
|
+
agent teams based on task requirements. It enables intelligent task
|
|
5
|
+
analysis, agent spawning, and execution strategy selection.
|
|
6
|
+
|
|
7
|
+
Example:
|
|
8
|
+
>>> from attune.orchestration import AgentTemplate, get_template
|
|
9
|
+
>>> template = get_template("test_coverage_analyzer")
|
|
10
|
+
>>> print(template.role)
|
|
11
|
+
Test Coverage Expert
|
|
12
|
+
|
|
13
|
+
>>> from attune.orchestration import get_strategy
|
|
14
|
+
>>> strategy = get_strategy("tool_enhanced")
|
|
15
|
+
>>> print(strategy.__class__.__name__)
|
|
16
|
+
ToolEnhancedStrategy
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
from attune.orchestration.agent_templates import (
|
|
20
|
+
AgentCapability,
|
|
21
|
+
AgentTemplate,
|
|
22
|
+
ResourceRequirements,
|
|
23
|
+
get_all_templates,
|
|
24
|
+
get_template,
|
|
25
|
+
get_templates_by_capability,
|
|
26
|
+
get_templates_by_tier,
|
|
27
|
+
)
|
|
28
|
+
from attune.orchestration.execution_strategies import (
|
|
29
|
+
DelegationChainStrategy,
|
|
30
|
+
ExecutionStrategy,
|
|
31
|
+
PromptCachedSequentialStrategy,
|
|
32
|
+
ToolEnhancedStrategy,
|
|
33
|
+
get_strategy,
|
|
34
|
+
)
|
|
35
|
+
from attune.orchestration.meta_orchestrator import (
|
|
36
|
+
CompositionPattern,
|
|
37
|
+
ExecutionPlan,
|
|
38
|
+
MetaOrchestrator,
|
|
39
|
+
TaskComplexity,
|
|
40
|
+
TaskDomain,
|
|
41
|
+
TaskRequirements,
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
__all__ = [
|
|
45
|
+
# Agent Templates
|
|
46
|
+
"AgentTemplate",
|
|
47
|
+
"AgentCapability",
|
|
48
|
+
"ResourceRequirements",
|
|
49
|
+
"get_template",
|
|
50
|
+
"get_all_templates",
|
|
51
|
+
"get_templates_by_capability",
|
|
52
|
+
"get_templates_by_tier",
|
|
53
|
+
# Execution Strategies
|
|
54
|
+
"ExecutionStrategy",
|
|
55
|
+
"get_strategy",
|
|
56
|
+
# Anthropic-Inspired Patterns (Patterns 8-10)
|
|
57
|
+
"ToolEnhancedStrategy",
|
|
58
|
+
"PromptCachedSequentialStrategy",
|
|
59
|
+
"DelegationChainStrategy",
|
|
60
|
+
# Meta-Orchestrator & Types
|
|
61
|
+
"MetaOrchestrator",
|
|
62
|
+
"ExecutionPlan",
|
|
63
|
+
"CompositionPattern",
|
|
64
|
+
"TaskComplexity",
|
|
65
|
+
"TaskDomain",
|
|
66
|
+
"TaskRequirements",
|
|
67
|
+
]
|