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,417 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import TYPE_CHECKING, Any, Literal, 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.mock_transform_config import MockTransformConfig
17
+ from ..models.news_context_generator import NewsContextGenerator
18
+ from ..models.news_seed_generator import NewsSeedGenerator
19
+ from ..models.question_and_label_generator import QuestionAndLabelGenerator
20
+ from ..models.question_generator import QuestionGenerator
21
+ from ..models.question_renderer import QuestionRenderer
22
+ from ..models.rollout_generator import RolloutGenerator
23
+ from ..models.web_search_labeler import WebSearchLabeler
24
+
25
+
26
+ T = TypeVar("T", bound="QuestionPipeline")
27
+
28
+
29
+ @_attrs_define
30
+ class QuestionPipeline:
31
+ """
32
+ Attributes:
33
+ seed_generator (FileSetQuerySeedGenerator | FileSetSeedGenerator | GdeltSeedGenerator | MockTransformConfig |
34
+ NewsSeedGenerator): Configuration for seed generation
35
+ question_generator (ForwardLookingQuestionGenerator | MockTransformConfig | QuestionAndLabelGenerator |
36
+ QuestionGenerator): Configuration for question generation
37
+ config_type (Literal['QUESTION_PIPELINE'] | Unset): Type of transform configuration Default:
38
+ 'QUESTION_PIPELINE'.
39
+ labeler (MockTransformConfig | None | Unset | WebSearchLabeler): Configuration for labeling. Not needed when
40
+ using QuestionAndLabelGenerator.
41
+ context_generators (list[MockTransformConfig | NewsContextGenerator] | None | Unset): Optional list of context
42
+ generators to run before rendering
43
+ renderer (MockTransformConfig | None | QuestionRenderer | Unset): Optional configuration for rendering the final
44
+ prompt
45
+ rollout_generator (MockTransformConfig | None | RolloutGenerator | Unset): Optional configuration for generating
46
+ rollouts from multiple models
47
+ """
48
+
49
+ seed_generator: (
50
+ FileSetQuerySeedGenerator | FileSetSeedGenerator | GdeltSeedGenerator | MockTransformConfig | NewsSeedGenerator
51
+ )
52
+ question_generator: (
53
+ ForwardLookingQuestionGenerator | MockTransformConfig | QuestionAndLabelGenerator | QuestionGenerator
54
+ )
55
+ config_type: Literal["QUESTION_PIPELINE"] | Unset = "QUESTION_PIPELINE"
56
+ labeler: MockTransformConfig | None | Unset | WebSearchLabeler = UNSET
57
+ context_generators: list[MockTransformConfig | NewsContextGenerator] | None | Unset = UNSET
58
+ renderer: MockTransformConfig | None | QuestionRenderer | Unset = UNSET
59
+ rollout_generator: MockTransformConfig | None | RolloutGenerator | Unset = UNSET
60
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
61
+
62
+ def to_dict(self) -> dict[str, Any]:
63
+ from ..models.file_set_query_seed_generator import FileSetQuerySeedGenerator
64
+ from ..models.file_set_seed_generator import FileSetSeedGenerator
65
+ from ..models.forward_looking_question_generator import ForwardLookingQuestionGenerator
66
+ from ..models.gdelt_seed_generator import GdeltSeedGenerator
67
+ from ..models.mock_transform_config import MockTransformConfig
68
+ from ..models.news_context_generator import NewsContextGenerator
69
+ from ..models.news_seed_generator import NewsSeedGenerator
70
+ from ..models.question_and_label_generator import QuestionAndLabelGenerator
71
+ from ..models.question_generator import QuestionGenerator
72
+ from ..models.question_renderer import QuestionRenderer
73
+ from ..models.rollout_generator import RolloutGenerator
74
+ from ..models.web_search_labeler import WebSearchLabeler
75
+
76
+ seed_generator: dict[str, Any]
77
+ if isinstance(self.seed_generator, NewsSeedGenerator):
78
+ seed_generator = self.seed_generator.to_dict()
79
+ elif isinstance(self.seed_generator, GdeltSeedGenerator):
80
+ seed_generator = self.seed_generator.to_dict()
81
+ elif isinstance(self.seed_generator, FileSetSeedGenerator):
82
+ seed_generator = self.seed_generator.to_dict()
83
+ elif isinstance(self.seed_generator, FileSetQuerySeedGenerator):
84
+ seed_generator = self.seed_generator.to_dict()
85
+ else:
86
+ seed_generator = self.seed_generator.to_dict()
87
+
88
+ question_generator: dict[str, Any]
89
+ if isinstance(self.question_generator, QuestionGenerator):
90
+ question_generator = self.question_generator.to_dict()
91
+ elif isinstance(self.question_generator, ForwardLookingQuestionGenerator):
92
+ question_generator = self.question_generator.to_dict()
93
+ elif isinstance(self.question_generator, QuestionAndLabelGenerator):
94
+ question_generator = self.question_generator.to_dict()
95
+ else:
96
+ question_generator = self.question_generator.to_dict()
97
+
98
+ config_type = self.config_type
99
+
100
+ labeler: dict[str, Any] | None | Unset
101
+ if isinstance(self.labeler, Unset):
102
+ labeler = UNSET
103
+ elif isinstance(self.labeler, WebSearchLabeler):
104
+ labeler = self.labeler.to_dict()
105
+ elif isinstance(self.labeler, MockTransformConfig):
106
+ labeler = self.labeler.to_dict()
107
+ else:
108
+ labeler = self.labeler
109
+
110
+ context_generators: list[dict[str, Any]] | None | Unset
111
+ if isinstance(self.context_generators, Unset):
112
+ context_generators = UNSET
113
+ elif isinstance(self.context_generators, list):
114
+ context_generators = []
115
+ for context_generators_type_0_item_data in self.context_generators:
116
+ context_generators_type_0_item: dict[str, Any]
117
+ if isinstance(context_generators_type_0_item_data, NewsContextGenerator):
118
+ context_generators_type_0_item = context_generators_type_0_item_data.to_dict()
119
+ else:
120
+ context_generators_type_0_item = context_generators_type_0_item_data.to_dict()
121
+
122
+ context_generators.append(context_generators_type_0_item)
123
+
124
+ else:
125
+ context_generators = self.context_generators
126
+
127
+ renderer: dict[str, Any] | None | Unset
128
+ if isinstance(self.renderer, Unset):
129
+ renderer = UNSET
130
+ elif isinstance(self.renderer, QuestionRenderer):
131
+ renderer = self.renderer.to_dict()
132
+ elif isinstance(self.renderer, MockTransformConfig):
133
+ renderer = self.renderer.to_dict()
134
+ else:
135
+ renderer = self.renderer
136
+
137
+ rollout_generator: dict[str, Any] | None | Unset
138
+ if isinstance(self.rollout_generator, Unset):
139
+ rollout_generator = UNSET
140
+ elif isinstance(self.rollout_generator, RolloutGenerator):
141
+ rollout_generator = self.rollout_generator.to_dict()
142
+ elif isinstance(self.rollout_generator, MockTransformConfig):
143
+ rollout_generator = self.rollout_generator.to_dict()
144
+ else:
145
+ rollout_generator = self.rollout_generator
146
+
147
+ field_dict: dict[str, Any] = {}
148
+ field_dict.update(self.additional_properties)
149
+ field_dict.update(
150
+ {
151
+ "seed_generator": seed_generator,
152
+ "question_generator": question_generator,
153
+ }
154
+ )
155
+ if config_type is not UNSET:
156
+ field_dict["config_type"] = config_type
157
+ if labeler is not UNSET:
158
+ field_dict["labeler"] = labeler
159
+ if context_generators is not UNSET:
160
+ field_dict["context_generators"] = context_generators
161
+ if renderer is not UNSET:
162
+ field_dict["renderer"] = renderer
163
+ if rollout_generator is not UNSET:
164
+ field_dict["rollout_generator"] = rollout_generator
165
+
166
+ return field_dict
167
+
168
+ @classmethod
169
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
170
+ from ..models.file_set_query_seed_generator import FileSetQuerySeedGenerator
171
+ from ..models.file_set_seed_generator import FileSetSeedGenerator
172
+ from ..models.forward_looking_question_generator import ForwardLookingQuestionGenerator
173
+ from ..models.gdelt_seed_generator import GdeltSeedGenerator
174
+ from ..models.mock_transform_config import MockTransformConfig
175
+ from ..models.news_context_generator import NewsContextGenerator
176
+ from ..models.news_seed_generator import NewsSeedGenerator
177
+ from ..models.question_and_label_generator import QuestionAndLabelGenerator
178
+ from ..models.question_generator import QuestionGenerator
179
+ from ..models.question_renderer import QuestionRenderer
180
+ from ..models.rollout_generator import RolloutGenerator
181
+ from ..models.web_search_labeler import WebSearchLabeler
182
+
183
+ d = dict(src_dict)
184
+
185
+ def _parse_seed_generator(
186
+ data: object,
187
+ ) -> (
188
+ FileSetQuerySeedGenerator
189
+ | FileSetSeedGenerator
190
+ | GdeltSeedGenerator
191
+ | MockTransformConfig
192
+ | NewsSeedGenerator
193
+ ):
194
+ try:
195
+ if not isinstance(data, dict):
196
+ raise TypeError()
197
+ seed_generator_type_0 = NewsSeedGenerator.from_dict(data)
198
+
199
+ return seed_generator_type_0
200
+ except (TypeError, ValueError, AttributeError, KeyError):
201
+ pass
202
+ try:
203
+ if not isinstance(data, dict):
204
+ raise TypeError()
205
+ seed_generator_type_1 = GdeltSeedGenerator.from_dict(data)
206
+
207
+ return seed_generator_type_1
208
+ except (TypeError, ValueError, AttributeError, KeyError):
209
+ pass
210
+ try:
211
+ if not isinstance(data, dict):
212
+ raise TypeError()
213
+ seed_generator_type_2 = FileSetSeedGenerator.from_dict(data)
214
+
215
+ return seed_generator_type_2
216
+ except (TypeError, ValueError, AttributeError, KeyError):
217
+ pass
218
+ try:
219
+ if not isinstance(data, dict):
220
+ raise TypeError()
221
+ seed_generator_type_3 = FileSetQuerySeedGenerator.from_dict(data)
222
+
223
+ return seed_generator_type_3
224
+ except (TypeError, ValueError, AttributeError, KeyError):
225
+ pass
226
+ if not isinstance(data, dict):
227
+ raise TypeError()
228
+ seed_generator_type_4 = MockTransformConfig.from_dict(data)
229
+
230
+ return seed_generator_type_4
231
+
232
+ seed_generator = _parse_seed_generator(d.pop("seed_generator"))
233
+
234
+ def _parse_question_generator(
235
+ data: object,
236
+ ) -> ForwardLookingQuestionGenerator | MockTransformConfig | QuestionAndLabelGenerator | QuestionGenerator:
237
+ try:
238
+ if not isinstance(data, dict):
239
+ raise TypeError()
240
+ question_generator_type_0 = QuestionGenerator.from_dict(data)
241
+
242
+ return question_generator_type_0
243
+ except (TypeError, ValueError, AttributeError, KeyError):
244
+ pass
245
+ try:
246
+ if not isinstance(data, dict):
247
+ raise TypeError()
248
+ question_generator_type_1 = ForwardLookingQuestionGenerator.from_dict(data)
249
+
250
+ return question_generator_type_1
251
+ except (TypeError, ValueError, AttributeError, KeyError):
252
+ pass
253
+ try:
254
+ if not isinstance(data, dict):
255
+ raise TypeError()
256
+ question_generator_type_2 = QuestionAndLabelGenerator.from_dict(data)
257
+
258
+ return question_generator_type_2
259
+ except (TypeError, ValueError, AttributeError, KeyError):
260
+ pass
261
+ if not isinstance(data, dict):
262
+ raise TypeError()
263
+ question_generator_type_3 = MockTransformConfig.from_dict(data)
264
+
265
+ return question_generator_type_3
266
+
267
+ question_generator = _parse_question_generator(d.pop("question_generator"))
268
+
269
+ config_type = cast(Literal["QUESTION_PIPELINE"] | Unset, d.pop("config_type", UNSET))
270
+ if config_type != "QUESTION_PIPELINE" and not isinstance(config_type, Unset):
271
+ raise ValueError(f"config_type must match const 'QUESTION_PIPELINE', got '{config_type}'")
272
+
273
+ def _parse_labeler(data: object) -> MockTransformConfig | None | Unset | WebSearchLabeler:
274
+ if data is None:
275
+ return data
276
+ if isinstance(data, Unset):
277
+ return data
278
+ try:
279
+ if not isinstance(data, dict):
280
+ raise TypeError()
281
+ labeler_type_0_type_0 = WebSearchLabeler.from_dict(data)
282
+
283
+ return labeler_type_0_type_0
284
+ except (TypeError, ValueError, AttributeError, KeyError):
285
+ pass
286
+ try:
287
+ if not isinstance(data, dict):
288
+ raise TypeError()
289
+ labeler_type_0_type_1 = MockTransformConfig.from_dict(data)
290
+
291
+ return labeler_type_0_type_1
292
+ except (TypeError, ValueError, AttributeError, KeyError):
293
+ pass
294
+ return cast(MockTransformConfig | None | Unset | WebSearchLabeler, data)
295
+
296
+ labeler = _parse_labeler(d.pop("labeler", UNSET))
297
+
298
+ def _parse_context_generators(data: object) -> list[MockTransformConfig | NewsContextGenerator] | None | Unset:
299
+ if data is None:
300
+ return data
301
+ if isinstance(data, Unset):
302
+ return data
303
+ try:
304
+ if not isinstance(data, list):
305
+ raise TypeError()
306
+ context_generators_type_0 = []
307
+ _context_generators_type_0 = data
308
+ for context_generators_type_0_item_data in _context_generators_type_0:
309
+
310
+ def _parse_context_generators_type_0_item(
311
+ data: object,
312
+ ) -> MockTransformConfig | NewsContextGenerator:
313
+ try:
314
+ if not isinstance(data, dict):
315
+ raise TypeError()
316
+ context_generators_type_0_item_type_0 = NewsContextGenerator.from_dict(data)
317
+
318
+ return context_generators_type_0_item_type_0
319
+ except (TypeError, ValueError, AttributeError, KeyError):
320
+ pass
321
+ if not isinstance(data, dict):
322
+ raise TypeError()
323
+ context_generators_type_0_item_type_1 = MockTransformConfig.from_dict(data)
324
+
325
+ return context_generators_type_0_item_type_1
326
+
327
+ context_generators_type_0_item = _parse_context_generators_type_0_item(
328
+ context_generators_type_0_item_data
329
+ )
330
+
331
+ context_generators_type_0.append(context_generators_type_0_item)
332
+
333
+ return context_generators_type_0
334
+ except (TypeError, ValueError, AttributeError, KeyError):
335
+ pass
336
+ return cast(list[MockTransformConfig | NewsContextGenerator] | None | Unset, data)
337
+
338
+ context_generators = _parse_context_generators(d.pop("context_generators", UNSET))
339
+
340
+ def _parse_renderer(data: object) -> MockTransformConfig | None | QuestionRenderer | Unset:
341
+ if data is None:
342
+ return data
343
+ if isinstance(data, Unset):
344
+ return data
345
+ try:
346
+ if not isinstance(data, dict):
347
+ raise TypeError()
348
+ renderer_type_0_type_0 = QuestionRenderer.from_dict(data)
349
+
350
+ return renderer_type_0_type_0
351
+ except (TypeError, ValueError, AttributeError, KeyError):
352
+ pass
353
+ try:
354
+ if not isinstance(data, dict):
355
+ raise TypeError()
356
+ renderer_type_0_type_1 = MockTransformConfig.from_dict(data)
357
+
358
+ return renderer_type_0_type_1
359
+ except (TypeError, ValueError, AttributeError, KeyError):
360
+ pass
361
+ return cast(MockTransformConfig | None | QuestionRenderer | Unset, data)
362
+
363
+ renderer = _parse_renderer(d.pop("renderer", UNSET))
364
+
365
+ def _parse_rollout_generator(data: object) -> MockTransformConfig | None | RolloutGenerator | Unset:
366
+ if data is None:
367
+ return data
368
+ if isinstance(data, Unset):
369
+ return data
370
+ try:
371
+ if not isinstance(data, dict):
372
+ raise TypeError()
373
+ rollout_generator_type_0_type_0 = RolloutGenerator.from_dict(data)
374
+
375
+ return rollout_generator_type_0_type_0
376
+ except (TypeError, ValueError, AttributeError, KeyError):
377
+ pass
378
+ try:
379
+ if not isinstance(data, dict):
380
+ raise TypeError()
381
+ rollout_generator_type_0_type_1 = MockTransformConfig.from_dict(data)
382
+
383
+ return rollout_generator_type_0_type_1
384
+ except (TypeError, ValueError, AttributeError, KeyError):
385
+ pass
386
+ return cast(MockTransformConfig | None | RolloutGenerator | Unset, data)
387
+
388
+ rollout_generator = _parse_rollout_generator(d.pop("rollout_generator", UNSET))
389
+
390
+ question_pipeline = cls(
391
+ seed_generator=seed_generator,
392
+ question_generator=question_generator,
393
+ config_type=config_type,
394
+ labeler=labeler,
395
+ context_generators=context_generators,
396
+ renderer=renderer,
397
+ rollout_generator=rollout_generator,
398
+ )
399
+
400
+ question_pipeline.additional_properties = d
401
+ return question_pipeline
402
+
403
+ @property
404
+ def additional_keys(self) -> list[str]:
405
+ return list(self.additional_properties.keys())
406
+
407
+ def __getitem__(self, key: str) -> Any:
408
+ return self.additional_properties[key]
409
+
410
+ def __setitem__(self, key: str, value: Any) -> None:
411
+ self.additional_properties[key] = value
412
+
413
+ def __delitem__(self, key: str) -> None:
414
+ del self.additional_properties[key]
415
+
416
+ def __contains__(self, key: str) -> bool:
417
+ return key in self.additional_properties
@@ -0,0 +1,123 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import TYPE_CHECKING, Any, Literal, 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.answer_type import AnswerType
13
+
14
+
15
+ T = TypeVar("T", bound="QuestionRenderer")
16
+
17
+
18
+ @_attrs_define
19
+ class QuestionRenderer:
20
+ """
21
+ Attributes:
22
+ config_type (Literal['QUESTION_RENDERER'] | Unset): Type of transform configuration Default:
23
+ 'QUESTION_RENDERER'.
24
+ template (None | str | Unset): Custom template for rendering the prompt. If not provided, dynamically builds
25
+ based on available content. Supports placeholders like {question_text}, {context}, {answer_instructions}.
26
+ answer_type (AnswerType | None | Unset): The type of answer expected, used to render answer instructions
27
+ """
28
+
29
+ config_type: Literal["QUESTION_RENDERER"] | Unset = "QUESTION_RENDERER"
30
+ template: None | str | Unset = UNSET
31
+ answer_type: AnswerType | None | Unset = UNSET
32
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
33
+
34
+ def to_dict(self) -> dict[str, Any]:
35
+ from ..models.answer_type import AnswerType
36
+
37
+ config_type = self.config_type
38
+
39
+ template: None | str | Unset
40
+ if isinstance(self.template, Unset):
41
+ template = UNSET
42
+ else:
43
+ template = self.template
44
+
45
+ answer_type: dict[str, Any] | None | Unset
46
+ if isinstance(self.answer_type, Unset):
47
+ answer_type = UNSET
48
+ elif isinstance(self.answer_type, AnswerType):
49
+ answer_type = self.answer_type.to_dict()
50
+ else:
51
+ answer_type = self.answer_type
52
+
53
+ field_dict: dict[str, Any] = {}
54
+ field_dict.update(self.additional_properties)
55
+ field_dict.update({})
56
+ if config_type is not UNSET:
57
+ field_dict["config_type"] = config_type
58
+ if template is not UNSET:
59
+ field_dict["template"] = template
60
+ if answer_type is not UNSET:
61
+ field_dict["answer_type"] = answer_type
62
+
63
+ return field_dict
64
+
65
+ @classmethod
66
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
67
+ from ..models.answer_type import AnswerType
68
+
69
+ d = dict(src_dict)
70
+ config_type = cast(Literal["QUESTION_RENDERER"] | Unset, d.pop("config_type", UNSET))
71
+ if config_type != "QUESTION_RENDERER" and not isinstance(config_type, Unset):
72
+ raise ValueError(f"config_type must match const 'QUESTION_RENDERER', got '{config_type}'")
73
+
74
+ def _parse_template(data: object) -> None | str | Unset:
75
+ if data is None:
76
+ return data
77
+ if isinstance(data, Unset):
78
+ return data
79
+ return cast(None | str | Unset, data)
80
+
81
+ template = _parse_template(d.pop("template", UNSET))
82
+
83
+ def _parse_answer_type(data: object) -> AnswerType | None | Unset:
84
+ if data is None:
85
+ return data
86
+ if isinstance(data, Unset):
87
+ return data
88
+ try:
89
+ if not isinstance(data, dict):
90
+ raise TypeError()
91
+ answer_type_type_0 = AnswerType.from_dict(data)
92
+
93
+ return answer_type_type_0
94
+ except (TypeError, ValueError, AttributeError, KeyError):
95
+ pass
96
+ return cast(AnswerType | None | Unset, data)
97
+
98
+ answer_type = _parse_answer_type(d.pop("answer_type", UNSET))
99
+
100
+ question_renderer = cls(
101
+ config_type=config_type,
102
+ template=template,
103
+ answer_type=answer_type,
104
+ )
105
+
106
+ question_renderer.additional_properties = d
107
+ return question_renderer
108
+
109
+ @property
110
+ def additional_keys(self) -> list[str]:
111
+ return list(self.additional_properties.keys())
112
+
113
+ def __getitem__(self, key: str) -> Any:
114
+ return self.additional_properties[key]
115
+
116
+ def __setitem__(self, key: str, value: Any) -> None:
117
+ self.additional_properties[key] = value
118
+
119
+ def __delitem__(self, key: str) -> None:
120
+ del self.additional_properties[key]
121
+
122
+ def __contains__(self, key: str) -> bool:
123
+ return key in self.additional_properties
@@ -0,0 +1,82 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import Any, Literal, 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
+ T = TypeVar("T", bound="RAGContext")
12
+
13
+
14
+ @_attrs_define
15
+ class RAGContext:
16
+ """
17
+ Attributes:
18
+ rendered_context (str):
19
+ document_id (str):
20
+ context_type (Literal['RAG_CONTEXT'] | Unset): Default: 'RAG_CONTEXT'.
21
+ """
22
+
23
+ rendered_context: str
24
+ document_id: str
25
+ context_type: Literal["RAG_CONTEXT"] | Unset = "RAG_CONTEXT"
26
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
27
+
28
+ def to_dict(self) -> dict[str, Any]:
29
+ rendered_context = self.rendered_context
30
+
31
+ document_id = self.document_id
32
+
33
+ context_type = self.context_type
34
+
35
+ field_dict: dict[str, Any] = {}
36
+ field_dict.update(self.additional_properties)
37
+ field_dict.update(
38
+ {
39
+ "rendered_context": rendered_context,
40
+ "document_id": document_id,
41
+ }
42
+ )
43
+ if context_type is not UNSET:
44
+ field_dict["context_type"] = context_type
45
+
46
+ return field_dict
47
+
48
+ @classmethod
49
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
50
+ d = dict(src_dict)
51
+ rendered_context = d.pop("rendered_context")
52
+
53
+ document_id = d.pop("document_id")
54
+
55
+ context_type = cast(Literal["RAG_CONTEXT"] | Unset, d.pop("context_type", UNSET))
56
+ if context_type != "RAG_CONTEXT" and not isinstance(context_type, Unset):
57
+ raise ValueError(f"context_type must match const 'RAG_CONTEXT', got '{context_type}'")
58
+
59
+ rag_context = cls(
60
+ rendered_context=rendered_context,
61
+ document_id=document_id,
62
+ context_type=context_type,
63
+ )
64
+
65
+ rag_context.additional_properties = d
66
+ return rag_context
67
+
68
+ @property
69
+ def additional_keys(self) -> list[str]:
70
+ return list(self.additional_properties.keys())
71
+
72
+ def __getitem__(self, key: str) -> Any:
73
+ return self.additional_properties[key]
74
+
75
+ def __setitem__(self, key: str, value: Any) -> None:
76
+ self.additional_properties[key] = value
77
+
78
+ def __delitem__(self, key: str) -> None:
79
+ del self.additional_properties[key]
80
+
81
+ def __contains__(self, key: str) -> bool:
82
+ 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="ResponseMessage")
10
+
11
+
12
+ @_attrs_define
13
+ class ResponseMessage:
14
+ """
15
+ Attributes:
16
+ role (str): The role of the message author
17
+ content (str): The content of the message
18
+ """
19
+
20
+ role: str
21
+ content: str
22
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
23
+
24
+ def to_dict(self) -> dict[str, Any]:
25
+ role = self.role
26
+
27
+ content = self.content
28
+
29
+ field_dict: dict[str, Any] = {}
30
+ field_dict.update(self.additional_properties)
31
+ field_dict.update(
32
+ {
33
+ "role": role,
34
+ "content": content,
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
+ role = d.pop("role")
44
+
45
+ content = d.pop("content")
46
+
47
+ response_message = cls(
48
+ role=role,
49
+ content=content,
50
+ )
51
+
52
+ response_message.additional_properties = d
53
+ return response_message
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