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(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, arbitrary::Arbitrary)]
18#[schemars(rename = "functions.alpha_vector.expression.VectorFunctionInputSchema")]
19pub struct VectorFunctionInputSchema {
20 #[serde(skip_serializing_if = "Option::is_none")]
21 #[schemars(extend("omitempty" = true))]
22 pub context: Option<functions::expression::ObjectInputSchema>,
23 pub items: functions::expression::InputSchema,
24}
25
26impl VectorFunctionInputSchema {
27 pub fn modalities(&self) -> functions::expression::Modalities {
29 let ctx = self.context.as_ref()
30 .map(|c| c.modalities())
31 .unwrap_or_default();
32 ctx.merge(self.items.modalities())
33 }
34
35 pub fn transpile(self) -> functions::expression::InputSchema {
36 functions::expression::InputSchema::Object(
37 functions::expression::ObjectInputSchema {
38 r#type: Default::default(),
39 description: None,
40 required: Some(if self.context.is_some() {
41 vec!["context".to_string(), "items".to_string()]
42 } else {
43 vec!["items".to_string()]
44 }),
45 properties: {
46 let mut map =
47 IndexMap::with_capacity(if self.context.is_some() {
48 2
49 } else {
50 1
51 });
52 if let Some(context) = self.context {
53 map.insert(
54 "context".to_string(),
55 functions::expression::InputSchema::Object(context),
56 );
57 }
58 map.insert(
59 "items".to_string(),
60 functions::expression::InputSchema::Array(
61 functions::expression::ArrayInputSchema {
62 r#type: Default::default(),
63 description: None,
64 min_items: Some(2),
65 max_items: None,
66 items: Box::new(self.items),
67 },
68 ),
69 );
70 map
71 },
72 },
73 )
74 }
75}