{ "$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/PAF/V1.6/AIMs/SpeakingAvatarFormation.json",
  "title":                "Speaking Avatar Formation V1.6",

  "Identifier":           {"ImplementerID": "/* String assigned by IIDRA */", "ImplementationID": "/* String from Implementer */", "AIMName": "PAF-SAF-V1.6"},
  "Header":               "PAF-SAF-V1.6",

  "APIProfile":           "Basic",
  "Description":          "Speaking Avatar Formation: forms the Speaking Avatar of the input Avatar - its Model animated as it utters the Speech. Generative Face Description and Generative Body Description make the Face and Body Descriptors from the Speech and the Text, expressive when a Face or Gesture Personal Status is supplied; Speaking Avatar Synthesis packages the Avatar, the Speech and the Descriptors, time-aligned and ready to play.",

  "InternalTypes":        [{"Name": "FaceDescriptors", "DataType": "PAF-FDO-V1.6"},
                          {"Name": "BodyDescriptors", "DataType": "PAF-BDO-V1.6"}],

  "ExternalPorts":        [{"Name": "Speech", "Direction": "Input", "DataType": ["OSD-BSO-V1.5", "OSD-SPO-V1.5"], "Technology": "Software", "Protocol": "", "IsRemote": false},
                          {"Name": "Text", "Direction": "Input", "DataType": ["OSD-BTO-V1.5", "OSD-TXO-V1.5"], "Technology": "Software", "Protocol": "", "IsRemote": false},
                          {"Name": "FacePersonalStatus", "Direction": "Input", "DataType": "MMC-FPS-V2.5", "IsOptional": true, "Technology": "Software", "Protocol": "", "IsRemote": false},
                          {"Name": "GesturePersonalStatus", "Direction": "Input", "DataType": "MMC-GPS-V2.5", "IsOptional": true, "Technology": "Software", "Protocol": "", "IsRemote": false},
                          {"Name": "AvatarModel", "Direction": "Input", "DataType": "PAF-AVT-V1.6", "Technology": "Software", "Protocol": "", "IsRemote": false},
                          {"Name": "SpeakingAvatar", "Direction": "Output", "DataType": "XRV-SAV-V1.0", "Technology": "Software", "Protocol": "", "IsRemote": false}],

  "SubAIMs":              [{ "Identifier": { "ImplementerID": "/* String assigned by IIDRA */", "ImplementationID": "/* String from Implementer */", "AIMName": "PAF-GFD-V1.6", "Relation": "Internal" } },
                          { "Identifier": { "ImplementerID": "/* String assigned by IIDRA */", "ImplementationID": "/* String from Implementer */", "AIMName": "PAF-GBD-V1.6", "Relation": "Internal" } },
                          { "Identifier": { "ImplementerID": "/* String assigned by IIDRA */", "ImplementationID": "/* String from Implementer */", "AIMName": "PAF-SAS-V1.6", "Relation": "Internal" } }],

  "Topology":             [{ "Output": { "AIMName": "", "PortName": "Speech" }, "Input": { "AIMName": "PAF-GFD-V1.6", "PortName": "Speech" } },
                          { "Output": { "AIMName": "", "PortName": "Speech" }, "Input": { "AIMName": "PAF-GBD-V1.6", "PortName": "Speech" } },
                          { "Output": { "AIMName": "", "PortName": "Speech" }, "Input": { "AIMName": "PAF-SAS-V1.6", "PortName": "Speech" } },
                          { "Output": { "AIMName": "", "PortName": "Text" }, "Input": { "AIMName": "PAF-GFD-V1.6", "PortName": "Text" } },
                          { "Output": { "AIMName": "", "PortName": "Text" }, "Input": { "AIMName": "PAF-GBD-V1.6", "PortName": "Text" } },
                          { "Output": { "AIMName": "", "PortName": "FacePersonalStatus" }, "Input": { "AIMName": "PAF-GFD-V1.6", "PortName": "FacePersonalStatus" } },
                          { "Output": { "AIMName": "", "PortName": "GesturePersonalStatus" }, "Input": { "AIMName": "PAF-GBD-V1.6", "PortName": "GesturePersonalStatus" } },
                          { "Output": { "AIMName": "", "PortName": "AvatarModel" }, "Input": { "AIMName": "PAF-SAS-V1.6", "PortName": "AvatarModel" } },
                          { "Output": { "AIMName": "PAF-GFD-V1.6", "PortName": "FaceDescriptors" }, "Input": { "AIMName": "PAF-SAS-V1.6", "PortName": "FaceDescriptors" } },
                          { "Output": { "AIMName": "PAF-GBD-V1.6", "PortName": "BodyDescriptors" }, "Input": { "AIMName": "PAF-SAS-V1.6", "PortName": "BodyDescriptors" } },
                          { "Output": { "AIMName": "PAF-SAS-V1.6", "PortName": "SpeakingAvatar" }, "Input": { "AIMName": "", "PortName": "SpeakingAvatar" } }],

  "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": "Tutorial", "URI": "https://mpai.community/standards/mpai-paf/v1-6/"}]}