Skip to main content

synth_ai/
graphs_api.rs

1use std::sync::Arc;
2
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6use crate::models::{JsonMap, ResourceList};
7use crate::openapi_paths;
8use crate::transport::Transport;
9use crate::types::Result;
10
11#[derive(Debug, Clone, Serialize, Deserialize, Default)]
12pub struct GraphCompletionRequest {
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub graph_id: Option<String>,
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub input: Option<Value>,
17    #[serde(flatten)]
18    pub extra: JsonMap,
19}
20
21#[derive(Debug, Clone, Serialize, Deserialize, Default)]
22pub struct GraphCompletionResponse {
23    #[serde(default)]
24    pub output: Option<Value>,
25    #[serde(default)]
26    pub trace: Option<Value>,
27    #[serde(flatten)]
28    pub extra: JsonMap,
29}
30
31#[derive(Debug, Clone, Serialize, Deserialize, Default)]
32pub struct GraphResource {
33    #[serde(default)]
34    pub graph_id: Option<String>,
35    #[serde(default)]
36    pub id: Option<String>,
37    #[serde(default)]
38    pub status: Option<String>,
39    #[serde(flatten)]
40    pub extra: JsonMap,
41}
42
43#[derive(Clone)]
44pub struct GraphsClient {
45    transport: Arc<Transport>,
46}
47
48impl GraphsClient {
49    pub(crate) fn new(transport: Arc<Transport>) -> Self {
50        Self { transport }
51    }
52
53    pub fn completions(&self) -> GraphCompletionsClient {
54        GraphCompletionsClient {
55            transport: self.transport.clone(),
56        }
57    }
58
59    pub async fn list_evolved(&self) -> Result<ResourceList<GraphResource>> {
60        self.transport
61            .get_json(openapi_paths::GRAPH_EVOLVE_GRAPHS)
62            .await
63    }
64}
65
66#[derive(Clone)]
67pub struct GraphCompletionsClient {
68    transport: Arc<Transport>,
69}
70
71impl GraphCompletionsClient {
72    pub async fn create(&self, request: &GraphCompletionRequest) -> Result<GraphCompletionResponse> {
73        self.transport
74            .post_json(openapi_paths::API_GRAPHS_COMPLETIONS, request)
75            .await
76    }
77}