syllable-sdk 0.44.20__py3-none-any.whl → 0.44.24__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. syllable_sdk/_version.py +3 -3
  2. syllable_sdk/basesdk.py +20 -6
  3. syllable_sdk/models/__init__.py +5 -0
  4. syllable_sdk/models/agent_listop.py +35 -36
  5. syllable_sdk/models/agentcreate.py +38 -39
  6. syllable_sdk/models/agentresponse.py +49 -50
  7. syllable_sdk/models/agentupdate.py +38 -39
  8. syllable_sdk/models/available_targetsop.py +35 -36
  9. syllable_sdk/models/availabletarget.py +1 -17
  10. syllable_sdk/models/batchdetails.py +38 -39
  11. syllable_sdk/models/body_directory_member_bulk_load.py +18 -1
  12. syllable_sdk/models/body_insights_folder_upload_file.py +34 -1
  13. syllable_sdk/models/body_organizations_create.py +30 -19
  14. syllable_sdk/models/body_organizations_delete.py +14 -19
  15. syllable_sdk/models/body_organizations_update.py +34 -30
  16. syllable_sdk/models/body_outbound_batch_upload.py +34 -1
  17. syllable_sdk/models/body_pronunciations_upload_csv.py +18 -1
  18. syllable_sdk/models/bridgephrasesconfig.py +20 -1
  19. syllable_sdk/models/callaction.py +14 -19
  20. syllable_sdk/models/celexpression.py +18 -1
  21. syllable_sdk/models/channel.py +14 -19
  22. syllable_sdk/models/channel_targets_listop.py +35 -36
  23. syllable_sdk/models/channelconfigview.py +20 -19
  24. syllable_sdk/models/channels_listop.py +35 -36
  25. syllable_sdk/models/channeltargetcreaterequest.py +14 -19
  26. syllable_sdk/models/channeltargetresponse.py +14 -19
  27. syllable_sdk/models/channeltargetupdaterequest.py +14 -19
  28. syllable_sdk/models/communicationbatch.py +36 -37
  29. syllable_sdk/models/communicationbatchinput.py +14 -19
  30. syllable_sdk/models/communicationbatchupdate.py +14 -19
  31. syllable_sdk/models/communicationrequestresult.py +37 -38
  32. syllable_sdk/models/conditionaltext.py +14 -19
  33. syllable_sdk/models/conditionalvalue.py +14 -19
  34. syllable_sdk/models/context.py +14 -19
  35. syllable_sdk/models/contexttaskmetadata.py +14 -19
  36. syllable_sdk/models/contexttoolinfo.py +14 -19
  37. syllable_sdk/models/conversation.py +44 -45
  38. syllable_sdk/models/conversations_listop.py +35 -36
  39. syllable_sdk/models/custom_messages_listop.py +35 -36
  40. syllable_sdk/models/custommessagecreaterequest.py +14 -19
  41. syllable_sdk/models/custommessageresponse.py +14 -19
  42. syllable_sdk/models/custommessagerule.py +18 -19
  43. syllable_sdk/models/custommessageupdaterequest.py +14 -19
  44. syllable_sdk/models/daotoolresponse.py +18 -29
  45. syllable_sdk/models/data_sources_listop.py +35 -36
  46. syllable_sdk/models/datasourcecreaterequest.py +14 -19
  47. syllable_sdk/models/datasourcedetailresponse.py +18 -24
  48. syllable_sdk/models/datasourcemetadataresponse.py +18 -24
  49. syllable_sdk/models/datasourceupdaterequest.py +16 -19
  50. syllable_sdk/models/dialogtoolcall.py +1 -17
  51. syllable_sdk/models/dictionarymetadata.py +18 -1
  52. syllable_sdk/models/directory_member_createop.py +18 -1
  53. syllable_sdk/models/directory_member_downloadop.py +18 -1
  54. syllable_sdk/models/directory_member_get_by_idop.py +18 -1
  55. syllable_sdk/models/directory_member_listop.py +36 -37
  56. syllable_sdk/models/directory_member_test_extensionop.py +13 -18
  57. syllable_sdk/models/directory_member_updateop.py +18 -1
  58. syllable_sdk/models/directoryextension.py +14 -19
  59. syllable_sdk/models/directoryextensionnumber.py +14 -19
  60. syllable_sdk/models/directorymember.py +14 -19
  61. syllable_sdk/models/directorymembercreate.py +14 -19
  62. syllable_sdk/models/directorymembertestresponse.py +14 -19
  63. syllable_sdk/models/directorymemberupdate.py +14 -19
  64. syllable_sdk/models/emailconfigurations.py +19 -0
  65. syllable_sdk/models/event.py +38 -39
  66. syllable_sdk/models/events_listop.py +35 -36
  67. syllable_sdk/models/eventtask.py +16 -28
  68. syllable_sdk/models/eventtaskevents.py +14 -19
  69. syllable_sdk/models/expressiontask.py +30 -39
  70. syllable_sdk/models/expressiontaskevents.py +14 -19
  71. syllable_sdk/models/folderdetails.py +14 -19
  72. syllable_sdk/models/get_bridge_phrases_configop.py +14 -19
  73. syllable_sdk/models/getvalueaction.py +16 -19
  74. syllable_sdk/models/incident_listop.py +35 -36
  75. syllable_sdk/models/incidentcreaterequest.py +18 -19
  76. syllable_sdk/models/incidentresponse.py +31 -32
  77. syllable_sdk/models/incidentupdaterequest.py +18 -19
  78. syllable_sdk/models/incrementaction.py +14 -19
  79. syllable_sdk/models/inputparameter.py +27 -36
  80. syllable_sdk/models/insight_tool_listop.py +35 -36
  81. syllable_sdk/models/insights_folder_listop.py +35 -36
  82. syllable_sdk/models/insights_folder_upload_fileop.py +33 -34
  83. syllable_sdk/models/insights_listop.py +35 -36
  84. syllable_sdk/models/insights_upload_list_filesop.py +35 -36
  85. syllable_sdk/models/insights_workflow_listop.py +35 -36
  86. syllable_sdk/models/insightsfolder.py +14 -19
  87. syllable_sdk/models/insightsfolderinput.py +14 -19
  88. syllable_sdk/models/insightsoutput.py +26 -32
  89. syllable_sdk/models/insightsuploadfile.py +37 -38
  90. syllable_sdk/models/insightsworkflowqueuesession.py +14 -19
  91. syllable_sdk/models/insighttooloutput.py +14 -19
  92. syllable_sdk/models/insighttooltestinput.py +14 -19
  93. syllable_sdk/models/insightworkflowcondition.py +34 -35
  94. syllable_sdk/models/insightworkflowinput.py +14 -19
  95. syllable_sdk/models/insightworkflowoutput.py +22 -25
  96. syllable_sdk/models/inspectlatencyresponse.py +18 -1
  97. syllable_sdk/models/internaltool.py +18 -1
  98. syllable_sdk/models/jmespathexpression.py +18 -1
  99. syllable_sdk/models/language_groups_listop.py +35 -36
  100. syllable_sdk/models/languageconfig.py +14 -19
  101. syllable_sdk/models/languagegroupcreaterequest.py +14 -19
  102. syllable_sdk/models/languagegroupresponse.py +14 -19
  103. syllable_sdk/models/languagegroupupdaterequest.py +14 -19
  104. syllable_sdk/models/languagesamplecreaterequest.py +16 -24
  105. syllable_sdk/models/latencyentry.py +14 -19
  106. syllable_sdk/models/listresponse_agentresponse_.py +14 -19
  107. syllable_sdk/models/listresponse_availabletarget_.py +14 -19
  108. syllable_sdk/models/listresponse_channel_.py +14 -19
  109. syllable_sdk/models/listresponse_channeltargetresponse_.py +14 -19
  110. syllable_sdk/models/listresponse_communicationbatch_.py +14 -19
  111. syllable_sdk/models/listresponse_conversation_.py +14 -19
  112. syllable_sdk/models/listresponse_custommessageresponse_.py +14 -19
  113. syllable_sdk/models/listresponse_dashboardresponse_.py +14 -19
  114. syllable_sdk/models/listresponse_datasourcemetadataresponse_.py +14 -19
  115. syllable_sdk/models/listresponse_directorymember_.py +14 -19
  116. syllable_sdk/models/listresponse_event_.py +14 -19
  117. syllable_sdk/models/listresponse_incidentresponse_.py +14 -19
  118. syllable_sdk/models/listresponse_insightsfolder_.py +14 -19
  119. syllable_sdk/models/listresponse_insightsoutput_.py +14 -19
  120. syllable_sdk/models/listresponse_insightsuploadfile_.py +14 -19
  121. syllable_sdk/models/listresponse_insighttooloutput_.py +14 -19
  122. syllable_sdk/models/listresponse_insightworkflowoutput_.py +14 -19
  123. syllable_sdk/models/listresponse_languagegroupresponse_.py +14 -19
  124. syllable_sdk/models/listresponse_outboundcampaign_.py +14 -19
  125. syllable_sdk/models/listresponse_promptresponse_.py +14 -19
  126. syllable_sdk/models/listresponse_roleresponse_.py +14 -19
  127. syllable_sdk/models/listresponse_serviceresponse_.py +14 -19
  128. syllable_sdk/models/listresponse_session_.py +14 -19
  129. syllable_sdk/models/listresponse_sessionlabel_.py +14 -19
  130. syllable_sdk/models/listresponse_toolresponse_.py +14 -19
  131. syllable_sdk/models/listresponse_userresponse_.py +14 -19
  132. syllable_sdk/models/listresponse_voicegroupresponse_.py +14 -19
  133. syllable_sdk/models/loadtoolfromfiletask.py +16 -27
  134. syllable_sdk/models/nextstep.py +14 -19
  135. syllable_sdk/models/organizationchannelconfig.py +24 -29
  136. syllable_sdk/models/organizationchannelcreaterequest.py +14 -19
  137. syllable_sdk/models/organizationchannelupdaterequest.py +14 -19
  138. syllable_sdk/models/organizationresponse.py +32 -33
  139. syllable_sdk/models/outbound_batch_listop.py +35 -36
  140. syllable_sdk/models/outbound_batch_resultsop.py +13 -18
  141. syllable_sdk/models/outbound_batch_uploadop.py +18 -1
  142. syllable_sdk/models/outbound_campaign_listop.py +35 -36
  143. syllable_sdk/models/outboundcampaign.py +47 -48
  144. syllable_sdk/models/outboundcampaigninput.py +43 -44
  145. syllable_sdk/models/permissionresponse.py +14 -19
  146. syllable_sdk/models/post_list_dashboardop.py +35 -36
  147. syllable_sdk/models/promptcreaterequest.py +26 -32
  148. syllable_sdk/models/prompthistory.py +24 -30
  149. syllable_sdk/models/promptllmconfig.py +16 -26
  150. syllable_sdk/models/promptresponse.py +41 -42
  151. syllable_sdk/models/prompts_listop.py +35 -36
  152. syllable_sdk/models/promptupdaterequest.py +26 -32
  153. syllable_sdk/models/pronunciationoverride.py +28 -1
  154. syllable_sdk/models/pronunciationoverridesdictionary.py +18 -1
  155. syllable_sdk/models/pronunciationscsvuploadresponse.py +18 -1
  156. syllable_sdk/models/rolecreaterequest.py +14 -19
  157. syllable_sdk/models/roleresponse.py +14 -19
  158. syllable_sdk/models/roles_deleteop.py +13 -18
  159. syllable_sdk/models/roles_listop.py +35 -36
  160. syllable_sdk/models/roleupdaterequest.py +14 -19
  161. syllable_sdk/models/saveaction.py +14 -19
  162. syllable_sdk/models/sayaction.py +14 -19
  163. syllable_sdk/models/security.py +18 -1
  164. syllable_sdk/models/service_listop.py +35 -36
  165. syllable_sdk/models/servicecreaterequest.py +14 -19
  166. syllable_sdk/models/serviceresponse.py +14 -19
  167. syllable_sdk/models/serviceupdaterequest.py +14 -19
  168. syllable_sdk/models/session.py +60 -61
  169. syllable_sdk/models/session_labels_listop.py +35 -36
  170. syllable_sdk/models/sessionaction.py +18 -19
  171. syllable_sdk/models/sessionlabel.py +14 -19
  172. syllable_sdk/models/sessionlabelcreate.py +14 -19
  173. syllable_sdk/models/sessionrecordingresponse.py +14 -19
  174. syllable_sdk/models/sessions_listop.py +35 -36
  175. syllable_sdk/models/sessionsummaryresponse.py +14 -19
  176. syllable_sdk/models/sessiontext.py +14 -19
  177. syllable_sdk/models/setvalueaction.py +14 -19
  178. syllable_sdk/models/statictoolparameter.py +14 -19
  179. syllable_sdk/models/step.py +18 -1
  180. syllable_sdk/models/stepeventactions.py +14 -19
  181. syllable_sdk/models/stepstask.py +25 -28
  182. syllable_sdk/models/steptools.py +14 -19
  183. syllable_sdk/models/summaryentry.py +14 -19
  184. syllable_sdk/models/supportedllm.py +14 -19
  185. syllable_sdk/models/takeoutstatusresponse.py +14 -19
  186. syllable_sdk/models/telephonyconfigurations.py +38 -39
  187. syllable_sdk/models/testmessage.py +16 -19
  188. syllable_sdk/models/testmessageresponse.py +14 -19
  189. syllable_sdk/models/tool_listop.py +35 -36
  190. syllable_sdk/models/tooldefinition.py +34 -35
  191. syllable_sdk/models/tooldetailresponse.py +18 -29
  192. syllable_sdk/models/tooloptions.py +18 -1
  193. syllable_sdk/models/toolparametertransform.py +14 -19
  194. syllable_sdk/models/toolparametertransformcondition.py +14 -19
  195. syllable_sdk/models/toolresponse.py +18 -29
  196. syllable_sdk/models/toolupdaterequest.py +14 -19
  197. syllable_sdk/models/twiliochannelconfigupdate.py +14 -19
  198. syllable_sdk/models/twiliochannelupdaterequest.py +14 -19
  199. syllable_sdk/models/update_bridge_phrases_configop.py +13 -18
  200. syllable_sdk/models/usercreaterequest.py +14 -19
  201. syllable_sdk/models/userresponse.py +30 -31
  202. syllable_sdk/models/users_listop.py +35 -36
  203. syllable_sdk/models/users_send_emailop.py +18 -1
  204. syllable_sdk/models/userupdaterequest.py +14 -19
  205. syllable_sdk/models/variable.py +38 -39
  206. syllable_sdk/models/voice_groups_listop.py +35 -36
  207. syllable_sdk/models/voicegroupcreaterequest.py +14 -19
  208. syllable_sdk/models/voicegroupresponse.py +14 -19
  209. syllable_sdk/models/voicegroupupdaterequest.py +14 -19
  210. syllable_sdk/models/voicesamplecreaterequest.py +16 -24
  211. syllable_sdk/utils/__init__.py +13 -1
  212. {syllable_sdk-0.44.20.dist-info → syllable_sdk-0.44.24.dist-info}/METADATA +1 -1
  213. {syllable_sdk-0.44.20.dist-info → syllable_sdk-0.44.24.dist-info}/RECORD +214 -213
  214. {syllable_sdk-0.44.20.dist-info → syllable_sdk-0.44.24.dist-info}/WHEEL +0 -0
@@ -90,43 +90,37 @@ class InsightsOutput(BaseModel):
90
90
 
91
91
  @model_serializer(mode="wrap")
92
92
  def serialize_model(self, handler):
93
- optional_fields = [
94
- "session_id",
95
- "upload_file_id",
96
- "string_value",
97
- "numeric_value",
98
- "created_at",
99
- "updated_at",
100
- "upload_file_metadata",
101
- ]
102
- nullable_fields = [
103
- "session_id",
104
- "upload_file_id",
105
- "string_value",
106
- "numeric_value",
107
- ]
108
- null_default_fields = []
109
-
93
+ optional_fields = set(
94
+ [
95
+ "session_id",
96
+ "upload_file_id",
97
+ "string_value",
98
+ "numeric_value",
99
+ "created_at",
100
+ "updated_at",
101
+ "upload_file_metadata",
102
+ ]
103
+ )
104
+ nullable_fields = set(
105
+ ["session_id", "upload_file_id", "string_value", "numeric_value"]
106
+ )
110
107
  serialized = handler(self)
111
-
112
108
  m = {}
113
109
 
114
110
  for n, f in type(self).model_fields.items():
115
111
  k = f.alias or n
116
112
  val = serialized.get(k)
117
- serialized.pop(k, None)
118
-
119
- optional_nullable = k in optional_fields and k in nullable_fields
120
- is_set = (
121
- self.__pydantic_fields_set__.intersection({n})
122
- or k in null_default_fields
123
- ) # pylint: disable=no-member
124
-
125
- if val is not None and val != UNSET_SENTINEL:
126
- m[k] = val
127
- elif val != UNSET_SENTINEL and (
128
- not k in optional_fields or (optional_nullable and is_set)
129
- ):
130
- m[k] = val
113
+ is_nullable_and_explicitly_set = (
114
+ k in nullable_fields
115
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
116
+ )
117
+
118
+ if val != UNSET_SENTINEL:
119
+ if (
120
+ val is not None
121
+ or k not in optional_fields
122
+ or is_nullable_and_explicitly_set
123
+ ):
124
+ m[k] = val
131
125
 
132
126
  return m
@@ -95,49 +95,48 @@ class InsightsUploadFile(BaseModel):
95
95
 
96
96
  @model_serializer(mode="wrap")
97
97
  def serialize_model(self, handler):
98
- optional_fields = [
99
- "call_id",
100
- "agent_number",
101
- "customer_number",
102
- "duration",
103
- "start_time",
104
- "end_time",
105
- "error_message",
106
- "metadata",
107
- "created_at",
108
- ]
109
- nullable_fields = [
110
- "call_id",
111
- "agent_number",
112
- "customer_number",
113
- "duration",
114
- "start_time",
115
- "end_time",
116
- "error_message",
117
- "metadata",
118
- ]
119
- null_default_fields = []
120
-
98
+ optional_fields = set(
99
+ [
100
+ "call_id",
101
+ "agent_number",
102
+ "customer_number",
103
+ "duration",
104
+ "start_time",
105
+ "end_time",
106
+ "error_message",
107
+ "metadata",
108
+ "created_at",
109
+ ]
110
+ )
111
+ nullable_fields = set(
112
+ [
113
+ "call_id",
114
+ "agent_number",
115
+ "customer_number",
116
+ "duration",
117
+ "start_time",
118
+ "end_time",
119
+ "error_message",
120
+ "metadata",
121
+ ]
122
+ )
121
123
  serialized = handler(self)
122
-
123
124
  m = {}
124
125
 
125
126
  for n, f in type(self).model_fields.items():
126
127
  k = f.alias or n
127
128
  val = serialized.get(k)
128
- serialized.pop(k, None)
129
-
130
- optional_nullable = k in optional_fields and k in nullable_fields
131
- is_set = (
132
- self.__pydantic_fields_set__.intersection({n})
133
- or k in null_default_fields
134
- ) # pylint: disable=no-member
135
-
136
- if val is not None and val != UNSET_SENTINEL:
137
- m[k] = val
138
- elif val != UNSET_SENTINEL and (
139
- not k in optional_fields or (optional_nullable and is_set)
140
- ):
141
- m[k] = val
129
+ is_nullable_and_explicitly_set = (
130
+ k in nullable_fields
131
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
132
+ )
133
+
134
+ if val != UNSET_SENTINEL:
135
+ if (
136
+ val is not None
137
+ or k not in optional_fields
138
+ or is_nullable_and_explicitly_set
139
+ ):
140
+ m[k] = val
142
141
 
143
142
  return m
@@ -38,30 +38,25 @@ class InsightsWorkflowQueueSession(BaseModel):
38
38
 
39
39
  @model_serializer(mode="wrap")
40
40
  def serialize_model(self, handler):
41
- optional_fields = ["session_id_list", "file_id_list"]
42
- nullable_fields = ["session_id_list", "file_id_list"]
43
- null_default_fields = []
44
-
41
+ optional_fields = set(["session_id_list", "file_id_list"])
42
+ nullable_fields = set(["session_id_list", "file_id_list"])
45
43
  serialized = handler(self)
46
-
47
44
  m = {}
48
45
 
49
46
  for n, f in type(self).model_fields.items():
50
47
  k = f.alias or n
51
48
  val = serialized.get(k)
52
- serialized.pop(k, None)
53
-
54
- optional_nullable = k in optional_fields and k in nullable_fields
55
- is_set = (
56
- self.__pydantic_fields_set__.intersection({n})
57
- or k in null_default_fields
58
- ) # pylint: disable=no-member
59
-
60
- if val is not None and val != UNSET_SENTINEL:
61
- m[k] = val
62
- elif val != UNSET_SENTINEL and (
63
- not k in optional_fields or (optional_nullable and is_set)
64
- ):
65
- m[k] = val
49
+ is_nullable_and_explicitly_set = (
50
+ k in nullable_fields
51
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
52
+ )
53
+
54
+ if val != UNSET_SENTINEL:
55
+ if (
56
+ val is not None
57
+ or k not in optional_fields
58
+ or is_nullable_and_explicitly_set
59
+ ):
60
+ m[k] = val
66
61
 
67
62
  return m
@@ -75,30 +75,25 @@ class InsightToolOutput(BaseModel):
75
75
 
76
76
  @model_serializer(mode="wrap")
77
77
  def serialize_model(self, handler):
78
- optional_fields = ["insight_tool_definition", "created_at", "updated_at"]
79
- nullable_fields = ["insight_tool_definition"]
80
- null_default_fields = []
81
-
78
+ optional_fields = set(["insight_tool_definition", "created_at", "updated_at"])
79
+ nullable_fields = set(["insight_tool_definition"])
82
80
  serialized = handler(self)
83
-
84
81
  m = {}
85
82
 
86
83
  for n, f in type(self).model_fields.items():
87
84
  k = f.alias or n
88
85
  val = serialized.get(k)
89
- serialized.pop(k, None)
90
-
91
- optional_nullable = k in optional_fields and k in nullable_fields
92
- is_set = (
93
- self.__pydantic_fields_set__.intersection({n})
94
- or k in null_default_fields
95
- ) # pylint: disable=no-member
96
-
97
- if val is not None and val != UNSET_SENTINEL:
98
- m[k] = val
99
- elif val != UNSET_SENTINEL and (
100
- not k in optional_fields or (optional_nullable and is_set)
101
- ):
102
- m[k] = val
86
+ is_nullable_and_explicitly_set = (
87
+ k in nullable_fields
88
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
89
+ )
90
+
91
+ if val != UNSET_SENTINEL:
92
+ if (
93
+ val is not None
94
+ or k not in optional_fields
95
+ or is_nullable_and_explicitly_set
96
+ ):
97
+ m[k] = val
103
98
 
104
99
  return m
@@ -37,30 +37,25 @@ class InsightToolTestInput(BaseModel):
37
37
 
38
38
  @model_serializer(mode="wrap")
39
39
  def serialize_model(self, handler):
40
- optional_fields = ["session_id", "upload_file_id"]
41
- nullable_fields = ["session_id", "upload_file_id"]
42
- null_default_fields = []
43
-
40
+ optional_fields = set(["session_id", "upload_file_id"])
41
+ nullable_fields = set(["session_id", "upload_file_id"])
44
42
  serialized = handler(self)
45
-
46
43
  m = {}
47
44
 
48
45
  for n, f in type(self).model_fields.items():
49
46
  k = f.alias or n
50
47
  val = serialized.get(k)
51
- serialized.pop(k, None)
52
-
53
- optional_nullable = k in optional_fields and k in nullable_fields
54
- is_set = (
55
- self.__pydantic_fields_set__.intersection({n})
56
- or k in null_default_fields
57
- ) # pylint: disable=no-member
58
-
59
- if val is not None and val != UNSET_SENTINEL:
60
- m[k] = val
61
- elif val != UNSET_SENTINEL and (
62
- not k in optional_fields or (optional_nullable and is_set)
63
- ):
64
- m[k] = val
48
+ is_nullable_and_explicitly_set = (
49
+ k in nullable_fields
50
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
51
+ )
52
+
53
+ if val != UNSET_SENTINEL:
54
+ if (
55
+ val is not None
56
+ or k not in optional_fields
57
+ or is_nullable_and_explicitly_set
58
+ ):
59
+ m[k] = val
65
60
 
66
61
  return m
@@ -74,46 +74,45 @@ class InsightWorkflowCondition(BaseModel):
74
74
 
75
75
  @model_serializer(mode="wrap")
76
76
  def serialize_model(self, handler):
77
- optional_fields = [
78
- "min_duration",
79
- "max_duration",
80
- "sample_rate",
81
- "agent_list",
82
- "prompt_list",
83
- "folder_list",
84
- "sheet_info",
85
- ]
86
- nullable_fields = [
87
- "min_duration",
88
- "max_duration",
89
- "sample_rate",
90
- "agent_list",
91
- "prompt_list",
92
- "folder_list",
93
- "sheet_info",
94
- ]
95
- null_default_fields = []
96
-
77
+ optional_fields = set(
78
+ [
79
+ "min_duration",
80
+ "max_duration",
81
+ "sample_rate",
82
+ "agent_list",
83
+ "prompt_list",
84
+ "folder_list",
85
+ "sheet_info",
86
+ ]
87
+ )
88
+ nullable_fields = set(
89
+ [
90
+ "min_duration",
91
+ "max_duration",
92
+ "sample_rate",
93
+ "agent_list",
94
+ "prompt_list",
95
+ "folder_list",
96
+ "sheet_info",
97
+ ]
98
+ )
97
99
  serialized = handler(self)
98
-
99
100
  m = {}
100
101
 
101
102
  for n, f in type(self).model_fields.items():
102
103
  k = f.alias or n
103
104
  val = serialized.get(k)
104
- serialized.pop(k, None)
105
-
106
- optional_nullable = k in optional_fields and k in nullable_fields
107
- is_set = (
108
- self.__pydantic_fields_set__.intersection({n})
109
- or k in null_default_fields
110
- ) # pylint: disable=no-member
111
-
112
- if val is not None and val != UNSET_SENTINEL:
113
- m[k] = val
114
- elif val != UNSET_SENTINEL and (
115
- not k in optional_fields or (optional_nullable and is_set)
116
- ):
117
- m[k] = val
105
+ is_nullable_and_explicitly_set = (
106
+ k in nullable_fields
107
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
108
+ )
109
+
110
+ if val != UNSET_SENTINEL:
111
+ if (
112
+ val is not None
113
+ or k not in optional_fields
114
+ or is_nullable_and_explicitly_set
115
+ ):
116
+ m[k] = val
118
117
 
119
118
  return m
@@ -63,30 +63,25 @@ class InsightWorkflowInput(BaseModel):
63
63
 
64
64
  @model_serializer(mode="wrap")
65
65
  def serialize_model(self, handler):
66
- optional_fields = ["start_datetime", "end_datetime"]
67
- nullable_fields = ["start_datetime", "end_datetime"]
68
- null_default_fields = []
69
-
66
+ optional_fields = set(["start_datetime", "end_datetime"])
67
+ nullable_fields = set(["start_datetime", "end_datetime"])
70
68
  serialized = handler(self)
71
-
72
69
  m = {}
73
70
 
74
71
  for n, f in type(self).model_fields.items():
75
72
  k = f.alias or n
76
73
  val = serialized.get(k)
77
- serialized.pop(k, None)
78
-
79
- optional_nullable = k in optional_fields and k in nullable_fields
80
- is_set = (
81
- self.__pydantic_fields_set__.intersection({n})
82
- or k in null_default_fields
83
- ) # pylint: disable=no-member
84
-
85
- if val is not None and val != UNSET_SENTINEL:
86
- m[k] = val
87
- elif val != UNSET_SENTINEL and (
88
- not k in optional_fields or (optional_nullable and is_set)
89
- ):
90
- m[k] = val
74
+ is_nullable_and_explicitly_set = (
75
+ k in nullable_fields
76
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
77
+ )
78
+
79
+ if val != UNSET_SENTINEL:
80
+ if (
81
+ val is not None
82
+ or k not in optional_fields
83
+ or is_nullable_and_explicitly_set
84
+ ):
85
+ m[k] = val
91
86
 
92
87
  return m
@@ -108,36 +108,33 @@ class InsightWorkflowOutput(BaseModel):
108
108
 
109
109
  @model_serializer(mode="wrap")
110
110
  def serialize_model(self, handler):
111
- optional_fields = [
112
- "start_datetime",
113
- "end_datetime",
114
- "queue_count",
115
- "created_at",
116
- "updated_at",
117
- ]
118
- nullable_fields = ["start_datetime", "end_datetime", "queue_count"]
119
- null_default_fields = []
120
-
111
+ optional_fields = set(
112
+ [
113
+ "start_datetime",
114
+ "end_datetime",
115
+ "queue_count",
116
+ "created_at",
117
+ "updated_at",
118
+ ]
119
+ )
120
+ nullable_fields = set(["start_datetime", "end_datetime", "queue_count"])
121
121
  serialized = handler(self)
122
-
123
122
  m = {}
124
123
 
125
124
  for n, f in type(self).model_fields.items():
126
125
  k = f.alias or n
127
126
  val = serialized.get(k)
128
- serialized.pop(k, None)
129
-
130
- optional_nullable = k in optional_fields and k in nullable_fields
131
- is_set = (
132
- self.__pydantic_fields_set__.intersection({n})
133
- or k in null_default_fields
134
- ) # pylint: disable=no-member
135
-
136
- if val is not None and val != UNSET_SENTINEL:
137
- m[k] = val
138
- elif val != UNSET_SENTINEL and (
139
- not k in optional_fields or (optional_nullable and is_set)
140
- ):
141
- m[k] = val
127
+ is_nullable_and_explicitly_set = (
128
+ k in nullable_fields
129
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
130
+ )
131
+
132
+ if val != UNSET_SENTINEL:
133
+ if (
134
+ val is not None
135
+ or k not in optional_fields
136
+ or is_nullable_and_explicitly_set
137
+ ):
138
+ m[k] = val
142
139
 
143
140
  return m
@@ -3,7 +3,8 @@
3
3
  from __future__ import annotations
4
4
  from .latencyentry import LatencyEntry, LatencyEntryTypedDict
5
5
  from .summaryentry import SummaryEntry, SummaryEntryTypedDict
6
- from syllable_sdk.types import BaseModel
6
+ from pydantic import model_serializer
7
+ from syllable_sdk.types import BaseModel, UNSET_SENTINEL
7
8
  from typing import List, Optional
8
9
  from typing_extensions import NotRequired, TypedDict
9
10
 
@@ -30,3 +31,19 @@ class InspectLatencyResponse(BaseModel):
30
31
  timeline: List[LatencyEntry]
31
32
 
32
33
  summary: Optional[List[SummaryEntry]] = None
34
+
35
+ @model_serializer(mode="wrap")
36
+ def serialize_model(self, handler):
37
+ optional_fields = set(["summary"])
38
+ serialized = handler(self)
39
+ m = {}
40
+
41
+ for n, f in type(self).model_fields.items():
42
+ k = f.alias or n
43
+ val = serialized.get(k)
44
+
45
+ if val != UNSET_SENTINEL:
46
+ if val is not None or k not in optional_fields:
47
+ m[k] = val
48
+
49
+ return m
@@ -3,8 +3,9 @@
3
3
  from __future__ import annotations
4
4
  from .toolfunction import ToolFunction, ToolFunctionTypedDict
5
5
  import pydantic
6
+ from pydantic import model_serializer
6
7
  from pydantic.functional_validators import AfterValidator
7
- from syllable_sdk.types import BaseModel
8
+ from syllable_sdk.types import BaseModel, UNSET_SENTINEL
8
9
  from syllable_sdk.utils import validate_const
9
10
  from typing import Literal, Optional
10
11
  from typing_extensions import Annotated, TypedDict
@@ -40,3 +41,19 @@ class InternalTool(BaseModel):
40
41
  pydantic.Field(alias="type"),
41
42
  ] = "function"
42
43
  r"""Always `function`."""
44
+
45
+ @model_serializer(mode="wrap")
46
+ def serialize_model(self, handler):
47
+ optional_fields = set(["type"])
48
+ serialized = handler(self)
49
+ m = {}
50
+
51
+ for n, f in type(self).model_fields.items():
52
+ k = f.alias or n
53
+ val = serialized.get(k)
54
+
55
+ if val != UNSET_SENTINEL:
56
+ if val is not None or k not in optional_fields:
57
+ m[k] = val
58
+
59
+ return m
@@ -2,7 +2,8 @@
2
2
 
3
3
  from __future__ import annotations
4
4
  from enum import Enum
5
- from syllable_sdk.types import BaseModel
5
+ from pydantic import model_serializer
6
+ from syllable_sdk.types import BaseModel, UNSET_SENTINEL
6
7
  from typing import Optional
7
8
  from typing_extensions import NotRequired, TypedDict
8
9
 
@@ -31,3 +32,19 @@ class JMESPathExpression(BaseModel):
31
32
 
32
33
  type: Optional[JMESPathExpressionType] = JMESPathExpressionType.JP
33
34
  r"""JMESPath expression."""
35
+
36
+ @model_serializer(mode="wrap")
37
+ def serialize_model(self, handler):
38
+ optional_fields = set(["type"])
39
+ serialized = handler(self)
40
+ m = {}
41
+
42
+ for n, f in type(self).model_fields.items():
43
+ k = f.alias or n
44
+ val = serialized.get(k)
45
+
46
+ if val != UNSET_SENTINEL:
47
+ if val is not None or k not in optional_fields:
48
+ m[k] = val
49
+
50
+ return m