use super::*;
use indexmap::IndexMap;
#[test]
fn modalities_plain_string_schema() {
let schema = InputSchema::String(StringInputSchema {
r#type: Default::default(),
description: None,
r#enum: None,
});
assert_eq!(schema.modalities(), Modalities::default());
}
#[test]
fn modalities_object_with_image_and_audio() {
let schema = InputSchema::Object(ObjectInputSchema {
r#type: Default::default(),
description: None,
properties: {
let mut m = IndexMap::new();
m.insert(
"photo".into(),
InputSchema::Image(ImageInputSchema {
r#type: Default::default(),
description: None,
}),
);
m.insert(
"clip".into(),
InputSchema::Audio(AudioInputSchema {
r#type: Default::default(),
description: None,
}),
);
m.insert(
"name".into(),
InputSchema::String(StringInputSchema {
r#type: Default::default(),
description: None,
r#enum: None,
}),
);
m
},
required: None,
});
assert_eq!(
schema.modalities(),
Modalities {
image: true,
audio: true,
video: false,
file: false
}
);
}
#[test]
fn modalities_anyof_unions_variants() {
let schema = InputSchema::AnyOf(AnyOfInputSchema {
any_of: vec![
InputSchema::Video(VideoInputSchema {
r#type: Default::default(),
description: None,
}),
InputSchema::File(FileInputSchema {
r#type: Default::default(),
description: None,
}),
InputSchema::String(StringInputSchema {
r#type: Default::default(),
description: None,
r#enum: None,
}),
],
});
assert_eq!(
schema.modalities(),
Modalities {
image: false,
audio: false,
video: true,
file: true
}
);
}
#[test]
fn modalities_nested_array_of_anyof() {
let schema = InputSchema::Array(ArrayInputSchema {
r#type: Default::default(),
description: None,
min_items: Some(1),
max_items: Some(10),
items: Box::new(InputSchema::AnyOf(AnyOfInputSchema {
any_of: vec![
InputSchema::Image(ImageInputSchema {
r#type: Default::default(),
description: None,
}),
InputSchema::Object(ObjectInputSchema {
r#type: Default::default(),
description: None,
properties: {
let mut m = IndexMap::new();
m.insert(
"recording".into(),
InputSchema::Audio(AudioInputSchema {
r#type: Default::default(),
description: None,
}),
);
m
},
required: None,
}),
],
})),
});
assert_eq!(
schema.modalities(),
Modalities {
image: true,
audio: true,
video: false,
file: false
}
);
}
#[test]
fn modalities_all_four_media_types() {
let schema = InputSchema::Object(ObjectInputSchema {
r#type: Default::default(),
description: None,
properties: {
let mut m = IndexMap::new();
m.insert(
"img".into(),
InputSchema::Image(ImageInputSchema {
r#type: Default::default(),
description: None,
}),
);
m.insert(
"aud".into(),
InputSchema::Audio(AudioInputSchema {
r#type: Default::default(),
description: None,
}),
);
m.insert(
"vid".into(),
InputSchema::Video(VideoInputSchema {
r#type: Default::default(),
description: None,
}),
);
m.insert(
"doc".into(),
InputSchema::File(FileInputSchema {
r#type: Default::default(),
description: None,
}),
);
m
},
required: None,
});
assert_eq!(
schema.modalities(),
Modalities {
image: true,
audio: true,
video: true,
file: true
}
);
}