Skip to main content

objectiveai_sdk/functions/inventions/recursive/response/unary/
function_invention_recursive.rs

1use crate::agent;
2use crate::functions::inventions::recursive::response;
3use schemars::JsonSchema;
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
7#[schemars(
8    rename = "functions.inventions.recursive.response.unary.FunctionInventionRecursive"
9)]
10pub struct FunctionInventionRecursive {
11    pub id: String,
12    pub inventions: Vec<super::FunctionInvention>,
13    pub inventions_errors: bool,
14    pub created: u64,
15    pub object: super::Object,
16    pub usage: agent::completions::response::Usage,
17}
18
19impl FunctionInventionRecursive {
20    /// Normalize non-deterministic fields for test snapshot comparison.
21    pub fn normalize_for_tests(&mut self) {
22        self.id = String::new();
23        self.created = 0;
24        for invention in &mut self.inventions {
25            invention.inner.normalize_for_tests();
26        }
27
28        // sort inventions by JSON representation since ordering is non-deterministic
29        self.inventions
30            .sort_by_cached_key(|i| serde_json::to_string(&i.inner).unwrap());
31
32        // re-apply invention indices since indices are non-determinstic
33        let mut i = 0;
34        for invention in &mut self.inventions {
35            invention.index = i;
36            i += 1;
37        }
38    }
39}
40
41impl From<response::streaming::FunctionInventionRecursiveChunk>
42    for FunctionInventionRecursive
43{
44    fn from(
45        response::streaming::FunctionInventionRecursiveChunk {
46            id,
47            inventions,
48            inventions_errors,
49            created,
50            object,
51            usage,
52        }: response::streaming::FunctionInventionRecursiveChunk,
53    ) -> Self {
54        Self {
55            id,
56            inventions: inventions
57                .into_iter()
58                .map(super::FunctionInvention::from)
59                .collect(),
60            inventions_errors: inventions_errors.unwrap_or(false),
61            created,
62            object: object.into(),
63            usage: usage.unwrap_or_default(),
64        }
65    }
66}