Source code for agntcy_acp.manifest.validator

# Copyright AGNTCY Contributors (https://github.com/agntcy)
# SPDX-License-Identifier: Apache-2.0
import json
import logging

from pydantic import ValidationError

from agntcy_acp.agws_v0 import OASF_EXTENSION_NAME_MANIFEST, AgentManifest
from agntcy_acp.exceptions import ACPDescriptorValidationException
from agntcy_acp.models import AgentACPDescriptor

logger = logging.getLogger(__name__)


[docs] def validate_agent_manifest_file( manifest_file_path: str, raise_exception: bool = False ) -> AgentManifest: # Load the descriptor and validate it manifest_json = load_json_file(manifest_file_path) return validate_agent_manifest(manifest_json, raise_exception)
[docs] def validate_agent_descriptor_file( descriptor_file_path: str, raise_exception: bool = False ) -> AgentACPDescriptor: # Load the descriptor and validate it descriptor_json = load_json_file(descriptor_file_path) return validate_agent_descriptor(descriptor_json, raise_exception)
[docs] def descriptor_from_manifest(manifest: dict | AgentManifest) -> dict: # ACP Descriptor is in the extensions of an Agent Manifest if hasattr(manifest, "extensions"): for ext in manifest.extensions: if ext.name == OASF_EXTENSION_NAME_MANIFEST: descriptor_json = ext.data.acp return descriptor_json else: for ext in manifest.get("extensions", []): if ext.get("name", None) == OASF_EXTENSION_NAME_MANIFEST: ext_json = ext.get("data", {}) descriptor_json = ext_json.get("acp", {}) return descriptor_json return {}
[docs] def validate_agent_manifest( manifest_json: dict, raise_exception: bool = False ) -> AgentManifest | None: try: manifest = AgentManifest.model_validate(manifest_json) descriptor_json = descriptor_from_manifest(manifest_json) validate_agent_descriptor(descriptor_json) # TODO: add additional manifest checks except (ValidationError, ACPDescriptorValidationException) as e: if raise_exception: raise e else: logger.debug(f"Validation Error: {e}") return None return manifest
[docs] def validate_agent_descriptor( descriptor_json: dict, raise_exception: bool = False ) -> AgentACPDescriptor | None: try: # pydandic validation descriptor = AgentACPDescriptor.model_validate(descriptor_json) # advanced validation # generate_agent_oapi(descriptor) except (ValidationError, ACPDescriptorValidationException) as e: if raise_exception: raise e else: logger.debug(f"Validation Error: {e}") return None return descriptor
[docs] def load_json_file(json_file_path: str) -> dict: with open(json_file_path, "r") as f: descriptor = json.load(f) return descriptor