Source code for agntcy_acp.manifest.validator

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

from pydantic import ValidationError

from agntcy_acp.exceptions import ACPDescriptorValidationException
from agntcy_acp.models import AgentACPDescriptor

from . import AgentManifest


[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)
def _descriptor_from_manifest(manifest_json: dict) -> dict: # ACP Descriptor is an Agent Manifest without the deployment part descriptor_json = copy.deepcopy(manifest_json) del descriptor_json["deployment"] return descriptor_json
[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: print(f"Validation Error: {e}") if raise_exception: raise 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: print(f"Validation Error: {e}") if raise_exception: raise 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