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 @@
{
".": "0.31.0"
".": "0.31.1"
}
6 changes: 3 additions & 3 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
configured_endpoints: 31
openapi_spec_hash: a574ef9082e992c25120554886a9ab7a
config_hash: 2d4f9621ceae4bb25977853a964a0e54
configured_endpoints: 32
openapi_spec_hash: 72e2dd8871904fe6c130d1c81b033d5a
config_hash: f75dd97d47c446f8fdc8bcb36f445eea
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,14 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).

## 0.31.1 (2026-08-03)

Full Changelog: [v0.31.0...v0.31.1](https://github.com/openlayer-ai/openlayer-python/compare/v0.31.0...v0.31.1)

### Chores

* **closes OPEN-11851:** expose update project endpoint ([e55b71f](https://github.com/openlayer-ai/openlayer-python/commit/e55b71f493d1b8a568b0c2334b088e15232b9aea))

## 0.31.0 (2026-07-29)

Full Changelog: [v0.30.1...v0.31.0](https://github.com/openlayer-ai/openlayer-python/compare/v0.30.1...v0.31.0)
Expand Down
3 changes: 2 additions & 1 deletion api.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@
Types:

```python
from openlayer.types import ProjectCreateResponse, ProjectListResponse
from openlayer.types import ProjectCreateResponse, ProjectUpdateResponse, ProjectListResponse
```

Methods:

- <code title="post /projects">client.projects.<a href="./src/openlayer/resources/projects/projects.py">create</a>(\*\*<a href="src/openlayer/types/project_create_params.py">params</a>) -> <a href="./src/openlayer/types/project_create_response.py">ProjectCreateResponse</a></code>
- <code title="patch /projects/{projectId}">client.projects.<a href="./src/openlayer/resources/projects/projects.py">update</a>(project_id, \*\*<a href="src/openlayer/types/project_update_params.py">params</a>) -> <a href="./src/openlayer/types/project_update_response.py">ProjectUpdateResponse</a></code>
- <code title="get /projects">client.projects.<a href="./src/openlayer/resources/projects/projects.py">list</a>(\*\*<a href="src/openlayer/types/project_list_params.py">params</a>) -> <a href="./src/openlayer/types/project_list_response.py">ProjectListResponse</a></code>
- <code title="delete /projects/{projectId}">client.projects.<a href="./src/openlayer/resources/projects/projects.py">delete</a>(project_id) -> None</code>

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 = "openlayer"
version = "0.31.0"
version = "0.31.1"
description = "The official Python library for the openlayer API"
dynamic = ["readme"]
license = "Apache-2.0"
Expand Down
2 changes: 1 addition & 1 deletion src/openlayer/_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__ = "openlayer"
__version__ = "0.31.0" # x-release-please-version
__version__ = "0.31.1" # x-release-please-version
177 changes: 175 additions & 2 deletions src/openlayer/resources/projects/projects.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
TestsResourceWithStreamingResponse,
AsyncTestsResourceWithStreamingResponse,
)
from ...types import project_list_params, project_create_params
from ...types import project_list_params, project_create_params, project_update_params
from .commits import (
CommitsResource,
AsyncCommitsResource,
Expand All @@ -24,7 +24,7 @@
CommitsResourceWithStreamingResponse,
AsyncCommitsResourceWithStreamingResponse,
)
from ..._types import Body, Omit, Query, Headers, NoneType, NotGiven, omit, not_given
from ..._types import Body, Omit, Query, Headers, NoneType, NotGiven, SequenceNotStr, omit, not_given
from ..._utils import path_template, maybe_transform, async_maybe_transform
from ..._compat import cached_property
from ..._resource import SyncAPIResource, AsyncAPIResource
Expand All @@ -45,6 +45,7 @@
)
from ...types.project_list_response import ProjectListResponse
from ...types.project_create_response import ProjectCreateResponse
from ...types.project_update_response import ProjectUpdateResponse

__all__ = ["ProjectsResource", "AsyncProjectsResource"]

Expand Down Expand Up @@ -86,7 +87,11 @@ def create(
*,
name: str,
task_type: Literal["llm-base", "tabular-classification", "tabular-regression", "text-classification"],
data_retention_days: Optional[int] | Omit = omit,
description: Optional[str] | Omit = omit,
model_developer: Optional[str] | Omit = omit,
model_types: Optional[SequenceNotStr[str]] | Omit = omit,
purpose: Optional[str] | 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,
Expand All @@ -102,8 +107,17 @@ def create(

task_type: The task type of the project.

data_retention_days: Number of days to retain monitoring data for this project. Null means data is
retained indefinitely.

description: The project description.

model_developer: Who developed the model used in this project.

model_types: The kinds of model used in this project.

purpose: What the system in this project is intended to do.

extra_headers: Send extra headers

extra_query: Add additional query parameters to the request
Expand All @@ -118,7 +132,11 @@ def create(
{
"name": name,
"task_type": task_type,
"data_retention_days": data_retention_days,
"description": description,
"model_developer": model_developer,
"model_types": model_types,
"purpose": purpose,
},
project_create_params.ProjectCreateParams,
),
Expand All @@ -128,6 +146,69 @@ def create(
cast_to=ProjectCreateResponse,
)

def update(
self,
project_id: str,
*,
data_retention_days: Optional[int] | Omit = omit,
description: Optional[str] | Omit = omit,
model_developer: Optional[str] | Omit = omit,
model_types: Optional[SequenceNotStr[str]] | Omit = omit,
name: str | Omit = omit,
purpose: Optional[str] | 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,
) -> ProjectUpdateResponse:
"""
Update a project's metadata.

Args:
data_retention_days: Number of days to retain monitoring data for this project. Null means data is
retained indefinitely.

description: The project description.

model_developer: Who developed the model used in this project.

model_types: The kinds of model used in this project.

name: The project name.

purpose: What the system in this project is intended to do.

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
"""
if not project_id:
raise ValueError(f"Expected a non-empty value for `project_id` but received {project_id!r}")
return self._patch(
path_template("/projects/{project_id}", project_id=project_id),
body=maybe_transform(
{
"data_retention_days": data_retention_days,
"description": description,
"model_developer": model_developer,
"model_types": model_types,
"name": name,
"purpose": purpose,
},
project_update_params.ProjectUpdateParams,
),
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
cast_to=ProjectUpdateResponse,
)

def list(
self,
*,
Expand Down Expand Up @@ -255,7 +336,11 @@ async def create(
*,
name: str,
task_type: Literal["llm-base", "tabular-classification", "tabular-regression", "text-classification"],
data_retention_days: Optional[int] | Omit = omit,
description: Optional[str] | Omit = omit,
model_developer: Optional[str] | Omit = omit,
model_types: Optional[SequenceNotStr[str]] | Omit = omit,
purpose: Optional[str] | 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,
Expand All @@ -271,8 +356,17 @@ async def create(

task_type: The task type of the project.

data_retention_days: Number of days to retain monitoring data for this project. Null means data is
retained indefinitely.

description: The project description.

model_developer: Who developed the model used in this project.

model_types: The kinds of model used in this project.

purpose: What the system in this project is intended to do.

extra_headers: Send extra headers

extra_query: Add additional query parameters to the request
Expand All @@ -287,7 +381,11 @@ async def create(
{
"name": name,
"task_type": task_type,
"data_retention_days": data_retention_days,
"description": description,
"model_developer": model_developer,
"model_types": model_types,
"purpose": purpose,
},
project_create_params.ProjectCreateParams,
),
Expand All @@ -297,6 +395,69 @@ async def create(
cast_to=ProjectCreateResponse,
)

async def update(
self,
project_id: str,
*,
data_retention_days: Optional[int] | Omit = omit,
description: Optional[str] | Omit = omit,
model_developer: Optional[str] | Omit = omit,
model_types: Optional[SequenceNotStr[str]] | Omit = omit,
name: str | Omit = omit,
purpose: Optional[str] | 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,
) -> ProjectUpdateResponse:
"""
Update a project's metadata.

Args:
data_retention_days: Number of days to retain monitoring data for this project. Null means data is
retained indefinitely.

description: The project description.

model_developer: Who developed the model used in this project.

model_types: The kinds of model used in this project.

name: The project name.

purpose: What the system in this project is intended to do.

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
"""
if not project_id:
raise ValueError(f"Expected a non-empty value for `project_id` but received {project_id!r}")
return await self._patch(
path_template("/projects/{project_id}", project_id=project_id),
body=await async_maybe_transform(
{
"data_retention_days": data_retention_days,
"description": description,
"model_developer": model_developer,
"model_types": model_types,
"name": name,
"purpose": purpose,
},
project_update_params.ProjectUpdateParams,
),
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
cast_to=ProjectUpdateResponse,
)

async def list(
self,
*,
Expand Down Expand Up @@ -394,6 +555,9 @@ def __init__(self, projects: ProjectsResource) -> None:
self.create = to_raw_response_wrapper(
projects.create,
)
self.update = to_raw_response_wrapper(
projects.update,
)
self.list = to_raw_response_wrapper(
projects.list,
)
Expand Down Expand Up @@ -421,6 +585,9 @@ def __init__(self, projects: AsyncProjectsResource) -> None:
self.create = async_to_raw_response_wrapper(
projects.create,
)
self.update = async_to_raw_response_wrapper(
projects.update,
)
self.list = async_to_raw_response_wrapper(
projects.list,
)
Expand Down Expand Up @@ -448,6 +615,9 @@ def __init__(self, projects: ProjectsResource) -> None:
self.create = to_streamed_response_wrapper(
projects.create,
)
self.update = to_streamed_response_wrapper(
projects.update,
)
self.list = to_streamed_response_wrapper(
projects.list,
)
Expand Down Expand Up @@ -475,6 +645,9 @@ def __init__(self, projects: AsyncProjectsResource) -> None:
self.create = async_to_streamed_response_wrapper(
projects.create,
)
self.update = async_to_streamed_response_wrapper(
projects.update,
)
self.list = async_to_streamed_response_wrapper(
projects.list,
)
Expand Down
2 changes: 2 additions & 0 deletions src/openlayer/types/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
from .test_evaluate_params import TestEvaluateParams as TestEvaluateParams
from .project_create_params import ProjectCreateParams as ProjectCreateParams
from .project_list_response import ProjectListResponse as ProjectListResponse
from .project_update_params import ProjectUpdateParams as ProjectUpdateParams
from .test_evaluate_response import TestEvaluateResponse as TestEvaluateResponse
from .project_create_response import ProjectCreateResponse as ProjectCreateResponse
from .project_update_response import ProjectUpdateResponse as ProjectUpdateResponse
from .workspace_update_params import WorkspaceUpdateParams as WorkspaceUpdateParams
from .commit_retrieve_response import CommitRetrieveResponse as CommitRetrieveResponse
from .test_list_results_params import TestListResultsParams as TestListResultsParams
Expand Down
15 changes: 15 additions & 0 deletions src/openlayer/types/inference_pipeline_retrieve_response.py
Original file line number Diff line number Diff line change
Expand Up @@ -273,11 +273,26 @@ class Project(BaseModel):
workspace_id: Optional[str] = FieldInfo(alias="workspaceId", default=None)
"""The workspace id."""

data_retention_days: Optional[int] = FieldInfo(alias="dataRetentionDays", default=None)
"""Number of days to retain monitoring data for this project.

Null means data is retained indefinitely.
"""

description: Optional[str] = None
"""The project description."""

git_repo: Optional[ProjectGitRepo] = FieldInfo(alias="gitRepo", default=None)

api_model_developer: Optional[str] = FieldInfo(alias="modelDeveloper", default=None)
"""Who developed the model used in this project."""

api_model_types: Optional[List[str]] = FieldInfo(alias="modelTypes", default=None)
"""The kinds of model used in this project."""

purpose: Optional[str] = None
"""What the system in this project is intended to do."""


class WorkspaceMonthlyUsage(BaseModel):
execution_time_ms: Optional[int] = FieldInfo(alias="executionTimeMs", default=None)
Expand Down
Loading