Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "3.2.0"
".": "3.3.0"
}
2 changes: 1 addition & 1 deletion .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 175
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/digitalocean%2Fgradient-40c154e2fdc4fef9ca1cf8329c29b7102bf324acfc9589571d6f3452d1ca579c.yml
openapi_spec_hash: 83a3d092965fde776b29b61f785459f9
config_hash: dd3a0f16fb9e072bb63c570b14beccd2
config_hash: 8497af1695ff361853c745dd869dc6b9
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
# Changelog

## 3.3.0 (2025-10-07)

Full Changelog: [v3.2.0...v3.3.0](https://github.com/digitalocean/gradient-python/compare/v3.2.0...v3.3.0)

### Features

* **api:** Images generations - openai ([e5a309e](https://github.com/digitalocean/gradient-python/commit/e5a309e46bf05846c580f425e6fa23f323138a4d))
* **api:** update via SDK Studio ([c2bf693](https://github.com/digitalocean/gradient-python/commit/c2bf693d233830dafdfc2aa7f74e2ced2e8d81a0))

## 3.2.0 (2025-10-06)

Full Changelog: [v3.1.0...v3.2.0](https://github.com/digitalocean/gradient-python/compare/v3.1.0...v3.2.0)
Expand Down
6 changes: 2 additions & 4 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -388,17 +388,15 @@ Methods:

# Images

## Generations

Types:

```python
from gradient.types.images import GenerationCreateResponse
from gradient.types import ImageGenerateResponse
```

Methods:

- <code title="post /images/generations">client.images.generations.<a href="./src/gradient/resources/images/generations.py">create</a>(\*\*<a href="src/gradient/types/images/generation_create_params.py">params</a>) -> <a href="./src/gradient/types/images/generation_create_response.py">GenerationCreateResponse</a></code>
- <code title="post /images/generations">client.images.<a href="./src/gradient/resources/images.py">generate</a>(\*\*<a href="src/gradient/types/image_generate_params.py">params</a>) -> <a href="./src/gradient/types/image_generate_response.py">ImageGenerateResponse</a></code>

# GPUDroplets

Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "gradient"
version = "3.2.0"
version = "3.3.0"
description = "The official Python library for the Gradient API"
dynamic = ["readme"]
license = "Apache-2.0"
Expand Down
2 changes: 1 addition & 1 deletion src/gradient/_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,14 @@
gpu_droplets,
knowledge_bases,
)
from .resources.images import ImagesResource, AsyncImagesResource
from .resources.regions import RegionsResource, AsyncRegionsResource
from .resources.chat.chat import ChatResource, AsyncChatResource
from .resources.gpu_droplets import (
GPUDropletsResource,
AsyncGPUDropletsResource,
)
from .resources.agents.agents import AgentsResource, AsyncAgentsResource
from .resources.images.images import ImagesResource, AsyncImagesResource
from .resources.models.models import ModelsResource, AsyncModelsResource
from .resources.databases.databases import DatabasesResource, AsyncDatabasesResource
from .resources.inference.inference import InferenceResource, AsyncInferenceResource
Expand Down
2 changes: 1 addition & 1 deletion src/gradient/_version.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.

__title__ = "gradient"
__version__ = "3.2.0" # x-release-please-version
__version__ = "3.3.0" # x-release-please-version
Original file line number Diff line number Diff line change
Expand Up @@ -7,47 +7,47 @@

import httpx

from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
from ..._utils import required_args, maybe_transform, async_maybe_transform
from ..._compat import cached_property
from ..._resource import SyncAPIResource, AsyncAPIResource
from ..._response import (
from ..types import image_generate_params
from .._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
from .._utils import required_args, maybe_transform, async_maybe_transform
from .._compat import cached_property
from .._resource import SyncAPIResource, AsyncAPIResource
from .._response import (
to_raw_response_wrapper,
to_streamed_response_wrapper,
async_to_raw_response_wrapper,
async_to_streamed_response_wrapper,
)
from ..._streaming import Stream, AsyncStream
from ..._base_client import make_request_options
from ...types.images import generation_create_params
from ...types.shared.image_gen_stream_event import ImageGenStreamEvent
from ...types.images.generation_create_response import GenerationCreateResponse
from .._streaming import Stream, AsyncStream
from .._base_client import make_request_options
from ..types.image_generate_response import ImageGenerateResponse
from ..types.shared.image_gen_stream_event import ImageGenStreamEvent

__all__ = ["GenerationsResource", "AsyncGenerationsResource"]
__all__ = ["ImagesResource", "AsyncImagesResource"]


class GenerationsResource(SyncAPIResource):
class ImagesResource(SyncAPIResource):
@cached_property
def with_raw_response(self) -> GenerationsResourceWithRawResponse:
def with_raw_response(self) -> ImagesResourceWithRawResponse:
"""
This property can be used as a prefix for any HTTP method call to return
the raw response object instead of the parsed content.

For more information, see https://www.github.com/digitalocean/gradient-python#accessing-raw-response-data-eg-headers
"""
return GenerationsResourceWithRawResponse(self)
return ImagesResourceWithRawResponse(self)

@cached_property
def with_streaming_response(self) -> GenerationsResourceWithStreamingResponse:
def with_streaming_response(self) -> ImagesResourceWithStreamingResponse:
"""
An alternative to `.with_raw_response` that doesn't eagerly read the response body.

For more information, see https://www.github.com/digitalocean/gradient-python#with_streaming_response
"""
return GenerationsResourceWithStreamingResponse(self)
return ImagesResourceWithStreamingResponse(self)

@overload
def create(
def generate(
self,
*,
prompt: str,
Expand All @@ -68,7 +68,7 @@ def create(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> GenerationCreateResponse:
) -> ImageGenerateResponse:
"""
Creates a high-quality image from a text prompt using GPT-IMAGE-1, the latest
image generation model with automatic prompt optimization and enhanced visual
Expand Down Expand Up @@ -126,7 +126,7 @@ def create(
...

@overload
def create(
def generate(
self,
*,
prompt: str,
Expand Down Expand Up @@ -205,7 +205,7 @@ def create(
...

@overload
def create(
def generate(
self,
*,
prompt: str,
Expand All @@ -226,7 +226,7 @@ def create(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> GenerationCreateResponse | Stream[ImageGenStreamEvent]:
) -> ImageGenerateResponse | Stream[ImageGenStreamEvent]:
"""
Creates a high-quality image from a text prompt using GPT-IMAGE-1, the latest
image generation model with automatic prompt optimization and enhanced visual
Expand Down Expand Up @@ -284,7 +284,7 @@ def create(
...

@required_args(["prompt"], ["prompt", "stream"])
def create(
def generate(
self,
*,
prompt: str,
Expand All @@ -305,7 +305,7 @@ def create(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> GenerationCreateResponse | Stream[ImageGenStreamEvent]:
) -> ImageGenerateResponse | Stream[ImageGenStreamEvent]:
if not self._client.model_access_key:
raise TypeError(
"Could not resolve authentication method. Expected model_access_key to be set for chat completions."
Expand Down Expand Up @@ -335,41 +335,41 @@ def create(
"stream": stream,
"user": user,
},
generation_create_params.GenerationCreateParamsStreaming
image_generate_params.ImageGenerateParamsStreaming
if stream
else generation_create_params.GenerationCreateParamsNonStreaming,
else image_generate_params.ImageGenerateParamsNonStreaming,
),
options=make_request_options(
extra_headers=headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
cast_to=GenerationCreateResponse,
cast_to=ImageGenerateResponse,
stream=stream or False,
stream_cls=Stream[ImageGenStreamEvent],
)


class AsyncGenerationsResource(AsyncAPIResource):
class AsyncImagesResource(AsyncAPIResource):
@cached_property
def with_raw_response(self) -> AsyncGenerationsResourceWithRawResponse:
def with_raw_response(self) -> AsyncImagesResourceWithRawResponse:
"""
This property can be used as a prefix for any HTTP method call to return
the raw response object instead of the parsed content.

For more information, see https://www.github.com/digitalocean/gradient-python#accessing-raw-response-data-eg-headers
"""
return AsyncGenerationsResourceWithRawResponse(self)
return AsyncImagesResourceWithRawResponse(self)

@cached_property
def with_streaming_response(self) -> AsyncGenerationsResourceWithStreamingResponse:
def with_streaming_response(self) -> AsyncImagesResourceWithStreamingResponse:
"""
An alternative to `.with_raw_response` that doesn't eagerly read the response body.

For more information, see https://www.github.com/digitalocean/gradient-python#with_streaming_response
"""
return AsyncGenerationsResourceWithStreamingResponse(self)
return AsyncImagesResourceWithStreamingResponse(self)

@overload
async def create(
async def generate(
self,
*,
prompt: str,
Expand All @@ -390,7 +390,7 @@ async def create(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> GenerationCreateResponse:
) -> ImageGenerateResponse:
"""
Creates a high-quality image from a text prompt using GPT-IMAGE-1, the latest
image generation model with automatic prompt optimization and enhanced visual
Expand Down Expand Up @@ -448,7 +448,7 @@ async def create(
...

@overload
async def create(
async def generate(
self,
*,
prompt: str,
Expand Down Expand Up @@ -527,7 +527,7 @@ async def create(
...

@overload
async def create(
async def generate(
self,
*,
prompt: str,
Expand All @@ -548,7 +548,7 @@ async def create(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> GenerationCreateResponse | AsyncStream[ImageGenStreamEvent]:
) -> ImageGenerateResponse | AsyncStream[ImageGenStreamEvent]:
"""
Creates a high-quality image from a text prompt using GPT-IMAGE-1, the latest
image generation model with automatic prompt optimization and enhanced visual
Expand Down Expand Up @@ -606,7 +606,7 @@ async def create(
...

@required_args(["prompt"], ["prompt", "stream"])
async def create(
async def generate(
self,
*,
prompt: str,
Expand All @@ -627,7 +627,7 @@ async def create(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> GenerationCreateResponse | AsyncStream[ImageGenStreamEvent]:
) -> ImageGenerateResponse | AsyncStream[ImageGenStreamEvent]:
if not self._client.model_access_key:
raise TypeError(
"Could not resolve authentication method. Expected model_access_key to be set for chat completions."
Expand All @@ -637,7 +637,6 @@ async def create(
"Authorization": f"Bearer {self._client.model_access_key}",
**headers,
}

return await self._post(
"/images/generations"
if self._client._base_url_overridden
Expand All @@ -657,50 +656,50 @@ async def create(
"stream": stream,
"user": user,
},
generation_create_params.GenerationCreateParamsStreaming
image_generate_params.ImageGenerateParamsStreaming
if stream
else generation_create_params.GenerationCreateParamsNonStreaming,
else image_generate_params.ImageGenerateParamsNonStreaming,
),
options=make_request_options(
extra_headers=headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
cast_to=GenerationCreateResponse,
cast_to=ImageGenerateResponse,
stream=stream or False,
stream_cls=AsyncStream[ImageGenStreamEvent],
)


class GenerationsResourceWithRawResponse:
def __init__(self, generations: GenerationsResource) -> None:
self._generations = generations
class ImagesResourceWithRawResponse:
def __init__(self, images: ImagesResource) -> None:
self._images = images

self.create = to_raw_response_wrapper(
generations.create,
self.generate = to_raw_response_wrapper(
images.generate,
)


class AsyncGenerationsResourceWithRawResponse:
def __init__(self, generations: AsyncGenerationsResource) -> None:
self._generations = generations
class AsyncImagesResourceWithRawResponse:
def __init__(self, images: AsyncImagesResource) -> None:
self._images = images

self.create = async_to_raw_response_wrapper(
generations.create,
self.generate = async_to_raw_response_wrapper(
images.generate,
)


class GenerationsResourceWithStreamingResponse:
def __init__(self, generations: GenerationsResource) -> None:
self._generations = generations
class ImagesResourceWithStreamingResponse:
def __init__(self, images: ImagesResource) -> None:
self._images = images

self.create = to_streamed_response_wrapper(
generations.create,
self.generate = to_streamed_response_wrapper(
images.generate,
)


class AsyncGenerationsResourceWithStreamingResponse:
def __init__(self, generations: AsyncGenerationsResource) -> None:
self._generations = generations
class AsyncImagesResourceWithStreamingResponse:
def __init__(self, images: AsyncImagesResource) -> None:
self._images = images

self.create = async_to_streamed_response_wrapper(
generations.create,
self.generate = async_to_streamed_response_wrapper(
images.generate,
)
Loading