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.1.0-alpha.30"
".": "0.1.0-alpha.31"
}
6 changes: 3 additions & 3 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
configured_endpoints: 55
openapi_spec_hash: c894ce3fb9db92c69816f06896e30067
config_hash: 48c3812186c899cdef23cc8de76bd2aa
configured_endpoints: 56
openapi_spec_hash: ef178c3ce0c31f0785212f1138ee8eee
config_hash: 9e0ed146f9f6e6d1884a4c0589d6f1c2
18 changes: 18 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,23 @@
# Changelog

## 0.1.0-alpha.31 (2025-10-28)

Full Changelog: [v0.1.0-alpha.30...v0.1.0-alpha.31](https://github.com/cleanlab/codex-python/compare/v0.1.0-alpha.30...v0.1.0-alpha.31)

### Features

* **api:** add create from template ([bb733b1](https://github.com/cleanlab/codex-python/commit/bb733b1122b9e52160acb3e3b92b00bf941efce5))
* **api:** api update ([1481cd8](https://github.com/cleanlab/codex-python/commit/1481cd895f093e9f044e438b7c26fc52f73ee791))
* **api:** api update ([5468580](https://github.com/cleanlab/codex-python/commit/546858021affa494867222bf7e87fb55c867df41))
* **api:** api update ([766e331](https://github.com/cleanlab/codex-python/commit/766e3314ad8a72522fa29804b3edc328bab3b4af))
* **api:** api update ([377dc6b](https://github.com/cleanlab/codex-python/commit/377dc6b4dad3ba898b9fda4fe305d4c25b1ee781))
* **api:** api update ([321392c](https://github.com/cleanlab/codex-python/commit/321392cfd9ac98fe1ad0b06d21f26441e70c90fc))


### Chores

* bump `httpx-aiohttp` version to 0.1.9 ([666f855](https://github.com/cleanlab/codex-python/commit/666f855d5532589f5ffbe0b53a5de65355ec33aa))

## 0.1.0-alpha.30 (2025-10-14)

Full Changelog: [v0.1.0-alpha.29...v0.1.0-alpha.30](https://github.com/cleanlab/codex-python/compare/v0.1.0-alpha.29...v0.1.0-alpha.30)
Expand Down
1 change: 1 addition & 0 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ Methods:
- <code title="put /api/projects/{project_id}">client.projects.<a href="./src/codex/resources/projects/projects.py">update</a>(project_id, \*\*<a href="src/codex/types/project_update_params.py">params</a>) -> <a href="./src/codex/types/project_return_schema.py">ProjectReturnSchema</a></code>
- <code title="get /api/projects/">client.projects.<a href="./src/codex/resources/projects/projects.py">list</a>(\*\*<a href="src/codex/types/project_list_params.py">params</a>) -> <a href="./src/codex/types/project_list_response.py">ProjectListResponse</a></code>
- <code title="delete /api/projects/{project_id}">client.projects.<a href="./src/codex/resources/projects/projects.py">delete</a>(project_id) -> None</code>
- <code title="post /api/projects/create-from-template">client.projects.<a href="./src/codex/resources/projects/projects.py">create_from_template</a>(\*\*<a href="src/codex/types/project_create_from_template_params.py">params</a>) -> <a href="./src/codex/types/project_return_schema.py">ProjectReturnSchema</a></code>
- <code title="post /api/projects/{project_id}/detect">client.projects.<a href="./src/codex/resources/projects/projects.py">detect</a>(project_id, \*\*<a href="src/codex/types/project_detect_params.py">params</a>) -> <a href="./src/codex/types/project_detect_response.py">ProjectDetectResponse</a></code>
- <code title="get /api/projects/{project_id}/export">client.projects.<a href="./src/codex/resources/projects/projects.py">export</a>(project_id) -> object</code>
- <code title="post /api/projects/{project_id}/notifications">client.projects.<a href="./src/codex/resources/projects/projects.py">invite_sme</a>(project_id, \*\*<a href="src/codex/types/project_invite_sme_params.py">params</a>) -> <a href="./src/codex/types/project_invite_sme_response.py">ProjectInviteSmeResponse</a></code>
Expand Down
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "codex-sdk"
version = "0.1.0-alpha.30"
version = "0.1.0-alpha.31"
description = "Internal SDK used within cleanlab-codex package. Refer to https://pypi.org/project/cleanlab-codex/ instead."
dynamic = ["readme"]
license = "MIT"
Expand Down Expand Up @@ -39,7 +39,7 @@ Homepage = "https://github.com/cleanlab/codex-python"
Repository = "https://github.com/cleanlab/codex-python"

[project.optional-dependencies]
aiohttp = ["aiohttp", "httpx_aiohttp>=0.1.8"]
aiohttp = ["aiohttp", "httpx_aiohttp>=0.1.9"]

[tool.rye]
managed = true
Expand Down
2 changes: 1 addition & 1 deletion requirements-dev.lock
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ httpx==0.28.1
# via codex-sdk
# via httpx-aiohttp
# via respx
httpx-aiohttp==0.1.8
httpx-aiohttp==0.1.9
# via codex-sdk
idna==3.4
# via anyio
Expand Down
2 changes: 1 addition & 1 deletion requirements.lock
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ httpcore==1.0.9
httpx==0.28.1
# via codex-sdk
# via httpx-aiohttp
httpx-aiohttp==0.1.8
httpx-aiohttp==0.1.9
# via codex-sdk
idna==3.4
# via anyio
Expand Down
2 changes: 1 addition & 1 deletion src/codex/_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__ = "codex"
__version__ = "0.1.0-alpha.30" # x-release-please-version
__version__ = "0.1.0-alpha.31" # x-release-please-version
111 changes: 111 additions & 0 deletions src/codex/resources/projects/projects.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
project_validate_params,
project_invite_sme_params,
project_retrieve_analytics_params,
project_create_from_template_params,
)
from ..._types import Body, Omit, Query, Headers, NoneType, NotGiven, SequenceNotStr, omit, not_given
from ..._utils import maybe_transform, strip_not_given, async_maybe_transform
Expand Down Expand Up @@ -316,6 +317,55 @@ def delete(
cast_to=NoneType,
)

def create_from_template(
self,
*,
organization_id: str,
template_project_id: str | Omit = omit,
description: Optional[str] | Omit = omit,
name: 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,
) -> ProjectReturnSchema:
"""
Create a new project from a template project.

Args:
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._post(
"/api/projects/create-from-template",
body=maybe_transform(
{
"organization_id": organization_id,
"description": description,
"name": name,
},
project_create_from_template_params.ProjectCreateFromTemplateParams,
),
options=make_request_options(
extra_headers=extra_headers,
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
query=maybe_transform(
{"template_project_id": template_project_id},
project_create_from_template_params.ProjectCreateFromTemplateParams,
),
),
cast_to=ProjectReturnSchema,
)

def detect(
self,
project_id: str,
Expand Down Expand Up @@ -1089,6 +1139,55 @@ async def delete(
cast_to=NoneType,
)

async def create_from_template(
self,
*,
organization_id: str,
template_project_id: str | Omit = omit,
description: Optional[str] | Omit = omit,
name: 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,
) -> ProjectReturnSchema:
"""
Create a new project from a template project.

Args:
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._post(
"/api/projects/create-from-template",
body=await async_maybe_transform(
{
"organization_id": organization_id,
"description": description,
"name": name,
},
project_create_from_template_params.ProjectCreateFromTemplateParams,
),
options=make_request_options(
extra_headers=extra_headers,
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
query=await async_maybe_transform(
{"template_project_id": template_project_id},
project_create_from_template_params.ProjectCreateFromTemplateParams,
),
),
cast_to=ProjectReturnSchema,
)

async def detect(
self,
project_id: str,
Expand Down Expand Up @@ -1635,6 +1734,9 @@ def __init__(self, projects: ProjectsResource) -> None:
self.delete = to_raw_response_wrapper(
projects.delete,
)
self.create_from_template = to_raw_response_wrapper(
projects.create_from_template,
)
self.detect = to_raw_response_wrapper(
projects.detect,
)
Expand Down Expand Up @@ -1687,6 +1789,9 @@ def __init__(self, projects: AsyncProjectsResource) -> None:
self.delete = async_to_raw_response_wrapper(
projects.delete,
)
self.create_from_template = async_to_raw_response_wrapper(
projects.create_from_template,
)
self.detect = async_to_raw_response_wrapper(
projects.detect,
)
Expand Down Expand Up @@ -1739,6 +1844,9 @@ def __init__(self, projects: ProjectsResource) -> None:
self.delete = to_streamed_response_wrapper(
projects.delete,
)
self.create_from_template = to_streamed_response_wrapper(
projects.create_from_template,
)
self.detect = to_streamed_response_wrapper(
projects.detect,
)
Expand Down Expand Up @@ -1791,6 +1899,9 @@ def __init__(self, projects: AsyncProjectsResource) -> None:
self.delete = async_to_streamed_response_wrapper(
projects.delete,
)
self.create_from_template = async_to_streamed_response_wrapper(
projects.create_from_template,
)
self.detect = async_to_streamed_response_wrapper(
projects.detect,
)
Expand Down
1 change: 1 addition & 0 deletions src/codex/types/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
from .user_activate_account_params import UserActivateAccountParams as UserActivateAccountParams
from .project_retrieve_analytics_params import ProjectRetrieveAnalyticsParams as ProjectRetrieveAnalyticsParams
from .organization_list_members_response import OrganizationListMembersResponse as OrganizationListMembersResponse
from .project_create_from_template_params import ProjectCreateFromTemplateParams as ProjectCreateFromTemplateParams
from .project_retrieve_analytics_response import ProjectRetrieveAnalyticsResponse as ProjectRetrieveAnalyticsResponse
from .organization_retrieve_permissions_response import (
OrganizationRetrievePermissionsResponse as OrganizationRetrievePermissionsResponse,
Expand Down
18 changes: 18 additions & 0 deletions src/codex/types/project_create_from_template_params.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.

from __future__ import annotations

from typing import Optional
from typing_extensions import Required, TypedDict

__all__ = ["ProjectCreateFromTemplateParams"]


class ProjectCreateFromTemplateParams(TypedDict, total=False):
organization_id: Required[str]

template_project_id: str

description: Optional[str]

name: Optional[str]
2 changes: 2 additions & 0 deletions src/codex/types/project_create_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -354,6 +354,8 @@ class ConfigEvalConfig(TypedDict, total=False):


class Config(TypedDict, total=False):
ai_guidance_threshold: float

clustering_use_llm_matching: bool

eval_config: ConfigEvalConfig
Expand Down
17 changes: 2 additions & 15 deletions src/codex/types/project_detect_response.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,10 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.

from typing import Dict, List, Optional
from typing import Dict, Optional

from .._models import BaseModel

__all__ = ["ProjectDetectResponse", "DeterministicGuardrailsResults", "EvalScores"]


class DeterministicGuardrailsResults(BaseModel):
guardrail_name: str

should_guardrail: bool

fallback_message: Optional[str] = None

matches: Optional[List[str]] = None
__all__ = ["ProjectDetectResponse", "EvalScores"]


class EvalScores(BaseModel):
Expand All @@ -32,9 +22,6 @@ class EvalScores(BaseModel):


class ProjectDetectResponse(BaseModel):
deterministic_guardrails_results: Optional[Dict[str, DeterministicGuardrailsResults]] = None
"""Results from deterministic guardrails applied to the response."""

escalated_to_sme: bool
"""
True if the question should be escalated to Codex for an SME to review, False
Expand Down
34 changes: 34 additions & 0 deletions src/codex/types/project_list_response.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,12 @@ class ProjectConfigEvalConfigCustomEvals(BaseModel):


class ProjectConfigEvalConfigDefaultEvalsContextSufficiency(BaseModel):
display_name: str
"""Human-friendly name for display.

For default evals, use standardized labels from DEFAULT_EVAL_ISSUE_TYPE_LABELS.
"""

eval_key: str
"""
Unique key for eval metric - currently maps to the TrustworthyRAG name property
Expand Down Expand Up @@ -142,6 +148,12 @@ class ProjectConfigEvalConfigDefaultEvalsContextSufficiency(BaseModel):


class ProjectConfigEvalConfigDefaultEvalsQueryEase(BaseModel):
display_name: str
"""Human-friendly name for display.

For default evals, use standardized labels from DEFAULT_EVAL_ISSUE_TYPE_LABELS.
"""

eval_key: str
"""
Unique key for eval metric - currently maps to the TrustworthyRAG name property
Expand Down Expand Up @@ -183,6 +195,12 @@ class ProjectConfigEvalConfigDefaultEvalsQueryEase(BaseModel):


class ProjectConfigEvalConfigDefaultEvalsResponseGroundedness(BaseModel):
display_name: str
"""Human-friendly name for display.

For default evals, use standardized labels from DEFAULT_EVAL_ISSUE_TYPE_LABELS.
"""

eval_key: str
"""
Unique key for eval metric - currently maps to the TrustworthyRAG name property
Expand Down Expand Up @@ -224,6 +242,12 @@ class ProjectConfigEvalConfigDefaultEvalsResponseGroundedness(BaseModel):


class ProjectConfigEvalConfigDefaultEvalsResponseHelpfulness(BaseModel):
display_name: str
"""Human-friendly name for display.

For default evals, use standardized labels from DEFAULT_EVAL_ISSUE_TYPE_LABELS.
"""

eval_key: str
"""
Unique key for eval metric - currently maps to the TrustworthyRAG name property
Expand Down Expand Up @@ -265,6 +289,12 @@ class ProjectConfigEvalConfigDefaultEvalsResponseHelpfulness(BaseModel):


class ProjectConfigEvalConfigDefaultEvalsTrustworthiness(BaseModel):
display_name: str
"""Human-friendly name for display.

For default evals, use standardized labels from DEFAULT_EVAL_ISSUE_TYPE_LABELS.
"""

eval_key: str
"""
Unique key for eval metric - currently maps to the TrustworthyRAG name property
Expand Down Expand Up @@ -351,6 +381,8 @@ class ProjectConfigEvalConfig(BaseModel):


class ProjectConfig(BaseModel):
ai_guidance_threshold: Optional[float] = None

clustering_use_llm_matching: Optional[bool] = None

eval_config: Optional[ProjectConfigEvalConfig] = None
Expand Down Expand Up @@ -384,6 +416,8 @@ class Project(BaseModel):

created_by_user_id: str

is_template: bool

name: str

organization_id: str
Expand Down
Loading