Skip to main content

openai_oxide/types/
model.rs

1// Model types — mirrors openai-python types/model.py
2
3use serde::Deserialize;
4
5/// A model object from the API.
6#[derive(Debug, Clone, Deserialize)]
7pub struct Model {
8    /// Model identifier (e.g. "gpt-4o").
9    pub id: String,
10
11    /// Unix timestamp (seconds) when created.
12    pub created: i64,
13
14    /// Always "model".
15    pub object: String,
16
17    /// Organization that owns the model.
18    pub owned_by: String,
19}
20
21/// Response from listing models.
22#[derive(Debug, Clone, Deserialize)]
23pub struct ModelList {
24    pub object: String,
25    pub data: Vec<Model>,
26}
27
28/// Response from deleting a model.
29#[derive(Debug, Clone, Deserialize)]
30pub struct ModelDeleted {
31    pub id: String,
32    pub deleted: bool,
33    pub object: String,
34}
35
36#[cfg(test)]
37mod tests {
38    use super::*;
39
40    #[test]
41    fn test_deserialize_model() {
42        let json = r#"{
43            "id": "gpt-4o",
44            "object": "model",
45            "created": 1687882411,
46            "owned_by": "openai"
47        }"#;
48        let model: Model = serde_json::from_str(json).unwrap();
49        assert_eq!(model.id, "gpt-4o");
50        assert_eq!(model.object, "model");
51        assert_eq!(model.owned_by, "openai");
52    }
53
54    #[test]
55    fn test_deserialize_model_list() {
56        let json = r#"{
57            "object": "list",
58            "data": [
59                {"id": "gpt-4o", "object": "model", "created": 1687882411, "owned_by": "openai"},
60                {"id": "gpt-3.5-turbo", "object": "model", "created": 1677610602, "owned_by": "openai"}
61            ]
62        }"#;
63        let list: ModelList = serde_json::from_str(json).unwrap();
64        assert_eq!(list.data.len(), 2);
65        assert_eq!(list.data[0].id, "gpt-4o");
66    }
67
68    #[test]
69    fn test_deserialize_model_deleted() {
70        let json = r#"{"id": "ft:gpt-4o:org:custom:id", "object": "model", "deleted": true}"#;
71        let deleted: ModelDeleted = serde_json::from_str(json).unwrap();
72        assert!(deleted.deleted);
73        assert_eq!(deleted.id, "ft:gpt-4o:org:custom:id");
74    }
75}