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,313 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Semantic Analyzer - Advanced refusal detection beyond regex patterns.
|
|
3
|
+
|
|
4
|
+
This module provides semantic analysis of agent responses to detect
|
|
5
|
+
"refusal" vs "compliance" behavior using contextual understanding
|
|
6
|
+
rather than just pattern matching.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import logging
|
|
10
|
+
from typing import Optional, List
|
|
11
|
+
|
|
12
|
+
from .models import SemanticAnalysis
|
|
13
|
+
|
|
14
|
+
logger = logging.getLogger(__name__)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class SemanticAnalyzer:
|
|
18
|
+
"""
|
|
19
|
+
Analyzes agent responses semantically to detect refusal patterns.
|
|
20
|
+
|
|
21
|
+
Unlike regex-based detection, this analyzes the semantic meaning
|
|
22
|
+
to catch subtle forms of giving up like:
|
|
23
|
+
- "I'm afraid those records are elusive at the moment."
|
|
24
|
+
- "The information seems to be unavailable."
|
|
25
|
+
- "It appears there's nothing to show."
|
|
26
|
+
|
|
27
|
+
This is inspired by "Refusal Benchmarking" in AI safety research.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
def __init__(self):
|
|
31
|
+
"""Initialize the semantic analyzer."""
|
|
32
|
+
self.refusal_indicators = self._load_refusal_indicators()
|
|
33
|
+
self.compliance_indicators = self._load_compliance_indicators()
|
|
34
|
+
|
|
35
|
+
def _load_refusal_indicators(self) -> List[str]:
|
|
36
|
+
"""Load semantic indicators of refusal/giving up."""
|
|
37
|
+
return [
|
|
38
|
+
# Direct refusal phrases
|
|
39
|
+
"cannot", "can't", "unable", "impossible", "won't",
|
|
40
|
+
"don't have", "doesn't exist", "not available", "unavailable",
|
|
41
|
+
|
|
42
|
+
# Evasive/elusive language
|
|
43
|
+
"elusive", "appears to be", "seems to be", "might be",
|
|
44
|
+
"could be", "perhaps", "possibly", "unclear",
|
|
45
|
+
|
|
46
|
+
# Uncertainty/hedging
|
|
47
|
+
"I'm afraid", "unfortunately", "regrettably", "sadly",
|
|
48
|
+
"it seems", "it appears", "looks like",
|
|
49
|
+
|
|
50
|
+
# Empty/negative results
|
|
51
|
+
"no data", "no results", "no information", "nothing found",
|
|
52
|
+
"zero results", "empty", "none available",
|
|
53
|
+
|
|
54
|
+
# Insufficient effort indicators
|
|
55
|
+
"not sure", "uncertain", "don't know", "can't tell",
|
|
56
|
+
"hard to say", "difficult to determine"
|
|
57
|
+
]
|
|
58
|
+
|
|
59
|
+
def _load_compliance_indicators(self) -> List[str]:
|
|
60
|
+
"""Load semantic indicators of compliance/success."""
|
|
61
|
+
return [
|
|
62
|
+
# Action completion
|
|
63
|
+
"found", "discovered", "located", "identified", "retrieved",
|
|
64
|
+
"obtained", "extracted", "collected",
|
|
65
|
+
|
|
66
|
+
# Data presentation
|
|
67
|
+
"here is", "here are", "the results", "the data shows",
|
|
68
|
+
"according to", "based on", "from the",
|
|
69
|
+
|
|
70
|
+
# Quantity indicators
|
|
71
|
+
"total", "count", "number of", "records", "entries",
|
|
72
|
+
"items", "results show",
|
|
73
|
+
|
|
74
|
+
# Confidence indicators
|
|
75
|
+
"successfully", "confirmed", "verified", "validated"
|
|
76
|
+
]
|
|
77
|
+
|
|
78
|
+
def analyze(
|
|
79
|
+
self,
|
|
80
|
+
agent_response: str,
|
|
81
|
+
user_prompt: str,
|
|
82
|
+
tool_telemetry: Optional[List] = None
|
|
83
|
+
) -> SemanticAnalysis:
|
|
84
|
+
"""
|
|
85
|
+
Perform semantic analysis on agent response.
|
|
86
|
+
|
|
87
|
+
Args:
|
|
88
|
+
agent_response: The agent's response to analyze
|
|
89
|
+
user_prompt: The original user prompt for context
|
|
90
|
+
tool_telemetry: Optional tool execution telemetry
|
|
91
|
+
|
|
92
|
+
Returns:
|
|
93
|
+
SemanticAnalysis with classification and confidence
|
|
94
|
+
"""
|
|
95
|
+
response_lower = agent_response.lower()
|
|
96
|
+
prompt_lower = user_prompt.lower()
|
|
97
|
+
|
|
98
|
+
# Calculate refusal and compliance scores
|
|
99
|
+
refusal_score = self._calculate_refusal_score(response_lower)
|
|
100
|
+
compliance_score = self._calculate_compliance_score(response_lower)
|
|
101
|
+
|
|
102
|
+
# Check for tool execution context
|
|
103
|
+
tool_context_score = self._analyze_tool_context(tool_telemetry)
|
|
104
|
+
|
|
105
|
+
# Determine if this is a refusal
|
|
106
|
+
is_refusal = self._determine_refusal(
|
|
107
|
+
refusal_score,
|
|
108
|
+
compliance_score,
|
|
109
|
+
tool_context_score,
|
|
110
|
+
response_lower
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
# Calculate confidence based on multiple signals
|
|
114
|
+
confidence = self._calculate_confidence(
|
|
115
|
+
refusal_score,
|
|
116
|
+
compliance_score,
|
|
117
|
+
tool_context_score,
|
|
118
|
+
response_lower
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
# Determine semantic category
|
|
122
|
+
category = self._determine_category(
|
|
123
|
+
is_refusal,
|
|
124
|
+
refusal_score,
|
|
125
|
+
compliance_score
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
# Generate reasoning explanation
|
|
129
|
+
reasoning = self._generate_reasoning(
|
|
130
|
+
is_refusal,
|
|
131
|
+
refusal_score,
|
|
132
|
+
compliance_score,
|
|
133
|
+
tool_context_score,
|
|
134
|
+
response_lower
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
return SemanticAnalysis(
|
|
138
|
+
is_refusal=is_refusal,
|
|
139
|
+
refusal_confidence=confidence,
|
|
140
|
+
semantic_category=category,
|
|
141
|
+
reasoning=reasoning
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
def _calculate_refusal_score(self, response: str) -> float:
|
|
145
|
+
"""Calculate refusal score based on indicators present."""
|
|
146
|
+
matches = sum(1 for indicator in self.refusal_indicators if indicator in response)
|
|
147
|
+
# Normalize to 0-1 range
|
|
148
|
+
return min(matches / 3.0, 1.0) # 3+ matches = 1.0
|
|
149
|
+
|
|
150
|
+
def _calculate_compliance_score(self, response: str) -> float:
|
|
151
|
+
"""Calculate compliance score based on indicators present."""
|
|
152
|
+
matches = sum(1 for indicator in self.compliance_indicators if indicator in response)
|
|
153
|
+
# Normalize to 0-1 range
|
|
154
|
+
return min(matches / 3.0, 1.0) # 3+ matches = 1.0
|
|
155
|
+
|
|
156
|
+
def _analyze_tool_context(self, tool_telemetry: Optional[List]) -> float:
|
|
157
|
+
"""
|
|
158
|
+
Analyze tool execution context.
|
|
159
|
+
|
|
160
|
+
Returns a score indicating likelihood of laziness:
|
|
161
|
+
- 0.0: Tools called and returned data (not lazy)
|
|
162
|
+
- 0.5: Tools called but empty results (might be lazy)
|
|
163
|
+
- 1.0: Tools not called (likely lazy)
|
|
164
|
+
"""
|
|
165
|
+
if not tool_telemetry:
|
|
166
|
+
return 0.7 # No telemetry suggests possible laziness
|
|
167
|
+
|
|
168
|
+
from .models import ToolExecutionStatus
|
|
169
|
+
|
|
170
|
+
# Check if any tools were called
|
|
171
|
+
called_tools = [t for t in tool_telemetry if t.tool_status != ToolExecutionStatus.NOT_CALLED]
|
|
172
|
+
|
|
173
|
+
if not called_tools:
|
|
174
|
+
return 1.0 # No tools called - clear laziness
|
|
175
|
+
|
|
176
|
+
# Check if tools returned empty results
|
|
177
|
+
empty_results = [t for t in called_tools if t.tool_status == ToolExecutionStatus.EMPTY_RESULT]
|
|
178
|
+
|
|
179
|
+
if len(empty_results) == len(called_tools):
|
|
180
|
+
return 0.3 # All tools returned empty - likely legitimate
|
|
181
|
+
|
|
182
|
+
# Mix of results
|
|
183
|
+
return 0.5
|
|
184
|
+
|
|
185
|
+
def _determine_refusal(
|
|
186
|
+
self,
|
|
187
|
+
refusal_score: float,
|
|
188
|
+
compliance_score: float,
|
|
189
|
+
tool_context_score: float,
|
|
190
|
+
response: str
|
|
191
|
+
) -> bool:
|
|
192
|
+
"""
|
|
193
|
+
Determine if response indicates refusal.
|
|
194
|
+
|
|
195
|
+
Uses multiple signals to make decision:
|
|
196
|
+
- Refusal language
|
|
197
|
+
- Lack of compliance language
|
|
198
|
+
- Tool execution context
|
|
199
|
+
- Response length
|
|
200
|
+
"""
|
|
201
|
+
# Short responses with refusal language
|
|
202
|
+
if len(response) < 50 and refusal_score > 0.3:
|
|
203
|
+
return True
|
|
204
|
+
|
|
205
|
+
# High refusal score and low compliance
|
|
206
|
+
if refusal_score > 0.5 and compliance_score < 0.2:
|
|
207
|
+
return True
|
|
208
|
+
|
|
209
|
+
# High tool laziness (not called) + some refusal language
|
|
210
|
+
if tool_context_score > 0.7 and refusal_score > 0.2:
|
|
211
|
+
return True
|
|
212
|
+
|
|
213
|
+
# Moderate refusal with no compliance
|
|
214
|
+
if refusal_score > 0.3 and compliance_score == 0.0:
|
|
215
|
+
return True
|
|
216
|
+
|
|
217
|
+
return False
|
|
218
|
+
|
|
219
|
+
def _calculate_confidence(
|
|
220
|
+
self,
|
|
221
|
+
refusal_score: float,
|
|
222
|
+
compliance_score: float,
|
|
223
|
+
tool_context_score: float,
|
|
224
|
+
response: str
|
|
225
|
+
) -> float:
|
|
226
|
+
"""
|
|
227
|
+
Calculate confidence in the refusal detection.
|
|
228
|
+
|
|
229
|
+
Higher confidence when:
|
|
230
|
+
- Clear refusal indicators
|
|
231
|
+
- Clear tool context (called or not)
|
|
232
|
+
- Low ambiguity
|
|
233
|
+
"""
|
|
234
|
+
# Base confidence from score differences
|
|
235
|
+
score_diff = abs(refusal_score - compliance_score)
|
|
236
|
+
base_confidence = min(score_diff + 0.5, 1.0)
|
|
237
|
+
|
|
238
|
+
# Boost confidence if tool context is clear
|
|
239
|
+
if tool_context_score < 0.3 or tool_context_score > 0.7:
|
|
240
|
+
base_confidence = min(base_confidence + 0.1, 1.0)
|
|
241
|
+
|
|
242
|
+
# Reduce confidence for very short responses (ambiguous)
|
|
243
|
+
if len(response) < 20:
|
|
244
|
+
base_confidence *= 0.8
|
|
245
|
+
|
|
246
|
+
# Boost confidence for very clear patterns
|
|
247
|
+
if refusal_score > 0.7 or compliance_score > 0.7:
|
|
248
|
+
base_confidence = min(base_confidence + 0.15, 1.0)
|
|
249
|
+
|
|
250
|
+
return round(base_confidence, 2)
|
|
251
|
+
|
|
252
|
+
def _determine_category(
|
|
253
|
+
self,
|
|
254
|
+
is_refusal: bool,
|
|
255
|
+
refusal_score: float,
|
|
256
|
+
compliance_score: float
|
|
257
|
+
) -> str:
|
|
258
|
+
"""Determine semantic category of response."""
|
|
259
|
+
if is_refusal:
|
|
260
|
+
return "refusal"
|
|
261
|
+
|
|
262
|
+
if compliance_score > 0.5:
|
|
263
|
+
return "compliance"
|
|
264
|
+
|
|
265
|
+
if refusal_score > 0.2 and compliance_score > 0.2:
|
|
266
|
+
return "unclear"
|
|
267
|
+
|
|
268
|
+
return "error"
|
|
269
|
+
|
|
270
|
+
def _generate_reasoning(
|
|
271
|
+
self,
|
|
272
|
+
is_refusal: bool,
|
|
273
|
+
refusal_score: float,
|
|
274
|
+
compliance_score: float,
|
|
275
|
+
tool_context_score: float,
|
|
276
|
+
response: str
|
|
277
|
+
) -> str:
|
|
278
|
+
"""Generate human-readable reasoning for the classification."""
|
|
279
|
+
if is_refusal:
|
|
280
|
+
reasons = []
|
|
281
|
+
|
|
282
|
+
if refusal_score > 0.5:
|
|
283
|
+
reasons.append(f"Strong refusal language detected (score: {refusal_score:.2f})")
|
|
284
|
+
elif refusal_score > 0.3:
|
|
285
|
+
reasons.append(f"Moderate refusal indicators present (score: {refusal_score:.2f})")
|
|
286
|
+
|
|
287
|
+
if compliance_score < 0.2:
|
|
288
|
+
reasons.append(f"Low compliance indicators (score: {compliance_score:.2f})")
|
|
289
|
+
|
|
290
|
+
if tool_context_score > 0.7:
|
|
291
|
+
reasons.append("Tools not called or minimal usage")
|
|
292
|
+
elif tool_context_score > 0.4:
|
|
293
|
+
reasons.append("Tools returned empty results")
|
|
294
|
+
|
|
295
|
+
if len(response) < 50:
|
|
296
|
+
reasons.append("Response is brief, suggesting minimal effort")
|
|
297
|
+
|
|
298
|
+
return "Response indicates refusal/give-up: " + "; ".join(reasons)
|
|
299
|
+
else:
|
|
300
|
+
reasons = []
|
|
301
|
+
|
|
302
|
+
if compliance_score > 0.5:
|
|
303
|
+
reasons.append(f"Strong compliance indicators (score: {compliance_score:.2f})")
|
|
304
|
+
elif compliance_score > 0.2:
|
|
305
|
+
reasons.append(f"Some compliance indicators present (score: {compliance_score:.2f})")
|
|
306
|
+
|
|
307
|
+
if tool_context_score < 0.3:
|
|
308
|
+
reasons.append("Tools executed and returned data")
|
|
309
|
+
|
|
310
|
+
if refusal_score < 0.2:
|
|
311
|
+
reasons.append("Minimal refusal language")
|
|
312
|
+
|
|
313
|
+
return "Response indicates compliance/success: " + "; ".join(reasons)
|
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Semantic Purge - Scale by Subtraction for patch lifecycle management.
|
|
3
|
+
|
|
4
|
+
Implements the "Taxonomy of Lessons" to prevent context bloat:
|
|
5
|
+
- Type A (Syntax/Capability): High decay - likely model defects, purge on upgrade
|
|
6
|
+
- Type B (Business/Context): Zero decay - world truths, retain forever
|
|
7
|
+
|
|
8
|
+
This allows reducing context usage by 40-60% over the agent's lifetime.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
import logging
|
|
12
|
+
from typing import List, Dict, Optional
|
|
13
|
+
from datetime import datetime
|
|
14
|
+
|
|
15
|
+
from .models import (
|
|
16
|
+
CorrectionPatch, ClassifiedPatch, PatchDecayType,
|
|
17
|
+
CognitiveGlitch, CompletenessAudit
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
logger = logging.getLogger(__name__)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class PatchClassifier:
|
|
24
|
+
"""
|
|
25
|
+
Classifies patches into Type A (Syntax) vs Type B (Business).
|
|
26
|
+
|
|
27
|
+
This is the "Taxonomy of Lessons" that determines lifecycle.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
def __init__(self):
|
|
31
|
+
self.syntax_indicators = [
|
|
32
|
+
"output json", "format", "syntax", "parse", "validation error",
|
|
33
|
+
"type mismatch", "parameter type", "limit 10", "use uuid",
|
|
34
|
+
"tool definition", "schema injection", "parameter checking"
|
|
35
|
+
]
|
|
36
|
+
|
|
37
|
+
self.business_indicators = [
|
|
38
|
+
"fiscal year", "project", "entity", "business rule", "policy",
|
|
39
|
+
"archived", "deprecated", "does not exist", "negative constraint",
|
|
40
|
+
"company", "organization", "domain", "customer", "workflow"
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
def classify_patch(
|
|
44
|
+
self,
|
|
45
|
+
patch: CorrectionPatch,
|
|
46
|
+
current_model_version: str
|
|
47
|
+
) -> ClassifiedPatch:
|
|
48
|
+
"""
|
|
49
|
+
Classify a patch as Type A or Type B.
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
patch: The correction patch to classify
|
|
53
|
+
current_model_version: Current model version (e.g., "gpt-4o", "gpt-5")
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
ClassifiedPatch with decay type and metadata
|
|
57
|
+
"""
|
|
58
|
+
logger.info(f"Classifying patch {patch.patch_id}")
|
|
59
|
+
|
|
60
|
+
# Analyze patch content to determine type
|
|
61
|
+
decay_type = self._determine_decay_type(patch)
|
|
62
|
+
|
|
63
|
+
# Determine if should purge on upgrade
|
|
64
|
+
should_purge = (decay_type == PatchDecayType.SYNTAX_CAPABILITY)
|
|
65
|
+
|
|
66
|
+
# Build metadata
|
|
67
|
+
metadata = self._build_decay_metadata(patch, decay_type)
|
|
68
|
+
|
|
69
|
+
classified = ClassifiedPatch(
|
|
70
|
+
base_patch=patch,
|
|
71
|
+
decay_type=decay_type,
|
|
72
|
+
created_at_model_version=current_model_version,
|
|
73
|
+
decay_metadata=metadata,
|
|
74
|
+
should_purge_on_upgrade=should_purge
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
logger.info(f"Classified as {decay_type.value} (purge on upgrade: {should_purge})")
|
|
78
|
+
|
|
79
|
+
return classified
|
|
80
|
+
|
|
81
|
+
def _determine_decay_type(self, patch: CorrectionPatch) -> PatchDecayType:
|
|
82
|
+
"""
|
|
83
|
+
Determine if patch is Type A (Syntax) or Type B (Business).
|
|
84
|
+
|
|
85
|
+
Type A - Syntax/Capability (HIGH DECAY):
|
|
86
|
+
- Model-specific issues (JSON formatting, type errors)
|
|
87
|
+
- Tool usage errors (wrong parameter types)
|
|
88
|
+
- Syntax errors, validation issues
|
|
89
|
+
- Query construction problems
|
|
90
|
+
- These are likely fixed in newer model versions
|
|
91
|
+
|
|
92
|
+
Type B - Business/Context (ZERO DECAY):
|
|
93
|
+
- Company-specific rules ("Fiscal year starts in July")
|
|
94
|
+
- Entity existence ("Project_Alpha is deprecated")
|
|
95
|
+
- Policy violations (medical advice restrictions)
|
|
96
|
+
- Domain knowledge (archived locations, workflows)
|
|
97
|
+
- These are world truths that models can't learn
|
|
98
|
+
"""
|
|
99
|
+
# Check diagnosis first (most reliable indicator)
|
|
100
|
+
if patch.diagnosis:
|
|
101
|
+
glitch = patch.diagnosis.cognitive_glitch
|
|
102
|
+
|
|
103
|
+
# Tool misuse is almost always Type A (model capability issue)
|
|
104
|
+
if glitch == CognitiveGlitch.TOOL_MISUSE:
|
|
105
|
+
return PatchDecayType.SYNTAX_CAPABILITY
|
|
106
|
+
|
|
107
|
+
# Policy violations are Type B (business rules)
|
|
108
|
+
if glitch == CognitiveGlitch.POLICY_VIOLATION:
|
|
109
|
+
return PatchDecayType.BUSINESS_CONTEXT
|
|
110
|
+
|
|
111
|
+
# Hallucinations about entities are Type B (world knowledge)
|
|
112
|
+
if glitch == CognitiveGlitch.HALLUCINATION:
|
|
113
|
+
return PatchDecayType.BUSINESS_CONTEXT
|
|
114
|
+
|
|
115
|
+
# Schema mismatches depend on content
|
|
116
|
+
if glitch == CognitiveGlitch.SCHEMA_MISMATCH:
|
|
117
|
+
# Check if it's about company-specific schema
|
|
118
|
+
content_str = str(patch.patch_content).lower()
|
|
119
|
+
if any(indicator in content_str for indicator in self.business_indicators):
|
|
120
|
+
return PatchDecayType.BUSINESS_CONTEXT
|
|
121
|
+
return PatchDecayType.SYNTAX_CAPABILITY
|
|
122
|
+
|
|
123
|
+
# Analyze patch content
|
|
124
|
+
content_str = str(patch.patch_content).lower()
|
|
125
|
+
|
|
126
|
+
# Count indicators
|
|
127
|
+
syntax_score = sum(1 for ind in self.syntax_indicators if ind in content_str)
|
|
128
|
+
business_score = sum(1 for ind in self.business_indicators if ind in content_str)
|
|
129
|
+
|
|
130
|
+
# Check for specific patterns
|
|
131
|
+
if patch.patch_type == "system_prompt":
|
|
132
|
+
rule = patch.patch_content.get("rule", "")
|
|
133
|
+
rule_lower = rule.lower()
|
|
134
|
+
|
|
135
|
+
# Schema injection and parameter checking are Type A
|
|
136
|
+
if "schema injection" in rule_lower or "parameter type" in rule_lower:
|
|
137
|
+
return PatchDecayType.SYNTAX_CAPABILITY
|
|
138
|
+
|
|
139
|
+
# Constitutional rules about domains are Type B
|
|
140
|
+
if "constitutional" in rule_lower or "refuse" in rule_lower:
|
|
141
|
+
return PatchDecayType.BUSINESS_CONTEXT
|
|
142
|
+
|
|
143
|
+
# Entity-specific negative constraints are Type B
|
|
144
|
+
if "does not exist" in rule_lower or "deprecated" in rule_lower:
|
|
145
|
+
return PatchDecayType.BUSINESS_CONTEXT
|
|
146
|
+
|
|
147
|
+
# RAG memory patches are typically Type B (business context)
|
|
148
|
+
if patch.patch_type == "rag_memory":
|
|
149
|
+
negative_constraint = patch.patch_content.get("negative_constraint")
|
|
150
|
+
if negative_constraint:
|
|
151
|
+
return PatchDecayType.BUSINESS_CONTEXT
|
|
152
|
+
|
|
153
|
+
# Score-based classification
|
|
154
|
+
if business_score > syntax_score:
|
|
155
|
+
return PatchDecayType.BUSINESS_CONTEXT
|
|
156
|
+
elif syntax_score > 0:
|
|
157
|
+
return PatchDecayType.SYNTAX_CAPABILITY
|
|
158
|
+
|
|
159
|
+
# Default to business context (safer - won't accidentally purge important rules)
|
|
160
|
+
return PatchDecayType.BUSINESS_CONTEXT
|
|
161
|
+
|
|
162
|
+
def _build_decay_metadata(self, patch: CorrectionPatch, decay_type: PatchDecayType) -> Dict:
|
|
163
|
+
"""Build metadata for decay management."""
|
|
164
|
+
metadata = {
|
|
165
|
+
"classification_reason": self._get_classification_reason(patch, decay_type),
|
|
166
|
+
"estimated_lifetime": "until_upgrade" if decay_type == PatchDecayType.SYNTAX_CAPABILITY else "permanent",
|
|
167
|
+
"priority": "low" if decay_type == PatchDecayType.SYNTAX_CAPABILITY else "high"
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if decay_type == PatchDecayType.SYNTAX_CAPABILITY:
|
|
171
|
+
metadata["purge_trigger"] = "model_version_upgrade"
|
|
172
|
+
metadata["expected_fix_in"] = "next_model_generation"
|
|
173
|
+
else:
|
|
174
|
+
metadata["purge_trigger"] = "manual_review_only"
|
|
175
|
+
metadata["rag_storage_recommended"] = True
|
|
176
|
+
|
|
177
|
+
return metadata
|
|
178
|
+
|
|
179
|
+
def _get_classification_reason(self, patch: CorrectionPatch, decay_type: PatchDecayType) -> str:
|
|
180
|
+
"""Get human-readable reason for classification."""
|
|
181
|
+
if patch.diagnosis:
|
|
182
|
+
glitch = patch.diagnosis.cognitive_glitch.value
|
|
183
|
+
if decay_type == PatchDecayType.SYNTAX_CAPABILITY:
|
|
184
|
+
return f"Model capability issue ({glitch}) - likely fixed in upgraded models"
|
|
185
|
+
else:
|
|
186
|
+
return f"Domain/business knowledge ({glitch}) - requires permanent retention"
|
|
187
|
+
return "Content-based classification"
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
class SemanticPurge:
|
|
191
|
+
"""
|
|
192
|
+
Manages patch lifecycle and purging.
|
|
193
|
+
|
|
194
|
+
This is "Scale by Subtraction" - reducing context by purging temporary wisdom.
|
|
195
|
+
"""
|
|
196
|
+
|
|
197
|
+
def __init__(self):
|
|
198
|
+
self.classifier = PatchClassifier()
|
|
199
|
+
self.classified_patches: Dict[str, ClassifiedPatch] = {}
|
|
200
|
+
self.purge_history: List[Dict] = []
|
|
201
|
+
|
|
202
|
+
def register_patch(
|
|
203
|
+
self,
|
|
204
|
+
patch: CorrectionPatch,
|
|
205
|
+
current_model_version: str
|
|
206
|
+
) -> ClassifiedPatch:
|
|
207
|
+
"""
|
|
208
|
+
Register a patch with classification for lifecycle management.
|
|
209
|
+
|
|
210
|
+
Args:
|
|
211
|
+
patch: The correction patch
|
|
212
|
+
current_model_version: Current model version
|
|
213
|
+
|
|
214
|
+
Returns:
|
|
215
|
+
ClassifiedPatch with metadata
|
|
216
|
+
"""
|
|
217
|
+
classified = self.classifier.classify_patch(patch, current_model_version)
|
|
218
|
+
self.classified_patches[patch.patch_id] = classified
|
|
219
|
+
|
|
220
|
+
logger.info(f"Registered patch {patch.patch_id} as {classified.decay_type.value}")
|
|
221
|
+
|
|
222
|
+
return classified
|
|
223
|
+
|
|
224
|
+
def purge_on_upgrade(
|
|
225
|
+
self,
|
|
226
|
+
old_model_version: str,
|
|
227
|
+
new_model_version: str
|
|
228
|
+
) -> Dict[str, List[str]]:
|
|
229
|
+
"""
|
|
230
|
+
Purge Type A patches when model version upgrades.
|
|
231
|
+
|
|
232
|
+
This is the "Purge Event" - async purging to reclaim tokens.
|
|
233
|
+
|
|
234
|
+
Args:
|
|
235
|
+
old_model_version: Previous model version
|
|
236
|
+
new_model_version: New model version
|
|
237
|
+
|
|
238
|
+
Returns:
|
|
239
|
+
Dictionary with purged and retained patch IDs
|
|
240
|
+
"""
|
|
241
|
+
logger.info(f"🗑️ PURGE EVENT: Model upgrade {old_model_version} → {new_model_version}")
|
|
242
|
+
|
|
243
|
+
purged_patches = []
|
|
244
|
+
retained_patches = []
|
|
245
|
+
|
|
246
|
+
for patch_id, classified in self.classified_patches.items():
|
|
247
|
+
if classified.should_purge_on_upgrade:
|
|
248
|
+
# This is Type A (Syntax) - likely fixed in new model
|
|
249
|
+
purged_patches.append(patch_id)
|
|
250
|
+
logger.info(f" Purging Type A patch {patch_id}: {classified.decay_metadata.get('classification_reason', '')}")
|
|
251
|
+
else:
|
|
252
|
+
# This is Type B (Business) - retain forever
|
|
253
|
+
retained_patches.append(patch_id)
|
|
254
|
+
|
|
255
|
+
# Record purge event
|
|
256
|
+
purge_event = {
|
|
257
|
+
"timestamp": datetime.utcnow(),
|
|
258
|
+
"old_version": old_model_version,
|
|
259
|
+
"new_version": new_model_version,
|
|
260
|
+
"purged_count": len(purged_patches),
|
|
261
|
+
"retained_count": len(retained_patches),
|
|
262
|
+
"purged_patches": purged_patches,
|
|
263
|
+
"tokens_reclaimed": self._estimate_tokens_reclaimed(purged_patches)
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
self.purge_history.append(purge_event)
|
|
267
|
+
|
|
268
|
+
# Remove purged patches
|
|
269
|
+
for patch_id in purged_patches:
|
|
270
|
+
del self.classified_patches[patch_id]
|
|
271
|
+
|
|
272
|
+
logger.info(f"✓ Purged {len(purged_patches)} Type A patches")
|
|
273
|
+
logger.info(f"✓ Retained {len(retained_patches)} Type B patches")
|
|
274
|
+
logger.info(f"✓ Estimated tokens reclaimed: {purge_event['tokens_reclaimed']}")
|
|
275
|
+
|
|
276
|
+
return {
|
|
277
|
+
"purged": purged_patches,
|
|
278
|
+
"retained": retained_patches,
|
|
279
|
+
"stats": {
|
|
280
|
+
"purged_count": len(purged_patches),
|
|
281
|
+
"retained_count": len(retained_patches),
|
|
282
|
+
"tokens_reclaimed": purge_event["tokens_reclaimed"]
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
def _estimate_tokens_reclaimed(self, purged_patch_ids: List[str]) -> int:
|
|
287
|
+
"""
|
|
288
|
+
Estimate tokens reclaimed by purging patches.
|
|
289
|
+
|
|
290
|
+
Rough estimate: each patch uses 50-200 tokens depending on complexity.
|
|
291
|
+
"""
|
|
292
|
+
return len(purged_patch_ids) * 100 # Average 100 tokens per patch
|
|
293
|
+
|
|
294
|
+
def get_purge_stats(self) -> Dict:
|
|
295
|
+
"""Get statistics about purging activity."""
|
|
296
|
+
total_patches = len(self.classified_patches)
|
|
297
|
+
type_a_count = sum(1 for p in self.classified_patches.values()
|
|
298
|
+
if p.decay_type == PatchDecayType.SYNTAX_CAPABILITY)
|
|
299
|
+
type_b_count = sum(1 for p in self.classified_patches.values()
|
|
300
|
+
if p.decay_type == PatchDecayType.BUSINESS_CONTEXT)
|
|
301
|
+
|
|
302
|
+
total_purged = sum(event["purged_count"] for event in self.purge_history)
|
|
303
|
+
total_tokens_reclaimed = sum(event["tokens_reclaimed"] for event in self.purge_history)
|
|
304
|
+
|
|
305
|
+
return {
|
|
306
|
+
"current_patches": total_patches,
|
|
307
|
+
"type_a_syntax": type_a_count,
|
|
308
|
+
"type_b_business": type_b_count,
|
|
309
|
+
"purge_events": len(self.purge_history),
|
|
310
|
+
"total_purged": total_purged,
|
|
311
|
+
"total_tokens_reclaimed": total_tokens_reclaimed,
|
|
312
|
+
"estimated_savings": f"{(type_a_count / (total_patches or 1)) * 100:.1f}% can be purged on upgrade"
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
def get_purgeable_patches(self) -> List[ClassifiedPatch]:
|
|
316
|
+
"""Get list of patches that would be purged on upgrade."""
|
|
317
|
+
return [
|
|
318
|
+
p for p in self.classified_patches.values()
|
|
319
|
+
if p.should_purge_on_upgrade
|
|
320
|
+
]
|
|
321
|
+
|
|
322
|
+
def get_permanent_patches(self) -> List[ClassifiedPatch]:
|
|
323
|
+
"""Get list of permanent (Type B) patches."""
|
|
324
|
+
return [
|
|
325
|
+
p for p in self.classified_patches.values()
|
|
326
|
+
if not p.should_purge_on_upgrade
|
|
327
|
+
]
|
|
328
|
+
|
|
329
|
+
def register_completeness_audit(
|
|
330
|
+
self,
|
|
331
|
+
audit: CompletenessAudit,
|
|
332
|
+
current_model_version: str
|
|
333
|
+
):
|
|
334
|
+
"""
|
|
335
|
+
Register a competence patch from completeness audit.
|
|
336
|
+
|
|
337
|
+
Competence patches are always Type B (business context) because they
|
|
338
|
+
represent gaps in domain knowledge, not model defects.
|
|
339
|
+
"""
|
|
340
|
+
# Create a synthetic patch for the competence lesson
|
|
341
|
+
# In a real system, this would be integrated with the patcher
|
|
342
|
+
logger.info(f"Registering competence patch from audit {audit.audit_id}")
|
|
343
|
+
logger.info(f" Lesson: {audit.competence_patch[:80]}...")
|
|
344
|
+
|
|
345
|
+
# Competence patches are always Type B - domain knowledge
|
|
346
|
+
# These represent what the agent didn't know about the domain/business
|