dynamo_async_openai/
image.rs

1// SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2// SPDX-License-Identifier: Apache-2.0
3//
4// Based on https://github.com/64bit/async-openai/ by Himanshu Neema
5// Original Copyright (c) 2022 Himanshu Neema
6// Licensed under MIT License (see ATTRIBUTIONS-Rust.md)
7//
8// Modifications Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES.
9// Licensed under Apache 2.0
10
11use crate::{
12    config::Config,
13    error::OpenAIError,
14    types::{
15        CreateImageEditRequest, CreateImageRequest, CreateImageVariationRequest, ImagesResponse,
16    },
17    Client,
18};
19
20/// Given a prompt and/or an input image, the model will generate a new image.
21///
22/// Related guide: [Image generation](https://platform.openai.com/docs/guides/images)
23pub struct Images<'c, C: Config> {
24    client: &'c Client<C>,
25}
26
27impl<'c, C: Config> Images<'c, C> {
28    pub fn new(client: &'c Client<C>) -> Self {
29        Self { client }
30    }
31
32    /// Creates an image given a prompt.
33    #[crate::byot(T0 = serde::Serialize, R = serde::de::DeserializeOwned)]
34    pub async fn create(&self, request: CreateImageRequest) -> Result<ImagesResponse, OpenAIError> {
35        self.client.post("/images/generations", request).await
36    }
37
38    /// Creates an edited or extended image given an original image and a prompt.
39    #[crate::byot(
40        T0 = Clone,
41        R = serde::de::DeserializeOwned,
42        where_clause =  "reqwest::multipart::Form: crate::traits::AsyncTryFrom<T0, Error = OpenAIError>",
43    )]
44    pub async fn create_edit(
45        &self,
46        request: CreateImageEditRequest,
47    ) -> Result<ImagesResponse, OpenAIError> {
48        self.client.post_form("/images/edits", request).await
49    }
50
51    /// Creates a variation of a given image.
52    #[crate::byot(
53        T0 = Clone,
54        R = serde::de::DeserializeOwned,
55        where_clause =  "reqwest::multipart::Form: crate::traits::AsyncTryFrom<T0, Error = OpenAIError>",
56    )]
57    pub async fn create_variation(
58        &self,
59        request: CreateImageVariationRequest,
60    ) -> Result<ImagesResponse, OpenAIError> {
61        self.client.post_form("/images/variations", request).await
62    }
63}