agent_os_kernel 3.1.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_control_plane/__init__.py +662 -0
- agent_control_plane/a2a_adapter.py +543 -0
- agent_control_plane/adapter.py +417 -0
- agent_control_plane/agent_hibernation.py +394 -0
- agent_control_plane/agent_kernel.py +470 -0
- agent_control_plane/compliance.py +720 -0
- agent_control_plane/constraint_graphs.py +478 -0
- agent_control_plane/control_plane.py +854 -0
- agent_control_plane/example_executors.py +195 -0
- agent_control_plane/execution_engine.py +231 -0
- agent_control_plane/flight_recorder.py +846 -0
- agent_control_plane/governance_layer.py +435 -0
- agent_control_plane/hf_utils.py +563 -0
- agent_control_plane/interfaces/__init__.py +55 -0
- agent_control_plane/interfaces/kernel_interface.py +361 -0
- agent_control_plane/interfaces/plugin_interface.py +497 -0
- agent_control_plane/interfaces/protocol_interfaces.py +387 -0
- agent_control_plane/kernel_space.py +1009 -0
- agent_control_plane/langchain_adapter.py +424 -0
- agent_control_plane/lifecycle.py +3113 -0
- agent_control_plane/mcp_adapter.py +653 -0
- agent_control_plane/ml_safety.py +563 -0
- agent_control_plane/multimodal.py +727 -0
- agent_control_plane/mute_agent.py +422 -0
- agent_control_plane/observability.py +787 -0
- agent_control_plane/orchestrator.py +482 -0
- agent_control_plane/plugin_registry.py +750 -0
- agent_control_plane/policy_engine.py +954 -0
- agent_control_plane/process_isolation.py +777 -0
- agent_control_plane/shadow_mode.py +310 -0
- agent_control_plane/signals.py +493 -0
- agent_control_plane/supervisor_agents.py +430 -0
- agent_control_plane/time_travel_debugger.py +557 -0
- agent_control_plane/tool_registry.py +452 -0
- agent_control_plane/vfs.py +697 -0
- agent_kernel/__init__.py +69 -0
- agent_kernel/analyzer.py +435 -0
- agent_kernel/auditor.py +36 -0
- agent_kernel/completeness_auditor.py +237 -0
- agent_kernel/detector.py +203 -0
- agent_kernel/kernel.py +744 -0
- agent_kernel/memory_manager.py +85 -0
- agent_kernel/models.py +374 -0
- agent_kernel/nudge_mechanism.py +263 -0
- agent_kernel/outcome_analyzer.py +338 -0
- agent_kernel/patcher.py +582 -0
- agent_kernel/semantic_analyzer.py +316 -0
- agent_kernel/semantic_purge.py +349 -0
- agent_kernel/simulator.py +449 -0
- agent_kernel/teacher.py +85 -0
- agent_kernel/triage.py +152 -0
- agent_os/__init__.py +409 -0
- agent_os/_adversarial_impl.py +200 -0
- agent_os/_circuit_breaker_impl.py +232 -0
- agent_os/_mcp_metrics.py +193 -0
- agent_os/adversarial.py +20 -0
- agent_os/agents_compat.py +490 -0
- agent_os/audit_logger.py +135 -0
- agent_os/base_agent.py +651 -0
- agent_os/circuit_breaker.py +34 -0
- agent_os/cli/__init__.py +659 -0
- agent_os/cli/cmd_audit.py +128 -0
- agent_os/cli/cmd_init.py +152 -0
- agent_os/cli/cmd_policy.py +41 -0
- agent_os/cli/cmd_policy_gen.py +180 -0
- agent_os/cli/cmd_validate.py +258 -0
- agent_os/cli/mcp_scan.py +265 -0
- agent_os/cli/output.py +192 -0
- agent_os/cli/policy_checker.py +330 -0
- agent_os/compat.py +74 -0
- agent_os/constraint_graph.py +234 -0
- agent_os/content_governance.py +140 -0
- agent_os/context_budget.py +305 -0
- agent_os/credential_redactor.py +224 -0
- agent_os/diff_policy.py +89 -0
- agent_os/egress_policy.py +159 -0
- agent_os/escalation.py +276 -0
- agent_os/event_bus.py +124 -0
- agent_os/exceptions.py +180 -0
- agent_os/execution_context_policy.py +141 -0
- agent_os/github_enterprise.py +96 -0
- agent_os/health.py +20 -0
- agent_os/integrations/__init__.py +279 -0
- agent_os/integrations/a2a_adapter.py +279 -0
- agent_os/integrations/agent_lightning/__init__.py +30 -0
- agent_os/integrations/anthropic_adapter.py +420 -0
- agent_os/integrations/autogen_adapter.py +620 -0
- agent_os/integrations/base.py +1137 -0
- agent_os/integrations/compat.py +229 -0
- agent_os/integrations/config.py +98 -0
- agent_os/integrations/conversation_guardian.py +957 -0
- agent_os/integrations/crewai_adapter.py +467 -0
- agent_os/integrations/drift_detector.py +425 -0
- agent_os/integrations/dry_run.py +124 -0
- agent_os/integrations/escalation.py +582 -0
- agent_os/integrations/gemini_adapter.py +364 -0
- agent_os/integrations/google_adk_adapter.py +633 -0
- agent_os/integrations/guardrails_adapter.py +394 -0
- agent_os/integrations/health.py +197 -0
- agent_os/integrations/langchain_adapter.py +654 -0
- agent_os/integrations/llamafirewall.py +343 -0
- agent_os/integrations/llamaindex_adapter.py +188 -0
- agent_os/integrations/logging.py +191 -0
- agent_os/integrations/maf_adapter.py +631 -0
- agent_os/integrations/mistral_adapter.py +365 -0
- agent_os/integrations/openai_adapter.py +816 -0
- agent_os/integrations/openai_agents_sdk.py +406 -0
- agent_os/integrations/policy_compose.py +171 -0
- agent_os/integrations/profiling.py +144 -0
- agent_os/integrations/pydantic_ai_adapter.py +420 -0
- agent_os/integrations/rate_limiter.py +130 -0
- agent_os/integrations/rbac.py +143 -0
- agent_os/integrations/registry.py +113 -0
- agent_os/integrations/scope_guard.py +303 -0
- agent_os/integrations/semantic_kernel_adapter.py +769 -0
- agent_os/integrations/smolagents_adapter.py +629 -0
- agent_os/integrations/templates.py +178 -0
- agent_os/integrations/token_budget.py +134 -0
- agent_os/integrations/tool_aliases.py +190 -0
- agent_os/integrations/webhooks.py +177 -0
- agent_os/lite.py +208 -0
- agent_os/mcp_gateway.py +385 -0
- agent_os/mcp_message_signer.py +273 -0
- agent_os/mcp_protocols.py +161 -0
- agent_os/mcp_response_scanner.py +232 -0
- agent_os/mcp_security.py +924 -0
- agent_os/mcp_session_auth.py +231 -0
- agent_os/mcp_sliding_rate_limiter.py +184 -0
- agent_os/memory_guard.py +409 -0
- agent_os/metrics.py +134 -0
- agent_os/mute.py +428 -0
- agent_os/mute_agent.py +209 -0
- agent_os/policies/__init__.py +77 -0
- agent_os/policies/async_evaluator.py +275 -0
- agent_os/policies/backends.py +670 -0
- agent_os/policies/bridge.py +169 -0
- agent_os/policies/budget.py +85 -0
- agent_os/policies/cli.py +294 -0
- agent_os/policies/conflict_resolution.py +270 -0
- agent_os/policies/data_classification.py +252 -0
- agent_os/policies/evaluator.py +239 -0
- agent_os/policies/policy_schema.json +228 -0
- agent_os/policies/rate_limiting.py +145 -0
- agent_os/policies/schema.py +115 -0
- agent_os/policies/shared.py +331 -0
- agent_os/prompt_injection.py +694 -0
- agent_os/providers.py +182 -0
- agent_os/py.typed +0 -0
- agent_os/retry.py +81 -0
- agent_os/reversibility.py +251 -0
- agent_os/sandbox.py +432 -0
- agent_os/sandbox_provider.py +140 -0
- agent_os/secure_codegen.py +525 -0
- agent_os/security_skills.py +538 -0
- agent_os/semantic_policy.py +422 -0
- agent_os/server/__init__.py +15 -0
- agent_os/server/__main__.py +25 -0
- agent_os/server/app.py +277 -0
- agent_os/server/models.py +104 -0
- agent_os/shift_left_metrics.py +130 -0
- agent_os/stateless.py +742 -0
- agent_os/supervisor.py +148 -0
- agent_os/task_outcome.py +148 -0
- agent_os/transparency.py +181 -0
- agent_os/trust_root.py +128 -0
- agent_os_kernel-3.1.0.dist-info/METADATA +1269 -0
- agent_os_kernel-3.1.0.dist-info/RECORD +337 -0
- agent_os_kernel-3.1.0.dist-info/WHEEL +4 -0
- agent_os_kernel-3.1.0.dist-info/entry_points.txt +2 -0
- agent_os_kernel-3.1.0.dist-info/licenses/LICENSE +21 -0
- agent_os_observability/__init__.py +27 -0
- agent_os_observability/dashboards.py +898 -0
- agent_os_observability/metrics.py +398 -0
- agent_os_observability/server.py +223 -0
- agent_os_observability/tracer.py +232 -0
- agent_primitives/__init__.py +24 -0
- agent_primitives/failures.py +84 -0
- agent_primitives/py.typed +0 -0
- amb_core/__init__.py +177 -0
- amb_core/adapters/__init__.py +57 -0
- amb_core/adapters/aws_sqs_broker.py +376 -0
- amb_core/adapters/azure_servicebus_broker.py +340 -0
- amb_core/adapters/kafka_broker.py +260 -0
- amb_core/adapters/nats_broker.py +285 -0
- amb_core/adapters/rabbitmq_broker.py +235 -0
- amb_core/adapters/redis_broker.py +262 -0
- amb_core/broker.py +145 -0
- amb_core/bus.py +481 -0
- amb_core/cloudevents.py +509 -0
- amb_core/dlq.py +345 -0
- amb_core/hf_utils.py +536 -0
- amb_core/memory_broker.py +410 -0
- amb_core/models.py +141 -0
- amb_core/persistence.py +529 -0
- amb_core/schema.py +294 -0
- amb_core/tracing.py +358 -0
- atr/__init__.py +640 -0
- atr/access.py +348 -0
- atr/composition.py +645 -0
- atr/decorator.py +357 -0
- atr/executor.py +384 -0
- atr/health.py +557 -0
- atr/hf_utils.py +449 -0
- atr/injection.py +422 -0
- atr/metrics.py +440 -0
- atr/policies.py +403 -0
- atr/py.typed +2 -0
- atr/registry.py +452 -0
- atr/schema.py +480 -0
- atr/tools/safe/__init__.py +75 -0
- atr/tools/safe/calculator.py +467 -0
- atr/tools/safe/datetime_tool.py +443 -0
- atr/tools/safe/file_reader.py +402 -0
- atr/tools/safe/http_client.py +316 -0
- atr/tools/safe/json_parser.py +374 -0
- atr/tools/safe/text_tool.py +537 -0
- atr/tools/safe/toolkit.py +175 -0
- caas/__init__.py +162 -0
- caas/api/__init__.py +7 -0
- caas/api/server.py +1328 -0
- caas/caching.py +834 -0
- caas/cli.py +210 -0
- caas/conversation.py +223 -0
- caas/decay.py +72 -0
- caas/detection/__init__.py +9 -0
- caas/detection/detector.py +238 -0
- caas/enrichment.py +130 -0
- caas/gateway/__init__.py +27 -0
- caas/gateway/trust_gateway.py +474 -0
- caas/hf_utils.py +479 -0
- caas/ingestion/__init__.py +23 -0
- caas/ingestion/processors.py +253 -0
- caas/ingestion/structure_parser.py +188 -0
- caas/models.py +356 -0
- caas/pragmatic_truth.py +444 -0
- caas/routing/__init__.py +10 -0
- caas/routing/heuristic_router.py +58 -0
- caas/storage/__init__.py +9 -0
- caas/storage/store.py +389 -0
- caas/triad.py +213 -0
- caas/tuning/__init__.py +9 -0
- caas/tuning/tuner.py +329 -0
- caas/vfs/__init__.py +14 -0
- caas/vfs/filesystem.py +452 -0
- cmvk/__init__.py +218 -0
- cmvk/audit.py +402 -0
- cmvk/benchmarks.py +478 -0
- cmvk/constitutional.py +904 -0
- cmvk/hf_utils.py +301 -0
- cmvk/metrics.py +473 -0
- cmvk/profiles.py +300 -0
- cmvk/py.typed +0 -0
- cmvk/types.py +12 -0
- cmvk/verification.py +956 -0
- emk/__init__.py +89 -0
- emk/causal.py +352 -0
- emk/hf_utils.py +421 -0
- emk/indexer.py +83 -0
- emk/py.typed +0 -0
- emk/schema.py +204 -0
- emk/sleep_cycle.py +347 -0
- emk/store.py +281 -0
- iatp/__init__.py +166 -0
- iatp/attestation.py +461 -0
- iatp/cli.py +317 -0
- iatp/hf_utils.py +472 -0
- iatp/ipc_pipes.py +580 -0
- iatp/main.py +412 -0
- iatp/models/__init__.py +447 -0
- iatp/policy_engine.py +337 -0
- iatp/py.typed +2 -0
- iatp/recovery.py +321 -0
- iatp/security/__init__.py +270 -0
- iatp/sidecar/__init__.py +519 -0
- iatp/telemetry/__init__.py +164 -0
- iatp/tests/__init__.py +1 -0
- iatp/tests/test_attestation.py +370 -0
- iatp/tests/test_cli.py +131 -0
- iatp/tests/test_ed25519_attestation.py +211 -0
- iatp/tests/test_models.py +130 -0
- iatp/tests/test_policy_engine.py +347 -0
- iatp/tests/test_recovery.py +281 -0
- iatp/tests/test_security.py +222 -0
- iatp/tests/test_sidecar.py +167 -0
- iatp/tests/test_telemetry.py +175 -0
- mcp_kernel_server/__init__.py +28 -0
- mcp_kernel_server/cli.py +274 -0
- mcp_kernel_server/resources.py +217 -0
- mcp_kernel_server/server.py +564 -0
- mcp_kernel_server/tools.py +1174 -0
- mute_agent/__init__.py +68 -0
- mute_agent/core/__init__.py +1 -0
- mute_agent/core/execution_agent.py +166 -0
- mute_agent/core/handshake_protocol.py +201 -0
- mute_agent/core/reasoning_agent.py +238 -0
- mute_agent/knowledge_graph/__init__.py +1 -0
- mute_agent/knowledge_graph/graph_elements.py +65 -0
- mute_agent/knowledge_graph/multidimensional_graph.py +170 -0
- mute_agent/knowledge_graph/subgraph.py +224 -0
- mute_agent/listener/__init__.py +43 -0
- mute_agent/listener/adapters/__init__.py +31 -0
- mute_agent/listener/adapters/base_adapter.py +189 -0
- mute_agent/listener/adapters/caas_adapter.py +344 -0
- mute_agent/listener/adapters/control_plane_adapter.py +436 -0
- mute_agent/listener/adapters/iatp_adapter.py +332 -0
- mute_agent/listener/adapters/scak_adapter.py +251 -0
- mute_agent/listener/listener.py +610 -0
- mute_agent/listener/state_observer.py +436 -0
- mute_agent/listener/threshold_config.py +313 -0
- mute_agent/super_system/__init__.py +1 -0
- mute_agent/super_system/router.py +204 -0
- mute_agent/visualization/__init__.py +10 -0
- mute_agent/visualization/graph_debugger.py +502 -0
- nexus/README.md +60 -0
- nexus/__init__.py +51 -0
- nexus/arbiter.py +359 -0
- nexus/client.py +466 -0
- nexus/dmz.py +444 -0
- nexus/escrow.py +430 -0
- nexus/exceptions.py +286 -0
- nexus/pyproject.toml +36 -0
- nexus/registry.py +393 -0
- nexus/reputation.py +425 -0
- nexus/schemas/__init__.py +51 -0
- nexus/schemas/compliance.py +276 -0
- nexus/schemas/escrow.py +251 -0
- nexus/schemas/manifest.py +225 -0
- nexus/schemas/receipt.py +208 -0
- nexus/tests/__init__.py +0 -0
- nexus/tests/conftest.py +146 -0
- nexus/tests/test_arbiter.py +192 -0
- nexus/tests/test_dmz.py +194 -0
- nexus/tests/test_escrow.py +276 -0
- nexus/tests/test_exceptions.py +225 -0
- nexus/tests/test_registry.py +232 -0
- nexus/tests/test_reputation.py +328 -0
- nexus/tests/test_schemas.py +295 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Copyright (c) Microsoft Corporation.
|
|
2
|
+
# Licensed under the MIT License.
|
|
3
|
+
|
|
4
|
+
"""
|
|
5
|
+
Memory Manager - Simplified reference implementation for lesson lifecycle management.
|
|
6
|
+
|
|
7
|
+
This is a reference implementation showing the core concept of the "Semantic Purge" -
|
|
8
|
+
tagging lessons by type so syntax lessons can be deleted on model upgrades.
|
|
9
|
+
|
|
10
|
+
The production implementation is in semantic_purge.py, which includes sophisticated
|
|
11
|
+
classification algorithms and decay metadata tracking.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from enum import Enum
|
|
15
|
+
from datetime import datetime
|
|
16
|
+
from collections import Counter
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class LessonType(Enum):
|
|
20
|
+
SYNTAX = "syntax" # Expire on model upgrade (e.g. "Output JSON")
|
|
21
|
+
BUSINESS = "business" # Never expire (e.g. "Fiscal year starts Oct")
|
|
22
|
+
ONE_OFF = "one_off" # Delete immediately (Transient error)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class MemoryManager:
|
|
26
|
+
def __init__(self):
|
|
27
|
+
self.vector_store = [] # Simplified in-memory storage
|
|
28
|
+
|
|
29
|
+
def add_lesson(self, lesson_text, lesson_type: LessonType):
|
|
30
|
+
"""
|
|
31
|
+
Add a lesson with lifecycle metadata.
|
|
32
|
+
|
|
33
|
+
Args:
|
|
34
|
+
lesson_text: The lesson content
|
|
35
|
+
lesson_type: Type of lesson (SYNTAX, BUSINESS, or ONE_OFF)
|
|
36
|
+
"""
|
|
37
|
+
entry = {
|
|
38
|
+
"text": lesson_text,
|
|
39
|
+
"type": lesson_type,
|
|
40
|
+
"model_version": "gpt-4-0125",
|
|
41
|
+
"created_at": datetime.now()
|
|
42
|
+
}
|
|
43
|
+
self.vector_store.append(entry)
|
|
44
|
+
|
|
45
|
+
def run_upgrade_purge(self, new_model_version):
|
|
46
|
+
"""
|
|
47
|
+
Called when you switch from GPT-4 to GPT-5.
|
|
48
|
+
Deletes all 'SYNTAX' lessons.
|
|
49
|
+
|
|
50
|
+
Args:
|
|
51
|
+
new_model_version: The new model version
|
|
52
|
+
"""
|
|
53
|
+
# Filter out SYNTAX lessons
|
|
54
|
+
original_count = len(self.vector_store)
|
|
55
|
+
self.vector_store = [
|
|
56
|
+
entry for entry in self.vector_store
|
|
57
|
+
if entry["type"] != LessonType.SYNTAX
|
|
58
|
+
]
|
|
59
|
+
purged_count = original_count - len(self.vector_store)
|
|
60
|
+
|
|
61
|
+
return {
|
|
62
|
+
"purged_count": purged_count,
|
|
63
|
+
"retained_count": len(self.vector_store),
|
|
64
|
+
"new_model_version": new_model_version
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
def get_lessons_by_type(self, lesson_type: LessonType):
|
|
68
|
+
"""
|
|
69
|
+
Get all lessons of a specific type.
|
|
70
|
+
|
|
71
|
+
Args:
|
|
72
|
+
lesson_type: The type of lessons to retrieve
|
|
73
|
+
|
|
74
|
+
Returns:
|
|
75
|
+
list: Lessons matching the type
|
|
76
|
+
"""
|
|
77
|
+
return [
|
|
78
|
+
entry for entry in self.vector_store
|
|
79
|
+
if entry["type"] == lesson_type
|
|
80
|
+
]
|
|
81
|
+
|
|
82
|
+
def get_lesson_count(self):
|
|
83
|
+
"""Get count of lessons by type."""
|
|
84
|
+
type_counts = Counter(entry["type"] for entry in self.vector_store)
|
|
85
|
+
return dict(type_counts)
|
agent_kernel/models.py
ADDED
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
# Copyright (c) Microsoft Corporation.
|
|
2
|
+
# Licensed under the MIT License.
|
|
3
|
+
"""
|
|
4
|
+
Data models for the self-correcting agent kernel.
|
|
5
|
+
|
|
6
|
+
Note: Core failure primitives (FailureType, FailureSeverity, AgentFailure, FailureTrace)
|
|
7
|
+
are imported from agent-primitives (Layer 1) and re-exported here for backward compatibility.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from typing import Dict, List, Optional, Any
|
|
11
|
+
from datetime import datetime
|
|
12
|
+
from enum import Enum
|
|
13
|
+
from pydantic import BaseModel, Field, ConfigDict
|
|
14
|
+
|
|
15
|
+
# Import from agent-primitives (Layer 1) and re-export for backward compatibility
|
|
16
|
+
from agent_primitives import (
|
|
17
|
+
FailureType,
|
|
18
|
+
FailureSeverity,
|
|
19
|
+
FailureTrace,
|
|
20
|
+
AgentFailure,
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class CognitiveGlitch(str, Enum):
|
|
25
|
+
"""Types of cognitive glitches that can occur in agent reasoning."""
|
|
26
|
+
HALLUCINATION = "hallucination" # Agent invents facts not in context
|
|
27
|
+
LOGIC_ERROR = "logic_error" # Agent misunderstands instructions or makes faulty inferences
|
|
28
|
+
CONTEXT_GAP = "context_gap" # Agent lacks necessary information in prompt/schema
|
|
29
|
+
PERMISSION_ERROR = "permission_error" # Agent attempts unauthorized actions
|
|
30
|
+
SCHEMA_MISMATCH = "schema_mismatch" # Agent references non-existent tables/fields
|
|
31
|
+
TOOL_MISUSE = "tool_misuse" # Agent uses tool with wrong parameter types or values
|
|
32
|
+
POLICY_VIOLATION = "policy_violation" # Agent violates policy boundaries (e.g., medical advice)
|
|
33
|
+
NONE = "none" # No cognitive glitch detected
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
# Note: FailureTrace and AgentFailure are now imported from agent-primitives above
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class FailureAnalysis(BaseModel):
|
|
40
|
+
"""Analysis of an agent failure."""
|
|
41
|
+
|
|
42
|
+
failure: AgentFailure
|
|
43
|
+
root_cause: str = Field(..., description="Identified root cause")
|
|
44
|
+
contributing_factors: List[str] = Field(default_factory=list)
|
|
45
|
+
suggested_fixes: List[str] = Field(default_factory=list)
|
|
46
|
+
confidence_score: float = Field(..., ge=0.0, le=1.0, description="Confidence in analysis")
|
|
47
|
+
similar_failures: List[str] = Field(default_factory=list, description="IDs of similar past failures")
|
|
48
|
+
|
|
49
|
+
model_config = ConfigDict(
|
|
50
|
+
json_schema_extra={
|
|
51
|
+
"example": {
|
|
52
|
+
"root_cause": "Agent attempted unauthorized file access",
|
|
53
|
+
"contributing_factors": ["Missing permission check", "Inadequate input validation"],
|
|
54
|
+
"suggested_fixes": ["Add permission validation", "Implement safe file access patterns"],
|
|
55
|
+
"confidence_score": 0.85
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class DiagnosisJSON(BaseModel):
|
|
62
|
+
"""Structured diagnosis identifying cognitive glitches in agent reasoning."""
|
|
63
|
+
|
|
64
|
+
cognitive_glitch: CognitiveGlitch = Field(..., description="Primary cognitive glitch identified")
|
|
65
|
+
deep_problem: str = Field(..., description="Deep analysis of the problem")
|
|
66
|
+
evidence: List[str] = Field(default_factory=list, description="Evidence supporting diagnosis")
|
|
67
|
+
hint: str = Field(..., description="Hint to inject for counterfactual simulation")
|
|
68
|
+
expected_fix: str = Field(..., description="Expected outcome of applying the hint")
|
|
69
|
+
confidence: float = Field(..., ge=0.0, le=1.0, description="Confidence in diagnosis")
|
|
70
|
+
|
|
71
|
+
model_config = ConfigDict(
|
|
72
|
+
json_schema_extra={
|
|
73
|
+
"example": {
|
|
74
|
+
"cognitive_glitch": "hallucination",
|
|
75
|
+
"deep_problem": "Agent invented table name 'recent_users' that doesn't exist in schema",
|
|
76
|
+
"evidence": [
|
|
77
|
+
"Query references 'recent_users' table",
|
|
78
|
+
"Schema only contains 'users' table",
|
|
79
|
+
"No context provided about table names"
|
|
80
|
+
],
|
|
81
|
+
"hint": "Available tables: users, orders, products. Use 'users' table with date filter.",
|
|
82
|
+
"expected_fix": "Agent will query 'users' table with proper date filter",
|
|
83
|
+
"confidence": 0.92
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
class SimulationResult(BaseModel):
|
|
90
|
+
"""Result of simulating an alternative path."""
|
|
91
|
+
|
|
92
|
+
simulation_id: str
|
|
93
|
+
success: bool
|
|
94
|
+
alternative_path: List[Dict[str, Any]] = Field(description="Steps in the alternative path")
|
|
95
|
+
expected_outcome: str
|
|
96
|
+
risk_score: float = Field(..., ge=0.0, le=1.0, description="Risk of the alternative")
|
|
97
|
+
estimated_success_rate: float = Field(..., ge=0.0, le=1.0)
|
|
98
|
+
|
|
99
|
+
model_config = ConfigDict(
|
|
100
|
+
json_schema_extra={
|
|
101
|
+
"example": {
|
|
102
|
+
"simulation_id": "sim-456",
|
|
103
|
+
"success": True,
|
|
104
|
+
"alternative_path": [
|
|
105
|
+
{"action": "validate_permissions", "params": {}},
|
|
106
|
+
{"action": "safe_file_access", "params": {"file": "/tmp/safe.txt"}}
|
|
107
|
+
],
|
|
108
|
+
"expected_outcome": "Safe file operation completed",
|
|
109
|
+
"risk_score": 0.15,
|
|
110
|
+
"estimated_success_rate": 0.92
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
class ShadowAgentResult(BaseModel):
|
|
117
|
+
"""Result of running a shadow agent with counterfactual simulation."""
|
|
118
|
+
|
|
119
|
+
shadow_id: str
|
|
120
|
+
original_prompt: str = Field(..., description="Original user prompt")
|
|
121
|
+
injected_hint: str = Field(..., description="Hint injected into the prompt")
|
|
122
|
+
modified_prompt: str = Field(..., description="Full prompt with hint")
|
|
123
|
+
execution_success: bool = Field(..., description="Whether execution succeeded")
|
|
124
|
+
output: str = Field(..., description="Output from shadow agent")
|
|
125
|
+
reasoning_chain: List[str] = Field(default_factory=list, description="Shadow agent's reasoning")
|
|
126
|
+
action_taken: Optional[Dict[str, Any]] = Field(None, description="Action the shadow agent took")
|
|
127
|
+
verified: bool = Field(..., description="Whether the fix actually works")
|
|
128
|
+
|
|
129
|
+
model_config = ConfigDict(
|
|
130
|
+
json_schema_extra={
|
|
131
|
+
"example": {
|
|
132
|
+
"shadow_id": "shadow-789",
|
|
133
|
+
"original_prompt": "Delete recent user records",
|
|
134
|
+
"injected_hint": "Available tables: users. 'Recent' means created_at > 7 days ago",
|
|
135
|
+
"modified_prompt": "Delete recent user records. [HINT: Available tables: users. 'Recent' means created_at > 7 days ago]",
|
|
136
|
+
"execution_success": True,
|
|
137
|
+
"output": "Query executed successfully",
|
|
138
|
+
"reasoning_chain": ["Parse user request", "Check hint for table info", "Build safe query"],
|
|
139
|
+
"action_taken": {"action": "execute_sql", "query": "DELETE FROM users WHERE created_at > NOW() - INTERVAL 7 DAY"},
|
|
140
|
+
"verified": True
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
class CorrectionPatch(BaseModel):
|
|
147
|
+
"""A patch to correct an agent's behavior."""
|
|
148
|
+
|
|
149
|
+
patch_id: str
|
|
150
|
+
agent_id: str
|
|
151
|
+
failure_analysis: FailureAnalysis
|
|
152
|
+
simulation_result: SimulationResult
|
|
153
|
+
patch_type: str = Field(..., description="Type of patch (code, config, rule)")
|
|
154
|
+
patch_content: Dict[str, Any] = Field(..., description="The actual patch content")
|
|
155
|
+
applied: bool = Field(default=False)
|
|
156
|
+
applied_at: Optional[datetime] = None
|
|
157
|
+
rollback_available: bool = Field(default=True)
|
|
158
|
+
diagnosis: Optional["DiagnosisJSON"] = Field(None, description="Cognitive diagnosis if available")
|
|
159
|
+
shadow_result: Optional[ShadowAgentResult] = Field(None, description="Shadow agent verification result")
|
|
160
|
+
|
|
161
|
+
model_config = ConfigDict(
|
|
162
|
+
json_schema_extra={
|
|
163
|
+
"example": {
|
|
164
|
+
"patch_id": "patch-789",
|
|
165
|
+
"agent_id": "agent-123",
|
|
166
|
+
"patch_type": "code",
|
|
167
|
+
"patch_content": {
|
|
168
|
+
"module": "file_handler",
|
|
169
|
+
"changes": [
|
|
170
|
+
{"type": "add_validation", "code": "if not has_permission(file): return"}
|
|
171
|
+
]
|
|
172
|
+
},
|
|
173
|
+
"applied": True
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
class PatchStrategy(str, Enum):
|
|
180
|
+
"""Strategy for applying patches."""
|
|
181
|
+
SYSTEM_PROMPT = "system_prompt" # Easy fix: Update system prompt
|
|
182
|
+
RAG_MEMORY = "rag_memory" # Hard fix: Inject into vector store
|
|
183
|
+
CODE_CHANGE = "code_change" # Direct code modification
|
|
184
|
+
CONFIG_UPDATE = "config_update" # Configuration change
|
|
185
|
+
RULE_UPDATE = "rule_update" # Policy/rule update
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
class AgentState(BaseModel):
|
|
189
|
+
"""Current state of an agent."""
|
|
190
|
+
|
|
191
|
+
agent_id: str
|
|
192
|
+
status: str = Field(..., description="Current status (running, failed, patched, etc.)")
|
|
193
|
+
last_failure: Optional[AgentFailure] = None
|
|
194
|
+
patches_applied: List[str] = Field(default_factory=list, description="List of patch IDs")
|
|
195
|
+
success_rate: float = Field(default=1.0, ge=0.0, le=1.0)
|
|
196
|
+
total_runs: int = Field(default=0)
|
|
197
|
+
failed_runs: int = Field(default=0)
|
|
198
|
+
model_version: str = Field(default="gpt-4o", description="Current model version")
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
class GiveUpSignal(str, Enum):
|
|
202
|
+
"""Types of give-up signals indicating agent laziness."""
|
|
203
|
+
NO_DATA_FOUND = "no_data_found"
|
|
204
|
+
CANNOT_ANSWER = "cannot_answer"
|
|
205
|
+
NO_RESULTS = "no_results"
|
|
206
|
+
NOT_AVAILABLE = "not_available"
|
|
207
|
+
INSUFFICIENT_INFO = "insufficient_info"
|
|
208
|
+
UNKNOWN = "unknown"
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
class PatchDecayType(str, Enum):
|
|
212
|
+
"""Classification of patch based on decay characteristics."""
|
|
213
|
+
SYNTAX_CAPABILITY = "syntax_capability" # Type A: High decay - likely model defects
|
|
214
|
+
BUSINESS_CONTEXT = "business_context" # Type B: Zero decay - world truths
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
class ToolExecutionStatus(str, Enum):
|
|
218
|
+
"""Status of tool execution."""
|
|
219
|
+
SUCCESS = "success"
|
|
220
|
+
ERROR = "error"
|
|
221
|
+
EMPTY_RESULT = "empty_result"
|
|
222
|
+
NOT_CALLED = "not_called"
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
class OutcomeType(str, Enum):
|
|
226
|
+
"""Types of agent outcomes."""
|
|
227
|
+
SUCCESS = "success"
|
|
228
|
+
GIVE_UP = "give_up" # Negative result - triggers Completeness Auditor
|
|
229
|
+
FAILURE = "failure"
|
|
230
|
+
BLOCKED = "blocked"
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
class ToolExecutionTelemetry(BaseModel):
|
|
234
|
+
"""Telemetry data for tool executions during agent interaction."""
|
|
235
|
+
|
|
236
|
+
tool_name: str = Field(..., description="Name of the tool that was called")
|
|
237
|
+
tool_status: ToolExecutionStatus = Field(..., description="Execution status of the tool")
|
|
238
|
+
tool_result: Any = Field(None, description="Result returned by the tool")
|
|
239
|
+
execution_time_ms: Optional[float] = Field(None, description="Execution time in milliseconds")
|
|
240
|
+
error_message: Optional[str] = Field(None, description="Error message if tool failed")
|
|
241
|
+
|
|
242
|
+
model_config = ConfigDict(
|
|
243
|
+
json_schema_extra={
|
|
244
|
+
"example": {
|
|
245
|
+
"tool_name": "search_logs",
|
|
246
|
+
"tool_status": "empty_result",
|
|
247
|
+
"tool_result": [],
|
|
248
|
+
"execution_time_ms": 150.5
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
)
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
class SemanticAnalysis(BaseModel):
|
|
255
|
+
"""Semantic analysis of agent response for refusal detection."""
|
|
256
|
+
|
|
257
|
+
is_refusal: bool = Field(..., description="Whether response indicates refusal/give-up")
|
|
258
|
+
refusal_confidence: float = Field(..., ge=0.0, le=1.0, description="Confidence in refusal detection")
|
|
259
|
+
semantic_category: str = Field(..., description="Category: 'compliance', 'refusal', 'error', 'unclear'")
|
|
260
|
+
reasoning: str = Field(..., description="Explanation of the classification")
|
|
261
|
+
|
|
262
|
+
model_config = ConfigDict(
|
|
263
|
+
json_schema_extra={
|
|
264
|
+
"example": {
|
|
265
|
+
"is_refusal": True,
|
|
266
|
+
"refusal_confidence": 0.85,
|
|
267
|
+
"semantic_category": "refusal",
|
|
268
|
+
"reasoning": "Response indicates inability to find data without attempting comprehensive search"
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
)
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
class NudgeResult(BaseModel):
|
|
275
|
+
"""Result of nudging agent after give-up detection."""
|
|
276
|
+
|
|
277
|
+
nudge_id: str
|
|
278
|
+
original_outcome: "AgentOutcome"
|
|
279
|
+
nudge_prompt: str = Field(..., description="The nudge prompt that was injected")
|
|
280
|
+
retry_response: str = Field(..., description="Agent's response after nudge")
|
|
281
|
+
retry_successful: bool = Field(..., description="Whether nudge resolved the issue")
|
|
282
|
+
improvement_detected: bool = Field(..., description="Whether response improved after nudge")
|
|
283
|
+
|
|
284
|
+
model_config = ConfigDict(
|
|
285
|
+
json_schema_extra={
|
|
286
|
+
"example": {
|
|
287
|
+
"nudge_id": "nudge-123",
|
|
288
|
+
"nudge_prompt": "You claimed no data was found. Please confirm you executed the search tool with correct parameters and checked all data sources.",
|
|
289
|
+
"retry_response": "After checking all sources, found 15 log entries in archived partition.",
|
|
290
|
+
"retry_successful": True,
|
|
291
|
+
"improvement_detected": True
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
)
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
class AgentOutcome(BaseModel):
|
|
298
|
+
"""Result of an agent execution."""
|
|
299
|
+
|
|
300
|
+
agent_id: str
|
|
301
|
+
outcome_type: OutcomeType
|
|
302
|
+
timestamp: datetime = Field(default_factory=datetime.utcnow)
|
|
303
|
+
user_prompt: str
|
|
304
|
+
agent_response: str
|
|
305
|
+
give_up_signal: Optional[GiveUpSignal] = None
|
|
306
|
+
context: Dict[str, Any] = Field(default_factory=dict)
|
|
307
|
+
tool_telemetry: List[ToolExecutionTelemetry] = Field(
|
|
308
|
+
default_factory=list,
|
|
309
|
+
description="Telemetry data for tools called during execution"
|
|
310
|
+
)
|
|
311
|
+
semantic_analysis: Optional[SemanticAnalysis] = Field(
|
|
312
|
+
None,
|
|
313
|
+
description="Semantic analysis of the response"
|
|
314
|
+
)
|
|
315
|
+
|
|
316
|
+
model_config = ConfigDict(
|
|
317
|
+
json_schema_extra={
|
|
318
|
+
"example": {
|
|
319
|
+
"agent_id": "agent-123",
|
|
320
|
+
"outcome_type": "give_up",
|
|
321
|
+
"user_prompt": "Find logs for error 500",
|
|
322
|
+
"agent_response": "No logs found for error 500.",
|
|
323
|
+
"give_up_signal": "no_data_found"
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
)
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
class CompletenessAudit(BaseModel):
|
|
330
|
+
"""Result of completeness auditing by teacher model."""
|
|
331
|
+
|
|
332
|
+
audit_id: str
|
|
333
|
+
agent_outcome: AgentOutcome
|
|
334
|
+
teacher_model: str = Field(default="o1-preview", description="High-reasoning teacher model")
|
|
335
|
+
teacher_response: str
|
|
336
|
+
teacher_found_data: bool
|
|
337
|
+
gap_analysis: str = Field(..., description="What the agent missed")
|
|
338
|
+
competence_patch: str = Field(..., description="Lesson to prevent future laziness")
|
|
339
|
+
confidence: float = Field(..., ge=0.0, le=1.0)
|
|
340
|
+
timestamp: datetime = Field(default_factory=datetime.utcnow)
|
|
341
|
+
|
|
342
|
+
model_config = ConfigDict(
|
|
343
|
+
json_schema_extra={
|
|
344
|
+
"example": {
|
|
345
|
+
"audit_id": "audit-123",
|
|
346
|
+
"teacher_model": "o1-preview",
|
|
347
|
+
"teacher_response": "Found logs in archived partition",
|
|
348
|
+
"teacher_found_data": True,
|
|
349
|
+
"gap_analysis": "Agent didn't check archived partitions",
|
|
350
|
+
"competence_patch": "When searching logs, always check archived partitions if recent logs are empty",
|
|
351
|
+
"confidence": 0.92
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
)
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
class ClassifiedPatch(BaseModel):
|
|
358
|
+
"""A patch with classification metadata for lifecycle management."""
|
|
359
|
+
|
|
360
|
+
base_patch: CorrectionPatch
|
|
361
|
+
decay_type: PatchDecayType
|
|
362
|
+
created_at_model_version: str = Field(..., description="Model version when patch was created")
|
|
363
|
+
decay_metadata: Dict[str, Any] = Field(default_factory=dict)
|
|
364
|
+
should_purge_on_upgrade: bool = Field(default=False)
|
|
365
|
+
|
|
366
|
+
model_config = ConfigDict(
|
|
367
|
+
json_schema_extra={
|
|
368
|
+
"example": {
|
|
369
|
+
"decay_type": "syntax_capability",
|
|
370
|
+
"created_at_model_version": "gpt-4o",
|
|
371
|
+
"should_purge_on_upgrade": True
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
)
|