[docs]@dataclassclassIdentification(JsonSerializableDataclass):"""Represents the identification section of a conversant"""speakerUri:strserviceUrl:strorganization:Optional[str]=NoneconversationalName:Optional[str]=Nonedepartment:Optional[str]=Nonerole:Optional[str]=Nonesynopsis:Optional[str]=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")def__iter__(self)->Iterator[Tuple[str,Any]]:"""Convert Identification instance to JSON-compatible dictionary"""yield'speakerUri',self.speakerUriyield'serviceUrl',self.serviceUrlifself.organizationisnotNone:yield'organization',self.organizationifself.conversationalNameisnotNone:yield'conversationalName',self.conversationalNameifself.departmentisnotNone:yield'department',self.departmentifself.roleisnotNone:yield'role',self.roleifself.synopsisisnotNone:yield'synopsis',self.synopsis
[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',dict(self.supportedLayers)
[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'])returncls(**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',dict(self.identification)yield'capabilities',[dict(capability)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']]returncls(**data)