syllable-sdk 0.44.17__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 (217) 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 -4
  212. syllable_sdk/utils/enums.py +60 -0
  213. syllable_sdk/utils/requestbodies.py +3 -3
  214. syllable_sdk/utils/serializers.py +0 -20
  215. {syllable_sdk-0.44.17.dist-info → syllable_sdk-0.44.24.dist-info}/METADATA +1 -1
  216. {syllable_sdk-0.44.17.dist-info → syllable_sdk-0.44.24.dist-info}/RECORD +217 -216
  217. {syllable_sdk-0.44.17.dist-info → syllable_sdk-0.44.24.dist-info}/WHEEL +0 -0
@@ -94,47 +94,46 @@ class PostListDashboardRequest(BaseModel):
94
94
 
95
95
  @model_serializer(mode="wrap")
96
96
  def serialize_model(self, handler):
97
- optional_fields = [
98
- "page",
99
- "limit",
100
- "search_fields",
101
- "search_field_values",
102
- "order_by",
103
- "order_by_direction",
104
- "fields",
105
- "start_datetime",
106
- "end_datetime",
107
- ]
108
- nullable_fields = [
109
- "page",
110
- "order_by",
111
- "order_by_direction",
112
- "fields",
113
- "start_datetime",
114
- "end_datetime",
115
- ]
116
- null_default_fields = []
117
-
97
+ optional_fields = set(
98
+ [
99
+ "page",
100
+ "limit",
101
+ "search_fields",
102
+ "search_field_values",
103
+ "order_by",
104
+ "order_by_direction",
105
+ "fields",
106
+ "start_datetime",
107
+ "end_datetime",
108
+ ]
109
+ )
110
+ nullable_fields = set(
111
+ [
112
+ "page",
113
+ "order_by",
114
+ "order_by_direction",
115
+ "fields",
116
+ "start_datetime",
117
+ "end_datetime",
118
+ ]
119
+ )
118
120
  serialized = handler(self)
119
-
120
121
  m = {}
121
122
 
122
123
  for n, f in type(self).model_fields.items():
123
124
  k = f.alias or n
124
125
  val = serialized.get(k)
125
- serialized.pop(k, None)
126
-
127
- optional_nullable = k in optional_fields and k in nullable_fields
128
- is_set = (
129
- self.__pydantic_fields_set__.intersection({n})
130
- or k in null_default_fields
131
- ) # pylint: disable=no-member
132
-
133
- if val is not None and val != UNSET_SENTINEL:
134
- m[k] = val
135
- elif val != UNSET_SENTINEL and (
136
- not k in optional_fields or (optional_nullable and is_set)
137
- ):
138
- m[k] = val
126
+ is_nullable_and_explicitly_set = (
127
+ k in nullable_fields
128
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
129
+ )
130
+
131
+ if val != UNSET_SENTINEL:
132
+ if (
133
+ val is not None
134
+ or k not in optional_fields
135
+ or is_nullable_and_explicitly_set
136
+ ):
137
+ m[k] = val
139
138
 
140
139
  return m
@@ -74,43 +74,37 @@ class PromptCreateRequest(BaseModel):
74
74
 
75
75
  @model_serializer(mode="wrap")
76
76
  def serialize_model(self, handler):
77
- optional_fields = [
78
- "description",
79
- "context",
80
- "tools",
81
- "session_end_enabled",
82
- "session_end_tool_id",
83
- "edit_comments",
84
- "include_default_tools",
85
- ]
86
- nullable_fields = [
87
- "description",
88
- "context",
89
- "session_end_tool_id",
90
- "edit_comments",
91
- ]
92
- null_default_fields = []
93
-
77
+ optional_fields = set(
78
+ [
79
+ "description",
80
+ "context",
81
+ "tools",
82
+ "session_end_enabled",
83
+ "session_end_tool_id",
84
+ "edit_comments",
85
+ "include_default_tools",
86
+ ]
87
+ )
88
+ nullable_fields = set(
89
+ ["description", "context", "session_end_tool_id", "edit_comments"]
90
+ )
94
91
  serialized = handler(self)
95
-
96
92
  m = {}
97
93
 
98
94
  for n, f in type(self).model_fields.items():
99
95
  k = f.alias or n
100
96
  val = serialized.get(k)
101
- serialized.pop(k, None)
102
-
103
- optional_nullable = k in optional_fields and k in nullable_fields
104
- is_set = (
105
- self.__pydantic_fields_set__.intersection({n})
106
- or k in null_default_fields
107
- ) # pylint: disable=no-member
108
-
109
- if val is not None and val != UNSET_SENTINEL:
110
- m[k] = val
111
- elif val != UNSET_SENTINEL and (
112
- not k in optional_fields or (optional_nullable and is_set)
113
- ):
114
- m[k] = val
97
+ is_nullable_and_explicitly_set = (
98
+ k in nullable_fields
99
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
100
+ )
101
+
102
+ if val != UNSET_SENTINEL:
103
+ if (
104
+ val is not None
105
+ or k not in optional_fields
106
+ or is_nullable_and_explicitly_set
107
+ ):
108
+ m[k] = val
115
109
 
116
110
  return m
@@ -89,41 +89,35 @@ class PromptHistory(BaseModel):
89
89
 
90
90
  @model_serializer(mode="wrap")
91
91
  def serialize_model(self, handler):
92
- optional_fields = [
93
- "prompt_description",
94
- "llm_config",
95
- "comments",
96
- "linked_tools",
97
- "session_end_tool",
98
- ]
99
- nullable_fields = [
100
- "prompt_description",
101
- "llm_config",
102
- "comments",
103
- "session_end_tool",
104
- ]
105
- null_default_fields = []
106
-
92
+ optional_fields = set(
93
+ [
94
+ "prompt_description",
95
+ "llm_config",
96
+ "comments",
97
+ "linked_tools",
98
+ "session_end_tool",
99
+ ]
100
+ )
101
+ nullable_fields = set(
102
+ ["prompt_description", "llm_config", "comments", "session_end_tool"]
103
+ )
107
104
  serialized = handler(self)
108
-
109
105
  m = {}
110
106
 
111
107
  for n, f in type(self).model_fields.items():
112
108
  k = f.alias or n
113
109
  val = serialized.get(k)
114
- serialized.pop(k, None)
115
-
116
- optional_nullable = k in optional_fields and k in nullable_fields
117
- is_set = (
118
- self.__pydantic_fields_set__.intersection({n})
119
- or k in null_default_fields
120
- ) # pylint: disable=no-member
121
-
122
- if val is not None and val != UNSET_SENTINEL:
123
- m[k] = val
124
- elif val != UNSET_SENTINEL and (
125
- not k in optional_fields or (optional_nullable and is_set)
126
- ):
127
- m[k] = val
110
+ is_nullable_and_explicitly_set = (
111
+ k in nullable_fields
112
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
113
+ )
114
+
115
+ if val != UNSET_SENTINEL:
116
+ if (
117
+ val is not None
118
+ or k not in optional_fields
119
+ or is_nullable_and_explicitly_set
120
+ ):
121
+ m[k] = val
128
122
 
129
123
  return m
@@ -54,37 +54,27 @@ class PromptLlmConfig(BaseModel):
54
54
 
55
55
  @model_serializer(mode="wrap")
56
56
  def serialize_model(self, handler):
57
- optional_fields = [
58
- "provider",
59
- "model",
60
- "version",
61
- "api_version",
62
- "temperature",
63
- "seed",
64
- ]
65
- nullable_fields = ["version", "api_version", "temperature", "seed"]
66
- null_default_fields = []
67
-
57
+ optional_fields = set(
58
+ ["provider", "model", "version", "api_version", "temperature", "seed"]
59
+ )
60
+ nullable_fields = set(["version", "api_version", "temperature", "seed"])
68
61
  serialized = handler(self)
69
-
70
62
  m = {}
71
63
 
72
64
  for n, f in type(self).model_fields.items():
73
65
  k = f.alias or n
74
66
  val = serialized.get(k)
75
- serialized.pop(k, None)
76
-
77
- optional_nullable = k in optional_fields and k in nullable_fields
78
- is_set = (
79
- self.__pydantic_fields_set__.intersection({n})
80
- or k in null_default_fields
81
- ) # pylint: disable=no-member
82
-
83
- if val is not None and val != UNSET_SENTINEL:
84
- m[k] = val
85
- elif val != UNSET_SENTINEL and (
86
- not k in optional_fields or (optional_nullable and is_set)
87
- ):
88
- m[k] = val
67
+ is_nullable_and_explicitly_set = (
68
+ k in nullable_fields
69
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
70
+ )
71
+
72
+ if val != UNSET_SENTINEL:
73
+ if (
74
+ val is not None
75
+ or k not in optional_fields
76
+ or is_nullable_and_explicitly_set
77
+ ):
78
+ m[k] = val
89
79
 
90
80
  return m
@@ -122,53 +122,52 @@ class PromptResponse(BaseModel):
122
122
 
123
123
  @model_serializer(mode="wrap")
124
124
  def serialize_model(self, handler):
125
- optional_fields = [
126
- "description",
127
- "context",
128
- "tools",
129
- "session_end_enabled",
130
- "session_end_tool_id",
131
- "edit_comments",
132
- "last_updated_by",
133
- "session_end_tool",
134
- "agent_count",
135
- "version_number",
136
- "tools_full",
137
- ]
138
- nullable_fields = [
139
- "description",
140
- "context",
141
- "session_end_tool_id",
142
- "edit_comments",
143
- "last_updated",
144
- "last_updated_by",
145
- "session_end_tool",
146
- "agent_count",
147
- "version_number",
148
- "tools_full",
149
- ]
150
- null_default_fields = []
151
-
125
+ optional_fields = set(
126
+ [
127
+ "description",
128
+ "context",
129
+ "tools",
130
+ "session_end_enabled",
131
+ "session_end_tool_id",
132
+ "edit_comments",
133
+ "last_updated_by",
134
+ "session_end_tool",
135
+ "agent_count",
136
+ "version_number",
137
+ "tools_full",
138
+ ]
139
+ )
140
+ nullable_fields = set(
141
+ [
142
+ "description",
143
+ "context",
144
+ "session_end_tool_id",
145
+ "edit_comments",
146
+ "last_updated",
147
+ "last_updated_by",
148
+ "session_end_tool",
149
+ "agent_count",
150
+ "version_number",
151
+ "tools_full",
152
+ ]
153
+ )
152
154
  serialized = handler(self)
153
-
154
155
  m = {}
155
156
 
156
157
  for n, f in type(self).model_fields.items():
157
158
  k = f.alias or n
158
159
  val = serialized.get(k)
159
- serialized.pop(k, None)
160
-
161
- optional_nullable = k in optional_fields and k in nullable_fields
162
- is_set = (
163
- self.__pydantic_fields_set__.intersection({n})
164
- or k in null_default_fields
165
- ) # pylint: disable=no-member
166
-
167
- if val is not None and val != UNSET_SENTINEL:
168
- m[k] = val
169
- elif val != UNSET_SENTINEL and (
170
- not k in optional_fields or (optional_nullable and is_set)
171
- ):
172
- m[k] = val
160
+ is_nullable_and_explicitly_set = (
161
+ k in nullable_fields
162
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
163
+ )
164
+
165
+ if val != UNSET_SENTINEL:
166
+ if (
167
+ val is not None
168
+ or k not in optional_fields
169
+ or is_nullable_and_explicitly_set
170
+ ):
171
+ m[k] = val
173
172
 
174
173
  return m
@@ -94,47 +94,46 @@ class PromptsListRequest(BaseModel):
94
94
 
95
95
  @model_serializer(mode="wrap")
96
96
  def serialize_model(self, handler):
97
- optional_fields = [
98
- "page",
99
- "limit",
100
- "search_fields",
101
- "search_field_values",
102
- "order_by",
103
- "order_by_direction",
104
- "fields",
105
- "start_datetime",
106
- "end_datetime",
107
- ]
108
- nullable_fields = [
109
- "page",
110
- "order_by",
111
- "order_by_direction",
112
- "fields",
113
- "start_datetime",
114
- "end_datetime",
115
- ]
116
- null_default_fields = []
117
-
97
+ optional_fields = set(
98
+ [
99
+ "page",
100
+ "limit",
101
+ "search_fields",
102
+ "search_field_values",
103
+ "order_by",
104
+ "order_by_direction",
105
+ "fields",
106
+ "start_datetime",
107
+ "end_datetime",
108
+ ]
109
+ )
110
+ nullable_fields = set(
111
+ [
112
+ "page",
113
+ "order_by",
114
+ "order_by_direction",
115
+ "fields",
116
+ "start_datetime",
117
+ "end_datetime",
118
+ ]
119
+ )
118
120
  serialized = handler(self)
119
-
120
121
  m = {}
121
122
 
122
123
  for n, f in type(self).model_fields.items():
123
124
  k = f.alias or n
124
125
  val = serialized.get(k)
125
- serialized.pop(k, None)
126
-
127
- optional_nullable = k in optional_fields and k in nullable_fields
128
- is_set = (
129
- self.__pydantic_fields_set__.intersection({n})
130
- or k in null_default_fields
131
- ) # pylint: disable=no-member
132
-
133
- if val is not None and val != UNSET_SENTINEL:
134
- m[k] = val
135
- elif val != UNSET_SENTINEL and (
136
- not k in optional_fields or (optional_nullable and is_set)
137
- ):
138
- m[k] = val
126
+ is_nullable_and_explicitly_set = (
127
+ k in nullable_fields
128
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
129
+ )
130
+
131
+ if val != UNSET_SENTINEL:
132
+ if (
133
+ val is not None
134
+ or k not in optional_fields
135
+ or is_nullable_and_explicitly_set
136
+ ):
137
+ m[k] = val
139
138
 
140
139
  return m
@@ -79,43 +79,37 @@ class PromptUpdateRequest(BaseModel):
79
79
 
80
80
  @model_serializer(mode="wrap")
81
81
  def serialize_model(self, handler):
82
- optional_fields = [
83
- "description",
84
- "context",
85
- "tools",
86
- "session_end_enabled",
87
- "session_end_tool_id",
88
- "edit_comments",
89
- "include_default_tools",
90
- ]
91
- nullable_fields = [
92
- "description",
93
- "context",
94
- "session_end_tool_id",
95
- "edit_comments",
96
- ]
97
- null_default_fields = []
98
-
82
+ optional_fields = set(
83
+ [
84
+ "description",
85
+ "context",
86
+ "tools",
87
+ "session_end_enabled",
88
+ "session_end_tool_id",
89
+ "edit_comments",
90
+ "include_default_tools",
91
+ ]
92
+ )
93
+ nullable_fields = set(
94
+ ["description", "context", "session_end_tool_id", "edit_comments"]
95
+ )
99
96
  serialized = handler(self)
100
-
101
97
  m = {}
102
98
 
103
99
  for n, f in type(self).model_fields.items():
104
100
  k = f.alias or n
105
101
  val = serialized.get(k)
106
- serialized.pop(k, None)
107
-
108
- optional_nullable = k in optional_fields and k in nullable_fields
109
- is_set = (
110
- self.__pydantic_fields_set__.intersection({n})
111
- or k in null_default_fields
112
- ) # pylint: disable=no-member
113
-
114
- if val is not None and val != UNSET_SENTINEL:
115
- m[k] = val
116
- elif val != UNSET_SENTINEL and (
117
- not k in optional_fields or (optional_nullable and is_set)
118
- ):
119
- m[k] = val
102
+ is_nullable_and_explicitly_set = (
103
+ k in nullable_fields
104
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
105
+ )
106
+
107
+ if val != UNSET_SENTINEL:
108
+ if (
109
+ val is not None
110
+ or k not in optional_fields
111
+ or is_nullable_and_explicitly_set
112
+ ):
113
+ m[k] = val
120
114
 
121
115
  return m
@@ -2,7 +2,8 @@
2
2
 
3
3
  from __future__ import annotations
4
4
  from .matchtype import MatchType
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 List, Optional
7
8
  from typing_extensions import NotRequired, TypedDict
8
9
 
@@ -43,3 +44,29 @@ class PronunciationOverride(BaseModel):
43
44
  enabled: Optional[bool] = True
44
45
 
45
46
  notes: Optional[str] = ""
47
+
48
+ @model_serializer(mode="wrap")
49
+ def serialize_model(self, handler):
50
+ optional_fields = set(
51
+ [
52
+ "languages",
53
+ "provider",
54
+ "voice",
55
+ "match_type",
56
+ "match_options",
57
+ "enabled",
58
+ "notes",
59
+ ]
60
+ )
61
+ serialized = handler(self)
62
+ m = {}
63
+
64
+ for n, f in type(self).model_fields.items():
65
+ k = f.alias or n
66
+ val = serialized.get(k)
67
+
68
+ if val != UNSET_SENTINEL:
69
+ if val is not None or k not in optional_fields:
70
+ m[k] = val
71
+
72
+ return m
@@ -4,7 +4,8 @@ from __future__ import annotations
4
4
  from .dictionarymetadata import DictionaryMetadata, DictionaryMetadataTypedDict
5
5
  from .pronunciationoverride import PronunciationOverride, PronunciationOverrideTypedDict
6
6
  from .voicedisplayinfo import VoiceDisplayInfo, VoiceDisplayInfoTypedDict
7
- from syllable_sdk.types import BaseModel
7
+ from pydantic import model_serializer
8
+ from syllable_sdk.types import BaseModel, UNSET_SENTINEL
8
9
  from typing import Dict, List, Optional
9
10
  from typing_extensions import NotRequired, TypedDict
10
11
 
@@ -68,3 +69,19 @@ class PronunciationOverridesDictionary(BaseModel):
68
69
  type: Optional[str] = "pronunciations_v1"
69
70
 
70
71
  voices: Optional[Dict[str, VoiceDisplayInfo]] = None
72
+
73
+ @model_serializer(mode="wrap")
74
+ def serialize_model(self, handler):
75
+ optional_fields = set(["type", "voices"])
76
+ serialized = handler(self)
77
+ m = {}
78
+
79
+ for n, f in type(self).model_fields.items():
80
+ k = f.alias or n
81
+ val = serialized.get(k)
82
+
83
+ if val != UNSET_SENTINEL:
84
+ if val is not None or k not in optional_fields:
85
+ m[k] = val
86
+
87
+ return m
@@ -2,7 +2,8 @@
2
2
 
3
3
  from __future__ import annotations
4
4
  from datetime import datetime
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
 
@@ -29,3 +30,19 @@ class PronunciationsCsvUploadResponse(BaseModel):
29
30
  uploaded_by: str
30
31
 
31
32
  uploaded_at: Optional[datetime] = None
33
+
34
+ @model_serializer(mode="wrap")
35
+ def serialize_model(self, handler):
36
+ optional_fields = set(["uploaded_at"])
37
+ serialized = handler(self)
38
+ m = {}
39
+
40
+ for n, f in type(self).model_fields.items():
41
+ k = f.alias or n
42
+ val = serialized.get(k)
43
+
44
+ if val != UNSET_SENTINEL:
45
+ if val is not None or k not in optional_fields:
46
+ m[k] = val
47
+
48
+ return m