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.
Files changed (337) hide show
  1. agent_control_plane/__init__.py +662 -0
  2. agent_control_plane/a2a_adapter.py +543 -0
  3. agent_control_plane/adapter.py +417 -0
  4. agent_control_plane/agent_hibernation.py +394 -0
  5. agent_control_plane/agent_kernel.py +470 -0
  6. agent_control_plane/compliance.py +720 -0
  7. agent_control_plane/constraint_graphs.py +478 -0
  8. agent_control_plane/control_plane.py +854 -0
  9. agent_control_plane/example_executors.py +195 -0
  10. agent_control_plane/execution_engine.py +231 -0
  11. agent_control_plane/flight_recorder.py +846 -0
  12. agent_control_plane/governance_layer.py +435 -0
  13. agent_control_plane/hf_utils.py +563 -0
  14. agent_control_plane/interfaces/__init__.py +55 -0
  15. agent_control_plane/interfaces/kernel_interface.py +361 -0
  16. agent_control_plane/interfaces/plugin_interface.py +497 -0
  17. agent_control_plane/interfaces/protocol_interfaces.py +387 -0
  18. agent_control_plane/kernel_space.py +1009 -0
  19. agent_control_plane/langchain_adapter.py +424 -0
  20. agent_control_plane/lifecycle.py +3113 -0
  21. agent_control_plane/mcp_adapter.py +653 -0
  22. agent_control_plane/ml_safety.py +563 -0
  23. agent_control_plane/multimodal.py +727 -0
  24. agent_control_plane/mute_agent.py +422 -0
  25. agent_control_plane/observability.py +787 -0
  26. agent_control_plane/orchestrator.py +482 -0
  27. agent_control_plane/plugin_registry.py +750 -0
  28. agent_control_plane/policy_engine.py +954 -0
  29. agent_control_plane/process_isolation.py +777 -0
  30. agent_control_plane/shadow_mode.py +310 -0
  31. agent_control_plane/signals.py +493 -0
  32. agent_control_plane/supervisor_agents.py +430 -0
  33. agent_control_plane/time_travel_debugger.py +557 -0
  34. agent_control_plane/tool_registry.py +452 -0
  35. agent_control_plane/vfs.py +697 -0
  36. agent_kernel/__init__.py +69 -0
  37. agent_kernel/analyzer.py +435 -0
  38. agent_kernel/auditor.py +36 -0
  39. agent_kernel/completeness_auditor.py +237 -0
  40. agent_kernel/detector.py +203 -0
  41. agent_kernel/kernel.py +744 -0
  42. agent_kernel/memory_manager.py +85 -0
  43. agent_kernel/models.py +374 -0
  44. agent_kernel/nudge_mechanism.py +263 -0
  45. agent_kernel/outcome_analyzer.py +338 -0
  46. agent_kernel/patcher.py +582 -0
  47. agent_kernel/semantic_analyzer.py +316 -0
  48. agent_kernel/semantic_purge.py +349 -0
  49. agent_kernel/simulator.py +449 -0
  50. agent_kernel/teacher.py +85 -0
  51. agent_kernel/triage.py +152 -0
  52. agent_os/__init__.py +409 -0
  53. agent_os/_adversarial_impl.py +200 -0
  54. agent_os/_circuit_breaker_impl.py +232 -0
  55. agent_os/_mcp_metrics.py +193 -0
  56. agent_os/adversarial.py +20 -0
  57. agent_os/agents_compat.py +490 -0
  58. agent_os/audit_logger.py +135 -0
  59. agent_os/base_agent.py +651 -0
  60. agent_os/circuit_breaker.py +34 -0
  61. agent_os/cli/__init__.py +659 -0
  62. agent_os/cli/cmd_audit.py +128 -0
  63. agent_os/cli/cmd_init.py +152 -0
  64. agent_os/cli/cmd_policy.py +41 -0
  65. agent_os/cli/cmd_policy_gen.py +180 -0
  66. agent_os/cli/cmd_validate.py +258 -0
  67. agent_os/cli/mcp_scan.py +265 -0
  68. agent_os/cli/output.py +192 -0
  69. agent_os/cli/policy_checker.py +330 -0
  70. agent_os/compat.py +74 -0
  71. agent_os/constraint_graph.py +234 -0
  72. agent_os/content_governance.py +140 -0
  73. agent_os/context_budget.py +305 -0
  74. agent_os/credential_redactor.py +224 -0
  75. agent_os/diff_policy.py +89 -0
  76. agent_os/egress_policy.py +159 -0
  77. agent_os/escalation.py +276 -0
  78. agent_os/event_bus.py +124 -0
  79. agent_os/exceptions.py +180 -0
  80. agent_os/execution_context_policy.py +141 -0
  81. agent_os/github_enterprise.py +96 -0
  82. agent_os/health.py +20 -0
  83. agent_os/integrations/__init__.py +279 -0
  84. agent_os/integrations/a2a_adapter.py +279 -0
  85. agent_os/integrations/agent_lightning/__init__.py +30 -0
  86. agent_os/integrations/anthropic_adapter.py +420 -0
  87. agent_os/integrations/autogen_adapter.py +620 -0
  88. agent_os/integrations/base.py +1137 -0
  89. agent_os/integrations/compat.py +229 -0
  90. agent_os/integrations/config.py +98 -0
  91. agent_os/integrations/conversation_guardian.py +957 -0
  92. agent_os/integrations/crewai_adapter.py +467 -0
  93. agent_os/integrations/drift_detector.py +425 -0
  94. agent_os/integrations/dry_run.py +124 -0
  95. agent_os/integrations/escalation.py +582 -0
  96. agent_os/integrations/gemini_adapter.py +364 -0
  97. agent_os/integrations/google_adk_adapter.py +633 -0
  98. agent_os/integrations/guardrails_adapter.py +394 -0
  99. agent_os/integrations/health.py +197 -0
  100. agent_os/integrations/langchain_adapter.py +654 -0
  101. agent_os/integrations/llamafirewall.py +343 -0
  102. agent_os/integrations/llamaindex_adapter.py +188 -0
  103. agent_os/integrations/logging.py +191 -0
  104. agent_os/integrations/maf_adapter.py +631 -0
  105. agent_os/integrations/mistral_adapter.py +365 -0
  106. agent_os/integrations/openai_adapter.py +816 -0
  107. agent_os/integrations/openai_agents_sdk.py +406 -0
  108. agent_os/integrations/policy_compose.py +171 -0
  109. agent_os/integrations/profiling.py +144 -0
  110. agent_os/integrations/pydantic_ai_adapter.py +420 -0
  111. agent_os/integrations/rate_limiter.py +130 -0
  112. agent_os/integrations/rbac.py +143 -0
  113. agent_os/integrations/registry.py +113 -0
  114. agent_os/integrations/scope_guard.py +303 -0
  115. agent_os/integrations/semantic_kernel_adapter.py +769 -0
  116. agent_os/integrations/smolagents_adapter.py +629 -0
  117. agent_os/integrations/templates.py +178 -0
  118. agent_os/integrations/token_budget.py +134 -0
  119. agent_os/integrations/tool_aliases.py +190 -0
  120. agent_os/integrations/webhooks.py +177 -0
  121. agent_os/lite.py +208 -0
  122. agent_os/mcp_gateway.py +385 -0
  123. agent_os/mcp_message_signer.py +273 -0
  124. agent_os/mcp_protocols.py +161 -0
  125. agent_os/mcp_response_scanner.py +232 -0
  126. agent_os/mcp_security.py +924 -0
  127. agent_os/mcp_session_auth.py +231 -0
  128. agent_os/mcp_sliding_rate_limiter.py +184 -0
  129. agent_os/memory_guard.py +409 -0
  130. agent_os/metrics.py +134 -0
  131. agent_os/mute.py +428 -0
  132. agent_os/mute_agent.py +209 -0
  133. agent_os/policies/__init__.py +77 -0
  134. agent_os/policies/async_evaluator.py +275 -0
  135. agent_os/policies/backends.py +670 -0
  136. agent_os/policies/bridge.py +169 -0
  137. agent_os/policies/budget.py +85 -0
  138. agent_os/policies/cli.py +294 -0
  139. agent_os/policies/conflict_resolution.py +270 -0
  140. agent_os/policies/data_classification.py +252 -0
  141. agent_os/policies/evaluator.py +239 -0
  142. agent_os/policies/policy_schema.json +228 -0
  143. agent_os/policies/rate_limiting.py +145 -0
  144. agent_os/policies/schema.py +115 -0
  145. agent_os/policies/shared.py +331 -0
  146. agent_os/prompt_injection.py +694 -0
  147. agent_os/providers.py +182 -0
  148. agent_os/py.typed +0 -0
  149. agent_os/retry.py +81 -0
  150. agent_os/reversibility.py +251 -0
  151. agent_os/sandbox.py +432 -0
  152. agent_os/sandbox_provider.py +140 -0
  153. agent_os/secure_codegen.py +525 -0
  154. agent_os/security_skills.py +538 -0
  155. agent_os/semantic_policy.py +422 -0
  156. agent_os/server/__init__.py +15 -0
  157. agent_os/server/__main__.py +25 -0
  158. agent_os/server/app.py +277 -0
  159. agent_os/server/models.py +104 -0
  160. agent_os/shift_left_metrics.py +130 -0
  161. agent_os/stateless.py +742 -0
  162. agent_os/supervisor.py +148 -0
  163. agent_os/task_outcome.py +148 -0
  164. agent_os/transparency.py +181 -0
  165. agent_os/trust_root.py +128 -0
  166. agent_os_kernel-3.1.0.dist-info/METADATA +1269 -0
  167. agent_os_kernel-3.1.0.dist-info/RECORD +337 -0
  168. agent_os_kernel-3.1.0.dist-info/WHEEL +4 -0
  169. agent_os_kernel-3.1.0.dist-info/entry_points.txt +2 -0
  170. agent_os_kernel-3.1.0.dist-info/licenses/LICENSE +21 -0
  171. agent_os_observability/__init__.py +27 -0
  172. agent_os_observability/dashboards.py +898 -0
  173. agent_os_observability/metrics.py +398 -0
  174. agent_os_observability/server.py +223 -0
  175. agent_os_observability/tracer.py +232 -0
  176. agent_primitives/__init__.py +24 -0
  177. agent_primitives/failures.py +84 -0
  178. agent_primitives/py.typed +0 -0
  179. amb_core/__init__.py +177 -0
  180. amb_core/adapters/__init__.py +57 -0
  181. amb_core/adapters/aws_sqs_broker.py +376 -0
  182. amb_core/adapters/azure_servicebus_broker.py +340 -0
  183. amb_core/adapters/kafka_broker.py +260 -0
  184. amb_core/adapters/nats_broker.py +285 -0
  185. amb_core/adapters/rabbitmq_broker.py +235 -0
  186. amb_core/adapters/redis_broker.py +262 -0
  187. amb_core/broker.py +145 -0
  188. amb_core/bus.py +481 -0
  189. amb_core/cloudevents.py +509 -0
  190. amb_core/dlq.py +345 -0
  191. amb_core/hf_utils.py +536 -0
  192. amb_core/memory_broker.py +410 -0
  193. amb_core/models.py +141 -0
  194. amb_core/persistence.py +529 -0
  195. amb_core/schema.py +294 -0
  196. amb_core/tracing.py +358 -0
  197. atr/__init__.py +640 -0
  198. atr/access.py +348 -0
  199. atr/composition.py +645 -0
  200. atr/decorator.py +357 -0
  201. atr/executor.py +384 -0
  202. atr/health.py +557 -0
  203. atr/hf_utils.py +449 -0
  204. atr/injection.py +422 -0
  205. atr/metrics.py +440 -0
  206. atr/policies.py +403 -0
  207. atr/py.typed +2 -0
  208. atr/registry.py +452 -0
  209. atr/schema.py +480 -0
  210. atr/tools/safe/__init__.py +75 -0
  211. atr/tools/safe/calculator.py +467 -0
  212. atr/tools/safe/datetime_tool.py +443 -0
  213. atr/tools/safe/file_reader.py +402 -0
  214. atr/tools/safe/http_client.py +316 -0
  215. atr/tools/safe/json_parser.py +374 -0
  216. atr/tools/safe/text_tool.py +537 -0
  217. atr/tools/safe/toolkit.py +175 -0
  218. caas/__init__.py +162 -0
  219. caas/api/__init__.py +7 -0
  220. caas/api/server.py +1328 -0
  221. caas/caching.py +834 -0
  222. caas/cli.py +210 -0
  223. caas/conversation.py +223 -0
  224. caas/decay.py +72 -0
  225. caas/detection/__init__.py +9 -0
  226. caas/detection/detector.py +238 -0
  227. caas/enrichment.py +130 -0
  228. caas/gateway/__init__.py +27 -0
  229. caas/gateway/trust_gateway.py +474 -0
  230. caas/hf_utils.py +479 -0
  231. caas/ingestion/__init__.py +23 -0
  232. caas/ingestion/processors.py +253 -0
  233. caas/ingestion/structure_parser.py +188 -0
  234. caas/models.py +356 -0
  235. caas/pragmatic_truth.py +444 -0
  236. caas/routing/__init__.py +10 -0
  237. caas/routing/heuristic_router.py +58 -0
  238. caas/storage/__init__.py +9 -0
  239. caas/storage/store.py +389 -0
  240. caas/triad.py +213 -0
  241. caas/tuning/__init__.py +9 -0
  242. caas/tuning/tuner.py +329 -0
  243. caas/vfs/__init__.py +14 -0
  244. caas/vfs/filesystem.py +452 -0
  245. cmvk/__init__.py +218 -0
  246. cmvk/audit.py +402 -0
  247. cmvk/benchmarks.py +478 -0
  248. cmvk/constitutional.py +904 -0
  249. cmvk/hf_utils.py +301 -0
  250. cmvk/metrics.py +473 -0
  251. cmvk/profiles.py +300 -0
  252. cmvk/py.typed +0 -0
  253. cmvk/types.py +12 -0
  254. cmvk/verification.py +956 -0
  255. emk/__init__.py +89 -0
  256. emk/causal.py +352 -0
  257. emk/hf_utils.py +421 -0
  258. emk/indexer.py +83 -0
  259. emk/py.typed +0 -0
  260. emk/schema.py +204 -0
  261. emk/sleep_cycle.py +347 -0
  262. emk/store.py +281 -0
  263. iatp/__init__.py +166 -0
  264. iatp/attestation.py +461 -0
  265. iatp/cli.py +317 -0
  266. iatp/hf_utils.py +472 -0
  267. iatp/ipc_pipes.py +580 -0
  268. iatp/main.py +412 -0
  269. iatp/models/__init__.py +447 -0
  270. iatp/policy_engine.py +337 -0
  271. iatp/py.typed +2 -0
  272. iatp/recovery.py +321 -0
  273. iatp/security/__init__.py +270 -0
  274. iatp/sidecar/__init__.py +519 -0
  275. iatp/telemetry/__init__.py +164 -0
  276. iatp/tests/__init__.py +1 -0
  277. iatp/tests/test_attestation.py +370 -0
  278. iatp/tests/test_cli.py +131 -0
  279. iatp/tests/test_ed25519_attestation.py +211 -0
  280. iatp/tests/test_models.py +130 -0
  281. iatp/tests/test_policy_engine.py +347 -0
  282. iatp/tests/test_recovery.py +281 -0
  283. iatp/tests/test_security.py +222 -0
  284. iatp/tests/test_sidecar.py +167 -0
  285. iatp/tests/test_telemetry.py +175 -0
  286. mcp_kernel_server/__init__.py +28 -0
  287. mcp_kernel_server/cli.py +274 -0
  288. mcp_kernel_server/resources.py +217 -0
  289. mcp_kernel_server/server.py +564 -0
  290. mcp_kernel_server/tools.py +1174 -0
  291. mute_agent/__init__.py +68 -0
  292. mute_agent/core/__init__.py +1 -0
  293. mute_agent/core/execution_agent.py +166 -0
  294. mute_agent/core/handshake_protocol.py +201 -0
  295. mute_agent/core/reasoning_agent.py +238 -0
  296. mute_agent/knowledge_graph/__init__.py +1 -0
  297. mute_agent/knowledge_graph/graph_elements.py +65 -0
  298. mute_agent/knowledge_graph/multidimensional_graph.py +170 -0
  299. mute_agent/knowledge_graph/subgraph.py +224 -0
  300. mute_agent/listener/__init__.py +43 -0
  301. mute_agent/listener/adapters/__init__.py +31 -0
  302. mute_agent/listener/adapters/base_adapter.py +189 -0
  303. mute_agent/listener/adapters/caas_adapter.py +344 -0
  304. mute_agent/listener/adapters/control_plane_adapter.py +436 -0
  305. mute_agent/listener/adapters/iatp_adapter.py +332 -0
  306. mute_agent/listener/adapters/scak_adapter.py +251 -0
  307. mute_agent/listener/listener.py +610 -0
  308. mute_agent/listener/state_observer.py +436 -0
  309. mute_agent/listener/threshold_config.py +313 -0
  310. mute_agent/super_system/__init__.py +1 -0
  311. mute_agent/super_system/router.py +204 -0
  312. mute_agent/visualization/__init__.py +10 -0
  313. mute_agent/visualization/graph_debugger.py +502 -0
  314. nexus/README.md +60 -0
  315. nexus/__init__.py +51 -0
  316. nexus/arbiter.py +359 -0
  317. nexus/client.py +466 -0
  318. nexus/dmz.py +444 -0
  319. nexus/escrow.py +430 -0
  320. nexus/exceptions.py +286 -0
  321. nexus/pyproject.toml +36 -0
  322. nexus/registry.py +393 -0
  323. nexus/reputation.py +425 -0
  324. nexus/schemas/__init__.py +51 -0
  325. nexus/schemas/compliance.py +276 -0
  326. nexus/schemas/escrow.py +251 -0
  327. nexus/schemas/manifest.py +225 -0
  328. nexus/schemas/receipt.py +208 -0
  329. nexus/tests/__init__.py +0 -0
  330. nexus/tests/conftest.py +146 -0
  331. nexus/tests/test_arbiter.py +192 -0
  332. nexus/tests/test_dmz.py +194 -0
  333. nexus/tests/test_escrow.py +276 -0
  334. nexus/tests/test_exceptions.py +225 -0
  335. nexus/tests/test_registry.py +232 -0
  336. nexus/tests/test_reputation.py +328 -0
  337. 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