{ "$schema":          "https://json-schema.org/draft/2020-12/schema",
  "$comment":         "https://schemas.mpai.community/AIF/V3.0/data/AIMMetadata.json",
  "$id":              "https://schemas.mpai.community/AIH1/V1.1/AIMs/HealthFrontEnd.json",
  "title":            "Health Front End V1.1",

  "Identifier":       {"ImplementerID": "IIDRA-assigned", "ImplementationID": "AIH-HFE-V1.1-I01", "AIMName": "AIH-HFE-V1.1"},
  "Header":           "AIH-HFE-V1.1",

  "APIProfile":       "Basic",
  "Description":      "This AIM implements the AIH-HSP Health Front End.",

  "InternalTypes":  [{"Name": "AIHData",        "DataType": "AIH-AHD-V1.1"},
                     {"Name": "ARAData",        "DataType": "AIH-ARD-V1.1"},
                     {"Name": "AIHDataProcess", "DataType": "AIH-AHP-V1.1"},
                     {"Name": "HealthData",     "DataType": "AIH-HLD-V1.1"},
                     {"Name": "ModelLicence",   "DataType": "AIH-MDL-V1.1"},
                     {"Name": "Register",       "DataType": "AIH-REG-V1.1"},
                     {"Name": "FederatedLearn", "DataType": "AIH-FDL-V1.1"}],

  "ExternalPorts":  [{"Name": "RegisterRequestUN",         "Direction": "Input",  "DataType": "AIH-REG-V1.1", "PortNumber": 1, "Technology": "", "Protocol": "", "IsRemote": ""},
                     {"Name": "RegisterResponseUN",        "Direction": "Input",  "DataType": "AIH-REG-V1.1", "PortNumber": 2, "Technology": "", "Protocol": "", "IsRemote": ""},
                     {"Name": "FederatedLearnRequestUN",   "Direction": "Input",  "DataType": "AIH-FDL-V1.1",                  "Technology": "", "Protocol": "", "IsRemote": ""},
                     {"Name": "AIHDataProcessRequestUNH",  "Direction": "Input",  "DataType": "AIH-AHP-V1.1", "PortNumber": 1, "Technology": "", "Protocol": "", "IsRemote": ""},
                     {"Name": "AIHDataProcessResponseUN",  "Direction": "Input",  "DataType": "AIH-AHP-V1.1", "PortNumber": 2, "Technology": "", "Protocol": "", "IsRemote": ""},
                     {"Name": "HealthDataUN",              "Direction": "Input",  "DataType": "AIH-HLD-V1.1",                  "Technology": "", "Protocol": "", "IsRemote": ""},
                     {"Name": "ModelLicenceUN",            "Direction": "Input",  "DataType": "AIH-MDL-V1.1",                  "Technology": "", "Protocol": "", "IsRemote": ""},
                     {"Name": "AIHDataProcessRequestUNS",  "Direction": "Input",  "DataType": "AIH-AHP-V1.1", "PortNumber": 3, "Technology": "", "Protocol": "", "IsRemote": ""},
                     {"Name": "RegisterRequestNB",         "Direction": "Output", "DataType": "AIH-REG-V1.1",                  "Technology": "", "Protocol": "", "IsRemote": ""},
                     {"Name": "FederatedLearnResponseNB",  "Direction": "Output", "DataType": "AIH-FDL-V1.1",                  "Technology": "", "Protocol": "", "IsRemote": ""},
                     {"Name": "AIHDataProcessRequestNB",   "Direction": "Output", "DataType": "AIH-AHP-V1.1", "PortNumber": 1, "Technology": "", "Protocol": "", "IsRemote": ""},
                     {"Name": "AIHDataProcessResponseNB",  "Direction": "Output", "DataType": "AIH-AHP-V1.1", "PortNumber": 2, "Technology": "", "Protocol": "", "IsRemote": ""},
                     {"Name": "AIHDataProcessResponseNBS", "Direction": "Output", "DataType": "AIH-AHP-V1.1", "PortNumber": 3, "Technology": "", "Protocol": "", "IsRemote": ""}],

  "SubAIMs":        [{ "Identifier": { "ImplementerID": "IIDRA-assigned", "ImplementationID": "AIH-MDL-V1.1-I01", "AIMName": "AIH-MDL-V1.1", "Relation": "" } },
                     { "Identifier": { "ImplementerID": "IIDRA-assigned", "ImplementationID": "AIH-HDP-V1.1-I01", "AIMName": "AIH-HDP-V1.1", "Relation": "" } },
                     { "Identifier": { "ImplementerID": "IIDRA-assigned", "ImplementationID": "AIH-ARA-V1.1-I01", "AIMName": "AIH-ARA-V1.1", "Relation": "" } },
                     { "Identifier": { "ImplementerID": "IIDRA-assigned", "ImplementationID": "AIH-STR-V1.1-I01", "AIMName": "AIH-STR-V1.1", "Relation": "" } }],

  "Topology":       [{ "Output": { "AIMName": "",             "PortName": "HealthDataUN"                              },  "Input": { "AIMName": "AIH-MDL-V1.1", "PortName": "HealthDataUN" } },
                     { "Output": { "AIMName": "",             "PortName": "ModelLicenceUN"                            },  "Input": { "AIMName": "AIH-MDL-V1.1", "PortName": "ModelLicenceUN" } },
                     { "Output": { "AIMName": "AIH-MDL-V1.1", "PortName": "AIHData"                                   },  "Input": { "AIMName": "AIH-HDP-V1.1", "PortName": "AIHData" } },
                     { "Output": { "AIMName": "",             "PortName": "RegisterRequestUN", "PortNumber": 1        },  "Input": { "AIMName": "AIH-HDP-V1.1", "PortName": "RegisterRequestUN", "PortNumber": 1 } },
                     { "Output": { "AIMName": "",             "PortName": "RegisterResponseUN", "PortNumber": 2       },  "Input": { "AIMName": "AIH-HDP-V1.1", "PortName": "RegisterResponseUN", "PortNumber": 2 } },
                     { "Output": { "AIMName": "",             "PortName": "FederatedLearnRequestUN"                   },  "Input": { "AIMName": "AIH-HDP-V1.1", "PortName": "FederatedLearnRequestUN" } },
                     { "Output": { "AIMName": "",             "PortName": "AIHDataProcessRequestUNH", "PortNumber": 1 },  "Input": { "AIMName": "AIH-HDP-V1.1", "PortName": "AIHDataProcessRequestUNH", "PortNumber": 2 } },
                     { "Output": { "AIMName": "",             "PortName": "AIHDataProcessResponseUN", "PortNumber": 2 },  "Input": { "AIMName": "AIH-HDP-V1.1", "PortName": "AIHDataProcessResponseUN", "PortNumber": 1 } },
                     { "Output": { "AIMName": "AIH-HDP-V1.1", "PortName": "RegisterRequestNB", "PortNumber": 1        },  "Input": { "AIMName": "",             "PortName": "RegisterRequestNB" } },
                     { "Output": { "AIMName": "AIH-HDP-V1.1", "PortName": "FederatedLearnResponseNB"                  },  "Input": { "AIMName": "",             "PortName": "FederatedLearnResponseNB" } },
                     { "Output": { "AIMName": "AIH-HDP-V1.1", "PortName": "AIHDataProcessRequestNB", "PortNumber": 1  },  "Input": { "AIMName": "",             "PortName": "AIHDataProcessRequestNB", "PortNumber": 1 } },
                     { "Output": { "AIMName": "AIH-HDP-V1.1", "PortName": "AIHDataProcessResponseNB", "PortNumber": 2 },  "Input": { "AIMName": "",             "PortName": "AIHDataProcessResponseNB", "PortNumber": 2 } },
                     { "Output": { "AIMName": "AIH-HDP-V1.1", "PortName": "AIHData"                                   },  "Input": { "AIMName": "AIH-ARA-V1.1", "PortName": "AIHData" } },
                     { "Output": { "AIMName": "AIH-ARA-V1.1", "PortName": "ARAData"                                   },  "Input": { "AIMName": "AIH-HDP-V1.1", "PortName": "ARAData" } },
                     { "Output": { "AIMName": "AIH-HDP-V1.1", "PortName": "AIHData"                                   },  "Input": { "AIMName": "AIH-STR-V1.1", "PortName": "AIHData" } },
                     { "Output": { "AIMName": "AIH-STR-V1.1", "PortName": "AIHData"                                   },  "Input": { "AIMName": "AIH-HDP-V1.1", "PortName": "AIHData" } },
                     { "Output": { "AIMName": "",             "PortName": "AIHDataProcessRequestUNS", "PortNumber": 3 },  "Input": { "AIMName": "AIH-STR-V1.1", "PortName": "AIHDataProcessRequestUNS" } },
                     { "Output": { "AIMName": "AIH-STR-V1.1", "PortName": "AIHDataProcessResponseNBS"                 },  "Input": { "AIMName": "",             "PortName": "AIHDataProcessResponseNBS", "PortNumber": 3 } }],

  "Implementations":[{"ImplementationURI": "/* URI storing Implementation */", "BinaryName": "/* BinaryName */", "Architecture": "/* x86 | x86-64 | ARM | ARM64 | MIPS | RISC-V */", "OperatingSystem": "/* Windows | Linux | MacOS | Debian | Ubuntu | RedHat | Android | Zephyr | RTOS | Oniro | iOS */", "Version": "/* Version */", "Source": "/* AIMStorage | MPAIStore | AIMURL */", "Destination": "/* Destination URI */"}],

  "ResourcePolicies":[{"Name": "Memory",               "Minimum": "/* GB */",                                                                                                                 "Maximum": "/* GB */",                                                                                                                 "Request": "/* GB */"},
                     {"Name": "CPU:Number",           "Minimum": "/* integer, 0=all */",                                                                                                     "Maximum": "/* integer, 0=all */",                                                                                                     "Request": "/* integer, 0=all */"},
                     {"Name": "CPU:Class",            "Minimum": "/* Low | Medium | High */",                                                                                                "Maximum": "/* Low | Medium | High */",                                                                                                "Request": "/* Low | Medium | High */"},
                     {"Name": "GPU:Number",           "Minimum": "/* integer, 0=all */",                                                                                                     "Maximum": "/* integer, 0=all */",                                                                                                     "Request": "/* integer, 0=all */"},
                     {"Name": "GPU:CUDA:Class",       "Minimum": "/* SM10|SM11|SM12|SM13|SM20|SM21|SM30|SM32|SM35|SM37|SM50|SM52|SM53|SM60|SM61|SM62|SM70|SM72|SM75|SM80|SM86|SM87|SM90 */", "Maximum": "/* SM10|SM11|SM12|SM13|SM20|SM21|SM30|SM32|SM35|SM37|SM50|SM52|SM53|SM60|SM61|SM62|SM70|SM72|SM75|SM80|SM86|SM87|SM90 */", "Request": "/* SM10|SM11|SM12|SM13|SM20|SM21|SM30|SM32|SM35|SM37|SM50|SM52|SM53|SM60|SM61|SM62|SM70|SM72|SM75|SM80|SM86|SM87|SM90 */"},
                     {"Name": "GPU:CUDA:FrameBuffer", "Minimum": "/* float_GB_GDDR|GDDR2|GDDR3|GDDR4|GDDR5|GDDR5X|GDDR6|GDDR6X */",                                                          "Maximum": "/* float_GB_GDDR|GDDR2|GDDR3|GDDR4|GDDR5|GDDR5X|GDDR6|GDDR6X */",                                                          "Request": "/* float_GB_GDDR|GDDR2|GDDR3|GDDR4|GDDR5|GDDR5X|GDDR6|GDDR6X */"},
                     {"Name": "GPU:CUDA:MemorySpeed", "Minimum": "/* float_GHz */",                                                                                                          "Maximum": "/* float_GHz */",                                                                                                          "Request": "/* float_GHz */"}],

  "DataXMData":       {},

  "Documentation":  [{"Type": "Tutorial", "URI": "https://mpai.community/standards/mpai-aih/hsp/v1-0/"}]}
