agent-os-kernel 1.1.0__py3-none-any.whl → 1.3.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.
- agent_os/__init__.py +66 -4
- agent_os/agents_compat.py +286 -0
- agent_os/base_agent.py +308 -0
- agent_os/cli.py +1079 -19
- agent_os/integrations/__init__.py +37 -2
- agent_os/integrations/openai_adapter.py +502 -0
- agent_os/integrations/semantic_kernel_adapter.py +569 -0
- agent_os/stateless.py +349 -0
- agent_os_kernel-1.3.0.dist-info/METADATA +676 -0
- agent_os_kernel-1.3.0.dist-info/RECORD +1053 -0
- {agent_os_kernel-1.1.0.dist-info → agent_os_kernel-1.3.0.dist-info}/entry_points.txt +0 -1
- modules/amb/.github/workflows/ci.yml +102 -0
- modules/amb/.github/workflows/publish.yml +146 -0
- modules/amb/.gitignore +134 -0
- modules/amb/CHANGELOG.md +118 -0
- modules/amb/CONTRIBUTING.md +141 -0
- modules/amb/LICENSE +21 -0
- modules/amb/README.md +188 -0
- modules/amb/amb_core/__init__.py +175 -0
- modules/amb/amb_core/adapters/__init__.py +55 -0
- modules/amb/amb_core/adapters/aws_sqs_broker.py +374 -0
- modules/amb/amb_core/adapters/azure_servicebus_broker.py +338 -0
- modules/amb/amb_core/adapters/kafka_broker.py +258 -0
- modules/amb/amb_core/adapters/nats_broker.py +283 -0
- modules/amb/amb_core/adapters/rabbitmq_broker.py +233 -0
- modules/amb/amb_core/adapters/redis_broker.py +260 -0
- modules/amb/amb_core/broker.py +143 -0
- modules/amb/amb_core/bus.py +479 -0
- modules/amb/amb_core/cloudevents.py +507 -0
- modules/amb/amb_core/dlq.py +343 -0
- modules/amb/amb_core/hf_utils.py +534 -0
- modules/amb/amb_core/memory_broker.py +408 -0
- modules/amb/amb_core/models.py +139 -0
- modules/amb/amb_core/persistence.py +527 -0
- modules/amb/amb_core/schema.py +292 -0
- modules/amb/amb_core/tracing.py +356 -0
- modules/amb/examples/advanced_features.py +223 -0
- modules/amb/examples/backpressure_demo.py +225 -0
- modules/amb/examples/basic_usage.py +117 -0
- modules/amb/examples/tracing_demo.py +104 -0
- modules/amb/experiments/README.md +52 -0
- modules/amb/experiments/reproduce_results.py +467 -0
- modules/amb/experiments/results.json +324 -0
- modules/amb/paper/README.md +40 -0
- modules/amb/paper/paper.tex +365 -0
- modules/amb/paper/whitepaper.md +377 -0
- modules/amb/pyproject.toml +117 -0
- modules/amb/tests/__init__.py +1 -0
- modules/amb/tests/test_backpressure_priority.py +280 -0
- modules/amb/tests/test_bus.py +198 -0
- modules/amb/tests/test_cloudevents.py +443 -0
- modules/amb/tests/test_features.py +531 -0
- modules/amb/tests/test_models.py +74 -0
- modules/amb/tests/test_tracing.py +254 -0
- modules/atr/.github/workflows/ci.yml +101 -0
- modules/atr/.github/workflows/publish.yml +140 -0
- modules/atr/.gitignore +134 -0
- modules/atr/.pre-commit-config.yaml +37 -0
- modules/atr/CHANGELOG.md +39 -0
- modules/atr/CONTRIBUTING.md +96 -0
- modules/atr/IMPLEMENTATION_SUMMARY.md +143 -0
- modules/atr/README.md +180 -0
- modules/atr/atr/__init__.py +638 -0
- modules/atr/atr/access.py +346 -0
- modules/atr/atr/composition.py +643 -0
- modules/atr/atr/decorator.py +355 -0
- modules/atr/atr/executor.py +382 -0
- modules/atr/atr/health.py +555 -0
- modules/atr/atr/hf_utils.py +447 -0
- modules/atr/atr/injection.py +420 -0
- modules/atr/atr/metrics.py +438 -0
- modules/atr/atr/policies.py +401 -0
- modules/atr/atr/py.typed +2 -0
- modules/atr/atr/registry.py +450 -0
- modules/atr/atr/schema.py +478 -0
- modules/atr/atr/tools/safe/__init__.py +73 -0
- modules/atr/atr/tools/safe/calculator.py +380 -0
- modules/atr/atr/tools/safe/datetime_tool.py +441 -0
- modules/atr/atr/tools/safe/file_reader.py +400 -0
- modules/atr/atr/tools/safe/http_client.py +314 -0
- modules/atr/atr/tools/safe/json_parser.py +372 -0
- modules/atr/atr/tools/safe/text_tool.py +526 -0
- modules/atr/atr/tools/safe/toolkit.py +173 -0
- modules/atr/docs/PYPI_SETUP.md +113 -0
- modules/atr/examples/README.md +27 -0
- modules/atr/examples/demo.py +144 -0
- modules/atr/examples/sandbox_demo.py +218 -0
- modules/atr/experiments/README.md +69 -0
- modules/atr/experiments/reproduce_results.py +509 -0
- modules/atr/experiments/results/.gitkeep +0 -0
- modules/atr/experiments/results/results_20260123_140334.json +71 -0
- modules/atr/paper/README.md +36 -0
- modules/atr/paper/figures/.gitkeep +0 -0
- modules/atr/paper/references.bib +84 -0
- modules/atr/paper/structure.tex +293 -0
- modules/atr/paper/whitepaper.md +234 -0
- modules/atr/pyproject.toml +148 -0
- modules/atr/requirements.txt +1 -0
- modules/atr/setup.py +30 -0
- modules/atr/tests/__init__.py +1 -0
- modules/atr/tests/test_decorator.py +317 -0
- modules/atr/tests/test_executor.py +245 -0
- modules/atr/tests/test_integration_executor.py +184 -0
- modules/atr/tests/test_registry.py +312 -0
- modules/atr/tests/test_schema.py +182 -0
- modules/atr/tests/test_v2_features.py +708 -0
- modules/caas/.dockerignore +63 -0
- modules/caas/.github/ISSUE_TEMPLATE/bug_report.md +38 -0
- modules/caas/.github/ISSUE_TEMPLATE/custom.md +10 -0
- modules/caas/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
- modules/caas/.github/workflows/ci.yml +100 -0
- modules/caas/.github/workflows/lint.yml +39 -0
- modules/caas/.github/workflows/publish-pypi.yml +124 -0
- modules/caas/.gitignore +73 -0
- modules/caas/.pre-commit-config.yaml +33 -0
- modules/caas/CHANGELOG.md +58 -0
- modules/caas/CONTRIBUTING.md +346 -0
- modules/caas/Dockerfile +41 -0
- modules/caas/LICENSE +21 -0
- modules/caas/MANIFEST.in +11 -0
- modules/caas/README.md +158 -0
- modules/caas/benchmarks/README.md +255 -0
- modules/caas/benchmarks/create_hf_dataset.py +502 -0
- modules/caas/benchmarks/data/sample_corpus/README.md +86 -0
- modules/caas/benchmarks/data/sample_corpus/auth_module.py +211 -0
- modules/caas/benchmarks/data/sample_corpus/contribution_guide.md +185 -0
- modules/caas/benchmarks/data/sample_corpus/remote_work_policy.html +57 -0
- modules/caas/benchmarks/hf_dataset/README.md +214 -0
- modules/caas/benchmarks/hf_dataset/caas_benchmark_corpus.py +73 -0
- modules/caas/benchmarks/hf_dataset/corpus_preview.json +193 -0
- modules/caas/benchmarks/results/README.md +66 -0
- modules/caas/benchmarks/results/evaluation_2026-01-20.json +121 -0
- modules/caas/benchmarks/run_evaluation.py +561 -0
- modules/caas/benchmarks/statistical_tests.py +289 -0
- modules/caas/benchmarks/verify_sample_corpus.py +83 -0
- modules/caas/docker-compose.yml +38 -0
- modules/caas/docs/CONTEXT_TRIAD.md +462 -0
- modules/caas/docs/CONTRIBUTING.md +346 -0
- modules/caas/docs/ETHICS_AND_LIMITATIONS.md +336 -0
- modules/caas/docs/HEURISTIC_ROUTER.md +442 -0
- modules/caas/docs/IMPLEMENTATION_SUMMARY.md +363 -0
- modules/caas/docs/IMPLEMENTATION_SUMMARY_CONTEXT_TRIAD.md +277 -0
- modules/caas/docs/IMPLEMENTATION_SUMMARY_HEURISTIC_ROUTER.md +231 -0
- modules/caas/docs/IMPLEMENTATION_SUMMARY_METADATA_INJECTION.md +258 -0
- modules/caas/docs/IMPLEMENTATION_SUMMARY_PRAGMATIC_TRUTH.md +212 -0
- modules/caas/docs/IMPLEMENTATION_SUMMARY_TRUST_GATEWAY.md +319 -0
- modules/caas/docs/LAYER_1_PRIMITIVE.md +202 -0
- modules/caas/docs/METADATA_INJECTION.md +404 -0
- modules/caas/docs/PRAGMATIC_TRUTH.md +431 -0
- modules/caas/docs/RELATED_WORK.md +312 -0
- modules/caas/docs/RELEASE_CHECKLIST.md +219 -0
- modules/caas/docs/RELEASE_GUIDE.md +285 -0
- modules/caas/docs/REPRODUCIBILITY.md +386 -0
- modules/caas/docs/SLIDING_WINDOW.md +387 -0
- modules/caas/docs/STRUCTURE_AWARE_INDEXING.md +158 -0
- modules/caas/docs/TESTING.md +259 -0
- modules/caas/docs/THREAT_MODEL.md +247 -0
- modules/caas/docs/TRUST_GATEWAY.md +575 -0
- modules/caas/docs/VFS.md +298 -0
- modules/caas/examples/agents/enterprise_security_agent.py +414 -0
- modules/caas/examples/agents/intelligent_document_analyzer.py +380 -0
- modules/caas/examples/demos/demo.py +309 -0
- modules/caas/examples/demos/demo_context_triad.py +225 -0
- modules/caas/examples/demos/demo_conversation_manager.py +285 -0
- modules/caas/examples/demos/demo_heuristic_router.py +133 -0
- modules/caas/examples/demos/demo_metadata_injection.py +198 -0
- modules/caas/examples/demos/demo_pragmatic_truth.py +303 -0
- modules/caas/examples/demos/demo_structure_aware.py +140 -0
- modules/caas/examples/demos/demo_time_decay.py +247 -0
- modules/caas/examples/demos/demo_trust_gateway.py +383 -0
- modules/caas/examples/multi_agent/README.md +159 -0
- modules/caas/examples/multi_agent/research_team.py +369 -0
- modules/caas/examples/multi_agent/vfs_collaboration.py +393 -0
- modules/caas/examples/usage/auth_module.py +142 -0
- modules/caas/examples/usage/usage_example.py +173 -0
- modules/caas/experiments/README.md +42 -0
- modules/caas/experiments/reproduce_results.py +462 -0
- modules/caas/paper/ARXIV_METADATA.md +145 -0
- modules/caas/paper/ARXIV_README.md +47 -0
- modules/caas/paper/CHECKLIST.md +103 -0
- modules/caas/paper/GITHUB_RELEASE_NOTES.md +105 -0
- modules/caas/paper/README.md +71 -0
- modules/caas/paper/abstract.md +24 -0
- modules/caas/paper/arxiv_submission.tar +0 -0
- modules/caas/paper/arxiv_submission.zip +0 -0
- modules/caas/paper/build_pdf.py +355 -0
- modules/caas/paper/experiments.md +149 -0
- modules/caas/paper/figures/.gitkeep +0 -0
- modules/caas/paper/figures/README.md +237 -0
- modules/caas/paper/figures/fig1_system_architecture.png +0 -0
- modules/caas/paper/figures/fig1_system_architecture.svg +198 -0
- modules/caas/paper/figures/fig2_context_triad.png +0 -0
- modules/caas/paper/figures/fig2_context_triad.svg +105 -0
- modules/caas/paper/figures/fig3_ablation_results.png +0 -0
- modules/caas/paper/figures/fig3_ablation_results.svg +113 -0
- modules/caas/paper/figures/fig4_routing_latency.png +0 -0
- modules/caas/paper/figures/fig4_routing_latency.svg +97 -0
- modules/caas/paper/intro.md +103 -0
- modules/caas/paper/latex/figures/fig1_system_architecture.png +0 -0
- modules/caas/paper/latex/figures/fig2_context_triad.png +0 -0
- modules/caas/paper/latex/figures/fig3_ablation_results.png +0 -0
- modules/caas/paper/latex/figures/fig4_routing_latency.png +0 -0
- modules/caas/paper/latex/main.tex +468 -0
- modules/caas/paper/latex/references.bib +140 -0
- modules/caas/paper/method.md +350 -0
- modules/caas/paper/outline.md +123 -0
- modules/caas/paper/related_work.md +101 -0
- modules/caas/paper/tables/.gitkeep +0 -0
- modules/caas/paper/tables/results_tables.md +50 -0
- modules/caas/pyproject.toml +172 -0
- modules/caas/requirements.txt +11 -0
- modules/caas/src/caas/__init__.py +232 -0
- modules/caas/src/caas/api/__init__.py +7 -0
- modules/caas/src/caas/api/server.py +1326 -0
- modules/caas/src/caas/caching.py +832 -0
- modules/caas/src/caas/cli.py +208 -0
- modules/caas/src/caas/conversation.py +221 -0
- modules/caas/src/caas/decay.py +118 -0
- modules/caas/src/caas/detection/__init__.py +7 -0
- modules/caas/src/caas/detection/detector.py +236 -0
- modules/caas/src/caas/enrichment.py +127 -0
- modules/caas/src/caas/gateway/__init__.py +24 -0
- modules/caas/src/caas/gateway/trust_gateway.py +471 -0
- modules/caas/src/caas/hf_utils.py +477 -0
- modules/caas/src/caas/ingestion/__init__.py +21 -0
- modules/caas/src/caas/ingestion/processors.py +251 -0
- modules/caas/src/caas/ingestion/structure_parser.py +185 -0
- modules/caas/src/caas/models.py +354 -0
- modules/caas/src/caas/pragmatic_truth.py +441 -0
- modules/caas/src/caas/routing/__init__.py +8 -0
- modules/caas/src/caas/routing/heuristic_router.py +242 -0
- modules/caas/src/caas/storage/__init__.py +7 -0
- modules/caas/src/caas/storage/store.py +450 -0
- modules/caas/src/caas/triad.py +472 -0
- modules/caas/src/caas/tuning/__init__.py +7 -0
- modules/caas/src/caas/tuning/tuner.py +322 -0
- modules/caas/src/caas/vfs/__init__.py +12 -0
- modules/caas/src/caas/vfs/filesystem.py +450 -0
- modules/caas/tests/__init__.py +3 -0
- modules/caas/tests/conftest.py +8 -0
- modules/caas/tests/test_caching.py +628 -0
- modules/caas/tests/test_context_triad.py +385 -0
- modules/caas/tests/test_conversation_manager.py +289 -0
- modules/caas/tests/test_functionality.py +215 -0
- modules/caas/tests/test_heuristic_router.py +370 -0
- modules/caas/tests/test_metadata_injection.py +328 -0
- modules/caas/tests/test_pragmatic_truth.py +322 -0
- modules/caas/tests/test_structure_aware_indexing.py +283 -0
- modules/caas/tests/test_time_decay.py +268 -0
- modules/caas/tests/test_trust_gateway.py +445 -0
- modules/caas/tests/test_vfs.py +298 -0
- modules/cmvk/.github/FUNDING.yml +9 -0
- modules/cmvk/.github/dependabot.yml +54 -0
- modules/cmvk/.github/workflows/ci.yml +205 -0
- modules/cmvk/.github/workflows/publish.yml +143 -0
- modules/cmvk/.gitignore +147 -0
- modules/cmvk/.pre-commit-config.yaml +58 -0
- modules/cmvk/CHANGELOG.md +146 -0
- modules/cmvk/CITATION.cff +48 -0
- modules/cmvk/CONTRIBUTING.md +229 -0
- modules/cmvk/Dockerfile +87 -0
- modules/cmvk/HF_MODEL_CARD.md +185 -0
- modules/cmvk/LICENSE +21 -0
- modules/cmvk/README.md +149 -0
- modules/cmvk/SECURITY.md +114 -0
- modules/cmvk/config/prompts/generator_v1.txt +23 -0
- modules/cmvk/config/prompts/verifier_hostile.txt +32 -0
- modules/cmvk/config/settings.yaml +40 -0
- modules/cmvk/coverage_html/.gitignore +2 -0
- modules/cmvk/coverage_html/class_index.html +658 -0
- modules/cmvk/coverage_html/coverage_html_cb_188fc9a4.js +735 -0
- modules/cmvk/coverage_html/favicon_32_cb_c827f16f.png +0 -0
- modules/cmvk/coverage_html/function_index.html +1978 -0
- modules/cmvk/coverage_html/index.html +255 -0
- modules/cmvk/coverage_html/keybd_closed_cb_900cfef5.png +0 -0
- modules/cmvk/coverage_html/status.json +1 -0
- modules/cmvk/coverage_html/style_cb_5c747636.css +389 -0
- modules/cmvk/coverage_html/z_2c49bd2ed3e01e38___init___py.html +315 -0
- modules/cmvk/coverage_html/z_2c49bd2ed3e01e38_audit_py.html +499 -0
- modules/cmvk/coverage_html/z_2c49bd2ed3e01e38_benchmarks_py.html +575 -0
- modules/cmvk/coverage_html/z_2c49bd2ed3e01e38_constitutional_py.html +1001 -0
- modules/cmvk/coverage_html/z_2c49bd2ed3e01e38_hf_utils_py.html +398 -0
- modules/cmvk/coverage_html/z_2c49bd2ed3e01e38_metrics_py.html +570 -0
- modules/cmvk/coverage_html/z_2c49bd2ed3e01e38_profiles_py.html +397 -0
- modules/cmvk/coverage_html/z_2c49bd2ed3e01e38_types_py.html +109 -0
- modules/cmvk/coverage_html/z_2c49bd2ed3e01e38_verification_py.html +1053 -0
- modules/cmvk/docs/DIAGRAMS.md +325 -0
- modules/cmvk/docs/architecture.md +345 -0
- modules/cmvk/docs/features.md +308 -0
- modules/cmvk/docs/getting_started.md +279 -0
- modules/cmvk/docs/innovation_layer.md +377 -0
- modules/cmvk/docs/safety.md +281 -0
- modules/cmvk/docs/traceability.md +150 -0
- modules/cmvk/examples/basic_example.py +62 -0
- modules/cmvk/examples/demo_complete_pipeline.py +209 -0
- modules/cmvk/examples/demo_innovation_layer.py +197 -0
- modules/cmvk/examples/example.py +112 -0
- modules/cmvk/examples/model_diversity_comparison.py +110 -0
- modules/cmvk/examples/real_api_integration.py +121 -0
- modules/cmvk/examples/test_full_pipeline.py +303 -0
- modules/cmvk/experiments/FEATURE_2_LATERAL_THINKING.md +187 -0
- modules/cmvk/experiments/README.md +216 -0
- modules/cmvk/experiments/ablation_runner.py +666 -0
- modules/cmvk/experiments/baseline_runner.py +158 -0
- modules/cmvk/experiments/blind_spot_benchmark.py +364 -0
- modules/cmvk/experiments/datasets/README.md +85 -0
- modules/cmvk/experiments/datasets/humaneval_50.json +352 -0
- modules/cmvk/experiments/datasets/humaneval_full.json +1150 -0
- modules/cmvk/experiments/datasets/humaneval_sample.json +32 -0
- modules/cmvk/experiments/datasets/sabotage.json +262 -0
- modules/cmvk/experiments/datasets/sample.json +40 -0
- modules/cmvk/experiments/demo_with_traces.py +110 -0
- modules/cmvk/experiments/efficiency_curve.py +259 -0
- modules/cmvk/experiments/experiment_runner.py +243 -0
- modules/cmvk/experiments/paper_data_generator.py +183 -0
- modules/cmvk/experiments/reproduce_results.py +407 -0
- modules/cmvk/experiments/reproducible_runner.py +352 -0
- modules/cmvk/experiments/sabotage_stress_test.py +311 -0
- modules/cmvk/experiments/test_lateral_thinking.py +116 -0
- modules/cmvk/experiments/test_prosecutor.py +41 -0
- modules/cmvk/experiments/visualize_results.py +735 -0
- modules/cmvk/logs/traces/demo_HumanEval_0_20260121-204900.json +36 -0
- modules/cmvk/notebooks/analysis.ipynb +124 -0
- modules/cmvk/paper/PAPER.md +561 -0
- modules/cmvk/paper/arxiv_checklist.md +230 -0
- modules/cmvk/paper/cmvk_neurips.aux +77 -0
- modules/cmvk/paper/cmvk_neurips.bbl +81 -0
- modules/cmvk/paper/cmvk_neurips.blg +48 -0
- modules/cmvk/paper/cmvk_neurips.out +16 -0
- modules/cmvk/paper/cmvk_neurips.pdf +0 -0
- modules/cmvk/paper/cmvk_neurips.tex +309 -0
- modules/cmvk/paper/figures/ablation.png +0 -0
- modules/cmvk/paper/figures/ablation.svg +39 -0
- modules/cmvk/paper/figures/architecture.png +0 -0
- modules/cmvk/paper/figures/architecture.svg +115 -0
- modules/cmvk/paper/figures/results_bar.png +0 -0
- modules/cmvk/paper/figures/results_bar.svg +70 -0
- modules/cmvk/paper/generate_figures.py +383 -0
- modules/cmvk/paper/neurips_2024.sty +101 -0
- modules/cmvk/paper/references.bib +98 -0
- modules/cmvk/paper/structure.tex +200 -0
- modules/cmvk/pyproject.toml +189 -0
- modules/cmvk/requirements-dev.txt +19 -0
- modules/cmvk/requirements.txt +14 -0
- modules/cmvk/src/cmvk/__init__.py +216 -0
- modules/cmvk/src/cmvk/audit.py +400 -0
- modules/cmvk/src/cmvk/benchmarks.py +476 -0
- modules/cmvk/src/cmvk/constitutional.py +902 -0
- modules/cmvk/src/cmvk/hf_utils.py +299 -0
- modules/cmvk/src/cmvk/metrics.py +471 -0
- modules/cmvk/src/cmvk/profiles.py +298 -0
- modules/cmvk/src/cmvk/py.typed +0 -0
- modules/cmvk/src/cmvk/types.py +10 -0
- modules/cmvk/src/cmvk/verification.py +954 -0
- modules/cmvk/src/cross_model_verification_kernel/__init__.py +91 -0
- modules/cmvk/src/cross_model_verification_kernel/__main__.py +10 -0
- modules/cmvk/src/cross_model_verification_kernel/agents/__init__.py +16 -0
- modules/cmvk/src/cross_model_verification_kernel/agents/base_agent.py +142 -0
- modules/cmvk/src/cross_model_verification_kernel/agents/generator_openai.py +223 -0
- modules/cmvk/src/cross_model_verification_kernel/agents/verifier_anthropic.py +448 -0
- modules/cmvk/src/cross_model_verification_kernel/agents/verifier_gemini.py +481 -0
- modules/cmvk/src/cross_model_verification_kernel/cli.py +570 -0
- modules/cmvk/src/cross_model_verification_kernel/core/__init__.py +26 -0
- modules/cmvk/src/cross_model_verification_kernel/core/graph_memory.py +308 -0
- modules/cmvk/src/cross_model_verification_kernel/core/kernel.py +413 -0
- modules/cmvk/src/cross_model_verification_kernel/core/trace_logger.py +75 -0
- modules/cmvk/src/cross_model_verification_kernel/core/types.py +121 -0
- modules/cmvk/src/cross_model_verification_kernel/datasets/__init__.py +20 -0
- modules/cmvk/src/cross_model_verification_kernel/datasets/humaneval_loader.py +271 -0
- modules/cmvk/src/cross_model_verification_kernel/generator.py +118 -0
- modules/cmvk/src/cross_model_verification_kernel/kernel.py +292 -0
- modules/cmvk/src/cross_model_verification_kernel/models.py +111 -0
- modules/cmvk/src/cross_model_verification_kernel/py.typed +1 -0
- modules/cmvk/src/cross_model_verification_kernel/simple_kernel.py +185 -0
- modules/cmvk/src/cross_model_verification_kernel/tools/__init__.py +94 -0
- modules/cmvk/src/cross_model_verification_kernel/tools/huggingface_upload.py +394 -0
- modules/cmvk/src/cross_model_verification_kernel/tools/sandbox.py +159 -0
- modules/cmvk/src/cross_model_verification_kernel/tools/statistics.py +468 -0
- modules/cmvk/src/cross_model_verification_kernel/tools/visualizer.py +312 -0
- modules/cmvk/src/cross_model_verification_kernel/tools/web_search.py +86 -0
- modules/cmvk/src/cross_model_verification_kernel/verifier.py +257 -0
- modules/cmvk/tests/__init__.py +3 -0
- modules/cmvk/tests/conftest.py +61 -0
- modules/cmvk/tests/integration/__init__.py +1 -0
- modules/cmvk/tests/integration/test_anthropic_verifier.py +269 -0
- modules/cmvk/tests/integration/test_integration.py +53 -0
- modules/cmvk/tests/integration/test_lateral_thinking_integration.py +199 -0
- modules/cmvk/tests/integration/test_lateral_thinking_witness.py +208 -0
- modules/cmvk/tests/integration/test_prosecutor_mode.py +131 -0
- modules/cmvk/tests/test_constitutional.py +611 -0
- modules/cmvk/tests/test_enhanced_features.py +603 -0
- modules/cmvk/tests/test_verification.py +255 -0
- modules/cmvk/tests/unit/__init__.py +1 -0
- modules/cmvk/tests/unit/test_agents.py +64 -0
- modules/cmvk/tests/unit/test_cli.py +224 -0
- modules/cmvk/tests/unit/test_core.py +126 -0
- modules/cmvk/tests/unit/test_humaneval_loader.py +197 -0
- modules/cmvk/tests/unit/test_kernel.py +255 -0
- modules/cmvk/tests/unit/test_reproducibility.py +160 -0
- modules/cmvk/tests/unit/test_trace_logger.py +115 -0
- modules/cmvk/tests/unit/test_visualizer.py +218 -0
- modules/control-plane/.github/ISSUE_TEMPLATE/bug_report.yml +82 -0
- modules/control-plane/.github/ISSUE_TEMPLATE/config.yml +11 -0
- modules/control-plane/.github/ISSUE_TEMPLATE/feature_request.yml +104 -0
- modules/control-plane/.github/ISSUE_TEMPLATE/question.yml +70 -0
- modules/control-plane/.github/ISSUE_TEMPLATE/security_vulnerability.yml +84 -0
- modules/control-plane/.github/discussions.yml +73 -0
- modules/control-plane/.github/pull_request_template.md +82 -0
- modules/control-plane/.github/workflows/publish.yml +146 -0
- modules/control-plane/.github/workflows/release.yml +39 -0
- modules/control-plane/.github/workflows/tests.yml +58 -0
- modules/control-plane/.gitignore +55 -0
- modules/control-plane/CHANGELOG.md +203 -0
- modules/control-plane/CONTRIBUTING.md +311 -0
- modules/control-plane/CONTRIBUTORS.md +88 -0
- modules/control-plane/Dockerfile +82 -0
- modules/control-plane/LICENSE +21 -0
- modules/control-plane/MANIFEST.in +17 -0
- modules/control-plane/README.md +1264 -0
- modules/control-plane/ROADMAP.md +228 -0
- modules/control-plane/SECURITY.md +210 -0
- modules/control-plane/SUPPORT.md +106 -0
- modules/control-plane/acp-cli.py +212 -0
- modules/control-plane/benchmark/README.md +257 -0
- modules/control-plane/benchmark/__init__.py +19 -0
- modules/control-plane/benchmark/red_team_dataset.py +517 -0
- modules/control-plane/benchmark.py +563 -0
- modules/control-plane/build_and_publish.sh +130 -0
- modules/control-plane/docker-compose.yml +74 -0
- modules/control-plane/docs/ABLATION_STUDIES.md +528 -0
- modules/control-plane/docs/ADAPTER_GUIDE.md +544 -0
- modules/control-plane/docs/ADVANCED_FEATURES.md +543 -0
- modules/control-plane/docs/AIOS_COMPARISON.md +296 -0
- modules/control-plane/docs/BIBLIOGRAPHY.md +367 -0
- modules/control-plane/docs/CASE_STUDIES.md +645 -0
- modules/control-plane/docs/DOCKER_DEPLOYMENT.md +184 -0
- modules/control-plane/docs/ECOSYSTEM_STATUS.md +98 -0
- modules/control-plane/docs/HF_MODEL_CARD.md +168 -0
- modules/control-plane/docs/KERNEL_V1_RELEASE.md +454 -0
- modules/control-plane/docs/LAYER3_FRAMEWORK.md +227 -0
- modules/control-plane/docs/LIMITATIONS.md +523 -0
- modules/control-plane/docs/PYPI_PUBLISHING.md +195 -0
- modules/control-plane/docs/README.md +58 -0
- modules/control-plane/docs/RELATED_WORK.md +319 -0
- modules/control-plane/docs/RELEASE_v1.1.0.md +252 -0
- modules/control-plane/docs/REPRODUCIBILITY.md +540 -0
- modules/control-plane/docs/RESEARCH_FOUNDATION.md +197 -0
- modules/control-plane/docs/api/CORE.md +270 -0
- modules/control-plane/docs/architecture/architecture.md +120 -0
- modules/control-plane/docs/community/ANNOUNCEMENT_TEMPLATES.md +52 -0
- modules/control-plane/docs/guides/IMPLEMENTATION.md +225 -0
- modules/control-plane/docs/guides/PHILOSOPHY.md +354 -0
- modules/control-plane/docs/guides/QUICKSTART.md +217 -0
- modules/control-plane/examples/README.md +138 -0
- modules/control-plane/examples/a2a_demo.py +410 -0
- modules/control-plane/examples/adapter_demo.py +347 -0
- modules/control-plane/examples/advanced_features.py +403 -0
- modules/control-plane/examples/basic_usage.py +261 -0
- modules/control-plane/examples/benchmark_demo.py +186 -0
- modules/control-plane/examples/compliance_demo.py +333 -0
- modules/control-plane/examples/configuration.py +265 -0
- modules/control-plane/examples/getting_started.py +178 -0
- modules/control-plane/examples/hibernation_and_time_travel_demo.py +406 -0
- modules/control-plane/examples/interactive_tutorial.ipynb +497 -0
- modules/control-plane/examples/kernel_interceptor_demo.py +202 -0
- modules/control-plane/examples/kernel_v1_demo.py +273 -0
- modules/control-plane/examples/langchain_demo.py +281 -0
- modules/control-plane/examples/lifecycle_demo.py +724 -0
- modules/control-plane/examples/mcp_demo.py +378 -0
- modules/control-plane/examples/ml_safety_demo.py +157 -0
- modules/control-plane/examples/multimodal_demo.py +347 -0
- modules/control-plane/examples/observability_demo.py +370 -0
- modules/control-plane/examples/use_cases.py +336 -0
- modules/control-plane/experiments/long_horizon_purge.py +235 -0
- modules/control-plane/experiments/multi_agent_rag.py +165 -0
- modules/control-plane/experiments/reproduce_results.py +667 -0
- modules/control-plane/paper/ARXIV_SUBMISSION_INFO.txt +122 -0
- modules/control-plane/paper/ETHICS_STATEMENT.md +248 -0
- modules/control-plane/paper/PAPER_CHECKLIST.md +72 -0
- modules/control-plane/paper/Paper.pdf +0 -0
- modules/control-plane/paper/README.md +71 -0
- modules/control-plane/paper/appendix.md +152 -0
- modules/control-plane/paper/architecture.md +15 -0
- modules/control-plane/paper/arxiv/figures/ablation_chart.png +0 -0
- modules/control-plane/paper/arxiv/figures/architecture.png +0 -0
- modules/control-plane/paper/arxiv/figures/constraint_graphs.png +0 -0
- modules/control-plane/paper/arxiv/figures/results_chart.png +0 -0
- modules/control-plane/paper/arxiv/main.aux +97 -0
- modules/control-plane/paper/arxiv/main.bbl +112 -0
- modules/control-plane/paper/arxiv/main.blg +48 -0
- modules/control-plane/paper/arxiv/main.out +33 -0
- modules/control-plane/paper/arxiv/main.pdf +0 -0
- modules/control-plane/paper/arxiv/main.tex +479 -0
- modules/control-plane/paper/arxiv/references.bib +234 -0
- modules/control-plane/paper/arxiv_submission.tar +0 -0
- modules/control-plane/paper/arxiv_submission.zip +0 -0
- modules/control-plane/paper/build.sh +68 -0
- modules/control-plane/paper/figures/README.md +47 -0
- modules/control-plane/paper/figures/ablation_chart.pdf +0 -0
- modules/control-plane/paper/figures/ablation_chart.png +0 -0
- modules/control-plane/paper/figures/architecture.pdf +0 -0
- modules/control-plane/paper/figures/architecture.png +0 -0
- modules/control-plane/paper/figures/constraint_graphs.pdf +0 -0
- modules/control-plane/paper/figures/constraint_graphs.png +0 -0
- modules/control-plane/paper/figures/generate_figures.py +252 -0
- modules/control-plane/paper/figures/results_chart.pdf +0 -0
- modules/control-plane/paper/figures/results_chart.png +0 -0
- modules/control-plane/paper/main.md +273 -0
- modules/control-plane/paper/main.tex +214 -0
- modules/control-plane/paper/main_arxiv.aux +53 -0
- modules/control-plane/paper/main_arxiv.out +17 -0
- modules/control-plane/paper/main_arxiv.pdf +0 -0
- modules/control-plane/paper/main_arxiv.tex +264 -0
- modules/control-plane/paper/references.bib +234 -0
- modules/control-plane/pyproject.toml +124 -0
- modules/control-plane/reproducibility/ABLATIONS.md +136 -0
- modules/control-plane/reproducibility/README.md +288 -0
- modules/control-plane/reproducibility/commands.md +467 -0
- modules/control-plane/reproducibility/docker_config/Dockerfile +39 -0
- modules/control-plane/reproducibility/experiment_configs/purge_config.json +46 -0
- modules/control-plane/reproducibility/experiment_configs/rag_config.json +36 -0
- modules/control-plane/reproducibility/hardware_specs.md +317 -0
- modules/control-plane/reproducibility/requirements_frozen.txt +0 -0
- modules/control-plane/reproducibility/run_all_experiments.sh +45 -0
- modules/control-plane/reproducibility/seeds.json +106 -0
- modules/control-plane/scripts/prepare_pypi.py +46 -0
- modules/control-plane/scripts/prepare_release.py +176 -0
- modules/control-plane/scripts/upload_dataset_to_hf.py +316 -0
- modules/control-plane/setup.py +69 -0
- modules/control-plane/src/agent_control_plane/__init__.py +639 -0
- modules/control-plane/src/agent_control_plane/a2a_adapter.py +541 -0
- modules/control-plane/src/agent_control_plane/adapter.py +415 -0
- modules/control-plane/src/agent_control_plane/agent_hibernation.py +364 -0
- modules/control-plane/src/agent_control_plane/agent_kernel.py +464 -0
- modules/control-plane/src/agent_control_plane/compliance.py +718 -0
- modules/control-plane/src/agent_control_plane/constraint_graphs.py +475 -0
- modules/control-plane/src/agent_control_plane/control_plane.py +848 -0
- modules/control-plane/src/agent_control_plane/example_executors.py +193 -0
- modules/control-plane/src/agent_control_plane/execution_engine.py +229 -0
- modules/control-plane/src/agent_control_plane/flight_recorder.py +600 -0
- modules/control-plane/src/agent_control_plane/governance_layer.py +432 -0
- modules/control-plane/src/agent_control_plane/hf_utils.py +561 -0
- modules/control-plane/src/agent_control_plane/interfaces/__init__.py +53 -0
- modules/control-plane/src/agent_control_plane/interfaces/kernel_interface.py +359 -0
- modules/control-plane/src/agent_control_plane/interfaces/plugin_interface.py +495 -0
- modules/control-plane/src/agent_control_plane/interfaces/protocol_interfaces.py +385 -0
- modules/control-plane/src/agent_control_plane/kernel_space.py +707 -0
- modules/control-plane/src/agent_control_plane/langchain_adapter.py +422 -0
- modules/control-plane/src/agent_control_plane/lifecycle.py +3111 -0
- modules/control-plane/src/agent_control_plane/mcp_adapter.py +517 -0
- modules/control-plane/src/agent_control_plane/ml_safety.py +560 -0
- modules/control-plane/src/agent_control_plane/multimodal.py +724 -0
- modules/control-plane/src/agent_control_plane/mute_agent.py +419 -0
- modules/control-plane/src/agent_control_plane/observability.py +785 -0
- modules/control-plane/src/agent_control_plane/orchestrator.py +480 -0
- modules/control-plane/src/agent_control_plane/plugin_registry.py +748 -0
- modules/control-plane/src/agent_control_plane/policy_engine.py +525 -0
- modules/control-plane/src/agent_control_plane/shadow_mode.py +307 -0
- modules/control-plane/src/agent_control_plane/signals.py +491 -0
- modules/control-plane/src/agent_control_plane/supervisor_agents.py +427 -0
- modules/control-plane/src/agent_control_plane/time_travel_debugger.py +554 -0
- modules/control-plane/src/agent_control_plane/tool_registry.py +350 -0
- modules/control-plane/src/agent_control_plane/vfs.py +695 -0
- modules/control-plane/tests/README.md +33 -0
- modules/control-plane/tests/test_a2a_adapter.py +336 -0
- modules/control-plane/tests/test_adapter.py +422 -0
- modules/control-plane/tests/test_advanced_features.py +389 -0
- modules/control-plane/tests/test_benchmark.py +223 -0
- modules/control-plane/tests/test_compliance.py +214 -0
- modules/control-plane/tests/test_control_plane.py +295 -0
- modules/control-plane/tests/test_hibernation.py +274 -0
- modules/control-plane/tests/test_kernel_interception.py +284 -0
- modules/control-plane/tests/test_langchain_adapter.py +258 -0
- modules/control-plane/tests/test_lifecycle.py +1174 -0
- modules/control-plane/tests/test_mcp_adapter.py +293 -0
- modules/control-plane/tests/test_ml_safety.py +142 -0
- modules/control-plane/tests/test_multimodal.py +317 -0
- modules/control-plane/tests/test_new_features.py +435 -0
- modules/control-plane/tests/test_observability.py +338 -0
- modules/control-plane/tests/test_time_travel.py +387 -0
- modules/emk/.github/workflows/ci.yml +105 -0
- modules/emk/.github/workflows/publish.yml +144 -0
- modules/emk/.gitignore +74 -0
- modules/emk/CHANGELOG.md +41 -0
- modules/emk/CONTRIBUTING.md +295 -0
- modules/emk/IMPLEMENTATION.md +174 -0
- modules/emk/LICENSE +21 -0
- modules/emk/MANIFEST.in +8 -0
- modules/emk/README.md +135 -0
- modules/emk/RELEASE_NOTES.md +82 -0
- modules/emk/SECURITY.md +52 -0
- modules/emk/codecov.yml +39 -0
- modules/emk/docs/MEMORY_MANAGEMENT.md +285 -0
- modules/emk/emk/__init__.py +106 -0
- modules/emk/emk/hf_utils.py +419 -0
- modules/emk/emk/indexer.py +144 -0
- modules/emk/emk/py.typed +0 -0
- modules/emk/emk/schema.py +204 -0
- modules/emk/emk/sleep_cycle.py +345 -0
- modules/emk/emk/store.py +479 -0
- modules/emk/examples/basic_usage.py +123 -0
- modules/emk/examples/memory_features_demo.py +154 -0
- modules/emk/experiments/README.md +59 -0
- modules/emk/experiments/reproduce_results.py +461 -0
- modules/emk/experiments/results.json +61 -0
- modules/emk/paper/structure.tex +192 -0
- modules/emk/paper/whitepaper.md +273 -0
- modules/emk/pyproject.toml +91 -0
- modules/emk/setup.py +5 -0
- modules/emk/tests/test_file_adapter.py +195 -0
- modules/emk/tests/test_indexer.py +174 -0
- modules/emk/tests/test_init.py +55 -0
- modules/emk/tests/test_negative_memory.py +83 -0
- modules/emk/tests/test_schema.py +150 -0
- modules/emk/tests/test_semantic_rules.py +175 -0
- modules/emk/tests/test_sleep_cycle.py +335 -0
- modules/emk/tests/test_store_anti_patterns.py +239 -0
- modules/iatp/.github/workflows/docker-build.yml +124 -0
- modules/iatp/.github/workflows/publish.yml +174 -0
- modules/iatp/.github/workflows/python-package.yml +121 -0
- modules/iatp/.gitignore +67 -0
- modules/iatp/.pre-commit-config.yaml +64 -0
- modules/iatp/CHANGELOG.md +120 -0
- modules/iatp/Dockerfile +91 -0
- modules/iatp/IMPLEMENTATION_SUMMARY.md +218 -0
- modules/iatp/MANIFEST.in +9 -0
- modules/iatp/README.md +180 -0
- modules/iatp/docker/Dockerfile.agent +27 -0
- modules/iatp/docker/Dockerfile.sidecar-python +86 -0
- modules/iatp/docker/README.md +258 -0
- modules/iatp/docker-compose.yml +194 -0
- modules/iatp/docs/ARCHITECTURE.md +243 -0
- modules/iatp/docs/CLI_GUIDE.md +220 -0
- modules/iatp/docs/DEPLOYMENT.md +304 -0
- modules/iatp/examples/README.md +132 -0
- modules/iatp/examples/backend_agent.py +39 -0
- modules/iatp/examples/client.py +168 -0
- modules/iatp/examples/demo_attestation_reputation.py +274 -0
- modules/iatp/examples/demo_client.py +240 -0
- modules/iatp/examples/demo_rbac.py +143 -0
- modules/iatp/examples/integration_demo.py +245 -0
- modules/iatp/examples/manifests/coder_agent.json +20 -0
- modules/iatp/examples/manifests/reviewer_agent.json +19 -0
- modules/iatp/examples/manifests/secure_bank.json +14 -0
- modules/iatp/examples/manifests/standard_agent.json +14 -0
- modules/iatp/examples/manifests/untrusted_honeypot.json +14 -0
- modules/iatp/examples/run_secure_bank_sidecar.py +85 -0
- modules/iatp/examples/run_sidecar.py +105 -0
- modules/iatp/examples/run_untrusted_sidecar.py +77 -0
- modules/iatp/examples/secure_bank_agent.py +138 -0
- modules/iatp/examples/test_untrusted.py +82 -0
- modules/iatp/examples/untrusted_agent.py +119 -0
- modules/iatp/experiments/README.md +58 -0
- modules/iatp/experiments/cascading_hallucination/README.md +149 -0
- modules/iatp/experiments/cascading_hallucination/agent_a_user.py +41 -0
- modules/iatp/experiments/cascading_hallucination/agent_b_summarizer.py +54 -0
- modules/iatp/experiments/cascading_hallucination/agent_c_database.py +47 -0
- modules/iatp/experiments/cascading_hallucination/proof_of_concept.py +290 -0
- modules/iatp/experiments/cascading_hallucination/run_experiment.py +226 -0
- modules/iatp/experiments/cascading_hallucination/sidecar_c.py +61 -0
- modules/iatp/experiments/reproduce_results.py +574 -0
- modules/iatp/experiments/results.json +2336 -0
- modules/iatp/iatp/__init__.py +164 -0
- modules/iatp/iatp/attestation.py +401 -0
- modules/iatp/iatp/cli.py +253 -0
- modules/iatp/iatp/hf_utils.py +469 -0
- modules/iatp/iatp/ipc_pipes.py +578 -0
- modules/iatp/iatp/main.py +410 -0
- modules/iatp/iatp/models/__init__.py +445 -0
- modules/iatp/iatp/policy_engine.py +335 -0
- modules/iatp/iatp/py.typed +2 -0
- modules/iatp/iatp/recovery.py +319 -0
- modules/iatp/iatp/security/__init__.py +268 -0
- modules/iatp/iatp/sidecar/__init__.py +517 -0
- modules/iatp/iatp/telemetry/__init__.py +162 -0
- modules/iatp/iatp/tests/__init__.py +1 -0
- modules/iatp/iatp/tests/test_attestation.py +368 -0
- modules/iatp/iatp/tests/test_cli.py +129 -0
- modules/iatp/iatp/tests/test_models.py +128 -0
- modules/iatp/iatp/tests/test_policy_engine.py +345 -0
- modules/iatp/iatp/tests/test_recovery.py +279 -0
- modules/iatp/iatp/tests/test_security.py +220 -0
- modules/iatp/iatp/tests/test_sidecar.py +165 -0
- modules/iatp/iatp/tests/test_telemetry.py +173 -0
- modules/iatp/paper/BLOG.md +307 -0
- modules/iatp/paper/PAPER.md +236 -0
- modules/iatp/paper/RFC_SUBMISSION.md +299 -0
- modules/iatp/paper/whitepaper.md +369 -0
- modules/iatp/proto/README.md +200 -0
- modules/iatp/proto/generate_stubs.py +81 -0
- modules/iatp/proto/iatp.proto +552 -0
- modules/iatp/pyproject.toml +180 -0
- modules/iatp/requirements-dev.txt +2 -0
- modules/iatp/requirements.txt +6 -0
- modules/iatp/setup.py +60 -0
- modules/iatp/sidecar/README.md +487 -0
- modules/iatp/sidecar/go/Dockerfile +32 -0
- modules/iatp/sidecar/go/README.md +237 -0
- modules/iatp/sidecar/go/go.mod +8 -0
- modules/iatp/sidecar/go/main.go +488 -0
- modules/iatp/spec/001-handshake.md +436 -0
- modules/iatp/spec/002-reversibility.md +394 -0
- modules/iatp/spec/schema/capability_manifest.json +266 -0
- modules/iatp/test_integration.py +310 -0
- modules/mcp-kernel-server/README.md +261 -0
- modules/mcp-kernel-server/pyproject.toml +60 -0
- modules/mcp-kernel-server/src/mcp_kernel_server/__init__.py +26 -0
- modules/mcp-kernel-server/src/mcp_kernel_server/cli.py +229 -0
- modules/mcp-kernel-server/src/mcp_kernel_server/resources.py +215 -0
- modules/mcp-kernel-server/src/mcp_kernel_server/server.py +562 -0
- modules/mcp-kernel-server/src/mcp_kernel_server/tools.py +1172 -0
- modules/mute-agent/.github/workflows/safety_check.yml +45 -0
- modules/mute-agent/.gitignore +53 -0
- modules/mute-agent/ARCHITECTURE.md +531 -0
- modules/mute-agent/BENCHMARK_GUIDE.md +384 -0
- modules/mute-agent/COMPLETION_SUMMARY.md +293 -0
- modules/mute-agent/EXPERIMENT_SUMMARY.md +318 -0
- modules/mute-agent/IMPLEMENTATION_SUMMARY.md +212 -0
- modules/mute-agent/LICENSE +21 -0
- modules/mute-agent/PHASE3_SUMMARY.md +297 -0
- modules/mute-agent/README.md +360 -0
- modules/mute-agent/STEEL_MAN_RESULTS.md +353 -0
- modules/mute-agent/USAGE.md +505 -0
- modules/mute-agent/V2_IMPLEMENTATION_SUMMARY.md +253 -0
- modules/mute-agent/V2_STEEL_MAN_IMPLEMENTATION.md +274 -0
- modules/mute-agent/VERIFICATION_REPORT.md +435 -0
- modules/mute-agent/charts/cost_comparison.png +0 -0
- modules/mute-agent/charts/cost_vs_ambiguity.png +0 -0
- modules/mute-agent/charts/metrics_comparison.png +0 -0
- modules/mute-agent/charts/scenario_breakdown.png +0 -0
- modules/mute-agent/charts/trace_attack_blocked.html +140 -0
- modules/mute-agent/charts/trace_attack_blocked.png +0 -0
- modules/mute-agent/charts/trace_failure.html +140 -0
- modules/mute-agent/charts/trace_failure.png +0 -0
- modules/mute-agent/charts/trace_success.html +140 -0
- modules/mute-agent/charts/trace_success.png +0 -0
- modules/mute-agent/examples/__init__.py +1 -0
- modules/mute-agent/examples/advanced_example.py +384 -0
- modules/mute-agent/examples/graph_debugger_demo.py +241 -0
- modules/mute-agent/examples/listener_example.py +297 -0
- modules/mute-agent/examples/simple_example.py +242 -0
- modules/mute-agent/examples/steel_man_demo.py +297 -0
- modules/mute-agent/experiments/README.md +135 -0
- modules/mute-agent/experiments/__init__.py +3 -0
- modules/mute-agent/experiments/agent_comparison.csv +6 -0
- modules/mute-agent/experiments/agent_comparison_50runs.csv +6 -0
- modules/mute-agent/experiments/ambiguity_test.py +335 -0
- modules/mute-agent/experiments/ambiguity_test_results.csv +31 -0
- modules/mute-agent/experiments/ambiguity_test_results_50runs.csv +51 -0
- modules/mute-agent/experiments/baseline_agent.py +189 -0
- modules/mute-agent/experiments/benchmark.py +402 -0
- modules/mute-agent/experiments/demo.py +172 -0
- modules/mute-agent/experiments/generate_cost_curve.py +474 -0
- modules/mute-agent/experiments/jailbreak_test.py +137 -0
- modules/mute-agent/experiments/latent_state_scenario.py +361 -0
- modules/mute-agent/experiments/mute_agent_experiment.py +349 -0
- modules/mute-agent/experiments/run_extended_experiment.py +40 -0
- modules/mute-agent/experiments/run_v2_experiments.py +266 -0
- modules/mute-agent/experiments/run_v2_experiments_auto.py +247 -0
- modules/mute-agent/experiments/v2_scenarios/README.md +214 -0
- modules/mute-agent/experiments/v2_scenarios/__init__.py +4 -0
- modules/mute-agent/experiments/v2_scenarios/scenario_1_deep_dependency.py +325 -0
- modules/mute-agent/experiments/v2_scenarios/scenario_2_adversarial.py +328 -0
- modules/mute-agent/experiments/v2_scenarios/scenario_3_false_positive.py +303 -0
- modules/mute-agent/experiments/v2_scenarios/scenario_4_performance.py +319 -0
- modules/mute-agent/experiments/visualize.py +400 -0
- modules/mute-agent/mute_agent/__init__.py +66 -0
- modules/mute-agent/mute_agent/core/__init__.py +1 -0
- modules/mute-agent/mute_agent/core/execution_agent.py +164 -0
- modules/mute-agent/mute_agent/core/handshake_protocol.py +199 -0
- modules/mute-agent/mute_agent/core/reasoning_agent.py +236 -0
- modules/mute-agent/mute_agent/knowledge_graph/__init__.py +1 -0
- modules/mute-agent/mute_agent/knowledge_graph/graph_elements.py +63 -0
- modules/mute-agent/mute_agent/knowledge_graph/multidimensional_graph.py +168 -0
- modules/mute-agent/mute_agent/knowledge_graph/subgraph.py +222 -0
- modules/mute-agent/mute_agent/listener/__init__.py +41 -0
- modules/mute-agent/mute_agent/listener/adapters/__init__.py +29 -0
- modules/mute-agent/mute_agent/listener/adapters/base_adapter.py +187 -0
- modules/mute-agent/mute_agent/listener/adapters/caas_adapter.py +342 -0
- modules/mute-agent/mute_agent/listener/adapters/control_plane_adapter.py +434 -0
- modules/mute-agent/mute_agent/listener/adapters/iatp_adapter.py +330 -0
- modules/mute-agent/mute_agent/listener/adapters/scak_adapter.py +249 -0
- modules/mute-agent/mute_agent/listener/listener.py +608 -0
- modules/mute-agent/mute_agent/listener/state_observer.py +434 -0
- modules/mute-agent/mute_agent/listener/threshold_config.py +311 -0
- modules/mute-agent/mute_agent/super_system/__init__.py +1 -0
- modules/mute-agent/mute_agent/super_system/router.py +202 -0
- modules/mute-agent/mute_agent/visualization/__init__.py +8 -0
- modules/mute-agent/mute_agent/visualization/graph_debugger.py +495 -0
- modules/mute-agent/requirements-dev.txt +6 -0
- modules/mute-agent/requirements.txt +9 -0
- modules/mute-agent/setup.py +64 -0
- modules/mute-agent/src/__init__.py +0 -0
- modules/mute-agent/src/agents/__init__.py +0 -0
- modules/mute-agent/src/agents/baseline_agent.py +524 -0
- modules/mute-agent/src/agents/interactive_agent.py +113 -0
- modules/mute-agent/src/agents/mute_agent.py +622 -0
- modules/mute-agent/src/benchmarks/__init__.py +0 -0
- modules/mute-agent/src/benchmarks/evaluator.py +481 -0
- modules/mute-agent/src/benchmarks/scenarios.json +985 -0
- modules/mute-agent/src/core/__init__.py +0 -0
- modules/mute-agent/src/core/mock_state.py +320 -0
- modules/mute-agent/src/core/tools.py +441 -0
- modules/nexus/__init__.py +49 -0
- modules/nexus/arbiter.py +357 -0
- modules/nexus/client.py +464 -0
- modules/nexus/dmz.py +417 -0
- modules/nexus/escrow.py +428 -0
- modules/nexus/exceptions.py +284 -0
- modules/nexus/registry.py +391 -0
- modules/nexus/reputation.py +423 -0
- modules/nexus/schemas/__init__.py +49 -0
- modules/nexus/schemas/compliance.py +274 -0
- modules/nexus/schemas/escrow.py +249 -0
- modules/nexus/schemas/manifest.py +223 -0
- modules/nexus/schemas/receipt.py +206 -0
- modules/observability/README.md +192 -0
- modules/observability/alertmanager/alertmanager.yml +116 -0
- modules/observability/alerts/agent-os-alerts.yaml +197 -0
- modules/observability/docker-compose.yml +128 -0
- modules/observability/grafana/dashboards/agent-os-amb.json +448 -0
- modules/observability/grafana/dashboards/agent-os-cmvk.json +441 -0
- modules/observability/grafana/dashboards/agent-os-overview.json +268 -0
- modules/observability/grafana/dashboards/agent-os-performance.json +15 -0
- modules/observability/grafana/dashboards/agent-os-safety.json +50 -0
- modules/observability/grafana/provisioning/dashboards/dashboards.yml +15 -0
- modules/observability/grafana/provisioning/datasources/datasources.yml +33 -0
- modules/observability/otel/otel-collector-config.yml +61 -0
- modules/observability/prometheus/prometheus.yml +63 -0
- modules/observability/pyproject.toml +53 -0
- modules/observability/scripts/export_dashboards.py +55 -0
- modules/observability/src/agent_os_observability/__init__.py +25 -0
- modules/observability/src/agent_os_observability/dashboards.py +896 -0
- modules/observability/src/agent_os_observability/metrics.py +396 -0
- modules/observability/src/agent_os_observability/server.py +221 -0
- modules/observability/src/agent_os_observability/tracer.py +226 -0
- modules/primitives/.gitignore +8 -0
- modules/primitives/README.md +62 -0
- modules/primitives/agent_primitives/__init__.py +22 -0
- modules/primitives/agent_primitives/failures.py +82 -0
- modules/primitives/agent_primitives/py.typed +0 -0
- modules/primitives/pyproject.toml +68 -0
- modules/scak/.github/copilot-instructions.md +396 -0
- modules/scak/.github/workflows/release.yml +117 -0
- modules/scak/.gitignore +32 -0
- modules/scak/CHANGELOG.md +173 -0
- modules/scak/CITATION.cff +62 -0
- modules/scak/CONTRIBUTING.md +429 -0
- modules/scak/Dockerfile +58 -0
- modules/scak/ENTERPRISE_FEATURES.md +518 -0
- modules/scak/IMPLEMENTATION_SUMMARY.md +206 -0
- modules/scak/LIMITATIONS.md +565 -0
- modules/scak/MANIFEST.in +16 -0
- modules/scak/NOVELTY.md +535 -0
- modules/scak/README.md +928 -0
- modules/scak/RESEARCH.md +670 -0
- modules/scak/agent_kernel/__init__.py +66 -0
- modules/scak/agent_kernel/analyzer.py +432 -0
- modules/scak/agent_kernel/auditor.py +31 -0
- modules/scak/agent_kernel/completeness_auditor.py +234 -0
- modules/scak/agent_kernel/detector.py +200 -0
- modules/scak/agent_kernel/kernel.py +741 -0
- modules/scak/agent_kernel/memory_manager.py +82 -0
- modules/scak/agent_kernel/models.py +372 -0
- modules/scak/agent_kernel/nudge_mechanism.py +260 -0
- modules/scak/agent_kernel/outcome_analyzer.py +335 -0
- modules/scak/agent_kernel/patcher.py +579 -0
- modules/scak/agent_kernel/semantic_analyzer.py +313 -0
- modules/scak/agent_kernel/semantic_purge.py +346 -0
- modules/scak/agent_kernel/simulator.py +447 -0
- modules/scak/agent_kernel/teacher.py +82 -0
- modules/scak/agent_kernel/triage.py +149 -0
- modules/scak/build_and_publish.ps1 +74 -0
- modules/scak/build_and_publish.sh +74 -0
- modules/scak/cli.py +471 -0
- modules/scak/dashboard.py +462 -0
- modules/scak/datasets/DATASET_CARD.md +219 -0
- modules/scak/datasets/README.md +143 -0
- modules/scak/datasets/gaia_vague_queries/vague_queries.json +262 -0
- modules/scak/datasets/hf_upload/README.md +219 -0
- modules/scak/datasets/hf_upload/scak_gaia_laziness.jsonl +50 -0
- modules/scak/datasets/prepare_hf_datasets.py +145 -0
- modules/scak/datasets/red_team/jailbreak_patterns.json +202 -0
- modules/scak/docker-compose.yml +99 -0
- modules/scak/docs/Adaptive-Memory-Hierarchy.md +319 -0
- modules/scak/docs/Data-Contracts-and-Schemas.md +285 -0
- modules/scak/docs/Dual-Loop-Architecture.md +344 -0
- modules/scak/docs/Enhanced-Features.md +612 -0
- modules/scak/docs/LANGCHAIN_INTEGRATION.md +572 -0
- modules/scak/docs/README.md +128 -0
- modules/scak/docs/Reference-Implementations.md +163 -0
- modules/scak/docs/SCAK_V2.md +374 -0
- modules/scak/docs/Three-Failure-Types.md +178 -0
- modules/scak/examples/basic_example.py +155 -0
- modules/scak/examples/circuit_breaker_lazy_eval_demo.py +243 -0
- modules/scak/examples/langchain_integration_example.py +339 -0
- modules/scak/examples/layer4_demo.py +243 -0
- modules/scak/examples/production_features_demo.py +353 -0
- modules/scak/examples/quick_demo.py +79 -0
- modules/scak/examples/scak_v2_demo.py +252 -0
- modules/scak/experiments/README.md +438 -0
- modules/scak/experiments/ablation_studies/README.md +192 -0
- modules/scak/experiments/ablation_studies/ablation_no_audit.py +116 -0
- modules/scak/experiments/ablation_studies/ablation_no_purge.py +133 -0
- modules/scak/experiments/chaos_engineering/README.md +332 -0
- modules/scak/experiments/context_efficiency_test.py +328 -0
- modules/scak/experiments/gaia_benchmark/README.md +208 -0
- modules/scak/experiments/laziness_benchmark.py +179 -0
- modules/scak/experiments/long_horizon_task_experiment.py +252 -0
- modules/scak/experiments/multi_agent_rag_experiment.py +284 -0
- modules/scak/experiments/results/ablation_table.md +12 -0
- modules/scak/experiments/results/long_horizon.json +36 -0
- modules/scak/experiments/results/multi_agent_rag.json +66 -0
- modules/scak/experiments/run_comprehensive_ablations.py +332 -0
- modules/scak/experiments/test_auditor_patcher_integration.py +251 -0
- modules/scak/notebooks/getting_started.ipynb +33 -0
- modules/scak/paper/ARXIV_SUBMISSION_METADATA.txt +109 -0
- modules/scak/paper/PAPER_CHECKLIST.md +304 -0
- modules/scak/paper/Paper.pdf +0 -0
- modules/scak/paper/README.md +113 -0
- modules/scak/paper/appendix.md +351 -0
- modules/scak/paper/arxiv/bibliography.bib +284 -0
- modules/scak/paper/arxiv/fig1_ooda_architecture.pdf +0 -0
- modules/scak/paper/arxiv/fig2_memory_hierarchy.pdf +0 -0
- modules/scak/paper/arxiv/fig3_gaia_results.pdf +0 -0
- modules/scak/paper/arxiv/fig4_ablation_heatmap.pdf +0 -0
- modules/scak/paper/arxiv/fig5_context_reduction.pdf +0 -0
- modules/scak/paper/arxiv/fig6_mttr_boxplot.pdf +0 -0
- modules/scak/paper/arxiv/main.aux +103 -0
- modules/scak/paper/arxiv/main.bbl +113 -0
- modules/scak/paper/arxiv/main.blg +55 -0
- modules/scak/paper/arxiv/main.out +31 -0
- modules/scak/paper/arxiv/main.pdf +0 -0
- modules/scak/paper/arxiv/main.tex +482 -0
- modules/scak/paper/arxiv_submission/bibliography.bib +284 -0
- modules/scak/paper/arxiv_submission/fig1_ooda_architecture.pdf +0 -0
- modules/scak/paper/arxiv_submission/fig2_memory_hierarchy.pdf +0 -0
- modules/scak/paper/arxiv_submission/fig3_gaia_results.pdf +0 -0
- modules/scak/paper/arxiv_submission/fig4_ablation_heatmap.pdf +0 -0
- modules/scak/paper/arxiv_submission/fig5_context_reduction.pdf +0 -0
- modules/scak/paper/arxiv_submission/fig6_mttr_boxplot.pdf +0 -0
- modules/scak/paper/arxiv_submission/main.aux +103 -0
- modules/scak/paper/arxiv_submission/main.bbl +113 -0
- modules/scak/paper/arxiv_submission/main.blg +55 -0
- modules/scak/paper/arxiv_submission/main.out +31 -0
- modules/scak/paper/arxiv_submission/main.pdf +0 -0
- modules/scak/paper/arxiv_submission/main.tex +482 -0
- modules/scak/paper/arxiv_submission.tar.gz +0 -0
- modules/scak/paper/bibliography.bib +284 -0
- modules/scak/paper/build.sh +55 -0
- modules/scak/paper/figures/README.md +32 -0
- modules/scak/paper/figures/fig1_ooda_architecture.md +75 -0
- modules/scak/paper/figures/fig1_ooda_architecture.pdf +0 -0
- modules/scak/paper/figures/fig1_ooda_architecture.png +0 -0
- modules/scak/paper/figures/fig2_memory_hierarchy.md +83 -0
- modules/scak/paper/figures/fig2_memory_hierarchy.pdf +0 -0
- modules/scak/paper/figures/fig2_memory_hierarchy.png +0 -0
- modules/scak/paper/figures/fig3_gaia_results.md +64 -0
- modules/scak/paper/figures/fig3_gaia_results.pdf +0 -0
- modules/scak/paper/figures/fig3_gaia_results.png +0 -0
- modules/scak/paper/figures/fig4_ablation_heatmap.md +64 -0
- modules/scak/paper/figures/fig4_ablation_heatmap.pdf +0 -0
- modules/scak/paper/figures/fig4_ablation_heatmap.png +0 -0
- modules/scak/paper/figures/fig5_context_reduction.md +71 -0
- modules/scak/paper/figures/fig5_context_reduction.pdf +0 -0
- modules/scak/paper/figures/fig5_context_reduction.png +0 -0
- modules/scak/paper/figures/fig6_mttr_boxplot.md +80 -0
- modules/scak/paper/figures/fig6_mttr_boxplot.pdf +0 -0
- modules/scak/paper/figures/fig6_mttr_boxplot.png +0 -0
- modules/scak/paper/figures/generate_figures.py +463 -0
- modules/scak/paper/main.aux +103 -0
- modules/scak/paper/main.bbl +113 -0
- modules/scak/paper/main.blg +55 -0
- modules/scak/paper/main.md +192 -0
- modules/scak/paper/main.out +31 -0
- modules/scak/paper/main.pdf +0 -0
- modules/scak/paper/main.tex +482 -0
- modules/scak/reproducibility/ABLATIONS.md +225 -0
- modules/scak/reproducibility/Dockerfile.reproducibility +34 -0
- modules/scak/reproducibility/README.md +421 -0
- modules/scak/reproducibility/requirements-pinned.txt +32 -0
- modules/scak/reproducibility/run_all_experiments.py +395 -0
- modules/scak/reproducibility/seed_control.py +53 -0
- modules/scak/reproducibility/statistical_analysis.py +302 -0
- modules/scak/requirements.txt +50 -0
- modules/scak/setup.py +93 -0
- modules/scak/src/__init__.py +124 -0
- modules/scak/src/agents/__init__.py +13 -0
- modules/scak/src/agents/conflict_resolution.py +732 -0
- modules/scak/src/agents/orchestrator.py +761 -0
- modules/scak/src/agents/pubsub.py +484 -0
- modules/scak/src/agents/shadow_teacher.py +344 -0
- modules/scak/src/agents/swarm.py +661 -0
- modules/scak/src/agents/worker.py +357 -0
- modules/scak/src/integrations/__init__.py +81 -0
- modules/scak/src/integrations/cmvk_adapter.py +430 -0
- modules/scak/src/integrations/control_plane_adapter.py +601 -0
- modules/scak/src/integrations/langchain_integration.py +902 -0
- modules/scak/src/interfaces/__init__.py +59 -0
- modules/scak/src/interfaces/llm_clients.py +505 -0
- modules/scak/src/interfaces/openapi_tools.py +611 -0
- modules/scak/src/interfaces/plugin_system.py +605 -0
- modules/scak/src/interfaces/protocols.py +365 -0
- modules/scak/src/interfaces/telemetry.py +464 -0
- modules/scak/src/interfaces/tool_registry.py +547 -0
- modules/scak/src/kernel/__init__.py +100 -0
- modules/scak/src/kernel/auditor.py +305 -0
- modules/scak/src/kernel/circuit_breaker.py +398 -0
- modules/scak/src/kernel/core.py +724 -0
- modules/scak/src/kernel/distributed.py +667 -0
- modules/scak/src/kernel/evolution.py +455 -0
- modules/scak/src/kernel/failover.py +621 -0
- modules/scak/src/kernel/governance.py +710 -0
- modules/scak/src/kernel/governance_v2.py +603 -0
- modules/scak/src/kernel/lazy_evaluator.py +514 -0
- modules/scak/src/kernel/load_testing.py +633 -0
- modules/scak/src/kernel/memory.py +945 -0
- modules/scak/src/kernel/patcher.py +581 -0
- modules/scak/src/kernel/rubric.py +419 -0
- modules/scak/src/kernel/schemas.py +390 -0
- modules/scak/src/kernel/skill_mapper.py +309 -0
- modules/scak/src/kernel/triage.py +149 -0
- modules/scak/src/mocks/__init__.py +99 -0
- modules/scak/tests/__init__.py +1 -0
- modules/scak/tests/test_circuit_breaker.py +403 -0
- modules/scak/tests/test_conflict_resolution.py +287 -0
- modules/scak/tests/test_dual_loop.py +463 -0
- modules/scak/tests/test_enhanced_features.py +421 -0
- modules/scak/tests/test_failover_and_load.py +438 -0
- modules/scak/tests/test_governance.py +185 -0
- modules/scak/tests/test_kernel.py +359 -0
- modules/scak/tests/test_langchain_integration.py +451 -0
- modules/scak/tests/test_lazy_evaluator.py +465 -0
- modules/scak/tests/test_llm_clients.py +122 -0
- modules/scak/tests/test_memory_controller.py +528 -0
- modules/scak/tests/test_orchestrator.py +181 -0
- modules/scak/tests/test_phase3_integration.py +265 -0
- modules/scak/tests/test_pubsub_swarm.py +203 -0
- modules/scak/tests/test_reference_implementations.py +240 -0
- modules/scak/tests/test_rubric.py +363 -0
- modules/scak/tests/test_scak_v2.py +651 -0
- modules/scak/tests/test_skill_mapper.py +217 -0
- modules/scak/tests/test_specific_failures.py +393 -0
- modules/scak/tests/test_tool_registry.py +264 -0
- modules/scak/tests/test_tools_and_plugins.py +303 -0
- modules/scak/tests/test_triage.py +596 -0
- modules/scak/tests/test_write_through.py +319 -0
- agent_os_kernel-1.1.0.dist-info/METADATA +0 -400
- agent_os_kernel-1.1.0.dist-info/RECORD +0 -12
- {agent_os_kernel-1.1.0.dist-info → agent_os_kernel-1.3.0.dist-info}/WHEEL +0 -0
- {agent_os_kernel-1.1.0.dist-info → agent_os_kernel-1.3.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,761 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Multi-Agent Orchestration for complex workflows.
|
|
3
|
+
|
|
4
|
+
This module implements hierarchical agent coordination inspired by research
|
|
5
|
+
on multi-agent systems and swarm intelligence.
|
|
6
|
+
|
|
7
|
+
Research Foundation:
|
|
8
|
+
- "Voyager: An Open-Ended Embodied Agent with Large Language Models" (arXiv:2305.16291)
|
|
9
|
+
- Self-growing skill libraries and hierarchical task decomposition
|
|
10
|
+
- "DEPS: A Framework for Deployable and Evolvable Production Systems" (ICML 2023)
|
|
11
|
+
- Evolving agent teams and role-based coordination
|
|
12
|
+
- "AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation" (MSR 2023)
|
|
13
|
+
- Agent-to-agent communication patterns
|
|
14
|
+
|
|
15
|
+
Architectural Pattern:
|
|
16
|
+
- Supervisor agents coordinate worker agents
|
|
17
|
+
- Message passing via async queues (Redis pub-sub in production)
|
|
18
|
+
- Hierarchical task decomposition
|
|
19
|
+
- Role-based specialization (analyst, verifier, executor)
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
from typing import List, Dict, Any, Optional, Callable, Awaitable
|
|
23
|
+
from enum import Enum
|
|
24
|
+
from pydantic import BaseModel, Field
|
|
25
|
+
from datetime import datetime
|
|
26
|
+
import asyncio
|
|
27
|
+
import logging
|
|
28
|
+
from uuid import uuid4
|
|
29
|
+
|
|
30
|
+
# Import enhanced multi-agent capabilities (backward compatible)
|
|
31
|
+
_PUBSUB_AVAILABLE = True
|
|
32
|
+
_CONFLICT_RESOLUTION_AVAILABLE = True
|
|
33
|
+
|
|
34
|
+
try:
|
|
35
|
+
from .pubsub import InMemoryPubSub, PubSubBackend, AgentSwarm, MessagePriority
|
|
36
|
+
except ImportError:
|
|
37
|
+
_PUBSUB_AVAILABLE = False
|
|
38
|
+
InMemoryPubSub = None
|
|
39
|
+
PubSubBackend = None
|
|
40
|
+
AgentSwarm = None
|
|
41
|
+
MessagePriority = None
|
|
42
|
+
|
|
43
|
+
try:
|
|
44
|
+
from .conflict_resolution import ConflictResolver, AgentVote, ConflictType, VoteType
|
|
45
|
+
except ImportError:
|
|
46
|
+
_CONFLICT_RESOLUTION_AVAILABLE = False
|
|
47
|
+
ConflictResolver = None
|
|
48
|
+
AgentVote = None
|
|
49
|
+
ConflictType = None
|
|
50
|
+
VoteType = None
|
|
51
|
+
|
|
52
|
+
logger = logging.getLogger(__name__)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class AgentRole(str, Enum):
|
|
56
|
+
"""
|
|
57
|
+
Agent roles in the orchestration hierarchy.
|
|
58
|
+
|
|
59
|
+
Based on enterprise patterns (e.g., fraud detection with analyst + verifier).
|
|
60
|
+
"""
|
|
61
|
+
SUPERVISOR = "supervisor" # Coordinates other agents
|
|
62
|
+
ANALYST = "analyst" # Analyzes data and generates insights
|
|
63
|
+
VERIFIER = "verifier" # Validates outputs for correctness
|
|
64
|
+
EXECUTOR = "executor" # Performs actions/mutations
|
|
65
|
+
SPECIALIST = "specialist" # Domain-specific expertise
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
class MessageType(str, Enum):
|
|
69
|
+
"""Message types for agent-to-agent communication."""
|
|
70
|
+
TASK_ASSIGNMENT = "task_assignment"
|
|
71
|
+
TASK_COMPLETE = "task_complete"
|
|
72
|
+
TASK_FAILED = "task_failed"
|
|
73
|
+
REQUEST_ASSISTANCE = "request_assistance"
|
|
74
|
+
PROVIDE_FEEDBACK = "provide_feedback"
|
|
75
|
+
STATUS_UPDATE = "status_update"
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
class AgentMessage(BaseModel):
|
|
79
|
+
"""
|
|
80
|
+
Message passed between agents.
|
|
81
|
+
|
|
82
|
+
Implements structured communication protocol for multi-agent coordination.
|
|
83
|
+
"""
|
|
84
|
+
message_id: str = Field(default_factory=lambda: str(uuid4()))
|
|
85
|
+
from_agent: str = Field(..., description="Sender agent ID")
|
|
86
|
+
to_agent: str = Field(..., description="Recipient agent ID")
|
|
87
|
+
message_type: MessageType
|
|
88
|
+
payload: Dict[str, Any] = Field(default_factory=dict)
|
|
89
|
+
timestamp: datetime = Field(default_factory=datetime.now)
|
|
90
|
+
parent_message_id: Optional[str] = Field(None, description="Reply-to message ID")
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
class AgentSpec(BaseModel):
|
|
94
|
+
"""
|
|
95
|
+
Specification for an agent in the orchestration.
|
|
96
|
+
|
|
97
|
+
Defines the agent's role, capabilities, and execution function.
|
|
98
|
+
"""
|
|
99
|
+
agent_id: str
|
|
100
|
+
role: AgentRole
|
|
101
|
+
capabilities: List[str] = Field(default_factory=list, description="What this agent can do")
|
|
102
|
+
system_prompt: Optional[str] = None
|
|
103
|
+
model: str = "gpt-4o"
|
|
104
|
+
max_concurrent_tasks: int = 3
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
class TaskStatus(str, Enum):
|
|
108
|
+
"""Status of a task in the orchestration."""
|
|
109
|
+
PENDING = "pending"
|
|
110
|
+
IN_PROGRESS = "in_progress"
|
|
111
|
+
COMPLETED = "completed"
|
|
112
|
+
FAILED = "failed"
|
|
113
|
+
REQUIRES_ASSISTANCE = "requires_assistance"
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
class OrchestratedTask(BaseModel):
|
|
117
|
+
"""
|
|
118
|
+
A task being coordinated by the orchestrator.
|
|
119
|
+
|
|
120
|
+
Tracks the task lifecycle, assigned agent, and results.
|
|
121
|
+
"""
|
|
122
|
+
task_id: str = Field(default_factory=lambda: str(uuid4()))
|
|
123
|
+
description: str
|
|
124
|
+
assigned_to: Optional[str] = None
|
|
125
|
+
status: TaskStatus = TaskStatus.PENDING
|
|
126
|
+
result: Optional[Dict[str, Any]] = None
|
|
127
|
+
error: Optional[str] = None
|
|
128
|
+
created_at: datetime = Field(default_factory=datetime.now)
|
|
129
|
+
started_at: Optional[datetime] = None
|
|
130
|
+
completed_at: Optional[datetime] = None
|
|
131
|
+
parent_task_id: Optional[str] = None
|
|
132
|
+
subtasks: List[str] = Field(default_factory=list)
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
class Orchestrator:
|
|
136
|
+
"""
|
|
137
|
+
Multi-agent orchestrator for complex workflows.
|
|
138
|
+
|
|
139
|
+
Implements hierarchical coordination where a supervisor agent
|
|
140
|
+
decomposes tasks and assigns them to specialized worker agents.
|
|
141
|
+
|
|
142
|
+
Pattern: Supervisor → Workers with feedback loops
|
|
143
|
+
|
|
144
|
+
Example Use Cases:
|
|
145
|
+
- Fraud detection: Analyst detects anomaly → Verifier confirms → Executor blocks
|
|
146
|
+
- Data pipeline: Extractor → Transformer → Validator → Loader
|
|
147
|
+
- Customer support: Classifier → Resolver → Quality checker
|
|
148
|
+
|
|
149
|
+
Research: Inspired by "Voyager" (skill libraries) and "DEPS" (evolving teams).
|
|
150
|
+
"""
|
|
151
|
+
|
|
152
|
+
def __init__(
|
|
153
|
+
self,
|
|
154
|
+
agents: List[AgentSpec],
|
|
155
|
+
message_broker: Optional[Any] = None,
|
|
156
|
+
enable_pubsub: bool = True,
|
|
157
|
+
enable_conflict_resolution: bool = True
|
|
158
|
+
):
|
|
159
|
+
"""
|
|
160
|
+
Initialize orchestrator with agent specifications.
|
|
161
|
+
|
|
162
|
+
Args:
|
|
163
|
+
agents: List of agent specifications
|
|
164
|
+
message_broker: Optional message broker (Redis pub-sub in production)
|
|
165
|
+
enable_pubsub: Enable pub-sub messaging (default: True)
|
|
166
|
+
enable_conflict_resolution: Enable conflict resolution (default: True)
|
|
167
|
+
"""
|
|
168
|
+
self.agents = {agent.agent_id: agent for agent in agents}
|
|
169
|
+
self.tasks: Dict[str, OrchestratedTask] = {}
|
|
170
|
+
self.message_queue: asyncio.Queue = asyncio.Queue()
|
|
171
|
+
self.message_broker = message_broker
|
|
172
|
+
|
|
173
|
+
# Agent execution functions (injected by user)
|
|
174
|
+
self.agent_executors: Dict[str, Callable[[str, Dict[str, Any]], Awaitable[Dict[str, Any]]]] = {}
|
|
175
|
+
|
|
176
|
+
# Enhanced capabilities
|
|
177
|
+
self.pubsub: Optional[PubSubBackend] = None
|
|
178
|
+
self.conflict_resolver: Optional[ConflictResolver] = None
|
|
179
|
+
self.swarms: Dict[str, AgentSwarm] = {}
|
|
180
|
+
|
|
181
|
+
if enable_pubsub:
|
|
182
|
+
if not _PUBSUB_AVAILABLE:
|
|
183
|
+
logger.warning("Pub-sub requested but module not available")
|
|
184
|
+
elif message_broker:
|
|
185
|
+
self.pubsub = message_broker
|
|
186
|
+
logger.info("Pub-sub messaging enabled (custom broker)")
|
|
187
|
+
elif InMemoryPubSub:
|
|
188
|
+
self.pubsub = InMemoryPubSub()
|
|
189
|
+
logger.info("Pub-sub messaging enabled (in-memory)")
|
|
190
|
+
|
|
191
|
+
if enable_conflict_resolution:
|
|
192
|
+
if not _CONFLICT_RESOLUTION_AVAILABLE:
|
|
193
|
+
logger.warning("Conflict resolution requested but module not available")
|
|
194
|
+
elif ConflictResolver:
|
|
195
|
+
# Find supervisor agent for escalation
|
|
196
|
+
supervisor_id = None
|
|
197
|
+
for agent in agents:
|
|
198
|
+
if agent.role == AgentRole.SUPERVISOR:
|
|
199
|
+
supervisor_id = agent.agent_id
|
|
200
|
+
break
|
|
201
|
+
|
|
202
|
+
self.conflict_resolver = ConflictResolver(
|
|
203
|
+
default_vote_type=VoteType.MAJORITY,
|
|
204
|
+
supervisor_agent_id=supervisor_id
|
|
205
|
+
)
|
|
206
|
+
logger.info(f"Conflict resolution enabled (supervisor: {supervisor_id})")
|
|
207
|
+
|
|
208
|
+
logger.info(f"Orchestrator initialized with {len(agents)} agents")
|
|
209
|
+
|
|
210
|
+
def register_executor(
|
|
211
|
+
self,
|
|
212
|
+
agent_id: str,
|
|
213
|
+
executor: Callable[[str, Dict[str, Any]], Awaitable[Dict[str, Any]]]
|
|
214
|
+
):
|
|
215
|
+
"""
|
|
216
|
+
Register an execution function for an agent.
|
|
217
|
+
|
|
218
|
+
Args:
|
|
219
|
+
agent_id: Agent identifier
|
|
220
|
+
executor: Async function that executes tasks for this agent
|
|
221
|
+
Signature: async def execute(task_description: str, context: dict) -> dict
|
|
222
|
+
"""
|
|
223
|
+
if agent_id not in self.agents:
|
|
224
|
+
raise ValueError(f"Agent {agent_id} not found in orchestrator")
|
|
225
|
+
|
|
226
|
+
self.agent_executors[agent_id] = executor
|
|
227
|
+
logger.info(f"Executor registered for agent {agent_id}")
|
|
228
|
+
|
|
229
|
+
async def submit_task(
|
|
230
|
+
self,
|
|
231
|
+
description: str,
|
|
232
|
+
context: Optional[Dict[str, Any]] = None
|
|
233
|
+
) -> str:
|
|
234
|
+
"""
|
|
235
|
+
Submit a task to the orchestrator.
|
|
236
|
+
|
|
237
|
+
The orchestrator will:
|
|
238
|
+
1. Analyze the task complexity
|
|
239
|
+
2. Assign to appropriate agent(s)
|
|
240
|
+
3. Monitor execution and handle failures
|
|
241
|
+
4. Coordinate multi-step workflows
|
|
242
|
+
|
|
243
|
+
Args:
|
|
244
|
+
description: Task description
|
|
245
|
+
context: Additional context
|
|
246
|
+
|
|
247
|
+
Returns:
|
|
248
|
+
task_id for tracking
|
|
249
|
+
"""
|
|
250
|
+
task = OrchestratedTask(
|
|
251
|
+
description=description,
|
|
252
|
+
status=TaskStatus.PENDING
|
|
253
|
+
)
|
|
254
|
+
|
|
255
|
+
self.tasks[task.task_id] = task
|
|
256
|
+
|
|
257
|
+
logger.info(f"Task submitted: {task.task_id} - {description[:50]}")
|
|
258
|
+
|
|
259
|
+
# Start task execution in background
|
|
260
|
+
asyncio.create_task(self._execute_task(task.task_id, context or {}))
|
|
261
|
+
|
|
262
|
+
return task.task_id
|
|
263
|
+
|
|
264
|
+
async def _execute_task(
|
|
265
|
+
self,
|
|
266
|
+
task_id: str,
|
|
267
|
+
context: Dict[str, Any]
|
|
268
|
+
):
|
|
269
|
+
"""
|
|
270
|
+
Execute a task with automatic agent selection and coordination.
|
|
271
|
+
|
|
272
|
+
Implements the core orchestration logic:
|
|
273
|
+
1. Task analysis and decomposition
|
|
274
|
+
2. Agent selection based on capabilities
|
|
275
|
+
3. Execution with retry and fallback
|
|
276
|
+
4. Result aggregation for multi-step tasks
|
|
277
|
+
|
|
278
|
+
Args:
|
|
279
|
+
task_id: Task identifier
|
|
280
|
+
context: Execution context
|
|
281
|
+
"""
|
|
282
|
+
task = self.tasks[task_id]
|
|
283
|
+
task.status = TaskStatus.IN_PROGRESS
|
|
284
|
+
task.started_at = datetime.now()
|
|
285
|
+
|
|
286
|
+
try:
|
|
287
|
+
# Step 1: Analyze task and select agent
|
|
288
|
+
selected_agent = self._select_agent(task.description, context)
|
|
289
|
+
|
|
290
|
+
if not selected_agent:
|
|
291
|
+
raise ValueError("No suitable agent found for task")
|
|
292
|
+
|
|
293
|
+
task.assigned_to = selected_agent.agent_id
|
|
294
|
+
|
|
295
|
+
logger.info(
|
|
296
|
+
f"Task {task_id} assigned to {selected_agent.agent_id} "
|
|
297
|
+
f"(role: {selected_agent.role.value})"
|
|
298
|
+
)
|
|
299
|
+
|
|
300
|
+
# Step 2: Execute via registered executor
|
|
301
|
+
if selected_agent.agent_id not in self.agent_executors:
|
|
302
|
+
raise ValueError(f"No executor registered for {selected_agent.agent_id}")
|
|
303
|
+
|
|
304
|
+
executor = self.agent_executors[selected_agent.agent_id]
|
|
305
|
+
result = await executor(task.description, context)
|
|
306
|
+
|
|
307
|
+
# Step 3: Mark as completed
|
|
308
|
+
task.result = result
|
|
309
|
+
task.status = TaskStatus.COMPLETED
|
|
310
|
+
task.completed_at = datetime.now()
|
|
311
|
+
|
|
312
|
+
logger.info(f"Task {task_id} completed successfully")
|
|
313
|
+
|
|
314
|
+
# Emit telemetry
|
|
315
|
+
duration_ms = (task.completed_at - task.started_at).total_seconds() * 1000
|
|
316
|
+
logger.info(
|
|
317
|
+
f"Task metrics: task_id={task_id}, "
|
|
318
|
+
f"agent={selected_agent.agent_id}, "
|
|
319
|
+
f"duration_ms={duration_ms:.0f}"
|
|
320
|
+
)
|
|
321
|
+
|
|
322
|
+
except Exception as e:
|
|
323
|
+
# Handle failure
|
|
324
|
+
task.status = TaskStatus.FAILED
|
|
325
|
+
task.error = str(e)
|
|
326
|
+
task.completed_at = datetime.now()
|
|
327
|
+
|
|
328
|
+
logger.error(f"Task {task_id} failed: {e}")
|
|
329
|
+
|
|
330
|
+
# Could trigger self-correction here via Shadow Teacher
|
|
331
|
+
await self._handle_task_failure(task_id, e)
|
|
332
|
+
|
|
333
|
+
def _select_agent(
|
|
334
|
+
self,
|
|
335
|
+
task_description: str,
|
|
336
|
+
context: Dict[str, Any]
|
|
337
|
+
) -> Optional[AgentSpec]:
|
|
338
|
+
"""
|
|
339
|
+
Select the most appropriate agent for a task.
|
|
340
|
+
|
|
341
|
+
Selection based on:
|
|
342
|
+
1. Agent role (supervisor vs specialist)
|
|
343
|
+
2. Capabilities match
|
|
344
|
+
3. Current workload
|
|
345
|
+
|
|
346
|
+
Research: "DEPS" framework's dynamic agent selection.
|
|
347
|
+
|
|
348
|
+
Args:
|
|
349
|
+
task_description: Task to assign
|
|
350
|
+
context: Execution context
|
|
351
|
+
|
|
352
|
+
Returns:
|
|
353
|
+
Selected agent spec or None
|
|
354
|
+
"""
|
|
355
|
+
# Simple heuristic: match task keywords to capabilities
|
|
356
|
+
task_lower = task_description.lower()
|
|
357
|
+
|
|
358
|
+
candidates = []
|
|
359
|
+
for agent in self.agents.values():
|
|
360
|
+
# Check if agent has relevant capabilities
|
|
361
|
+
capability_match = any(
|
|
362
|
+
cap.lower() in task_lower
|
|
363
|
+
for cap in agent.capabilities
|
|
364
|
+
)
|
|
365
|
+
|
|
366
|
+
if capability_match:
|
|
367
|
+
candidates.append(agent)
|
|
368
|
+
|
|
369
|
+
# If no capability match, use supervisor
|
|
370
|
+
if not candidates:
|
|
371
|
+
supervisors = [
|
|
372
|
+
a for a in self.agents.values()
|
|
373
|
+
if a.role == AgentRole.SUPERVISOR
|
|
374
|
+
]
|
|
375
|
+
return supervisors[0] if supervisors else None
|
|
376
|
+
|
|
377
|
+
# Return first match (could add load balancing here)
|
|
378
|
+
return candidates[0]
|
|
379
|
+
|
|
380
|
+
async def _handle_task_failure(
|
|
381
|
+
self,
|
|
382
|
+
task_id: str,
|
|
383
|
+
error: Exception
|
|
384
|
+
):
|
|
385
|
+
"""
|
|
386
|
+
Handle task failure with potential retry or escalation.
|
|
387
|
+
|
|
388
|
+
Could integrate with self-correcting kernel here:
|
|
389
|
+
1. Analyze failure via Shadow Teacher
|
|
390
|
+
2. Generate patch
|
|
391
|
+
3. Retry with updated instructions
|
|
392
|
+
|
|
393
|
+
Args:
|
|
394
|
+
task_id: Failed task ID
|
|
395
|
+
error: Exception that caused failure
|
|
396
|
+
"""
|
|
397
|
+
task = self.tasks[task_id]
|
|
398
|
+
|
|
399
|
+
logger.warning(
|
|
400
|
+
f"Handling failure for task {task_id}: {error}\n"
|
|
401
|
+
f"Consider implementing self-correction via Shadow Teacher"
|
|
402
|
+
)
|
|
403
|
+
|
|
404
|
+
# Placeholder for self-correction integration
|
|
405
|
+
# In production, would call:
|
|
406
|
+
# - shadow_teacher.analyze_failure(...)
|
|
407
|
+
# - patcher.create_patch(...)
|
|
408
|
+
# - retry with updated context
|
|
409
|
+
|
|
410
|
+
async def get_task_status(self, task_id: str) -> Optional[OrchestratedTask]:
|
|
411
|
+
"""
|
|
412
|
+
Get current status of a task.
|
|
413
|
+
|
|
414
|
+
Args:
|
|
415
|
+
task_id: Task identifier
|
|
416
|
+
|
|
417
|
+
Returns:
|
|
418
|
+
Task object or None if not found
|
|
419
|
+
"""
|
|
420
|
+
return self.tasks.get(task_id)
|
|
421
|
+
|
|
422
|
+
async def send_message(self, message: AgentMessage):
|
|
423
|
+
"""
|
|
424
|
+
Send a message from one agent to another.
|
|
425
|
+
|
|
426
|
+
Implements agent-to-agent communication (A2A pattern).
|
|
427
|
+
|
|
428
|
+
Args:
|
|
429
|
+
message: Message to send
|
|
430
|
+
"""
|
|
431
|
+
if self.message_broker:
|
|
432
|
+
# Use external broker (e.g., Redis pub-sub)
|
|
433
|
+
await self.message_broker.publish(message.to_agent, message.dict())
|
|
434
|
+
else:
|
|
435
|
+
# Use internal queue
|
|
436
|
+
await self.message_queue.put(message)
|
|
437
|
+
|
|
438
|
+
logger.debug(
|
|
439
|
+
f"Message sent: {message.from_agent} → {message.to_agent} "
|
|
440
|
+
f"({message.message_type.value})"
|
|
441
|
+
)
|
|
442
|
+
|
|
443
|
+
async def decompose_task(
|
|
444
|
+
self,
|
|
445
|
+
task_id: str,
|
|
446
|
+
subtask_descriptions: List[str]
|
|
447
|
+
) -> List[str]:
|
|
448
|
+
"""
|
|
449
|
+
Decompose a complex task into subtasks.
|
|
450
|
+
|
|
451
|
+
Implements hierarchical task decomposition from "Voyager" research.
|
|
452
|
+
|
|
453
|
+
Args:
|
|
454
|
+
task_id: Parent task ID
|
|
455
|
+
subtask_descriptions: List of subtask descriptions
|
|
456
|
+
|
|
457
|
+
Returns:
|
|
458
|
+
List of subtask IDs
|
|
459
|
+
"""
|
|
460
|
+
parent_task = self.tasks.get(task_id)
|
|
461
|
+
if not parent_task:
|
|
462
|
+
raise ValueError(f"Task {task_id} not found")
|
|
463
|
+
|
|
464
|
+
subtask_ids = []
|
|
465
|
+
for desc in subtask_descriptions:
|
|
466
|
+
subtask = OrchestratedTask(
|
|
467
|
+
description=desc,
|
|
468
|
+
parent_task_id=task_id,
|
|
469
|
+
status=TaskStatus.PENDING
|
|
470
|
+
)
|
|
471
|
+
self.tasks[subtask.task_id] = subtask
|
|
472
|
+
subtask_ids.append(subtask.task_id)
|
|
473
|
+
|
|
474
|
+
# Start execution
|
|
475
|
+
asyncio.create_task(self._execute_task(subtask.task_id, {}))
|
|
476
|
+
|
|
477
|
+
parent_task.subtasks = subtask_ids
|
|
478
|
+
|
|
479
|
+
logger.info(
|
|
480
|
+
f"Task {task_id} decomposed into {len(subtask_ids)} subtasks"
|
|
481
|
+
)
|
|
482
|
+
|
|
483
|
+
return subtask_ids
|
|
484
|
+
|
|
485
|
+
def get_agent_workload(self, agent_id: str) -> int:
|
|
486
|
+
"""
|
|
487
|
+
Get current workload for an agent.
|
|
488
|
+
|
|
489
|
+
Returns:
|
|
490
|
+
Number of tasks currently in progress for this agent
|
|
491
|
+
"""
|
|
492
|
+
return sum(
|
|
493
|
+
1 for task in self.tasks.values()
|
|
494
|
+
if task.assigned_to == agent_id and task.status == TaskStatus.IN_PROGRESS
|
|
495
|
+
)
|
|
496
|
+
|
|
497
|
+
def get_orchestrator_stats(self) -> Dict[str, Any]:
|
|
498
|
+
"""
|
|
499
|
+
Get orchestrator statistics for monitoring.
|
|
500
|
+
|
|
501
|
+
Returns:
|
|
502
|
+
dict with task counts by status, agent workloads, etc.
|
|
503
|
+
"""
|
|
504
|
+
stats = {
|
|
505
|
+
"total_tasks": len(self.tasks),
|
|
506
|
+
"by_status": {},
|
|
507
|
+
"agent_workloads": {},
|
|
508
|
+
"avg_completion_time_ms": 0
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
# Count by status
|
|
512
|
+
for status in TaskStatus:
|
|
513
|
+
stats["by_status"][status.value] = sum(
|
|
514
|
+
1 for t in self.tasks.values() if t.status == status
|
|
515
|
+
)
|
|
516
|
+
|
|
517
|
+
# Agent workloads
|
|
518
|
+
for agent_id in self.agents:
|
|
519
|
+
stats["agent_workloads"][agent_id] = self.get_agent_workload(agent_id)
|
|
520
|
+
|
|
521
|
+
# Avg completion time
|
|
522
|
+
completed_tasks = [
|
|
523
|
+
t for t in self.tasks.values()
|
|
524
|
+
if t.status == TaskStatus.COMPLETED and t.completed_at and t.started_at
|
|
525
|
+
]
|
|
526
|
+
|
|
527
|
+
if completed_tasks:
|
|
528
|
+
total_ms = sum(
|
|
529
|
+
(t.completed_at - t.started_at).total_seconds() * 1000
|
|
530
|
+
for t in completed_tasks
|
|
531
|
+
)
|
|
532
|
+
stats["avg_completion_time_ms"] = total_ms / len(completed_tasks)
|
|
533
|
+
|
|
534
|
+
return stats
|
|
535
|
+
|
|
536
|
+
async def create_swarm(
|
|
537
|
+
self,
|
|
538
|
+
swarm_id: str,
|
|
539
|
+
agent_ids: List[str]
|
|
540
|
+
) -> Optional[Any]:
|
|
541
|
+
"""
|
|
542
|
+
Create an agent swarm for collaborative tasks.
|
|
543
|
+
|
|
544
|
+
Args:
|
|
545
|
+
swarm_id: Unique swarm identifier
|
|
546
|
+
agent_ids: List of agent IDs to include in swarm
|
|
547
|
+
|
|
548
|
+
Returns:
|
|
549
|
+
AgentSwarm instance or None if pub-sub not enabled
|
|
550
|
+
"""
|
|
551
|
+
if not self.pubsub or not _PUBSUB_AVAILABLE or not AgentSwarm:
|
|
552
|
+
logger.warning("Pub-sub not available, cannot create swarm")
|
|
553
|
+
return None
|
|
554
|
+
|
|
555
|
+
# Validate all agents exist
|
|
556
|
+
for agent_id in agent_ids:
|
|
557
|
+
if agent_id not in self.agents:
|
|
558
|
+
raise ValueError(f"Agent {agent_id} not found")
|
|
559
|
+
|
|
560
|
+
swarm = AgentSwarm(swarm_id, self.pubsub, agent_ids)
|
|
561
|
+
self.swarms[swarm_id] = swarm
|
|
562
|
+
|
|
563
|
+
logger.info(f"Swarm {swarm_id} created with {len(agent_ids)} agents")
|
|
564
|
+
|
|
565
|
+
return swarm
|
|
566
|
+
|
|
567
|
+
async def resolve_agent_conflict(
|
|
568
|
+
self,
|
|
569
|
+
conflict_id: str,
|
|
570
|
+
conflict_type: str,
|
|
571
|
+
votes: List[Dict[str, Any]],
|
|
572
|
+
vote_type: Optional[str] = None
|
|
573
|
+
) -> Optional[Dict[str, Any]]:
|
|
574
|
+
"""
|
|
575
|
+
Resolve conflict between agents using voting.
|
|
576
|
+
|
|
577
|
+
Args:
|
|
578
|
+
conflict_id: Unique conflict identifier
|
|
579
|
+
conflict_type: Type of conflict (decision, interpretation, etc.)
|
|
580
|
+
votes: List of votes as dicts with agent_id, option, confidence
|
|
581
|
+
vote_type: Voting mechanism (majority, weighted, etc.)
|
|
582
|
+
|
|
583
|
+
Returns:
|
|
584
|
+
Resolution dict or None if conflict resolution not available
|
|
585
|
+
"""
|
|
586
|
+
if not self.conflict_resolver or not _CONFLICT_RESOLUTION_AVAILABLE or not AgentVote or not ConflictType:
|
|
587
|
+
logger.warning("Conflict resolution not available")
|
|
588
|
+
return None
|
|
589
|
+
|
|
590
|
+
# Convert dicts to AgentVote objects
|
|
591
|
+
vote_objects = [
|
|
592
|
+
AgentVote(
|
|
593
|
+
agent_id=v["agent_id"],
|
|
594
|
+
option=v["option"],
|
|
595
|
+
confidence=v.get("confidence", 1.0),
|
|
596
|
+
reasoning=v.get("reasoning")
|
|
597
|
+
)
|
|
598
|
+
for v in votes
|
|
599
|
+
]
|
|
600
|
+
|
|
601
|
+
# Convert strings to enums
|
|
602
|
+
conflict_type_enum = ConflictType(conflict_type)
|
|
603
|
+
vote_type_enum = VoteType(vote_type) if vote_type else None
|
|
604
|
+
|
|
605
|
+
resolution = await self.conflict_resolver.resolve_conflict(
|
|
606
|
+
conflict_id,
|
|
607
|
+
conflict_type_enum,
|
|
608
|
+
vote_objects,
|
|
609
|
+
vote_type_enum
|
|
610
|
+
)
|
|
611
|
+
|
|
612
|
+
return {
|
|
613
|
+
"conflict_id": resolution.conflict_id,
|
|
614
|
+
"winning_option": resolution.winning_option,
|
|
615
|
+
"consensus_score": resolution.consensus_score,
|
|
616
|
+
"total_votes": resolution.total_votes,
|
|
617
|
+
"votes_for_winner": resolution.votes_for_winner,
|
|
618
|
+
"dissenting_agents": resolution.dissenting_agents,
|
|
619
|
+
"escalated": resolution.escalated_to_supervisor
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
async def broadcast_to_swarm(
|
|
623
|
+
self,
|
|
624
|
+
swarm_id: str,
|
|
625
|
+
from_agent: str,
|
|
626
|
+
message: str,
|
|
627
|
+
payload: Optional[Dict[str, Any]] = None
|
|
628
|
+
) -> bool:
|
|
629
|
+
"""
|
|
630
|
+
Broadcast message to all agents in a swarm.
|
|
631
|
+
|
|
632
|
+
Args:
|
|
633
|
+
swarm_id: Swarm to broadcast to
|
|
634
|
+
from_agent: Sender agent ID
|
|
635
|
+
message: Message content
|
|
636
|
+
payload: Optional structured data
|
|
637
|
+
|
|
638
|
+
Returns:
|
|
639
|
+
True if successful, False otherwise
|
|
640
|
+
"""
|
|
641
|
+
if swarm_id not in self.swarms:
|
|
642
|
+
logger.warning(f"Swarm {swarm_id} not found")
|
|
643
|
+
return False
|
|
644
|
+
|
|
645
|
+
swarm = self.swarms[swarm_id]
|
|
646
|
+
await swarm.broadcast(from_agent, message, payload)
|
|
647
|
+
|
|
648
|
+
return True
|
|
649
|
+
|
|
650
|
+
async def request_swarm_consensus(
|
|
651
|
+
self,
|
|
652
|
+
swarm_id: str,
|
|
653
|
+
from_agent: str,
|
|
654
|
+
proposal: str,
|
|
655
|
+
context: Dict[str, Any],
|
|
656
|
+
required_votes: Optional[int] = None
|
|
657
|
+
) -> Optional[Dict[str, Any]]:
|
|
658
|
+
"""
|
|
659
|
+
Request consensus vote from swarm agents.
|
|
660
|
+
|
|
661
|
+
Args:
|
|
662
|
+
swarm_id: Swarm to request consensus from
|
|
663
|
+
from_agent: Agent making proposal
|
|
664
|
+
proposal: Decision to vote on
|
|
665
|
+
context: Context for decision
|
|
666
|
+
required_votes: Minimum votes needed
|
|
667
|
+
|
|
668
|
+
Returns:
|
|
669
|
+
Consensus result dict or None if swarm not found
|
|
670
|
+
"""
|
|
671
|
+
if swarm_id not in self.swarms:
|
|
672
|
+
logger.warning(f"Swarm {swarm_id} not found")
|
|
673
|
+
return None
|
|
674
|
+
|
|
675
|
+
swarm = self.swarms[swarm_id]
|
|
676
|
+
result = await swarm.request_consensus(
|
|
677
|
+
from_agent,
|
|
678
|
+
proposal,
|
|
679
|
+
context,
|
|
680
|
+
required_votes
|
|
681
|
+
)
|
|
682
|
+
|
|
683
|
+
return result
|
|
684
|
+
|
|
685
|
+
|
|
686
|
+
# Example usage pattern
|
|
687
|
+
async def example_orchestration():
|
|
688
|
+
"""
|
|
689
|
+
Example: Multi-department fraud detection workflow.
|
|
690
|
+
|
|
691
|
+
Demonstrates hierarchical coordination:
|
|
692
|
+
1. Supervisor receives alert
|
|
693
|
+
2. Analyst investigates transaction
|
|
694
|
+
3. Verifier confirms findings
|
|
695
|
+
4. Executor blocks account if fraud confirmed
|
|
696
|
+
"""
|
|
697
|
+
# Define agents
|
|
698
|
+
agents = [
|
|
699
|
+
AgentSpec(
|
|
700
|
+
agent_id="supervisor-001",
|
|
701
|
+
role=AgentRole.SUPERVISOR,
|
|
702
|
+
capabilities=["coordinate", "escalate"],
|
|
703
|
+
model="gpt-4o"
|
|
704
|
+
),
|
|
705
|
+
AgentSpec(
|
|
706
|
+
agent_id="fraud-analyst-001",
|
|
707
|
+
role=AgentRole.ANALYST,
|
|
708
|
+
capabilities=["analyze", "investigate", "fraud"],
|
|
709
|
+
model="gpt-4o"
|
|
710
|
+
),
|
|
711
|
+
AgentSpec(
|
|
712
|
+
agent_id="verifier-001",
|
|
713
|
+
role=AgentRole.VERIFIER,
|
|
714
|
+
capabilities=["verify", "validate", "confirm"],
|
|
715
|
+
model="gpt-4o"
|
|
716
|
+
),
|
|
717
|
+
AgentSpec(
|
|
718
|
+
agent_id="executor-001",
|
|
719
|
+
role=AgentRole.EXECUTOR,
|
|
720
|
+
capabilities=["block", "execute", "action"],
|
|
721
|
+
model="gpt-4o"
|
|
722
|
+
)
|
|
723
|
+
]
|
|
724
|
+
|
|
725
|
+
orchestrator = Orchestrator(agents)
|
|
726
|
+
|
|
727
|
+
# Register executor functions
|
|
728
|
+
async def analyst_executor(task: str, context: dict) -> dict:
|
|
729
|
+
# Mock: Would call actual LLM + tools here
|
|
730
|
+
return {"analysis": "Suspicious pattern detected", "confidence": 0.85}
|
|
731
|
+
|
|
732
|
+
async def verifier_executor(task: str, context: dict) -> dict:
|
|
733
|
+
return {"verified": True, "evidence": ["Multiple locations", "Unusual time"]}
|
|
734
|
+
|
|
735
|
+
async def executor_executor(task: str, context: dict) -> dict:
|
|
736
|
+
return {"action": "account_blocked", "timestamp": datetime.now().isoformat()}
|
|
737
|
+
|
|
738
|
+
orchestrator.register_executor("fraud-analyst-001", analyst_executor)
|
|
739
|
+
orchestrator.register_executor("verifier-001", verifier_executor)
|
|
740
|
+
orchestrator.register_executor("executor-001", executor_executor)
|
|
741
|
+
|
|
742
|
+
# Submit task
|
|
743
|
+
task_id = await orchestrator.submit_task(
|
|
744
|
+
"Analyze transaction T-12345 for fraud indicators",
|
|
745
|
+
context={"transaction_id": "T-12345"}
|
|
746
|
+
)
|
|
747
|
+
|
|
748
|
+
# Wait for completion
|
|
749
|
+
await asyncio.sleep(1)
|
|
750
|
+
|
|
751
|
+
# Check status
|
|
752
|
+
task = await orchestrator.get_task_status(task_id)
|
|
753
|
+
print(f"Task status: {task.status if task else 'Not found'}")
|
|
754
|
+
|
|
755
|
+
# Get stats
|
|
756
|
+
stats = orchestrator.get_orchestrator_stats()
|
|
757
|
+
print(f"Orchestrator stats: {stats}")
|
|
758
|
+
|
|
759
|
+
|
|
760
|
+
if __name__ == "__main__":
|
|
761
|
+
asyncio.run(example_orchestration())
|