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.
- lightningrod/__init__.py +66 -0
- lightningrod/_display.py +204 -0
- lightningrod/_errors.py +67 -0
- lightningrod/_generated/__init__.py +8 -0
- lightningrod/_generated/api/__init__.py +1 -0
- lightningrod/_generated/api/datasets/__init__.py +1 -0
- lightningrod/_generated/api/datasets/create_dataset_datasets_post.py +133 -0
- lightningrod/_generated/api/datasets/get_dataset_datasets_dataset_id_get.py +168 -0
- lightningrod/_generated/api/datasets/get_dataset_samples_datasets_dataset_id_samples_get.py +209 -0
- lightningrod/_generated/api/datasets/upload_samples_datasets_dataset_id_samples_post.py +190 -0
- lightningrod/_generated/api/file_sets/__init__.py +1 -0
- lightningrod/_generated/api/file_sets/add_file_to_set_filesets_file_set_id_files_post.py +190 -0
- lightningrod/_generated/api/file_sets/create_file_set_filesets_post.py +174 -0
- lightningrod/_generated/api/file_sets/get_file_set_filesets_file_set_id_get.py +168 -0
- lightningrod/_generated/api/file_sets/list_file_sets_filesets_get.py +173 -0
- lightningrod/_generated/api/file_sets/list_files_in_set_filesets_file_set_id_files_get.py +209 -0
- lightningrod/_generated/api/files/__init__.py +1 -0
- lightningrod/_generated/api/files/create_file_upload_files_post.py +174 -0
- lightningrod/_generated/api/open_ai_compatible/__init__.py +1 -0
- lightningrod/_generated/api/open_ai_compatible/chat_completions_openai_chat_completions_post.py +174 -0
- lightningrod/_generated/api/organizations/__init__.py +1 -0
- lightningrod/_generated/api/organizations/get_balance_organizations_balance_get.py +131 -0
- lightningrod/_generated/api/samples/__init__.py +1 -0
- lightningrod/_generated/api/samples/validate_sample_samples_validate_post.py +174 -0
- lightningrod/_generated/api/transform_jobs/__init__.py +1 -0
- lightningrod/_generated/api/transform_jobs/cost_estimation_transform_jobs_cost_estimation_post.py +174 -0
- lightningrod/_generated/api/transform_jobs/create_transform_job_transform_jobs_post.py +174 -0
- lightningrod/_generated/api/transform_jobs/get_transform_job_metrics_transform_jobs_job_id_metrics_get.py +172 -0
- lightningrod/_generated/api/transform_jobs/get_transform_job_transform_jobs_job_id_get.py +168 -0
- lightningrod/_generated/client.py +268 -0
- lightningrod/_generated/errors.py +16 -0
- lightningrod/_generated/models/__init__.py +147 -0
- lightningrod/_generated/models/answer_type.py +129 -0
- lightningrod/_generated/models/answer_type_enum.py +11 -0
- lightningrod/_generated/models/balance_response.py +61 -0
- lightningrod/_generated/models/chat_completion_request.py +216 -0
- lightningrod/_generated/models/chat_completion_response.py +146 -0
- lightningrod/_generated/models/chat_message.py +69 -0
- lightningrod/_generated/models/choice.py +97 -0
- lightningrod/_generated/models/create_dataset_response.py +61 -0
- lightningrod/_generated/models/create_file_set_file_request.py +101 -0
- lightningrod/_generated/models/create_file_set_file_request_metadata_type_0.py +46 -0
- lightningrod/_generated/models/create_file_set_request.py +83 -0
- lightningrod/_generated/models/create_file_upload_request.py +91 -0
- lightningrod/_generated/models/create_file_upload_response.py +165 -0
- lightningrod/_generated/models/create_file_upload_response_metadata_type_0.py +46 -0
- lightningrod/_generated/models/create_transform_job_request.py +312 -0
- lightningrod/_generated/models/dataset_metadata.py +69 -0
- lightningrod/_generated/models/estimate_cost_request.py +243 -0
- lightningrod/_generated/models/estimate_cost_response.py +117 -0
- lightningrod/_generated/models/event_usage_summary.py +80 -0
- lightningrod/_generated/models/file_set.py +128 -0
- lightningrod/_generated/models/file_set_file.py +203 -0
- lightningrod/_generated/models/file_set_file_metadata_type_0.py +57 -0
- lightningrod/_generated/models/file_set_query_seed_generator.py +136 -0
- lightningrod/_generated/models/file_set_seed_generator.py +126 -0
- lightningrod/_generated/models/filter_criteria.py +83 -0
- lightningrod/_generated/models/forward_looking_question.py +130 -0
- lightningrod/_generated/models/forward_looking_question_generator.py +217 -0
- lightningrod/_generated/models/gdelt_seed_generator.py +103 -0
- lightningrod/_generated/models/http_validation_error.py +79 -0
- lightningrod/_generated/models/job_usage.py +185 -0
- lightningrod/_generated/models/job_usage_by_step_type_0.py +59 -0
- lightningrod/_generated/models/label.py +143 -0
- lightningrod/_generated/models/list_file_set_files_response.py +113 -0
- lightningrod/_generated/models/list_file_sets_response.py +75 -0
- lightningrod/_generated/models/llm_model_usage_summary.py +98 -0
- lightningrod/_generated/models/mock_transform_config.py +243 -0
- lightningrod/_generated/models/mock_transform_config_metadata_additions.py +46 -0
- lightningrod/_generated/models/model_config.py +316 -0
- lightningrod/_generated/models/model_source_type.py +16 -0
- lightningrod/_generated/models/news_context.py +82 -0
- lightningrod/_generated/models/news_context_generator.py +127 -0
- lightningrod/_generated/models/news_seed_generator.py +220 -0
- lightningrod/_generated/models/paginated_samples_response.py +113 -0
- lightningrod/_generated/models/pipeline_metrics_response.py +99 -0
- lightningrod/_generated/models/question.py +74 -0
- lightningrod/_generated/models/question_and_label_generator.py +217 -0
- lightningrod/_generated/models/question_generator.py +217 -0
- lightningrod/_generated/models/question_pipeline.py +417 -0
- lightningrod/_generated/models/question_renderer.py +123 -0
- lightningrod/_generated/models/rag_context.py +82 -0
- lightningrod/_generated/models/response_message.py +69 -0
- lightningrod/_generated/models/rollout.py +130 -0
- lightningrod/_generated/models/rollout_generator.py +139 -0
- lightningrod/_generated/models/rollout_parsed_output_type_0.py +46 -0
- lightningrod/_generated/models/sample.py +323 -0
- lightningrod/_generated/models/sample_meta.py +46 -0
- lightningrod/_generated/models/seed.py +135 -0
- lightningrod/_generated/models/step_cost_breakdown.py +109 -0
- lightningrod/_generated/models/transform_job.py +268 -0
- lightningrod/_generated/models/transform_job_status.py +11 -0
- lightningrod/_generated/models/transform_step_metrics_response.py +131 -0
- lightningrod/_generated/models/transform_type.py +25 -0
- lightningrod/_generated/models/upload_samples_request.py +75 -0
- lightningrod/_generated/models/upload_samples_response.py +69 -0
- lightningrod/_generated/models/usage.py +77 -0
- lightningrod/_generated/models/usage_summary.py +102 -0
- lightningrod/_generated/models/usage_summary_events.py +59 -0
- lightningrod/_generated/models/usage_summary_llm_by_model.py +59 -0
- lightningrod/_generated/models/validate_sample_response.py +69 -0
- lightningrod/_generated/models/validation_error.py +90 -0
- lightningrod/_generated/models/web_search_labeler.py +120 -0
- lightningrod/_generated/py.typed +1 -0
- lightningrod/_generated/types.py +54 -0
- lightningrod/client.py +48 -0
- lightningrod/datasets/__init__.py +4 -0
- lightningrod/datasets/client.py +174 -0
- lightningrod/datasets/dataset.py +255 -0
- lightningrod/files/__init__.py +0 -0
- lightningrod/files/client.py +58 -0
- lightningrod/filesets/__init__.py +0 -0
- lightningrod/filesets/client.py +106 -0
- lightningrod/organization/__init__.py +0 -0
- lightningrod/organization/client.py +17 -0
- lightningrod/py.typed +0 -0
- lightningrod/transforms/__init__.py +0 -0
- lightningrod/transforms/client.py +154 -0
- lightningrod_ai-0.1.6.dist-info/METADATA +122 -0
- lightningrod_ai-0.1.6.dist-info/RECORD +123 -0
- lightningrod_ai-0.1.6.dist-info/WHEEL +5 -0
- lightningrod_ai-0.1.6.dist-info/licenses/LICENSE +23 -0
- 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
|