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
iatp/hf_utils.py
ADDED
|
@@ -0,0 +1,472 @@
|
|
|
1
|
+
# Copyright (c) Microsoft Corporation.
|
|
2
|
+
# Licensed under the MIT License.
|
|
3
|
+
|
|
4
|
+
"""
|
|
5
|
+
Hugging Face Hub Integration Utilities for IATP.
|
|
6
|
+
|
|
7
|
+
This module provides utilities for uploading and downloading IATP experiment
|
|
8
|
+
results, datasets, and model artifacts to/from the Hugging Face Hub.
|
|
9
|
+
|
|
10
|
+
Usage:
|
|
11
|
+
from iatp.hf_utils import IATPHubClient
|
|
12
|
+
|
|
13
|
+
client = IATPHubClient()
|
|
14
|
+
client.upload_experiment_logs("experiments/results.json")
|
|
15
|
+
client.download_benchmark_dataset()
|
|
16
|
+
|
|
17
|
+
Requirements:
|
|
18
|
+
pip install inter-agent-trust-protocol[hf]
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
from __future__ import annotations
|
|
22
|
+
|
|
23
|
+
import os
|
|
24
|
+
from datetime import datetime, timezone
|
|
25
|
+
from pathlib import Path
|
|
26
|
+
from typing import Any
|
|
27
|
+
|
|
28
|
+
try:
|
|
29
|
+
from huggingface_hub import (
|
|
30
|
+
DatasetCard,
|
|
31
|
+
DatasetCardData,
|
|
32
|
+
HfApi,
|
|
33
|
+
HfFolder,
|
|
34
|
+
Repository,
|
|
35
|
+
create_repo,
|
|
36
|
+
hf_hub_download,
|
|
37
|
+
upload_file,
|
|
38
|
+
upload_folder,
|
|
39
|
+
)
|
|
40
|
+
HF_AVAILABLE = True
|
|
41
|
+
except ImportError:
|
|
42
|
+
HF_AVAILABLE = False
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
__all__ = [
|
|
46
|
+
"IATPHubClient",
|
|
47
|
+
"upload_experiment_logs",
|
|
48
|
+
"download_benchmark_dataset",
|
|
49
|
+
"create_iatp_dataset_card",
|
|
50
|
+
]
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
# =============================================================================
|
|
54
|
+
# Constants
|
|
55
|
+
# =============================================================================
|
|
56
|
+
|
|
57
|
+
DEFAULT_REPO_ID = "microsoft/iatp-experiments"
|
|
58
|
+
DEFAULT_DATASET_REPO = "microsoft/iatp-benchmark"
|
|
59
|
+
IATP_VERSION = "0.3.1"
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
# =============================================================================
|
|
63
|
+
# Hub Client
|
|
64
|
+
# =============================================================================
|
|
65
|
+
|
|
66
|
+
class IATPHubClient:
|
|
67
|
+
"""
|
|
68
|
+
Client for interacting with Hugging Face Hub for IATP artifacts.
|
|
69
|
+
|
|
70
|
+
This client provides methods to:
|
|
71
|
+
- Upload experiment results and logs
|
|
72
|
+
- Download benchmark datasets
|
|
73
|
+
- Manage IATP model/dataset repositories
|
|
74
|
+
|
|
75
|
+
Attributes:
|
|
76
|
+
repo_id: The Hugging Face repository ID (e.g., "username/repo-name")
|
|
77
|
+
token: HF API token (uses cached token if not provided)
|
|
78
|
+
|
|
79
|
+
Example:
|
|
80
|
+
>>> client = IATPHubClient(repo_id="microsoft/iatp-experiments")
|
|
81
|
+
>>> client.upload_experiment_logs("experiments/results.json")
|
|
82
|
+
>>> dataset = client.download_benchmark_dataset()
|
|
83
|
+
"""
|
|
84
|
+
|
|
85
|
+
def __init__(
|
|
86
|
+
self,
|
|
87
|
+
repo_id: str = DEFAULT_REPO_ID,
|
|
88
|
+
token: str | None = None,
|
|
89
|
+
repo_type: str = "dataset",
|
|
90
|
+
) -> None:
|
|
91
|
+
"""
|
|
92
|
+
Initialize the Hugging Face Hub client.
|
|
93
|
+
|
|
94
|
+
Args:
|
|
95
|
+
repo_id: The repository ID on Hugging Face Hub
|
|
96
|
+
token: HF API token. If None, uses cached token from `huggingface-cli login`
|
|
97
|
+
repo_type: Type of repository ("dataset", "model", or "space")
|
|
98
|
+
|
|
99
|
+
Raises:
|
|
100
|
+
ImportError: If huggingface_hub is not installed
|
|
101
|
+
"""
|
|
102
|
+
if not HF_AVAILABLE:
|
|
103
|
+
raise ImportError(
|
|
104
|
+
"huggingface_hub is required for HF integration. "
|
|
105
|
+
"Install with: pip install inter-agent-trust-protocol[hf]"
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
self.repo_id = repo_id
|
|
109
|
+
self.token = token or os.getenv("HF_TOKEN") or HfFolder.get_token()
|
|
110
|
+
self.repo_type = repo_type
|
|
111
|
+
self.api = HfApi(token=self.token)
|
|
112
|
+
|
|
113
|
+
def upload_experiment_logs(
|
|
114
|
+
self,
|
|
115
|
+
file_path: str | Path,
|
|
116
|
+
path_in_repo: str | None = None,
|
|
117
|
+
commit_message: str | None = None,
|
|
118
|
+
create_if_missing: bool = True,
|
|
119
|
+
) -> str:
|
|
120
|
+
"""
|
|
121
|
+
Upload experiment results to Hugging Face Hub.
|
|
122
|
+
|
|
123
|
+
Args:
|
|
124
|
+
file_path: Local path to the experiment results file (JSON/JSONL)
|
|
125
|
+
path_in_repo: Path within the repository. If None, uses filename with timestamp
|
|
126
|
+
commit_message: Git commit message
|
|
127
|
+
create_if_missing: Create the repository if it doesn't exist
|
|
128
|
+
|
|
129
|
+
Returns:
|
|
130
|
+
URL of the uploaded file
|
|
131
|
+
|
|
132
|
+
Raises:
|
|
133
|
+
FileNotFoundError: If the file doesn't exist
|
|
134
|
+
ValueError: If the file format is not supported
|
|
135
|
+
|
|
136
|
+
Example:
|
|
137
|
+
>>> client.upload_experiment_logs(
|
|
138
|
+
... "experiments/results.json",
|
|
139
|
+
... commit_message="Add cascading failure experiment results"
|
|
140
|
+
... )
|
|
141
|
+
"""
|
|
142
|
+
file_path = Path(file_path)
|
|
143
|
+
|
|
144
|
+
if not file_path.exists():
|
|
145
|
+
raise FileNotFoundError(f"File not found: {file_path}")
|
|
146
|
+
|
|
147
|
+
if file_path.suffix not in [".json", ".jsonl", ".csv", ".parquet"]:
|
|
148
|
+
raise ValueError(
|
|
149
|
+
f"Unsupported file format: {file_path.suffix}. "
|
|
150
|
+
"Supported: .json, .jsonl, .csv, .parquet"
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
# Generate path in repo if not provided
|
|
154
|
+
if path_in_repo is None:
|
|
155
|
+
timestamp = datetime.now(timezone.utc).strftime("%Y%m%d_%H%M%S")
|
|
156
|
+
path_in_repo = f"experiments/{timestamp}_{file_path.name}"
|
|
157
|
+
|
|
158
|
+
# Create repo if needed
|
|
159
|
+
if create_if_missing:
|
|
160
|
+
try:
|
|
161
|
+
create_repo(
|
|
162
|
+
repo_id=self.repo_id,
|
|
163
|
+
repo_type=self.repo_type,
|
|
164
|
+
exist_ok=True,
|
|
165
|
+
token=self.token,
|
|
166
|
+
)
|
|
167
|
+
except Exception:
|
|
168
|
+
pass # Repo already exists
|
|
169
|
+
|
|
170
|
+
# Generate commit message
|
|
171
|
+
if commit_message is None:
|
|
172
|
+
commit_message = f"Upload experiment results: {file_path.name}"
|
|
173
|
+
|
|
174
|
+
# Upload the file
|
|
175
|
+
url = upload_file(
|
|
176
|
+
path_or_fileobj=str(file_path),
|
|
177
|
+
path_in_repo=path_in_repo,
|
|
178
|
+
repo_id=self.repo_id,
|
|
179
|
+
repo_type=self.repo_type,
|
|
180
|
+
commit_message=commit_message,
|
|
181
|
+
token=self.token,
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
return url
|
|
185
|
+
|
|
186
|
+
def upload_experiment_folder(
|
|
187
|
+
self,
|
|
188
|
+
folder_path: str | Path,
|
|
189
|
+
path_in_repo: str = "experiments",
|
|
190
|
+
commit_message: str | None = None,
|
|
191
|
+
) -> str:
|
|
192
|
+
"""
|
|
193
|
+
Upload an entire experiments folder to Hugging Face Hub.
|
|
194
|
+
|
|
195
|
+
Args:
|
|
196
|
+
folder_path: Local path to the experiments folder
|
|
197
|
+
path_in_repo: Path within the repository
|
|
198
|
+
commit_message: Git commit message
|
|
199
|
+
|
|
200
|
+
Returns:
|
|
201
|
+
URL of the repository
|
|
202
|
+
"""
|
|
203
|
+
folder_path = Path(folder_path)
|
|
204
|
+
|
|
205
|
+
if not folder_path.is_dir():
|
|
206
|
+
raise NotADirectoryError(f"Not a directory: {folder_path}")
|
|
207
|
+
|
|
208
|
+
if commit_message is None:
|
|
209
|
+
commit_message = f"Upload experiments folder: {folder_path.name}"
|
|
210
|
+
|
|
211
|
+
url = upload_folder(
|
|
212
|
+
folder_path=str(folder_path),
|
|
213
|
+
path_in_repo=path_in_repo,
|
|
214
|
+
repo_id=self.repo_id,
|
|
215
|
+
repo_type=self.repo_type,
|
|
216
|
+
commit_message=commit_message,
|
|
217
|
+
token=self.token,
|
|
218
|
+
)
|
|
219
|
+
|
|
220
|
+
return url
|
|
221
|
+
|
|
222
|
+
def download_benchmark_dataset(
|
|
223
|
+
self,
|
|
224
|
+
filename: str = "benchmark.json",
|
|
225
|
+
repo_id: str | None = None,
|
|
226
|
+
local_dir: str | Path | None = None,
|
|
227
|
+
) -> Path:
|
|
228
|
+
"""
|
|
229
|
+
Download the IATP benchmark dataset.
|
|
230
|
+
|
|
231
|
+
Args:
|
|
232
|
+
filename: Name of the file to download
|
|
233
|
+
repo_id: Repository ID. Defaults to the benchmark repo
|
|
234
|
+
local_dir: Local directory to save the file
|
|
235
|
+
|
|
236
|
+
Returns:
|
|
237
|
+
Path to the downloaded file
|
|
238
|
+
|
|
239
|
+
Example:
|
|
240
|
+
>>> dataset_path = client.download_benchmark_dataset()
|
|
241
|
+
>>> with open(dataset_path) as f:
|
|
242
|
+
... data = json.load(f)
|
|
243
|
+
"""
|
|
244
|
+
repo_id = repo_id or DEFAULT_DATASET_REPO
|
|
245
|
+
|
|
246
|
+
file_path = hf_hub_download(
|
|
247
|
+
repo_id=repo_id,
|
|
248
|
+
filename=filename,
|
|
249
|
+
repo_type="dataset",
|
|
250
|
+
token=self.token,
|
|
251
|
+
local_dir=str(local_dir) if local_dir else None,
|
|
252
|
+
)
|
|
253
|
+
|
|
254
|
+
return Path(file_path)
|
|
255
|
+
|
|
256
|
+
def list_experiments(self) -> list[dict[str, Any]]:
|
|
257
|
+
"""
|
|
258
|
+
List all experiment files in the repository.
|
|
259
|
+
|
|
260
|
+
Returns:
|
|
261
|
+
List of file metadata dictionaries
|
|
262
|
+
"""
|
|
263
|
+
files = self.api.list_repo_files(
|
|
264
|
+
repo_id=self.repo_id,
|
|
265
|
+
repo_type=self.repo_type,
|
|
266
|
+
token=self.token,
|
|
267
|
+
)
|
|
268
|
+
|
|
269
|
+
experiment_files = [
|
|
270
|
+
{"path": f, "type": "experiment"}
|
|
271
|
+
for f in files
|
|
272
|
+
if f.startswith("experiments/") and f.endswith((".json", ".jsonl"))
|
|
273
|
+
]
|
|
274
|
+
|
|
275
|
+
return experiment_files
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
# =============================================================================
|
|
279
|
+
# Convenience Functions
|
|
280
|
+
# =============================================================================
|
|
281
|
+
|
|
282
|
+
def upload_experiment_logs(
|
|
283
|
+
file_path: str | Path,
|
|
284
|
+
repo_id: str = DEFAULT_REPO_ID,
|
|
285
|
+
token: str | None = None,
|
|
286
|
+
) -> str:
|
|
287
|
+
"""
|
|
288
|
+
Convenience function to upload experiment logs.
|
|
289
|
+
|
|
290
|
+
Args:
|
|
291
|
+
file_path: Path to the experiment results file
|
|
292
|
+
repo_id: Hugging Face repository ID
|
|
293
|
+
token: HF API token
|
|
294
|
+
|
|
295
|
+
Returns:
|
|
296
|
+
URL of the uploaded file
|
|
297
|
+
|
|
298
|
+
Example:
|
|
299
|
+
>>> from iatp.hf_utils import upload_experiment_logs
|
|
300
|
+
>>> url = upload_experiment_logs("experiments/results.json")
|
|
301
|
+
>>> print(f"Uploaded to: {url}")
|
|
302
|
+
"""
|
|
303
|
+
client = IATPHubClient(repo_id=repo_id, token=token)
|
|
304
|
+
return client.upload_experiment_logs(file_path)
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
def download_benchmark_dataset(
|
|
308
|
+
local_dir: str | Path | None = None,
|
|
309
|
+
repo_id: str = DEFAULT_DATASET_REPO,
|
|
310
|
+
token: str | None = None,
|
|
311
|
+
) -> Path:
|
|
312
|
+
"""
|
|
313
|
+
Convenience function to download the benchmark dataset.
|
|
314
|
+
|
|
315
|
+
Args:
|
|
316
|
+
local_dir: Local directory to save the dataset
|
|
317
|
+
repo_id: Hugging Face repository ID
|
|
318
|
+
token: HF API token
|
|
319
|
+
|
|
320
|
+
Returns:
|
|
321
|
+
Path to the downloaded file
|
|
322
|
+
|
|
323
|
+
Example:
|
|
324
|
+
>>> from iatp.hf_utils import download_benchmark_dataset
|
|
325
|
+
>>> path = download_benchmark_dataset(local_dir="./data")
|
|
326
|
+
"""
|
|
327
|
+
client = IATPHubClient(repo_id=repo_id, token=token, repo_type="dataset")
|
|
328
|
+
return client.download_benchmark_dataset(local_dir=local_dir)
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
def create_iatp_dataset_card(
|
|
332
|
+
repo_id: str = DEFAULT_DATASET_REPO,
|
|
333
|
+
output_path: str | Path | None = None,
|
|
334
|
+
) -> str:
|
|
335
|
+
"""
|
|
336
|
+
Generate a Hugging Face Dataset Card for IATP datasets.
|
|
337
|
+
|
|
338
|
+
Args:
|
|
339
|
+
repo_id: Repository ID for the dataset
|
|
340
|
+
output_path: Optional path to save the README.md
|
|
341
|
+
|
|
342
|
+
Returns:
|
|
343
|
+
The dataset card content as a string
|
|
344
|
+
|
|
345
|
+
Example:
|
|
346
|
+
>>> card = create_iatp_dataset_card()
|
|
347
|
+
>>> print(card)
|
|
348
|
+
"""
|
|
349
|
+
card_content = '''---
|
|
350
|
+
license: mit
|
|
351
|
+
task_categories:
|
|
352
|
+
- text-classification
|
|
353
|
+
language:
|
|
354
|
+
- en
|
|
355
|
+
tags:
|
|
356
|
+
- iatp
|
|
357
|
+
- agent-trust
|
|
358
|
+
- security
|
|
359
|
+
- multi-agent-systems
|
|
360
|
+
- llm-safety
|
|
361
|
+
pretty_name: IATP Benchmark Dataset
|
|
362
|
+
size_categories:
|
|
363
|
+
- 1K<n<10K
|
|
364
|
+
---
|
|
365
|
+
|
|
366
|
+
# IATP Benchmark Dataset
|
|
367
|
+
|
|
368
|
+
## Dataset Description
|
|
369
|
+
|
|
370
|
+
This dataset contains experiment results and benchmark data for the
|
|
371
|
+
**Inter-Agent Trust Protocol (IATP)** - a sidecar architecture for
|
|
372
|
+
preventing cascading hallucinations in autonomous agent networks.
|
|
373
|
+
|
|
374
|
+
### Dataset Summary
|
|
375
|
+
|
|
376
|
+
The IATP benchmark dataset includes:
|
|
377
|
+
|
|
378
|
+
- **Capability Manifests**: Sample agent capability declarations
|
|
379
|
+
- **Trust Scenarios**: Test cases for trust score calculation
|
|
380
|
+
- **Cascading Failure Tests**: Data for evaluating failure prevention
|
|
381
|
+
- **Policy Decisions**: Ground truth for policy engine validation
|
|
382
|
+
|
|
383
|
+
### Supported Tasks
|
|
384
|
+
|
|
385
|
+
- Agent Trust Classification
|
|
386
|
+
- Cascading Failure Detection
|
|
387
|
+
- Privacy Policy Validation
|
|
388
|
+
|
|
389
|
+
### Languages
|
|
390
|
+
|
|
391
|
+
English (en)
|
|
392
|
+
|
|
393
|
+
## Dataset Structure
|
|
394
|
+
|
|
395
|
+
### Data Instances
|
|
396
|
+
|
|
397
|
+
```json
|
|
398
|
+
{
|
|
399
|
+
"agent_id": "secure-bank-agent",
|
|
400
|
+
"trust_level": "verified_partner",
|
|
401
|
+
"capabilities": {
|
|
402
|
+
"reversibility": "full",
|
|
403
|
+
"idempotency": true
|
|
404
|
+
},
|
|
405
|
+
"expected_trust_score": 10,
|
|
406
|
+
"expected_decision": "allow"
|
|
407
|
+
}
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
### Data Fields
|
|
411
|
+
|
|
412
|
+
- `agent_id`: Unique identifier for the agent
|
|
413
|
+
- `trust_level`: One of ["verified_partner", "trusted", "standard", "unknown", "untrusted"]
|
|
414
|
+
- `capabilities`: Object containing reversibility, idempotency, etc.
|
|
415
|
+
- `privacy_contract`: Object containing retention policy, encryption settings
|
|
416
|
+
- `expected_trust_score`: Ground truth trust score (0-10)
|
|
417
|
+
- `expected_decision`: Expected policy decision ["allow", "warn", "deny"]
|
|
418
|
+
|
|
419
|
+
## Dataset Creation
|
|
420
|
+
|
|
421
|
+
### Curation Rationale
|
|
422
|
+
|
|
423
|
+
This dataset was created to enable reproducible evaluation of agent trust
|
|
424
|
+
mechanisms and to provide a benchmark for multi-agent security research.
|
|
425
|
+
|
|
426
|
+
### Source Data
|
|
427
|
+
|
|
428
|
+
Generated from IATP experiment runs using controlled agent configurations.
|
|
429
|
+
|
|
430
|
+
## Considerations for Using the Data
|
|
431
|
+
|
|
432
|
+
### Intended Use
|
|
433
|
+
|
|
434
|
+
- Evaluating agent trust mechanisms
|
|
435
|
+
- Benchmarking multi-agent security systems
|
|
436
|
+
- Research in LLM safety and governance
|
|
437
|
+
|
|
438
|
+
### Limitations
|
|
439
|
+
|
|
440
|
+
- Synthetic data based on defined scenarios
|
|
441
|
+
- May not cover all edge cases in production environments
|
|
442
|
+
- Trust scores are calculated using IATP's specific algorithm
|
|
443
|
+
|
|
444
|
+
## Additional Information
|
|
445
|
+
|
|
446
|
+
### Licensing Information
|
|
447
|
+
|
|
448
|
+
MIT License
|
|
449
|
+
|
|
450
|
+
### Citation Information
|
|
451
|
+
|
|
452
|
+
```bibtex
|
|
453
|
+
@software{iatp2024,
|
|
454
|
+
title = {Inter-Agent Trust Protocol},
|
|
455
|
+
author = {Siddique, Imran},
|
|
456
|
+
year = {2024},
|
|
457
|
+
url = {https://github.com/microsoft/agent-governance-toolkit}
|
|
458
|
+
}
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
### Contributions
|
|
462
|
+
|
|
463
|
+
Contributions are welcome! Please see the
|
|
464
|
+
[GitHub repository](https://github.com/microsoft/agent-governance-toolkit)
|
|
465
|
+
for contribution guidelines.
|
|
466
|
+
'''
|
|
467
|
+
|
|
468
|
+
if output_path:
|
|
469
|
+
output_path = Path(output_path)
|
|
470
|
+
output_path.write_text(card_content)
|
|
471
|
+
|
|
472
|
+
return card_content
|