Skip to content
Open
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
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
lint:
timeout-minutes: 10
name: lint
runs-on: ${{ github.repository == 'stainless-sdks/scorecard-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
runs-on: ${{ startsWith(github.repository, 'stainless-sdks/') && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork) && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata')
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
Expand All @@ -41,7 +41,7 @@ jobs:
permissions:
contents: read
id-token: write
runs-on: ${{ github.repository == 'stainless-sdks/scorecard-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
runs-on: ${{ startsWith(github.repository, 'stainless-sdks/') && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

Expand Down Expand Up @@ -78,7 +78,7 @@ jobs:
test:
timeout-minutes: 10
name: test
runs-on: ${{ github.repository == 'stainless-sdks/scorecard-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
runs-on: ${{ startsWith(github.repository, 'stainless-sdks/') && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
Expand Down
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.8.0"
".": "3.9.0"
}
8 changes: 4 additions & 4 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 35
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/scorecard/scorecard-1ba77f87704707ae747bfd7ec95fdca5ea98bdab1c3c710353cb79eace286f78.yml
openapi_spec_hash: 7ce6bc5172f5678986b7c4d43ebd5b20
config_hash: 31cceec463f09f560813ae649da927ab
configured_endpoints: 43
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/scorecard/scorecard-7c659d8a67917fbf3a8dc42fa925b55c27fcdddc1e9b51a5f807457152e0a581.yml
openapi_spec_hash: b86fa1ce6fa993b561d492aeec411e73
config_hash: 5c97d607897cf4a982832a87d0cd12fb
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,22 @@
# Changelog

## 3.9.0 (2026-07-31)

Full Changelog: [v3.8.0...v3.9.0](https://github.com/scorecard-ai/scorecard-python/compare/v3.8.0...v3.9.0)

### Features

* **api:** api update ([f7092fc](https://github.com/scorecard-ai/scorecard-python/commit/f7092fc7c61beae93e76b3b8f3136e691470c66e))
* **api:** api update ([99eb116](https://github.com/scorecard-ai/scorecard-python/commit/99eb1167ba8c4c95666299e729334ae6ee478fb9))
* **api:** api update ([ca4c4b5](https://github.com/scorecard-ai/scorecard-python/commit/ca4c4b526792ccbb10a9bd9a897dbcbddfc4a022))
* **api:** api update ([b6d391b](https://github.com/scorecard-ai/scorecard-python/commit/b6d391be490a30e41617467dff18acfb3f337920))
* **stlc:** configurable CI runner and private-production-repo support in workflow templates ([d0bba7c](https://github.com/scorecard-ai/scorecard-python/commit/d0bba7c44fa0bae6ee4cb576687ffcdbb7f02c46))


### Bug Fixes

* **internal:** resolve build failures ([86b5a52](https://github.com/scorecard-ai/scorecard-python/commit/86b5a5275d4e302a022c86548dcfb043748a81f0))

## 3.8.0 (2026-07-03)

Full Changelog: [v3.7.0...v3.8.0](https://github.com/scorecard-ai/scorecard-python/compare/v3.7.0...v3.8.0)
Expand Down
39 changes: 39 additions & 0 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,24 @@ Methods:
- <code title="get /records/{recordId}/tags">client.records.tags.<a href="./src/scorecard_ai/resources/records/tags.py">list</a>(record_id) -> <a href="./src/scorecard_ai/types/records/tag_list_response.py">TagListResponse</a></code>
- <code title="delete /records/{recordId}/tags/{text}">client.records.tags.<a href="./src/scorecard_ai/resources/records/tags.py">delete</a>(text, \*, record_id) -> <a href="./src/scorecard_ai/types/records/tag_delete_response.py">TagDeleteResponse</a></code>

## Assignees

Types:

```python
from scorecard_ai.types.records import (
RecordAssignment,
AssigneeListResponse,
AssigneeDeleteResponse,
)
```

Methods:

- <code title="post /records/{recordId}/assignees">client.records.assignees.<a href="./src/scorecard_ai/resources/records/assignees.py">create</a>(record_id, \*\*<a href="src/scorecard_ai/types/records/assignee_create_params.py">params</a>) -> <a href="./src/scorecard_ai/types/records/record_assignment.py">RecordAssignment</a></code>
- <code title="get /records/{recordId}/assignees">client.records.assignees.<a href="./src/scorecard_ai/resources/records/assignees.py">list</a>(record_id) -> <a href="./src/scorecard_ai/types/records/assignee_list_response.py">AssigneeListResponse</a></code>
- <code title="delete /records/{recordId}/assignees/{assigneeUserId}">client.records.assignees.<a href="./src/scorecard_ai/resources/records/assignees.py">delete</a>(assignee_user_id, \*, record_id) -> <a href="./src/scorecard_ai/types/records/assignee_delete_response.py">AssigneeDeleteResponse</a></code>

# Scores

Types:
Expand All @@ -131,6 +149,27 @@ Methods:

- <code title="put /records/{recordId}/scores/{metricConfigId}">client.scores.<a href="./src/scorecard_ai/resources/scores.py">upsert</a>(metric_config_id, \*, record_id, \*\*<a href="src/scorecard_ai/types/score_upsert_params.py">params</a>) -> <a href="./src/scorecard_ai/types/score.py">Score</a></code>

# Attachments

Types:

```python
from scorecard_ai.types import (
Attachment,
AttachmentDeleteResponse,
AttachmentGetResponse,
AttachmentInitiateResponse,
)
```

Methods:

- <code title="get /sessions/{sessionId}/attachments">client.attachments.<a href="./src/scorecard_ai/resources/attachments.py">list</a>(session_id, \*\*<a href="src/scorecard_ai/types/attachment_list_params.py">params</a>) -> <a href="./src/scorecard_ai/types/attachment.py">SyncPaginatedResponse[Attachment]</a></code>
- <code title="delete /attachments/{attachmentId}">client.attachments.<a href="./src/scorecard_ai/resources/attachments.py">delete</a>(attachment_id) -> <a href="./src/scorecard_ai/types/attachment_delete_response.py">AttachmentDeleteResponse</a></code>
- <code title="post /attachments/{attachmentId}/commit">client.attachments.<a href="./src/scorecard_ai/resources/attachments.py">commit</a>(attachment_id) -> <a href="./src/scorecard_ai/types/attachment.py">Attachment</a></code>
- <code title="get /attachments/{attachmentId}">client.attachments.<a href="./src/scorecard_ai/resources/attachments.py">get</a>(attachment_id) -> <a href="./src/scorecard_ai/types/attachment_get_response.py">AttachmentGetResponse</a></code>
- <code title="post /attachments">client.attachments.<a href="./src/scorecard_ai/resources/attachments.py">initiate</a>(\*\*<a href="src/scorecard_ai/types/attachment_initiate_params.py">params</a>) -> <a href="./src/scorecard_ai/types/attachment_initiate_response.py">AttachmentInitiateResponse</a></code>

# Systems

Types:
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 = "scorecard-ai"
version = "3.8.0"
version = "3.9.0"
description = "The official Python library for the Scorecard API"
dynamic = ["readme"]
license = "Apache-2.0"
Expand Down
2 changes: 1 addition & 1 deletion scripts/lint
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ else
fi

echo "==> Running pyright"
uv run pyright
uv run pyright -p .

echo "==> Running mypy"
uv run mypy .
Expand Down
39 changes: 38 additions & 1 deletion src/scorecard_ai/_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,14 @@
)

if TYPE_CHECKING:
from .resources import runs, scores, metrics, records, systems, projects, testsets, testcases
from .resources import runs, scores, metrics, records, systems, projects, testsets, testcases, attachments
from .resources.runs import RunsResource, AsyncRunsResource
from .resources.scores import ScoresResource, AsyncScoresResource
from .resources.metrics import MetricsResource, AsyncMetricsResource
from .resources.projects import ProjectsResource, AsyncProjectsResource
from .resources.testsets import TestsetsResource, AsyncTestsetsResource
from .resources.testcases import TestcasesResource, AsyncTestcasesResource
from .resources.attachments import AttachmentsResource, AsyncAttachmentsResource
from .resources.records.records import RecordsResource, AsyncRecordsResource
from .resources.systems.systems import SystemsResource, AsyncSystemsResource

Expand Down Expand Up @@ -215,6 +216,12 @@ def scores(self) -> ScoresResource:

return ScoresResource(self)

@cached_property
def attachments(self) -> AttachmentsResource:
from .resources.attachments import AttachmentsResource

return AttachmentsResource(self)

@cached_property
def systems(self) -> SystemsResource:
from .resources.systems import SystemsResource
Expand Down Expand Up @@ -466,6 +473,12 @@ def scores(self) -> AsyncScoresResource:

return AsyncScoresResource(self)

@cached_property
def attachments(self) -> AsyncAttachmentsResource:
from .resources.attachments import AsyncAttachmentsResource

return AsyncAttachmentsResource(self)

@cached_property
def systems(self) -> AsyncSystemsResource:
from .resources.systems import AsyncSystemsResource
Expand Down Expand Up @@ -635,6 +648,12 @@ def scores(self) -> scores.ScoresResourceWithRawResponse:

return ScoresResourceWithRawResponse(self._client.scores)

@cached_property
def attachments(self) -> attachments.AttachmentsResourceWithRawResponse:
from .resources.attachments import AttachmentsResourceWithRawResponse

return AttachmentsResourceWithRawResponse(self._client.attachments)

@cached_property
def systems(self) -> systems.SystemsResourceWithRawResponse:
from .resources.systems import SystemsResourceWithRawResponse
Expand Down Expand Up @@ -690,6 +709,12 @@ def scores(self) -> scores.AsyncScoresResourceWithRawResponse:

return AsyncScoresResourceWithRawResponse(self._client.scores)

@cached_property
def attachments(self) -> attachments.AsyncAttachmentsResourceWithRawResponse:
from .resources.attachments import AsyncAttachmentsResourceWithRawResponse

return AsyncAttachmentsResourceWithRawResponse(self._client.attachments)

@cached_property
def systems(self) -> systems.AsyncSystemsResourceWithRawResponse:
from .resources.systems import AsyncSystemsResourceWithRawResponse
Expand Down Expand Up @@ -745,6 +770,12 @@ def scores(self) -> scores.ScoresResourceWithStreamingResponse:

return ScoresResourceWithStreamingResponse(self._client.scores)

@cached_property
def attachments(self) -> attachments.AttachmentsResourceWithStreamingResponse:
from .resources.attachments import AttachmentsResourceWithStreamingResponse

return AttachmentsResourceWithStreamingResponse(self._client.attachments)

@cached_property
def systems(self) -> systems.SystemsResourceWithStreamingResponse:
from .resources.systems import SystemsResourceWithStreamingResponse
Expand Down Expand Up @@ -800,6 +831,12 @@ def scores(self) -> scores.AsyncScoresResourceWithStreamingResponse:

return AsyncScoresResourceWithStreamingResponse(self._client.scores)

@cached_property
def attachments(self) -> attachments.AsyncAttachmentsResourceWithStreamingResponse:
from .resources.attachments import AsyncAttachmentsResourceWithStreamingResponse

return AsyncAttachmentsResourceWithStreamingResponse(self._client.attachments)

@cached_property
def systems(self) -> systems.AsyncSystemsResourceWithStreamingResponse:
from .resources.systems import AsyncSystemsResourceWithStreamingResponse
Expand Down
2 changes: 1 addition & 1 deletion src/scorecard_ai/_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__ = "scorecard_ai"
__version__ = "3.8.0" # x-release-please-version
__version__ = "3.9.0" # x-release-please-version
14 changes: 14 additions & 0 deletions src/scorecard_ai/resources/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,14 @@
TestcasesResourceWithStreamingResponse,
AsyncTestcasesResourceWithStreamingResponse,
)
from .attachments import (
AttachmentsResource,
AsyncAttachmentsResource,
AttachmentsResourceWithRawResponse,
AsyncAttachmentsResourceWithRawResponse,
AttachmentsResourceWithStreamingResponse,
AsyncAttachmentsResourceWithStreamingResponse,
)

__all__ = [
"ProjectsResource",
Expand Down Expand Up @@ -108,6 +116,12 @@
"AsyncScoresResourceWithRawResponse",
"ScoresResourceWithStreamingResponse",
"AsyncScoresResourceWithStreamingResponse",
"AttachmentsResource",
"AsyncAttachmentsResource",
"AttachmentsResourceWithRawResponse",
"AsyncAttachmentsResourceWithRawResponse",
"AttachmentsResourceWithStreamingResponse",
"AsyncAttachmentsResourceWithStreamingResponse",
"SystemsResource",
"AsyncSystemsResource",
"SystemsResourceWithRawResponse",
Expand Down
Loading
Loading