Skip to main content

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

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