@alicloud/agentloop20260520 2.4.5 → 2.5.0

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 (61) hide show
  1. package/dist/client.d.ts +56 -2
  2. package/dist/client.js +143 -3
  3. package/dist/client.js.map +1 -1
  4. package/dist/models/CreateDatasetVersionRequest.d.ts +39 -0
  5. package/dist/models/CreateDatasetVersionRequest.js +62 -0
  6. package/dist/models/CreateDatasetVersionRequest.js.map +1 -0
  7. package/dist/models/CreateDatasetVersionResponse.d.ts +19 -0
  8. package/dist/models/CreateDatasetVersionResponse.js +69 -0
  9. package/dist/models/CreateDatasetVersionResponse.js.map +1 -0
  10. package/dist/models/CreateDatasetVersionResponseBody.d.ts +21 -0
  11. package/dist/models/CreateDatasetVersionResponseBody.js +58 -0
  12. package/dist/models/CreateDatasetVersionResponseBody.js.map +1 -0
  13. package/dist/models/DeleteDatasetVersionRequest.d.ts +13 -0
  14. package/dist/models/DeleteDatasetVersionRequest.js +54 -0
  15. package/dist/models/DeleteDatasetVersionRequest.js.map +1 -0
  16. package/dist/models/DeleteDatasetVersionResponse.d.ts +19 -0
  17. package/dist/models/DeleteDatasetVersionResponse.js +69 -0
  18. package/dist/models/DeleteDatasetVersionResponse.js.map +1 -0
  19. package/dist/models/DeleteDatasetVersionResponseBody.d.ts +21 -0
  20. package/dist/models/DeleteDatasetVersionResponseBody.js +58 -0
  21. package/dist/models/DeleteDatasetVersionResponseBody.js.map +1 -0
  22. package/dist/models/GetAgentSpaceResponseBody.d.ts +27 -0
  23. package/dist/models/GetAgentSpaceResponseBody.js +27 -1
  24. package/dist/models/GetAgentSpaceResponseBody.js.map +1 -1
  25. package/dist/models/ListAgentSpacesRequest.d.ts +36 -0
  26. package/dist/models/ListAgentSpacesRequest.js +27 -1
  27. package/dist/models/ListAgentSpacesRequest.js.map +1 -1
  28. package/dist/models/ListAgentSpacesResponseBody.d.ts +39 -3
  29. package/dist/models/ListAgentSpacesResponseBody.js +27 -1
  30. package/dist/models/ListAgentSpacesResponseBody.js.map +1 -1
  31. package/dist/models/ListAgentSpacesShrinkRequest.d.ts +53 -0
  32. package/dist/models/ListAgentSpacesShrinkRequest.js +66 -0
  33. package/dist/models/ListAgentSpacesShrinkRequest.js.map +1 -0
  34. package/dist/models/ListDatasetVersionsRequest.d.ts +29 -0
  35. package/dist/models/ListDatasetVersionsRequest.js +60 -0
  36. package/dist/models/ListDatasetVersionsRequest.js.map +1 -0
  37. package/dist/models/ListDatasetVersionsResponse.d.ts +19 -0
  38. package/dist/models/ListDatasetVersionsResponse.js +69 -0
  39. package/dist/models/ListDatasetVersionsResponse.js.map +1 -0
  40. package/dist/models/ListDatasetVersionsResponseBody.d.ts +86 -0
  41. package/dist/models/ListDatasetVersionsResponseBody.js +92 -0
  42. package/dist/models/ListDatasetVersionsResponseBody.js.map +1 -0
  43. package/dist/models/model.d.ts +14 -0
  44. package/dist/models/model.js +44 -16
  45. package/dist/models/model.js.map +1 -1
  46. package/package.json +1 -1
  47. package/src/client.ts +156 -3
  48. package/src/models/CreateDatasetVersionRequest.ts +56 -0
  49. package/src/models/CreateDatasetVersionResponse.ts +40 -0
  50. package/src/models/CreateDatasetVersionResponseBody.ts +34 -0
  51. package/src/models/DeleteDatasetVersionRequest.ts +24 -0
  52. package/src/models/DeleteDatasetVersionResponse.ts +40 -0
  53. package/src/models/DeleteDatasetVersionResponseBody.ts +34 -0
  54. package/src/models/GetAgentSpaceResponseBody.ts +44 -0
  55. package/src/models/ListAgentSpacesRequest.ts +53 -0
  56. package/src/models/ListAgentSpacesResponseBody.ts +56 -3
  57. package/src/models/ListAgentSpacesShrinkRequest.ts +74 -0
  58. package/src/models/ListDatasetVersionsRequest.ts +44 -0
  59. package/src/models/ListDatasetVersionsResponse.ts +40 -0
  60. package/src/models/ListDatasetVersionsResponseBody.ts +124 -0
  61. package/src/models/model.ts +14 -0
@@ -5,7 +5,7 @@ import * as $dara from '@darabonba/typescript';
5
5
  export class ListAgentSpacesResponseBodyAgentSpacesMseNamespace extends $dara.Model {
6
6
  /**
7
7
  * @remarks
8
- * The attach method of the MSE namespace. AutoCreated indicates automatic creation by AgentLoop. UserSelected indicates that an existing namespace is selected and attached when the AgentSpace is created.
8
+ * The method used to attach the MSE namespace. AutoCreated indicates automatic creation by AgentLoop. UserSelected indicates that an existing namespace is selected and attached when the AgentSpace is created.
9
9
  *
10
10
  * @example
11
11
  * AutoCreated
@@ -52,6 +52,46 @@ export class ListAgentSpacesResponseBodyAgentSpacesMseNamespace extends $dara.Mo
52
52
  }
53
53
  }
54
54
 
55
+ export class ListAgentSpacesResponseBodyAgentSpacesTags extends $dara.Model {
56
+ /**
57
+ * @remarks
58
+ * The tag key.
59
+ *
60
+ * @example
61
+ * env
62
+ */
63
+ key?: string;
64
+ /**
65
+ * @remarks
66
+ * The tag value, which can be an empty string.
67
+ *
68
+ * @example
69
+ * test
70
+ */
71
+ value?: string;
72
+ static names(): { [key: string]: string } {
73
+ return {
74
+ key: 'key',
75
+ value: 'value',
76
+ };
77
+ }
78
+
79
+ static types(): { [key: string]: any } {
80
+ return {
81
+ key: 'string',
82
+ value: 'string',
83
+ };
84
+ }
85
+
86
+ validate() {
87
+ super.validate();
88
+ }
89
+
90
+ constructor(map?: { [key: string]: any }) {
91
+ super(map);
92
+ }
93
+ }
94
+
55
95
  export class ListAgentSpacesResponseBodyAgentSpaces extends $dara.Model {
56
96
  /**
57
97
  * @remarks
@@ -108,6 +148,14 @@ export class ListAgentSpacesResponseBodyAgentSpaces extends $dara.Model {
108
148
  * default-cms-1152309027070167-cn-beijing
109
149
  */
110
150
  slsProject?: string;
151
+ /**
152
+ * @remarks
153
+ * Returns only the tags of AgentSpaces that are active in the current region and match the local instance. An empty array is returned when it is confirmed that there are no tags. This field is omitted for entries in other regions, inactive entries, or entries that do not match the local instance. Omission of this field does not indicate the absence of tags.
154
+ *
155
+ * @example
156
+ * [{\\"key\\": \\"env\\", \\"value\\": \\"test\\"}]
157
+ */
158
+ tags?: ListAgentSpacesResponseBodyAgentSpacesTags[];
111
159
  /**
112
160
  * @remarks
113
161
  * The update time.
@@ -127,6 +175,7 @@ export class ListAgentSpacesResponseBodyAgentSpaces extends $dara.Model {
127
175
  mseNamespace: 'mseNamespace',
128
176
  regionId: 'regionId',
129
177
  slsProject: 'slsProject',
178
+ tags: 'tags',
130
179
  updateTime: 'updateTime',
131
180
  };
132
181
  }
@@ -140,6 +189,7 @@ export class ListAgentSpacesResponseBodyAgentSpaces extends $dara.Model {
140
189
  mseNamespace: ListAgentSpacesResponseBodyAgentSpacesMseNamespace,
141
190
  regionId: 'string',
142
191
  slsProject: 'string',
192
+ tags: { 'type': 'array', 'itemType': ListAgentSpacesResponseBodyAgentSpacesTags },
143
193
  updateTime: 'string',
144
194
  };
145
195
  }
@@ -148,6 +198,9 @@ export class ListAgentSpacesResponseBodyAgentSpaces extends $dara.Model {
148
198
  if(this.mseNamespace && typeof (this.mseNamespace as any).validate === 'function') {
149
199
  (this.mseNamespace as any).validate();
150
200
  }
201
+ if(Array.isArray(this.tags)) {
202
+ $dara.Model.validateArray(this.tags);
203
+ }
151
204
  super.validate();
152
205
  }
153
206
 
@@ -172,7 +225,7 @@ export class ListAgentSpacesResponseBody extends $dara.Model {
172
225
  maxResults?: number;
173
226
  /**
174
227
  * @remarks
175
- * The pagination token. This parameter is empty if no next page is available.
228
+ * The pagination token. This parameter is empty if there are no more pages.
176
229
  *
177
230
  * @example
178
231
  * b5754ef15c784abc8696d82790d2985c
@@ -188,7 +241,7 @@ export class ListAgentSpacesResponseBody extends $dara.Model {
188
241
  requestId?: string;
189
242
  /**
190
243
  * @remarks
191
- * The total count.
244
+ * The total number of entries.
192
245
  *
193
246
  * @example
194
247
  * 13
@@ -0,0 +1,74 @@
1
+ // This file is auto-generated, don't edit it
2
+ import * as $dara from '@darabonba/typescript';
3
+
4
+
5
+ export class ListAgentSpacesShrinkRequest extends $dara.Model {
6
+ /**
7
+ * @remarks
8
+ * The name of the AgentSpace.
9
+ *
10
+ * @example
11
+ * test-agent-space
12
+ */
13
+ agentSpace?: string;
14
+ /**
15
+ * @remarks
16
+ * The maximum number of results.
17
+ *
18
+ * @example
19
+ * 50
20
+ */
21
+ maxResults?: number;
22
+ /**
23
+ * @remarks
24
+ * The pagination token.
25
+ *
26
+ * @example
27
+ * pEL20OGYeZQez8NdW7ve
28
+ */
29
+ nextToken?: string;
30
+ /**
31
+ * @remarks
32
+ * The region ID.
33
+ *
34
+ * @example
35
+ * cn-hangzhou
36
+ */
37
+ regionId?: string;
38
+ /**
39
+ * @remarks
40
+ * Filters only active AgentSpaces in the current region. Multiple conditions use the AND operator, and keys must be unique. Omitting the value matches the existence of the key, and an empty character string is an exact match for an empty value. An empty array is equivalent to not using label filtering and retains the original cross-region resources.
41
+ *
42
+ * @example
43
+ * [{\\"key\\": \\"env\\", \\"value\\": \\"test\\"}]
44
+ */
45
+ tagShrink?: string;
46
+ static names(): { [key: string]: string } {
47
+ return {
48
+ agentSpace: 'agentSpace',
49
+ maxResults: 'maxResults',
50
+ nextToken: 'nextToken',
51
+ regionId: 'regionId',
52
+ tagShrink: 'tag',
53
+ };
54
+ }
55
+
56
+ static types(): { [key: string]: any } {
57
+ return {
58
+ agentSpace: 'string',
59
+ maxResults: 'number',
60
+ nextToken: 'string',
61
+ regionId: 'string',
62
+ tagShrink: 'string',
63
+ };
64
+ }
65
+
66
+ validate() {
67
+ super.validate();
68
+ }
69
+
70
+ constructor(map?: { [key: string]: any }) {
71
+ super(map);
72
+ }
73
+ }
74
+
@@ -0,0 +1,44 @@
1
+ // This file is auto-generated, don't edit it
2
+ import * as $dara from '@darabonba/typescript';
3
+
4
+
5
+ export class ListDatasetVersionsRequest extends $dara.Model {
6
+ /**
7
+ * @remarks
8
+ * The maximum number of versions to return per page. Valid values: 1 to 100. Default value: 100. The actual number of returned versions may be less than this value.
9
+ *
10
+ * @example
11
+ * 20
12
+ */
13
+ maxResults?: number;
14
+ /**
15
+ * @remarks
16
+ * The pagination token for the next page. Do not specify this parameter in the first request. To query subsequent pages, pass the nextToken value from the previous response as is, and keep the agent workspace and dataset name unchanged. The example is for demonstration purposes only. Use the actual token returned by the API operation.
17
+ *
18
+ * @example
19
+ * umaQfI7x758Ns4TgWrj8yA3fYlnk7dJgsfhMrSViRY8=
20
+ */
21
+ nextToken?: string;
22
+ static names(): { [key: string]: string } {
23
+ return {
24
+ maxResults: 'maxResults',
25
+ nextToken: 'nextToken',
26
+ };
27
+ }
28
+
29
+ static types(): { [key: string]: any } {
30
+ return {
31
+ maxResults: 'number',
32
+ nextToken: 'string',
33
+ };
34
+ }
35
+
36
+ validate() {
37
+ super.validate();
38
+ }
39
+
40
+ constructor(map?: { [key: string]: any }) {
41
+ super(map);
42
+ }
43
+ }
44
+
@@ -0,0 +1,40 @@
1
+ // This file is auto-generated, don't edit it
2
+ import * as $dara from '@darabonba/typescript';
3
+ import { ListDatasetVersionsResponseBody } from "./ListDatasetVersionsResponseBody";
4
+
5
+
6
+ export class ListDatasetVersionsResponse extends $dara.Model {
7
+ headers?: { [key: string]: string };
8
+ statusCode?: number;
9
+ body?: ListDatasetVersionsResponseBody;
10
+ static names(): { [key: string]: string } {
11
+ return {
12
+ headers: 'headers',
13
+ statusCode: 'statusCode',
14
+ body: 'body',
15
+ };
16
+ }
17
+
18
+ static types(): { [key: string]: any } {
19
+ return {
20
+ headers: { 'type': 'map', 'keyType': 'string', 'valueType': 'string' },
21
+ statusCode: 'number',
22
+ body: ListDatasetVersionsResponseBody,
23
+ };
24
+ }
25
+
26
+ validate() {
27
+ if(this.headers) {
28
+ $dara.Model.validateMap(this.headers);
29
+ }
30
+ if(this.body && typeof (this.body as any).validate === 'function') {
31
+ (this.body as any).validate();
32
+ }
33
+ super.validate();
34
+ }
35
+
36
+ constructor(map?: { [key: string]: any }) {
37
+ super(map);
38
+ }
39
+ }
40
+
@@ -0,0 +1,124 @@
1
+ // This file is auto-generated, don't edit it
2
+ import * as $dara from '@darabonba/typescript';
3
+
4
+
5
+ export class ListDatasetVersionsResponseBodyVersions extends $dara.Model {
6
+ /**
7
+ * @remarks
8
+ * The creation time of the version, in RFC 3339 format, including time zone information. For example, the Z in 2026-11-11T06:00:00Z indicates UTC.
9
+ *
10
+ * @example
11
+ * 2026-11-11T06:00:00Z
12
+ */
13
+ createTime?: string;
14
+ /**
15
+ * @remarks
16
+ * The description provided when the version was created. If no description was provided, an empty string is returned.
17
+ *
18
+ * @example
19
+ * The dataset version used for the first evaluation
20
+ */
21
+ description?: string;
22
+ /**
23
+ * @remarks
24
+ * The name of the historical version, which corresponds to the name specified when the version was created. This value can be used as the version parameter for DeleteDatasetVersion.
25
+ *
26
+ * @example
27
+ * v1
28
+ */
29
+ version?: string;
30
+ static names(): { [key: string]: string } {
31
+ return {
32
+ createTime: 'createTime',
33
+ description: 'description',
34
+ version: 'version',
35
+ };
36
+ }
37
+
38
+ static types(): { [key: string]: any } {
39
+ return {
40
+ createTime: 'string',
41
+ description: 'string',
42
+ version: 'string',
43
+ };
44
+ }
45
+
46
+ validate() {
47
+ super.validate();
48
+ }
49
+
50
+ constructor(map?: { [key: string]: any }) {
51
+ super(map);
52
+ }
53
+ }
54
+
55
+ export class ListDatasetVersionsResponseBody extends $dara.Model {
56
+ /**
57
+ * @remarks
58
+ * The maximum number of versions per page used for this query, which is not the actual number of versions returned on the current page.
59
+ *
60
+ * @example
61
+ * 20
62
+ */
63
+ maxResults?: number;
64
+ /**
65
+ * @remarks
66
+ * The pagination token for the next page. This parameter is returned when a next page exists. To query the next page, pass this value as is to nextToken. If this parameter is not returned or is empty, no next page exists. The example is for demonstration purposes only.
67
+ *
68
+ * @example
69
+ * umaQfI7x758Ns4TgWrj8yA3fYlnk7dJgsfhMrSViRY8=
70
+ */
71
+ nextToken?: string;
72
+ /**
73
+ * @remarks
74
+ * The unique identifier of the request, which is used to locate and troubleshoot issues.
75
+ *
76
+ * @example
77
+ * D17DE39E-6C62-50E3-9EB7-FDE41BB0D43D
78
+ */
79
+ requestId?: string;
80
+ /**
81
+ * @remarks
82
+ * The total number of versions of the dataset, excluding deleted versions. This value is not limited by the current page size.
83
+ *
84
+ * @example
85
+ * 35
86
+ */
87
+ total?: number;
88
+ /**
89
+ * @remarks
90
+ * The list of historical versions of the dataset on the current page. An empty array is returned if no versions meet the conditions.
91
+ */
92
+ versions?: ListDatasetVersionsResponseBodyVersions[];
93
+ static names(): { [key: string]: string } {
94
+ return {
95
+ maxResults: 'maxResults',
96
+ nextToken: 'nextToken',
97
+ requestId: 'requestId',
98
+ total: 'total',
99
+ versions: 'versions',
100
+ };
101
+ }
102
+
103
+ static types(): { [key: string]: any } {
104
+ return {
105
+ maxResults: 'number',
106
+ nextToken: 'string',
107
+ requestId: 'string',
108
+ total: 'number',
109
+ versions: { 'type': 'array', 'itemType': ListDatasetVersionsResponseBodyVersions },
110
+ };
111
+ }
112
+
113
+ validate() {
114
+ if(Array.isArray(this.versions)) {
115
+ $dara.Model.validateArray(this.versions);
116
+ }
117
+ super.validate();
118
+ }
119
+
120
+ constructor(map?: { [key: string]: any }) {
121
+ super(map);
122
+ }
123
+ }
124
+
@@ -46,6 +46,7 @@ export { ExecuteQueryRequestAnnotationFilter } from './ExecuteQueryRequest';
46
46
  export { ExecuteQueryResponseBodyMetaTruncation } from './ExecuteQueryResponseBody';
47
47
  export { ExecuteQueryResponseBodyMeta } from './ExecuteQueryResponseBody';
48
48
  export { GetAgentSpaceResponseBodyMseNamespace } from './GetAgentSpaceResponseBody';
49
+ export { GetAgentSpaceResponseBodyTags } from './GetAgentSpaceResponseBody';
49
50
  export { GetContextStoreResponseBodyConfigAudit } from './GetContextStoreResponseBody';
50
51
  export { GetContextStoreResponseBodyConfigAuditLogStore } from './GetContextStoreResponseBody';
51
52
  export { GetContextStoreResponseBodyConfigExtractionPoliciesModel } from './GetContextStoreResponseBody';
@@ -97,10 +98,13 @@ export { GetPipelineResponseBodySourceTrajectory } from './GetPipelineResponseBo
97
98
  export { GetPipelineResponseBodySource } from './GetPipelineResponseBody';
98
99
  export { GetPipelineStatsResponseBodySummary } from './GetPipelineStatsResponseBody';
99
100
  export { GetPipelineStatsResponseBodyTimeSeries } from './GetPipelineStatsResponseBody';
101
+ export { ListAgentSpacesRequestTag } from './ListAgentSpacesRequest';
100
102
  export { ListAgentSpacesResponseBodyAgentSpacesMseNamespace } from './ListAgentSpacesResponseBody';
103
+ export { ListAgentSpacesResponseBodyAgentSpacesTags } from './ListAgentSpacesResponseBody';
101
104
  export { ListAgentSpacesResponseBodyAgentSpaces } from './ListAgentSpacesResponseBody';
102
105
  export { ListContextStoreAPIKeysResponseBodyResults } from './ListContextStoreApikeysResponseBody';
103
106
  export { ListContextStoresResponseBodyResults } from './ListContextStoresResponseBody';
107
+ export { ListDatasetVersionsResponseBodyVersions } from './ListDatasetVersionsResponseBody';
104
108
  export { ListDatasetsResponseBodyDatasets } from './ListDatasetsResponseBody';
105
109
  export { ListEvaluationRunsResponseBodyEvaluationRuns } from './ListEvaluationRunsResponseBody';
106
110
  export { ListEvaluationTasksResponseBodyEvaluationTasks } from './ListEvaluationTasksResponseBody';
@@ -215,6 +219,9 @@ export { CreateContextStoreAPIKeyResponse } from './CreateContextStoreApikeyResp
215
219
  export { CreateDatasetRequest } from './CreateDatasetRequest';
216
220
  export { CreateDatasetResponseBody } from './CreateDatasetResponseBody';
217
221
  export { CreateDatasetResponse } from './CreateDatasetResponse';
222
+ export { CreateDatasetVersionRequest } from './CreateDatasetVersionRequest';
223
+ export { CreateDatasetVersionResponseBody } from './CreateDatasetVersionResponseBody';
224
+ export { CreateDatasetVersionResponse } from './CreateDatasetVersionResponse';
218
225
  export { CreateEvaluationTaskRequest } from './CreateEvaluationTaskRequest';
219
226
  export { CreateEvaluationTaskResponseBody } from './CreateEvaluationTaskResponseBody';
220
227
  export { CreateEvaluationTaskResponse } from './CreateEvaluationTaskResponse';
@@ -251,6 +258,9 @@ export { DeleteContextStoreAPIKeyResponse } from './DeleteContextStoreApikeyResp
251
258
  export { DeleteDatasetRequest } from './DeleteDatasetRequest';
252
259
  export { DeleteDatasetResponseBody } from './DeleteDatasetResponseBody';
253
260
  export { DeleteDatasetResponse } from './DeleteDatasetResponse';
261
+ export { DeleteDatasetVersionRequest } from './DeleteDatasetVersionRequest';
262
+ export { DeleteDatasetVersionResponseBody } from './DeleteDatasetVersionResponseBody';
263
+ export { DeleteDatasetVersionResponse } from './DeleteDatasetVersionResponse';
254
264
  export { DeleteEvaluationRunRequest } from './DeleteEvaluationRunRequest';
255
265
  export { DeleteEvaluationRunResponseBody } from './DeleteEvaluationRunResponseBody';
256
266
  export { DeleteEvaluationRunResponse } from './DeleteEvaluationRunResponse';
@@ -327,6 +337,7 @@ export { GetPipelineStatsRequest } from './GetPipelineStatsRequest';
327
337
  export { GetPipelineStatsResponseBody } from './GetPipelineStatsResponseBody';
328
338
  export { GetPipelineStatsResponse } from './GetPipelineStatsResponse';
329
339
  export { ListAgentSpacesRequest } from './ListAgentSpacesRequest';
340
+ export { ListAgentSpacesShrinkRequest } from './ListAgentSpacesShrinkRequest';
330
341
  export { ListAgentSpacesResponseBody } from './ListAgentSpacesResponseBody';
331
342
  export { ListAgentSpacesResponse } from './ListAgentSpacesResponse';
332
343
  export { ListContextStoreAPIKeysRequest } from './ListContextStoreApikeysRequest';
@@ -335,6 +346,9 @@ export { ListContextStoreAPIKeysResponse } from './ListContextStoreApikeysRespon
335
346
  export { ListContextStoresRequest } from './ListContextStoresRequest';
336
347
  export { ListContextStoresResponseBody } from './ListContextStoresResponseBody';
337
348
  export { ListContextStoresResponse } from './ListContextStoresResponse';
349
+ export { ListDatasetVersionsRequest } from './ListDatasetVersionsRequest';
350
+ export { ListDatasetVersionsResponseBody } from './ListDatasetVersionsResponseBody';
351
+ export { ListDatasetVersionsResponse } from './ListDatasetVersionsResponse';
338
352
  export { ListDatasetsRequest } from './ListDatasetsRequest';
339
353
  export { ListDatasetsShrinkRequest } from './ListDatasetsShrinkRequest';
340
354
  export { ListDatasetsResponseBody } from './ListDatasetsResponseBody';