[docs]@dataclassclassIdentification(JsonSerializableDataclass):"""Represents the identification section of a conversant"""speakerUri:strserviceUrl:strorganization:strconversationalName:strsynopsis:strdepartment:Optional[str]=Nonerole:Optional[str]=NoneopenFloorRoles:Optional[Dict[str,bool]]=Nonedef__post_init__(self):"""Initialize after dataclass initialization"""ifself.speakerUriisNone:raiseValueError("speakerUri is required to create an instance of the Identification class")ifself.serviceUrlisNone:raiseValueError("serviceUrl is required to create an instance of the Identification class")ifself.organizationisNone:raiseValueError("organization is required to create an instance of the Identification class")ifself.conversationalNameisNone:raiseValueError("conversationalName is required to create an instance of the Identification class")ifself.synopsisisNone:raiseValueError("synopsis is required to create an instance of the Identification class")def__iter__(self)->Iterator[Tuple[str,Any]]:"""Convert Identification instance to JSON-compatible dictionary"""yield'speakerUri',self.speakerUriyield'serviceUrl',self.serviceUrlyield'organization',self.organizationyield'conversationalName',self.conversationalNameyield'synopsis',self.synopsisifself.departmentisnotNone:yield'department',self.departmentifself.roleisnotNone:yield'role',self.roleifself.openFloorRolesisnotNone:yield'openFloorRoles',self.openFloorRoles
[docs]@dataclassclassSupportedLayers(JsonSerializableDataclass):"""Represents the supported input and output layers for a capability"""input:List[str]=field(default_factory=lambda:["text"])output:List[str]=field(default_factory=lambda:["text"])def__iter__(self)->Iterator[Tuple[str,Any]]:"""Convert SupportedLayers instance to JSON-compatible dictionary"""yield'input',self.inputyield'output',self.output
[docs]@dataclassclassCapability(JsonSerializableDataclass):"""Represents a single capability in the capabilities array"""keyphrases:List[str]descriptions:List[str]languages:Optional[List[str]]=NonesupportedLayers:Optional[SupportedLayers]=Nonedef__post_init__(self):"""Initialize after dataclass initialization"""ifself.supportedLayersisNone:self.supportedLayers=SupportedLayers()def__iter__(self)->Iterator[Tuple[str,Any]]:"""Convert Capability instance to JSON-compatible dictionary"""yield'keyphrases',self.keyphrasesyield'descriptions',self.descriptionsifself.languagesisnotNone:yield'languages',self.languagesifself.supportedLayersisnotNone:yield'supportedLayers',self.supportedLayers.__json__()
[docs]@classmethoddeffrom_dict(cls,data:Dict[str,Any])->'Capability':"""Create a Capability instance from a dictionary"""if'supportedLayers'indata:data['supportedLayers']=SupportedLayers.from_dict(data['supportedLayers'])returnsuper().from_dict(data)
[docs]@dataclassclassManifest(JsonSerializableDataclass):"""Represents an Assistant Manifest according to the specification"""identification:Identificationcapabilities:List[Capability]=field(default_factory=list)def__iter__(self)->Iterator[Tuple[str,Any]]:"""Convert Manifest instance to JSON-compatible dictionary"""yield'identification',self.identification.__json__()yield'capabilities',[capability.__json__()forcapabilityinself.capabilities]
[docs]@classmethoddeffrom_dict(cls,data:Dict[str,Any])->'Manifest':"""Create a Manifest instance from a dictionary"""if'identification'indata:data['identification']=Identification.from_dict(data['identification'])if'capabilities'indata:data['capabilities']=[Capability.from_dict(cap)forcapindata['capabilities']]returnsuper().from_dict(data)