orq-ai-sdk 4.2.0rc28__py3-none-any.whl → 4.2.6__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 (167) hide show
  1. orq_ai_sdk/_hooks/globalhook.py +0 -1
  2. orq_ai_sdk/_version.py +3 -3
  3. orq_ai_sdk/audio.py +30 -0
  4. orq_ai_sdk/basesdk.py +20 -6
  5. orq_ai_sdk/chat.py +22 -0
  6. orq_ai_sdk/completions.py +332 -0
  7. orq_ai_sdk/contacts.py +43 -855
  8. orq_ai_sdk/deployments.py +61 -0
  9. orq_ai_sdk/edits.py +258 -0
  10. orq_ai_sdk/embeddings.py +238 -0
  11. orq_ai_sdk/generations.py +272 -0
  12. orq_ai_sdk/identities.py +1037 -0
  13. orq_ai_sdk/images.py +28 -0
  14. orq_ai_sdk/models/__init__.py +5341 -737
  15. orq_ai_sdk/models/actionreviewedstreamingevent.py +18 -1
  16. orq_ai_sdk/models/actionreviewrequestedstreamingevent.py +44 -1
  17. orq_ai_sdk/models/agenterroredstreamingevent.py +18 -1
  18. orq_ai_sdk/models/agentinactivestreamingevent.py +168 -70
  19. orq_ai_sdk/models/agentmessagecreatedstreamingevent.py +18 -2
  20. orq_ai_sdk/models/agentresponsemessage.py +18 -2
  21. orq_ai_sdk/models/agentstartedstreamingevent.py +127 -2
  22. orq_ai_sdk/models/agentthoughtstreamingevent.py +178 -211
  23. orq_ai_sdk/models/conversationresponse.py +31 -20
  24. orq_ai_sdk/models/conversationwithmessagesresponse.py +31 -20
  25. orq_ai_sdk/models/createagentrequestop.py +1922 -384
  26. orq_ai_sdk/models/createagentresponse.py +147 -91
  27. orq_ai_sdk/models/createagentresponserequestop.py +111 -2
  28. orq_ai_sdk/models/createchatcompletionop.py +1375 -861
  29. orq_ai_sdk/models/createchunkop.py +46 -19
  30. orq_ai_sdk/models/createcompletionop.py +1890 -0
  31. orq_ai_sdk/models/createcontactop.py +45 -56
  32. orq_ai_sdk/models/createconversationop.py +61 -39
  33. orq_ai_sdk/models/createconversationresponseop.py +68 -4
  34. orq_ai_sdk/models/createdatasetitemop.py +424 -80
  35. orq_ai_sdk/models/createdatasetop.py +19 -2
  36. orq_ai_sdk/models/createdatasourceop.py +92 -26
  37. orq_ai_sdk/models/createembeddingop.py +384 -0
  38. orq_ai_sdk/models/createevalop.py +552 -24
  39. orq_ai_sdk/models/createidentityop.py +176 -0
  40. orq_ai_sdk/models/createimageeditop.py +504 -0
  41. orq_ai_sdk/models/createimageop.py +208 -117
  42. orq_ai_sdk/models/createimagevariationop.py +486 -0
  43. orq_ai_sdk/models/createknowledgeop.py +186 -121
  44. orq_ai_sdk/models/creatememorydocumentop.py +50 -1
  45. orq_ai_sdk/models/creatememoryop.py +34 -21
  46. orq_ai_sdk/models/creatememorystoreop.py +34 -1
  47. orq_ai_sdk/models/createmoderationop.py +521 -0
  48. orq_ai_sdk/models/createpromptop.py +2748 -1252
  49. orq_ai_sdk/models/creatererankop.py +416 -0
  50. orq_ai_sdk/models/createresponseop.py +2567 -0
  51. orq_ai_sdk/models/createspeechop.py +316 -0
  52. orq_ai_sdk/models/createtoolop.py +537 -12
  53. orq_ai_sdk/models/createtranscriptionop.py +562 -0
  54. orq_ai_sdk/models/createtranslationop.py +540 -0
  55. orq_ai_sdk/models/datapart.py +18 -1
  56. orq_ai_sdk/models/deletechunksop.py +34 -1
  57. orq_ai_sdk/models/{deletecontactop.py → deleteidentityop.py} +9 -9
  58. orq_ai_sdk/models/deletepromptop.py +26 -0
  59. orq_ai_sdk/models/deploymentcreatemetricop.py +362 -76
  60. orq_ai_sdk/models/deploymentgetconfigop.py +635 -194
  61. orq_ai_sdk/models/deploymentinvokeop.py +168 -173
  62. orq_ai_sdk/models/deploymentsop.py +195 -58
  63. orq_ai_sdk/models/deploymentstreamop.py +652 -304
  64. orq_ai_sdk/models/errorpart.py +18 -1
  65. orq_ai_sdk/models/filecontentpartschema.py +18 -1
  66. orq_ai_sdk/models/filegetop.py +19 -2
  67. orq_ai_sdk/models/filelistop.py +35 -2
  68. orq_ai_sdk/models/filepart.py +50 -1
  69. orq_ai_sdk/models/fileuploadop.py +51 -2
  70. orq_ai_sdk/models/generateconversationnameop.py +31 -20
  71. orq_ai_sdk/models/get_v2_evaluators_id_versionsop.py +34 -1
  72. orq_ai_sdk/models/get_v2_tools_tool_id_versions_version_id_op.py +18 -1
  73. orq_ai_sdk/models/get_v2_tools_tool_id_versionsop.py +34 -1
  74. orq_ai_sdk/models/getallmemoriesop.py +34 -21
  75. orq_ai_sdk/models/getallmemorydocumentsop.py +42 -1
  76. orq_ai_sdk/models/getallmemorystoresop.py +34 -1
  77. orq_ai_sdk/models/getallpromptsop.py +1690 -230
  78. orq_ai_sdk/models/getalltoolsop.py +325 -8
  79. orq_ai_sdk/models/getchunkscountop.py +34 -1
  80. orq_ai_sdk/models/getevalsop.py +395 -43
  81. orq_ai_sdk/models/getonechunkop.py +14 -19
  82. orq_ai_sdk/models/getoneknowledgeop.py +116 -96
  83. orq_ai_sdk/models/getonepromptop.py +1673 -230
  84. orq_ai_sdk/models/getpromptversionop.py +1670 -216
  85. orq_ai_sdk/models/imagecontentpartschema.py +50 -1
  86. orq_ai_sdk/models/internal/globals.py +18 -1
  87. orq_ai_sdk/models/invokeagentop.py +140 -2
  88. orq_ai_sdk/models/invokedeploymentrequest.py +418 -80
  89. orq_ai_sdk/models/invokeevalop.py +160 -131
  90. orq_ai_sdk/models/listagentsop.py +793 -166
  91. orq_ai_sdk/models/listchunksop.py +32 -19
  92. orq_ai_sdk/models/listchunkspaginatedop.py +46 -19
  93. orq_ai_sdk/models/listconversationsop.py +18 -1
  94. orq_ai_sdk/models/listdatasetdatapointsop.py +252 -42
  95. orq_ai_sdk/models/listdatasetsop.py +35 -2
  96. orq_ai_sdk/models/listdatasourcesop.py +35 -26
  97. orq_ai_sdk/models/{listcontactsop.py → listidentitiesop.py} +89 -79
  98. orq_ai_sdk/models/listknowledgebasesop.py +132 -96
  99. orq_ai_sdk/models/listmodelsop.py +1 -0
  100. orq_ai_sdk/models/listpromptversionsop.py +1684 -216
  101. orq_ai_sdk/models/parseop.py +161 -17
  102. orq_ai_sdk/models/partdoneevent.py +19 -2
  103. orq_ai_sdk/models/post_v2_router_ocrop.py +408 -0
  104. orq_ai_sdk/models/publiccontact.py +27 -4
  105. orq_ai_sdk/models/publicidentity.py +62 -0
  106. orq_ai_sdk/models/reasoningpart.py +19 -2
  107. orq_ai_sdk/models/refusalpartschema.py +18 -1
  108. orq_ai_sdk/models/remoteconfigsgetconfigop.py +34 -1
  109. orq_ai_sdk/models/responsedoneevent.py +114 -84
  110. orq_ai_sdk/models/responsestartedevent.py +18 -1
  111. orq_ai_sdk/models/retrieveagentrequestop.py +787 -166
  112. orq_ai_sdk/models/retrievedatapointop.py +236 -42
  113. orq_ai_sdk/models/retrievedatasetop.py +19 -2
  114. orq_ai_sdk/models/retrievedatasourceop.py +17 -26
  115. orq_ai_sdk/models/{retrievecontactop.py → retrieveidentityop.py} +38 -41
  116. orq_ai_sdk/models/retrievememorydocumentop.py +18 -1
  117. orq_ai_sdk/models/retrievememoryop.py +18 -21
  118. orq_ai_sdk/models/retrievememorystoreop.py +18 -1
  119. orq_ai_sdk/models/retrievetoolop.py +309 -8
  120. orq_ai_sdk/models/runagentop.py +1451 -197
  121. orq_ai_sdk/models/searchknowledgeop.py +108 -1
  122. orq_ai_sdk/models/security.py +18 -1
  123. orq_ai_sdk/models/streamagentop.py +93 -2
  124. orq_ai_sdk/models/streamrunagentop.py +1428 -195
  125. orq_ai_sdk/models/textcontentpartschema.py +34 -1
  126. orq_ai_sdk/models/thinkingconfigenabledschema.py +18 -1
  127. orq_ai_sdk/models/toolcallpart.py +18 -1
  128. orq_ai_sdk/models/tooldoneevent.py +18 -1
  129. orq_ai_sdk/models/toolexecutionfailedstreamingevent.py +50 -1
  130. orq_ai_sdk/models/toolexecutionfinishedstreamingevent.py +34 -1
  131. orq_ai_sdk/models/toolexecutionstartedstreamingevent.py +34 -1
  132. orq_ai_sdk/models/toolresultpart.py +18 -1
  133. orq_ai_sdk/models/toolreviewrequestedevent.py +18 -1
  134. orq_ai_sdk/models/toolstartedevent.py +18 -1
  135. orq_ai_sdk/models/updateagentop.py +1951 -404
  136. orq_ai_sdk/models/updatechunkop.py +46 -19
  137. orq_ai_sdk/models/updateconversationop.py +61 -39
  138. orq_ai_sdk/models/updatedatapointop.py +424 -80
  139. orq_ai_sdk/models/updatedatasetop.py +51 -2
  140. orq_ai_sdk/models/updatedatasourceop.py +17 -26
  141. orq_ai_sdk/models/updateevalop.py +577 -16
  142. orq_ai_sdk/models/{updatecontactop.py → updateidentityop.py} +78 -68
  143. orq_ai_sdk/models/updateknowledgeop.py +234 -190
  144. orq_ai_sdk/models/updatememorydocumentop.py +50 -1
  145. orq_ai_sdk/models/updatememoryop.py +50 -21
  146. orq_ai_sdk/models/updatememorystoreop.py +66 -1
  147. orq_ai_sdk/models/updatepromptop.py +2844 -1450
  148. orq_ai_sdk/models/updatetoolop.py +592 -9
  149. orq_ai_sdk/models/usermessagerequest.py +18 -2
  150. orq_ai_sdk/moderations.py +218 -0
  151. orq_ai_sdk/orq_completions.py +660 -0
  152. orq_ai_sdk/orq_responses.py +398 -0
  153. orq_ai_sdk/prompts.py +28 -36
  154. orq_ai_sdk/rerank.py +232 -0
  155. orq_ai_sdk/router.py +89 -641
  156. orq_ai_sdk/sdk.py +3 -0
  157. orq_ai_sdk/speech.py +251 -0
  158. orq_ai_sdk/transcriptions.py +326 -0
  159. orq_ai_sdk/translations.py +298 -0
  160. orq_ai_sdk/utils/__init__.py +13 -1
  161. orq_ai_sdk/variations.py +254 -0
  162. orq_ai_sdk-4.2.6.dist-info/METADATA +888 -0
  163. orq_ai_sdk-4.2.6.dist-info/RECORD +263 -0
  164. {orq_ai_sdk-4.2.0rc28.dist-info → orq_ai_sdk-4.2.6.dist-info}/WHEEL +2 -1
  165. orq_ai_sdk-4.2.6.dist-info/top_level.txt +1 -0
  166. orq_ai_sdk-4.2.0rc28.dist-info/METADATA +0 -867
  167. orq_ai_sdk-4.2.0rc28.dist-info/RECORD +0 -233
@@ -74,6 +74,24 @@ class ListDatasourcesRequest(BaseModel):
74
74
  ] = None
75
75
  r"""Filter datasources by status."""
76
76
 
77
+ @model_serializer(mode="wrap")
78
+ def serialize_model(self, handler):
79
+ optional_fields = set(
80
+ ["starting_after", "ending_before", "q", "limit", "status"]
81
+ )
82
+ serialized = handler(self)
83
+ m = {}
84
+
85
+ for n, f in type(self).model_fields.items():
86
+ k = f.alias or n
87
+ val = serialized.get(k)
88
+
89
+ if val != UNSET_SENTINEL:
90
+ if val is not None or k not in optional_fields:
91
+ m[k] = val
92
+
93
+ return m
94
+
77
95
 
78
96
  ListDatasourcesObject = Literal["list",]
79
97
 
@@ -130,7 +148,7 @@ class ListDatasourcesData(BaseModel):
130
148
  r"""The number of chunks in the datasource"""
131
149
 
132
150
  id: Annotated[Optional[str], pydantic.Field(alias="_id")] = (
133
- "01KEXRJ89RS0115RW9SVM0S1DR"
151
+ "01KFTTTRHV09HZE38ZPZK87MQG"
134
152
  )
135
153
  r"""The unique identifier of the data source"""
136
154
 
@@ -148,37 +166,28 @@ class ListDatasourcesData(BaseModel):
148
166
 
149
167
  @model_serializer(mode="wrap")
150
168
  def serialize_model(self, handler):
151
- optional_fields = [
152
- "_id",
153
- "description",
154
- "file_id",
155
- "created_by_id",
156
- "update_by_id",
157
- ]
158
- nullable_fields = ["file_id", "created_by_id", "update_by_id"]
159
- null_default_fields = []
160
-
169
+ optional_fields = set(
170
+ ["_id", "description", "file_id", "created_by_id", "update_by_id"]
171
+ )
172
+ nullable_fields = set(["file_id", "created_by_id", "update_by_id"])
161
173
  serialized = handler(self)
162
-
163
174
  m = {}
164
175
 
165
176
  for n, f in type(self).model_fields.items():
166
177
  k = f.alias or n
167
178
  val = serialized.get(k)
168
- serialized.pop(k, None)
169
-
170
- optional_nullable = k in optional_fields and k in nullable_fields
171
- is_set = (
172
- self.__pydantic_fields_set__.intersection({n})
173
- or k in null_default_fields
174
- ) # pylint: disable=no-member
175
-
176
- if val is not None and val != UNSET_SENTINEL:
177
- m[k] = val
178
- elif val != UNSET_SENTINEL and (
179
- not k in optional_fields or (optional_nullable and is_set)
180
- ):
181
- m[k] = val
179
+ is_nullable_and_explicitly_set = (
180
+ k in nullable_fields
181
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
182
+ )
183
+
184
+ if val != UNSET_SENTINEL:
185
+ if (
186
+ val is not None
187
+ or k not in optional_fields
188
+ or is_nullable_and_explicitly_set
189
+ ):
190
+ m[k] = val
182
191
 
183
192
  return m
184
193
 
@@ -17,18 +17,34 @@ from typing_extensions import Annotated, NotRequired, TypedDict
17
17
 
18
18
 
19
19
  class QueryParamFilterByTypedDict(TypedDict):
20
- r"""Filter contacts by tags. Can be provided as JSON object {\"tags\": [\"premium\", \"beta-user\"]} or as query format \"tags=premium,beta-user\" """
20
+ r"""Filter identities by tags. Can be provided as JSON object {\"tags\": [\"premium\", \"beta-user\"]} or as query format \"tags=premium,beta-user\" """
21
21
 
22
22
  tags: NotRequired[List[str]]
23
23
 
24
24
 
25
25
  class QueryParamFilterBy(BaseModel):
26
- r"""Filter contacts by tags. Can be provided as JSON object {\"tags\": [\"premium\", \"beta-user\"]} or as query format \"tags=premium,beta-user\" """
26
+ r"""Filter identities by tags. Can be provided as JSON object {\"tags\": [\"premium\", \"beta-user\"]} or as query format \"tags=premium,beta-user\" """
27
27
 
28
28
  tags: Annotated[Optional[List[str]], FieldMetadata(query=True)] = None
29
29
 
30
+ @model_serializer(mode="wrap")
31
+ def serialize_model(self, handler):
32
+ optional_fields = set(["tags"])
33
+ serialized = handler(self)
34
+ m = {}
35
+
36
+ for n, f in type(self).model_fields.items():
37
+ k = f.alias or n
38
+ val = serialized.get(k)
39
+
40
+ if val != UNSET_SENTINEL:
41
+ if val is not None or k not in optional_fields:
42
+ m[k] = val
43
+
44
+ return m
45
+
30
46
 
31
- class ListContactsRequestTypedDict(TypedDict):
47
+ class ListIdentitiesRequestTypedDict(TypedDict):
32
48
  limit: NotRequired[float]
33
49
  r"""A limit on the number of objects to be returned. Limit can range between 1 and 50, and the default is 10"""
34
50
  starting_after: NotRequired[str]
@@ -36,14 +52,14 @@ class ListContactsRequestTypedDict(TypedDict):
36
52
  ending_before: NotRequired[str]
37
53
  r"""A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 20 objects, starting with `01JJ1HDHN79XAS7A01WB3HYSDB`, your subsequent call can include `before=01JJ1HDHN79XAS7A01WB3HYSDB` in order to fetch the previous page of the list."""
38
54
  search: NotRequired[str]
39
- r"""Search contacts by display name or email address. Minimum 2 characters required."""
55
+ r"""Search identities by display name or email address. Minimum 2 characters required."""
40
56
  filter_by: NotRequired[QueryParamFilterByTypedDict]
41
- r"""Filter contacts by tags. Can be provided as JSON object {\"tags\": [\"premium\", \"beta-user\"]} or as query format \"tags=premium,beta-user\" """
57
+ r"""Filter identities by tags. Can be provided as JSON object {\"tags\": [\"premium\", \"beta-user\"]} or as query format \"tags=premium,beta-user\" """
42
58
  include_metrics: NotRequired[Nullable[bool]]
43
- r"""Include usage metrics of the last 30 days for each contact."""
59
+ r"""Include usage metrics of the last 30 days for each identity."""
44
60
 
45
61
 
46
- class ListContactsRequest(BaseModel):
62
+ class ListIdentitiesRequest(BaseModel):
47
63
  limit: Annotated[
48
64
  Optional[float],
49
65
  FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
@@ -66,62 +82,59 @@ class ListContactsRequest(BaseModel):
66
82
  Optional[str],
67
83
  FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
68
84
  ] = None
69
- r"""Search contacts by display name or email address. Minimum 2 characters required."""
85
+ r"""Search identities by display name or email address. Minimum 2 characters required."""
70
86
 
71
87
  filter_by: Annotated[
72
88
  Optional[QueryParamFilterBy],
73
89
  FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
74
90
  ] = None
75
- r"""Filter contacts by tags. Can be provided as JSON object {\"tags\": [\"premium\", \"beta-user\"]} or as query format \"tags=premium,beta-user\" """
91
+ r"""Filter identities by tags. Can be provided as JSON object {\"tags\": [\"premium\", \"beta-user\"]} or as query format \"tags=premium,beta-user\" """
76
92
 
77
93
  include_metrics: Annotated[
78
94
  OptionalNullable[bool],
79
95
  FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
80
96
  ] = False
81
- r"""Include usage metrics of the last 30 days for each contact."""
97
+ r"""Include usage metrics of the last 30 days for each identity."""
82
98
 
83
99
  @model_serializer(mode="wrap")
84
100
  def serialize_model(self, handler):
85
- optional_fields = [
86
- "limit",
87
- "starting_after",
88
- "ending_before",
89
- "search",
90
- "filter_by",
91
- "include_metrics",
92
- ]
93
- nullable_fields = ["include_metrics"]
94
- null_default_fields = []
95
-
101
+ optional_fields = set(
102
+ [
103
+ "limit",
104
+ "starting_after",
105
+ "ending_before",
106
+ "search",
107
+ "filter_by",
108
+ "include_metrics",
109
+ ]
110
+ )
111
+ nullable_fields = set(["include_metrics"])
96
112
  serialized = handler(self)
97
-
98
113
  m = {}
99
114
 
100
115
  for n, f in type(self).model_fields.items():
101
116
  k = f.alias or n
102
117
  val = serialized.get(k)
103
- serialized.pop(k, None)
104
-
105
- optional_nullable = k in optional_fields and k in nullable_fields
106
- is_set = (
107
- self.__pydantic_fields_set__.intersection({n})
108
- or k in null_default_fields
109
- ) # pylint: disable=no-member
110
-
111
- if val is not None and val != UNSET_SENTINEL:
112
- m[k] = val
113
- elif val != UNSET_SENTINEL and (
114
- not k in optional_fields or (optional_nullable and is_set)
115
- ):
116
- m[k] = val
118
+ is_nullable_and_explicitly_set = (
119
+ k in nullable_fields
120
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
121
+ )
122
+
123
+ if val != UNSET_SENTINEL:
124
+ if (
125
+ val is not None
126
+ or k not in optional_fields
127
+ or is_nullable_and_explicitly_set
128
+ ):
129
+ m[k] = val
117
130
 
118
131
  return m
119
132
 
120
133
 
121
- Object = Literal["list",]
134
+ ListIdentitiesObject = Literal["list",]
122
135
 
123
136
 
124
- class ListContactsMetricsTypedDict(TypedDict):
137
+ class ListIdentitiesMetricsTypedDict(TypedDict):
125
138
  total_cost: float
126
139
  r"""Total cost in dollars of the last 30 days"""
127
140
  total_tokens: float
@@ -132,7 +145,7 @@ class ListContactsMetricsTypedDict(TypedDict):
132
145
  r"""P50 error rate of the last 30 days"""
133
146
 
134
147
 
135
- class ListContactsMetrics(BaseModel):
148
+ class ListIdentitiesMetrics(BaseModel):
136
149
  total_cost: float
137
150
  r"""Total cost in dollars of the last 30 days"""
138
151
 
@@ -146,12 +159,12 @@ class ListContactsMetrics(BaseModel):
146
159
  r"""P50 error rate of the last 30 days"""
147
160
 
148
161
 
149
- class ListContactsDataTypedDict(TypedDict):
162
+ class ListIdentitiesDataTypedDict(TypedDict):
150
163
  id: str
151
164
  r"""Unique ULID (Universally Unique Lexicographically Sortable Identifier) for the contact"""
152
165
  external_id: str
153
166
  r"""Unique string value to identify the contact user in the customer's system. This should be the same ID you use in your system to reference this user."""
154
- metrics: ListContactsMetricsTypedDict
167
+ metrics: ListIdentitiesMetricsTypedDict
155
168
  display_name: NotRequired[Nullable[str]]
156
169
  r"""Display name or nickname of the contact user. This is typically shown in user interfaces."""
157
170
  email: NotRequired[Nullable[str]]
@@ -168,14 +181,14 @@ class ListContactsDataTypedDict(TypedDict):
168
181
  r"""The date and time the resource was last updated"""
169
182
 
170
183
 
171
- class ListContactsData(BaseModel):
184
+ class ListIdentitiesData(BaseModel):
172
185
  id: Annotated[str, pydantic.Field(alias="_id")]
173
186
  r"""Unique ULID (Universally Unique Lexicographically Sortable Identifier) for the contact"""
174
187
 
175
188
  external_id: str
176
189
  r"""Unique string value to identify the contact user in the customer's system. This should be the same ID you use in your system to reference this user."""
177
190
 
178
- metrics: ListContactsMetrics
191
+ metrics: ListIdentitiesMetrics
179
192
 
180
193
  display_name: OptionalNullable[str] = UNSET
181
194
  r"""Display name or nickname of the contact user. This is typically shown in user interfaces."""
@@ -195,61 +208,58 @@ class ListContactsData(BaseModel):
195
208
  created: Optional[datetime] = None
196
209
  r"""The date and time the resource was created"""
197
210
 
198
- updated: Optional[datetime] = parse_datetime("2026-01-14T08:04:31.906Z")
211
+ updated: Optional[datetime] = parse_datetime("2026-01-25T15:02:07.185Z")
199
212
  r"""The date and time the resource was last updated"""
200
213
 
201
214
  @model_serializer(mode="wrap")
202
215
  def serialize_model(self, handler):
203
- optional_fields = [
204
- "display_name",
205
- "email",
206
- "avatar_url",
207
- "tags",
208
- "metadata",
209
- "created",
210
- "updated",
211
- ]
212
- nullable_fields = ["display_name", "email", "avatar_url"]
213
- null_default_fields = []
214
-
216
+ optional_fields = set(
217
+ [
218
+ "display_name",
219
+ "email",
220
+ "avatar_url",
221
+ "tags",
222
+ "metadata",
223
+ "created",
224
+ "updated",
225
+ ]
226
+ )
227
+ nullable_fields = set(["display_name", "email", "avatar_url"])
215
228
  serialized = handler(self)
216
-
217
229
  m = {}
218
230
 
219
231
  for n, f in type(self).model_fields.items():
220
232
  k = f.alias or n
221
233
  val = serialized.get(k)
222
- serialized.pop(k, None)
223
-
224
- optional_nullable = k in optional_fields and k in nullable_fields
225
- is_set = (
226
- self.__pydantic_fields_set__.intersection({n})
227
- or k in null_default_fields
228
- ) # pylint: disable=no-member
229
-
230
- if val is not None and val != UNSET_SENTINEL:
231
- m[k] = val
232
- elif val != UNSET_SENTINEL and (
233
- not k in optional_fields or (optional_nullable and is_set)
234
- ):
235
- m[k] = val
234
+ is_nullable_and_explicitly_set = (
235
+ k in nullable_fields
236
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
237
+ )
238
+
239
+ if val != UNSET_SENTINEL:
240
+ if (
241
+ val is not None
242
+ or k not in optional_fields
243
+ or is_nullable_and_explicitly_set
244
+ ):
245
+ m[k] = val
236
246
 
237
247
  return m
238
248
 
239
249
 
240
- class ListContactsResponseBodyTypedDict(TypedDict):
241
- r"""List of contacts"""
250
+ class ListIdentitiesResponseBodyTypedDict(TypedDict):
251
+ r"""List of identities"""
242
252
 
243
- object: Object
244
- data: List[ListContactsDataTypedDict]
253
+ object: ListIdentitiesObject
254
+ data: List[ListIdentitiesDataTypedDict]
245
255
  has_more: bool
246
256
 
247
257
 
248
- class ListContactsResponseBody(BaseModel):
249
- r"""List of contacts"""
258
+ class ListIdentitiesResponseBody(BaseModel):
259
+ r"""List of identities"""
250
260
 
251
- object: Object
261
+ object: ListIdentitiesObject
252
262
 
253
- data: List[ListContactsData]
263
+ data: List[ListIdentitiesData]
254
264
 
255
265
  has_more: bool