1use crate::functions;
2use schemars::JsonSchema;
3use serde::{Deserialize, Serialize};
4
5#[derive(
6 Debug,
7 Clone,
8 PartialEq,
9 Serialize,
10 Deserialize,
11 JsonSchema,
12 arbitrary::Arbitrary,
13)]
14#[serde(tag = "type")]
15#[schemars(rename = "functions.alpha_vector.BranchTaskExpression")]
16pub enum BranchTaskExpression {
17 #[schemars(title = "ScalarFunction")]
18 #[serde(rename = "alpha.scalar.function")]
19 ScalarFunction(ScalarFunctionTaskExpression),
20 #[schemars(title = "VectorFunction")]
21 #[serde(rename = "alpha.vector.function")]
22 VectorFunction(VectorFunctionTaskExpression),
23 #[schemars(title = "PlaceholderScalarFunction")]
24 #[serde(rename = "placeholder.alpha.scalar.function")]
25 PlaceholderScalarFunction(PlaceholderScalarFunctionTaskExpression),
26 #[schemars(title = "PlaceholderVectorFunction")]
27 #[serde(rename = "placeholder.alpha.vector.function")]
28 PlaceholderVectorFunction(PlaceholderVectorFunctionTaskExpression),
29}
30
31impl BranchTaskExpression {
32 pub fn url(&self) -> Option<String> {
33 match self {
34 BranchTaskExpression::ScalarFunction(task) => Some(task.url()),
35 BranchTaskExpression::VectorFunction(task) => Some(task.url()),
36 BranchTaskExpression::PlaceholderScalarFunction(_) => None,
37 BranchTaskExpression::PlaceholderVectorFunction(_) => None,
38 }
39 }
40
41 pub fn transpile(self) -> functions::TaskExpression {
42 match self {
43 BranchTaskExpression::ScalarFunction(task) => {
44 functions::TaskExpression::ScalarFunction(task.transpile())
45 }
46 BranchTaskExpression::VectorFunction(task) => {
47 functions::TaskExpression::VectorFunction(task.transpile())
48 }
49 BranchTaskExpression::PlaceholderScalarFunction(task) => {
50 functions::TaskExpression::PlaceholderScalarFunction(
51 task.transpile(),
52 )
53 }
54 BranchTaskExpression::PlaceholderVectorFunction(task) => {
55 functions::TaskExpression::PlaceholderVectorFunction(
56 task.transpile(),
57 )
58 }
59 }
60 }
61
62 pub fn is_placeholder(&self) -> bool {
63 match self {
64 BranchTaskExpression::ScalarFunction(_) => false,
65 BranchTaskExpression::VectorFunction(_) => false,
66 BranchTaskExpression::PlaceholderScalarFunction(_) => true,
67 BranchTaskExpression::PlaceholderVectorFunction(_) => true,
68 }
69 }
70}
71
72#[derive(
73 Debug,
74 Clone,
75 PartialEq,
76 Serialize,
77 Deserialize,
78 JsonSchema,
79 arbitrary::Arbitrary,
80)]
81#[serde(tag = "type")]
82#[schemars(
83 rename = "functions.alpha_vector.PartialPlaceholderBranchTaskExpression"
84)]
85pub enum PartialPlaceholderBranchTaskExpression {
86 #[schemars(title = "PlaceholderScalarFunction")]
87 #[serde(rename = "placeholder.alpha.scalar.function")]
88 PlaceholderScalarFunction(PartialPlaceholderScalarFunctionTaskExpression),
89 #[schemars(title = "PlaceholderVectorFunction")]
90 #[serde(rename = "placeholder.alpha.vector.function")]
91 PlaceholderVectorFunction(PartialPlaceholderVectorFunctionTaskExpression),
92}
93
94impl PartialPlaceholderBranchTaskExpression {
95 pub fn complete(
96 self,
97 name: String,
98 depth: u64,
99 min_branch_width: u64,
100 max_branch_width: u64,
101 min_leaf_width: u64,
102 max_leaf_width: u64,
103 ) -> BranchTaskExpression {
104 match self {
105 PartialPlaceholderBranchTaskExpression::PlaceholderScalarFunction(
106 task,
107 ) => BranchTaskExpression::PlaceholderScalarFunction(
108 task.complete(
109 name,
110 depth,
111 min_branch_width,
112 max_branch_width,
113 min_leaf_width,
114 max_leaf_width,
115 ),
116 ),
117 PartialPlaceholderBranchTaskExpression::PlaceholderVectorFunction(
118 task,
119 ) => BranchTaskExpression::PlaceholderVectorFunction(
120 task.complete(
121 name,
122 depth,
123 min_branch_width,
124 max_branch_width,
125 min_leaf_width,
126 max_leaf_width,
127 ),
128 ),
129 }
130 }
131}
132
133#[derive(
134 Debug,
135 Clone,
136 PartialEq,
137 Serialize,
138 Deserialize,
139 JsonSchema,
140 arbitrary::Arbitrary,
141)]
142#[serde(tag = "type")]
143#[schemars(rename = "functions.alpha_vector.LeafTaskExpression")]
144pub enum LeafTaskExpression {
145 #[serde(rename = "vector.completion")]
146 VectorCompletion(VectorCompletionTaskExpression),
147}
148
149impl LeafTaskExpression {
150 pub fn transpile(self) -> functions::TaskExpression {
151 match self {
152 LeafTaskExpression::VectorCompletion(task) => {
153 functions::TaskExpression::VectorCompletion(task.transpile())
154 }
155 }
156 }
157}
158
159#[derive(
160 Debug,
161 Clone,
162 PartialEq,
163 Serialize,
164 Deserialize,
165 JsonSchema,
166 arbitrary::Arbitrary,
167)]
168#[schemars(rename = "functions.alpha_vector.ScalarFunctionTaskExpression")]
169pub struct ScalarFunctionTaskExpression {
170 #[serde(flatten)]
171 #[schemars(schema_with = "crate::flatten_schema::<crate::RemotePath>")]
172 pub path: crate::RemotePath,
173 #[serde(skip_serializing_if = "Option::is_none")]
174 #[schemars(extend("omitempty" = true))]
175 pub skip: Option<functions::expression::Expression>,
176 pub input: super::expression::ScalarFunctionInputValueExpression,
177}
178
179impl ScalarFunctionTaskExpression {
180 pub fn url(&self) -> String {
181 self.path.url()
182 }
183
184 pub fn transpile(self) -> functions::ScalarFunctionTaskExpression {
185 functions::ScalarFunctionTaskExpression {
186 path: self.path,
187 skip: self.skip,
188 map: Some(functions::expression::Expression::Special(
193 functions::expression::Special::InputItemsOutputLength,
194 )),
195 input:
196 super::expression::scalar_function_input_value_expression::transpile(
197 self.input,
198 ),
199 output: functions::expression::Expression::Special(
200 functions::expression::Special::TaskOutputL1Normalized,
201 ),
202 }
203 }
204}
205
206#[derive(
207 Debug,
208 Clone,
209 PartialEq,
210 Serialize,
211 Deserialize,
212 JsonSchema,
213 arbitrary::Arbitrary,
214)]
215#[schemars(rename = "functions.alpha_vector.VectorFunctionTaskExpression")]
216pub struct VectorFunctionTaskExpression {
217 #[serde(flatten)]
218 #[schemars(schema_with = "crate::flatten_schema::<crate::RemotePath>")]
219 pub path: crate::RemotePath,
220 #[serde(skip_serializing_if = "Option::is_none")]
221 #[schemars(extend("omitempty" = true))]
222 pub skip: Option<functions::expression::Expression>,
223 pub input: super::expression::VectorFunctionInputValueExpression,
224}
225
226impl VectorFunctionTaskExpression {
227 pub fn url(&self) -> String {
228 self.path.url()
229 }
230
231 pub fn transpile(self) -> functions::VectorFunctionTaskExpression {
232 functions::VectorFunctionTaskExpression {
233 path: self.path,
234 skip: self.skip,
235 map: None,
236 input: self.input.transpile(),
237 output: functions::expression::Expression::Special(
238 functions::expression::Special::Output,
239 ),
240 }
241 }
242}
243
244#[derive(
245 Debug,
246 Clone,
247 PartialEq,
248 Serialize,
249 Deserialize,
250 JsonSchema,
251 arbitrary::Arbitrary,
252)]
253#[schemars(
254 rename = "functions.alpha_vector.PlaceholderScalarFunctionTaskExpression"
255)]
256pub struct PlaceholderScalarFunctionTaskExpression {
257 #[serde(flatten)]
258 pub params: functions::inventions::Params,
259 pub input_schema: super::expression::ScalarFunctionInputSchema,
260 #[serde(skip_serializing_if = "Option::is_none")]
261 #[schemars(extend("omitempty" = true))]
262 pub skip: Option<functions::expression::Expression>,
263 pub input: super::expression::ScalarFunctionInputValueExpression,
264}
265
266impl PlaceholderScalarFunctionTaskExpression {
267 pub fn transpile(
268 self,
269 ) -> functions::PlaceholderScalarFunctionTaskExpression {
270 functions::PlaceholderScalarFunctionTaskExpression {
271 input_schema:
272 super::expression::scalar_function_input_schema::transpile(
273 self.input_schema,
274 ),
275 skip: self.skip,
276 map: Some(functions::expression::Expression::Special(
277 functions::expression::Special::InputItemsOutputLength,
278 )),
279 input:
280 super::expression::scalar_function_input_value_expression::transpile(
281 self.input,
282 ),
283 output: functions::expression::Expression::Special(
284 functions::expression::Special::TaskOutputL1Normalized,
285 ),
286 }
287 }
288
289 pub fn replace(
290 self,
291 path: &crate::RemotePath,
292 ) -> ScalarFunctionTaskExpression {
293 ScalarFunctionTaskExpression {
294 path: path.clone(),
295 skip: self.skip,
296 input: self.input,
297 }
298 }
299}
300
301#[derive(
302 Debug,
303 Clone,
304 PartialEq,
305 Serialize,
306 Deserialize,
307 JsonSchema,
308 arbitrary::Arbitrary,
309)]
310#[schemars(
311 rename = "functions.alpha_vector.PartialPlaceholderScalarFunctionTaskExpression"
312)]
313pub struct PartialPlaceholderScalarFunctionTaskExpression {
314 pub spec: String,
315 pub input_schema: super::expression::ScalarFunctionInputSchema,
316 #[serde(skip_serializing_if = "Option::is_none")]
317 #[schemars(extend("omitempty" = true))]
318 pub skip: Option<functions::expression::Expression>,
319 pub input: super::expression::ScalarFunctionInputValueExpression,
320}
321
322impl PartialPlaceholderScalarFunctionTaskExpression {
323 pub fn complete(
324 self,
325 name: String,
326 depth: u64,
327 min_branch_width: u64,
328 max_branch_width: u64,
329 min_leaf_width: u64,
330 max_leaf_width: u64,
331 ) -> PlaceholderScalarFunctionTaskExpression {
332 PlaceholderScalarFunctionTaskExpression {
333 params: functions::inventions::Params {
334 depth,
335 min_branch_width,
336 max_branch_width,
337 min_leaf_width,
338 max_leaf_width,
339 name,
340 spec: self.spec,
341 },
342 input_schema: self.input_schema,
343 skip: self.skip,
344 input: self.input,
345 }
346 }
347}
348
349#[derive(
350 Debug,
351 Clone,
352 PartialEq,
353 Serialize,
354 Deserialize,
355 JsonSchema,
356 arbitrary::Arbitrary,
357)]
358#[schemars(
359 rename = "functions.alpha_vector.PlaceholderVectorFunctionTaskExpression"
360)]
361pub struct PlaceholderVectorFunctionTaskExpression {
362 #[serde(flatten)]
363 pub params: functions::inventions::Params,
364 pub input_schema: super::expression::VectorFunctionInputSchema,
365 #[serde(skip_serializing_if = "Option::is_none")]
366 #[schemars(extend("omitempty" = true))]
367 pub skip: Option<functions::expression::Expression>,
368 pub input: super::expression::VectorFunctionInputValueExpression,
369}
370
371impl PlaceholderVectorFunctionTaskExpression {
372 pub fn transpile(
373 self,
374 ) -> functions::PlaceholderVectorFunctionTaskExpression {
375 functions::PlaceholderVectorFunctionTaskExpression {
376 input_schema: self.input_schema.transpile(),
377 output_length: functions::expression::Expression::Special(
378 functions::expression::Special::InputItemsOutputLength,
379 ),
380 input_split: functions::expression::Expression::Special(
381 functions::expression::Special::InputItemsOptionalContextSplit,
382 ),
383 input_merge: functions::expression::Expression::Special(
384 functions::expression::Special::InputItemsOptionalContextMerge,
385 ),
386 skip: self.skip,
387 map: None,
388 input: self.input.transpile(),
389 output: functions::expression::Expression::Special(
390 functions::expression::Special::Output,
391 ),
392 }
393 }
394
395 pub fn replace(
396 self,
397 path: &crate::RemotePath,
398 ) -> VectorFunctionTaskExpression {
399 VectorFunctionTaskExpression {
400 path: path.clone(),
401 skip: self.skip,
402 input: self.input,
403 }
404 }
405}
406
407#[derive(
408 Debug,
409 Clone,
410 PartialEq,
411 Serialize,
412 Deserialize,
413 JsonSchema,
414 arbitrary::Arbitrary,
415)]
416#[schemars(
417 rename = "functions.alpha_vector.PartialPlaceholderVectorFunctionTaskExpression"
418)]
419pub struct PartialPlaceholderVectorFunctionTaskExpression {
420 pub spec: String,
421 pub input_schema: super::expression::VectorFunctionInputSchema,
422 #[serde(skip_serializing_if = "Option::is_none")]
423 #[schemars(extend("omitempty" = true))]
424 pub skip: Option<functions::expression::Expression>,
425 pub input: super::expression::VectorFunctionInputValueExpression,
426}
427
428impl PartialPlaceholderVectorFunctionTaskExpression {
429 pub fn complete(
430 self,
431 name: String,
432 depth: u64,
433 min_branch_width: u64,
434 max_branch_width: u64,
435 min_leaf_width: u64,
436 max_leaf_width: u64,
437 ) -> PlaceholderVectorFunctionTaskExpression {
438 PlaceholderVectorFunctionTaskExpression {
439 params: functions::inventions::Params {
440 depth,
441 min_branch_width,
442 max_branch_width,
443 min_leaf_width,
444 max_leaf_width,
445 name,
446 spec: self.spec,
447 },
448 input_schema: self.input_schema,
449 skip: self.skip,
450 input: self.input,
451 }
452 }
453}
454
455#[derive(
456 Debug,
457 Clone,
458 PartialEq,
459 Serialize,
460 Deserialize,
461 JsonSchema,
462 arbitrary::Arbitrary,
463)]
464#[schemars(rename = "functions.alpha_vector.VectorCompletionTaskExpression")]
465pub struct VectorCompletionTaskExpression {
466 #[serde(skip_serializing_if = "Option::is_none")]
467 #[schemars(extend("omitempty" = true))]
468 pub skip: Option<functions::expression::Expression>,
469 pub messages: functions::expression::Expression,
470 pub responses: functions::expression::Expression,
471}
472
473impl VectorCompletionTaskExpression {
474 pub fn transpile(self) -> functions::VectorCompletionTaskExpression {
475 functions::VectorCompletionTaskExpression {
476 skip: self.skip,
477 map: None,
478 messages: functions::expression::WithExpression::Expression(
479 self.messages,
480 ),
481 responses: functions::expression::WithExpression::Expression(
482 self.responses,
483 ),
484 output: functions::expression::Expression::Special(
485 functions::expression::Special::Output,
486 ),
487 }
488 }
489}