1515
1616FILE = 'file'
1717IMAGE = 'image'
18+ AUDIO = 'audio'
1819
1920
2021class BaseModelCompatibleDict (BaseModel ):
@@ -64,9 +65,14 @@ class ContentItem(BaseModelCompatibleDict):
6465 text : Optional [str ] = None
6566 image : Optional [str ] = None
6667 file : Optional [str ] = None
68+ audio : Optional [str ] = None
6769
68- def __init__ (self , text : Optional [str ] = None , image : Optional [str ] = None , file : Optional [str ] = None ):
69- super ().__init__ (text = text , image = image , file = file )
70+ def __init__ (self ,
71+ text : Optional [str ] = None ,
72+ image : Optional [str ] = None ,
73+ file : Optional [str ] = None ,
74+ audio : Optional [str ] = None ):
75+ super ().__init__ (text = text , image = image , file = file , audio = audio )
7076
7177 @model_validator (mode = 'after' )
7278 def check_exclusivity (self ):
@@ -77,21 +83,23 @@ def check_exclusivity(self):
7783 provided_fields += 1
7884 if self .file :
7985 provided_fields += 1
86+ if self .audio :
87+ provided_fields += 1
8088
8189 if provided_fields != 1 :
82- raise ValueError ("Exactly one of 'text', 'image', or 'file ' must be provided." )
90+ raise ValueError ("Exactly one of 'text', 'image', 'file', or 'audio ' must be provided." )
8391 return self
8492
8593 def __repr__ (self ):
8694 return f'ContentItem({ self .model_dump ()} )'
8795
88- def get_type_and_value (self ) -> Tuple [Literal ['text' , 'image' , 'file' ], str ]:
96+ def get_type_and_value (self ) -> Tuple [Literal ['text' , 'image' , 'file' , 'audio' ], str ]:
8997 (t , v ), = self .model_dump ().items ()
90- assert t in ('text' , 'image' , 'file' )
98+ assert t in ('text' , 'image' , 'file' , 'audio' )
9199 return t , v
92100
93101 @property
94- def type (self ) -> Literal ['text' , 'image' , 'file' ]:
102+ def type (self ) -> Literal ['text' , 'image' , 'file' , 'audio' ]:
95103 t , v = self .get_type_and_value ()
96104 return t
97105
0 commit comments