objectiveai-sdk 2.1.1

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
        }
    );
}