lightningrod-ai 0.1.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 (123) hide show
  1. lightningrod/__init__.py +66 -0
  2. lightningrod/_display.py +204 -0
  3. lightningrod/_errors.py +67 -0
  4. lightningrod/_generated/__init__.py +8 -0
  5. lightningrod/_generated/api/__init__.py +1 -0
  6. lightningrod/_generated/api/datasets/__init__.py +1 -0
  7. lightningrod/_generated/api/datasets/create_dataset_datasets_post.py +133 -0
  8. lightningrod/_generated/api/datasets/get_dataset_datasets_dataset_id_get.py +168 -0
  9. lightningrod/_generated/api/datasets/get_dataset_samples_datasets_dataset_id_samples_get.py +209 -0
  10. lightningrod/_generated/api/datasets/upload_samples_datasets_dataset_id_samples_post.py +190 -0
  11. lightningrod/_generated/api/file_sets/__init__.py +1 -0
  12. lightningrod/_generated/api/file_sets/add_file_to_set_filesets_file_set_id_files_post.py +190 -0
  13. lightningrod/_generated/api/file_sets/create_file_set_filesets_post.py +174 -0
  14. lightningrod/_generated/api/file_sets/get_file_set_filesets_file_set_id_get.py +168 -0
  15. lightningrod/_generated/api/file_sets/list_file_sets_filesets_get.py +173 -0
  16. lightningrod/_generated/api/file_sets/list_files_in_set_filesets_file_set_id_files_get.py +209 -0
  17. lightningrod/_generated/api/files/__init__.py +1 -0
  18. lightningrod/_generated/api/files/create_file_upload_files_post.py +174 -0
  19. lightningrod/_generated/api/open_ai_compatible/__init__.py +1 -0
  20. lightningrod/_generated/api/open_ai_compatible/chat_completions_openai_chat_completions_post.py +174 -0
  21. lightningrod/_generated/api/organizations/__init__.py +1 -0
  22. lightningrod/_generated/api/organizations/get_balance_organizations_balance_get.py +131 -0
  23. lightningrod/_generated/api/samples/__init__.py +1 -0
  24. lightningrod/_generated/api/samples/validate_sample_samples_validate_post.py +174 -0
  25. lightningrod/_generated/api/transform_jobs/__init__.py +1 -0
  26. lightningrod/_generated/api/transform_jobs/cost_estimation_transform_jobs_cost_estimation_post.py +174 -0
  27. lightningrod/_generated/api/transform_jobs/create_transform_job_transform_jobs_post.py +174 -0
  28. lightningrod/_generated/api/transform_jobs/get_transform_job_metrics_transform_jobs_job_id_metrics_get.py +172 -0
  29. lightningrod/_generated/api/transform_jobs/get_transform_job_transform_jobs_job_id_get.py +168 -0
  30. lightningrod/_generated/client.py +268 -0
  31. lightningrod/_generated/errors.py +16 -0
  32. lightningrod/_generated/models/__init__.py +147 -0
  33. lightningrod/_generated/models/answer_type.py +129 -0
  34. lightningrod/_generated/models/answer_type_enum.py +11 -0
  35. lightningrod/_generated/models/balance_response.py +61 -0
  36. lightningrod/_generated/models/chat_completion_request.py +216 -0
  37. lightningrod/_generated/models/chat_completion_response.py +146 -0
  38. lightningrod/_generated/models/chat_message.py +69 -0
  39. lightningrod/_generated/models/choice.py +97 -0
  40. lightningrod/_generated/models/create_dataset_response.py +61 -0
  41. lightningrod/_generated/models/create_file_set_file_request.py +101 -0
  42. lightningrod/_generated/models/create_file_set_file_request_metadata_type_0.py +46 -0
  43. lightningrod/_generated/models/create_file_set_request.py +83 -0
  44. lightningrod/_generated/models/create_file_upload_request.py +91 -0
  45. lightningrod/_generated/models/create_file_upload_response.py +165 -0
  46. lightningrod/_generated/models/create_file_upload_response_metadata_type_0.py +46 -0
  47. lightningrod/_generated/models/create_transform_job_request.py +312 -0
  48. lightningrod/_generated/models/dataset_metadata.py +69 -0
  49. lightningrod/_generated/models/estimate_cost_request.py +243 -0
  50. lightningrod/_generated/models/estimate_cost_response.py +117 -0
  51. lightningrod/_generated/models/event_usage_summary.py +80 -0
  52. lightningrod/_generated/models/file_set.py +128 -0
  53. lightningrod/_generated/models/file_set_file.py +203 -0
  54. lightningrod/_generated/models/file_set_file_metadata_type_0.py +57 -0
  55. lightningrod/_generated/models/file_set_query_seed_generator.py +136 -0
  56. lightningrod/_generated/models/file_set_seed_generator.py +126 -0
  57. lightningrod/_generated/models/filter_criteria.py +83 -0
  58. lightningrod/_generated/models/forward_looking_question.py +130 -0
  59. lightningrod/_generated/models/forward_looking_question_generator.py +217 -0
  60. lightningrod/_generated/models/gdelt_seed_generator.py +103 -0
  61. lightningrod/_generated/models/http_validation_error.py +79 -0
  62. lightningrod/_generated/models/job_usage.py +185 -0
  63. lightningrod/_generated/models/job_usage_by_step_type_0.py +59 -0
  64. lightningrod/_generated/models/label.py +143 -0
  65. lightningrod/_generated/models/list_file_set_files_response.py +113 -0
  66. lightningrod/_generated/models/list_file_sets_response.py +75 -0
  67. lightningrod/_generated/models/llm_model_usage_summary.py +98 -0
  68. lightningrod/_generated/models/mock_transform_config.py +243 -0
  69. lightningrod/_generated/models/mock_transform_config_metadata_additions.py +46 -0
  70. lightningrod/_generated/models/model_config.py +316 -0
  71. lightningrod/_generated/models/model_source_type.py +16 -0
  72. lightningrod/_generated/models/news_context.py +82 -0
  73. lightningrod/_generated/models/news_context_generator.py +127 -0
  74. lightningrod/_generated/models/news_seed_generator.py +220 -0
  75. lightningrod/_generated/models/paginated_samples_response.py +113 -0
  76. lightningrod/_generated/models/pipeline_metrics_response.py +99 -0
  77. lightningrod/_generated/models/question.py +74 -0
  78. lightningrod/_generated/models/question_and_label_generator.py +217 -0
  79. lightningrod/_generated/models/question_generator.py +217 -0
  80. lightningrod/_generated/models/question_pipeline.py +417 -0
  81. lightningrod/_generated/models/question_renderer.py +123 -0
  82. lightningrod/_generated/models/rag_context.py +82 -0
  83. lightningrod/_generated/models/response_message.py +69 -0
  84. lightningrod/_generated/models/rollout.py +130 -0
  85. lightningrod/_generated/models/rollout_generator.py +139 -0
  86. lightningrod/_generated/models/rollout_parsed_output_type_0.py +46 -0
  87. lightningrod/_generated/models/sample.py +323 -0
  88. lightningrod/_generated/models/sample_meta.py +46 -0
  89. lightningrod/_generated/models/seed.py +135 -0
  90. lightningrod/_generated/models/step_cost_breakdown.py +109 -0
  91. lightningrod/_generated/models/transform_job.py +268 -0
  92. lightningrod/_generated/models/transform_job_status.py +11 -0
  93. lightningrod/_generated/models/transform_step_metrics_response.py +131 -0
  94. lightningrod/_generated/models/transform_type.py +25 -0
  95. lightningrod/_generated/models/upload_samples_request.py +75 -0
  96. lightningrod/_generated/models/upload_samples_response.py +69 -0
  97. lightningrod/_generated/models/usage.py +77 -0
  98. lightningrod/_generated/models/usage_summary.py +102 -0
  99. lightningrod/_generated/models/usage_summary_events.py +59 -0
  100. lightningrod/_generated/models/usage_summary_llm_by_model.py +59 -0
  101. lightningrod/_generated/models/validate_sample_response.py +69 -0
  102. lightningrod/_generated/models/validation_error.py +90 -0
  103. lightningrod/_generated/models/web_search_labeler.py +120 -0
  104. lightningrod/_generated/py.typed +1 -0
  105. lightningrod/_generated/types.py +54 -0
  106. lightningrod/client.py +48 -0
  107. lightningrod/datasets/__init__.py +4 -0
  108. lightningrod/datasets/client.py +174 -0
  109. lightningrod/datasets/dataset.py +255 -0
  110. lightningrod/files/__init__.py +0 -0
  111. lightningrod/files/client.py +58 -0
  112. lightningrod/filesets/__init__.py +0 -0
  113. lightningrod/filesets/client.py +106 -0
  114. lightningrod/organization/__init__.py +0 -0
  115. lightningrod/organization/client.py +17 -0
  116. lightningrod/py.typed +0 -0
  117. lightningrod/transforms/__init__.py +0 -0
  118. lightningrod/transforms/client.py +154 -0
  119. lightningrod_ai-0.1.6.dist-info/METADATA +122 -0
  120. lightningrod_ai-0.1.6.dist-info/RECORD +123 -0
  121. lightningrod_ai-0.1.6.dist-info/WHEEL +5 -0
  122. lightningrod_ai-0.1.6.dist-info/licenses/LICENSE +23 -0
  123. lightningrod_ai-0.1.6.dist-info/top_level.txt +1 -0
@@ -0,0 +1,312 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import TYPE_CHECKING, Any, TypeVar, cast
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ from ..types import UNSET, Unset
10
+
11
+ if TYPE_CHECKING:
12
+ from ..models.file_set_query_seed_generator import FileSetQuerySeedGenerator
13
+ from ..models.file_set_seed_generator import FileSetSeedGenerator
14
+ from ..models.forward_looking_question_generator import ForwardLookingQuestionGenerator
15
+ from ..models.gdelt_seed_generator import GdeltSeedGenerator
16
+ from ..models.news_seed_generator import NewsSeedGenerator
17
+ from ..models.question_and_label_generator import QuestionAndLabelGenerator
18
+ from ..models.question_generator import QuestionGenerator
19
+ from ..models.question_pipeline import QuestionPipeline
20
+ from ..models.question_renderer import QuestionRenderer
21
+ from ..models.web_search_labeler import WebSearchLabeler
22
+
23
+
24
+ T = TypeVar("T", bound="CreateTransformJobRequest")
25
+
26
+
27
+ @_attrs_define
28
+ class CreateTransformJobRequest:
29
+ """
30
+ Attributes:
31
+ config (FileSetQuerySeedGenerator | FileSetSeedGenerator | ForwardLookingQuestionGenerator | GdeltSeedGenerator
32
+ | NewsSeedGenerator | QuestionAndLabelGenerator | QuestionGenerator | QuestionPipeline | QuestionRenderer |
33
+ WebSearchLabeler):
34
+ input_dataset_id (None | str | Unset):
35
+ max_questions (int | None | Unset):
36
+ max_cost_dollars (float | None | Unset):
37
+ configuration_id (None | str | Unset):
38
+ use_local_rate_limiter (bool | Unset): Default: False.
39
+ """
40
+
41
+ config: (
42
+ FileSetQuerySeedGenerator
43
+ | FileSetSeedGenerator
44
+ | ForwardLookingQuestionGenerator
45
+ | GdeltSeedGenerator
46
+ | NewsSeedGenerator
47
+ | QuestionAndLabelGenerator
48
+ | QuestionGenerator
49
+ | QuestionPipeline
50
+ | QuestionRenderer
51
+ | WebSearchLabeler
52
+ )
53
+ input_dataset_id: None | str | Unset = UNSET
54
+ max_questions: int | None | Unset = UNSET
55
+ max_cost_dollars: float | None | Unset = UNSET
56
+ configuration_id: None | str | Unset = UNSET
57
+ use_local_rate_limiter: bool | Unset = False
58
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
59
+
60
+ def to_dict(self) -> dict[str, Any]:
61
+ from ..models.file_set_query_seed_generator import FileSetQuerySeedGenerator
62
+ from ..models.file_set_seed_generator import FileSetSeedGenerator
63
+ from ..models.forward_looking_question_generator import ForwardLookingQuestionGenerator
64
+ from ..models.gdelt_seed_generator import GdeltSeedGenerator
65
+ from ..models.news_seed_generator import NewsSeedGenerator
66
+ from ..models.question_and_label_generator import QuestionAndLabelGenerator
67
+ from ..models.question_generator import QuestionGenerator
68
+ from ..models.question_pipeline import QuestionPipeline
69
+ from ..models.question_renderer import QuestionRenderer
70
+
71
+ config: dict[str, Any]
72
+ if isinstance(self.config, ForwardLookingQuestionGenerator):
73
+ config = self.config.to_dict()
74
+ elif isinstance(self.config, FileSetQuerySeedGenerator):
75
+ config = self.config.to_dict()
76
+ elif isinstance(self.config, FileSetSeedGenerator):
77
+ config = self.config.to_dict()
78
+ elif isinstance(self.config, GdeltSeedGenerator):
79
+ config = self.config.to_dict()
80
+ elif isinstance(self.config, NewsSeedGenerator):
81
+ config = self.config.to_dict()
82
+ elif isinstance(self.config, QuestionAndLabelGenerator):
83
+ config = self.config.to_dict()
84
+ elif isinstance(self.config, QuestionGenerator):
85
+ config = self.config.to_dict()
86
+ elif isinstance(self.config, QuestionPipeline):
87
+ config = self.config.to_dict()
88
+ elif isinstance(self.config, QuestionRenderer):
89
+ config = self.config.to_dict()
90
+ else:
91
+ config = self.config.to_dict()
92
+
93
+ input_dataset_id: None | str | Unset
94
+ if isinstance(self.input_dataset_id, Unset):
95
+ input_dataset_id = UNSET
96
+ else:
97
+ input_dataset_id = self.input_dataset_id
98
+
99
+ max_questions: int | None | Unset
100
+ if isinstance(self.max_questions, Unset):
101
+ max_questions = UNSET
102
+ else:
103
+ max_questions = self.max_questions
104
+
105
+ max_cost_dollars: float | None | Unset
106
+ if isinstance(self.max_cost_dollars, Unset):
107
+ max_cost_dollars = UNSET
108
+ else:
109
+ max_cost_dollars = self.max_cost_dollars
110
+
111
+ configuration_id: None | str | Unset
112
+ if isinstance(self.configuration_id, Unset):
113
+ configuration_id = UNSET
114
+ else:
115
+ configuration_id = self.configuration_id
116
+
117
+ use_local_rate_limiter = self.use_local_rate_limiter
118
+
119
+ field_dict: dict[str, Any] = {}
120
+ field_dict.update(self.additional_properties)
121
+ field_dict.update(
122
+ {
123
+ "config": config,
124
+ }
125
+ )
126
+ if input_dataset_id is not UNSET:
127
+ field_dict["input_dataset_id"] = input_dataset_id
128
+ if max_questions is not UNSET:
129
+ field_dict["max_questions"] = max_questions
130
+ if max_cost_dollars is not UNSET:
131
+ field_dict["max_cost_dollars"] = max_cost_dollars
132
+ if configuration_id is not UNSET:
133
+ field_dict["configuration_id"] = configuration_id
134
+ if use_local_rate_limiter is not UNSET:
135
+ field_dict["use_local_rate_limiter"] = use_local_rate_limiter
136
+
137
+ return field_dict
138
+
139
+ @classmethod
140
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
141
+ from ..models.file_set_query_seed_generator import FileSetQuerySeedGenerator
142
+ from ..models.file_set_seed_generator import FileSetSeedGenerator
143
+ from ..models.forward_looking_question_generator import ForwardLookingQuestionGenerator
144
+ from ..models.gdelt_seed_generator import GdeltSeedGenerator
145
+ from ..models.news_seed_generator import NewsSeedGenerator
146
+ from ..models.question_and_label_generator import QuestionAndLabelGenerator
147
+ from ..models.question_generator import QuestionGenerator
148
+ from ..models.question_pipeline import QuestionPipeline
149
+ from ..models.question_renderer import QuestionRenderer
150
+ from ..models.web_search_labeler import WebSearchLabeler
151
+
152
+ d = dict(src_dict)
153
+
154
+ def _parse_config(
155
+ data: object,
156
+ ) -> (
157
+ FileSetQuerySeedGenerator
158
+ | FileSetSeedGenerator
159
+ | ForwardLookingQuestionGenerator
160
+ | GdeltSeedGenerator
161
+ | NewsSeedGenerator
162
+ | QuestionAndLabelGenerator
163
+ | QuestionGenerator
164
+ | QuestionPipeline
165
+ | QuestionRenderer
166
+ | WebSearchLabeler
167
+ ):
168
+ try:
169
+ if not isinstance(data, dict):
170
+ raise TypeError()
171
+ componentsschemas_create_transform_config_type_0 = ForwardLookingQuestionGenerator.from_dict(data)
172
+
173
+ return componentsschemas_create_transform_config_type_0
174
+ except (TypeError, ValueError, AttributeError, KeyError):
175
+ pass
176
+ try:
177
+ if not isinstance(data, dict):
178
+ raise TypeError()
179
+ componentsschemas_create_transform_config_type_1 = FileSetQuerySeedGenerator.from_dict(data)
180
+
181
+ return componentsschemas_create_transform_config_type_1
182
+ except (TypeError, ValueError, AttributeError, KeyError):
183
+ pass
184
+ try:
185
+ if not isinstance(data, dict):
186
+ raise TypeError()
187
+ componentsschemas_create_transform_config_type_2 = FileSetSeedGenerator.from_dict(data)
188
+
189
+ return componentsschemas_create_transform_config_type_2
190
+ except (TypeError, ValueError, AttributeError, KeyError):
191
+ pass
192
+ try:
193
+ if not isinstance(data, dict):
194
+ raise TypeError()
195
+ componentsschemas_create_transform_config_type_3 = GdeltSeedGenerator.from_dict(data)
196
+
197
+ return componentsschemas_create_transform_config_type_3
198
+ except (TypeError, ValueError, AttributeError, KeyError):
199
+ pass
200
+ try:
201
+ if not isinstance(data, dict):
202
+ raise TypeError()
203
+ componentsschemas_create_transform_config_type_4 = NewsSeedGenerator.from_dict(data)
204
+
205
+ return componentsschemas_create_transform_config_type_4
206
+ except (TypeError, ValueError, AttributeError, KeyError):
207
+ pass
208
+ try:
209
+ if not isinstance(data, dict):
210
+ raise TypeError()
211
+ componentsschemas_create_transform_config_type_5 = QuestionAndLabelGenerator.from_dict(data)
212
+
213
+ return componentsschemas_create_transform_config_type_5
214
+ except (TypeError, ValueError, AttributeError, KeyError):
215
+ pass
216
+ try:
217
+ if not isinstance(data, dict):
218
+ raise TypeError()
219
+ componentsschemas_create_transform_config_type_6 = QuestionGenerator.from_dict(data)
220
+
221
+ return componentsschemas_create_transform_config_type_6
222
+ except (TypeError, ValueError, AttributeError, KeyError):
223
+ pass
224
+ try:
225
+ if not isinstance(data, dict):
226
+ raise TypeError()
227
+ componentsschemas_create_transform_config_type_7 = QuestionPipeline.from_dict(data)
228
+
229
+ return componentsschemas_create_transform_config_type_7
230
+ except (TypeError, ValueError, AttributeError, KeyError):
231
+ pass
232
+ try:
233
+ if not isinstance(data, dict):
234
+ raise TypeError()
235
+ componentsschemas_create_transform_config_type_8 = QuestionRenderer.from_dict(data)
236
+
237
+ return componentsschemas_create_transform_config_type_8
238
+ except (TypeError, ValueError, AttributeError, KeyError):
239
+ pass
240
+ if not isinstance(data, dict):
241
+ raise TypeError()
242
+ componentsschemas_create_transform_config_type_9 = WebSearchLabeler.from_dict(data)
243
+
244
+ return componentsschemas_create_transform_config_type_9
245
+
246
+ config = _parse_config(d.pop("config"))
247
+
248
+ def _parse_input_dataset_id(data: object) -> None | str | Unset:
249
+ if data is None:
250
+ return data
251
+ if isinstance(data, Unset):
252
+ return data
253
+ return cast(None | str | Unset, data)
254
+
255
+ input_dataset_id = _parse_input_dataset_id(d.pop("input_dataset_id", UNSET))
256
+
257
+ def _parse_max_questions(data: object) -> int | None | Unset:
258
+ if data is None:
259
+ return data
260
+ if isinstance(data, Unset):
261
+ return data
262
+ return cast(int | None | Unset, data)
263
+
264
+ max_questions = _parse_max_questions(d.pop("max_questions", UNSET))
265
+
266
+ def _parse_max_cost_dollars(data: object) -> float | None | Unset:
267
+ if data is None:
268
+ return data
269
+ if isinstance(data, Unset):
270
+ return data
271
+ return cast(float | None | Unset, data)
272
+
273
+ max_cost_dollars = _parse_max_cost_dollars(d.pop("max_cost_dollars", UNSET))
274
+
275
+ def _parse_configuration_id(data: object) -> None | str | Unset:
276
+ if data is None:
277
+ return data
278
+ if isinstance(data, Unset):
279
+ return data
280
+ return cast(None | str | Unset, data)
281
+
282
+ configuration_id = _parse_configuration_id(d.pop("configuration_id", UNSET))
283
+
284
+ use_local_rate_limiter = d.pop("use_local_rate_limiter", UNSET)
285
+
286
+ create_transform_job_request = cls(
287
+ config=config,
288
+ input_dataset_id=input_dataset_id,
289
+ max_questions=max_questions,
290
+ max_cost_dollars=max_cost_dollars,
291
+ configuration_id=configuration_id,
292
+ use_local_rate_limiter=use_local_rate_limiter,
293
+ )
294
+
295
+ create_transform_job_request.additional_properties = d
296
+ return create_transform_job_request
297
+
298
+ @property
299
+ def additional_keys(self) -> list[str]:
300
+ return list(self.additional_properties.keys())
301
+
302
+ def __getitem__(self, key: str) -> Any:
303
+ return self.additional_properties[key]
304
+
305
+ def __setitem__(self, key: str, value: Any) -> None:
306
+ self.additional_properties[key] = value
307
+
308
+ def __delitem__(self, key: str) -> None:
309
+ del self.additional_properties[key]
310
+
311
+ def __contains__(self, key: str) -> bool:
312
+ return key in self.additional_properties
@@ -0,0 +1,69 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import Any, TypeVar
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ T = TypeVar("T", bound="DatasetMetadata")
10
+
11
+
12
+ @_attrs_define
13
+ class DatasetMetadata:
14
+ """
15
+ Attributes:
16
+ id (str):
17
+ num_rows (int):
18
+ """
19
+
20
+ id: str
21
+ num_rows: int
22
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
23
+
24
+ def to_dict(self) -> dict[str, Any]:
25
+ id = self.id
26
+
27
+ num_rows = self.num_rows
28
+
29
+ field_dict: dict[str, Any] = {}
30
+ field_dict.update(self.additional_properties)
31
+ field_dict.update(
32
+ {
33
+ "id": id,
34
+ "num_rows": num_rows,
35
+ }
36
+ )
37
+
38
+ return field_dict
39
+
40
+ @classmethod
41
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
42
+ d = dict(src_dict)
43
+ id = d.pop("id")
44
+
45
+ num_rows = d.pop("num_rows")
46
+
47
+ dataset_metadata = cls(
48
+ id=id,
49
+ num_rows=num_rows,
50
+ )
51
+
52
+ dataset_metadata.additional_properties = d
53
+ return dataset_metadata
54
+
55
+ @property
56
+ def additional_keys(self) -> list[str]:
57
+ return list(self.additional_properties.keys())
58
+
59
+ def __getitem__(self, key: str) -> Any:
60
+ return self.additional_properties[key]
61
+
62
+ def __setitem__(self, key: str, value: Any) -> None:
63
+ self.additional_properties[key] = value
64
+
65
+ def __delitem__(self, key: str) -> None:
66
+ del self.additional_properties[key]
67
+
68
+ def __contains__(self, key: str) -> bool:
69
+ return key in self.additional_properties
@@ -0,0 +1,243 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import TYPE_CHECKING, Any, TypeVar, cast
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ from ..types import UNSET, Unset
10
+
11
+ if TYPE_CHECKING:
12
+ from ..models.file_set_query_seed_generator import FileSetQuerySeedGenerator
13
+ from ..models.file_set_seed_generator import FileSetSeedGenerator
14
+ from ..models.forward_looking_question_generator import ForwardLookingQuestionGenerator
15
+ from ..models.gdelt_seed_generator import GdeltSeedGenerator
16
+ from ..models.news_seed_generator import NewsSeedGenerator
17
+ from ..models.question_and_label_generator import QuestionAndLabelGenerator
18
+ from ..models.question_generator import QuestionGenerator
19
+ from ..models.question_pipeline import QuestionPipeline
20
+ from ..models.question_renderer import QuestionRenderer
21
+ from ..models.web_search_labeler import WebSearchLabeler
22
+
23
+
24
+ T = TypeVar("T", bound="EstimateCostRequest")
25
+
26
+
27
+ @_attrs_define
28
+ class EstimateCostRequest:
29
+ """
30
+ Attributes:
31
+ config (FileSetQuerySeedGenerator | FileSetSeedGenerator | ForwardLookingQuestionGenerator | GdeltSeedGenerator
32
+ | NewsSeedGenerator | QuestionAndLabelGenerator | QuestionGenerator | QuestionPipeline | QuestionRenderer |
33
+ WebSearchLabeler):
34
+ max_questions (int | None | Unset):
35
+ """
36
+
37
+ config: (
38
+ FileSetQuerySeedGenerator
39
+ | FileSetSeedGenerator
40
+ | ForwardLookingQuestionGenerator
41
+ | GdeltSeedGenerator
42
+ | NewsSeedGenerator
43
+ | QuestionAndLabelGenerator
44
+ | QuestionGenerator
45
+ | QuestionPipeline
46
+ | QuestionRenderer
47
+ | WebSearchLabeler
48
+ )
49
+ max_questions: int | None | Unset = UNSET
50
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
51
+
52
+ def to_dict(self) -> dict[str, Any]:
53
+ from ..models.file_set_query_seed_generator import FileSetQuerySeedGenerator
54
+ from ..models.file_set_seed_generator import FileSetSeedGenerator
55
+ from ..models.forward_looking_question_generator import ForwardLookingQuestionGenerator
56
+ from ..models.gdelt_seed_generator import GdeltSeedGenerator
57
+ from ..models.news_seed_generator import NewsSeedGenerator
58
+ from ..models.question_and_label_generator import QuestionAndLabelGenerator
59
+ from ..models.question_generator import QuestionGenerator
60
+ from ..models.question_pipeline import QuestionPipeline
61
+ from ..models.question_renderer import QuestionRenderer
62
+
63
+ config: dict[str, Any]
64
+ if isinstance(self.config, ForwardLookingQuestionGenerator):
65
+ config = self.config.to_dict()
66
+ elif isinstance(self.config, FileSetQuerySeedGenerator):
67
+ config = self.config.to_dict()
68
+ elif isinstance(self.config, FileSetSeedGenerator):
69
+ config = self.config.to_dict()
70
+ elif isinstance(self.config, GdeltSeedGenerator):
71
+ config = self.config.to_dict()
72
+ elif isinstance(self.config, NewsSeedGenerator):
73
+ config = self.config.to_dict()
74
+ elif isinstance(self.config, QuestionAndLabelGenerator):
75
+ config = self.config.to_dict()
76
+ elif isinstance(self.config, QuestionGenerator):
77
+ config = self.config.to_dict()
78
+ elif isinstance(self.config, QuestionPipeline):
79
+ config = self.config.to_dict()
80
+ elif isinstance(self.config, QuestionRenderer):
81
+ config = self.config.to_dict()
82
+ else:
83
+ config = self.config.to_dict()
84
+
85
+ max_questions: int | None | Unset
86
+ if isinstance(self.max_questions, Unset):
87
+ max_questions = UNSET
88
+ else:
89
+ max_questions = self.max_questions
90
+
91
+ field_dict: dict[str, Any] = {}
92
+ field_dict.update(self.additional_properties)
93
+ field_dict.update(
94
+ {
95
+ "config": config,
96
+ }
97
+ )
98
+ if max_questions is not UNSET:
99
+ field_dict["max_questions"] = max_questions
100
+
101
+ return field_dict
102
+
103
+ @classmethod
104
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
105
+ from ..models.file_set_query_seed_generator import FileSetQuerySeedGenerator
106
+ from ..models.file_set_seed_generator import FileSetSeedGenerator
107
+ from ..models.forward_looking_question_generator import ForwardLookingQuestionGenerator
108
+ from ..models.gdelt_seed_generator import GdeltSeedGenerator
109
+ from ..models.news_seed_generator import NewsSeedGenerator
110
+ from ..models.question_and_label_generator import QuestionAndLabelGenerator
111
+ from ..models.question_generator import QuestionGenerator
112
+ from ..models.question_pipeline import QuestionPipeline
113
+ from ..models.question_renderer import QuestionRenderer
114
+ from ..models.web_search_labeler import WebSearchLabeler
115
+
116
+ d = dict(src_dict)
117
+
118
+ def _parse_config(
119
+ data: object,
120
+ ) -> (
121
+ FileSetQuerySeedGenerator
122
+ | FileSetSeedGenerator
123
+ | ForwardLookingQuestionGenerator
124
+ | GdeltSeedGenerator
125
+ | NewsSeedGenerator
126
+ | QuestionAndLabelGenerator
127
+ | QuestionGenerator
128
+ | QuestionPipeline
129
+ | QuestionRenderer
130
+ | WebSearchLabeler
131
+ ):
132
+ try:
133
+ if not isinstance(data, dict):
134
+ raise TypeError()
135
+ componentsschemas_create_transform_config_type_0 = ForwardLookingQuestionGenerator.from_dict(data)
136
+
137
+ return componentsschemas_create_transform_config_type_0
138
+ except (TypeError, ValueError, AttributeError, KeyError):
139
+ pass
140
+ try:
141
+ if not isinstance(data, dict):
142
+ raise TypeError()
143
+ componentsschemas_create_transform_config_type_1 = FileSetQuerySeedGenerator.from_dict(data)
144
+
145
+ return componentsschemas_create_transform_config_type_1
146
+ except (TypeError, ValueError, AttributeError, KeyError):
147
+ pass
148
+ try:
149
+ if not isinstance(data, dict):
150
+ raise TypeError()
151
+ componentsschemas_create_transform_config_type_2 = FileSetSeedGenerator.from_dict(data)
152
+
153
+ return componentsschemas_create_transform_config_type_2
154
+ except (TypeError, ValueError, AttributeError, KeyError):
155
+ pass
156
+ try:
157
+ if not isinstance(data, dict):
158
+ raise TypeError()
159
+ componentsschemas_create_transform_config_type_3 = GdeltSeedGenerator.from_dict(data)
160
+
161
+ return componentsschemas_create_transform_config_type_3
162
+ except (TypeError, ValueError, AttributeError, KeyError):
163
+ pass
164
+ try:
165
+ if not isinstance(data, dict):
166
+ raise TypeError()
167
+ componentsschemas_create_transform_config_type_4 = NewsSeedGenerator.from_dict(data)
168
+
169
+ return componentsschemas_create_transform_config_type_4
170
+ except (TypeError, ValueError, AttributeError, KeyError):
171
+ pass
172
+ try:
173
+ if not isinstance(data, dict):
174
+ raise TypeError()
175
+ componentsschemas_create_transform_config_type_5 = QuestionAndLabelGenerator.from_dict(data)
176
+
177
+ return componentsschemas_create_transform_config_type_5
178
+ except (TypeError, ValueError, AttributeError, KeyError):
179
+ pass
180
+ try:
181
+ if not isinstance(data, dict):
182
+ raise TypeError()
183
+ componentsschemas_create_transform_config_type_6 = QuestionGenerator.from_dict(data)
184
+
185
+ return componentsschemas_create_transform_config_type_6
186
+ except (TypeError, ValueError, AttributeError, KeyError):
187
+ pass
188
+ try:
189
+ if not isinstance(data, dict):
190
+ raise TypeError()
191
+ componentsschemas_create_transform_config_type_7 = QuestionPipeline.from_dict(data)
192
+
193
+ return componentsschemas_create_transform_config_type_7
194
+ except (TypeError, ValueError, AttributeError, KeyError):
195
+ pass
196
+ try:
197
+ if not isinstance(data, dict):
198
+ raise TypeError()
199
+ componentsschemas_create_transform_config_type_8 = QuestionRenderer.from_dict(data)
200
+
201
+ return componentsschemas_create_transform_config_type_8
202
+ except (TypeError, ValueError, AttributeError, KeyError):
203
+ pass
204
+ if not isinstance(data, dict):
205
+ raise TypeError()
206
+ componentsschemas_create_transform_config_type_9 = WebSearchLabeler.from_dict(data)
207
+
208
+ return componentsschemas_create_transform_config_type_9
209
+
210
+ config = _parse_config(d.pop("config"))
211
+
212
+ def _parse_max_questions(data: object) -> int | None | Unset:
213
+ if data is None:
214
+ return data
215
+ if isinstance(data, Unset):
216
+ return data
217
+ return cast(int | None | Unset, data)
218
+
219
+ max_questions = _parse_max_questions(d.pop("max_questions", UNSET))
220
+
221
+ estimate_cost_request = cls(
222
+ config=config,
223
+ max_questions=max_questions,
224
+ )
225
+
226
+ estimate_cost_request.additional_properties = d
227
+ return estimate_cost_request
228
+
229
+ @property
230
+ def additional_keys(self) -> list[str]:
231
+ return list(self.additional_properties.keys())
232
+
233
+ def __getitem__(self, key: str) -> Any:
234
+ return self.additional_properties[key]
235
+
236
+ def __setitem__(self, key: str, value: Any) -> None:
237
+ self.additional_properties[key] = value
238
+
239
+ def __delitem__(self, key: str) -> None:
240
+ del self.additional_properties[key]
241
+
242
+ def __contains__(self, key: str) -> bool:
243
+ return key in self.additional_properties