objectiveai_sdk/functions/alpha_vector/expression/
input_schema.rs1use crate::functions;
2use indexmap::IndexMap;
3use schemars::JsonSchema;
4use serde::{Deserialize, Serialize};
5
6pub type ScalarFunctionInputSchema = functions::expression::ObjectInputSchema;
7
8pub mod scalar_function_input_schema {
9 use crate::functions;
10 pub fn transpile(
11 this: super::ScalarFunctionInputSchema,
12 ) -> functions::expression::InputSchema {
13 functions::expression::InputSchema::Object(this)
14 }
15}
16
17#[derive(
18 Debug,
19 Clone,
20 PartialEq,
21 Serialize,
22 Deserialize,
23 JsonSchema,
24 arbitrary::Arbitrary,
25)]
26#[schemars(
27 rename = "functions.alpha_vector.expression.VectorFunctionInputSchema"
28)]
29pub struct VectorFunctionInputSchema {
30 #[serde(skip_serializing_if = "Option::is_none")]
31 #[schemars(extend("omitempty" = true))]
32 pub context: Option<functions::expression::ObjectInputSchema>,
33 pub items: functions::expression::InputSchema,
34}
35
36impl VectorFunctionInputSchema {
37 pub fn modalities(&self) -> functions::expression::Modalities {
39 let ctx = self
40 .context
41 .as_ref()
42 .map(|c| c.modalities())
43 .unwrap_or_default();
44 ctx.merge(self.items.modalities())
45 }
46
47 pub fn transpile(self) -> functions::expression::InputSchema {
48 functions::expression::InputSchema::Object(
49 functions::expression::ObjectInputSchema {
50 r#type: Default::default(),
51 description: None,
52 required: Some(if self.context.is_some() {
53 vec!["context".to_string(), "items".to_string()]
54 } else {
55 vec!["items".to_string()]
56 }),
57 properties: {
58 let mut map =
59 IndexMap::with_capacity(if self.context.is_some() {
60 2
61 } else {
62 1
63 });
64 if let Some(context) = self.context {
65 map.insert(
66 "context".to_string(),
67 functions::expression::InputSchema::Object(context),
68 );
69 }
70 map.insert(
71 "items".to_string(),
72 functions::expression::InputSchema::Array(
73 functions::expression::ArrayInputSchema {
74 r#type: Default::default(),
75 description: None,
76 min_items: Some(2),
77 max_items: None,
78 items: Box::new(self.items),
79 },
80 ),
81 );
82 map
83 },
84 },
85 )
86 }
87}