001package com.box.sdkgen.managers.aistudio;
002
003import static com.box.sdkgen.internal.utils.UtilsManager.convertToString;
004import static com.box.sdkgen.internal.utils.UtilsManager.entryOf;
005import static com.box.sdkgen.internal.utils.UtilsManager.mapOf;
006import static com.box.sdkgen.internal.utils.UtilsManager.mergeMaps;
007import static com.box.sdkgen.internal.utils.UtilsManager.prepareParams;
008
009import com.box.sdkgen.networking.auth.Authentication;
010import com.box.sdkgen.networking.fetchoptions.FetchOptions;
011import com.box.sdkgen.networking.fetchoptions.ResponseFormat;
012import com.box.sdkgen.networking.fetchresponse.FetchResponse;
013import com.box.sdkgen.networking.network.NetworkSession;
014import com.box.sdkgen.schemas.aimultipleagentresponse.AiMultipleAgentResponse;
015import com.box.sdkgen.schemas.aisingleagentresponsefull.AiSingleAgentResponseFull;
016import com.box.sdkgen.schemas.createaiagent.CreateAiAgent;
017import com.box.sdkgen.serialization.json.JsonManager;
018import java.util.Map;
019
020public class AiStudioManager {
021
022  public Authentication auth;
023
024  public NetworkSession networkSession;
025
026  public AiStudioManager() {
027    this.networkSession = new NetworkSession();
028  }
029
030  protected AiStudioManager(Builder builder) {
031    this.auth = builder.auth;
032    this.networkSession = builder.networkSession;
033  }
034
035  /** Lists AI agents based on the provided parameters. */
036  public AiMultipleAgentResponse getAiAgents() {
037    return getAiAgents(new GetAiAgentsQueryParams(), new GetAiAgentsHeaders());
038  }
039
040  /**
041   * Lists AI agents based on the provided parameters.
042   *
043   * @param queryParams Query parameters of getAiAgents method
044   */
045  public AiMultipleAgentResponse getAiAgents(GetAiAgentsQueryParams queryParams) {
046    return getAiAgents(queryParams, new GetAiAgentsHeaders());
047  }
048
049  /**
050   * Lists AI agents based on the provided parameters.
051   *
052   * @param headers Headers of getAiAgents method
053   */
054  public AiMultipleAgentResponse getAiAgents(GetAiAgentsHeaders headers) {
055    return getAiAgents(new GetAiAgentsQueryParams(), headers);
056  }
057
058  /**
059   * Lists AI agents based on the provided parameters.
060   *
061   * @param queryParams Query parameters of getAiAgents method
062   * @param headers Headers of getAiAgents method
063   */
064  public AiMultipleAgentResponse getAiAgents(
065      GetAiAgentsQueryParams queryParams, GetAiAgentsHeaders headers) {
066    Map<String, String> queryParamsMap =
067        prepareParams(
068            mapOf(
069                entryOf("mode", convertToString(queryParams.getMode())),
070                entryOf("fields", convertToString(queryParams.getFields())),
071                entryOf("agent_state", convertToString(queryParams.getAgentState())),
072                entryOf("include_box_default", convertToString(queryParams.getIncludeBoxDefault())),
073                entryOf("marker", convertToString(queryParams.getMarker())),
074                entryOf("limit", convertToString(queryParams.getLimit()))));
075    Map<String, String> headersMap = prepareParams(mergeMaps(mapOf(), headers.getExtraHeaders()));
076    FetchResponse response =
077        this.networkSession
078            .getNetworkClient()
079            .fetch(
080                new FetchOptions.Builder(
081                        String.join(
082                            "", this.networkSession.getBaseUrls().getBaseUrl(), "/2.0/ai_agents"),
083                        "GET")
084                    .params(queryParamsMap)
085                    .headers(headersMap)
086                    .responseFormat(ResponseFormat.JSON)
087                    .auth(this.auth)
088                    .networkSession(this.networkSession)
089                    .build());
090    return JsonManager.deserialize(response.getData(), AiMultipleAgentResponse.class);
091  }
092
093  /**
094   * Creates an AI agent. At least one of the following capabilities must be provided: `ask`,
095   * `text_gen`, `extract`.
096   *
097   * @param requestBody Request body of createAiAgent method
098   */
099  public AiSingleAgentResponseFull createAiAgent(CreateAiAgent requestBody) {
100    return createAiAgent(requestBody, new CreateAiAgentHeaders());
101  }
102
103  /**
104   * Creates an AI agent. At least one of the following capabilities must be provided: `ask`,
105   * `text_gen`, `extract`.
106   *
107   * @param requestBody Request body of createAiAgent method
108   * @param headers Headers of createAiAgent method
109   */
110  public AiSingleAgentResponseFull createAiAgent(
111      CreateAiAgent requestBody, CreateAiAgentHeaders headers) {
112    Map<String, String> headersMap = prepareParams(mergeMaps(mapOf(), headers.getExtraHeaders()));
113    FetchResponse response =
114        this.networkSession
115            .getNetworkClient()
116            .fetch(
117                new FetchOptions.Builder(
118                        String.join(
119                            "", this.networkSession.getBaseUrls().getBaseUrl(), "/2.0/ai_agents"),
120                        "POST")
121                    .headers(headersMap)
122                    .data(JsonManager.serialize(requestBody))
123                    .contentType("application/json")
124                    .responseFormat(ResponseFormat.JSON)
125                    .auth(this.auth)
126                    .networkSession(this.networkSession)
127                    .build());
128    return JsonManager.deserialize(response.getData(), AiSingleAgentResponseFull.class);
129  }
130
131  /**
132   * Updates an AI agent.
133   *
134   * @param agentId The ID of the agent to update. Example: "1234"
135   * @param requestBody Request body of updateAiAgentById method
136   */
137  public AiSingleAgentResponseFull updateAiAgentById(String agentId, CreateAiAgent requestBody) {
138    return updateAiAgentById(agentId, requestBody, new UpdateAiAgentByIdHeaders());
139  }
140
141  /**
142   * Updates an AI agent.
143   *
144   * @param agentId The ID of the agent to update. Example: "1234"
145   * @param requestBody Request body of updateAiAgentById method
146   * @param headers Headers of updateAiAgentById method
147   */
148  public AiSingleAgentResponseFull updateAiAgentById(
149      String agentId, CreateAiAgent requestBody, UpdateAiAgentByIdHeaders headers) {
150    Map<String, String> headersMap = prepareParams(mergeMaps(mapOf(), headers.getExtraHeaders()));
151    FetchResponse response =
152        this.networkSession
153            .getNetworkClient()
154            .fetch(
155                new FetchOptions.Builder(
156                        String.join(
157                            "",
158                            this.networkSession.getBaseUrls().getBaseUrl(),
159                            "/2.0/ai_agents/",
160                            convertToString(agentId)),
161                        "PUT")
162                    .headers(headersMap)
163                    .data(JsonManager.serialize(requestBody))
164                    .contentType("application/json")
165                    .responseFormat(ResponseFormat.JSON)
166                    .auth(this.auth)
167                    .networkSession(this.networkSession)
168                    .build());
169    return JsonManager.deserialize(response.getData(), AiSingleAgentResponseFull.class);
170  }
171
172  /**
173   * Gets an AI Agent using the `agent_id` parameter.
174   *
175   * @param agentId The agent id to get. Example: "1234"
176   */
177  public AiSingleAgentResponseFull getAiAgentById(String agentId) {
178    return getAiAgentById(agentId, new GetAiAgentByIdQueryParams(), new GetAiAgentByIdHeaders());
179  }
180
181  /**
182   * Gets an AI Agent using the `agent_id` parameter.
183   *
184   * @param agentId The agent id to get. Example: "1234"
185   * @param queryParams Query parameters of getAiAgentById method
186   */
187  public AiSingleAgentResponseFull getAiAgentById(
188      String agentId, GetAiAgentByIdQueryParams queryParams) {
189    return getAiAgentById(agentId, queryParams, new GetAiAgentByIdHeaders());
190  }
191
192  /**
193   * Gets an AI Agent using the `agent_id` parameter.
194   *
195   * @param agentId The agent id to get. Example: "1234"
196   * @param headers Headers of getAiAgentById method
197   */
198  public AiSingleAgentResponseFull getAiAgentById(String agentId, GetAiAgentByIdHeaders headers) {
199    return getAiAgentById(agentId, new GetAiAgentByIdQueryParams(), headers);
200  }
201
202  /**
203   * Gets an AI Agent using the `agent_id` parameter.
204   *
205   * @param agentId The agent id to get. Example: "1234"
206   * @param queryParams Query parameters of getAiAgentById method
207   * @param headers Headers of getAiAgentById method
208   */
209  public AiSingleAgentResponseFull getAiAgentById(
210      String agentId, GetAiAgentByIdQueryParams queryParams, GetAiAgentByIdHeaders headers) {
211    Map<String, String> queryParamsMap =
212        prepareParams(mapOf(entryOf("fields", convertToString(queryParams.getFields()))));
213    Map<String, String> headersMap = prepareParams(mergeMaps(mapOf(), headers.getExtraHeaders()));
214    FetchResponse response =
215        this.networkSession
216            .getNetworkClient()
217            .fetch(
218                new FetchOptions.Builder(
219                        String.join(
220                            "",
221                            this.networkSession.getBaseUrls().getBaseUrl(),
222                            "/2.0/ai_agents/",
223                            convertToString(agentId)),
224                        "GET")
225                    .params(queryParamsMap)
226                    .headers(headersMap)
227                    .responseFormat(ResponseFormat.JSON)
228                    .auth(this.auth)
229                    .networkSession(this.networkSession)
230                    .build());
231    return JsonManager.deserialize(response.getData(), AiSingleAgentResponseFull.class);
232  }
233
234  /**
235   * Deletes an AI agent using the provided parameters.
236   *
237   * @param agentId The ID of the agent to delete. Example: "1234"
238   */
239  public void deleteAiAgentById(String agentId) {
240    deleteAiAgentById(agentId, new DeleteAiAgentByIdHeaders());
241  }
242
243  /**
244   * Deletes an AI agent using the provided parameters.
245   *
246   * @param agentId The ID of the agent to delete. Example: "1234"
247   * @param headers Headers of deleteAiAgentById method
248   */
249  public void deleteAiAgentById(String agentId, DeleteAiAgentByIdHeaders headers) {
250    Map<String, String> headersMap = prepareParams(mergeMaps(mapOf(), headers.getExtraHeaders()));
251    FetchResponse response =
252        this.networkSession
253            .getNetworkClient()
254            .fetch(
255                new FetchOptions.Builder(
256                        String.join(
257                            "",
258                            this.networkSession.getBaseUrls().getBaseUrl(),
259                            "/2.0/ai_agents/",
260                            convertToString(agentId)),
261                        "DELETE")
262                    .headers(headersMap)
263                    .responseFormat(ResponseFormat.NO_CONTENT)
264                    .auth(this.auth)
265                    .networkSession(this.networkSession)
266                    .build());
267  }
268
269  public Authentication getAuth() {
270    return auth;
271  }
272
273  public NetworkSession getNetworkSession() {
274    return networkSession;
275  }
276
277  public static class Builder {
278
279    protected Authentication auth;
280
281    protected NetworkSession networkSession;
282
283    public Builder() {}
284
285    public Builder auth(Authentication auth) {
286      this.auth = auth;
287      return this;
288    }
289
290    public Builder networkSession(NetworkSession networkSession) {
291      this.networkSession = networkSession;
292      return this;
293    }
294
295    public AiStudioManager build() {
296      if (this.networkSession == null) {
297        this.networkSession = new NetworkSession();
298      }
299      return new AiStudioManager(this);
300    }
301  }
302}