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
@@ -83,6 +83,24 @@ class ListChunksRequest(BaseModel):
83
83
  ] = None
84
84
  r"""Filter datasources by status."""
85
85
 
86
+ @model_serializer(mode="wrap")
87
+ def serialize_model(self, handler):
88
+ optional_fields = set(
89
+ ["limit", "starting_after", "ending_before", "q", "status"]
90
+ )
91
+ serialized = handler(self)
92
+ m = {}
93
+
94
+ for n, f in type(self).model_fields.items():
95
+ k = f.alias or n
96
+ val = serialized.get(k)
97
+
98
+ if val != UNSET_SENTINEL:
99
+ if val is not None or k not in optional_fields:
100
+ m[k] = val
101
+
102
+ return m
103
+
86
104
 
87
105
  ListChunksObject = Literal["list",]
88
106
 
@@ -156,31 +174,26 @@ class ListChunksData(BaseModel):
156
174
 
157
175
  @model_serializer(mode="wrap")
158
176
  def serialize_model(self, handler):
159
- optional_fields = ["metadata", "created_by_id", "update_by_id"]
160
- nullable_fields = ["created_by_id", "update_by_id"]
161
- null_default_fields = []
162
-
177
+ optional_fields = set(["metadata", "created_by_id", "update_by_id"])
178
+ nullable_fields = set(["created_by_id", "update_by_id"])
163
179
  serialized = handler(self)
164
-
165
180
  m = {}
166
181
 
167
182
  for n, f in type(self).model_fields.items():
168
183
  k = f.alias or n
169
184
  val = serialized.get(k)
170
- serialized.pop(k, None)
171
-
172
- optional_nullable = k in optional_fields and k in nullable_fields
173
- is_set = (
174
- self.__pydantic_fields_set__.intersection({n})
175
- or k in null_default_fields
176
- ) # pylint: disable=no-member
177
-
178
- if val is not None and val != UNSET_SENTINEL:
179
- m[k] = val
180
- elif val != UNSET_SENTINEL and (
181
- not k in optional_fields or (optional_nullable and is_set)
182
- ):
183
- m[k] = val
185
+ is_nullable_and_explicitly_set = (
186
+ k in nullable_fields
187
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
188
+ )
189
+
190
+ if val != UNSET_SENTINEL:
191
+ if (
192
+ val is not None
193
+ or k not in optional_fields
194
+ or is_nullable_and_explicitly_set
195
+ ):
196
+ m[k] = val
184
197
 
185
198
  return m
186
199
 
@@ -40,6 +40,22 @@ class ListChunksPaginatedRequestBody(BaseModel):
40
40
 
41
41
  page: Optional[int] = 1
42
42
 
43
+ @model_serializer(mode="wrap")
44
+ def serialize_model(self, handler):
45
+ optional_fields = set(["q", "enabled", "status", "limit", "page"])
46
+ serialized = handler(self)
47
+ m = {}
48
+
49
+ for n, f in type(self).model_fields.items():
50
+ k = f.alias or n
51
+ val = serialized.get(k)
52
+
53
+ if val != UNSET_SENTINEL:
54
+ if val is not None or k not in optional_fields:
55
+ m[k] = val
56
+
57
+ return m
58
+
43
59
 
44
60
  class ListChunksPaginatedRequestTypedDict(TypedDict):
45
61
  knowledge_id: str
@@ -65,6 +81,22 @@ class ListChunksPaginatedRequest(BaseModel):
65
81
  FieldMetadata(request=RequestMetadata(media_type="application/json")),
66
82
  ] = None
67
83
 
84
+ @model_serializer(mode="wrap")
85
+ def serialize_model(self, handler):
86
+ optional_fields = set(["RequestBody"])
87
+ serialized = handler(self)
88
+ m = {}
89
+
90
+ for n, f in type(self).model_fields.items():
91
+ k = f.alias or n
92
+ val = serialized.get(k)
93
+
94
+ if val != UNSET_SENTINEL:
95
+ if val is not None or k not in optional_fields:
96
+ m[k] = val
97
+
98
+ return m
99
+
68
100
 
69
101
  ListChunksPaginatedObject = Literal["list",]
70
102
 
@@ -140,31 +172,26 @@ class ListChunksPaginatedData(BaseModel):
140
172
 
141
173
  @model_serializer(mode="wrap")
142
174
  def serialize_model(self, handler):
143
- optional_fields = ["metadata", "created_by_id", "update_by_id"]
144
- nullable_fields = ["created_by_id", "update_by_id"]
145
- null_default_fields = []
146
-
175
+ optional_fields = set(["metadata", "created_by_id", "update_by_id"])
176
+ nullable_fields = set(["created_by_id", "update_by_id"])
147
177
  serialized = handler(self)
148
-
149
178
  m = {}
150
179
 
151
180
  for n, f in type(self).model_fields.items():
152
181
  k = f.alias or n
153
182
  val = serialized.get(k)
154
- serialized.pop(k, None)
155
-
156
- optional_nullable = k in optional_fields and k in nullable_fields
157
- is_set = (
158
- self.__pydantic_fields_set__.intersection({n})
159
- or k in null_default_fields
160
- ) # pylint: disable=no-member
161
-
162
- if val is not None and val != UNSET_SENTINEL:
163
- m[k] = val
164
- elif val != UNSET_SENTINEL and (
165
- not k in optional_fields or (optional_nullable and is_set)
166
- ):
167
- m[k] = val
183
+ is_nullable_and_explicitly_set = (
184
+ k in nullable_fields
185
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
186
+ )
187
+
188
+ if val != UNSET_SENTINEL:
189
+ if (
190
+ val is not None
191
+ or k not in optional_fields
192
+ or is_nullable_and_explicitly_set
193
+ ):
194
+ m[k] = val
168
195
 
169
196
  return m
170
197
 
@@ -2,9 +2,10 @@
2
2
 
3
3
  from __future__ import annotations
4
4
  from .conversationresponse import ConversationResponse, ConversationResponseTypedDict
5
- from orq_ai_sdk.types import BaseModel
5
+ from orq_ai_sdk.types import BaseModel, UNSET_SENTINEL
6
6
  from orq_ai_sdk.utils import FieldMetadata, QueryParamMetadata
7
7
  import pydantic
8
+ from pydantic import model_serializer
8
9
  from typing import List, Literal, Optional
9
10
  from typing_extensions import Annotated, NotRequired, TypedDict
10
11
 
@@ -48,6 +49,22 @@ class ListConversationsRequest(BaseModel):
48
49
  ] = None
49
50
  r"""Filter by parent entity. When specified, returns only conversations associated with this entity. When omitted, returns standalone conversations."""
50
51
 
52
+ @model_serializer(mode="wrap")
53
+ def serialize_model(self, handler):
54
+ optional_fields = set(["limit", "startingAfter", "endingBefore", "entityId"])
55
+ serialized = handler(self)
56
+ m = {}
57
+
58
+ for n, f in type(self).model_fields.items():
59
+ k = f.alias or n
60
+ val = serialized.get(k)
61
+
62
+ if val != UNSET_SENTINEL:
63
+ if val is not None or k not in optional_fields:
64
+ m[k] = val
65
+
66
+ return m
67
+
51
68
 
52
69
  ListConversationsObject = Literal["list",]
53
70
 
@@ -73,6 +73,22 @@ class ListDatasetDatapointsRequest(BaseModel):
73
73
  ] = None
74
74
  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."""
75
75
 
76
+ @model_serializer(mode="wrap")
77
+ def serialize_model(self, handler):
78
+ optional_fields = set(["limit", "starting_after", "ending_before"])
79
+ serialized = handler(self)
80
+ m = {}
81
+
82
+ for n, f in type(self).model_fields.items():
83
+ k = f.alias or n
84
+ val = serialized.get(k)
85
+
86
+ if val != UNSET_SENTINEL:
87
+ if val is not None or k not in optional_fields:
88
+ m[k] = val
89
+
90
+ return m
91
+
76
92
 
77
93
  ListDatasetDatapointsObject = Literal["list",]
78
94
 
@@ -144,6 +160,22 @@ class ListDatasetDatapointsMessagesCacheControl(BaseModel):
144
160
  Defaults to `5m`. Only supported by `Anthropic` Claude models.
145
161
  """
146
162
 
163
+ @model_serializer(mode="wrap")
164
+ def serialize_model(self, handler):
165
+ optional_fields = set(["ttl"])
166
+ serialized = handler(self)
167
+ m = {}
168
+
169
+ for n, f in type(self).model_fields.items():
170
+ k = f.alias or n
171
+ val = serialized.get(k)
172
+
173
+ if val != UNSET_SENTINEL:
174
+ if val is not None or k not in optional_fields:
175
+ m[k] = val
176
+
177
+ return m
178
+
147
179
 
148
180
  class ListDatasetDatapointsMessagesToolMessageTypedDict(TypedDict):
149
181
  role: ListDatasetDatapointsMessagesDatasetsResponse200ApplicationJSONRole
@@ -171,31 +203,26 @@ class ListDatasetDatapointsMessagesToolMessage(BaseModel):
171
203
 
172
204
  @model_serializer(mode="wrap")
173
205
  def serialize_model(self, handler):
174
- optional_fields = ["cache_control"]
175
- nullable_fields = ["tool_call_id"]
176
- null_default_fields = []
177
-
206
+ optional_fields = set(["cache_control"])
207
+ nullable_fields = set(["tool_call_id"])
178
208
  serialized = handler(self)
179
-
180
209
  m = {}
181
210
 
182
211
  for n, f in type(self).model_fields.items():
183
212
  k = f.alias or n
184
213
  val = serialized.get(k)
185
- serialized.pop(k, None)
186
-
187
- optional_nullable = k in optional_fields and k in nullable_fields
188
- is_set = (
189
- self.__pydantic_fields_set__.intersection({n})
190
- or k in null_default_fields
191
- ) # pylint: disable=no-member
192
-
193
- if val is not None and val != UNSET_SENTINEL:
194
- m[k] = val
195
- elif val != UNSET_SENTINEL and (
196
- not k in optional_fields or (optional_nullable and is_set)
197
- ):
198
- m[k] = val
214
+ is_nullable_and_explicitly_set = (
215
+ k in nullable_fields
216
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
217
+ )
218
+
219
+ if val != UNSET_SENTINEL:
220
+ if (
221
+ val is not None
222
+ or k not in optional_fields
223
+ or is_nullable_and_explicitly_set
224
+ ):
225
+ m[k] = val
199
226
 
200
227
  return m
201
228
 
@@ -272,6 +299,22 @@ class ListDatasetDatapointsMessagesFunction(BaseModel):
272
299
  arguments: Optional[str] = None
273
300
  r"""The arguments to call the function with, as generated by the model in JSON format. Note that the model does not always generate valid JSON, and may hallucinate parameters not defined by your function schema. Validate the arguments in your code before calling your function."""
274
301
 
302
+ @model_serializer(mode="wrap")
303
+ def serialize_model(self, handler):
304
+ optional_fields = set(["name", "arguments"])
305
+ serialized = handler(self)
306
+ m = {}
307
+
308
+ for n, f in type(self).model_fields.items():
309
+ k = f.alias or n
310
+ val = serialized.get(k)
311
+
312
+ if val != UNSET_SENTINEL:
313
+ if val is not None or k not in optional_fields:
314
+ m[k] = val
315
+
316
+ return m
317
+
275
318
 
276
319
  class ListDatasetDatapointsMessagesToolCallsTypedDict(TypedDict):
277
320
  id: str
@@ -295,6 +338,22 @@ class ListDatasetDatapointsMessagesToolCalls(BaseModel):
295
338
  thought_signature: Optional[str] = None
296
339
  r"""Encrypted representation of the model internal reasoning state during function calling. Required by Gemini 3 models when continuing a conversation after a tool call."""
297
340
 
341
+ @model_serializer(mode="wrap")
342
+ def serialize_model(self, handler):
343
+ optional_fields = set(["thought_signature"])
344
+ serialized = handler(self)
345
+ m = {}
346
+
347
+ for n, f in type(self).model_fields.items():
348
+ k = f.alias or n
349
+ val = serialized.get(k)
350
+
351
+ if val != UNSET_SENTINEL:
352
+ if val is not None or k not in optional_fields:
353
+ m[k] = val
354
+
355
+ return m
356
+
298
357
 
299
358
  class ListDatasetDatapointsMessagesAssistantMessageTypedDict(TypedDict):
300
359
  role: ListDatasetDatapointsMessagesDatasetsResponse200Role
@@ -336,31 +395,26 @@ class ListDatasetDatapointsMessagesAssistantMessage(BaseModel):
336
395
 
337
396
  @model_serializer(mode="wrap")
338
397
  def serialize_model(self, handler):
339
- optional_fields = ["content", "refusal", "name", "audio", "tool_calls"]
340
- nullable_fields = ["content", "refusal", "audio"]
341
- null_default_fields = []
342
-
398
+ optional_fields = set(["content", "refusal", "name", "audio", "tool_calls"])
399
+ nullable_fields = set(["content", "refusal", "audio"])
343
400
  serialized = handler(self)
344
-
345
401
  m = {}
346
402
 
347
403
  for n, f in type(self).model_fields.items():
348
404
  k = f.alias or n
349
405
  val = serialized.get(k)
350
- serialized.pop(k, None)
351
-
352
- optional_nullable = k in optional_fields and k in nullable_fields
353
- is_set = (
354
- self.__pydantic_fields_set__.intersection({n})
355
- or k in null_default_fields
356
- ) # pylint: disable=no-member
357
-
358
- if val is not None and val != UNSET_SENTINEL:
359
- m[k] = val
360
- elif val != UNSET_SENTINEL and (
361
- not k in optional_fields or (optional_nullable and is_set)
362
- ):
363
- m[k] = val
406
+ is_nullable_and_explicitly_set = (
407
+ k in nullable_fields
408
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
409
+ )
410
+
411
+ if val != UNSET_SENTINEL:
412
+ if (
413
+ val is not None
414
+ or k not in optional_fields
415
+ or is_nullable_and_explicitly_set
416
+ ):
417
+ m[k] = val
364
418
 
365
419
  return m
366
420
 
@@ -416,6 +470,22 @@ class ListDatasetDatapoints2CacheControl(BaseModel):
416
470
  Defaults to `5m`. Only supported by `Anthropic` Claude models.
417
471
  """
418
472
 
473
+ @model_serializer(mode="wrap")
474
+ def serialize_model(self, handler):
475
+ optional_fields = set(["ttl"])
476
+ serialized = handler(self)
477
+ m = {}
478
+
479
+ for n, f in type(self).model_fields.items():
480
+ k = f.alias or n
481
+ val = serialized.get(k)
482
+
483
+ if val != UNSET_SENTINEL:
484
+ if val is not None or k not in optional_fields:
485
+ m[k] = val
486
+
487
+ return m
488
+
419
489
 
420
490
  class ListDatasetDatapoints24TypedDict(TypedDict):
421
491
  type: ListDatasetDatapoints2Type
@@ -434,6 +504,22 @@ class ListDatasetDatapoints24(BaseModel):
434
504
 
435
505
  cache_control: Optional[ListDatasetDatapoints2CacheControl] = None
436
506
 
507
+ @model_serializer(mode="wrap")
508
+ def serialize_model(self, handler):
509
+ optional_fields = set(["cache_control"])
510
+ serialized = handler(self)
511
+ m = {}
512
+
513
+ for n, f in type(self).model_fields.items():
514
+ k = f.alias or n
515
+ val = serialized.get(k)
516
+
517
+ if val != UNSET_SENTINEL:
518
+ if val is not None or k not in optional_fields:
519
+ m[k] = val
520
+
521
+ return m
522
+
437
523
 
438
524
  ListDatasetDatapointsContent2TypedDict = TypeAliasType(
439
525
  "ListDatasetDatapointsContent2TypedDict",
@@ -490,6 +576,22 @@ class ListDatasetDatapointsMessagesUserMessage(BaseModel):
490
576
  name: Optional[str] = None
491
577
  r"""An optional name for the participant. Provides the model information to differentiate between participants of the same role."""
492
578
 
579
+ @model_serializer(mode="wrap")
580
+ def serialize_model(self, handler):
581
+ optional_fields = set(["name"])
582
+ serialized = handler(self)
583
+ m = {}
584
+
585
+ for n, f in type(self).model_fields.items():
586
+ k = f.alias or n
587
+ val = serialized.get(k)
588
+
589
+ if val != UNSET_SENTINEL:
590
+ if val is not None or k not in optional_fields:
591
+ m[k] = val
592
+
593
+ return m
594
+
493
595
 
494
596
  ListDatasetDatapointsMessagesDatasetsRole = Literal["developer",]
495
597
  r"""The role of the messages author, in this case `developer`."""
@@ -528,6 +630,22 @@ class ListDatasetDatapointsMessagesDeveloperMessage(BaseModel):
528
630
  name: Optional[str] = None
529
631
  r"""An optional name for the participant. Provides the model information to differentiate between participants of the same role."""
530
632
 
633
+ @model_serializer(mode="wrap")
634
+ def serialize_model(self, handler):
635
+ optional_fields = set(["name"])
636
+ serialized = handler(self)
637
+ m = {}
638
+
639
+ for n, f in type(self).model_fields.items():
640
+ k = f.alias or n
641
+ val = serialized.get(k)
642
+
643
+ if val != UNSET_SENTINEL:
644
+ if val is not None or k not in optional_fields:
645
+ m[k] = val
646
+
647
+ return m
648
+
531
649
 
532
650
  ListDatasetDatapointsMessagesRole = Literal["system",]
533
651
  r"""The role of the messages author, in this case `system`."""
@@ -569,6 +687,22 @@ class ListDatasetDatapointsMessagesSystemMessage(BaseModel):
569
687
  name: Optional[str] = None
570
688
  r"""An optional name for the participant. Provides the model information to differentiate between participants of the same role."""
571
689
 
690
+ @model_serializer(mode="wrap")
691
+ def serialize_model(self, handler):
692
+ optional_fields = set(["name"])
693
+ serialized = handler(self)
694
+ m = {}
695
+
696
+ for n, f in type(self).model_fields.items():
697
+ k = f.alias or n
698
+ val = serialized.get(k)
699
+
700
+ if val != UNSET_SENTINEL:
701
+ if val is not None or k not in optional_fields:
702
+ m[k] = val
703
+
704
+ return m
705
+
572
706
 
573
707
  ListDatasetDatapointsMessagesTypedDict = TypeAliasType(
574
708
  "ListDatasetDatapointsMessagesTypedDict",
@@ -642,9 +776,25 @@ class ListDatasetDatapointsEvaluations3(BaseModel):
642
776
 
643
777
  source: Optional[ListDatasetDatapointsEvaluationsDatasetsSource] = "orq"
644
778
 
645
- reviewed_at: Optional[datetime] = parse_datetime("2026-01-14T08:04:45.074Z")
779
+ reviewed_at: Optional[datetime] = parse_datetime("2026-01-25T15:02:19.531Z")
646
780
  r"""The date and time the item was reviewed"""
647
781
 
782
+ @model_serializer(mode="wrap")
783
+ def serialize_model(self, handler):
784
+ optional_fields = set(["source", "reviewed_at"])
785
+ serialized = handler(self)
786
+ m = {}
787
+
788
+ for n, f in type(self).model_fields.items():
789
+ k = f.alias or n
790
+ val = serialized.get(k)
791
+
792
+ if val != UNSET_SENTINEL:
793
+ if val is not None or k not in optional_fields:
794
+ m[k] = val
795
+
796
+ return m
797
+
648
798
 
649
799
  ListDatasetDatapointsEvaluationsDatasetsResponseEvaluationType = Literal[
650
800
  "human_review",
@@ -696,9 +846,25 @@ class ListDatasetDatapointsEvaluations2(BaseModel):
696
846
 
697
847
  source: Optional[ListDatasetDatapointsEvaluationsSource] = "orq"
698
848
 
699
- reviewed_at: Optional[datetime] = parse_datetime("2026-01-14T08:04:45.073Z")
849
+ reviewed_at: Optional[datetime] = parse_datetime("2026-01-25T15:02:19.530Z")
700
850
  r"""The date and time the item was reviewed"""
701
851
 
852
+ @model_serializer(mode="wrap")
853
+ def serialize_model(self, handler):
854
+ optional_fields = set(["source", "reviewed_at"])
855
+ serialized = handler(self)
856
+ m = {}
857
+
858
+ for n, f in type(self).model_fields.items():
859
+ k = f.alias or n
860
+ val = serialized.get(k)
861
+
862
+ if val != UNSET_SENTINEL:
863
+ if val is not None or k not in optional_fields:
864
+ m[k] = val
865
+
866
+ return m
867
+
702
868
 
703
869
  ListDatasetDatapointsEvaluationsDatasetsEvaluationType = Literal["human_review",]
704
870
  r"""The type of evaluation"""
@@ -748,9 +914,25 @@ class ListDatasetDatapointsEvaluations1(BaseModel):
748
914
 
749
915
  source: Optional[ListDatasetDatapointsEvaluationsDatasetsResponseSource] = "orq"
750
916
 
751
- reviewed_at: Optional[datetime] = parse_datetime("2026-01-14T08:04:45.072Z")
917
+ reviewed_at: Optional[datetime] = parse_datetime("2026-01-25T15:02:19.530Z")
752
918
  r"""The date and time the item was reviewed"""
753
919
 
920
+ @model_serializer(mode="wrap")
921
+ def serialize_model(self, handler):
922
+ optional_fields = set(["source", "reviewed_at"])
923
+ serialized = handler(self)
924
+ m = {}
925
+
926
+ for n, f in type(self).model_fields.items():
927
+ k = f.alias or n
928
+ val = serialized.get(k)
929
+
930
+ if val != UNSET_SENTINEL:
931
+ if val is not None or k not in optional_fields:
932
+ m[k] = val
933
+
934
+ return m
935
+
754
936
 
755
937
  ListDatasetDatapointsEvaluationsTypedDict = TypeAliasType(
756
938
  "ListDatasetDatapointsEvaluationsTypedDict",
@@ -831,9 +1013,37 @@ class ListDatasetDatapointsData(BaseModel):
831
1013
  created: Optional[datetime] = None
832
1014
  r"""The date and time the resource was created"""
833
1015
 
834
- updated: Optional[datetime] = parse_datetime("2026-01-14T08:04:31.906Z")
1016
+ updated: Optional[datetime] = parse_datetime("2026-01-25T15:02:07.185Z")
835
1017
  r"""The date and time the resource was last updated"""
836
1018
 
1019
+ @model_serializer(mode="wrap")
1020
+ def serialize_model(self, handler):
1021
+ optional_fields = set(
1022
+ [
1023
+ "inputs",
1024
+ "messages",
1025
+ "expected_output",
1026
+ "evaluations",
1027
+ "snapshot_version",
1028
+ "created_by_id",
1029
+ "updated_by_id",
1030
+ "created",
1031
+ "updated",
1032
+ ]
1033
+ )
1034
+ serialized = handler(self)
1035
+ m = {}
1036
+
1037
+ for n, f in type(self).model_fields.items():
1038
+ k = f.alias or n
1039
+ val = serialized.get(k)
1040
+
1041
+ if val != UNSET_SENTINEL:
1042
+ if val is not None or k not in optional_fields:
1043
+ m[k] = val
1044
+
1045
+ return m
1046
+
837
1047
 
838
1048
  class ListDatasetDatapointsResponseBodyTypedDict(TypedDict):
839
1049
  r"""Datapoints retrieved successfully. Returns a paginated list of datapoints."""
@@ -2,9 +2,10 @@
2
2
 
3
3
  from __future__ import annotations
4
4
  from datetime import datetime
5
- from orq_ai_sdk.types import BaseModel
5
+ from orq_ai_sdk.types import BaseModel, UNSET_SENTINEL
6
6
  from orq_ai_sdk.utils import FieldMetadata, QueryParamMetadata, parse_datetime
7
7
  import pydantic
8
+ from pydantic import model_serializer
8
9
  from typing import List, Literal, Optional
9
10
  from typing_extensions import Annotated, NotRequired, TypedDict
10
11
 
@@ -37,6 +38,22 @@ class ListDatasetsRequest(BaseModel):
37
38
  ] = None
38
39
  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."""
39
40
 
41
+ @model_serializer(mode="wrap")
42
+ def serialize_model(self, handler):
43
+ optional_fields = set(["limit", "starting_after", "ending_before"])
44
+ serialized = handler(self)
45
+ m = {}
46
+
47
+ for n, f in type(self).model_fields.items():
48
+ k = f.alias or n
49
+ val = serialized.get(k)
50
+
51
+ if val != UNSET_SENTINEL:
52
+ if val is not None or k not in optional_fields:
53
+ m[k] = val
54
+
55
+ return m
56
+
40
57
 
41
58
  ListDatasetsObject = Literal["list",]
42
59
 
@@ -96,9 +113,25 @@ class ListDatasetsData(BaseModel):
96
113
  created: Optional[datetime] = None
97
114
  r"""The date and time the resource was created"""
98
115
 
99
- updated: Optional[datetime] = parse_datetime("2026-01-14T08:04:31.906Z")
116
+ updated: Optional[datetime] = parse_datetime("2026-01-25T15:02:07.185Z")
100
117
  r"""The date and time the resource was last updated"""
101
118
 
119
+ @model_serializer(mode="wrap")
120
+ def serialize_model(self, handler):
121
+ optional_fields = set(["created_by_id", "updated_by_id", "created", "updated"])
122
+ serialized = handler(self)
123
+ m = {}
124
+
125
+ for n, f in type(self).model_fields.items():
126
+ k = f.alias or n
127
+ val = serialized.get(k)
128
+
129
+ if val != UNSET_SENTINEL:
130
+ if val is not None or k not in optional_fields:
131
+ m[k] = val
132
+
133
+ return m
134
+
102
135
 
103
136
  class ListDatasetsResponseBodyTypedDict(TypedDict):
104
137
  r"""Datasets Retrieved Successfully"""