diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 27d2fbbc..078b9e28 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "3.7.0" + ".": "3.8.0" } \ No newline at end of file diff --git a/.stats.yml b/.stats.yml index 425463f6..29f00c95 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 188 openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/digitalocean%2Fgradient-f07d74847e620dfa26d8df40ea4680814af9bba381b3a57a7b6ed76ad49d85f8.yml openapi_spec_hash: e3553dc2abf2afd4368b736bcc32a289 -config_hash: b712366a70c9d33e22d40eb601ca972f +config_hash: b28984dd49d4baf1d68572efe83ac103 diff --git a/CHANGELOG.md b/CHANGELOG.md index 27493281..bf60097a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 3.8.0 (2025-11-20) + +Full Changelog: [v3.7.0...v3.8.0](https://github.com/digitalocean/gradient-python/compare/v3.7.0...v3.8.0) + +### Features + +* **api:** manual updates ([244277b](https://github.com/digitalocean/gradient-python/commit/244277b483ac97f733e8f37e0b556cb49813b554)) + ## 3.7.0 (2025-11-19) Full Changelog: [v3.6.0...v3.7.0](https://github.com/digitalocean/gradient-python/compare/v3.6.0...v3.7.0) diff --git a/api.md b/api.md index 49135772..e32fae32 100644 --- a/api.md +++ b/api.md @@ -155,18 +155,6 @@ Methods: - client.agents.evaluation_metrics.workspaces.agents.list(workspace_uuid, \*\*params) -> AgentListResponse - client.agents.evaluation_metrics.workspaces.agents.move(path_workspace_uuid, \*\*params) -> AgentMoveResponse -### Models - -Types: - -```python -from gradient.types.agents.evaluation_metrics import ModelListResponse -``` - -Methods: - -- client.agents.evaluation_metrics.models.list(\*\*params) -> ModelListResponse - ### Anthropic #### Keys diff --git a/pyproject.toml b/pyproject.toml index 3832f578..28cc09df 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "gradient" -version = "3.7.0" +version = "3.8.0" description = "The official Python library for the Gradient API" dynamic = ["readme"] license = "Apache-2.0" diff --git a/src/gradient/_version.py b/src/gradient/_version.py index 6e29a000..defad636 100644 --- a/src/gradient/_version.py +++ b/src/gradient/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "gradient" -__version__ = "3.7.0" # x-release-please-version +__version__ = "3.8.0" # x-release-please-version diff --git a/src/gradient/resources/agents/evaluation_metrics/__init__.py b/src/gradient/resources/agents/evaluation_metrics/__init__.py index 515a221b..fcb54c78 100644 --- a/src/gradient/resources/agents/evaluation_metrics/__init__.py +++ b/src/gradient/resources/agents/evaluation_metrics/__init__.py @@ -1,13 +1,5 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from .models import ( - ModelsResource, - AsyncModelsResource, - ModelsResourceWithRawResponse, - AsyncModelsResourceWithRawResponse, - ModelsResourceWithStreamingResponse, - AsyncModelsResourceWithStreamingResponse, -) from .oauth2 import ( Oauth2Resource, AsyncOauth2Resource, @@ -64,12 +56,6 @@ "AsyncWorkspacesResourceWithRawResponse", "WorkspacesResourceWithStreamingResponse", "AsyncWorkspacesResourceWithStreamingResponse", - "ModelsResource", - "AsyncModelsResource", - "ModelsResourceWithRawResponse", - "AsyncModelsResourceWithRawResponse", - "ModelsResourceWithStreamingResponse", - "AsyncModelsResourceWithStreamingResponse", "AnthropicResource", "AsyncAnthropicResource", "AnthropicResourceWithRawResponse", diff --git a/src/gradient/resources/agents/evaluation_metrics/evaluation_metrics.py b/src/gradient/resources/agents/evaluation_metrics/evaluation_metrics.py index 14ea4d55..b9080132 100644 --- a/src/gradient/resources/agents/evaluation_metrics/evaluation_metrics.py +++ b/src/gradient/resources/agents/evaluation_metrics/evaluation_metrics.py @@ -4,14 +4,6 @@ import httpx -from .models import ( - ModelsResource, - AsyncModelsResource, - ModelsResourceWithRawResponse, - AsyncModelsResourceWithRawResponse, - ModelsResourceWithStreamingResponse, - AsyncModelsResourceWithStreamingResponse, -) from ...._types import Body, Omit, Query, Headers, NotGiven, omit, not_given from ...._utils import maybe_transform, async_maybe_transform from ...._compat import cached_property @@ -75,10 +67,6 @@ class EvaluationMetricsResource(SyncAPIResource): def workspaces(self) -> WorkspacesResource: return WorkspacesResource(self._client) - @cached_property - def models(self) -> ModelsResource: - return ModelsResource(self._client) - @cached_property def anthropic(self) -> AnthropicResource: return AnthropicResource(self._client) @@ -192,10 +180,6 @@ class AsyncEvaluationMetricsResource(AsyncAPIResource): def workspaces(self) -> AsyncWorkspacesResource: return AsyncWorkspacesResource(self._client) - @cached_property - def models(self) -> AsyncModelsResource: - return AsyncModelsResource(self._client) - @cached_property def anthropic(self) -> AsyncAnthropicResource: return AsyncAnthropicResource(self._client) @@ -319,10 +303,6 @@ def __init__(self, evaluation_metrics: EvaluationMetricsResource) -> None: def workspaces(self) -> WorkspacesResourceWithRawResponse: return WorkspacesResourceWithRawResponse(self._evaluation_metrics.workspaces) - @cached_property - def models(self) -> ModelsResourceWithRawResponse: - return ModelsResourceWithRawResponse(self._evaluation_metrics.models) - @cached_property def anthropic(self) -> AnthropicResourceWithRawResponse: return AnthropicResourceWithRawResponse(self._evaluation_metrics.anthropic) @@ -355,10 +335,6 @@ def __init__(self, evaluation_metrics: AsyncEvaluationMetricsResource) -> None: def workspaces(self) -> AsyncWorkspacesResourceWithRawResponse: return AsyncWorkspacesResourceWithRawResponse(self._evaluation_metrics.workspaces) - @cached_property - def models(self) -> AsyncModelsResourceWithRawResponse: - return AsyncModelsResourceWithRawResponse(self._evaluation_metrics.models) - @cached_property def anthropic(self) -> AsyncAnthropicResourceWithRawResponse: return AsyncAnthropicResourceWithRawResponse(self._evaluation_metrics.anthropic) @@ -391,10 +367,6 @@ def __init__(self, evaluation_metrics: EvaluationMetricsResource) -> None: def workspaces(self) -> WorkspacesResourceWithStreamingResponse: return WorkspacesResourceWithStreamingResponse(self._evaluation_metrics.workspaces) - @cached_property - def models(self) -> ModelsResourceWithStreamingResponse: - return ModelsResourceWithStreamingResponse(self._evaluation_metrics.models) - @cached_property def anthropic(self) -> AnthropicResourceWithStreamingResponse: return AnthropicResourceWithStreamingResponse(self._evaluation_metrics.anthropic) @@ -427,10 +399,6 @@ def __init__(self, evaluation_metrics: AsyncEvaluationMetricsResource) -> None: def workspaces(self) -> AsyncWorkspacesResourceWithStreamingResponse: return AsyncWorkspacesResourceWithStreamingResponse(self._evaluation_metrics.workspaces) - @cached_property - def models(self) -> AsyncModelsResourceWithStreamingResponse: - return AsyncModelsResourceWithStreamingResponse(self._evaluation_metrics.models) - @cached_property def anthropic(self) -> AsyncAnthropicResourceWithStreamingResponse: return AsyncAnthropicResourceWithStreamingResponse(self._evaluation_metrics.anthropic) diff --git a/src/gradient/resources/agents/evaluation_metrics/models.py b/src/gradient/resources/agents/evaluation_metrics/models.py deleted file mode 100644 index 7728e662..00000000 --- a/src/gradient/resources/agents/evaluation_metrics/models.py +++ /dev/null @@ -1,254 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List -from typing_extensions import Literal - -import httpx - -from ...._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from ...._utils import 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 ...._base_client import make_request_options -from ....types.agents.evaluation_metrics import model_list_params -from ....types.agents.evaluation_metrics.model_list_response import ModelListResponse - -__all__ = ["ModelsResource", "AsyncModelsResource"] - - -class ModelsResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> ModelsResourceWithRawResponse: - """ - 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 ModelsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> ModelsResourceWithStreamingResponse: - """ - 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 ModelsResourceWithStreamingResponse(self) - - def list( - self, - *, - page: int | Omit = omit, - per_page: int | Omit = omit, - public_only: bool | Omit = omit, - usecases: List[ - Literal[ - "MODEL_USECASE_UNKNOWN", - "MODEL_USECASE_AGENT", - "MODEL_USECASE_FINETUNED", - "MODEL_USECASE_KNOWLEDGEBASE", - "MODEL_USECASE_GUARDRAIL", - "MODEL_USECASE_REASONING", - "MODEL_USECASE_SERVERLESS", - ] - ] - | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ModelListResponse: - """ - To list all models, send a GET request to `/v2/gen-ai/models`. - - Args: - page: Page number. - - per_page: Items per page. - - public_only: Only include models that are publicly available. - - usecases: Include only models defined for the listed usecases. - - - MODEL_USECASE_UNKNOWN: The use case of the model is unknown - - MODEL_USECASE_AGENT: The model maybe used in an agent - - MODEL_USECASE_FINETUNED: The model maybe used for fine tuning - - MODEL_USECASE_KNOWLEDGEBASE: The model maybe used for knowledge bases - (embedding models) - - MODEL_USECASE_GUARDRAIL: The model maybe used for guardrails - - MODEL_USECASE_REASONING: The model usecase for reasoning - - MODEL_USECASE_SERVERLESS: The model usecase for serverless inference - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._get( - "/v2/gen-ai/models" - if self._client._base_url_overridden - else "https://api.digitalocean.com/v2/gen-ai/models", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - { - "page": page, - "per_page": per_page, - "public_only": public_only, - "usecases": usecases, - }, - model_list_params.ModelListParams, - ), - ), - cast_to=ModelListResponse, - ) - - -class AsyncModelsResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncModelsResourceWithRawResponse: - """ - 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 AsyncModelsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncModelsResourceWithStreamingResponse: - """ - 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 AsyncModelsResourceWithStreamingResponse(self) - - async def list( - self, - *, - page: int | Omit = omit, - per_page: int | Omit = omit, - public_only: bool | Omit = omit, - usecases: List[ - Literal[ - "MODEL_USECASE_UNKNOWN", - "MODEL_USECASE_AGENT", - "MODEL_USECASE_FINETUNED", - "MODEL_USECASE_KNOWLEDGEBASE", - "MODEL_USECASE_GUARDRAIL", - "MODEL_USECASE_REASONING", - "MODEL_USECASE_SERVERLESS", - ] - ] - | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ModelListResponse: - """ - To list all models, send a GET request to `/v2/gen-ai/models`. - - Args: - page: Page number. - - per_page: Items per page. - - public_only: Only include models that are publicly available. - - usecases: Include only models defined for the listed usecases. - - - MODEL_USECASE_UNKNOWN: The use case of the model is unknown - - MODEL_USECASE_AGENT: The model maybe used in an agent - - MODEL_USECASE_FINETUNED: The model maybe used for fine tuning - - MODEL_USECASE_KNOWLEDGEBASE: The model maybe used for knowledge bases - (embedding models) - - MODEL_USECASE_GUARDRAIL: The model maybe used for guardrails - - MODEL_USECASE_REASONING: The model usecase for reasoning - - MODEL_USECASE_SERVERLESS: The model usecase for serverless inference - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._get( - "/v2/gen-ai/models" - if self._client._base_url_overridden - else "https://api.digitalocean.com/v2/gen-ai/models", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - { - "page": page, - "per_page": per_page, - "public_only": public_only, - "usecases": usecases, - }, - model_list_params.ModelListParams, - ), - ), - cast_to=ModelListResponse, - ) - - -class ModelsResourceWithRawResponse: - def __init__(self, models: ModelsResource) -> None: - self._models = models - - self.list = to_raw_response_wrapper( - models.list, - ) - - -class AsyncModelsResourceWithRawResponse: - def __init__(self, models: AsyncModelsResource) -> None: - self._models = models - - self.list = async_to_raw_response_wrapper( - models.list, - ) - - -class ModelsResourceWithStreamingResponse: - def __init__(self, models: ModelsResource) -> None: - self._models = models - - self.list = to_streamed_response_wrapper( - models.list, - ) - - -class AsyncModelsResourceWithStreamingResponse: - def __init__(self, models: AsyncModelsResource) -> None: - self._models = models - - self.list = async_to_streamed_response_wrapper( - models.list, - ) diff --git a/src/gradient/types/agents/evaluation_metrics/__init__.py b/src/gradient/types/agents/evaluation_metrics/__init__.py index ade2b376..971eddef 100644 --- a/src/gradient/types/agents/evaluation_metrics/__init__.py +++ b/src/gradient/types/agents/evaluation_metrics/__init__.py @@ -7,8 +7,6 @@ anthropic, # type: ignore # noqa: F401 workspaces, # type: ignore # noqa: F401 ) -from .model_list_params import ModelListParams as ModelListParams -from .model_list_response import ModelListResponse as ModelListResponse from .workspace_create_params import WorkspaceCreateParams as WorkspaceCreateParams from .workspace_list_response import WorkspaceListResponse as WorkspaceListResponse from .workspace_update_params import WorkspaceUpdateParams as WorkspaceUpdateParams diff --git a/src/gradient/types/agents/evaluation_metrics/model_list_params.py b/src/gradient/types/agents/evaluation_metrics/model_list_params.py deleted file mode 100644 index a2fa066a..00000000 --- a/src/gradient/types/agents/evaluation_metrics/model_list_params.py +++ /dev/null @@ -1,42 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List -from typing_extensions import Literal, TypedDict - -__all__ = ["ModelListParams"] - - -class ModelListParams(TypedDict, total=False): - page: int - """Page number.""" - - per_page: int - """Items per page.""" - - public_only: bool - """Only include models that are publicly available.""" - - usecases: List[ - Literal[ - "MODEL_USECASE_UNKNOWN", - "MODEL_USECASE_AGENT", - "MODEL_USECASE_FINETUNED", - "MODEL_USECASE_KNOWLEDGEBASE", - "MODEL_USECASE_GUARDRAIL", - "MODEL_USECASE_REASONING", - "MODEL_USECASE_SERVERLESS", - ] - ] - """Include only models defined for the listed usecases. - - - MODEL_USECASE_UNKNOWN: The use case of the model is unknown - - MODEL_USECASE_AGENT: The model maybe used in an agent - - MODEL_USECASE_FINETUNED: The model maybe used for fine tuning - - MODEL_USECASE_KNOWLEDGEBASE: The model maybe used for knowledge bases - (embedding models) - - MODEL_USECASE_GUARDRAIL: The model maybe used for guardrails - - MODEL_USECASE_REASONING: The model usecase for reasoning - - MODEL_USECASE_SERVERLESS: The model usecase for serverless inference - """ diff --git a/src/gradient/types/agents/evaluation_metrics/model_list_response.py b/src/gradient/types/agents/evaluation_metrics/model_list_response.py deleted file mode 100644 index 2fc17524..00000000 --- a/src/gradient/types/agents/evaluation_metrics/model_list_response.py +++ /dev/null @@ -1,21 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Optional - -from ...._models import BaseModel -from ...api_model import APIModel -from ...shared.api_meta import APIMeta -from ...shared.api_links import APILinks - -__all__ = ["ModelListResponse"] - - -class ModelListResponse(BaseModel): - links: Optional[APILinks] = None - """Links to other pages""" - - meta: Optional[APIMeta] = None - """Meta information about the data set""" - - models: Optional[List[APIModel]] = None - """The models""" diff --git a/tests/api_resources/agents/evaluation_metrics/test_models.py b/tests/api_resources/agents/evaluation_metrics/test_models.py deleted file mode 100644 index 677b3383..00000000 --- a/tests/api_resources/agents/evaluation_metrics/test_models.py +++ /dev/null @@ -1,102 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -import os -from typing import Any, cast - -import pytest - -from gradient import Gradient, AsyncGradient -from tests.utils import assert_matches_type -from gradient.types.agents.evaluation_metrics import ModelListResponse - -base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") - - -class TestModels: - parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"]) - - @pytest.mark.skip(reason="Prism tests are disabled") - @parametrize - def test_method_list(self, client: Gradient) -> None: - model = client.agents.evaluation_metrics.models.list() - assert_matches_type(ModelListResponse, model, path=["response"]) - - @pytest.mark.skip(reason="Prism tests are disabled") - @parametrize - def test_method_list_with_all_params(self, client: Gradient) -> None: - model = client.agents.evaluation_metrics.models.list( - page=0, - per_page=0, - public_only=True, - usecases=["MODEL_USECASE_UNKNOWN"], - ) - assert_matches_type(ModelListResponse, model, path=["response"]) - - @pytest.mark.skip(reason="Prism tests are disabled") - @parametrize - def test_raw_response_list(self, client: Gradient) -> None: - response = client.agents.evaluation_metrics.models.with_raw_response.list() - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - model = response.parse() - assert_matches_type(ModelListResponse, model, path=["response"]) - - @pytest.mark.skip(reason="Prism tests are disabled") - @parametrize - def test_streaming_response_list(self, client: Gradient) -> None: - with client.agents.evaluation_metrics.models.with_streaming_response.list() as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - model = response.parse() - assert_matches_type(ModelListResponse, model, path=["response"]) - - assert cast(Any, response.is_closed) is True - - -class TestAsyncModels: - parametrize = pytest.mark.parametrize( - "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"] - ) - - @pytest.mark.skip(reason="Prism tests are disabled") - @parametrize - async def test_method_list(self, async_client: AsyncGradient) -> None: - model = await async_client.agents.evaluation_metrics.models.list() - assert_matches_type(ModelListResponse, model, path=["response"]) - - @pytest.mark.skip(reason="Prism tests are disabled") - @parametrize - async def test_method_list_with_all_params(self, async_client: AsyncGradient) -> None: - model = await async_client.agents.evaluation_metrics.models.list( - page=0, - per_page=0, - public_only=True, - usecases=["MODEL_USECASE_UNKNOWN"], - ) - assert_matches_type(ModelListResponse, model, path=["response"]) - - @pytest.mark.skip(reason="Prism tests are disabled") - @parametrize - async def test_raw_response_list(self, async_client: AsyncGradient) -> None: - response = await async_client.agents.evaluation_metrics.models.with_raw_response.list() - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - model = await response.parse() - assert_matches_type(ModelListResponse, model, path=["response"]) - - @pytest.mark.skip(reason="Prism tests are disabled") - @parametrize - async def test_streaming_response_list(self, async_client: AsyncGradient) -> None: - async with async_client.agents.evaluation_metrics.models.with_streaming_response.list() as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - model = await response.parse() - assert_matches_type(ModelListResponse, model, path=["response"]) - - assert cast(Any, response.is_closed) is True