box_open_sdk/managers/
ai.rs1use crate::runtime::{self, Error};
4
5#[derive(Clone, Debug, Default)]
7pub struct AiGetAgentDefaultOptions {
8 pub language: Option<String>,
9 pub model: Option<String>,
10}
11
12pub struct AiManager {
14 session: std::sync::Arc<runtime::Client>,
15}
16
17impl AiManager {
18 pub(crate) fn new(session: std::sync::Arc<runtime::Client>) -> Self {
19 Self { session }
20 }
21
22 pub async fn ask(
23 &self,
24 body: crate::models::schemas::AiAsk,
25 ) -> Result<crate::models::schemas::AiResponseFull, Error> {
26 let mut url = self.session.base_url("api");
27 url.push_str("/ai");
28 url.push_str("/ask");
29 let mut req = self.session.new_request("POST", &url);
30 let payload = serde_json::to_vec(&body)?;
31 req = runtime::with_json_body(req, &payload);
32 let resp = self.session.fetch(req).await?;
33 let data = runtime::response_bytes(&resp)?;
34 Ok(serde_json::from_slice(&data)?)
35 }
36
37 pub async fn create_text_gen(
38 &self,
39 body: crate::models::schemas::AiTextGen,
40 ) -> Result<crate::models::schemas::AiResponse, Error> {
41 let mut url = self.session.base_url("api");
42 url.push_str("/ai");
43 url.push_str("/text_gen");
44 let mut req = self.session.new_request("POST", &url);
45 let payload = serde_json::to_vec(&body)?;
46 req = runtime::with_json_body(req, &payload);
47 let resp = self.session.fetch(req).await?;
48 let data = runtime::response_bytes(&resp)?;
49 Ok(serde_json::from_slice(&data)?)
50 }
51
52 pub async fn get_agent_default(
53 &self,
54 mode: crate::models::schemas::GetAgentDefaultMode,
55 opts: Option<AiGetAgentDefaultOptions>,
56 ) -> Result<crate::models::schemas::AiAgent, Error> {
57 let mut url = self.session.base_url("api");
58 url.push_str("/ai_agent_default");
59 let mut req = self.session.new_request("GET", &url);
60 req = runtime::with_query(req, "mode", &mode.0);
61 let opts = opts.unwrap_or_default();
62 if let Some(value) = opts.language {
63 req = runtime::with_query(req, "language", &value);
64 }
65 if let Some(value) = opts.model {
66 req = runtime::with_query(req, "model", &value);
67 }
68 let resp = self.session.fetch(req).await?;
69 let data = runtime::response_bytes(&resp)?;
70 Ok(serde_json::from_slice(&data)?)
71 }
72
73 pub async fn extract(
74 &self,
75 body: crate::models::schemas::AiExtract,
76 ) -> Result<crate::models::schemas::AiResponse, Error> {
77 let mut url = self.session.base_url("api");
78 url.push_str("/ai");
79 url.push_str("/extract");
80 let mut req = self.session.new_request("POST", &url);
81 let payload = serde_json::to_vec(&body)?;
82 req = runtime::with_json_body(req, &payload);
83 let resp = self.session.fetch(req).await?;
84 let data = runtime::response_bytes(&resp)?;
85 Ok(serde_json::from_slice(&data)?)
86 }
87
88 pub async fn create_extract_structured(
89 &self,
90 body: crate::models::schemas::AiExtractStructured,
91 ) -> Result<crate::models::schemas::AiExtractStructuredResponse, Error> {
92 let mut url = self.session.base_url("api");
93 url.push_str("/ai");
94 url.push_str("/extract_structured");
95 let mut req = self.session.new_request("POST", &url);
96 let payload = serde_json::to_vec(&body)?;
97 req = runtime::with_json_body(req, &payload);
98 let resp = self.session.fetch(req).await?;
99 let data = runtime::response_bytes(&resp)?;
100 Ok(serde_json::from_slice(&data)?)
101 }
102}