{ "Identifier":       {"ImplementerID": "/* String assigned by IIDRA */", "ImplementationID": "/* String assigned by Implementer */", "AIMName": "/* The name of the AIM, given by the concatenation of the two strings ImplementerID and ImplementationID, in this order, with no space and no character between them. */"},
  "Header":           "OSD-UID-V1.5",

  "APIProfile":       "Basic",
  "Description":      "User Identification: identifies a user from their face and their speech and reconciles the two into one answer. Speaker Identity Recognition matches the speech, Face Identity Recognition matches the face, and Identity Reconciliation combines the two identities. Identification states whether the face and the speech match somebody known; User ID states who.",

  "InternalTypes":   [{"Name": "FaceHypothesis",    "DataType": "OSD-IID-V1.5"},
                      {"Name": "SpeakerHypothesis", "DataType": "OSD-IID-V1.5"},
                      {"Name": "OutputSpeakerID",   "DataType": "OSD-IID-V1.5"},
                      {"Name": "FaceID",            "DataType": "OSD-IID-V1.5"}],

  "ExternalPorts":   [{"Name": "UserSpeech",             "Direction": "Input",  "DataType": "OSD-BSO-V1.5", "IsOptional": true, "Technology": "", "Protocol": "", "IsRemote": ""},
                      {"Name": "SpeechSceneDescriptors", "Direction": "Input",  "DataType": "OSD-BAS-V1.5", "IsOptional": true, "Technology": "", "Protocol": "", "IsRemote": ""},
                      {"Name": "UserFace",               "Direction": "Input",  "DataType": "OSD-BVO-V1.5", "IsOptional": true, "Technology": "", "Protocol": "", "IsRemote": ""},
                      {"Name": "VisualSceneDescriptors", "Direction": "Input",  "DataType": "OSD-BVS-V1.5", "IsOptional": true, "Technology": "", "Protocol": "", "IsRemote": ""},
                      {"Name": "Identification",         "Direction": "Output", "DataType": "boolean",                          "Technology": "", "Protocol": "", "IsRemote": ""},
                      {"Name": "UserID",                 "Direction": "Output", "DataType": "OSD-IID-V1.5", "IsOptional": true, "Technology": "", "Protocol": "", "IsRemote": ""}],

  "SubAIMs":         [{"Header": "MMC-SIR-V2.5", "Identifier": {"ImplementerID": "/* String assigned by IIDRA */", "ImplementationID": "/* String assigned by Implementer */", "AIMName": "/* The name of the AIM, given by the concatenation of the two strings ImplementerID and ImplementationID, in this order, with no space and no character between them. */", "Relation": ""}},
                      {"Header": "PAF-FIR-V1.6", "Identifier": {"ImplementerID": "/* String assigned by IIDRA */", "ImplementationID": "/* String assigned by Implementer */", "AIMName": "/* The name of the AIM, given by the concatenation of the two strings ImplementerID and ImplementationID, in this order, with no space and no character between them. */", "Relation": ""}},
                      {"Header": "OSD-IDR-V1.5", "Identifier": {"ImplementerID": "/* String assigned by IIDRA */", "ImplementationID": "/* String assigned by Implementer */", "AIMName": "/* The name of the AIM, given by the concatenation of the two strings ImplementerID and ImplementationID, in this order, with no space and no character between them. */", "Relation": ""}}],

  "Topology":             [{"Output": {"AIMName": "", "DataType": "OSD-BSO-V1.5"}, "Input": {"AIMName": "MMC-SIR-V2.5", "DataType": "OSD-BSO-V1.5"}},
                          {"Output": {"AIMName": "", "DataType": "OSD-BAS-V1.5"}, "Input": {"AIMName": "MMC-SIR-V2.5", "DataType": "OSD-BAS-V1.5"}},
                          {"Output": {"AIMName": "", "DataType": "OSD-BVO-V1.5"}, "Input": {"AIMName": "PAF-FIR-V1.6", "DataType": "OSD-BVO-V1.5"}},
                          {"Output": {"AIMName": "", "DataType": "OSD-BVS-V1.5"}, "Input": {"AIMName": "PAF-FIR-V1.6", "DataType": "OSD-BVS-V1.5"}},
                          {"Output": {"AIMName": "MMC-SIR-V2.5", "DataType": "OSD-IID-V1.5"}, "Input": {"AIMName": "OSD-IDR-V1.5", "DataType": "OSD-IID-V1.5", "PortNumber": 1}},
                          {"Output": {"AIMName": "PAF-FIR-V1.6", "DataType": "OSD-IID-V1.5"}, "Input": {"AIMName": "OSD-IDR-V1.5", "DataType": "OSD-IID-V1.5", "PortNumber": 1}},
                          {"Output": {"AIMName": "OSD-IDR-V1.5", "DataType": "boolean"}, "Input": {"AIMName": "", "DataType": "boolean"}},
                          {"Output": {"AIMName": "OSD-IDR-V1.5", "DataType": "OSD-IID-V1.5"}, "Input": {"AIMName": "", "DataType": "OSD-IID-V1.5"}}],

  "AIMLicence":          "/* AIM Licence offered by the Implementer (AIF-LIC-V3.0): Grant, Term, Updates, Payment, TermsURI - or omit it if the AIM needs no AIM Licence */",

  "Implementations": [{ "ImplementationURI":"/* absolute URI locating the Implementation */",
                        "BinaryName":       "/* provided by implementer */",
                        "Architecture":     "/* x86-64 | ARM64 */",
                        "MASPort":          443,
                        "Firewall":         [{ "Protocol": "TCP | UDP", "Version": "IPV4 | IPV6", "Direction": "Ingress | Egress | Both", "Range": "9990[-9999]", "Source": "0.0.0.0/0" }],
                        "OperatingSystem":  "/* Windows | Linux | MacOS */",
                        "Version":          "/* implementer version */",
                        "Source":           "/* AIMStorage | MPAIStore */",
                        "Destination":      "/* provided by implementer */" }],

  "ResourcePolicies":[{ "Name": "Memory",               "Minimum": "/* GB */",             "Maximum": "/* GB */",             "Request": "/* GB */" },
                      { "Name": "CPU:Number",           "Minimum": "/* integer, 0=all */", "Maximum": "/* integer, 0=all */", "Request": "/* integer */" },
                      { "Name": "CPU:Class",            "Minimum": "/* string */",         "Maximum": "/* string */",         "Request": "/* string */" },
                      { "Name": "GPU:Number",           "Minimum": "/* integer, 0=all */", "Maximum": "/* integer, 0=all */", "Request": "/* integer */" },
                      { "Name": "GPU:CUDA:Class",       "Minimum": "/* string */",         "Maximum": "/* string */",         "Request": "/* string */" },
                      { "Name": "GPU:CUDA:FrameBuffer", "Minimum": "/* GB */",             "Maximum": "/* GB */",             "Request": "/* GB */" },
                      { "Name": "GPU:CUDA:MemorySpeed", "Minimum": "/* GB/s */",           "Maximum": "/* GB/s */",           "Request": "/* GB/s */" } ],

  "DataXMData":         { },

  "Documentation":     [{"Type": "Specification", "URI": "https://mpai.community/standards/mpai-osd/v1-5/ai-modules/user-identification/"}]}
