objectiveai-sdk 2.0.6

ObjectiveAI SDK, definitions, and utilities
Documentation
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 });
}