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