From f11154431fb18b9d1ff792ec4fa6d6d872a0b786 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Mon, 13 Jul 2026 17:17:25 +0000
Subject: [PATCH 01/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index edf51b3c..3ecab509 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-17587551addb077f3da29dd969fcd5f57c7272b4d3d3b1707dca00b1d04b7ee8.yml
-openapi_spec_hash: 261e4f33ccaac115058a54ffc28ad9f6
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-388f755216226ef788347fb6a3a9ee8636e3305495ccc4fee21f2d1a5273f177.yml
+openapi_spec_hash: 1fcfc982fa4336fb7c3c13100a58dea4
config_hash: 48130b77367435ca80edf565b73c49f9
From a3e6d1f6665d12629d8c16e90bcc946b18b089bb Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Mon, 13 Jul 2026 18:45:41 +0000
Subject: [PATCH 02/48] fix(internal): resolve build failures
---
scripts/lint | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/scripts/lint b/scripts/lint
index ade6bb5b..02defcf3 100755
--- a/scripts/lint
+++ b/scripts/lint
@@ -13,7 +13,7 @@ else
fi
echo "==> Running pyright"
-uv run pyright
+uv run pyright -p .
echo "==> Running mypy"
uv run mypy .
From 0ecaea31a698735d137f494352a8682a794f90de Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Mon, 13 Jul 2026 21:17:37 +0000
Subject: [PATCH 03/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 3ecab509..37498ecc 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-388f755216226ef788347fb6a3a9ee8636e3305495ccc4fee21f2d1a5273f177.yml
-openapi_spec_hash: 1fcfc982fa4336fb7c3c13100a58dea4
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-d4b4571c634ebdda12ec7dd7bf38054f5ad8129ea57cb5b150b8f490a893bfe9.yml
+openapi_spec_hash: 3a58f8d83133bb188548cac5c14ee5ee
config_hash: 48130b77367435ca80edf565b73c49f9
From ddbc4a3749b1e401c2df53a21ebb2269dbc77e04 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Mon, 13 Jul 2026 22:17:30 +0000
Subject: [PATCH 04/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 37498ecc..036c9f67 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-d4b4571c634ebdda12ec7dd7bf38054f5ad8129ea57cb5b150b8f490a893bfe9.yml
-openapi_spec_hash: 3a58f8d83133bb188548cac5c14ee5ee
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-fefec8f845f070d2002797f0d55e53f06d4b03b1532b5bb6b9bc116297564c7e.yml
+openapi_spec_hash: 8336fa93a223fa806c07aadfc7298755
config_hash: 48130b77367435ca80edf565b73c49f9
From 477d860edf3695c3d033f707e540a597a9decaf2 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Tue, 14 Jul 2026 15:17:37 +0000
Subject: [PATCH 05/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 036c9f67..ed211416 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-fefec8f845f070d2002797f0d55e53f06d4b03b1532b5bb6b9bc116297564c7e.yml
-openapi_spec_hash: 8336fa93a223fa806c07aadfc7298755
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-38dbf29fbea51024bf3273a6e26343a62e1a7121ea0e0be114addc5dc51eea02.yml
+openapi_spec_hash: 78d74494f114f047c1b21fa82e5fe6b8
config_hash: 48130b77367435ca80edf565b73c49f9
From cb2f3762464c944099fcf4e3f48bf50130703a4e Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Tue, 14 Jul 2026 16:17:36 +0000
Subject: [PATCH 06/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index ed211416..39484b07 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-38dbf29fbea51024bf3273a6e26343a62e1a7121ea0e0be114addc5dc51eea02.yml
-openapi_spec_hash: 78d74494f114f047c1b21fa82e5fe6b8
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-a9d92d15f222511796e8948b394adaf97c510bd6a43d447133dd031d108abf80.yml
+openapi_spec_hash: 125dbf0035478caa44772e8a09dc0b09
config_hash: 48130b77367435ca80edf565b73c49f9
From 8688fd38a33f6cb173afe3d2afed6f40203f02bd Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Tue, 14 Jul 2026 17:17:37 +0000
Subject: [PATCH 07/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 39484b07..c0175f18 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-a9d92d15f222511796e8948b394adaf97c510bd6a43d447133dd031d108abf80.yml
-openapi_spec_hash: 125dbf0035478caa44772e8a09dc0b09
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-73bb8c46c4e6e15eae24fbbcc3f200c7061adf942061154dce1e3a75b70ec312.yml
+openapi_spec_hash: d1da0b8a2a2f2daea68c008c48bda7da
config_hash: 48130b77367435ca80edf565b73c49f9
From bedb0380d42036914f5b548f24d3e056a7672f19 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Tue, 14 Jul 2026 18:17:31 +0000
Subject: [PATCH 08/48] feat(api): api update
---
.stats.yml | 4 ++--
src/profound/resources/reports/shopping.py | 2 ++
src/profound/types/reports/shopping_item_visibility_params.py | 1 +
3 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index c0175f18..db4bd177 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-73bb8c46c4e6e15eae24fbbcc3f200c7061adf942061154dce1e3a75b70ec312.yml
-openapi_spec_hash: d1da0b8a2a2f2daea68c008c48bda7da
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-0fb35cadd8b8da8e5c16bdf363279948c3de0a9f523667b014a5ee6bd0461f91.yml
+openapi_spec_hash: 5a6c739207ec34516f7898745436fbd9
config_hash: 48130b77367435ca80edf565b73c49f9
diff --git a/src/profound/resources/reports/shopping.py b/src/profound/resources/reports/shopping.py
index fcb60e87..60b4371c 100644
--- a/src/profound/resources/reports/shopping.py
+++ b/src/profound/resources/reports/shopping.py
@@ -260,6 +260,7 @@ def item_visibility(
dimensions: List[
Literal[
"period",
+ "product_key",
"product_name",
"brand_name",
"date",
@@ -1129,6 +1130,7 @@ async def item_visibility(
dimensions: List[
Literal[
"period",
+ "product_key",
"product_name",
"brand_name",
"date",
diff --git a/src/profound/types/reports/shopping_item_visibility_params.py b/src/profound/types/reports/shopping_item_visibility_params.py
index d1fecef8..85a19c6a 100644
--- a/src/profound/types/reports/shopping_item_visibility_params.py
+++ b/src/profound/types/reports/shopping_item_visibility_params.py
@@ -42,6 +42,7 @@ class ShoppingItemVisibilityParams(TypedDict, total=False):
dimensions: List[
Literal[
"period",
+ "product_key",
"product_name",
"brand_name",
"date",
From 42ce611bdf4cc9e34489a05d2363bdf9d92a749c Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Tue, 14 Jul 2026 22:17:36 +0000
Subject: [PATCH 09/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index db4bd177..c8eac4c0 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-0fb35cadd8b8da8e5c16bdf363279948c3de0a9f523667b014a5ee6bd0461f91.yml
-openapi_spec_hash: 5a6c739207ec34516f7898745436fbd9
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-732a8e32462a734c87a048d4a9c89fb143f682cf14954c6bc630b498cbc03e2a.yml
+openapi_spec_hash: 6a6b5b86761a9d35f60869e5b1e8c090
config_hash: 48130b77367435ca80edf565b73c49f9
From 7aa69a6761298ead98c4092ce427303f0343b626 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 16 Jul 2026 00:17:37 +0000
Subject: [PATCH 10/48] feat(api): api update
---
.stats.yml | 4 ++--
src/profound/types/category.py | 4 ++++
src/profound/types/organizations/category_list_response.py | 4 +++-
3 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index c8eac4c0..ccdfa276 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-732a8e32462a734c87a048d4a9c89fb143f682cf14954c6bc630b498cbc03e2a.yml
-openapi_spec_hash: 6a6b5b86761a9d35f60869e5b1e8c090
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-9a74271899973e327a9ff6b26628e5a92a83c9c28fbc0aa5531c33a85cf0745d.yml
+openapi_spec_hash: 6538d7a363042b3d7f329de0a7a37b66
config_hash: 48130b77367435ca80edf565b73c49f9
diff --git a/src/profound/types/category.py b/src/profound/types/category.py
index a2d7566c..becc978e 100644
--- a/src/profound/types/category.py
+++ b/src/profound/types/category.py
@@ -1,5 +1,7 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+from typing import Optional
+
from .._models import BaseModel
__all__ = ["Category"]
@@ -9,3 +11,5 @@ class Category(BaseModel):
id: str
name: str
+
+ internal_name: Optional[str] = None
diff --git a/src/profound/types/organizations/category_list_response.py b/src/profound/types/organizations/category_list_response.py
index 3135cff2..61ed8ac0 100644
--- a/src/profound/types/organizations/category_list_response.py
+++ b/src/profound/types/organizations/category_list_response.py
@@ -1,6 +1,6 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-from typing import List
+from typing import List, Optional
from typing_extensions import TypeAlias
from ..._models import BaseModel
@@ -18,5 +18,7 @@ class CategoryListResponseItem(BaseModel):
organization: Organization
+ internal_name: Optional[str] = None
+
CategoryListResponse: TypeAlias = List[CategoryListResponseItem]
From e861191900e1dadf944408baf1cdf3cc8346e774 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 16 Jul 2026 14:17:32 +0000
Subject: [PATCH 11/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index ccdfa276..a710890d 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-9a74271899973e327a9ff6b26628e5a92a83c9c28fbc0aa5531c33a85cf0745d.yml
-openapi_spec_hash: 6538d7a363042b3d7f329de0a7a37b66
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-3964966d934cdab3fc97529c8025eabe4f421613e72a49a5c560ebe021b32727.yml
+openapi_spec_hash: 7b9f81e8814fc9c5995290fd27e1a2e8
config_hash: 48130b77367435ca80edf565b73c49f9
From 3dcc6f823003c5439629b90e41a429a213bdbd75 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 16 Jul 2026 15:17:41 +0000
Subject: [PATCH 12/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index a710890d..d7df6f40 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-3964966d934cdab3fc97529c8025eabe4f421613e72a49a5c560ebe021b32727.yml
-openapi_spec_hash: 7b9f81e8814fc9c5995290fd27e1a2e8
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-f23918bffb9a51b00b62ffbd2b74f6f734e6f420db072c33f2543d89ae2c2161.yml
+openapi_spec_hash: a531ff3ea5027ef7e2403450eb4cc230
config_hash: 48130b77367435ca80edf565b73c49f9
From 02477bf17e69c20b0132cfafe82e54949e0fe960 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 17 Jul 2026 17:24:06 +0000
Subject: [PATCH 13/48] feat(stlc): configurable CI runner and
private-production-repo support in workflow templates
---
.github/workflows/ci.yml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 1b4ca550..22936c21 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -18,7 +18,7 @@ jobs:
lint:
timeout-minutes: 10
name: lint
- runs-on: ${{ github.repository == 'stainless-sdks/profound-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
@@ -41,7 +41,7 @@ jobs:
permissions:
contents: read
id-token: write
- runs-on: ${{ github.repository == 'stainless-sdks/profound-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
@@ -78,7 +78,7 @@ jobs:
test:
timeout-minutes: 10
name: test
- runs-on: ${{ github.repository == 'stainless-sdks/profound-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
From 182627628ae5d3931dd22bcca6dc1dfe8785d4be Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 17 Jul 2026 18:07:57 +0000
Subject: [PATCH 14/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index d7df6f40..77166699 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-f23918bffb9a51b00b62ffbd2b74f6f734e6f420db072c33f2543d89ae2c2161.yml
-openapi_spec_hash: a531ff3ea5027ef7e2403450eb4cc230
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-543e70e084081fa707c2c5dc6056640acab3bfa955d82c786b8e1f4d59d6342a.yml
+openapi_spec_hash: 4bd95c3dd3648c0ecc64fbd990edd82a
config_hash: 48130b77367435ca80edf565b73c49f9
From 0e2fc3e06226ae103c9acc86eae54cc1377f06d6 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 17 Jul 2026 18:17:23 +0000
Subject: [PATCH 15/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 77166699..d7df6f40 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-543e70e084081fa707c2c5dc6056640acab3bfa955d82c786b8e1f4d59d6342a.yml
-openapi_spec_hash: 4bd95c3dd3648c0ecc64fbd990edd82a
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-f23918bffb9a51b00b62ffbd2b74f6f734e6f420db072c33f2543d89ae2c2161.yml
+openapi_spec_hash: a531ff3ea5027ef7e2403450eb4cc230
config_hash: 48130b77367435ca80edf565b73c49f9
From dcd95d9e47d35660760d6590073613d4ef0fc510 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 17 Jul 2026 21:31:21 +0000
Subject: [PATCH 16/48] feat(api): api update
---
.stats.yml | 4 ++--
src/profound/resources/agents/node_types.py | 4 ++--
src/profound/resources/prompts.py | 8 ++++----
.../agents/node_type_retrieve_schema_response.py | 13 ++++++-------
src/profound/types/prompt_answers_v2_params.py | 2 +-
.../types/prompt_stream_answers_v2_params.py | 2 +-
6 files changed, 16 insertions(+), 17 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index d7df6f40..ffafca55 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-f23918bffb9a51b00b62ffbd2b74f6f734e6f420db072c33f2543d89ae2c2161.yml
-openapi_spec_hash: a531ff3ea5027ef7e2403450eb4cc230
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-cbce28c5c12d46a5599d2a6e3e6d5db14dc29df0bbb30d7adc44bf2725e0ade7.yml
+openapi_spec_hash: 3191c472b21656491ecf1763f16765dc
config_hash: 48130b77367435ca80edf565b73c49f9
diff --git a/src/profound/resources/agents/node_types.py b/src/profound/resources/agents/node_types.py
index 38ea3f14..5ed9a877 100644
--- a/src/profound/resources/agents/node_types.py
+++ b/src/profound/resources/agents/node_types.py
@@ -78,7 +78,7 @@ def retrieve_schema(
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> NodeTypeRetrieveSchemaResponse:
"""
- Retrieve the JSON schema and worked examples for a single node type.
+ Retrieve the JSON schema for a single node type.
The `schema` field is an opaque JSON Schema for the node's configuration. Use
`schema_version` as a cache key — it bumps whenever the schema changes.
@@ -162,7 +162,7 @@ async def retrieve_schema(
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> NodeTypeRetrieveSchemaResponse:
"""
- Retrieve the JSON schema and worked examples for a single node type.
+ Retrieve the JSON schema for a single node type.
The `schema` field is an opaque JSON Schema for the node's configuration. Use
`schema_version` as a cache key — it bumps whenever the schema changes.
diff --git a/src/profound/resources/prompts.py b/src/profound/resources/prompts.py
index 79fc3db1..ecd639a6 100644
--- a/src/profound/resources/prompts.py
+++ b/src/profound/resources/prompts.py
@@ -153,7 +153,7 @@ def answers_v2(
`citations`, `search_queries`, `analysis_types`, `sentiment_claims`. Omit for
all of them.
- limit: Page size; default 10, max 50.
+ limit: Page size; default 10, max 200.
max_results: Stream endpoint only: cap the number of streamed rows (default: all).
@@ -241,7 +241,7 @@ def stream_answers_v2(
`citations`, `search_queries`, `analysis_types`, `sentiment_claims`. Omit for
all of them.
- limit: Page size; default 10, max 50.
+ limit: Page size; default 10, max 200.
max_results: Stream endpoint only: cap the number of streamed rows (default: all).
@@ -402,7 +402,7 @@ async def answers_v2(
`citations`, `search_queries`, `analysis_types`, `sentiment_claims`. Omit for
all of them.
- limit: Page size; default 10, max 50.
+ limit: Page size; default 10, max 200.
max_results: Stream endpoint only: cap the number of streamed rows (default: all).
@@ -490,7 +490,7 @@ async def stream_answers_v2(
`citations`, `search_queries`, `analysis_types`, `sentiment_claims`. Omit for
all of them.
- limit: Page size; default 10, max 50.
+ limit: Page size; default 10, max 200.
max_results: Stream endpoint only: cap the number of streamed rows (default: all).
diff --git a/src/profound/types/agents/node_type_retrieve_schema_response.py b/src/profound/types/agents/node_type_retrieve_schema_response.py
index 9d9ad1ae..cc85b6d9 100644
--- a/src/profound/types/agents/node_type_retrieve_schema_response.py
+++ b/src/profound/types/agents/node_type_retrieve_schema_response.py
@@ -10,7 +10,7 @@
class NodeTypeRetrieveSchemaResponse(BaseModel):
- """JSON schema and worked examples for a single node type."""
+ """JSON schema for a single node type."""
node_type: str
"""Stable identifier for the node type, e.g. `llm`."""
@@ -53,10 +53,9 @@ class NodeTypeRetrieveSchemaResponse(BaseModel):
examples: Optional[List[Dict[str, object]]] = None
"""Worked example configurations for the node type, in the canonical graph dialect.
- These are curated guidance maintained by external-api, versioned by
- `docs_version` (NOT `schema_version`): they illustrate a valid shape at curation
- time but are a starting point, not the contract — they may lag the validator.
- The authoritative contract is `schema`, and the only authoritative check that a
- graph is valid is publishing it (or the agent-validation endpoint). Do not parse
- `examples` as the schema.
+ Curated authoring guidance, versioned by `docs_version` (NOT `schema_version`):
+ they illustrate a valid shape at curation time but are a starting point, not the
+ contract — they may lag the validator. The authoritative contract is `schema`,
+ and the only authoritative check that a graph is valid is publishing it (or the
+ agent-validation endpoint). Do not parse `examples` as the schema.
"""
diff --git a/src/profound/types/prompt_answers_v2_params.py b/src/profound/types/prompt_answers_v2_params.py
index 92005401..4700da28 100644
--- a/src/profound/types/prompt_answers_v2_params.py
+++ b/src/profound/types/prompt_answers_v2_params.py
@@ -52,7 +52,7 @@ class PromptAnswersV2Params(TypedDict, total=False):
"""
limit: Optional[int]
- """Page size; default 10, max 50."""
+ """Page size; default 10, max 200."""
max_results: Optional[int]
"""Stream endpoint only: cap the number of streamed rows (default: all)."""
diff --git a/src/profound/types/prompt_stream_answers_v2_params.py b/src/profound/types/prompt_stream_answers_v2_params.py
index fd810415..10a7a2cb 100644
--- a/src/profound/types/prompt_stream_answers_v2_params.py
+++ b/src/profound/types/prompt_stream_answers_v2_params.py
@@ -52,7 +52,7 @@ class PromptStreamAnswersV2Params(TypedDict, total=False):
"""
limit: Optional[int]
- """Page size; default 10, max 50."""
+ """Page size; default 10, max 200."""
max_results: Optional[int]
"""Stream endpoint only: cap the number of streamed rows (default: all)."""
From 00b843b7da3bb33c1ab120758fb41056101b646d Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 17 Jul 2026 22:17:33 +0000
Subject: [PATCH 17/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index ffafca55..8aea652e 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-cbce28c5c12d46a5599d2a6e3e6d5db14dc29df0bbb30d7adc44bf2725e0ade7.yml
-openapi_spec_hash: 3191c472b21656491ecf1763f16765dc
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-10146f6dedeaad420b3a95e27fa65854ffe9d4bb7e55821067a6fa06ace074c6.yml
+openapi_spec_hash: 1bc07108964eebece7147441d6b2b2c1
config_hash: 48130b77367435ca80edf565b73c49f9
From b7fad704abe6821f6640c152812b5746fc565c80 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Mon, 20 Jul 2026 19:44:43 +0000
Subject: [PATCH 18/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 8aea652e..ffafca55 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-10146f6dedeaad420b3a95e27fa65854ffe9d4bb7e55821067a6fa06ace074c6.yml
-openapi_spec_hash: 1bc07108964eebece7147441d6b2b2c1
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-cbce28c5c12d46a5599d2a6e3e6d5db14dc29df0bbb30d7adc44bf2725e0ade7.yml
+openapi_spec_hash: 3191c472b21656491ecf1763f16765dc
config_hash: 48130b77367435ca80edf565b73c49f9
From 6ec912685f3327c631c70cbc006d58fec88cea38 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Mon, 20 Jul 2026 20:17:25 +0000
Subject: [PATCH 19/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index ffafca55..8aea652e 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-cbce28c5c12d46a5599d2a6e3e6d5db14dc29df0bbb30d7adc44bf2725e0ade7.yml
-openapi_spec_hash: 3191c472b21656491ecf1763f16765dc
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-10146f6dedeaad420b3a95e27fa65854ffe9d4bb7e55821067a6fa06ace074c6.yml
+openapi_spec_hash: 1bc07108964eebece7147441d6b2b2c1
config_hash: 48130b77367435ca80edf565b73c49f9
From 641081e222e99a24287f76aca3888d4752b4a07a Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Mon, 20 Jul 2026 22:09:11 +0000
Subject: [PATCH 20/48] feat(api): api update
---
.stats.yml | 4 ++--
tests/api_resources/test_reports.py | 32 ++++++++++++++---------------
2 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 8aea652e..a81892c0 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-10146f6dedeaad420b3a95e27fa65854ffe9d4bb7e55821067a6fa06ace074c6.yml
-openapi_spec_hash: 1bc07108964eebece7147441d6b2b2c1
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-fb09edb5b8d00049735d32e76dce6d4eb7f3f1dd4cc5d1a4f84f7d8723416b68.yml
+openapi_spec_hash: 499332ffbc5348f13191f859c678e63c
config_hash: 48130b77367435ca80edf565b73c49f9
diff --git a/tests/api_resources/test_reports.py b/tests/api_resources/test_reports.py
index 222ee0f5..3aa66f6f 100644
--- a/tests/api_resources/test_reports.py
+++ b/tests/api_resources/test_reports.py
@@ -663,7 +663,7 @@ def test_streaming_response_query_sentiment(self, client: Profound) -> None:
@parametrize
def test_method_query_visibility(self, client: Profound) -> None:
report = client.reports.query_visibility(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
@@ -673,7 +673,7 @@ def test_method_query_visibility(self, client: Profound) -> None:
@parametrize
def test_method_query_visibility_with_all_params(self, client: Profound) -> None:
report = client.reports.query_visibility(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
assets="string",
@@ -699,7 +699,7 @@ def test_method_query_visibility_with_all_params(self, client: Profound) -> None
@parametrize
def test_raw_response_query_visibility(self, client: Profound) -> None:
response = client.reports.with_raw_response.query_visibility(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
@@ -713,7 +713,7 @@ def test_raw_response_query_visibility(self, client: Profound) -> None:
@parametrize
def test_streaming_response_query_visibility(self, client: Profound) -> None:
with client.reports.with_streaming_response.query_visibility(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
) as response:
@@ -1277,7 +1277,7 @@ def test_streaming_response_stream_visibility(self, client: Profound) -> None:
@parametrize
def test_method_stream_visibility_v2(self, client: Profound) -> None:
report = client.reports.stream_visibility_v2(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
@@ -1287,7 +1287,7 @@ def test_method_stream_visibility_v2(self, client: Profound) -> None:
@parametrize
def test_method_stream_visibility_v2_with_all_params(self, client: Profound) -> None:
report = client.reports.stream_visibility_v2(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
assets="string",
@@ -1313,7 +1313,7 @@ def test_method_stream_visibility_v2_with_all_params(self, client: Profound) ->
@parametrize
def test_raw_response_stream_visibility_v2(self, client: Profound) -> None:
response = client.reports.with_raw_response.stream_visibility_v2(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
@@ -1327,7 +1327,7 @@ def test_raw_response_stream_visibility_v2(self, client: Profound) -> None:
@parametrize
def test_streaming_response_stream_visibility_v2(self, client: Profound) -> None:
with client.reports.with_streaming_response.stream_visibility_v2(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
) as response:
@@ -2050,7 +2050,7 @@ async def test_streaming_response_query_sentiment(self, async_client: AsyncProfo
@parametrize
async def test_method_query_visibility(self, async_client: AsyncProfound) -> None:
report = await async_client.reports.query_visibility(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
@@ -2060,7 +2060,7 @@ async def test_method_query_visibility(self, async_client: AsyncProfound) -> Non
@parametrize
async def test_method_query_visibility_with_all_params(self, async_client: AsyncProfound) -> None:
report = await async_client.reports.query_visibility(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
assets="string",
@@ -2086,7 +2086,7 @@ async def test_method_query_visibility_with_all_params(self, async_client: Async
@parametrize
async def test_raw_response_query_visibility(self, async_client: AsyncProfound) -> None:
response = await async_client.reports.with_raw_response.query_visibility(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
@@ -2100,7 +2100,7 @@ async def test_raw_response_query_visibility(self, async_client: AsyncProfound)
@parametrize
async def test_streaming_response_query_visibility(self, async_client: AsyncProfound) -> None:
async with async_client.reports.with_streaming_response.query_visibility(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
) as response:
@@ -2664,7 +2664,7 @@ async def test_streaming_response_stream_visibility(self, async_client: AsyncPro
@parametrize
async def test_method_stream_visibility_v2(self, async_client: AsyncProfound) -> None:
report = await async_client.reports.stream_visibility_v2(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
@@ -2674,7 +2674,7 @@ async def test_method_stream_visibility_v2(self, async_client: AsyncProfound) ->
@parametrize
async def test_method_stream_visibility_v2_with_all_params(self, async_client: AsyncProfound) -> None:
report = await async_client.reports.stream_visibility_v2(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
assets="string",
@@ -2700,7 +2700,7 @@ async def test_method_stream_visibility_v2_with_all_params(self, async_client: A
@parametrize
async def test_raw_response_stream_visibility_v2(self, async_client: AsyncProfound) -> None:
response = await async_client.reports.with_raw_response.stream_visibility_v2(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
@@ -2714,7 +2714,7 @@ async def test_raw_response_stream_visibility_v2(self, async_client: AsyncProfou
@parametrize
async def test_streaming_response_stream_visibility_v2(self, async_client: AsyncProfound) -> None:
async with async_client.reports.with_streaming_response.stream_visibility_v2(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
) as response:
From 98f0beacbe8ca034a48bb57ec53921012a183279 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Mon, 20 Jul 2026 22:17:44 +0000
Subject: [PATCH 21/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index a81892c0..945bfb71 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-fb09edb5b8d00049735d32e76dce6d4eb7f3f1dd4cc5d1a4f84f7d8723416b68.yml
-openapi_spec_hash: 499332ffbc5348f13191f859c678e63c
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-c1f33def48fec98225e139dab788e9cd1914ca20cf3ba0f2fd0b6b09e4c6b9e2.yml
+openapi_spec_hash: df025d4cdf6ce14833f0503de4b6233a
config_hash: 48130b77367435ca80edf565b73c49f9
From ee476f40439fd739ac8b3e97b028e55b98135a5d Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Tue, 21 Jul 2026 14:17:27 +0000
Subject: [PATCH 22/48] feat(api): api update
---
.stats.yml | 4 ++--
src/profound/resources/reports/reports.py | 18 +++++++++++++++---
.../types/report_get_bots_report_v2_params.py | 8 +++++++-
tests/api_resources/test_reports.py | 4 ++++
4 files changed, 28 insertions(+), 6 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 945bfb71..30abf9bb 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-c1f33def48fec98225e139dab788e9cd1914ca20cf3ba0f2fd0b6b09e4c6b9e2.yml
-openapi_spec_hash: df025d4cdf6ce14833f0503de4b6233a
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-dc025067047713ed3eef920a0ddbbfcf1945a969f49347e3387d8199081958aa.yml
+openapi_spec_hash: 92a6c574a05d3c516eef32f257cc8233
config_hash: 48130b77367435ca80edf565b73c49f9
diff --git a/src/profound/resources/reports/reports.py b/src/profound/resources/reports/reports.py
index 685c9a37..24d5716b 100644
--- a/src/profound/resources/reports/reports.py
+++ b/src/profound/resources/reports/reports.py
@@ -30,7 +30,7 @@
report_stream_visibility_v2_params,
report_get_referrals_report_v2_params,
)
-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 maybe_transform, async_maybe_transform
from .accuracy import (
AccuracyResource,
@@ -323,16 +323,18 @@ def get_bots_report_v2(
self,
*,
domain: str,
- metrics: List[Literal["count", "citations", "indexing", "training", "last_visit"]],
+ metrics: List[Literal["count", "citations", "indexing", "training", "last_visit", "agents"]],
start_date: Union[str, datetime],
date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit,
dimensions: List[Literal["date", "hour", "path", "bot_name", "bot_provider", "bot_type"]] | Omit = omit,
+ domain_id: Optional[str] | Omit = omit,
end_date: Union[str, datetime] | Omit = omit,
filters: Iterable[report_get_bots_report_v2_params.Filter] | Omit = omit,
metric_filters: Iterable[report_get_bots_report_v2_params.MetricFilter] | Omit = omit,
order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit,
organization_id: Optional[str] | Omit = omit,
pagination: Pagination | Omit = omit,
+ tags: SequenceNotStr[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,
@@ -368,6 +370,8 @@ def get_bots_report_v2(
dimensions: Dimensions to group the report by.
+ domain_id: Domain UUID used for tag lookups.
+
end_date: End date in UTC. Accepts same formats as start_date. Defaults to now UTC if
omitted.
@@ -405,12 +409,14 @@ def get_bots_report_v2(
"start_date": start_date,
"date_interval": date_interval,
"dimensions": dimensions,
+ "domain_id": domain_id,
"end_date": end_date,
"filters": filters,
"metric_filters": metric_filters,
"order_by": order_by,
"organization_id": organization_id,
"pagination": pagination,
+ "tags": tags,
},
report_get_bots_report_v2_params.ReportGetBotsReportV2Params,
),
@@ -2087,16 +2093,18 @@ async def get_bots_report_v2(
self,
*,
domain: str,
- metrics: List[Literal["count", "citations", "indexing", "training", "last_visit"]],
+ metrics: List[Literal["count", "citations", "indexing", "training", "last_visit", "agents"]],
start_date: Union[str, datetime],
date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit,
dimensions: List[Literal["date", "hour", "path", "bot_name", "bot_provider", "bot_type"]] | Omit = omit,
+ domain_id: Optional[str] | Omit = omit,
end_date: Union[str, datetime] | Omit = omit,
filters: Iterable[report_get_bots_report_v2_params.Filter] | Omit = omit,
metric_filters: Iterable[report_get_bots_report_v2_params.MetricFilter] | Omit = omit,
order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit,
organization_id: Optional[str] | Omit = omit,
pagination: Pagination | Omit = omit,
+ tags: SequenceNotStr[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,
@@ -2132,6 +2140,8 @@ async def get_bots_report_v2(
dimensions: Dimensions to group the report by.
+ domain_id: Domain UUID used for tag lookups.
+
end_date: End date in UTC. Accepts same formats as start_date. Defaults to now UTC if
omitted.
@@ -2169,12 +2179,14 @@ async def get_bots_report_v2(
"start_date": start_date,
"date_interval": date_interval,
"dimensions": dimensions,
+ "domain_id": domain_id,
"end_date": end_date,
"filters": filters,
"metric_filters": metric_filters,
"order_by": order_by,
"organization_id": organization_id,
"pagination": pagination,
+ "tags": tags,
},
report_get_bots_report_v2_params.ReportGetBotsReportV2Params,
),
diff --git a/src/profound/types/report_get_bots_report_v2_params.py b/src/profound/types/report_get_bots_report_v2_params.py
index 4279dbd6..ae7e3870 100644
--- a/src/profound/types/report_get_bots_report_v2_params.py
+++ b/src/profound/types/report_get_bots_report_v2_params.py
@@ -6,6 +6,7 @@
from datetime import datetime
from typing_extensions import Literal, Required, Annotated, TypeAlias, TypedDict
+from .._types import SequenceNotStr
from .._utils import PropertyInfo
from .shared_params.pagination import Pagination
from .shared_params.path_filter import PathFilter
@@ -19,7 +20,7 @@ class ReportGetBotsReportV2Params(TypedDict, total=False):
domain: Required[str]
"""Domain to query logs for."""
- metrics: Required[List[Literal["count", "citations", "indexing", "training", "last_visit"]]]
+ metrics: Required[List[Literal["count", "citations", "indexing", "training", "last_visit", "agents"]]]
start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]]
"""Start date for logs.
@@ -34,6 +35,9 @@ class ReportGetBotsReportV2Params(TypedDict, total=False):
dimensions: List[Literal["date", "hour", "path", "bot_name", "bot_provider", "bot_type"]]
"""Dimensions to group the report by."""
+ domain_id: Optional[str]
+ """Domain UUID used for tag lookups."""
+
end_date: Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]
"""End date in UTC.
@@ -64,6 +68,8 @@ class ReportGetBotsReportV2Params(TypedDict, total=False):
pagination: Pagination
"""Pagination settings for the report results."""
+ tags: SequenceNotStr[str]
+
class FilterBotTypeFilter(TypedDict, total=False):
"""Filter by bot_type column (v2 hourly table only)"""
diff --git a/tests/api_resources/test_reports.py b/tests/api_resources/test_reports.py
index 3aa66f6f..760328d1 100644
--- a/tests/api_resources/test_reports.py
+++ b/tests/api_resources/test_reports.py
@@ -186,6 +186,7 @@ def test_method_get_bots_report_v2_with_all_params(self, client: Profound) -> No
start_date=parse_datetime("2019-12-27T18:11:19.117Z"),
date_interval="hour",
dimensions=["date"],
+ domain_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date=parse_datetime("2019-12-27T18:11:19.117Z"),
filters=[
{
@@ -207,6 +208,7 @@ def test_method_get_bots_report_v2_with_all_params(self, client: Profound) -> No
"limit": 1,
"offset": 0,
},
+ tags=["string"],
)
assert_matches_type(ReportResponse, report, path=["response"])
@@ -1573,6 +1575,7 @@ async def test_method_get_bots_report_v2_with_all_params(self, async_client: Asy
start_date=parse_datetime("2019-12-27T18:11:19.117Z"),
date_interval="hour",
dimensions=["date"],
+ domain_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date=parse_datetime("2019-12-27T18:11:19.117Z"),
filters=[
{
@@ -1594,6 +1597,7 @@ async def test_method_get_bots_report_v2_with_all_params(self, async_client: Asy
"limit": 1,
"offset": 0,
},
+ tags=["string"],
)
assert_matches_type(ReportResponse, report, path=["response"])
From 949c8c4aecea50ff7fdf56dc3b3ab74a032aa2bb Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Tue, 21 Jul 2026 21:11:06 +0000
Subject: [PATCH 23/48] feat(api): api update
---
.stats.yml | 4 +-
api.md | 2 +-
src/profound/resources/agents/runs.py | 20 ++++++--
src/profound/resources/reports/reports.py | 48 +++++++++++++++----
src/profound/types/agents/__init__.py | 1 +
.../types/agents/run_retrieve_params.py | 15 ++++++
.../types/agents/run_retrieve_response.py | 46 +++++++++++++++++-
.../types/report_query_citations_params.py | 15 ++++--
.../report_stream_citations_v2_params.py | 15 ++++--
tests/api_resources/agents/test_runs.py | 20 ++++++++
tests/api_resources/test_reports.py | 4 ++
11 files changed, 168 insertions(+), 22 deletions(-)
create mode 100644 src/profound/types/agents/run_retrieve_params.py
diff --git a/.stats.yml b/.stats.yml
index 30abf9bb..9bd56d95 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-dc025067047713ed3eef920a0ddbbfcf1945a969f49347e3387d8199081958aa.yml
-openapi_spec_hash: 92a6c574a05d3c516eef32f257cc8233
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-f52fb1473a2cf2edc57af10caf0902c839b1d0f38ce6214b3c6ac24343ff4015.yml
+openapi_spec_hash: f546ab89ceef1f4a4afacfe985608524
config_hash: 48130b77367435ca80edf565b73c49f9
diff --git a/api.md b/api.md
index 9a452da9..7d86c1cf 100644
--- a/api.md
+++ b/api.md
@@ -312,7 +312,7 @@ from profound.types.agents import RunCreateResponse, RunRetrieveResponse
Methods:
- client.agents.runs.create(agent_id, \*\*params) -> RunCreateResponse
-- client.agents.runs.retrieve(run_id, \*, agent_id) -> RunRetrieveResponse
+- client.agents.runs.retrieve(run_id, \*, agent_id, \*\*params) -> RunRetrieveResponse
## NodeTypes
diff --git a/src/profound/resources/agents/runs.py b/src/profound/resources/agents/runs.py
index e53bc057..f50ca1b1 100644
--- a/src/profound/resources/agents/runs.py
+++ b/src/profound/resources/agents/runs.py
@@ -17,7 +17,7 @@
async_to_streamed_response_wrapper,
)
from ..._base_client import make_request_options
-from ...types.agents import run_create_params
+from ...types.agents import run_create_params, run_retrieve_params
from ...types.agents.run_create_response import RunCreateResponse
from ...types.agents.run_retrieve_response import RunRetrieveResponse
@@ -93,6 +93,7 @@ def retrieve(
run_id: str,
*,
agent_id: str,
+ verbose: bool | 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,
@@ -108,6 +109,8 @@ def retrieve(
run_id: The ID of the run to retrieve.
+ verbose: Include each step's raw `outputs` payload in the execution trace.
+
extra_headers: Send extra headers
extra_query: Add additional query parameters to the request
@@ -123,7 +126,11 @@ def retrieve(
return self._get(
path_template("/v1/agents/{agent_id}/runs/{run_id}", agent_id=agent_id, run_id=run_id),
options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ extra_headers=extra_headers,
+ extra_query=extra_query,
+ extra_body=extra_body,
+ timeout=timeout,
+ query=maybe_transform({"verbose": verbose}, run_retrieve_params.RunRetrieveParams),
),
cast_to=RunRetrieveResponse,
)
@@ -198,6 +205,7 @@ async def retrieve(
run_id: str,
*,
agent_id: str,
+ verbose: bool | 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,
@@ -213,6 +221,8 @@ async def retrieve(
run_id: The ID of the run to retrieve.
+ verbose: Include each step's raw `outputs` payload in the execution trace.
+
extra_headers: Send extra headers
extra_query: Add additional query parameters to the request
@@ -228,7 +238,11 @@ async def retrieve(
return await self._get(
path_template("/v1/agents/{agent_id}/runs/{run_id}", agent_id=agent_id, run_id=run_id),
options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ extra_headers=extra_headers,
+ extra_query=extra_query,
+ extra_body=extra_body,
+ timeout=timeout,
+ query=await async_maybe_transform({"verbose": verbose}, run_retrieve_params.RunRetrieveParams),
),
cast_to=RunRetrieveResponse,
)
diff --git a/src/profound/resources/reports/reports.py b/src/profound/resources/reports/reports.py
index 24d5716b..e07a7b97 100644
--- a/src/profound/resources/reports/reports.py
+++ b/src/profound/resources/reports/reports.py
@@ -612,6 +612,7 @@ def query_citations(
end_date: str,
start_date: str,
cursor: Optional[str] | Omit = omit,
+ entity: Literal["domain", "page", "citation_category"] | Omit = omit,
filter: Optional[report_query_citations_params.Filter] | Omit = omit,
group_by: List[Literal["page", "date", "model", "topic", "region", "persona", "prompt"]] | Omit = omit,
interval: Literal["day", "week", "month"] | Omit = omit,
@@ -634,14 +635,20 @@ def query_citations(
start_date: YYYY-MM-DD, ET, inclusive
+ entity: What each row represents: `domain` (default), `page`, or `citation_category`.
+ Legacy: `group_by: ["page"]` (with `entity` omitted) is still accepted and is
+ equivalent to `entity: "page"`. `citation_category` uses the dashboard split
+ view: a citation counts under both its page-level and domain-level category, so
+ category shares can sum to more than 100%.
+
filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.
limit: Page size; default 10, max 50.
max_results: Stream endpoint only: cap the number of streamed rows (default: all).
- scope: `all` (every cited domain) or `owned` (only your owned domains, for easy
- client-side totals).
+ scope: `all` (every cited domain) or `owned` (only your owned domains). Applies to
+ `entity=domain`.
extra_headers: Send extra headers
@@ -659,6 +666,7 @@ def query_citations(
"end_date": end_date,
"start_date": start_date,
"cursor": cursor,
+ "entity": entity,
"filter": filter,
"group_by": group_by,
"interval": interval,
@@ -1264,6 +1272,7 @@ def stream_citations_v2(
end_date: str,
start_date: str,
cursor: Optional[str] | Omit = omit,
+ entity: Literal["domain", "page", "citation_category"] | Omit = omit,
filter: Optional[report_stream_citations_v2_params.Filter] | Omit = omit,
group_by: List[Literal["page", "date", "model", "topic", "region", "persona", "prompt"]] | Omit = omit,
interval: Literal["day", "week", "month"] | Omit = omit,
@@ -1286,14 +1295,20 @@ def stream_citations_v2(
start_date: YYYY-MM-DD, ET, inclusive
+ entity: What each row represents: `domain` (default), `page`, or `citation_category`.
+ Legacy: `group_by: ["page"]` (with `entity` omitted) is still accepted and is
+ equivalent to `entity: "page"`. `citation_category` uses the dashboard split
+ view: a citation counts under both its page-level and domain-level category, so
+ category shares can sum to more than 100%.
+
filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.
limit: Page size; default 10, max 50.
max_results: Stream endpoint only: cap the number of streamed rows (default: all).
- scope: `all` (every cited domain) or `owned` (only your owned domains, for easy
- client-side totals).
+ scope: `all` (every cited domain) or `owned` (only your owned domains). Applies to
+ `entity=domain`.
extra_headers: Send extra headers
@@ -1312,6 +1327,7 @@ def stream_citations_v2(
"end_date": end_date,
"start_date": start_date,
"cursor": cursor,
+ "entity": entity,
"filter": filter,
"group_by": group_by,
"interval": interval,
@@ -2382,6 +2398,7 @@ async def query_citations(
end_date: str,
start_date: str,
cursor: Optional[str] | Omit = omit,
+ entity: Literal["domain", "page", "citation_category"] | Omit = omit,
filter: Optional[report_query_citations_params.Filter] | Omit = omit,
group_by: List[Literal["page", "date", "model", "topic", "region", "persona", "prompt"]] | Omit = omit,
interval: Literal["day", "week", "month"] | Omit = omit,
@@ -2404,14 +2421,20 @@ async def query_citations(
start_date: YYYY-MM-DD, ET, inclusive
+ entity: What each row represents: `domain` (default), `page`, or `citation_category`.
+ Legacy: `group_by: ["page"]` (with `entity` omitted) is still accepted and is
+ equivalent to `entity: "page"`. `citation_category` uses the dashboard split
+ view: a citation counts under both its page-level and domain-level category, so
+ category shares can sum to more than 100%.
+
filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.
limit: Page size; default 10, max 50.
max_results: Stream endpoint only: cap the number of streamed rows (default: all).
- scope: `all` (every cited domain) or `owned` (only your owned domains, for easy
- client-side totals).
+ scope: `all` (every cited domain) or `owned` (only your owned domains). Applies to
+ `entity=domain`.
extra_headers: Send extra headers
@@ -2429,6 +2452,7 @@ async def query_citations(
"end_date": end_date,
"start_date": start_date,
"cursor": cursor,
+ "entity": entity,
"filter": filter,
"group_by": group_by,
"interval": interval,
@@ -3034,6 +3058,7 @@ async def stream_citations_v2(
end_date: str,
start_date: str,
cursor: Optional[str] | Omit = omit,
+ entity: Literal["domain", "page", "citation_category"] | Omit = omit,
filter: Optional[report_stream_citations_v2_params.Filter] | Omit = omit,
group_by: List[Literal["page", "date", "model", "topic", "region", "persona", "prompt"]] | Omit = omit,
interval: Literal["day", "week", "month"] | Omit = omit,
@@ -3056,14 +3081,20 @@ async def stream_citations_v2(
start_date: YYYY-MM-DD, ET, inclusive
+ entity: What each row represents: `domain` (default), `page`, or `citation_category`.
+ Legacy: `group_by: ["page"]` (with `entity` omitted) is still accepted and is
+ equivalent to `entity: "page"`. `citation_category` uses the dashboard split
+ view: a citation counts under both its page-level and domain-level category, so
+ category shares can sum to more than 100%.
+
filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.
limit: Page size; default 10, max 50.
max_results: Stream endpoint only: cap the number of streamed rows (default: all).
- scope: `all` (every cited domain) or `owned` (only your owned domains, for easy
- client-side totals).
+ scope: `all` (every cited domain) or `owned` (only your owned domains). Applies to
+ `entity=domain`.
extra_headers: Send extra headers
@@ -3082,6 +3113,7 @@ async def stream_citations_v2(
"end_date": end_date,
"start_date": start_date,
"cursor": cursor,
+ "entity": entity,
"filter": filter,
"group_by": group_by,
"interval": interval,
diff --git a/src/profound/types/agents/__init__.py b/src/profound/types/agents/__init__.py
index 7aa0369e..34ea2ed6 100644
--- a/src/profound/types/agents/__init__.py
+++ b/src/profound/types/agents/__init__.py
@@ -4,6 +4,7 @@
from .run_create_params import RunCreateParams as RunCreateParams
from .run_create_response import RunCreateResponse as RunCreateResponse
+from .run_retrieve_params import RunRetrieveParams as RunRetrieveParams
from .run_retrieve_response import RunRetrieveResponse as RunRetrieveResponse
from .node_type_list_response import NodeTypeListResponse as NodeTypeListResponse
from .node_type_retrieve_schema_response import NodeTypeRetrieveSchemaResponse as NodeTypeRetrieveSchemaResponse
diff --git a/src/profound/types/agents/run_retrieve_params.py b/src/profound/types/agents/run_retrieve_params.py
new file mode 100644
index 00000000..2a6c9179
--- /dev/null
+++ b/src/profound/types/agents/run_retrieve_params.py
@@ -0,0 +1,15 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing_extensions import Required, TypedDict
+
+__all__ = ["RunRetrieveParams"]
+
+
+class RunRetrieveParams(TypedDict, total=False):
+ agent_id: Required[str]
+ """The ID of the agent that owns the run."""
+
+ verbose: bool
+ """Include each step's raw `outputs` payload in the execution trace."""
diff --git a/src/profound/types/agents/run_retrieve_response.py b/src/profound/types/agents/run_retrieve_response.py
index 8f0d258e..915c7aec 100644
--- a/src/profound/types/agents/run_retrieve_response.py
+++ b/src/profound/types/agents/run_retrieve_response.py
@@ -1,12 +1,47 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-from typing import Dict, Optional
+from typing import Dict, List, Optional
from datetime import datetime
from typing_extensions import Literal
from ..._models import BaseModel
-__all__ = ["RunRetrieveResponse"]
+__all__ = ["RunRetrieveResponse", "Step"]
+
+
+class Step(BaseModel):
+ """One executed node in a run's step trace, in execution order.
+
+ The lightweight fields always ship; ``outputs`` is populated only when the
+ run-retrieve request asks for ``verbose``.
+ """
+
+ node_id: str
+ """ID of the node that ran, within its agent graph."""
+
+ node_type: str
+ """Kind of node, e.g. "profound_visibility", "llm", "conditional"."""
+
+ status: str
+ """Terminal status of this node execution."""
+
+ title: str
+ """Human-readable title of the node."""
+
+ elapsed_time: Optional[float] = None
+ """Wall-clock seconds the node took, if recorded."""
+
+ error_message: Optional[str] = None
+ """Failure detail for this node, when it failed."""
+
+ finished_at: Optional[datetime] = None
+ """When the node finished, if it has."""
+
+ outputs: Optional[Dict[str, object]] = None
+ """Raw output payload this node produced.
+
+ Included only when the request asks for `verbose`.
+ """
class RunRetrieveResponse(BaseModel):
@@ -36,3 +71,10 @@ class RunRetrieveResponse(BaseModel):
started_at: Optional[datetime] = None
"""When the run started, if it has started."""
+
+ steps: Optional[List[Step]] = None
+ """
+ Ordered step-by-step execution trace — one entry per node that ran, in execution
+ order. Always present once the run has executed a node; per-node `outputs`
+ inside each step are included only when the request asks for `verbose`.
+ """
diff --git a/src/profound/types/report_query_citations_params.py b/src/profound/types/report_query_citations_params.py
index 4441e22a..778fdf1f 100644
--- a/src/profound/types/report_query_citations_params.py
+++ b/src/profound/types/report_query_citations_params.py
@@ -19,6 +19,15 @@ class ReportQueryCitationsParams(TypedDict, total=False):
cursor: Optional[str]
+ entity: Literal["domain", "page", "citation_category"]
+ """What each row represents: `domain` (default), `page`, or `citation_category`.
+
+ Legacy: `group_by: ["page"]` (with `entity` omitted) is still accepted and is
+ equivalent to `entity: "page"`. `citation_category` uses the dashboard split
+ view: a citation counts under both its page-level and domain-level category, so
+ category shares can sum to more than 100%.
+ """
+
filter: Optional[Filter]
"""A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group."""
@@ -35,9 +44,9 @@ class ReportQueryCitationsParams(TypedDict, total=False):
metrics: Optional[List[Literal["count", "citation_share", "rank", "first_cited_at"]]]
scope: Literal["all", "owned"]
- """
- `all` (every cited domain) or `owned` (only your owned domains, for easy
- client-side totals).
+ """`all` (every cited domain) or `owned` (only your owned domains).
+
+ Applies to `entity=domain`.
"""
diff --git a/src/profound/types/report_stream_citations_v2_params.py b/src/profound/types/report_stream_citations_v2_params.py
index 465d5943..4cb19270 100644
--- a/src/profound/types/report_stream_citations_v2_params.py
+++ b/src/profound/types/report_stream_citations_v2_params.py
@@ -19,6 +19,15 @@ class ReportStreamCitationsV2Params(TypedDict, total=False):
cursor: Optional[str]
+ entity: Literal["domain", "page", "citation_category"]
+ """What each row represents: `domain` (default), `page`, or `citation_category`.
+
+ Legacy: `group_by: ["page"]` (with `entity` omitted) is still accepted and is
+ equivalent to `entity: "page"`. `citation_category` uses the dashboard split
+ view: a citation counts under both its page-level and domain-level category, so
+ category shares can sum to more than 100%.
+ """
+
filter: Optional[Filter]
"""A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group."""
@@ -35,9 +44,9 @@ class ReportStreamCitationsV2Params(TypedDict, total=False):
metrics: Optional[List[Literal["count", "citation_share", "rank", "first_cited_at"]]]
scope: Literal["all", "owned"]
- """
- `all` (every cited domain) or `owned` (only your owned domains, for easy
- client-side totals).
+ """`all` (every cited domain) or `owned` (only your owned domains).
+
+ Applies to `entity=domain`.
"""
diff --git a/tests/api_resources/agents/test_runs.py b/tests/api_resources/agents/test_runs.py
index f89ec572..3856c10d 100644
--- a/tests/api_resources/agents/test_runs.py
+++ b/tests/api_resources/agents/test_runs.py
@@ -77,6 +77,16 @@ def test_method_retrieve(self, client: Profound) -> None:
)
assert_matches_type(RunRetrieveResponse, run, path=["response"])
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_retrieve_with_all_params(self, client: Profound) -> None:
+ run = client.agents.runs.retrieve(
+ run_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ verbose=True,
+ )
+ assert_matches_type(RunRetrieveResponse, run, path=["response"])
+
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_raw_response_retrieve(self, client: Profound) -> None:
@@ -186,6 +196,16 @@ async def test_method_retrieve(self, async_client: AsyncProfound) -> None:
)
assert_matches_type(RunRetrieveResponse, run, path=["response"])
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_retrieve_with_all_params(self, async_client: AsyncProfound) -> None:
+ run = await async_client.agents.runs.retrieve(
+ run_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ verbose=True,
+ )
+ assert_matches_type(RunRetrieveResponse, run, path=["response"])
+
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_raw_response_retrieve(self, async_client: AsyncProfound) -> None:
diff --git a/tests/api_resources/test_reports.py b/tests/api_resources/test_reports.py
index 760328d1..0457add7 100644
--- a/tests/api_resources/test_reports.py
+++ b/tests/api_resources/test_reports.py
@@ -406,6 +406,7 @@ def test_method_query_citations_with_all_params(self, client: Profound) -> None:
end_date="end_date",
start_date="start_date",
cursor="cursor",
+ entity="domain",
filter={
"and": [],
"field": "field",
@@ -954,6 +955,7 @@ def test_method_stream_citations_v2_with_all_params(self, client: Profound) -> N
end_date="end_date",
start_date="start_date",
cursor="cursor",
+ entity="domain",
filter={
"and": [],
"field": "field",
@@ -1795,6 +1797,7 @@ async def test_method_query_citations_with_all_params(self, async_client: AsyncP
end_date="end_date",
start_date="start_date",
cursor="cursor",
+ entity="domain",
filter={
"and": [],
"field": "field",
@@ -2343,6 +2346,7 @@ async def test_method_stream_citations_v2_with_all_params(self, async_client: As
end_date="end_date",
start_date="start_date",
cursor="cursor",
+ entity="domain",
filter={
"and": [],
"field": "field",
From 79dcecf0ac4be6dbb3ec556677e21c6688818e5b Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Tue, 21 Jul 2026 21:17:28 +0000
Subject: [PATCH 24/48] feat(api): api update
---
.stats.yml | 4 +-
api.md | 28 +-
.../resources/organizations/categories.py | 8 +-
src/profound/resources/prompts.py | 26 +-
.../resources/reports/factcheck/claims.py | 26 +-
.../resources/reports/factcheck/factcheck.py | 26 +-
src/profound/resources/reports/reports.py | 86 +++--
src/profound/types/__init__.py | 5 +
.../types/prompt_answers_v2_response.py | 118 ++++++-
.../prompt_stream_answers_v2_response.py | 115 +++++++
.../types/report_query_citations_response.py | 182 +++++++++-
.../report_query_query_fanouts_response.py | 95 +++++-
.../types/report_query_sentiment_response.py | 295 +++++++++++++++-
.../types/report_query_visibility_response.py | 185 +++++++++-
.../report_stream_citations_v2_response.py | 179 ++++++++++
.../report_stream_query_fanouts_response.py | 92 +++++
.../report_stream_sentiment_v2_response.py | 292 ++++++++++++++++
.../report_stream_visibility_v2_response.py | 182 ++++++++++
src/profound/types/reports/__init__.py | 1 +
.../types/reports/factcheck/__init__.py | 1 +
.../factcheck/claim_query_claims_response.py | 320 +++++++++++++++++-
.../factcheck/claim_stream_claims_response.py | 317 +++++++++++++++++
.../factcheck_query_scores_response.py | 211 +++++++++++-
.../factcheck_stream_scores_response.py | 209 ++++++++++++
.../reports/factcheck/test_claims.py | 66 ++--
tests/api_resources/reports/test_factcheck.py | 66 ++--
tests/api_resources/test_prompts.py | 66 ++--
tests/api_resources/test_reports.py | 200 ++++++-----
28 files changed, 3103 insertions(+), 298 deletions(-)
create mode 100644 src/profound/types/prompt_stream_answers_v2_response.py
create mode 100644 src/profound/types/report_stream_citations_v2_response.py
create mode 100644 src/profound/types/report_stream_query_fanouts_response.py
create mode 100644 src/profound/types/report_stream_sentiment_v2_response.py
create mode 100644 src/profound/types/report_stream_visibility_v2_response.py
create mode 100644 src/profound/types/reports/factcheck/claim_stream_claims_response.py
create mode 100644 src/profound/types/reports/factcheck_stream_scores_response.py
diff --git a/.stats.yml b/.stats.yml
index 9bd56d95..f92de618 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-f52fb1473a2cf2edc57af10caf0902c839b1d0f38ce6214b3c6ac24343ff4015.yml
-openapi_spec_hash: f546ab89ceef1f4a4afacfe985608524
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-52ba02a24f99396c26b151bbf7a65fbcd9d12a49b997f79b43234ec5594f3ce6.yml
+openapi_spec_hash: 74344fe8287b4d42268ecf5764ff5bf7
config_hash: 48130b77367435ca80edf565b73c49f9
diff --git a/api.md b/api.md
index 7d86c1cf..7a40c941 100644
--- a/api.md
+++ b/api.md
@@ -91,14 +91,18 @@ Methods:
Types:
```python
-from profound.types import PromptAnswersResponse, PromptAnswersV2Response
+from profound.types import (
+ PromptAnswersResponse,
+ PromptAnswersV2Response,
+ PromptStreamAnswersV2Response,
+)
```
Methods:
- client.prompts.answers(\*\*params) -> PromptAnswersResponse
- client.prompts.answers_v2(\*\*params) -> PromptAnswersV2Response
-- client.prompts.stream_answers_v2(\*\*params) -> None
+- client.prompts.stream_answers_v2(\*\*params) -> PromptStreamAnswersV2Response
# Reports
@@ -122,8 +126,12 @@ from profound.types import (
ReportQueryVisibilityResponse,
ReportSentimentV2Response,
ReportStreamCitationsResponse,
+ ReportStreamCitationsV2Response,
+ ReportStreamQueryFanoutsResponse,
ReportStreamSentimentResponse,
+ ReportStreamSentimentV2Response,
ReportStreamVisibilityResponse,
+ ReportStreamVisibilityV2Response,
)
```
@@ -142,12 +150,12 @@ Methods:
- client.reports.sentiment(\*\*params) -> ReportResponse
- client.reports.sentiment_v2(\*\*params) -> ReportSentimentV2Response
- client.reports.stream_citations(\*\*params) -> ReportStreamCitationsResponse
-- client.reports.stream_citations_v2(\*\*params) -> None
-- client.reports.stream_query_fanouts(\*\*params) -> None
+- client.reports.stream_citations_v2(\*\*params) -> ReportStreamCitationsV2Response
+- client.reports.stream_query_fanouts(\*\*params) -> ReportStreamQueryFanoutsResponse
- client.reports.stream_sentiment(\*\*params) -> ReportStreamSentimentResponse
-- client.reports.stream_sentiment_v2(\*\*params) -> None
+- client.reports.stream_sentiment_v2(\*\*params) -> ReportStreamSentimentV2Response
- client.reports.stream_visibility(\*\*params) -> ReportStreamVisibilityResponse
-- client.reports.stream_visibility_v2(\*\*params) -> None
+- client.reports.stream_visibility_v2(\*\*params) -> ReportStreamVisibilityV2Response
- client.reports.visibility(\*\*params) -> ReportResponse
## WebSearchResults
@@ -241,26 +249,26 @@ Methods:
Types:
```python
-from profound.types.reports import FactcheckQueryScoresResponse
+from profound.types.reports import FactcheckQueryScoresResponse, FactcheckStreamScoresResponse
```
Methods:
- client.reports.factcheck.query_scores(\*\*params) -> FactcheckQueryScoresResponse
-- client.reports.factcheck.stream_scores(\*\*params) -> None
+- client.reports.factcheck.stream_scores(\*\*params) -> FactcheckStreamScoresResponse
### Claims
Types:
```python
-from profound.types.reports.factcheck import ClaimQueryClaimsResponse
+from profound.types.reports.factcheck import ClaimQueryClaimsResponse, ClaimStreamClaimsResponse
```
Methods:
- client.reports.factcheck.claims.query_claims(\*\*params) -> ClaimQueryClaimsResponse
-- client.reports.factcheck.claims.stream_claims(\*\*params) -> None
+- client.reports.factcheck.claims.stream_claims(\*\*params) -> ClaimStreamClaimsResponse
# Content
diff --git a/src/profound/resources/organizations/categories.py b/src/profound/resources/organizations/categories.py
index 1bcc9525..3a0c6009 100644
--- a/src/profound/resources/organizations/categories.py
+++ b/src/profound/resources/organizations/categories.py
@@ -111,7 +111,7 @@ def assets(
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> CategoryAssetsResponse:
"""
- Get Category Assets
+ Assets
Args:
extra_headers: Send extra headers
@@ -193,7 +193,7 @@ def get_category_personas(
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> CategoryGetCategoryPersonasResponse:
"""
- Get Category Personas
+ Personas
Args:
extra_headers: Send extra headers
@@ -583,7 +583,7 @@ async def assets(
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> CategoryAssetsResponse:
"""
- Get Category Assets
+ Assets
Args:
extra_headers: Send extra headers
@@ -665,7 +665,7 @@ async def get_category_personas(
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> CategoryGetCategoryPersonasResponse:
"""
- Get Category Personas
+ Personas
Args:
extra_headers: Send extra headers
diff --git a/src/profound/resources/prompts.py b/src/profound/resources/prompts.py
index ecd639a6..aea37d94 100644
--- a/src/profound/resources/prompts.py
+++ b/src/profound/resources/prompts.py
@@ -2,14 +2,14 @@
from __future__ import annotations
-from typing import List, Union, Iterable, Optional
+from typing import Any, List, Union, Iterable, Optional, cast
from datetime import datetime
from typing_extensions import Literal
import httpx
from ..types import prompt_answers_params, prompt_answers_v2_params, prompt_stream_answers_v2_params
-from .._types import Body, Omit, Query, Headers, NoneType, NotGiven, omit, not_given
+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
@@ -19,10 +19,12 @@
async_to_raw_response_wrapper,
async_to_streamed_response_wrapper,
)
+from .._streaming import Stream, AsyncStream
from .._base_client import make_request_options
from ..types.prompt_answers_response import PromptAnswersResponse
from ..types.shared_params.pagination import Pagination
from ..types.prompt_answers_v2_response import PromptAnswersV2Response
+from ..types.prompt_stream_answers_v2_response import PromptStreamAnswersV2Response
__all__ = ["PromptsResource", "AsyncPromptsResource"]
@@ -225,7 +227,7 @@ def stream_answers_v2(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> None:
+ ) -> Stream[PromptStreamAnswersV2Response]:
"""
Stream Answers V2
@@ -253,7 +255,7 @@ def stream_answers_v2(
timeout: Override the client-level default timeout for this request, in seconds
"""
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
+ extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})}
return self._post(
"/v2/prompts/answers/stream",
body=maybe_transform(
@@ -272,7 +274,11 @@ def stream_answers_v2(
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
- cast_to=NoneType,
+ cast_to=cast(
+ Any, PromptStreamAnswersV2Response
+ ), # Union types cannot be passed in as arguments in the type system
+ stream=True,
+ stream_cls=Stream[PromptStreamAnswersV2Response],
)
@@ -474,7 +480,7 @@ async def stream_answers_v2(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> None:
+ ) -> AsyncStream[PromptStreamAnswersV2Response]:
"""
Stream Answers V2
@@ -502,7 +508,7 @@ async def stream_answers_v2(
timeout: Override the client-level default timeout for this request, in seconds
"""
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
+ extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})}
return await self._post(
"/v2/prompts/answers/stream",
body=await async_maybe_transform(
@@ -521,7 +527,11 @@ async def stream_answers_v2(
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
- cast_to=NoneType,
+ cast_to=cast(
+ Any, PromptStreamAnswersV2Response
+ ), # Union types cannot be passed in as arguments in the type system
+ stream=True,
+ stream_cls=AsyncStream[PromptStreamAnswersV2Response],
)
diff --git a/src/profound/resources/reports/factcheck/claims.py b/src/profound/resources/reports/factcheck/claims.py
index 3aac8630..e591f5d9 100644
--- a/src/profound/resources/reports/factcheck/claims.py
+++ b/src/profound/resources/reports/factcheck/claims.py
@@ -2,12 +2,12 @@
from __future__ import annotations
-from typing import List, Optional
+from typing import Any, List, Optional, cast
from typing_extensions import Literal
import httpx
-from ...._types import Body, Omit, Query, Headers, NoneType, NotGiven, omit, not_given
+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
@@ -17,9 +17,11 @@
async_to_raw_response_wrapper,
async_to_streamed_response_wrapper,
)
+from ...._streaming import Stream, AsyncStream
from ...._base_client import make_request_options
from ....types.reports.factcheck import claim_query_claims_params, claim_stream_claims_params
from ....types.reports.factcheck.claim_query_claims_response import ClaimQueryClaimsResponse
+from ....types.reports.factcheck.claim_stream_claims_response import ClaimStreamClaimsResponse
__all__ = ["ClaimsResource", "AsyncClaimsResource"]
@@ -130,7 +132,7 @@ def stream_claims(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> None:
+ ) -> Stream[ClaimStreamClaimsResponse]:
"""
Stream Claims
@@ -158,7 +160,7 @@ def stream_claims(
timeout: Override the client-level default timeout for this request, in seconds
"""
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
+ extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})}
return self._post(
"/v2/reports/factcheck/claims/stream",
body=maybe_transform(
@@ -178,7 +180,11 @@ def stream_claims(
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
- cast_to=NoneType,
+ cast_to=cast(
+ Any, ClaimStreamClaimsResponse
+ ), # Union types cannot be passed in as arguments in the type system
+ stream=True,
+ stream_cls=Stream[ClaimStreamClaimsResponse],
)
@@ -288,7 +294,7 @@ async def stream_claims(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> None:
+ ) -> AsyncStream[ClaimStreamClaimsResponse]:
"""
Stream Claims
@@ -316,7 +322,7 @@ async def stream_claims(
timeout: Override the client-level default timeout for this request, in seconds
"""
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
+ extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})}
return await self._post(
"/v2/reports/factcheck/claims/stream",
body=await async_maybe_transform(
@@ -336,7 +342,11 @@ async def stream_claims(
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
- cast_to=NoneType,
+ cast_to=cast(
+ Any, ClaimStreamClaimsResponse
+ ), # Union types cannot be passed in as arguments in the type system
+ stream=True,
+ stream_cls=AsyncStream[ClaimStreamClaimsResponse],
)
diff --git a/src/profound/resources/reports/factcheck/factcheck.py b/src/profound/resources/reports/factcheck/factcheck.py
index 48ab187a..b748ca0f 100644
--- a/src/profound/resources/reports/factcheck/factcheck.py
+++ b/src/profound/resources/reports/factcheck/factcheck.py
@@ -2,7 +2,7 @@
from __future__ import annotations
-from typing import List, Optional
+from typing import Any, List, Optional, cast
from typing_extensions import Literal
import httpx
@@ -15,7 +15,7 @@
ClaimsResourceWithStreamingResponse,
AsyncClaimsResourceWithStreamingResponse,
)
-from ...._types import Body, Omit, Query, Headers, NoneType, NotGiven, omit, not_given
+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
@@ -25,9 +25,11 @@
async_to_raw_response_wrapper,
async_to_streamed_response_wrapper,
)
+from ...._streaming import Stream, AsyncStream
from ...._base_client import make_request_options
from ....types.reports import factcheck_query_scores_params, factcheck_stream_scores_params
from ....types.reports.factcheck_query_scores_response import FactcheckQueryScoresResponse
+from ....types.reports.factcheck_stream_scores_response import FactcheckStreamScoresResponse
__all__ = ["FactcheckResource", "AsyncFactcheckResource"]
@@ -139,7 +141,7 @@ def stream_scores(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> None:
+ ) -> Stream[FactcheckStreamScoresResponse]:
"""
Stream Scores
@@ -165,7 +167,7 @@ def stream_scores(
timeout: Override the client-level default timeout for this request, in seconds
"""
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
+ extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})}
return self._post(
"/v2/reports/factcheck/stream",
body=maybe_transform(
@@ -184,7 +186,11 @@ def stream_scores(
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
- cast_to=NoneType,
+ cast_to=cast(
+ Any, FactcheckStreamScoresResponse
+ ), # Union types cannot be passed in as arguments in the type system
+ stream=True,
+ stream_cls=Stream[FactcheckStreamScoresResponse],
)
@@ -295,7 +301,7 @@ async def stream_scores(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> None:
+ ) -> AsyncStream[FactcheckStreamScoresResponse]:
"""
Stream Scores
@@ -321,7 +327,7 @@ async def stream_scores(
timeout: Override the client-level default timeout for this request, in seconds
"""
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
+ extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})}
return await self._post(
"/v2/reports/factcheck/stream",
body=await async_maybe_transform(
@@ -340,7 +346,11 @@ async def stream_scores(
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
- cast_to=NoneType,
+ cast_to=cast(
+ Any, FactcheckStreamScoresResponse
+ ), # Union types cannot be passed in as arguments in the type system
+ stream=True,
+ stream_cls=AsyncStream[FactcheckStreamScoresResponse],
)
diff --git a/src/profound/resources/reports/reports.py b/src/profound/resources/reports/reports.py
index e07a7b97..8fa84fd5 100644
--- a/src/profound/resources/reports/reports.py
+++ b/src/profound/resources/reports/reports.py
@@ -30,7 +30,7 @@
report_stream_visibility_v2_params,
report_get_referrals_report_v2_params,
)
-from ..._types import Body, Omit, Query, Headers, NoneType, NotGiven, SequenceNotStr, omit, not_given
+from ..._types import Body, Omit, Query, Headers, NotGiven, SequenceNotStr, omit, not_given
from ..._utils import maybe_transform, async_maybe_transform
from .accuracy import (
AccuracyResource,
@@ -85,6 +85,10 @@
from ...types.report_stream_sentiment_response import ReportStreamSentimentResponse
from ...types.report_stream_visibility_response import ReportStreamVisibilityResponse
from ...types.report_query_query_fanouts_response import ReportQueryQueryFanoutsResponse
+from ...types.report_stream_citations_v2_response import ReportStreamCitationsV2Response
+from ...types.report_stream_sentiment_v2_response import ReportStreamSentimentV2Response
+from ...types.report_stream_query_fanouts_response import ReportStreamQueryFanoutsResponse
+from ...types.report_stream_visibility_v2_response import ReportStreamVisibilityV2Response
__all__ = ["ReportsResource", "AsyncReportsResource"]
@@ -1286,7 +1290,7 @@ def stream_citations_v2(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> None:
+ ) -> Stream[ReportStreamCitationsV2Response]:
"""
Stream Citations V2
@@ -1318,7 +1322,7 @@ def stream_citations_v2(
timeout: Override the client-level default timeout for this request, in seconds
"""
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
+ extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})}
return self._post(
"/v2/reports/citations/stream",
body=maybe_transform(
@@ -1341,7 +1345,11 @@ def stream_citations_v2(
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
- cast_to=NoneType,
+ cast_to=cast(
+ Any, ReportStreamCitationsV2Response
+ ), # Union types cannot be passed in as arguments in the type system
+ stream=True,
+ stream_cls=Stream[ReportStreamCitationsV2Response],
)
def stream_query_fanouts(
@@ -1365,7 +1373,7 @@ def stream_query_fanouts(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> None:
+ ) -> Stream[ReportStreamQueryFanoutsResponse]:
"""
Stream Query Fanouts V2
@@ -1388,7 +1396,7 @@ def stream_query_fanouts(
timeout: Override the client-level default timeout for this request, in seconds
"""
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
+ extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})}
return self._post(
"/v2/reports/query-fanouts/stream",
body=maybe_transform(
@@ -1410,7 +1418,11 @@ def stream_query_fanouts(
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
- cast_to=NoneType,
+ cast_to=cast(
+ Any, ReportStreamQueryFanoutsResponse
+ ), # Union types cannot be passed in as arguments in the type system
+ stream=True,
+ stream_cls=Stream[ReportStreamQueryFanoutsResponse],
)
def stream_sentiment(
@@ -1543,7 +1555,7 @@ def stream_sentiment_v2(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> None:
+ ) -> Stream[ReportStreamSentimentV2Response]:
"""
Stream Sentiment V2
@@ -1574,7 +1586,7 @@ def stream_sentiment_v2(
timeout: Override the client-level default timeout for this request, in seconds
"""
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
+ extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})}
return self._post(
"/v2/reports/sentiment/stream",
body=maybe_transform(
@@ -1600,7 +1612,11 @@ def stream_sentiment_v2(
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
- cast_to=NoneType,
+ cast_to=cast(
+ Any, ReportStreamSentimentV2Response
+ ), # Union types cannot be passed in as arguments in the type system
+ stream=True,
+ stream_cls=Stream[ReportStreamSentimentV2Response],
)
def stream_visibility(
@@ -1726,7 +1742,7 @@ def stream_visibility_v2(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> None:
+ ) -> Stream[ReportStreamVisibilityV2Response]:
"""
Stream Visibility V2
@@ -1751,7 +1767,7 @@ def stream_visibility_v2(
timeout: Override the client-level default timeout for this request, in seconds
"""
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
+ extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})}
return self._post(
"/v2/reports/visibility/stream",
body=maybe_transform(
@@ -1775,7 +1791,11 @@ def stream_visibility_v2(
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
- cast_to=NoneType,
+ cast_to=cast(
+ Any, ReportStreamVisibilityV2Response
+ ), # Union types cannot be passed in as arguments in the type system
+ stream=True,
+ stream_cls=Stream[ReportStreamVisibilityV2Response],
)
def visibility(
@@ -3072,7 +3092,7 @@ async def stream_citations_v2(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> None:
+ ) -> AsyncStream[ReportStreamCitationsV2Response]:
"""
Stream Citations V2
@@ -3104,7 +3124,7 @@ async def stream_citations_v2(
timeout: Override the client-level default timeout for this request, in seconds
"""
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
+ extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})}
return await self._post(
"/v2/reports/citations/stream",
body=await async_maybe_transform(
@@ -3127,7 +3147,11 @@ async def stream_citations_v2(
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
- cast_to=NoneType,
+ cast_to=cast(
+ Any, ReportStreamCitationsV2Response
+ ), # Union types cannot be passed in as arguments in the type system
+ stream=True,
+ stream_cls=AsyncStream[ReportStreamCitationsV2Response],
)
async def stream_query_fanouts(
@@ -3151,7 +3175,7 @@ async def stream_query_fanouts(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> None:
+ ) -> AsyncStream[ReportStreamQueryFanoutsResponse]:
"""
Stream Query Fanouts V2
@@ -3174,7 +3198,7 @@ async def stream_query_fanouts(
timeout: Override the client-level default timeout for this request, in seconds
"""
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
+ extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})}
return await self._post(
"/v2/reports/query-fanouts/stream",
body=await async_maybe_transform(
@@ -3196,7 +3220,11 @@ async def stream_query_fanouts(
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
- cast_to=NoneType,
+ cast_to=cast(
+ Any, ReportStreamQueryFanoutsResponse
+ ), # Union types cannot be passed in as arguments in the type system
+ stream=True,
+ stream_cls=AsyncStream[ReportStreamQueryFanoutsResponse],
)
async def stream_sentiment(
@@ -3329,7 +3357,7 @@ async def stream_sentiment_v2(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> None:
+ ) -> AsyncStream[ReportStreamSentimentV2Response]:
"""
Stream Sentiment V2
@@ -3360,7 +3388,7 @@ async def stream_sentiment_v2(
timeout: Override the client-level default timeout for this request, in seconds
"""
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
+ extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})}
return await self._post(
"/v2/reports/sentiment/stream",
body=await async_maybe_transform(
@@ -3386,7 +3414,11 @@ async def stream_sentiment_v2(
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
- cast_to=NoneType,
+ cast_to=cast(
+ Any, ReportStreamSentimentV2Response
+ ), # Union types cannot be passed in as arguments in the type system
+ stream=True,
+ stream_cls=AsyncStream[ReportStreamSentimentV2Response],
)
async def stream_visibility(
@@ -3512,7 +3544,7 @@ async def stream_visibility_v2(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> None:
+ ) -> AsyncStream[ReportStreamVisibilityV2Response]:
"""
Stream Visibility V2
@@ -3537,7 +3569,7 @@ async def stream_visibility_v2(
timeout: Override the client-level default timeout for this request, in seconds
"""
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
+ extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})}
return await self._post(
"/v2/reports/visibility/stream",
body=await async_maybe_transform(
@@ -3561,7 +3593,11 @@ async def stream_visibility_v2(
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
- cast_to=NoneType,
+ cast_to=cast(
+ Any, ReportStreamVisibilityV2Response
+ ), # Union types cannot be passed in as arguments in the type system
+ stream=True,
+ stream_cls=AsyncStream[ReportStreamVisibilityV2Response],
)
async def visibility(
diff --git a/src/profound/types/__init__.py b/src/profound/types/__init__.py
index 59a43853..b071faa7 100644
--- a/src/profound/types/__init__.py
+++ b/src/profound/types/__init__.py
@@ -97,6 +97,7 @@
from .report_stream_citations_response import ReportStreamCitationsResponse as ReportStreamCitationsResponse
from .report_stream_sentiment_response import ReportStreamSentimentResponse as ReportStreamSentimentResponse
from .organization_list_assets_response import OrganizationListAssetsResponse as OrganizationListAssetsResponse
+from .prompt_stream_answers_v2_response import PromptStreamAnswersV2Response as PromptStreamAnswersV2Response
from .report_query_query_fanouts_params import ReportQueryQueryFanoutsParams as ReportQueryQueryFanoutsParams
from .report_stream_citations_v2_params import ReportStreamCitationsV2Params as ReportStreamCitationsV2Params
from .report_stream_sentiment_v2_params import ReportStreamSentimentV2Params as ReportStreamSentimentV2Params
@@ -106,4 +107,8 @@
from .report_stream_query_fanouts_params import ReportStreamQueryFanoutsParams as ReportStreamQueryFanoutsParams
from .report_stream_visibility_v2_params import ReportStreamVisibilityV2Params as ReportStreamVisibilityV2Params
from .report_query_query_fanouts_response import ReportQueryQueryFanoutsResponse as ReportQueryQueryFanoutsResponse
+from .report_stream_citations_v2_response import ReportStreamCitationsV2Response as ReportStreamCitationsV2Response
+from .report_stream_sentiment_v2_response import ReportStreamSentimentV2Response as ReportStreamSentimentV2Response
+from .report_stream_query_fanouts_response import ReportStreamQueryFanoutsResponse as ReportStreamQueryFanoutsResponse
+from .report_stream_visibility_v2_response import ReportStreamVisibilityV2Response as ReportStreamVisibilityV2Response
from .report_get_referrals_report_v2_params import ReportGetReferralsReportV2Params as ReportGetReferralsReportV2Params
diff --git a/src/profound/types/prompt_answers_v2_response.py b/src/profound/types/prompt_answers_v2_response.py
index 270f72b4..b8712765 100644
--- a/src/profound/types/prompt_answers_v2_response.py
+++ b/src/profound/types/prompt_answers_v2_response.py
@@ -1,8 +1,118 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-from typing import Dict
-from typing_extensions import TypeAlias
+from typing import TYPE_CHECKING, Dict, List, Optional
-__all__ = ["PromptAnswersV2Response"]
+from pydantic import Field as FieldInfo
-PromptAnswersV2Response: TypeAlias = Dict[str, object]
+from .._models import BaseModel
+
+__all__ = ["PromptAnswersV2Response", "Data", "DataModel", "Info"]
+
+
+class DataModel(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class Data(BaseModel):
+ """One answer row.
+
+ Present fields depend on `include`; `model` is an `{id, name}` reference.
+ """
+
+ analysis_types: Optional[List[str]] = None
+
+ citations: Optional[List[str]] = None
+
+ date: Optional[str] = None
+
+ mentions: Optional[List[str]] = None
+
+ model: Optional[DataModel] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ persona: Optional[str] = None
+
+ prompt: Optional[str] = None
+
+ prompt_id: Optional[str] = None
+
+ region: Optional[str] = None
+
+ response: Optional[str] = None
+
+ run_id: Optional[str] = None
+
+ search_queries: Optional[List[str]] = None
+
+ sentiment_claims: Optional[List[Dict[str, object]]] = None
+
+ tags: Optional[List[str]] = None
+
+ topic: Optional[str] = None
+
+ topic_id: Optional[str] = None
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+class Info(BaseModel):
+ count: int
+ """Number of rows returned in `data` for this page."""
+
+ end_date: str
+ """Echoed request end date (YYYY-MM-DD, ET)."""
+
+ include: List[str]
+ """Row fields returned (echoes `include`, or all fields when omitted)."""
+
+ models: List[str]
+ """Display names of the models the report covers."""
+
+ start_date: str
+ """Echoed request start date (YYYY-MM-DD, ET)."""
+
+ filter: Optional[Dict[str, object]] = None
+ """Echoed normalized filter tree, or null when no filter was sent."""
+
+ next_cursor: Optional[str] = None
+ """Opaque cursor for the next page; null on the last page."""
+
+ total_results: Optional[int] = None
+ """Total rows matching the query before pagination (null when not computed)."""
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+class PromptAnswersV2Response(BaseModel):
+ data: List[Data]
+
+ info: Info
diff --git a/src/profound/types/prompt_stream_answers_v2_response.py b/src/profound/types/prompt_stream_answers_v2_response.py
new file mode 100644
index 00000000..6b19e3d2
--- /dev/null
+++ b/src/profound/types/prompt_stream_answers_v2_response.py
@@ -0,0 +1,115 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import TYPE_CHECKING, Dict, List, Union, Optional
+from typing_extensions import TypeAlias
+
+from pydantic import Field as FieldInfo
+
+from .._models import BaseModel
+
+__all__ = ["PromptStreamAnswersV2Response", "AnswersV2Info", "AnswerRow", "AnswerRowModel"]
+
+
+class AnswersV2Info(BaseModel):
+ """`summary` event payload (the report `info` block)."""
+
+ count: int
+ """Number of rows returned in `data` for this page."""
+
+ end_date: str
+ """Echoed request end date (YYYY-MM-DD, ET)."""
+
+ include: List[str]
+ """Row fields returned (echoes `include`, or all fields when omitted)."""
+
+ models: List[str]
+ """Display names of the models the report covers."""
+
+ start_date: str
+ """Echoed request start date (YYYY-MM-DD, ET)."""
+
+ filter: Optional[Dict[str, object]] = None
+ """Echoed normalized filter tree, or null when no filter was sent."""
+
+ next_cursor: Optional[str] = None
+ """Opaque cursor for the next page; null on the last page."""
+
+ total_results: Optional[int] = None
+ """Total rows matching the query before pagination (null when not computed)."""
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+class AnswerRowModel(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class AnswerRow(BaseModel):
+ """`result` event payload — one answer row."""
+
+ analysis_types: Optional[List[str]] = None
+
+ citations: Optional[List[str]] = None
+
+ date: Optional[str] = None
+
+ mentions: Optional[List[str]] = None
+
+ model: Optional[AnswerRowModel] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ persona: Optional[str] = None
+
+ prompt: Optional[str] = None
+
+ prompt_id: Optional[str] = None
+
+ region: Optional[str] = None
+
+ response: Optional[str] = None
+
+ run_id: Optional[str] = None
+
+ search_queries: Optional[List[str]] = None
+
+ sentiment_claims: Optional[List[Dict[str, object]]] = None
+
+ tags: Optional[List[str]] = None
+
+ topic: Optional[str] = None
+
+ topic_id: Optional[str] = None
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+PromptStreamAnswersV2Response: TypeAlias = Union[AnswersV2Info, AnswerRow]
diff --git a/src/profound/types/report_query_citations_response.py b/src/profound/types/report_query_citations_response.py
index 9eab76aa..6827ccf0 100644
--- a/src/profound/types/report_query_citations_response.py
+++ b/src/profound/types/report_query_citations_response.py
@@ -1,8 +1,182 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-from typing import Dict
-from typing_extensions import TypeAlias
+from typing import TYPE_CHECKING, Dict, List, Optional
-__all__ = ["ReportQueryCitationsResponse"]
+from pydantic import Field as FieldInfo
-ReportQueryCitationsResponse: TypeAlias = Dict[str, object]
+from .._models import BaseModel
+
+__all__ = [
+ "ReportQueryCitationsResponse",
+ "Data",
+ "DataModel",
+ "DataPersona",
+ "DataPrompt",
+ "DataRegion",
+ "DataTopic",
+ "Info",
+]
+
+
+class DataModel(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class DataPersona(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class DataPrompt(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class DataRegion(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class DataTopic(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class Data(BaseModel):
+ """One (source x group) row.
+
+ Each row carries `domain` or `page`; group dims/metrics vary.
+ """
+
+ citation_share: Optional[float] = None
+
+ count: Optional[int] = None
+
+ date: Optional[str] = None
+
+ domain: Optional[str] = None
+
+ first_cited_at: Optional[str] = None
+ """Pages only."""
+
+ model: Optional[DataModel] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ page: Optional[str] = None
+
+ persona: Optional[DataPersona] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ prompt: Optional[DataPrompt] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ rank: Optional[int] = None
+
+ region: Optional[DataRegion] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ topic: Optional[DataTopic] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+class Info(BaseModel):
+ analysis_types: List[str]
+ """Analysis types the citations were drawn from."""
+
+ count: int
+ """Number of rows returned in `data` for this page."""
+
+ end_date: str
+ """Echoed request end date (YYYY-MM-DD, ET)."""
+
+ metrics: List[str]
+ """Metrics returned per row."""
+
+ models: List[str]
+ """Display names of the models the report covers."""
+
+ scope: str
+ """Citation scope: `all` or `owned`."""
+
+ start_date: str
+ """Echoed request start date (YYYY-MM-DD, ET)."""
+
+ filter: Optional[Dict[str, object]] = None
+ """Echoed normalized filter tree, or null when no filter was sent."""
+
+ next_cursor: Optional[str] = None
+ """Opaque cursor for the next page; null on the last page."""
+
+ total_results: Optional[int] = None
+ """Total rows matching the query before pagination (null when not computed)."""
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+class ReportQueryCitationsResponse(BaseModel):
+ data: List[Data]
+
+ info: Info
diff --git a/src/profound/types/report_query_query_fanouts_response.py b/src/profound/types/report_query_query_fanouts_response.py
index cd517ad7..793cf301 100644
--- a/src/profound/types/report_query_query_fanouts_response.py
+++ b/src/profound/types/report_query_query_fanouts_response.py
@@ -1,8 +1,95 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-from typing import Dict
-from typing_extensions import TypeAlias
+from typing import TYPE_CHECKING, Dict, List, Optional
-__all__ = ["ReportQueryQueryFanoutsResponse"]
+from pydantic import Field as FieldInfo
-ReportQueryQueryFanoutsResponse: TypeAlias = Dict[str, object]
+from .._models import BaseModel
+
+__all__ = ["ReportQueryQueryFanoutsResponse", "Data", "Info"]
+
+
+class Data(BaseModel):
+ """One row.
+
+ Group dimensions are plain values (not `{id, name}`); metrics present depend on `metrics`.
+ """
+
+ date: Optional[str] = None
+
+ fanouts_per_execution: Optional[float] = None
+
+ model: Optional[str] = None
+
+ prompt: Optional[str] = None
+
+ query: Optional[str] = None
+
+ query_variations: Optional[int] = None
+
+ rank: Optional[int] = None
+
+ region: Optional[str] = None
+
+ share: Optional[float] = None
+
+ total_fanouts: Optional[float] = None
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+class Info(BaseModel):
+ count: int
+ """Number of rows returned in `data` for this page."""
+
+ coverage_note: str
+ """Caveat about which runs the fanout metrics cover."""
+
+ end_date: str
+ """Echoed request end date (YYYY-MM-DD, ET)."""
+
+ metrics: List[str]
+ """Fanout metrics returned per row."""
+
+ models: List[str]
+ """Display names of the models the report covers."""
+
+ start_date: str
+ """Echoed request start date (YYYY-MM-DD, ET)."""
+
+ filter: Optional[Dict[str, object]] = None
+ """Echoed normalized filter tree, or null when no filter was sent."""
+
+ next_cursor: Optional[str] = None
+ """Opaque cursor for the next page; null on the last page."""
+
+ total_results: Optional[int] = None
+ """Total rows matching the query before pagination (null when not computed)."""
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+class ReportQueryQueryFanoutsResponse(BaseModel):
+ data: List[Data]
+
+ info: Info
diff --git a/src/profound/types/report_query_sentiment_response.py b/src/profound/types/report_query_sentiment_response.py
index 48876582..c0415c28 100644
--- a/src/profound/types/report_query_sentiment_response.py
+++ b/src/profound/types/report_query_sentiment_response.py
@@ -1,8 +1,295 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-from typing import Dict
-from typing_extensions import TypeAlias
+from typing import TYPE_CHECKING, Dict, List, Optional
-__all__ = ["ReportQuerySentimentResponse"]
+from pydantic import Field as FieldInfo
-ReportQuerySentimentResponse: TypeAlias = Dict[str, object]
+from .._models import BaseModel
+
+__all__ = [
+ "ReportQuerySentimentResponse",
+ "Data",
+ "DataClaim",
+ "DataCompetitor",
+ "DataModel",
+ "DataPersona",
+ "DataPrevious",
+ "DataPrompt",
+ "DataRegion",
+ "DataRun",
+ "DataTag",
+ "DataTheme",
+ "DataTopic",
+ "Info",
+]
+
+
+class DataClaim(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class DataCompetitor(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class DataModel(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class DataPersona(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class DataPrevious(BaseModel):
+ """Comparison-window metrics (when requested)."""
+
+ negative_sentiment: Optional[float] = None
+
+ occurrence: Optional[float] = None
+
+ positive_sentiment: Optional[float] = None
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+class DataPrompt(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class DataRegion(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class DataRun(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class DataTag(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class DataTheme(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class DataTopic(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class Data(BaseModel):
+ """One group-combination row.
+
+ Group dims and metrics present depend on `group_by`/`metrics`.
+ """
+
+ cited_websites: Optional[List[str]] = None
+
+ claim: Optional[DataClaim] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ competitor: Optional[DataCompetitor] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ date: Optional[str] = None
+
+ model: Optional[DataModel] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ negative_sentiment: Optional[float] = None
+
+ occurrence: Optional[float] = None
+
+ persona: Optional[DataPersona] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ positive_sentiment: Optional[float] = None
+
+ prev_date: Optional[str] = None
+
+ previous: Optional[DataPrevious] = None
+ """Comparison-window metrics (when requested)."""
+
+ prompt: Optional[DataPrompt] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ rank: Optional[int] = None
+
+ region: Optional[DataRegion] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ run: Optional[DataRun] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ tag: Optional[DataTag] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ theme: Optional[DataTheme] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ topic: Optional[DataTopic] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+class Info(BaseModel):
+ asset: str
+ """The analyzed brand name."""
+
+ count: int
+ """Number of rows returned in `data` for this page."""
+
+ end_date: str
+ """Echoed request end date (YYYY-MM-DD, ET)."""
+
+ metrics: List[str]
+ """Sentiment metrics returned per row."""
+
+ models: List[str]
+ """Display names of the models the report covers."""
+
+ start_date: str
+ """Echoed request start date (YYYY-MM-DD, ET)."""
+
+ comparison_end_date: Optional[str] = None
+ """Comparison-window end (when requested)."""
+
+ comparison_start_date: Optional[str] = None
+ """Comparison-window start (when requested)."""
+
+ filter: Optional[Dict[str, object]] = None
+ """Echoed normalized filter tree, or null when no filter was sent."""
+
+ next_cursor: Optional[str] = None
+ """Opaque cursor for the next page; null on the last page."""
+
+ total_results: Optional[int] = None
+ """Total rows matching the query before pagination (null when not computed)."""
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+class ReportQuerySentimentResponse(BaseModel):
+ data: List[Data]
+
+ info: Info
diff --git a/src/profound/types/report_query_visibility_response.py b/src/profound/types/report_query_visibility_response.py
index 39f6ed1a..41c6221f 100644
--- a/src/profound/types/report_query_visibility_response.py
+++ b/src/profound/types/report_query_visibility_response.py
@@ -1,8 +1,185 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-from typing import Dict
-from typing_extensions import TypeAlias
+from typing import TYPE_CHECKING, Dict, List, Union, Optional
-__all__ = ["ReportQueryVisibilityResponse"]
+from pydantic import Field as FieldInfo
-ReportQueryVisibilityResponse: TypeAlias = Dict[str, object]
+from .._models import BaseModel
+
+__all__ = [
+ "ReportQueryVisibilityResponse",
+ "Data",
+ "DataAsset",
+ "DataModel",
+ "DataPersona",
+ "DataPrompt",
+ "DataRegion",
+ "DataTopic",
+ "Info",
+]
+
+
+class DataAsset(BaseModel):
+ name: Optional[str] = None
+
+ owned: Optional[bool] = None
+ """Whether the asset is owned by the category."""
+
+
+class DataModel(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class DataPersona(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class DataPrompt(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class DataRegion(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class DataTopic(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class Data(BaseModel):
+ """One (asset x group) row.
+
+ Group dimensions and metrics present depend on `group_by`/`metrics`.
+ """
+
+ asset: Optional[DataAsset] = None
+
+ average_position: Optional[float] = None
+
+ date: Optional[str] = None
+
+ model: Optional[DataModel] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ persona: Optional[DataPersona] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ prompt: Optional[DataPrompt] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ rank: Optional[int] = None
+ """Asset rank (only when not grouped)."""
+
+ region: Optional[DataRegion] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ share_of_voice: Optional[float] = None
+
+ topic: Optional[DataTopic] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ visibility_score: Optional[float] = None
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+class Info(BaseModel):
+ count: int
+ """Number of rows returned in `data` for this page."""
+
+ end_date: str
+ """Echoed request end date (YYYY-MM-DD, ET)."""
+
+ models: List[str]
+ """Display names of the models the report covers."""
+
+ scope: str
+ """Asset scope: `all` or `owned`."""
+
+ start_date: str
+ """Echoed request start date (YYYY-MM-DD, ET)."""
+
+ asset_filter: Union[Dict[str, object], List[str], str, None] = None
+ """Echoed `assets` selection (filter clause, name, or list), or null."""
+
+ filter: Optional[Dict[str, object]] = None
+ """Echoed normalized filter tree, or null when no filter was sent."""
+
+ next_cursor: Optional[str] = None
+ """Opaque cursor for the next page; null on the last page."""
+
+ total_results: Optional[int] = None
+ """Total rows matching the query before pagination (null when not computed)."""
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+class ReportQueryVisibilityResponse(BaseModel):
+ data: List[Data]
+
+ info: Info
diff --git a/src/profound/types/report_stream_citations_v2_response.py b/src/profound/types/report_stream_citations_v2_response.py
new file mode 100644
index 00000000..71cfefec
--- /dev/null
+++ b/src/profound/types/report_stream_citations_v2_response.py
@@ -0,0 +1,179 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import TYPE_CHECKING, Dict, List, Union, Optional
+from typing_extensions import TypeAlias
+
+from pydantic import Field as FieldInfo
+
+from .._models import BaseModel
+
+__all__ = [
+ "ReportStreamCitationsV2Response",
+ "CitationsV2Info",
+ "CitationRow",
+ "CitationRowModel",
+ "CitationRowPersona",
+ "CitationRowPrompt",
+ "CitationRowRegion",
+ "CitationRowTopic",
+]
+
+
+class CitationsV2Info(BaseModel):
+ """`summary` event payload (the report `info` block)."""
+
+ analysis_types: List[str]
+ """Analysis types the citations were drawn from."""
+
+ count: int
+ """Number of rows returned in `data` for this page."""
+
+ end_date: str
+ """Echoed request end date (YYYY-MM-DD, ET)."""
+
+ metrics: List[str]
+ """Metrics returned per row."""
+
+ models: List[str]
+ """Display names of the models the report covers."""
+
+ scope: str
+ """Citation scope: `all` or `owned`."""
+
+ start_date: str
+ """Echoed request start date (YYYY-MM-DD, ET)."""
+
+ filter: Optional[Dict[str, object]] = None
+ """Echoed normalized filter tree, or null when no filter was sent."""
+
+ next_cursor: Optional[str] = None
+ """Opaque cursor for the next page; null on the last page."""
+
+ total_results: Optional[int] = None
+ """Total rows matching the query before pagination (null when not computed)."""
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+class CitationRowModel(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class CitationRowPersona(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class CitationRowPrompt(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class CitationRowRegion(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class CitationRowTopic(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class CitationRow(BaseModel):
+ """`result` event payload — one citation row."""
+
+ citation_share: Optional[float] = None
+
+ count: Optional[int] = None
+
+ date: Optional[str] = None
+
+ domain: Optional[str] = None
+
+ first_cited_at: Optional[str] = None
+ """Pages only."""
+
+ model: Optional[CitationRowModel] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ page: Optional[str] = None
+
+ persona: Optional[CitationRowPersona] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ prompt: Optional[CitationRowPrompt] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ rank: Optional[int] = None
+
+ region: Optional[CitationRowRegion] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ topic: Optional[CitationRowTopic] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+ReportStreamCitationsV2Response: TypeAlias = Union[CitationsV2Info, CitationRow]
diff --git a/src/profound/types/report_stream_query_fanouts_response.py b/src/profound/types/report_stream_query_fanouts_response.py
new file mode 100644
index 00000000..054beb8a
--- /dev/null
+++ b/src/profound/types/report_stream_query_fanouts_response.py
@@ -0,0 +1,92 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import TYPE_CHECKING, Dict, List, Union, Optional
+from typing_extensions import TypeAlias
+
+from pydantic import Field as FieldInfo
+
+from .._models import BaseModel
+
+__all__ = ["ReportStreamQueryFanoutsResponse", "QueryFanoutsV2Info", "QueryFanoutRow"]
+
+
+class QueryFanoutsV2Info(BaseModel):
+ """`summary` event payload (the report `info` block)."""
+
+ count: int
+ """Number of rows returned in `data` for this page."""
+
+ coverage_note: str
+ """Caveat about which runs the fanout metrics cover."""
+
+ end_date: str
+ """Echoed request end date (YYYY-MM-DD, ET)."""
+
+ metrics: List[str]
+ """Fanout metrics returned per row."""
+
+ models: List[str]
+ """Display names of the models the report covers."""
+
+ start_date: str
+ """Echoed request start date (YYYY-MM-DD, ET)."""
+
+ filter: Optional[Dict[str, object]] = None
+ """Echoed normalized filter tree, or null when no filter was sent."""
+
+ next_cursor: Optional[str] = None
+ """Opaque cursor for the next page; null on the last page."""
+
+ total_results: Optional[int] = None
+ """Total rows matching the query before pagination (null when not computed)."""
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+class QueryFanoutRow(BaseModel):
+ """`result` event payload — one query-fanout row."""
+
+ date: Optional[str] = None
+
+ fanouts_per_execution: Optional[float] = None
+
+ model: Optional[str] = None
+
+ prompt: Optional[str] = None
+
+ query: Optional[str] = None
+
+ query_variations: Optional[int] = None
+
+ rank: Optional[int] = None
+
+ region: Optional[str] = None
+
+ share: Optional[float] = None
+
+ total_fanouts: Optional[float] = None
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+ReportStreamQueryFanoutsResponse: TypeAlias = Union[QueryFanoutsV2Info, QueryFanoutRow]
diff --git a/src/profound/types/report_stream_sentiment_v2_response.py b/src/profound/types/report_stream_sentiment_v2_response.py
new file mode 100644
index 00000000..2fc57aad
--- /dev/null
+++ b/src/profound/types/report_stream_sentiment_v2_response.py
@@ -0,0 +1,292 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import TYPE_CHECKING, Dict, List, Union, Optional
+from typing_extensions import TypeAlias
+
+from pydantic import Field as FieldInfo
+
+from .._models import BaseModel
+
+__all__ = [
+ "ReportStreamSentimentV2Response",
+ "SentimentV2Info",
+ "SentimentRow",
+ "SentimentRowClaim",
+ "SentimentRowCompetitor",
+ "SentimentRowModel",
+ "SentimentRowPersona",
+ "SentimentRowPrevious",
+ "SentimentRowPrompt",
+ "SentimentRowRegion",
+ "SentimentRowRun",
+ "SentimentRowTag",
+ "SentimentRowTheme",
+ "SentimentRowTopic",
+]
+
+
+class SentimentV2Info(BaseModel):
+ """`summary` event payload (the report `info` block)."""
+
+ asset: str
+ """The analyzed brand name."""
+
+ count: int
+ """Number of rows returned in `data` for this page."""
+
+ end_date: str
+ """Echoed request end date (YYYY-MM-DD, ET)."""
+
+ metrics: List[str]
+ """Sentiment metrics returned per row."""
+
+ models: List[str]
+ """Display names of the models the report covers."""
+
+ start_date: str
+ """Echoed request start date (YYYY-MM-DD, ET)."""
+
+ comparison_end_date: Optional[str] = None
+ """Comparison-window end (when requested)."""
+
+ comparison_start_date: Optional[str] = None
+ """Comparison-window start (when requested)."""
+
+ filter: Optional[Dict[str, object]] = None
+ """Echoed normalized filter tree, or null when no filter was sent."""
+
+ next_cursor: Optional[str] = None
+ """Opaque cursor for the next page; null on the last page."""
+
+ total_results: Optional[int] = None
+ """Total rows matching the query before pagination (null when not computed)."""
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+class SentimentRowClaim(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class SentimentRowCompetitor(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class SentimentRowModel(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class SentimentRowPersona(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class SentimentRowPrevious(BaseModel):
+ """Comparison-window metrics (when requested)."""
+
+ negative_sentiment: Optional[float] = None
+
+ occurrence: Optional[float] = None
+
+ positive_sentiment: Optional[float] = None
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+class SentimentRowPrompt(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class SentimentRowRegion(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class SentimentRowRun(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class SentimentRowTag(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class SentimentRowTheme(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class SentimentRowTopic(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class SentimentRow(BaseModel):
+ """`result` event payload — one sentiment row."""
+
+ cited_websites: Optional[List[str]] = None
+
+ claim: Optional[SentimentRowClaim] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ competitor: Optional[SentimentRowCompetitor] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ date: Optional[str] = None
+
+ model: Optional[SentimentRowModel] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ negative_sentiment: Optional[float] = None
+
+ occurrence: Optional[float] = None
+
+ persona: Optional[SentimentRowPersona] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ positive_sentiment: Optional[float] = None
+
+ prev_date: Optional[str] = None
+
+ previous: Optional[SentimentRowPrevious] = None
+ """Comparison-window metrics (when requested)."""
+
+ prompt: Optional[SentimentRowPrompt] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ rank: Optional[int] = None
+
+ region: Optional[SentimentRowRegion] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ run: Optional[SentimentRowRun] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ tag: Optional[SentimentRowTag] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ theme: Optional[SentimentRowTheme] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ topic: Optional[SentimentRowTopic] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+ReportStreamSentimentV2Response: TypeAlias = Union[SentimentV2Info, SentimentRow]
diff --git a/src/profound/types/report_stream_visibility_v2_response.py b/src/profound/types/report_stream_visibility_v2_response.py
new file mode 100644
index 00000000..75b3e58e
--- /dev/null
+++ b/src/profound/types/report_stream_visibility_v2_response.py
@@ -0,0 +1,182 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import TYPE_CHECKING, Dict, List, Union, Optional
+from typing_extensions import TypeAlias
+
+from pydantic import Field as FieldInfo
+
+from .._models import BaseModel
+
+__all__ = [
+ "ReportStreamVisibilityV2Response",
+ "VisibilityV2Info",
+ "VisibilityRow",
+ "VisibilityRowAsset",
+ "VisibilityRowModel",
+ "VisibilityRowPersona",
+ "VisibilityRowPrompt",
+ "VisibilityRowRegion",
+ "VisibilityRowTopic",
+]
+
+
+class VisibilityV2Info(BaseModel):
+ """`summary` event payload (the report `info` block)."""
+
+ count: int
+ """Number of rows returned in `data` for this page."""
+
+ end_date: str
+ """Echoed request end date (YYYY-MM-DD, ET)."""
+
+ models: List[str]
+ """Display names of the models the report covers."""
+
+ scope: str
+ """Asset scope: `all` or `owned`."""
+
+ start_date: str
+ """Echoed request start date (YYYY-MM-DD, ET)."""
+
+ asset_filter: Union[Dict[str, object], List[str], str, None] = None
+ """Echoed `assets` selection (filter clause, name, or list), or null."""
+
+ filter: Optional[Dict[str, object]] = None
+ """Echoed normalized filter tree, or null when no filter was sent."""
+
+ next_cursor: Optional[str] = None
+ """Opaque cursor for the next page; null on the last page."""
+
+ total_results: Optional[int] = None
+ """Total rows matching the query before pagination (null when not computed)."""
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+class VisibilityRowAsset(BaseModel):
+ name: Optional[str] = None
+
+ owned: Optional[bool] = None
+ """Whether the asset is owned by the category."""
+
+
+class VisibilityRowModel(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class VisibilityRowPersona(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class VisibilityRowPrompt(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class VisibilityRowRegion(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class VisibilityRowTopic(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class VisibilityRow(BaseModel):
+ """`result` event payload — one visibility row."""
+
+ asset: Optional[VisibilityRowAsset] = None
+
+ average_position: Optional[float] = None
+
+ date: Optional[str] = None
+
+ model: Optional[VisibilityRowModel] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ persona: Optional[VisibilityRowPersona] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ prompt: Optional[VisibilityRowPrompt] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ rank: Optional[int] = None
+ """Asset rank (only when not grouped)."""
+
+ region: Optional[VisibilityRowRegion] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ share_of_voice: Optional[float] = None
+
+ topic: Optional[VisibilityRowTopic] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ visibility_score: Optional[float] = None
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+ReportStreamVisibilityV2Response: TypeAlias = Union[VisibilityV2Info, VisibilityRow]
diff --git a/src/profound/types/reports/__init__.py b/src/profound/types/reports/__init__.py
index 9ad2e13a..ba3ddac3 100644
--- a/src/profound/types/reports/__init__.py
+++ b/src/profound/types/reports/__init__.py
@@ -21,6 +21,7 @@
from .web_search_result_stream_params import WebSearchResultStreamParams as WebSearchResultStreamParams
from .accuracy_create_breakdown_params import AccuracyCreateBreakdownParams as AccuracyCreateBreakdownParams
from .accuracy_create_topic_ids_params import AccuracyCreateTopicIDsParams as AccuracyCreateTopicIDsParams
+from .factcheck_stream_scores_response import FactcheckStreamScoresResponse as FactcheckStreamScoresResponse
from .shopping_merchant_share_response import ShoppingMerchantShareResponse as ShoppingMerchantShareResponse
from .web_search_result_query_response import WebSearchResultQueryResponse as WebSearchResultQueryResponse
from .accuracy_create_overview_response import AccuracyCreateOverviewResponse as AccuracyCreateOverviewResponse
diff --git a/src/profound/types/reports/factcheck/__init__.py b/src/profound/types/reports/factcheck/__init__.py
index d159fea5..0285e14a 100644
--- a/src/profound/types/reports/factcheck/__init__.py
+++ b/src/profound/types/reports/factcheck/__init__.py
@@ -5,3 +5,4 @@
from .claim_query_claims_params import ClaimQueryClaimsParams as ClaimQueryClaimsParams
from .claim_stream_claims_params import ClaimStreamClaimsParams as ClaimStreamClaimsParams
from .claim_query_claims_response import ClaimQueryClaimsResponse as ClaimQueryClaimsResponse
+from .claim_stream_claims_response import ClaimStreamClaimsResponse as ClaimStreamClaimsResponse
diff --git a/src/profound/types/reports/factcheck/claim_query_claims_response.py b/src/profound/types/reports/factcheck/claim_query_claims_response.py
index 232a7e48..aae68bb6 100644
--- a/src/profound/types/reports/factcheck/claim_query_claims_response.py
+++ b/src/profound/types/reports/factcheck/claim_query_claims_response.py
@@ -1,8 +1,322 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-from typing import Dict
+from typing import TYPE_CHECKING, Dict, List, Union, Optional
from typing_extensions import TypeAlias
-__all__ = ["ClaimQueryClaimsResponse"]
+from pydantic import Field as FieldInfo
-ClaimQueryClaimsResponse: TypeAlias = Dict[str, object]
+from ...._models import BaseModel
+
+__all__ = [
+ "ClaimQueryClaimsResponse",
+ "Data",
+ "DataCitationSource",
+ "DataClaim",
+ "DataClaimCitationSource",
+ "DataClaimEvidence",
+ "DataClaimModel",
+ "DataEvidence",
+ "DataModel",
+ "DataPersona",
+ "DataPrompt",
+ "DataRegion",
+ "DataTag",
+ "DataTheme",
+ "DataThemeDimensionRef",
+ "DataTopic",
+ "Info",
+]
+
+
+class DataCitationSource(BaseModel):
+ citation_category: Optional[str] = None
+
+ citation_share: Optional[float] = None
+
+ domain_category: Optional[str] = None
+
+ hostname: Optional[str] = None
+
+ href: Optional[str] = None
+
+ snippet: Optional[str] = None
+
+
+class DataClaimCitationSource(BaseModel):
+ citation_category: Optional[str] = None
+
+ citation_share: Optional[float] = None
+
+ domain_category: Optional[str] = None
+
+ hostname: Optional[str] = None
+
+ href: Optional[str] = None
+
+ snippet: Optional[str] = None
+
+
+class DataClaimEvidence(BaseModel):
+ id: Optional[str] = None
+
+ kb_path: Optional[str] = None
+
+ kb_snippet: Optional[str] = None
+
+ source_updated_at: Optional[str] = None
+
+
+class DataClaimModel(BaseModel):
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+ occurrence: Optional[float] = None
+
+
+class DataClaim(BaseModel):
+ """One inaccurate claim.
+
+ `theme`/`reasoning`/`models`/`evidence`/`citation_sources` follow `include`.
+ """
+
+ citation_sources: Optional[List[DataClaimCitationSource]] = None
+
+ claim: Optional[str] = None
+
+ cluster_id: Optional[str] = None
+
+ evidence: Optional[List[DataClaimEvidence]] = None
+
+ models: Optional[List[DataClaimModel]] = None
+
+ occurrence: Optional[float] = None
+
+ reasoning: Optional[str] = None
+
+ theme: Optional[str] = None
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+class DataEvidence(BaseModel):
+ id: Optional[str] = None
+
+ kb_path: Optional[str] = None
+
+ kb_snippet: Optional[str] = None
+
+ source_updated_at: Optional[str] = None
+
+
+class DataModel(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class DataPersona(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class DataPrompt(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class DataRegion(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class DataTag(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class DataThemeDimensionRef(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+DataTheme: TypeAlias = Union[str, DataThemeDimensionRef, None]
+
+
+class DataTopic(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class Data(BaseModel):
+ """
+ A flat claim, or (with `group_by`) a section: a dimension + accuracy rollup + its `claims`.
+
+ Present fields depend on `group_by`/`include`.
+ """
+
+ accuracy: Optional[float] = None
+
+ accurate: Optional[int] = None
+
+ citation_sources: Optional[List[DataCitationSource]] = None
+
+ claim: Optional[str] = None
+
+ claims: Optional[List[DataClaim]] = None
+
+ cluster_id: Optional[str] = None
+
+ evidence: Optional[List[DataEvidence]] = None
+
+ inaccurate: Optional[int] = None
+
+ model: Optional[DataModel] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ models: Optional[List[DataModel]] = None
+
+ occurrence: Optional[float] = None
+
+ persona: Optional[DataPersona] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ prompt: Optional[DataPrompt] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ reasoning: Optional[str] = None
+
+ region: Optional[DataRegion] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ tag: Optional[DataTag] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ theme: Optional[DataTheme] = None
+ """Claim theme (string), or an `{id, name}` ref when sectioning by `theme`."""
+
+ topic: Optional[DataTopic] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ total_claims: Optional[int] = None
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+class Info(BaseModel):
+ count: int
+ """Number of rows returned in `data` for this page."""
+
+ end_date: str
+ """Echoed request end date (YYYY-MM-DD, ET)."""
+
+ group_by: List[str]
+ """Dimension the claims are sectioned by (empty → one flat list)."""
+
+ models: List[str]
+ """Display names of the models the report covers."""
+
+ start_date: str
+ """Echoed request start date (YYYY-MM-DD, ET)."""
+
+ filter: Optional[Dict[str, object]] = None
+ """Echoed normalized filter tree, or null when no filter was sent."""
+
+ include: Optional[List[str]] = None
+ """Per-claim detail fields requested."""
+
+ next_cursor: Optional[str] = None
+ """Opaque cursor for the next page; null on the last page."""
+
+ total_results: Optional[int] = None
+ """Total rows matching the query before pagination (null when not computed)."""
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+class ClaimQueryClaimsResponse(BaseModel):
+ data: List[Data]
+
+ info: Info
diff --git a/src/profound/types/reports/factcheck/claim_stream_claims_response.py b/src/profound/types/reports/factcheck/claim_stream_claims_response.py
new file mode 100644
index 00000000..bac661f2
--- /dev/null
+++ b/src/profound/types/reports/factcheck/claim_stream_claims_response.py
@@ -0,0 +1,317 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import TYPE_CHECKING, Dict, List, Union, Optional
+from typing_extensions import TypeAlias
+
+from pydantic import Field as FieldInfo
+
+from ...._models import BaseModel
+
+__all__ = [
+ "ClaimStreamClaimsResponse",
+ "FactcheckClaimsInfo",
+ "FactcheckClaimsRow",
+ "FactcheckClaimsRowCitationSource",
+ "FactcheckClaimsRowClaim",
+ "FactcheckClaimsRowClaimCitationSource",
+ "FactcheckClaimsRowClaimEvidence",
+ "FactcheckClaimsRowClaimModel",
+ "FactcheckClaimsRowEvidence",
+ "FactcheckClaimsRowModel",
+ "FactcheckClaimsRowPersona",
+ "FactcheckClaimsRowPrompt",
+ "FactcheckClaimsRowRegion",
+ "FactcheckClaimsRowTag",
+ "FactcheckClaimsRowTheme",
+ "FactcheckClaimsRowThemeDimensionRef",
+ "FactcheckClaimsRowTopic",
+]
+
+
+class FactcheckClaimsInfo(BaseModel):
+ """`summary` event payload (the report `info` block)."""
+
+ count: int
+ """Number of rows returned in `data` for this page."""
+
+ end_date: str
+ """Echoed request end date (YYYY-MM-DD, ET)."""
+
+ group_by: List[str]
+ """Dimension the claims are sectioned by (empty → one flat list)."""
+
+ models: List[str]
+ """Display names of the models the report covers."""
+
+ start_date: str
+ """Echoed request start date (YYYY-MM-DD, ET)."""
+
+ filter: Optional[Dict[str, object]] = None
+ """Echoed normalized filter tree, or null when no filter was sent."""
+
+ include: Optional[List[str]] = None
+ """Per-claim detail fields requested."""
+
+ next_cursor: Optional[str] = None
+ """Opaque cursor for the next page; null on the last page."""
+
+ total_results: Optional[int] = None
+ """Total rows matching the query before pagination (null when not computed)."""
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+class FactcheckClaimsRowCitationSource(BaseModel):
+ citation_category: Optional[str] = None
+
+ citation_share: Optional[float] = None
+
+ domain_category: Optional[str] = None
+
+ hostname: Optional[str] = None
+
+ href: Optional[str] = None
+
+ snippet: Optional[str] = None
+
+
+class FactcheckClaimsRowClaimCitationSource(BaseModel):
+ citation_category: Optional[str] = None
+
+ citation_share: Optional[float] = None
+
+ domain_category: Optional[str] = None
+
+ hostname: Optional[str] = None
+
+ href: Optional[str] = None
+
+ snippet: Optional[str] = None
+
+
+class FactcheckClaimsRowClaimEvidence(BaseModel):
+ id: Optional[str] = None
+
+ kb_path: Optional[str] = None
+
+ kb_snippet: Optional[str] = None
+
+ source_updated_at: Optional[str] = None
+
+
+class FactcheckClaimsRowClaimModel(BaseModel):
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+ occurrence: Optional[float] = None
+
+
+class FactcheckClaimsRowClaim(BaseModel):
+ """One inaccurate claim.
+
+ `theme`/`reasoning`/`models`/`evidence`/`citation_sources` follow `include`.
+ """
+
+ citation_sources: Optional[List[FactcheckClaimsRowClaimCitationSource]] = None
+
+ claim: Optional[str] = None
+
+ cluster_id: Optional[str] = None
+
+ evidence: Optional[List[FactcheckClaimsRowClaimEvidence]] = None
+
+ models: Optional[List[FactcheckClaimsRowClaimModel]] = None
+
+ occurrence: Optional[float] = None
+
+ reasoning: Optional[str] = None
+
+ theme: Optional[str] = None
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+class FactcheckClaimsRowEvidence(BaseModel):
+ id: Optional[str] = None
+
+ kb_path: Optional[str] = None
+
+ kb_snippet: Optional[str] = None
+
+ source_updated_at: Optional[str] = None
+
+
+class FactcheckClaimsRowModel(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class FactcheckClaimsRowPersona(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class FactcheckClaimsRowPrompt(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class FactcheckClaimsRowRegion(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class FactcheckClaimsRowTag(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class FactcheckClaimsRowThemeDimensionRef(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+FactcheckClaimsRowTheme: TypeAlias = Union[str, FactcheckClaimsRowThemeDimensionRef, None]
+
+
+class FactcheckClaimsRowTopic(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class FactcheckClaimsRow(BaseModel):
+ """`result` event payload — one inaccurate claim."""
+
+ accuracy: Optional[float] = None
+
+ accurate: Optional[int] = None
+
+ citation_sources: Optional[List[FactcheckClaimsRowCitationSource]] = None
+
+ claim: Optional[str] = None
+
+ claims: Optional[List[FactcheckClaimsRowClaim]] = None
+
+ cluster_id: Optional[str] = None
+
+ evidence: Optional[List[FactcheckClaimsRowEvidence]] = None
+
+ inaccurate: Optional[int] = None
+
+ model: Optional[FactcheckClaimsRowModel] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ models: Optional[List[FactcheckClaimsRowModel]] = None
+
+ occurrence: Optional[float] = None
+
+ persona: Optional[FactcheckClaimsRowPersona] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ prompt: Optional[FactcheckClaimsRowPrompt] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ reasoning: Optional[str] = None
+
+ region: Optional[FactcheckClaimsRowRegion] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ tag: Optional[FactcheckClaimsRowTag] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ theme: Optional[FactcheckClaimsRowTheme] = None
+ """Claim theme (string), or an `{id, name}` ref when sectioning by `theme`."""
+
+ topic: Optional[FactcheckClaimsRowTopic] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ total_claims: Optional[int] = None
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+ClaimStreamClaimsResponse: TypeAlias = Union[FactcheckClaimsInfo, FactcheckClaimsRow]
diff --git a/src/profound/types/reports/factcheck_query_scores_response.py b/src/profound/types/reports/factcheck_query_scores_response.py
index 2e91d4b1..d199cf1e 100644
--- a/src/profound/types/reports/factcheck_query_scores_response.py
+++ b/src/profound/types/reports/factcheck_query_scores_response.py
@@ -1,8 +1,211 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-from typing import Dict
-from typing_extensions import TypeAlias
+from typing import TYPE_CHECKING, Dict, List, Optional
-__all__ = ["FactcheckQueryScoresResponse"]
+from pydantic import Field as FieldInfo
-FactcheckQueryScoresResponse: TypeAlias = Dict[str, object]
+from ..._models import BaseModel
+
+__all__ = [
+ "FactcheckQueryScoresResponse",
+ "Data",
+ "DataCitation",
+ "DataModel",
+ "DataPersona",
+ "DataPrompt",
+ "DataRegion",
+ "DataTag",
+ "DataTheme",
+ "DataTopic",
+ "Info",
+]
+
+
+class DataCitation(BaseModel):
+ citation_category: Optional[str] = None
+
+ url: Optional[str] = None
+
+
+class DataModel(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class DataPersona(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class DataPrompt(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class DataRegion(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class DataTag(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class DataTheme(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class DataTopic(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class Data(BaseModel):
+ """
+ An accuracy score row: the headline (no dims), a daily point, or a per-dimension breakdown.
+ """
+
+ accuracy: Optional[float] = None
+
+ accurate: Optional[int] = None
+
+ citation: Optional[DataCitation] = None
+
+ date: Optional[str] = None
+
+ inaccurate: Optional[int] = None
+
+ model: Optional[DataModel] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ persona: Optional[DataPersona] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ prompt: Optional[DataPrompt] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ region: Optional[DataRegion] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ tag: Optional[DataTag] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ theme: Optional[DataTheme] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ topic: Optional[DataTopic] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+class Info(BaseModel):
+ count: int
+ """Number of rows returned in `data` for this page."""
+
+ end_date: str
+ """Echoed request end date (YYYY-MM-DD, ET)."""
+
+ group_by: List[str]
+ """Dimensions the scores are sliced by (empty → headline)."""
+
+ models: List[str]
+ """Display names of the models the report covers."""
+
+ start_date: str
+ """Echoed request start date (YYYY-MM-DD, ET)."""
+
+ filter: Optional[Dict[str, object]] = None
+ """Echoed normalized filter tree, or null when no filter was sent."""
+
+ next_cursor: Optional[str] = None
+ """Opaque cursor for the next page; null on the last page."""
+
+ total_results: Optional[int] = None
+ """Total rows matching the query before pagination (null when not computed)."""
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+class FactcheckQueryScoresResponse(BaseModel):
+ data: List[Data]
+
+ info: Info
diff --git a/src/profound/types/reports/factcheck_stream_scores_response.py b/src/profound/types/reports/factcheck_stream_scores_response.py
new file mode 100644
index 00000000..8e84473b
--- /dev/null
+++ b/src/profound/types/reports/factcheck_stream_scores_response.py
@@ -0,0 +1,209 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import TYPE_CHECKING, Dict, List, Union, Optional
+from typing_extensions import TypeAlias
+
+from pydantic import Field as FieldInfo
+
+from ..._models import BaseModel
+
+__all__ = [
+ "FactcheckStreamScoresResponse",
+ "FactcheckScoresInfo",
+ "FactcheckScoreRow",
+ "FactcheckScoreRowCitation",
+ "FactcheckScoreRowModel",
+ "FactcheckScoreRowPersona",
+ "FactcheckScoreRowPrompt",
+ "FactcheckScoreRowRegion",
+ "FactcheckScoreRowTag",
+ "FactcheckScoreRowTheme",
+ "FactcheckScoreRowTopic",
+]
+
+
+class FactcheckScoresInfo(BaseModel):
+ """`summary` event payload (the report `info` block)."""
+
+ count: int
+ """Number of rows returned in `data` for this page."""
+
+ end_date: str
+ """Echoed request end date (YYYY-MM-DD, ET)."""
+
+ group_by: List[str]
+ """Dimensions the scores are sliced by (empty → headline)."""
+
+ models: List[str]
+ """Display names of the models the report covers."""
+
+ start_date: str
+ """Echoed request start date (YYYY-MM-DD, ET)."""
+
+ filter: Optional[Dict[str, object]] = None
+ """Echoed normalized filter tree, or null when no filter was sent."""
+
+ next_cursor: Optional[str] = None
+ """Opaque cursor for the next page; null on the last page."""
+
+ total_results: Optional[int] = None
+ """Total rows matching the query before pagination (null when not computed)."""
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+class FactcheckScoreRowCitation(BaseModel):
+ citation_category: Optional[str] = None
+
+ url: Optional[str] = None
+
+
+class FactcheckScoreRowModel(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class FactcheckScoreRowPersona(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class FactcheckScoreRowPrompt(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class FactcheckScoreRowRegion(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class FactcheckScoreRowTag(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class FactcheckScoreRowTheme(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class FactcheckScoreRowTopic(BaseModel):
+ """
+ An ``{id, name}`` reference for a grouped dimension value (model, topic, region, …).
+ """
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class FactcheckScoreRow(BaseModel):
+ """`result` event payload — one accuracy score row."""
+
+ accuracy: Optional[float] = None
+
+ accurate: Optional[int] = None
+
+ citation: Optional[FactcheckScoreRowCitation] = None
+
+ date: Optional[str] = None
+
+ inaccurate: Optional[int] = None
+
+ model: Optional[FactcheckScoreRowModel] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ persona: Optional[FactcheckScoreRowPersona] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ prompt: Optional[FactcheckScoreRowPrompt] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ region: Optional[FactcheckScoreRowRegion] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ tag: Optional[FactcheckScoreRowTag] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ theme: Optional[FactcheckScoreRowTheme] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ topic: Optional[FactcheckScoreRowTopic] = None
+ """
+ An `{id, name}` reference for a grouped dimension value (model, topic, region,
+ …).
+ """
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
+
+
+FactcheckStreamScoresResponse: TypeAlias = Union[FactcheckScoresInfo, FactcheckScoreRow]
diff --git a/tests/api_resources/reports/factcheck/test_claims.py b/tests/api_resources/reports/factcheck/test_claims.py
index d86839a8..47250a39 100644
--- a/tests/api_resources/reports/factcheck/test_claims.py
+++ b/tests/api_resources/reports/factcheck/test_claims.py
@@ -23,7 +23,7 @@ class TestClaims:
@parametrize
def test_method_query_claims(self, client: Profound) -> None:
claim = client.reports.factcheck.claims.query_claims(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
@@ -33,7 +33,7 @@ def test_method_query_claims(self, client: Profound) -> None:
@parametrize
def test_method_query_claims_with_all_params(self, client: Profound) -> None:
claim = client.reports.factcheck.claims.query_claims(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
cursor="cursor",
@@ -55,7 +55,7 @@ def test_method_query_claims_with_all_params(self, client: Profound) -> None:
@parametrize
def test_raw_response_query_claims(self, client: Profound) -> None:
response = client.reports.factcheck.claims.with_raw_response.query_claims(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
@@ -69,7 +69,7 @@ def test_raw_response_query_claims(self, client: Profound) -> None:
@parametrize
def test_streaming_response_query_claims(self, client: Profound) -> None:
with client.reports.factcheck.claims.with_streaming_response.query_claims(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
) as response:
@@ -84,18 +84,18 @@ def test_streaming_response_query_claims(self, client: Profound) -> None:
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_method_stream_claims(self, client: Profound) -> None:
- claim = client.reports.factcheck.claims.stream_claims(
- category_id="category_id",
+ claim_stream = client.reports.factcheck.claims.stream_claims(
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
- assert claim is None
+ claim_stream.response.close()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_method_stream_claims_with_all_params(self, client: Profound) -> None:
- claim = client.reports.factcheck.claims.stream_claims(
- category_id="category_id",
+ claim_stream = client.reports.factcheck.claims.stream_claims(
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
cursor="cursor",
@@ -111,35 +111,34 @@ def test_method_stream_claims_with_all_params(self, client: Profound) -> None:
limit=1,
max_results=1,
)
- assert claim is None
+ claim_stream.response.close()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_raw_response_stream_claims(self, client: Profound) -> None:
response = client.reports.factcheck.claims.with_raw_response.stream_claims(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
- assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- claim = response.parse()
- assert claim is None
+ stream = response.parse()
+ stream.close()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_streaming_response_stream_claims(self, client: Profound) -> None:
with client.reports.factcheck.claims.with_streaming_response.stream_claims(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- claim = response.parse()
- assert claim is None
+ stream = response.parse()
+ stream.close()
assert cast(Any, response.is_closed) is True
@@ -153,7 +152,7 @@ class TestAsyncClaims:
@parametrize
async def test_method_query_claims(self, async_client: AsyncProfound) -> None:
claim = await async_client.reports.factcheck.claims.query_claims(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
@@ -163,7 +162,7 @@ async def test_method_query_claims(self, async_client: AsyncProfound) -> None:
@parametrize
async def test_method_query_claims_with_all_params(self, async_client: AsyncProfound) -> None:
claim = await async_client.reports.factcheck.claims.query_claims(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
cursor="cursor",
@@ -185,7 +184,7 @@ async def test_method_query_claims_with_all_params(self, async_client: AsyncProf
@parametrize
async def test_raw_response_query_claims(self, async_client: AsyncProfound) -> None:
response = await async_client.reports.factcheck.claims.with_raw_response.query_claims(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
@@ -199,7 +198,7 @@ async def test_raw_response_query_claims(self, async_client: AsyncProfound) -> N
@parametrize
async def test_streaming_response_query_claims(self, async_client: AsyncProfound) -> None:
async with async_client.reports.factcheck.claims.with_streaming_response.query_claims(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
) as response:
@@ -214,18 +213,18 @@ async def test_streaming_response_query_claims(self, async_client: AsyncProfound
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_method_stream_claims(self, async_client: AsyncProfound) -> None:
- claim = await async_client.reports.factcheck.claims.stream_claims(
- category_id="category_id",
+ claim_stream = await async_client.reports.factcheck.claims.stream_claims(
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
- assert claim is None
+ await claim_stream.response.aclose()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_method_stream_claims_with_all_params(self, async_client: AsyncProfound) -> None:
- claim = await async_client.reports.factcheck.claims.stream_claims(
- category_id="category_id",
+ claim_stream = await async_client.reports.factcheck.claims.stream_claims(
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
cursor="cursor",
@@ -241,34 +240,33 @@ async def test_method_stream_claims_with_all_params(self, async_client: AsyncPro
limit=1,
max_results=1,
)
- assert claim is None
+ await claim_stream.response.aclose()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_raw_response_stream_claims(self, async_client: AsyncProfound) -> None:
response = await async_client.reports.factcheck.claims.with_raw_response.stream_claims(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
- assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- claim = await response.parse()
- assert claim is None
+ stream = await response.parse()
+ await stream.close()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_streaming_response_stream_claims(self, async_client: AsyncProfound) -> None:
async with async_client.reports.factcheck.claims.with_streaming_response.stream_claims(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- claim = await response.parse()
- assert claim is None
+ stream = await response.parse()
+ await stream.close()
assert cast(Any, response.is_closed) is True
diff --git a/tests/api_resources/reports/test_factcheck.py b/tests/api_resources/reports/test_factcheck.py
index 075d48d2..68576b17 100644
--- a/tests/api_resources/reports/test_factcheck.py
+++ b/tests/api_resources/reports/test_factcheck.py
@@ -23,7 +23,7 @@ class TestFactcheck:
@parametrize
def test_method_query_scores(self, client: Profound) -> None:
factcheck = client.reports.factcheck.query_scores(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
@@ -33,7 +33,7 @@ def test_method_query_scores(self, client: Profound) -> None:
@parametrize
def test_method_query_scores_with_all_params(self, client: Profound) -> None:
factcheck = client.reports.factcheck.query_scores(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
cursor="cursor",
@@ -54,7 +54,7 @@ def test_method_query_scores_with_all_params(self, client: Profound) -> None:
@parametrize
def test_raw_response_query_scores(self, client: Profound) -> None:
response = client.reports.factcheck.with_raw_response.query_scores(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
@@ -68,7 +68,7 @@ def test_raw_response_query_scores(self, client: Profound) -> None:
@parametrize
def test_streaming_response_query_scores(self, client: Profound) -> None:
with client.reports.factcheck.with_streaming_response.query_scores(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
) as response:
@@ -83,18 +83,18 @@ def test_streaming_response_query_scores(self, client: Profound) -> None:
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_method_stream_scores(self, client: Profound) -> None:
- factcheck = client.reports.factcheck.stream_scores(
- category_id="category_id",
+ factcheck_stream = client.reports.factcheck.stream_scores(
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
- assert factcheck is None
+ factcheck_stream.response.close()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_method_stream_scores_with_all_params(self, client: Profound) -> None:
- factcheck = client.reports.factcheck.stream_scores(
- category_id="category_id",
+ factcheck_stream = client.reports.factcheck.stream_scores(
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
cursor="cursor",
@@ -109,35 +109,34 @@ def test_method_stream_scores_with_all_params(self, client: Profound) -> None:
limit=1,
max_results=1,
)
- assert factcheck is None
+ factcheck_stream.response.close()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_raw_response_stream_scores(self, client: Profound) -> None:
response = client.reports.factcheck.with_raw_response.stream_scores(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
- assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- factcheck = response.parse()
- assert factcheck is None
+ stream = response.parse()
+ stream.close()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_streaming_response_stream_scores(self, client: Profound) -> None:
with client.reports.factcheck.with_streaming_response.stream_scores(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- factcheck = response.parse()
- assert factcheck is None
+ stream = response.parse()
+ stream.close()
assert cast(Any, response.is_closed) is True
@@ -151,7 +150,7 @@ class TestAsyncFactcheck:
@parametrize
async def test_method_query_scores(self, async_client: AsyncProfound) -> None:
factcheck = await async_client.reports.factcheck.query_scores(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
@@ -161,7 +160,7 @@ async def test_method_query_scores(self, async_client: AsyncProfound) -> None:
@parametrize
async def test_method_query_scores_with_all_params(self, async_client: AsyncProfound) -> None:
factcheck = await async_client.reports.factcheck.query_scores(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
cursor="cursor",
@@ -182,7 +181,7 @@ async def test_method_query_scores_with_all_params(self, async_client: AsyncProf
@parametrize
async def test_raw_response_query_scores(self, async_client: AsyncProfound) -> None:
response = await async_client.reports.factcheck.with_raw_response.query_scores(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
@@ -196,7 +195,7 @@ async def test_raw_response_query_scores(self, async_client: AsyncProfound) -> N
@parametrize
async def test_streaming_response_query_scores(self, async_client: AsyncProfound) -> None:
async with async_client.reports.factcheck.with_streaming_response.query_scores(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
) as response:
@@ -211,18 +210,18 @@ async def test_streaming_response_query_scores(self, async_client: AsyncProfound
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_method_stream_scores(self, async_client: AsyncProfound) -> None:
- factcheck = await async_client.reports.factcheck.stream_scores(
- category_id="category_id",
+ factcheck_stream = await async_client.reports.factcheck.stream_scores(
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
- assert factcheck is None
+ await factcheck_stream.response.aclose()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_method_stream_scores_with_all_params(self, async_client: AsyncProfound) -> None:
- factcheck = await async_client.reports.factcheck.stream_scores(
- category_id="category_id",
+ factcheck_stream = await async_client.reports.factcheck.stream_scores(
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
cursor="cursor",
@@ -237,34 +236,33 @@ async def test_method_stream_scores_with_all_params(self, async_client: AsyncPro
limit=1,
max_results=1,
)
- assert factcheck is None
+ await factcheck_stream.response.aclose()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_raw_response_stream_scores(self, async_client: AsyncProfound) -> None:
response = await async_client.reports.factcheck.with_raw_response.stream_scores(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
- assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- factcheck = await response.parse()
- assert factcheck is None
+ stream = await response.parse()
+ await stream.close()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_streaming_response_stream_scores(self, async_client: AsyncProfound) -> None:
async with async_client.reports.factcheck.with_streaming_response.stream_scores(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- factcheck = await response.parse()
- assert factcheck is None
+ stream = await response.parse()
+ await stream.close()
assert cast(Any, response.is_closed) is True
diff --git a/tests/api_resources/test_prompts.py b/tests/api_resources/test_prompts.py
index 8950cabd..b59bcb1e 100644
--- a/tests/api_resources/test_prompts.py
+++ b/tests/api_resources/test_prompts.py
@@ -112,7 +112,7 @@ def test_streaming_response_answers(self, client: Profound) -> None:
@parametrize
def test_method_answers_v2(self, client: Profound) -> None:
prompt = client.prompts.answers_v2(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
@@ -122,7 +122,7 @@ def test_method_answers_v2(self, client: Profound) -> None:
@parametrize
def test_method_answers_v2_with_all_params(self, client: Profound) -> None:
prompt = client.prompts.answers_v2(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
cursor="cursor",
@@ -143,7 +143,7 @@ def test_method_answers_v2_with_all_params(self, client: Profound) -> None:
@parametrize
def test_raw_response_answers_v2(self, client: Profound) -> None:
response = client.prompts.with_raw_response.answers_v2(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
@@ -157,7 +157,7 @@ def test_raw_response_answers_v2(self, client: Profound) -> None:
@parametrize
def test_streaming_response_answers_v2(self, client: Profound) -> None:
with client.prompts.with_streaming_response.answers_v2(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
) as response:
@@ -172,18 +172,18 @@ def test_streaming_response_answers_v2(self, client: Profound) -> None:
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_method_stream_answers_v2(self, client: Profound) -> None:
- prompt = client.prompts.stream_answers_v2(
- category_id="category_id",
+ prompt_stream = client.prompts.stream_answers_v2(
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
- assert prompt is None
+ prompt_stream.response.close()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_method_stream_answers_v2_with_all_params(self, client: Profound) -> None:
- prompt = client.prompts.stream_answers_v2(
- category_id="category_id",
+ prompt_stream = client.prompts.stream_answers_v2(
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
cursor="cursor",
@@ -198,35 +198,34 @@ def test_method_stream_answers_v2_with_all_params(self, client: Profound) -> Non
limit=1,
max_results=1,
)
- assert prompt is None
+ prompt_stream.response.close()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_raw_response_stream_answers_v2(self, client: Profound) -> None:
response = client.prompts.with_raw_response.stream_answers_v2(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
- assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- prompt = response.parse()
- assert prompt is None
+ stream = response.parse()
+ stream.close()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_streaming_response_stream_answers_v2(self, client: Profound) -> None:
with client.prompts.with_streaming_response.stream_answers_v2(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- prompt = response.parse()
- assert prompt is None
+ stream = response.parse()
+ stream.close()
assert cast(Any, response.is_closed) is True
@@ -327,7 +326,7 @@ async def test_streaming_response_answers(self, async_client: AsyncProfound) ->
@parametrize
async def test_method_answers_v2(self, async_client: AsyncProfound) -> None:
prompt = await async_client.prompts.answers_v2(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
@@ -337,7 +336,7 @@ async def test_method_answers_v2(self, async_client: AsyncProfound) -> None:
@parametrize
async def test_method_answers_v2_with_all_params(self, async_client: AsyncProfound) -> None:
prompt = await async_client.prompts.answers_v2(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
cursor="cursor",
@@ -358,7 +357,7 @@ async def test_method_answers_v2_with_all_params(self, async_client: AsyncProfou
@parametrize
async def test_raw_response_answers_v2(self, async_client: AsyncProfound) -> None:
response = await async_client.prompts.with_raw_response.answers_v2(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
@@ -372,7 +371,7 @@ async def test_raw_response_answers_v2(self, async_client: AsyncProfound) -> Non
@parametrize
async def test_streaming_response_answers_v2(self, async_client: AsyncProfound) -> None:
async with async_client.prompts.with_streaming_response.answers_v2(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
) as response:
@@ -387,18 +386,18 @@ async def test_streaming_response_answers_v2(self, async_client: AsyncProfound)
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_method_stream_answers_v2(self, async_client: AsyncProfound) -> None:
- prompt = await async_client.prompts.stream_answers_v2(
- category_id="category_id",
+ prompt_stream = await async_client.prompts.stream_answers_v2(
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
- assert prompt is None
+ await prompt_stream.response.aclose()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_method_stream_answers_v2_with_all_params(self, async_client: AsyncProfound) -> None:
- prompt = await async_client.prompts.stream_answers_v2(
- category_id="category_id",
+ prompt_stream = await async_client.prompts.stream_answers_v2(
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
cursor="cursor",
@@ -413,34 +412,33 @@ async def test_method_stream_answers_v2_with_all_params(self, async_client: Asyn
limit=1,
max_results=1,
)
- assert prompt is None
+ await prompt_stream.response.aclose()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_raw_response_stream_answers_v2(self, async_client: AsyncProfound) -> None:
response = await async_client.prompts.with_raw_response.stream_answers_v2(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
- assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- prompt = await response.parse()
- assert prompt is None
+ stream = await response.parse()
+ await stream.close()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_streaming_response_stream_answers_v2(self, async_client: AsyncProfound) -> None:
async with async_client.prompts.with_streaming_response.stream_answers_v2(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- prompt = await response.parse()
- assert prompt is None
+ stream = await response.parse()
+ await stream.close()
assert cast(Any, response.is_closed) is True
diff --git a/tests/api_resources/test_reports.py b/tests/api_resources/test_reports.py
index 0457add7..d684f4fe 100644
--- a/tests/api_resources/test_reports.py
+++ b/tests/api_resources/test_reports.py
@@ -392,7 +392,7 @@ def test_streaming_response_get_referrals_report_v2(self, client: Profound) -> N
@parametrize
def test_method_query_citations(self, client: Profound) -> None:
report = client.reports.query_citations(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
@@ -402,7 +402,7 @@ def test_method_query_citations(self, client: Profound) -> None:
@parametrize
def test_method_query_citations_with_all_params(self, client: Profound) -> None:
report = client.reports.query_citations(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
cursor="cursor",
@@ -427,7 +427,7 @@ def test_method_query_citations_with_all_params(self, client: Profound) -> None:
@parametrize
def test_raw_response_query_citations(self, client: Profound) -> None:
response = client.reports.with_raw_response.query_citations(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
@@ -441,7 +441,7 @@ def test_raw_response_query_citations(self, client: Profound) -> None:
@parametrize
def test_streaming_response_query_citations(self, client: Profound) -> None:
with client.reports.with_streaming_response.query_citations(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
) as response:
@@ -525,7 +525,7 @@ def test_streaming_response_query_fanouts(self, client: Profound) -> None:
@parametrize
def test_method_query_query_fanouts(self, client: Profound) -> None:
report = client.reports.query_query_fanouts(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
@@ -535,7 +535,7 @@ def test_method_query_query_fanouts(self, client: Profound) -> None:
@parametrize
def test_method_query_query_fanouts_with_all_params(self, client: Profound) -> None:
report = client.reports.query_query_fanouts(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
cursor="cursor",
@@ -562,7 +562,7 @@ def test_method_query_query_fanouts_with_all_params(self, client: Profound) -> N
@parametrize
def test_raw_response_query_query_fanouts(self, client: Profound) -> None:
response = client.reports.with_raw_response.query_query_fanouts(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
@@ -576,7 +576,7 @@ def test_raw_response_query_query_fanouts(self, client: Profound) -> None:
@parametrize
def test_streaming_response_query_query_fanouts(self, client: Profound) -> None:
with client.reports.with_streaming_response.query_query_fanouts(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
) as response:
@@ -940,18 +940,18 @@ def test_streaming_response_stream_citations(self, client: Profound) -> None:
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_method_stream_citations_v2(self, client: Profound) -> None:
- report = client.reports.stream_citations_v2(
- category_id="category_id",
+ report_stream = client.reports.stream_citations_v2(
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
- assert report is None
+ report_stream.response.close()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_method_stream_citations_v2_with_all_params(self, client: Profound) -> None:
- report = client.reports.stream_citations_v2(
- category_id="category_id",
+ report_stream = client.reports.stream_citations_v2(
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
cursor="cursor",
@@ -970,53 +970,52 @@ def test_method_stream_citations_v2_with_all_params(self, client: Profound) -> N
metrics=["count"],
scope="all",
)
- assert report is None
+ report_stream.response.close()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_raw_response_stream_citations_v2(self, client: Profound) -> None:
response = client.reports.with_raw_response.stream_citations_v2(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
- assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- report = response.parse()
- assert report is None
+ stream = response.parse()
+ stream.close()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_streaming_response_stream_citations_v2(self, client: Profound) -> None:
with client.reports.with_streaming_response.stream_citations_v2(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- report = response.parse()
- assert report is None
+ stream = response.parse()
+ stream.close()
assert cast(Any, response.is_closed) is True
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_method_stream_query_fanouts(self, client: Profound) -> None:
- report = client.reports.stream_query_fanouts(
- category_id="category_id",
+ report_stream = client.reports.stream_query_fanouts(
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
- assert report is None
+ report_stream.response.close()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_method_stream_query_fanouts_with_all_params(self, client: Profound) -> None:
- report = client.reports.stream_query_fanouts(
- category_id="category_id",
+ report_stream = client.reports.stream_query_fanouts(
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
cursor="cursor",
@@ -1037,35 +1036,34 @@ def test_method_stream_query_fanouts_with_all_params(self, client: Profound) ->
"dir": "asc",
},
)
- assert report is None
+ report_stream.response.close()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_raw_response_stream_query_fanouts(self, client: Profound) -> None:
response = client.reports.with_raw_response.stream_query_fanouts(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
- assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- report = response.parse()
- assert report is None
+ stream = response.parse()
+ stream.close()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_streaming_response_stream_query_fanouts(self, client: Profound) -> None:
with client.reports.with_streaming_response.stream_query_fanouts(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- report = response.parse()
- assert report is None
+ stream = response.parse()
+ stream.close()
assert cast(Any, response.is_closed) is True
@@ -1139,18 +1137,18 @@ def test_streaming_response_stream_sentiment(self, client: Profound) -> None:
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_method_stream_sentiment_v2(self, client: Profound) -> None:
- report = client.reports.stream_sentiment_v2(
+ report_stream = client.reports.stream_sentiment_v2(
asset="asset",
category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
- assert report is None
+ report_stream.response.close()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_method_stream_sentiment_v2_with_all_params(self, client: Profound) -> None:
- report = client.reports.stream_sentiment_v2(
+ report_stream = client.reports.stream_sentiment_v2(
asset="asset",
category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
@@ -1176,7 +1174,7 @@ def test_method_stream_sentiment_v2_with_all_params(self, client: Profound) -> N
"field": "occurrence",
},
)
- assert report is None
+ report_stream.response.close()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
@@ -1188,10 +1186,9 @@ def test_raw_response_stream_sentiment_v2(self, client: Profound) -> None:
start_date="start_date",
)
- assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- report = response.parse()
- assert report is None
+ stream = response.parse()
+ stream.close()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
@@ -1205,8 +1202,8 @@ def test_streaming_response_stream_sentiment_v2(self, client: Profound) -> None:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- report = response.parse()
- assert report is None
+ stream = response.parse()
+ stream.close()
assert cast(Any, response.is_closed) is True
@@ -1280,17 +1277,17 @@ def test_streaming_response_stream_visibility(self, client: Profound) -> None:
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_method_stream_visibility_v2(self, client: Profound) -> None:
- report = client.reports.stream_visibility_v2(
+ report_stream = client.reports.stream_visibility_v2(
category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
- assert report is None
+ report_stream.response.close()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_method_stream_visibility_v2_with_all_params(self, client: Profound) -> None:
- report = client.reports.stream_visibility_v2(
+ report_stream = client.reports.stream_visibility_v2(
category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
@@ -1311,7 +1308,7 @@ def test_method_stream_visibility_v2_with_all_params(self, client: Profound) ->
scope="owned",
sort={"field": "visibility_score"},
)
- assert report is None
+ report_stream.response.close()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
@@ -1322,10 +1319,9 @@ def test_raw_response_stream_visibility_v2(self, client: Profound) -> None:
start_date="start_date",
)
- assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- report = response.parse()
- assert report is None
+ stream = response.parse()
+ stream.close()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
@@ -1338,8 +1334,8 @@ def test_streaming_response_stream_visibility_v2(self, client: Profound) -> None
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- report = response.parse()
- assert report is None
+ stream = response.parse()
+ stream.close()
assert cast(Any, response.is_closed) is True
@@ -1783,7 +1779,7 @@ async def test_streaming_response_get_referrals_report_v2(self, async_client: As
@parametrize
async def test_method_query_citations(self, async_client: AsyncProfound) -> None:
report = await async_client.reports.query_citations(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
@@ -1793,7 +1789,7 @@ async def test_method_query_citations(self, async_client: AsyncProfound) -> None
@parametrize
async def test_method_query_citations_with_all_params(self, async_client: AsyncProfound) -> None:
report = await async_client.reports.query_citations(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
cursor="cursor",
@@ -1818,7 +1814,7 @@ async def test_method_query_citations_with_all_params(self, async_client: AsyncP
@parametrize
async def test_raw_response_query_citations(self, async_client: AsyncProfound) -> None:
response = await async_client.reports.with_raw_response.query_citations(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
@@ -1832,7 +1828,7 @@ async def test_raw_response_query_citations(self, async_client: AsyncProfound) -
@parametrize
async def test_streaming_response_query_citations(self, async_client: AsyncProfound) -> None:
async with async_client.reports.with_streaming_response.query_citations(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
) as response:
@@ -1916,7 +1912,7 @@ async def test_streaming_response_query_fanouts(self, async_client: AsyncProfoun
@parametrize
async def test_method_query_query_fanouts(self, async_client: AsyncProfound) -> None:
report = await async_client.reports.query_query_fanouts(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
@@ -1926,7 +1922,7 @@ async def test_method_query_query_fanouts(self, async_client: AsyncProfound) ->
@parametrize
async def test_method_query_query_fanouts_with_all_params(self, async_client: AsyncProfound) -> None:
report = await async_client.reports.query_query_fanouts(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
cursor="cursor",
@@ -1953,7 +1949,7 @@ async def test_method_query_query_fanouts_with_all_params(self, async_client: As
@parametrize
async def test_raw_response_query_query_fanouts(self, async_client: AsyncProfound) -> None:
response = await async_client.reports.with_raw_response.query_query_fanouts(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
@@ -1967,7 +1963,7 @@ async def test_raw_response_query_query_fanouts(self, async_client: AsyncProfoun
@parametrize
async def test_streaming_response_query_query_fanouts(self, async_client: AsyncProfound) -> None:
async with async_client.reports.with_streaming_response.query_query_fanouts(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
) as response:
@@ -2331,18 +2327,18 @@ async def test_streaming_response_stream_citations(self, async_client: AsyncProf
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_method_stream_citations_v2(self, async_client: AsyncProfound) -> None:
- report = await async_client.reports.stream_citations_v2(
- category_id="category_id",
+ report_stream = await async_client.reports.stream_citations_v2(
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
- assert report is None
+ await report_stream.response.aclose()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_method_stream_citations_v2_with_all_params(self, async_client: AsyncProfound) -> None:
- report = await async_client.reports.stream_citations_v2(
- category_id="category_id",
+ report_stream = await async_client.reports.stream_citations_v2(
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
cursor="cursor",
@@ -2361,53 +2357,52 @@ async def test_method_stream_citations_v2_with_all_params(self, async_client: As
metrics=["count"],
scope="all",
)
- assert report is None
+ await report_stream.response.aclose()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_raw_response_stream_citations_v2(self, async_client: AsyncProfound) -> None:
response = await async_client.reports.with_raw_response.stream_citations_v2(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
- assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- report = await response.parse()
- assert report is None
+ stream = await response.parse()
+ await stream.close()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_streaming_response_stream_citations_v2(self, async_client: AsyncProfound) -> None:
async with async_client.reports.with_streaming_response.stream_citations_v2(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- report = await response.parse()
- assert report is None
+ stream = await response.parse()
+ await stream.close()
assert cast(Any, response.is_closed) is True
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_method_stream_query_fanouts(self, async_client: AsyncProfound) -> None:
- report = await async_client.reports.stream_query_fanouts(
- category_id="category_id",
+ report_stream = await async_client.reports.stream_query_fanouts(
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
- assert report is None
+ await report_stream.response.aclose()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_method_stream_query_fanouts_with_all_params(self, async_client: AsyncProfound) -> None:
- report = await async_client.reports.stream_query_fanouts(
- category_id="category_id",
+ report_stream = await async_client.reports.stream_query_fanouts(
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
cursor="cursor",
@@ -2428,35 +2423,34 @@ async def test_method_stream_query_fanouts_with_all_params(self, async_client: A
"dir": "asc",
},
)
- assert report is None
+ await report_stream.response.aclose()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_raw_response_stream_query_fanouts(self, async_client: AsyncProfound) -> None:
response = await async_client.reports.with_raw_response.stream_query_fanouts(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
- assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- report = await response.parse()
- assert report is None
+ stream = await response.parse()
+ await stream.close()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_streaming_response_stream_query_fanouts(self, async_client: AsyncProfound) -> None:
async with async_client.reports.with_streaming_response.stream_query_fanouts(
- category_id="category_id",
+ category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- report = await response.parse()
- assert report is None
+ stream = await response.parse()
+ await stream.close()
assert cast(Any, response.is_closed) is True
@@ -2530,18 +2524,18 @@ async def test_streaming_response_stream_sentiment(self, async_client: AsyncProf
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_method_stream_sentiment_v2(self, async_client: AsyncProfound) -> None:
- report = await async_client.reports.stream_sentiment_v2(
+ report_stream = await async_client.reports.stream_sentiment_v2(
asset="asset",
category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
- assert report is None
+ await report_stream.response.aclose()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_method_stream_sentiment_v2_with_all_params(self, async_client: AsyncProfound) -> None:
- report = await async_client.reports.stream_sentiment_v2(
+ report_stream = await async_client.reports.stream_sentiment_v2(
asset="asset",
category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
@@ -2567,7 +2561,7 @@ async def test_method_stream_sentiment_v2_with_all_params(self, async_client: As
"field": "occurrence",
},
)
- assert report is None
+ await report_stream.response.aclose()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
@@ -2579,10 +2573,9 @@ async def test_raw_response_stream_sentiment_v2(self, async_client: AsyncProfoun
start_date="start_date",
)
- assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- report = await response.parse()
- assert report is None
+ stream = await response.parse()
+ await stream.close()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
@@ -2596,8 +2589,8 @@ async def test_streaming_response_stream_sentiment_v2(self, async_client: AsyncP
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- report = await response.parse()
- assert report is None
+ stream = await response.parse()
+ await stream.close()
assert cast(Any, response.is_closed) is True
@@ -2671,17 +2664,17 @@ async def test_streaming_response_stream_visibility(self, async_client: AsyncPro
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_method_stream_visibility_v2(self, async_client: AsyncProfound) -> None:
- report = await async_client.reports.stream_visibility_v2(
+ report_stream = await async_client.reports.stream_visibility_v2(
category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
)
- assert report is None
+ await report_stream.response.aclose()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_method_stream_visibility_v2_with_all_params(self, async_client: AsyncProfound) -> None:
- report = await async_client.reports.stream_visibility_v2(
+ report_stream = await async_client.reports.stream_visibility_v2(
category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
end_date="end_date",
start_date="start_date",
@@ -2702,7 +2695,7 @@ async def test_method_stream_visibility_v2_with_all_params(self, async_client: A
scope="owned",
sort={"field": "visibility_score"},
)
- assert report is None
+ await report_stream.response.aclose()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
@@ -2713,10 +2706,9 @@ async def test_raw_response_stream_visibility_v2(self, async_client: AsyncProfou
start_date="start_date",
)
- assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- report = await response.parse()
- assert report is None
+ stream = await response.parse()
+ await stream.close()
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
@@ -2729,8 +2721,8 @@ async def test_streaming_response_stream_visibility_v2(self, async_client: Async
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- report = await response.parse()
- assert report is None
+ stream = await response.parse()
+ await stream.close()
assert cast(Any, response.is_closed) is True
From 9d1cd64e81f9b3f653ef36d79432f5a21130bb0b Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Tue, 21 Jul 2026 21:21:49 +0000
Subject: [PATCH 25/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index f92de618..7ba4cea0 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-52ba02a24f99396c26b151bbf7a65fbcd9d12a49b997f79b43234ec5594f3ce6.yml
-openapi_spec_hash: 74344fe8287b4d42268ecf5764ff5bf7
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-0de0774504a73fb885f840fc341b5a07de5aa55f899d4458ef41bc8863320d28.yml
+openapi_spec_hash: bb589c86eb1a5d758c3f13797d1aedf7
config_hash: 48130b77367435ca80edf565b73c49f9
From 1a31395016eb3259c6b8b7939542f9e955556b08 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Tue, 21 Jul 2026 22:17:28 +0000
Subject: [PATCH 26/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 7ba4cea0..f92de618 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-0de0774504a73fb885f840fc341b5a07de5aa55f899d4458ef41bc8863320d28.yml
-openapi_spec_hash: bb589c86eb1a5d758c3f13797d1aedf7
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-52ba02a24f99396c26b151bbf7a65fbcd9d12a49b997f79b43234ec5594f3ce6.yml
+openapi_spec_hash: 74344fe8287b4d42268ecf5764ff5bf7
config_hash: 48130b77367435ca80edf565b73c49f9
From edd5fb6d807dd72234eeda6f0effddbed4086c9e Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Tue, 21 Jul 2026 22:39:37 +0000
Subject: [PATCH 27/48] feat(api): api update
---
.stats.yml | 4 ++--
.../resources/organizations/categories.py | 20 +++++++++++++------
.../organizations/category_prompts_params.py | 5 ++++-
.../organizations/test_categories.py | 2 ++
4 files changed, 22 insertions(+), 9 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index f92de618..64b19f50 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-52ba02a24f99396c26b151bbf7a65fbcd9d12a49b997f79b43234ec5594f3ce6.yml
-openapi_spec_hash: 74344fe8287b4d42268ecf5764ff5bf7
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-e8c127e7004c24e3a8cac67ca7d7c1848f260f78b76c4398e5e3be2f83863e52.yml
+openapi_spec_hash: 60ae3bc4842a89235799df9e13b26b6e
config_hash: 48130b77367435ca80edf565b73c49f9
diff --git a/src/profound/resources/organizations/categories.py b/src/profound/resources/organizations/categories.py
index 3a0c6009..a25f99a4 100644
--- a/src/profound/resources/organizations/categories.py
+++ b/src/profound/resources/organizations/categories.py
@@ -111,7 +111,7 @@ def assets(
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> CategoryAssetsResponse:
"""
- Assets
+ Get Assets
Args:
extra_headers: Send extra headers
@@ -193,7 +193,7 @@ def get_category_personas(
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> CategoryGetCategoryPersonasResponse:
"""
- Personas
+ Get Personas
Args:
extra_headers: Send extra headers
@@ -221,6 +221,7 @@ def prompts(
analysis_type: List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]] | Omit = omit,
cursor: Optional[str] | Omit = omit,
limit: int | Omit = omit,
+ order_by: Literal["created_at", "prompt"] | Omit = omit,
order_dir: Literal["asc", "desc"] | Omit = omit,
persona_id: SequenceNotStr[str] | Omit = omit,
platform_id: SequenceNotStr[str] | Omit = omit,
@@ -247,7 +248,9 @@ def prompts(
limit: Maximum number of prompts to return.
- order_dir: Sort direction by creation date.
+ order_by: Field used to order prompts.
+
+ order_dir: Sort direction for the selected order field.
persona_id: Filter by persona IDs.
@@ -285,6 +288,7 @@ def prompts(
"analysis_type": analysis_type,
"cursor": cursor,
"limit": limit,
+ "order_by": order_by,
"order_dir": order_dir,
"persona_id": persona_id,
"platform_id": platform_id,
@@ -583,7 +587,7 @@ async def assets(
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> CategoryAssetsResponse:
"""
- Assets
+ Get Assets
Args:
extra_headers: Send extra headers
@@ -665,7 +669,7 @@ async def get_category_personas(
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> CategoryGetCategoryPersonasResponse:
"""
- Personas
+ Get Personas
Args:
extra_headers: Send extra headers
@@ -693,6 +697,7 @@ async def prompts(
analysis_type: List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]] | Omit = omit,
cursor: Optional[str] | Omit = omit,
limit: int | Omit = omit,
+ order_by: Literal["created_at", "prompt"] | Omit = omit,
order_dir: Literal["asc", "desc"] | Omit = omit,
persona_id: SequenceNotStr[str] | Omit = omit,
platform_id: SequenceNotStr[str] | Omit = omit,
@@ -719,7 +724,9 @@ async def prompts(
limit: Maximum number of prompts to return.
- order_dir: Sort direction by creation date.
+ order_by: Field used to order prompts.
+
+ order_dir: Sort direction for the selected order field.
persona_id: Filter by persona IDs.
@@ -757,6 +764,7 @@ async def prompts(
"analysis_type": analysis_type,
"cursor": cursor,
"limit": limit,
+ "order_by": order_by,
"order_dir": order_dir,
"persona_id": persona_id,
"platform_id": platform_id,
diff --git a/src/profound/types/organizations/category_prompts_params.py b/src/profound/types/organizations/category_prompts_params.py
index 19cc5952..d463ebf2 100644
--- a/src/profound/types/organizations/category_prompts_params.py
+++ b/src/profound/types/organizations/category_prompts_params.py
@@ -20,8 +20,11 @@ class CategoryPromptsParams(TypedDict, total=False):
limit: int
"""Maximum number of prompts to return."""
+ order_by: Literal["created_at", "prompt"]
+ """Field used to order prompts."""
+
order_dir: Literal["asc", "desc"]
- """Sort direction by creation date."""
+ """Sort direction for the selected order field."""
persona_id: SequenceNotStr[str]
"""Filter by persona IDs."""
diff --git a/tests/api_resources/organizations/test_categories.py b/tests/api_resources/organizations/test_categories.py
index 5b927599..421745b6 100644
--- a/tests/api_resources/organizations/test_categories.py
+++ b/tests/api_resources/organizations/test_categories.py
@@ -291,6 +291,7 @@ def test_method_prompts_with_all_params(self, client: Profound) -> None:
analysis_type=["visibility"],
cursor="cursor",
limit=1,
+ order_by="created_at",
order_dir="asc",
persona_id=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"],
platform_id=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"],
@@ -888,6 +889,7 @@ async def test_method_prompts_with_all_params(self, async_client: AsyncProfound)
analysis_type=["visibility"],
cursor="cursor",
limit=1,
+ order_by="created_at",
order_dir="asc",
persona_id=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"],
platform_id=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"],
From f07594299fc6faa11bc35f3a11201c989e3d302a Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Tue, 21 Jul 2026 23:17:27 +0000
Subject: [PATCH 28/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 64b19f50..96370c39 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-e8c127e7004c24e3a8cac67ca7d7c1848f260f78b76c4398e5e3be2f83863e52.yml
-openapi_spec_hash: 60ae3bc4842a89235799df9e13b26b6e
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-1b440ce2509c92978ccae11996aa136f92287f02a4e5ee10cb81bc2dfc0cfe5b.yml
+openapi_spec_hash: c8de013f888229691cf6cae8f6cdc94a
config_hash: 48130b77367435ca80edf565b73c49f9
From deaac7ba6787c216e492ee6451ffb7f3437e981e Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Wed, 22 Jul 2026 03:17:26 +0000
Subject: [PATCH 29/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 96370c39..c201c20c 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-1b440ce2509c92978ccae11996aa136f92287f02a4e5ee10cb81bc2dfc0cfe5b.yml
-openapi_spec_hash: c8de013f888229691cf6cae8f6cdc94a
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-fc78c05ebb88ecc90836254044f9102e3ff1dbfb3b07115ca65bf47c48eac1a2.yml
+openapi_spec_hash: 92f644d92617e063e3b82cd082a2673e
config_hash: 48130b77367435ca80edf565b73c49f9
From 37c41ce6b0ddc937a526f3946dd83618a55d4a50 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Wed, 22 Jul 2026 14:17:33 +0000
Subject: [PATCH 30/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index c201c20c..0590ca2d 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-fc78c05ebb88ecc90836254044f9102e3ff1dbfb3b07115ca65bf47c48eac1a2.yml
-openapi_spec_hash: 92f644d92617e063e3b82cd082a2673e
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-664efb98ce917b49d162643dbd8f8ce08c41e26aecd133d1583f47b84190aaba.yml
+openapi_spec_hash: 19ff0a56fdf82e13e7e51b9b3391a4c1
config_hash: 48130b77367435ca80edf565b73c49f9
From ea3d3347c15c9641ab55c7693c1a31b259335a8d Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Wed, 22 Jul 2026 15:17:39 +0000
Subject: [PATCH 31/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 0590ca2d..b636c14e 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-664efb98ce917b49d162643dbd8f8ce08c41e26aecd133d1583f47b84190aaba.yml
-openapi_spec_hash: 19ff0a56fdf82e13e7e51b9b3391a4c1
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-5f34810928a953e7787f5d7dff3a0da1e67ef9ac237d01b9aa4a9e596b0f2a0a.yml
+openapi_spec_hash: e4a76a9d25f44d1dfbd509828504e762
config_hash: 48130b77367435ca80edf565b73c49f9
From 54791e50b45c5df9af9bcb6a524297ccb9a7d744 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 24 Jul 2026 17:23:16 +0000
Subject: [PATCH 32/48] feat(api): api update
---
.stats.yml | 4 +-
src/profound/resources/reports/reports.py | 16 +
.../types/report_get_bots_report_v2_params.py | 3 +
.../report_get_referrals_report_v2_params.py | 3 +
src/profound/types/report_result.py | 2 +-
.../web_search_result_query_response.py | 4 +-
tests/api_resources/test_reports.py | 4 +
uv.lock | 579 ++++++++++++++++--
8 files changed, 574 insertions(+), 41 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index b636c14e..26bb26cb 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-5f34810928a953e7787f5d7dff3a0da1e67ef9ac237d01b9aa4a9e596b0f2a0a.yml
-openapi_spec_hash: e4a76a9d25f44d1dfbd509828504e762
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-ac4bfc34d1fbe01b1ab18763f490bbf2dad4d8692b0e9a3c55e3263662c0b2d6.yml
+openapi_spec_hash: 1af73c070054c564e1b1f90b315a1e89
config_hash: 48130b77367435ca80edf565b73c49f9
diff --git a/src/profound/resources/reports/reports.py b/src/profound/resources/reports/reports.py
index 8fa84fd5..e9e071d6 100644
--- a/src/profound/resources/reports/reports.py
+++ b/src/profound/resources/reports/reports.py
@@ -339,6 +339,7 @@ def get_bots_report_v2(
organization_id: Optional[str] | Omit = omit,
pagination: Pagination | Omit = omit,
tags: SequenceNotStr[str] | Omit = omit,
+ timezone: 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,
@@ -396,6 +397,8 @@ def get_bots_report_v2(
pagination: Pagination settings for the report results.
+ timezone: IANA timezone name for date bucketing and filter boundaries.
+
extra_headers: Send extra headers
extra_query: Add additional query parameters to the request
@@ -421,6 +424,7 @@ def get_bots_report_v2(
"organization_id": organization_id,
"pagination": pagination,
"tags": tags,
+ "timezone": timezone,
},
report_get_bots_report_v2_params.ReportGetBotsReportV2Params,
),
@@ -533,6 +537,7 @@ def get_referrals_report_v2(
order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit,
organization_id: Optional[str] | Omit = omit,
pagination: Pagination | Omit = omit,
+ timezone: 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,
@@ -577,6 +582,8 @@ def get_referrals_report_v2(
pagination: Pagination settings for the report results.
+ timezone: IANA timezone name for date bucketing and filter boundaries.
+
extra_headers: Send extra headers
extra_query: Add additional query parameters to the request
@@ -600,6 +607,7 @@ def get_referrals_report_v2(
"order_by": order_by,
"organization_id": organization_id,
"pagination": pagination,
+ "timezone": timezone,
},
report_get_referrals_report_v2_params.ReportGetReferralsReportV2Params,
),
@@ -2141,6 +2149,7 @@ async def get_bots_report_v2(
organization_id: Optional[str] | Omit = omit,
pagination: Pagination | Omit = omit,
tags: SequenceNotStr[str] | Omit = omit,
+ timezone: 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,
@@ -2198,6 +2207,8 @@ async def get_bots_report_v2(
pagination: Pagination settings for the report results.
+ timezone: IANA timezone name for date bucketing and filter boundaries.
+
extra_headers: Send extra headers
extra_query: Add additional query parameters to the request
@@ -2223,6 +2234,7 @@ async def get_bots_report_v2(
"organization_id": organization_id,
"pagination": pagination,
"tags": tags,
+ "timezone": timezone,
},
report_get_bots_report_v2_params.ReportGetBotsReportV2Params,
),
@@ -2335,6 +2347,7 @@ async def get_referrals_report_v2(
order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit,
organization_id: Optional[str] | Omit = omit,
pagination: Pagination | Omit = omit,
+ timezone: 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,
@@ -2379,6 +2392,8 @@ async def get_referrals_report_v2(
pagination: Pagination settings for the report results.
+ timezone: IANA timezone name for date bucketing and filter boundaries.
+
extra_headers: Send extra headers
extra_query: Add additional query parameters to the request
@@ -2402,6 +2417,7 @@ async def get_referrals_report_v2(
"order_by": order_by,
"organization_id": organization_id,
"pagination": pagination,
+ "timezone": timezone,
},
report_get_referrals_report_v2_params.ReportGetReferralsReportV2Params,
),
diff --git a/src/profound/types/report_get_bots_report_v2_params.py b/src/profound/types/report_get_bots_report_v2_params.py
index ae7e3870..b7b601a0 100644
--- a/src/profound/types/report_get_bots_report_v2_params.py
+++ b/src/profound/types/report_get_bots_report_v2_params.py
@@ -70,6 +70,9 @@ class ReportGetBotsReportV2Params(TypedDict, total=False):
tags: SequenceNotStr[str]
+ timezone: str
+ """IANA timezone name for date bucketing and filter boundaries."""
+
class FilterBotTypeFilter(TypedDict, total=False):
"""Filter by bot_type column (v2 hourly table only)"""
diff --git a/src/profound/types/report_get_referrals_report_v2_params.py b/src/profound/types/report_get_referrals_report_v2_params.py
index 7dbb7421..5d1d799c 100644
--- a/src/profound/types/report_get_referrals_report_v2_params.py
+++ b/src/profound/types/report_get_referrals_report_v2_params.py
@@ -68,6 +68,9 @@ class ReportGetReferralsReportV2Params(TypedDict, total=False):
pagination: Pagination
"""Pagination settings for the report results."""
+ timezone: str
+ """IANA timezone name for date bucketing and filter boundaries."""
+
class FilterReferralSourceFilter(TypedDict, total=False):
"""Filter by referral source"""
diff --git a/src/profound/types/report_result.py b/src/profound/types/report_result.py
index 3c0ebd8e..e3e21688 100644
--- a/src/profound/types/report_result.py
+++ b/src/profound/types/report_result.py
@@ -12,4 +12,4 @@ class ReportResult(BaseModel):
dimensions: List[str]
- metrics: List[Union[float, int]]
+ metrics: List[Union[float, int, str]]
diff --git a/src/profound/types/reports/web_search_result_query_response.py b/src/profound/types/reports/web_search_result_query_response.py
index 8de7e0fe..c6dcd239 100644
--- a/src/profound/types/reports/web_search_result_query_response.py
+++ b/src/profound/types/reports/web_search_result_query_response.py
@@ -1,6 +1,6 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-from typing import List, Optional
+from typing import List, Union, Optional
from ..._models import BaseModel
from ..report_info import ReportInfo
@@ -11,7 +11,7 @@
class Data(BaseModel):
dimensions: List[Optional[str]]
- metrics: List[float]
+ metrics: List[Union[float, str]]
class WebSearchResultQueryResponse(BaseModel):
diff --git a/tests/api_resources/test_reports.py b/tests/api_resources/test_reports.py
index d684f4fe..d697d231 100644
--- a/tests/api_resources/test_reports.py
+++ b/tests/api_resources/test_reports.py
@@ -209,6 +209,7 @@ def test_method_get_bots_report_v2_with_all_params(self, client: Profound) -> No
"offset": 0,
},
tags=["string"],
+ timezone="timezone",
)
assert_matches_type(ReportResponse, report, path=["response"])
@@ -355,6 +356,7 @@ def test_method_get_referrals_report_v2_with_all_params(self, client: Profound)
"limit": 1,
"offset": 0,
},
+ timezone="timezone",
)
assert_matches_type(ReportResponse, report, path=["response"])
@@ -1596,6 +1598,7 @@ async def test_method_get_bots_report_v2_with_all_params(self, async_client: Asy
"offset": 0,
},
tags=["string"],
+ timezone="timezone",
)
assert_matches_type(ReportResponse, report, path=["response"])
@@ -1742,6 +1745,7 @@ async def test_method_get_referrals_report_v2_with_all_params(self, async_client
"limit": 1,
"offset": 0,
},
+ timezone="timezone",
)
assert_matches_type(ReportResponse, report, path=["response"])
diff --git a/uv.lock b/uv.lock
index e8f9a8f7..331b52ce 100644
--- a/uv.lock
+++ b/uv.lock
@@ -1,20 +1,30 @@
version = 1
revision = 3
-requires-python = ">=3.9"
+requires-python = ">=3.9.18"
resolution-markers = [
- "python_full_version >= '3.14' and extra != 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2'",
- "python_full_version >= '3.10' and python_full_version < '3.14' and extra != 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2'",
- "python_full_version < '3.10' and extra != 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2'",
- "python_full_version >= '3.10' and extra == 'group-8-profound-pydantic-v1' and extra != 'group-8-profound-pydantic-v2'",
- "python_full_version < '3.10' and extra == 'group-8-profound-pydantic-v1' and extra != 'group-8-profound-pydantic-v2'",
- "python_full_version >= '3.10' and extra != 'group-8-profound-pydantic-v1' and extra != 'group-8-profound-pydantic-v2'",
- "python_full_version < '3.10' and extra != 'group-8-profound-pydantic-v1' and extra != 'group-8-profound-pydantic-v2'",
+ "python_full_version >= '3.14' and sys_platform == 'win32'",
+ "python_full_version >= '3.14' and sys_platform == 'emscripten'",
+ "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'",
+ "python_full_version == '3.11.*' and sys_platform == 'win32'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'",
+ "python_full_version == '3.11.*' and sys_platform == 'emscripten'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+ "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+ "python_full_version == '3.10.*'",
+ "python_full_version < '3.10'",
]
conflicts = [[
{ package = "profound", group = "pydantic-v1" },
{ package = "profound", group = "pydantic-v2" },
]]
+[manifest]
+members = [
+ "profound",
+ "profound-examples",
+]
+
[[package]]
name = "aiohappyeyeballs"
version = "2.6.1"
@@ -506,10 +516,16 @@ name = "iniconfig"
version = "2.3.0"
source = { registry = "https://pypi.org/simple" }
resolution-markers = [
- "python_full_version >= '3.14' and extra != 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2'",
- "python_full_version >= '3.10' and python_full_version < '3.14' and extra != 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2'",
- "python_full_version >= '3.10' and extra == 'group-8-profound-pydantic-v1' and extra != 'group-8-profound-pydantic-v2'",
- "python_full_version >= '3.10' and extra != 'group-8-profound-pydantic-v1' and extra != 'group-8-profound-pydantic-v2'",
+ "python_full_version >= '3.14' and sys_platform == 'win32'",
+ "python_full_version >= '3.14' and sys_platform == 'emscripten'",
+ "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'",
+ "python_full_version == '3.11.*' and sys_platform == 'win32'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'",
+ "python_full_version == '3.11.*' and sys_platform == 'emscripten'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+ "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+ "python_full_version == '3.10.*'",
]
sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" }
wheels = [
@@ -536,10 +552,16 @@ name = "markdown-it-py"
version = "4.0.0"
source = { registry = "https://pypi.org/simple" }
resolution-markers = [
- "python_full_version >= '3.14' and extra != 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2'",
- "python_full_version >= '3.10' and python_full_version < '3.14' and extra != 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2'",
- "python_full_version >= '3.10' and extra == 'group-8-profound-pydantic-v1' and extra != 'group-8-profound-pydantic-v2'",
- "python_full_version >= '3.10' and extra != 'group-8-profound-pydantic-v1' and extra != 'group-8-profound-pydantic-v2'",
+ "python_full_version >= '3.14' and sys_platform == 'win32'",
+ "python_full_version >= '3.14' and sys_platform == 'emscripten'",
+ "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'",
+ "python_full_version == '3.11.*' and sys_platform == 'win32'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'",
+ "python_full_version == '3.11.*' and sys_platform == 'emscripten'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+ "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+ "python_full_version == '3.10.*'",
]
dependencies = [
{ name = "mdurl", marker = "python_full_version >= '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" },
@@ -777,6 +799,269 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl", hash = "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827", size = 23438, upload-time = "2025-12-20T14:08:52.782Z" },
]
+[[package]]
+name = "numpy"
+version = "2.0.2"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version < '3.10'",
+]
+sdist = { url = "https://files.pythonhosted.org/packages/a9/75/10dd1f8116a8b796cb2c737b674e02d02e80454bda953fa7e65d8c12b016/numpy-2.0.2.tar.gz", hash = "sha256:883c987dee1880e2a864ab0dc9892292582510604156762362d9326444636e78", size = 18902015, upload-time = "2024-08-26T20:19:40.945Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/21/91/3495b3237510f79f5d81f2508f9f13fea78ebfdf07538fc7444badda173d/numpy-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51129a29dbe56f9ca83438b706e2e69a39892b5eda6cedcb6b0c9fdc9b0d3ece", size = 21165245, upload-time = "2024-08-26T20:04:14.625Z" },
+ { url = "https://files.pythonhosted.org/packages/05/33/26178c7d437a87082d11019292dce6d3fe6f0e9026b7b2309cbf3e489b1d/numpy-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f15975dfec0cf2239224d80e32c3170b1d168335eaedee69da84fbe9f1f9cd04", size = 13738540, upload-time = "2024-08-26T20:04:36.784Z" },
+ { url = "https://files.pythonhosted.org/packages/ec/31/cc46e13bf07644efc7a4bf68df2df5fb2a1a88d0cd0da9ddc84dc0033e51/numpy-2.0.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8c5713284ce4e282544c68d1c3b2c7161d38c256d2eefc93c1d683cf47683e66", size = 5300623, upload-time = "2024-08-26T20:04:46.491Z" },
+ { url = "https://files.pythonhosted.org/packages/6e/16/7bfcebf27bb4f9d7ec67332ffebee4d1bf085c84246552d52dbb548600e7/numpy-2.0.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:becfae3ddd30736fe1889a37f1f580e245ba79a5855bff5f2a29cb3ccc22dd7b", size = 6901774, upload-time = "2024-08-26T20:04:58.173Z" },
+ { url = "https://files.pythonhosted.org/packages/f9/a3/561c531c0e8bf082c5bef509d00d56f82e0ea7e1e3e3a7fc8fa78742a6e5/numpy-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2da5960c3cf0df7eafefd806d4e612c5e19358de82cb3c343631188991566ccd", size = 13907081, upload-time = "2024-08-26T20:05:19.098Z" },
+ { url = "https://files.pythonhosted.org/packages/fa/66/f7177ab331876200ac7563a580140643d1179c8b4b6a6b0fc9838de2a9b8/numpy-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:496f71341824ed9f3d2fd36cf3ac57ae2e0165c143b55c3a035ee219413f3318", size = 19523451, upload-time = "2024-08-26T20:05:47.479Z" },
+ { url = "https://files.pythonhosted.org/packages/25/7f/0b209498009ad6453e4efc2c65bcdf0ae08a182b2b7877d7ab38a92dc542/numpy-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a61ec659f68ae254e4d237816e33171497e978140353c0c2038d46e63282d0c8", size = 19927572, upload-time = "2024-08-26T20:06:17.137Z" },
+ { url = "https://files.pythonhosted.org/packages/3e/df/2619393b1e1b565cd2d4c4403bdd979621e2c4dea1f8532754b2598ed63b/numpy-2.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d731a1c6116ba289c1e9ee714b08a8ff882944d4ad631fd411106a30f083c326", size = 14400722, upload-time = "2024-08-26T20:06:39.16Z" },
+ { url = "https://files.pythonhosted.org/packages/22/ad/77e921b9f256d5da36424ffb711ae79ca3f451ff8489eeca544d0701d74a/numpy-2.0.2-cp310-cp310-win32.whl", hash = "sha256:984d96121c9f9616cd33fbd0618b7f08e0cfc9600a7ee1d6fd9b239186d19d97", size = 6472170, upload-time = "2024-08-26T20:06:50.361Z" },
+ { url = "https://files.pythonhosted.org/packages/10/05/3442317535028bc29cf0c0dd4c191a4481e8376e9f0db6bcf29703cadae6/numpy-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:c7b0be4ef08607dd04da4092faee0b86607f111d5ae68036f16cc787e250a131", size = 15905558, upload-time = "2024-08-26T20:07:13.881Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/cf/034500fb83041aa0286e0fb16e7c76e5c8b67c0711bb6e9e9737a717d5fe/numpy-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:49ca4decb342d66018b01932139c0961a8f9ddc7589611158cb3c27cbcf76448", size = 21169137, upload-time = "2024-08-26T20:07:45.345Z" },
+ { url = "https://files.pythonhosted.org/packages/4a/d9/32de45561811a4b87fbdee23b5797394e3d1504b4a7cf40c10199848893e/numpy-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:11a76c372d1d37437857280aa142086476136a8c0f373b2e648ab2c8f18fb195", size = 13703552, upload-time = "2024-08-26T20:08:06.666Z" },
+ { url = "https://files.pythonhosted.org/packages/c1/ca/2f384720020c7b244d22508cb7ab23d95f179fcfff33c31a6eeba8d6c512/numpy-2.0.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:807ec44583fd708a21d4a11d94aedf2f4f3c3719035c76a2bbe1fe8e217bdc57", size = 5298957, upload-time = "2024-08-26T20:08:15.83Z" },
+ { url = "https://files.pythonhosted.org/packages/0e/78/a3e4f9fb6aa4e6fdca0c5428e8ba039408514388cf62d89651aade838269/numpy-2.0.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8cafab480740e22f8d833acefed5cc87ce276f4ece12fdaa2e8903db2f82897a", size = 6905573, upload-time = "2024-08-26T20:08:27.185Z" },
+ { url = "https://files.pythonhosted.org/packages/a0/72/cfc3a1beb2caf4efc9d0b38a15fe34025230da27e1c08cc2eb9bfb1c7231/numpy-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a15f476a45e6e5a3a79d8a14e62161d27ad897381fecfa4a09ed5322f2085669", size = 13914330, upload-time = "2024-08-26T20:08:48.058Z" },
+ { url = "https://files.pythonhosted.org/packages/ba/a8/c17acf65a931ce551fee11b72e8de63bf7e8a6f0e21add4c937c83563538/numpy-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13e689d772146140a252c3a28501da66dfecd77490b498b168b501835041f951", size = 19534895, upload-time = "2024-08-26T20:09:16.536Z" },
+ { url = "https://files.pythonhosted.org/packages/ba/86/8767f3d54f6ae0165749f84648da9dcc8cd78ab65d415494962c86fac80f/numpy-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9ea91dfb7c3d1c56a0e55657c0afb38cf1eeae4544c208dc465c3c9f3a7c09f9", size = 19937253, upload-time = "2024-08-26T20:09:46.263Z" },
+ { url = "https://files.pythonhosted.org/packages/df/87/f76450e6e1c14e5bb1eae6836478b1028e096fd02e85c1c37674606ab752/numpy-2.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c1c9307701fec8f3f7a1e6711f9089c06e6284b3afbbcd259f7791282d660a15", size = 14414074, upload-time = "2024-08-26T20:10:08.483Z" },
+ { url = "https://files.pythonhosted.org/packages/5c/ca/0f0f328e1e59f73754f06e1adfb909de43726d4f24c6a3f8805f34f2b0fa/numpy-2.0.2-cp311-cp311-win32.whl", hash = "sha256:a392a68bd329eafac5817e5aefeb39038c48b671afd242710b451e76090e81f4", size = 6470640, upload-time = "2024-08-26T20:10:19.732Z" },
+ { url = "https://files.pythonhosted.org/packages/eb/57/3a3f14d3a759dcf9bf6e9eda905794726b758819df4663f217d658a58695/numpy-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:286cd40ce2b7d652a6f22efdfc6d1edf879440e53e76a75955bc0c826c7e64dc", size = 15910230, upload-time = "2024-08-26T20:10:43.413Z" },
+ { url = "https://files.pythonhosted.org/packages/45/40/2e117be60ec50d98fa08c2f8c48e09b3edea93cfcabd5a9ff6925d54b1c2/numpy-2.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:df55d490dea7934f330006d0f81e8551ba6010a5bf035a249ef61a94f21c500b", size = 20895803, upload-time = "2024-08-26T20:11:13.916Z" },
+ { url = "https://files.pythonhosted.org/packages/46/92/1b8b8dee833f53cef3e0a3f69b2374467789e0bb7399689582314df02651/numpy-2.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8df823f570d9adf0978347d1f926b2a867d5608f434a7cff7f7908c6570dcf5e", size = 13471835, upload-time = "2024-08-26T20:11:34.779Z" },
+ { url = "https://files.pythonhosted.org/packages/7f/19/e2793bde475f1edaea6945be141aef6c8b4c669b90c90a300a8954d08f0a/numpy-2.0.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9a92ae5c14811e390f3767053ff54eaee3bf84576d99a2456391401323f4ec2c", size = 5038499, upload-time = "2024-08-26T20:11:43.902Z" },
+ { url = "https://files.pythonhosted.org/packages/e3/ff/ddf6dac2ff0dd50a7327bcdba45cb0264d0e96bb44d33324853f781a8f3c/numpy-2.0.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:a842d573724391493a97a62ebbb8e731f8a5dcc5d285dfc99141ca15a3302d0c", size = 6633497, upload-time = "2024-08-26T20:11:55.09Z" },
+ { url = "https://files.pythonhosted.org/packages/72/21/67f36eac8e2d2cd652a2e69595a54128297cdcb1ff3931cfc87838874bd4/numpy-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05e238064fc0610c840d1cf6a13bf63d7e391717d247f1bf0318172e759e692", size = 13621158, upload-time = "2024-08-26T20:12:14.95Z" },
+ { url = "https://files.pythonhosted.org/packages/39/68/e9f1126d757653496dbc096cb429014347a36b228f5a991dae2c6b6cfd40/numpy-2.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0123ffdaa88fa4ab64835dcbde75dcdf89c453c922f18dced6e27c90d1d0ec5a", size = 19236173, upload-time = "2024-08-26T20:12:44.049Z" },
+ { url = "https://files.pythonhosted.org/packages/d1/e9/1f5333281e4ebf483ba1c888b1d61ba7e78d7e910fdd8e6499667041cc35/numpy-2.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:96a55f64139912d61de9137f11bf39a55ec8faec288c75a54f93dfd39f7eb40c", size = 19634174, upload-time = "2024-08-26T20:13:13.634Z" },
+ { url = "https://files.pythonhosted.org/packages/71/af/a469674070c8d8408384e3012e064299f7a2de540738a8e414dcfd639996/numpy-2.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec9852fb39354b5a45a80bdab5ac02dd02b15f44b3804e9f00c556bf24b4bded", size = 14099701, upload-time = "2024-08-26T20:13:34.851Z" },
+ { url = "https://files.pythonhosted.org/packages/d0/3d/08ea9f239d0e0e939b6ca52ad403c84a2bce1bde301a8eb4888c1c1543f1/numpy-2.0.2-cp312-cp312-win32.whl", hash = "sha256:671bec6496f83202ed2d3c8fdc486a8fc86942f2e69ff0e986140339a63bcbe5", size = 6174313, upload-time = "2024-08-26T20:13:45.653Z" },
+ { url = "https://files.pythonhosted.org/packages/b2/b5/4ac39baebf1fdb2e72585c8352c56d063b6126be9fc95bd2bb5ef5770c20/numpy-2.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:cfd41e13fdc257aa5778496b8caa5e856dc4896d4ccf01841daee1d96465467a", size = 15606179, upload-time = "2024-08-26T20:14:08.786Z" },
+ { url = "https://files.pythonhosted.org/packages/43/c1/41c8f6df3162b0c6ffd4437d729115704bd43363de0090c7f913cfbc2d89/numpy-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9059e10581ce4093f735ed23f3b9d283b9d517ff46009ddd485f1747eb22653c", size = 21169942, upload-time = "2024-08-26T20:14:40.108Z" },
+ { url = "https://files.pythonhosted.org/packages/39/bc/fd298f308dcd232b56a4031fd6ddf11c43f9917fbc937e53762f7b5a3bb1/numpy-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:423e89b23490805d2a5a96fe40ec507407b8ee786d66f7328be214f9679df6dd", size = 13711512, upload-time = "2024-08-26T20:15:00.985Z" },
+ { url = "https://files.pythonhosted.org/packages/96/ff/06d1aa3eeb1c614eda245c1ba4fb88c483bee6520d361641331872ac4b82/numpy-2.0.2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:2b2955fa6f11907cf7a70dab0d0755159bca87755e831e47932367fc8f2f2d0b", size = 5306976, upload-time = "2024-08-26T20:15:10.876Z" },
+ { url = "https://files.pythonhosted.org/packages/2d/98/121996dcfb10a6087a05e54453e28e58694a7db62c5a5a29cee14c6e047b/numpy-2.0.2-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:97032a27bd9d8988b9a97a8c4d2c9f2c15a81f61e2f21404d7e8ef00cb5be729", size = 6906494, upload-time = "2024-08-26T20:15:22.055Z" },
+ { url = "https://files.pythonhosted.org/packages/15/31/9dffc70da6b9bbf7968f6551967fc21156207366272c2a40b4ed6008dc9b/numpy-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e795a8be3ddbac43274f18588329c72939870a16cae810c2b73461c40718ab1", size = 13912596, upload-time = "2024-08-26T20:15:42.452Z" },
+ { url = "https://files.pythonhosted.org/packages/b9/14/78635daab4b07c0930c919d451b8bf8c164774e6a3413aed04a6d95758ce/numpy-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b258c385842546006213344c50655ff1555a9338e2e5e02a0756dc3e803dd", size = 19526099, upload-time = "2024-08-26T20:16:11.048Z" },
+ { url = "https://files.pythonhosted.org/packages/26/4c/0eeca4614003077f68bfe7aac8b7496f04221865b3a5e7cb230c9d055afd/numpy-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fec9451a7789926bcf7c2b8d187292c9f93ea30284802a0ab3f5be8ab36865d", size = 19932823, upload-time = "2024-08-26T20:16:40.171Z" },
+ { url = "https://files.pythonhosted.org/packages/f1/46/ea25b98b13dccaebddf1a803f8c748680d972e00507cd9bc6dcdb5aa2ac1/numpy-2.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9189427407d88ff25ecf8f12469d4d39d35bee1db5d39fc5c168c6f088a6956d", size = 14404424, upload-time = "2024-08-26T20:17:02.604Z" },
+ { url = "https://files.pythonhosted.org/packages/c8/a6/177dd88d95ecf07e722d21008b1b40e681a929eb9e329684d449c36586b2/numpy-2.0.2-cp39-cp39-win32.whl", hash = "sha256:905d16e0c60200656500c95b6b8dca5d109e23cb24abc701d41c02d74c6b3afa", size = 6476809, upload-time = "2024-08-26T20:17:13.553Z" },
+ { url = "https://files.pythonhosted.org/packages/ea/2b/7fc9f4e7ae5b507c1a3a21f0f15ed03e794c1242ea8a242ac158beb56034/numpy-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:a3f4ab0caa7f053f6797fcd4e1e25caee367db3112ef2b6ef82d749530768c73", size = 15911314, upload-time = "2024-08-26T20:17:36.72Z" },
+ { url = "https://files.pythonhosted.org/packages/8f/3b/df5a870ac6a3be3a86856ce195ef42eec7ae50d2a202be1f5a4b3b340e14/numpy-2.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7f0a0c6f12e07fa94133c8a67404322845220c06a9e80e85999afe727f7438b8", size = 21025288, upload-time = "2024-08-26T20:18:07.732Z" },
+ { url = "https://files.pythonhosted.org/packages/2c/97/51af92f18d6f6f2d9ad8b482a99fb74e142d71372da5d834b3a2747a446e/numpy-2.0.2-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:312950fdd060354350ed123c0e25a71327d3711584beaef30cdaa93320c392d4", size = 6762793, upload-time = "2024-08-26T20:18:19.125Z" },
+ { url = "https://files.pythonhosted.org/packages/12/46/de1fbd0c1b5ccaa7f9a005b66761533e2f6a3e560096682683a223631fe9/numpy-2.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26df23238872200f63518dd2aa984cfca675d82469535dc7162dc2ee52d9dd5c", size = 19334885, upload-time = "2024-08-26T20:18:47.237Z" },
+ { url = "https://files.pythonhosted.org/packages/cc/dc/d330a6faefd92b446ec0f0dfea4c3207bb1fef3c4771d19cf4543efd2c78/numpy-2.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a46288ec55ebbd58947d31d72be2c63cbf839f0a63b49cb755022310792a3385", size = 15828784, upload-time = "2024-08-26T20:19:11.19Z" },
+]
+
+[[package]]
+name = "numpy"
+version = "2.2.6"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version == '3.10.*'",
+]
+sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245, upload-time = "2025-05-17T21:27:58.555Z" },
+ { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048, upload-time = "2025-05-17T21:28:21.406Z" },
+ { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542, upload-time = "2025-05-17T21:28:30.931Z" },
+ { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301, upload-time = "2025-05-17T21:28:41.613Z" },
+ { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320, upload-time = "2025-05-17T21:29:02.78Z" },
+ { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050, upload-time = "2025-05-17T21:29:27.675Z" },
+ { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034, upload-time = "2025-05-17T21:29:51.102Z" },
+ { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185, upload-time = "2025-05-17T21:30:18.703Z" },
+ { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149, upload-time = "2025-05-17T21:30:29.788Z" },
+ { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620, upload-time = "2025-05-17T21:30:48.994Z" },
+ { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963, upload-time = "2025-05-17T21:31:19.36Z" },
+ { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743, upload-time = "2025-05-17T21:31:41.087Z" },
+ { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616, upload-time = "2025-05-17T21:31:50.072Z" },
+ { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579, upload-time = "2025-05-17T21:32:01.712Z" },
+ { url = "https://files.pythonhosted.org/packages/52/b8/7f0554d49b565d0171eab6e99001846882000883998e7b7d9f0d98b1f934/numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a", size = 14312005, upload-time = "2025-05-17T21:32:23.332Z" },
+ { url = "https://files.pythonhosted.org/packages/b3/dd/2238b898e51bd6d389b7389ffb20d7f4c10066d80351187ec8e303a5a475/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf", size = 16821570, upload-time = "2025-05-17T21:32:47.991Z" },
+ { url = "https://files.pythonhosted.org/packages/83/6c/44d0325722cf644f191042bf47eedad61c1e6df2432ed65cbe28509d404e/numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1", size = 15818548, upload-time = "2025-05-17T21:33:11.728Z" },
+ { url = "https://files.pythonhosted.org/packages/ae/9d/81e8216030ce66be25279098789b665d49ff19eef08bfa8cb96d4957f422/numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab", size = 18620521, upload-time = "2025-05-17T21:33:39.139Z" },
+ { url = "https://files.pythonhosted.org/packages/6a/fd/e19617b9530b031db51b0926eed5345ce8ddc669bb3bc0044b23e275ebe8/numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47", size = 6525866, upload-time = "2025-05-17T21:33:50.273Z" },
+ { url = "https://files.pythonhosted.org/packages/31/0a/f354fb7176b81747d870f7991dc763e157a934c717b67b58456bc63da3df/numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303", size = 12907455, upload-time = "2025-05-17T21:34:09.135Z" },
+ { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348, upload-time = "2025-05-17T21:34:39.648Z" },
+ { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362, upload-time = "2025-05-17T21:35:01.241Z" },
+ { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103, upload-time = "2025-05-17T21:35:10.622Z" },
+ { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382, upload-time = "2025-05-17T21:35:21.414Z" },
+ { url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462, upload-time = "2025-05-17T21:35:42.174Z" },
+ { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618, upload-time = "2025-05-17T21:36:06.711Z" },
+ { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511, upload-time = "2025-05-17T21:36:29.965Z" },
+ { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783, upload-time = "2025-05-17T21:36:56.883Z" },
+ { url = "https://files.pythonhosted.org/packages/57/0a/72d5a3527c5ebffcd47bde9162c39fae1f90138c961e5296491ce778e682/numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4", size = 6246506, upload-time = "2025-05-17T21:37:07.368Z" },
+ { url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2", size = 12614190, upload-time = "2025-05-17T21:37:26.213Z" },
+ { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828, upload-time = "2025-05-17T21:37:56.699Z" },
+ { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006, upload-time = "2025-05-17T21:38:18.291Z" },
+ { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765, upload-time = "2025-05-17T21:38:27.319Z" },
+ { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736, upload-time = "2025-05-17T21:38:38.141Z" },
+ { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719, upload-time = "2025-05-17T21:38:58.433Z" },
+ { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072, upload-time = "2025-05-17T21:39:22.638Z" },
+ { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213, upload-time = "2025-05-17T21:39:45.865Z" },
+ { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632, upload-time = "2025-05-17T21:40:13.331Z" },
+ { url = "https://files.pythonhosted.org/packages/f0/3b/5cba2b1d88760ef86596ad0f3d484b1cbff7c115ae2429678465057c5155/numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd", size = 6244532, upload-time = "2025-05-17T21:43:46.099Z" },
+ { url = "https://files.pythonhosted.org/packages/cb/3b/d58c12eafcb298d4e6d0d40216866ab15f59e55d148a5658bb3132311fcf/numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c", size = 12610885, upload-time = "2025-05-17T21:44:05.145Z" },
+ { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467, upload-time = "2025-05-17T21:40:44Z" },
+ { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144, upload-time = "2025-05-17T21:41:05.695Z" },
+ { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217, upload-time = "2025-05-17T21:41:15.903Z" },
+ { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014, upload-time = "2025-05-17T21:41:27.321Z" },
+ { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935, upload-time = "2025-05-17T21:41:49.738Z" },
+ { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122, upload-time = "2025-05-17T21:42:14.046Z" },
+ { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143, upload-time = "2025-05-17T21:42:37.464Z" },
+ { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260, upload-time = "2025-05-17T21:43:05.189Z" },
+ { url = "https://files.pythonhosted.org/packages/09/04/f2f83279d287407cf36a7a8053a5abe7be3622a4363337338f2585e4afda/numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff", size = 6377225, upload-time = "2025-05-17T21:43:16.254Z" },
+ { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374, upload-time = "2025-05-17T21:43:35.479Z" },
+ { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391, upload-time = "2025-05-17T21:44:35.948Z" },
+ { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754, upload-time = "2025-05-17T21:44:47.446Z" },
+ { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476, upload-time = "2025-05-17T21:45:11.871Z" },
+ { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666, upload-time = "2025-05-17T21:45:31.426Z" },
+]
+
+[[package]]
+name = "numpy"
+version = "2.4.6"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version == '3.11.*' and sys_platform == 'win32'",
+ "python_full_version == '3.11.*' and sys_platform == 'emscripten'",
+ "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+]
+sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807, upload-time = "2026-05-18T23:37:14.07Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b3/49/ec46835a70be8fa6446c495126ac84fdb28cb2558e1620ffb87a10c8b64c/numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4", size = 16969194, upload-time = "2026-05-18T23:33:13.503Z" },
+ { url = "https://files.pythonhosted.org/packages/0e/0d/f5957185c0ee2f3e12f78715aa9e3b353fd83633316c8532b38faa37e3f6/numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d", size = 14964111, upload-time = "2026-05-18T23:33:17.795Z" },
+ { url = "https://files.pythonhosted.org/packages/ad/40/40a40ee0ddf7ceb782c49af278894b686e586d65d8c1889c8b5da01a3d7d/numpy-2.4.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8", size = 5469159, upload-time = "2026-05-18T23:33:20.654Z" },
+ { url = "https://files.pythonhosted.org/packages/63/13/f9a8046535cb21deae82f8d03de9617e08882d274fad2539630761888228/numpy-2.4.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538", size = 6798936, upload-time = "2026-05-18T23:33:22.987Z" },
+ { url = "https://files.pythonhosted.org/packages/33/a8/6fa8c1a345a8c85dbb21932c447bee07c30a2c2a3f31e369c0a84b300147/numpy-2.4.6-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ab0a9c4ffb1a6d95ef519fe4247dba8eb6b18ad93999f76b7f657039acabd47", size = 15966692, upload-time = "2026-05-18T23:33:26.62Z" },
+ { url = "https://files.pythonhosted.org/packages/02/03/74fe2a4cb3817d94d86402f2506554130a2f01414e299b5a843e5a8a957f/numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93", size = 16918164, upload-time = "2026-05-18T23:33:29.955Z" },
+ { url = "https://files.pythonhosted.org/packages/c5/80/3615be3313f7e7696609bc194b9f0101da809df79e859bdb84e0cd043f46/numpy-2.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2d37ab77531417474168eb79d6d80b14f821a966818505d03013d0833edb7a8", size = 17322877, upload-time = "2026-05-18T23:33:34.724Z" },
+ { url = "https://files.pythonhosted.org/packages/ca/ac/a691e0fe2675e370d0e08ff905adc49a1c8830e8cae03efe4477e92cd55d/numpy-2.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f407cb6b8e9d6d8c626bc73c945db1706035af8fd632295547bf1c9e46d092d6", size = 18651487, upload-time = "2026-05-18T23:33:38.217Z" },
+ { url = "https://files.pythonhosted.org/packages/15/a7/9bc1cd626d7bf6869bfedf27b91b6ab5dd607758bf8e959d6fa80c6a59cb/numpy-2.4.6-cp311-cp311-win32.whl", hash = "sha256:ddea102b48f9e339f3948bf22040944184627a30fdf7f858667673b9c5f033c8", size = 6233945, upload-time = "2026-05-18T23:33:41.331Z" },
+ { url = "https://files.pythonhosted.org/packages/c5/31/7fc6239c12bce7e931463251cca4426c465e1876ba3cc785402ef4dd8f4e/numpy-2.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:1e254a00cdf42b1e4d5b3d68d33af63268d41340d8885df2ab6470f2e1500147", size = 12608406, upload-time = "2026-05-18T23:33:44.131Z" },
+ { url = "https://files.pythonhosted.org/packages/27/83/140f85a466595a16382996a1bf06b2b54bcd597488921b0c9daaeeda72af/numpy-2.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:ed9749eef4cbd126da3dc1d6bcb3a57f5eb7ac6a6484146bdbf743f552dfc577", size = 10479528, upload-time = "2026-05-18T23:33:50.725Z" },
+ { url = "https://files.pythonhosted.org/packages/95/2a/3d7b5ac8aac24feaf9ad7ed58f45b0bbc06d37e4338ae84c9f2298b570f9/numpy-2.4.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1", size = 16689119, upload-time = "2026-05-18T23:33:54.065Z" },
+ { url = "https://files.pythonhosted.org/packages/ea/12/92c4c131527599e8288d6918e888d88726f84d805d784b771f32408aeaef/numpy-2.4.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb", size = 14699246, upload-time = "2026-05-18T23:33:57.621Z" },
+ { url = "https://files.pythonhosted.org/packages/ad/fe/c0a6b7b2ca128a8fb228575147073b660656734b8ebe4d76c8fd748dcc79/numpy-2.4.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41", size = 5204410, upload-time = "2026-05-18T23:34:00.302Z" },
+ { url = "https://files.pythonhosted.org/packages/f3/d4/9770d14ba719432bb90a421bfd443872ed0f70f7264b64bec12ea363d5fd/numpy-2.4.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698", size = 6551240, upload-time = "2026-05-18T23:34:02.852Z" },
+ { url = "https://files.pythonhosted.org/packages/c9/c6/50a46a6205feba2343f1d6d17438107c5dc491ed1c736e6ea68689fd906b/numpy-2.4.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f", size = 15671012, upload-time = "2026-05-18T23:34:05.485Z" },
+ { url = "https://files.pythonhosted.org/packages/99/60/14115e6364fa676c5397c2ad3004e527e9aa487abf5d0706ec81bbd08529/numpy-2.4.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853", size = 16645538, upload-time = "2026-05-18T23:34:09.265Z" },
+ { url = "https://files.pythonhosted.org/packages/ae/c5/693cbe59e57db94d2231fa519ca3978dc9e19da5a8f088588f5c6e947ff2/numpy-2.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a", size = 17020706, upload-time = "2026-05-18T23:34:13.053Z" },
+ { url = "https://files.pythonhosted.org/packages/ef/fc/85b7c4eff9b4966ade25c2273cf7e7012e92366c032058653934b37de044/numpy-2.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2", size = 18368541, upload-time = "2026-05-18T23:34:17.024Z" },
+ { url = "https://files.pythonhosted.org/packages/f6/81/e1b27545deedce7f4a0b348618c6b62d74e36a4dc9ccd42f3eb2f85eee32/numpy-2.4.6-cp312-cp312-win32.whl", hash = "sha256:e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45", size = 5962825, upload-time = "2026-05-18T23:34:20.3Z" },
+ { url = "https://files.pythonhosted.org/packages/ab/ca/feab00bd44aa5fe1ad2c18f08b4d3bb92e26484b0b1d1443897809ed528c/numpy-2.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751", size = 12321687, upload-time = "2026-05-18T23:34:23.095Z" },
+ { url = "https://files.pythonhosted.org/packages/63/cf/5a6d34850a39d1093558564f77ee8e8e0bee5061151b8f05a55711001ec7/numpy-2.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8", size = 10221482, upload-time = "2026-05-18T23:34:25.876Z" },
+ { url = "https://files.pythonhosted.org/packages/fb/82/bdab26d7438c6791ca31b7c024ca37c1eab8b726ba236129005cd4a06e45/numpy-2.4.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0", size = 16684648, upload-time = "2026-05-18T23:34:29.41Z" },
+ { url = "https://files.pythonhosted.org/packages/1b/30/a80189bcc7f5e4258b3fbc3968d909d1756f54d023299ecc39ad6fdb9ef8/numpy-2.4.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb", size = 14693902, upload-time = "2026-05-18T23:34:33.013Z" },
+ { url = "https://files.pythonhosted.org/packages/97/12/70b5d0d7c15e1ebb8a6a84a8caa1d19e181d84fb58bb6d70aca29099dec1/numpy-2.4.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f", size = 5198992, upload-time = "2026-05-18T23:34:36.132Z" },
+ { url = "https://files.pythonhosted.org/packages/ba/8c/ebd2a8f8a83541f8d38cc5667e8c2b69cecfd30da6e45693e8158857d44b/numpy-2.4.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3", size = 6546944, upload-time = "2026-05-18T23:34:38.484Z" },
+ { url = "https://files.pythonhosted.org/packages/bb/c5/7b863a97a91671a0338f4253bd3b5a3d3852f0692dae91711c9f4a10e787/numpy-2.4.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b", size = 15669392, upload-time = "2026-05-18T23:34:41.257Z" },
+ { url = "https://files.pythonhosted.org/packages/a5/9d/3584b9984ca4c047aea75214ce1a4c4c73d849bd71b604264b7f5653f8a8/numpy-2.4.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089", size = 16633220, upload-time = "2026-05-18T23:34:45.075Z" },
+ { url = "https://files.pythonhosted.org/packages/05/ae/7c67fba23bd98caec7c99261f3a16072ade14813486b0282cb29846de832/numpy-2.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a", size = 17020800, upload-time = "2026-05-18T23:34:49.065Z" },
+ { url = "https://files.pythonhosted.org/packages/d9/5d/3b6725cb31d983c5e66916f5d36f6d7e5521129e4c4404d64f918292a5b6/numpy-2.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605", size = 18357600, upload-time = "2026-05-18T23:34:52.709Z" },
+ { url = "https://files.pythonhosted.org/packages/f7/da/2ccc6c2fe8898dee01d90c75c5f5f914a23daf99e3e0f59516a08760c8b5/numpy-2.4.6-cp313-cp313-win32.whl", hash = "sha256:56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91", size = 5961134, upload-time = "2026-05-18T23:34:55.618Z" },
+ { url = "https://files.pythonhosted.org/packages/b5/cd/9cc4dc876fb065d5c220aae4d5e14826b2715331bb7618ce1fb07a679d99/numpy-2.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359", size = 12318598, upload-time = "2026-05-18T23:34:58.928Z" },
+ { url = "https://files.pythonhosted.org/packages/39/1e/c0bcba1f8694116485fe28fd1be698c278fcda4141c5b0e53a2aed8b12a8/numpy-2.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778", size = 10222272, upload-time = "2026-05-18T23:35:02.167Z" },
+ { url = "https://files.pythonhosted.org/packages/63/6d/cc5619247c8f4204e507f5883528372e4ac4bb189e579fb859a12e480b1f/numpy-2.4.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1", size = 14821197, upload-time = "2026-05-18T23:35:05.468Z" },
+ { url = "https://files.pythonhosted.org/packages/00/58/f1c39161c87d9e9bed660f1ed4bafc0e403d5ec9650b6dd77aead07d489b/numpy-2.4.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe", size = 5326287, upload-time = "2026-05-18T23:35:08.693Z" },
+ { url = "https://files.pythonhosted.org/packages/af/57/3917ab0fd97f271a8694513581b8a36c655f111c446852c302f04ccdb6fc/numpy-2.4.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997", size = 6646763, upload-time = "2026-05-18T23:35:11.459Z" },
+ { url = "https://files.pythonhosted.org/packages/eb/0f/037e64c494b67581ae18193d770adef354c41f3f2c8ebf865602d949bf8f/numpy-2.4.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20", size = 15728070, upload-time = "2026-05-18T23:35:14.79Z" },
+ { url = "https://files.pythonhosted.org/packages/21/a6/5d2bae9c9542eb4df16dc9c46dc79c186e9bad53805dfa5399a6023c6db0/numpy-2.4.6-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d", size = 16681752, upload-time = "2026-05-18T23:35:18.836Z" },
+ { url = "https://files.pythonhosted.org/packages/92/14/23d1dfb410ae362cd59ce53e936b1513d545eb40db3949ced632e19a459e/numpy-2.4.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67", size = 17086024, upload-time = "2026-05-18T23:35:22.52Z" },
+ { url = "https://files.pythonhosted.org/packages/4b/6e/23595a2c642cdf3bc567877064bdd7f91c8b0038a4453cf2daf7248eafe9/numpy-2.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd", size = 18403398, upload-time = "2026-05-18T23:35:26.398Z" },
+ { url = "https://files.pythonhosted.org/packages/8a/90/0ac3bc947217e66dec77e7cbc6a1979d1af70b6461b82f620d3bccd5e4c8/numpy-2.4.6-cp313-cp313t-win32.whl", hash = "sha256:29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab", size = 6084971, upload-time = "2026-05-18T23:35:29.387Z" },
+ { url = "https://files.pythonhosted.org/packages/77/71/5673e351671a1d2bd6063b91b44f70c0affea7d1516fa7a6572941ba4aa1/numpy-2.4.6-cp313-cp313t-win_amd64.whl", hash = "sha256:25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75", size = 12458532, upload-time = "2026-05-18T23:35:32.175Z" },
+ { url = "https://files.pythonhosted.org/packages/3f/88/19d3503c5046e688f049274b27a3ef3d771152fa80d3ba3d01a3dff61abe/numpy-2.4.6-cp313-cp313t-win_arm64.whl", hash = "sha256:1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd", size = 10291881, upload-time = "2026-05-18T23:35:35.465Z" },
+ { url = "https://files.pythonhosted.org/packages/f8/91/3ab2044d05fd16d343c5ac2e69b127f1b2854040dd20b193257c78028bd3/numpy-2.4.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079", size = 16683458, upload-time = "2026-05-18T23:35:38.353Z" },
+ { url = "https://files.pythonhosted.org/packages/8e/62/764ce66fa4147ae6d73071a3abf804ffe606f174618697c571acdf26a7c9/numpy-2.4.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7", size = 14704559, upload-time = "2026-05-18T23:35:42.14Z" },
+ { url = "https://files.pythonhosted.org/packages/60/61/23f27c172f022e04025b7dc2367f4d63c1a398120607ec896228649a6f48/numpy-2.4.6-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5", size = 5209716, upload-time = "2026-05-18T23:35:45.377Z" },
+ { url = "https://files.pythonhosted.org/packages/03/71/21cf70dc6ea3e3acb95fc53a265b2fc248b981f0194ceb5b475271b8809d/numpy-2.4.6-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096", size = 6543947, upload-time = "2026-05-18T23:35:47.926Z" },
+ { url = "https://files.pythonhosted.org/packages/d5/91/64288395ee1799bd2e0b04a305dce9666da90c961e1f3fe982a05ee1c036/numpy-2.4.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b", size = 15685197, upload-time = "2026-05-18T23:35:50.863Z" },
+ { url = "https://files.pythonhosted.org/packages/f3/eb/ebffaa97dc55502df69584a8f0dcf07f69a3e0b3e2323670a2722db9aa39/numpy-2.4.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8", size = 16638245, upload-time = "2026-05-18T23:35:54.752Z" },
+ { url = "https://files.pythonhosted.org/packages/b8/0b/54f9da33128d7e350fab89c7455902eeae70349ee52bddb448dc4a576f45/numpy-2.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402", size = 17036587, upload-time = "2026-05-18T23:35:58.355Z" },
+ { url = "https://files.pythonhosted.org/packages/b6/f0/fdebc1052db1cc37c64beb22072d67cd6d1c71adca1299f53dec2b5e20d3/numpy-2.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb", size = 18363226, upload-time = "2026-05-18T23:36:02.845Z" },
+ { url = "https://files.pythonhosted.org/packages/aa/b4/298628d98c72b57e57f7165ae6a481a1deaf6f3c28262a6e4c739c275930/numpy-2.4.6-cp314-cp314-win32.whl", hash = "sha256:aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1", size = 6010196, upload-time = "2026-05-18T23:36:05.92Z" },
+ { url = "https://files.pythonhosted.org/packages/df/ac/46de6dda46478f7942f839e094970be2d4a861e005c4b3bf07c92e291a09/numpy-2.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261", size = 12450334, upload-time = "2026-05-18T23:36:09.107Z" },
+ { url = "https://files.pythonhosted.org/packages/78/92/b8b798ac784102c0da830d2257d59358e3d3d90d1e2b3f2575dad976c5cf/numpy-2.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6", size = 10495678, upload-time = "2026-05-18T23:36:12.766Z" },
+ { url = "https://files.pythonhosted.org/packages/30/34/ec28d1aa8115971537c01469ab2011ee96827930f0a124de1000cc2a7ed7/numpy-2.4.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a", size = 14823672, upload-time = "2026-05-18T23:36:16.473Z" },
+ { url = "https://files.pythonhosted.org/packages/16/bd/f6d1fede4e54e8042a7ff97bb495510f3c220f94bcd9e8b228e87c92cc0d/numpy-2.4.6-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e", size = 5328731, upload-time = "2026-05-18T23:36:19.767Z" },
+ { url = "https://files.pythonhosted.org/packages/f4/f0/e105b9e2fd728a9910103884decd6951d9dd73896b914a98d9a231de02ee/numpy-2.4.6-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e", size = 6649805, upload-time = "2026-05-18T23:36:22.266Z" },
+ { url = "https://files.pythonhosted.org/packages/82/dd/1206a7ca6ab15e3f02069707ca96222e202af681bb73756da7527f3cb837/numpy-2.4.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43", size = 15730496, upload-time = "2026-05-18T23:36:25.713Z" },
+ { url = "https://files.pythonhosted.org/packages/51/e7/38d3ea825dcab85a591734decb2f6c67caa7c8367d374df1a1c3842f9b07/numpy-2.4.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e", size = 16679616, upload-time = "2026-05-18T23:36:29.652Z" },
+ { url = "https://files.pythonhosted.org/packages/93/b7/caabfdf53edf663e0b4eb74d7d405d83baef09eb5e83bcd32d601d72b93e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895", size = 17085145, upload-time = "2026-05-18T23:36:33.449Z" },
+ { url = "https://files.pythonhosted.org/packages/f9/45/68d7c33a6bcf3e5aa3bdbd57a367e6f615286dfd6482f97e8ffeb734306e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4", size = 18403813, upload-time = "2026-05-18T23:36:37.369Z" },
+ { url = "https://files.pythonhosted.org/packages/9c/50/0753655aa844c99cd9e018aacf76f130f1bd81d881bb74bc0aef5d73a8ba/numpy-2.4.6-cp314-cp314t-win32.whl", hash = "sha256:260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063", size = 6156982, upload-time = "2026-05-18T23:36:40.817Z" },
+ { url = "https://files.pythonhosted.org/packages/b2/d4/7c67becf668f973cb490cec3e98dfd799d866f9c989a54d355672cfa0db6/numpy-2.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627", size = 12638908, upload-time = "2026-05-18T23:36:43.996Z" },
+ { url = "https://files.pythonhosted.org/packages/43/bb/e1c71a4295b1b1d1393d50dbb4f2a36283c6859d9d3892e84f00ec5a91d5/numpy-2.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66", size = 10565867, upload-time = "2026-05-18T23:36:47.114Z" },
+ { url = "https://files.pythonhosted.org/packages/de/12/b422cc84439adc0d00de605bf4a308890ae5c26f2c71fbd73e5d08fbb0dd/numpy-2.4.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662", size = 16847511, upload-time = "2026-05-18T23:36:50.673Z" },
+ { url = "https://files.pythonhosted.org/packages/44/53/f481bef68011740f8849418d82db07230e825013f31f4eef5ba5b805316a/numpy-2.4.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7", size = 14889064, upload-time = "2026-05-18T23:36:53.879Z" },
+ { url = "https://files.pythonhosted.org/packages/7f/57/42ed575c10ced8af951d426bc4e1f8aff16fd851db33f067036215a7f860/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f", size = 5394157, upload-time = "2026-05-18T23:36:57.194Z" },
+ { url = "https://files.pythonhosted.org/packages/6a/ef/f66cc724fcc36c1e364c67f51ae9146090b8b584f27d58b97fdae3edd737/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c", size = 6708728, upload-time = "2026-05-18T23:36:59.575Z" },
+ { url = "https://files.pythonhosted.org/packages/1a/9c/c531f2293b91265d8b48e9b329f54fdd7ffae73cb4134ea10cca4237e9cc/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbbdb29840ca3d91ee0fece42fc29278886d908280bfec0a5846c6f901a3eb0", size = 15798374, upload-time = "2026-05-18T23:37:02.674Z" },
+ { url = "https://files.pythonhosted.org/packages/1a/b0/413077f6b1153ed3cba361401c6783bbad6114804a000cc22eb71c13e190/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ad03c0965fb3c692200e74d458ca28c1dbb4ce96f9a479a8aa041ad5fabca02", size = 16747286, upload-time = "2026-05-18T23:37:06.327Z" },
+ { url = "https://files.pythonhosted.org/packages/15/ce/e5ec180bc41812edcd8daeb8639d205622c0e8c02259d8ab25a0201b3c2a/numpy-2.4.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2803abfebfc990042cd494d8ce2d5f82e9d847af6d35ec486923aa19dbad5e73", size = 12504263, upload-time = "2026-05-18T23:37:09.715Z" },
+]
+
+[[package]]
+name = "numpy"
+version = "2.5.1"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version >= '3.14' and sys_platform == 'win32'",
+ "python_full_version >= '3.14' and sys_platform == 'emscripten'",
+ "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+]
+sdist = { url = "https://files.pythonhosted.org/packages/22/fd/89965aa4ac08c74998539fcbf24fa3540f3e15237fbeb6bcf9c908f4aade/numpy-2.5.1.tar.gz", hash = "sha256:a48a113e6afea91f5608793bafa7ef2ad481fefbda87ec5069f483de61cb9fa3", size = 20755553, upload-time = "2026-07-04T17:08:00.933Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/62/7b/14687aa674250e5e546f616f486b0d56d3631cd5b2415739141ce40bdcea/numpy-2.5.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2c889b56fe48b1018f764b0eec8df59ab654e9148aa91faa12596043500de277", size = 16801574, upload-time = "2026-07-04T17:06:12.423Z" },
+ { url = "https://files.pythonhosted.org/packages/e1/19/cc5bb2a3f2913d27d6dbb2c78d25921fabaedc6741d4a5a615a11f3c5bf3/numpy-2.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ab451b59c5643c570974c43aef780703ef1d3b4965d2be07afd530615a9358d1", size = 11772250, upload-time = "2026-07-04T17:06:15.726Z" },
+ { url = "https://files.pythonhosted.org/packages/42/77/fdf34a71dd30f54979b18603bee915e0aaf825b07afe79acd60b04b691e2/numpy-2.5.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:78798bd5b9ad744056af8efa90e3b9ddaa53272a0848a483084a1cc0a13b2dc0", size = 5331516, upload-time = "2026-07-04T17:06:17.913Z" },
+ { url = "https://files.pythonhosted.org/packages/ce/e2/eb7efa015b4cce41e2517bf182a7fce0d7d5b9d9ed76a29bfa0f4fe4505c/numpy-2.5.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:2ae0ca40bcb22d6ba59c1dfd5446f49940b0f2d821fde133f10dda11f816b84e", size = 6664863, upload-time = "2026-07-04T17:06:20.02Z" },
+ { url = "https://files.pythonhosted.org/packages/a9/4b/a2b32dd94ee9ffbeecb28152240042a3949db33b1c834d44090b80e1b3b8/numpy-2.5.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:61ac47e772e6b8ea489e1d2f441a34c5c3ac17327e7ce294cbdf535795ad4e75", size = 15167977, upload-time = "2026-07-04T17:06:21.621Z" },
+ { url = "https://files.pythonhosted.org/packages/b8/a9/6e73d68500f80773f65f0654ea932019d6694329a0eb0ed0533de38df376/numpy-2.5.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:59fda5e192b570217ec2580c96f00e9a7e12ef6866a900eb089b62c1a32545ca", size = 16672469, upload-time = "2026-07-04T17:06:24.064Z" },
+ { url = "https://files.pythonhosted.org/packages/24/7d/ad3e59015135f5261c95fd4cafeff159c955febd83a99a1d9250c4233815/numpy-2.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f7119ebff1a9829e9f431a4f9d28e703023bb6b9fe7c8f724467dbfc27c94ab3", size = 16527531, upload-time = "2026-07-04T17:06:26.69Z" },
+ { url = "https://files.pythonhosted.org/packages/83/d0/a39b2fbcde9cb17a1dac678f254b33a6336298af9df338824c685425d5e8/numpy-2.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e824c2acf8862052246be5a44c15da1777940c60d010dd2aab897824d9c430f9", size = 18431940, upload-time = "2026-07-04T17:06:29.521Z" },
+ { url = "https://files.pythonhosted.org/packages/04/12/cff070947791c1ed425ff76413189adbdc2fbe215eba7ce7fa454a03c7f8/numpy-2.5.1-cp312-cp312-win32.whl", hash = "sha256:08d60c810432eb83360958dea0999ac4cfb94531ea8efcbf0b7f277c2068aeb2", size = 6066764, upload-time = "2026-07-04T17:06:32.571Z" },
+ { url = "https://files.pythonhosted.org/packages/65/66/53f31807a48a750f9d748da273bc3fcedd12b27ff1f3e373bfec55ef2dc0/numpy-2.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:f7d60026c0bdb1380e83bfa7a0419c4577ee4b9a08880afcb6dadeb74c649fa2", size = 12430966, upload-time = "2026-07-04T17:06:34.926Z" },
+ { url = "https://files.pythonhosted.org/packages/2b/2a/d1a88066b1c14186f5d3c0d18c94f17b064511982bab0578d49ee9d43c29/numpy-2.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:17a25e09640602e10bc8de0e6fa2b3fd68eedd84ba6d7842dc8f32f9ab87bd0b", size = 10350488, upload-time = "2026-07-04T17:06:37.785Z" },
+ { url = "https://files.pythonhosted.org/packages/eb/07/ec2a3f0c91761581d4b7104a740791800025983f9a4dc4e73f91a99aeac4/numpy-2.5.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0bfebd8695f9863592fe744be833a258120b14a9f39da255e8aa8fade2c0ddd1", size = 16796419, upload-time = "2026-07-04T17:06:40.37Z" },
+ { url = "https://files.pythonhosted.org/packages/ab/ab/ddb499fc4f8780354395face5b65c7fd107bcd6e1d667a5f07d046956f6f/numpy-2.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:30b44a6b53a7ae63c54c089a8726e5563ed302716c5b7ccc85afade40b0e7ff6", size = 11765832, upload-time = "2026-07-04T17:06:42.768Z" },
+ { url = "https://files.pythonhosted.org/packages/88/b3/3c28c558a09fc72100c646dac6d2fce8e834c471b0edca01a29996706117/numpy-2.5.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:6165343f81b56ef8f514f396989e529b61d9dc709b99421b07e9f3e698e2287d", size = 5325143, upload-time = "2026-07-04T17:06:45.466Z" },
+ { url = "https://files.pythonhosted.org/packages/5e/0e/ce19b985bb15c596f4f05954e76cccc77c845083b3b8f938a6c68e523128/numpy-2.5.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4939237038ada79308dda3204ac6462df056b5672b2e25db1149cf873668b3e1", size = 6659749, upload-time = "2026-07-04T17:06:47.288Z" },
+ { url = "https://files.pythonhosted.org/packages/2e/20/1ee6614d64332a1bba6411f38e68cb79eec1b2459e20a623777c5c5492a2/numpy-2.5.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c6759f538fb912fc46de0a6b1758ccf7b57bc7c7ebebc23974fdac3de8db0cd", size = 15164716, upload-time = "2026-07-04T17:06:49.494Z" },
+ { url = "https://files.pythonhosted.org/packages/ed/a7/2bcd3fdbb87804755c35b729bf8709d62025c5f4cfd7d5b2415997097515/numpy-2.5.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9726558e8db4a5bf7929a70ae50f63abda4daf0efe810e3bfbab95976f75fc1a", size = 16661440, upload-time = "2026-07-04T17:06:52.061Z" },
+ { url = "https://files.pythonhosted.org/packages/fc/d7/a41e3310c886fe457d36e670bbf24fae411aca8a7b6ad92a32afd924077c/numpy-2.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3935f3b419b244a02732676fa5317a9193cc596a4c0646db07e5b421229ac9f7", size = 16526305, upload-time = "2026-07-04T17:06:54.605Z" },
+ { url = "https://files.pythonhosted.org/packages/53/75/4333a9a707c1edd3a4e1a0c58eca52c0f31e55089fa80db02b5565b24df7/numpy-2.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dc932a65ded7ce9013d120845a2514dcccb1a67bfc8deb8d37633762951904a6", size = 18423008, upload-time = "2026-07-04T17:06:57.54Z" },
+ { url = "https://files.pythonhosted.org/packages/ee/90/e314a32b1c11a2ffe818ddad3a57b50b4b6e1b6c487192eb50cdef0415d0/numpy-2.5.1-cp313-cp313-win32.whl", hash = "sha256:4b4ff1608417eb7a59da7b967bbb798cacfe071d2caf526a24281cd562072ed9", size = 6063885, upload-time = "2026-07-04T17:07:00.14Z" },
+ { url = "https://files.pythonhosted.org/packages/10/70/800b3fca480af32df9e8ea9f3d4a0c8feb4b32d7f195d174eabbda4829ad/numpy-2.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:6c3fe51bc6a16453d452997053454f309e8e0ed7b42d6b361ce4ac8c32913d74", size = 12425674, upload-time = "2026-07-04T17:07:02.387Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/0b/196350c122f50f6ca56846f2d71efd5e0d24b7b2e07355e019b2e2c7a11e/numpy-2.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:f7feb014281029e628ba2d5a007407443b06e418b6fe451d1e2adcbc8eba0107", size = 10350256, upload-time = "2026-07-04T17:07:04.878Z" },
+ { url = "https://files.pythonhosted.org/packages/db/f4/731b6085a83faf6ca843394cbd5e217280c214399f7e8b21b9f552af0ae2/numpy-2.5.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:7c786fe9a5bbe360022e584c5a34cf6b54265c71bd7ec8ac3d8fec38968071f8", size = 16795063, upload-time = "2026-07-04T17:07:07.374Z" },
+ { url = "https://files.pythonhosted.org/packages/bf/64/0e215f2048dd11a55bb989ed41b3585ef57452404e638d703a211a3e4157/numpy-2.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:32985c896d897419ef8da6917872d80b78ad0ea26d85b23245c7366ffde76d75", size = 11776652, upload-time = "2026-07-04T17:07:09.907Z" },
+ { url = "https://files.pythonhosted.org/packages/b5/59/2b844c7a6e9deff69b404a66221e1542937734f65d5e6e39411876053862/numpy-2.5.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:efd736408cc97c79b9e6917338dfc8f06013b2274f992e96b1d9a81a71e2a2c2", size = 5335944, upload-time = "2026-07-04T17:07:12.227Z" },
+ { url = "https://files.pythonhosted.org/packages/86/51/9bf7cb2cabcebc9e017e4ec7e6322b378317a542c08b4cb68479c1efc716/numpy-2.5.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:ab84dc6b074fa881cae55bea94cc4f68e285181ba7f32497bf7dee6b1496165b", size = 6656266, upload-time = "2026-07-04T17:07:14.368Z" },
+ { url = "https://files.pythonhosted.org/packages/83/3e/fb7615b211b82a32f44d5180a6d421b61f84d4fadd578b48ba4ac34e189f/numpy-2.5.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:caf3e317d33d60c37986b452613f4ab51246d0691350c03d0cb4a898627f4a95", size = 15179720, upload-time = "2026-07-04T17:07:16.272Z" },
+ { url = "https://files.pythonhosted.org/packages/41/5f/0f992cb24560673496c5d68de61913b57166ce530ffda07c1f280e0cc464/numpy-2.5.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:54ad769f17bc2d833b620851989f62054fb9ab93c969d9e1dc3c8e3d56beea21", size = 16664835, upload-time = "2026-07-04T17:07:19.021Z" },
+ { url = "https://files.pythonhosted.org/packages/a2/2f/97d6475ee91afe2587797d09446f9d3e475ad4cb681662d824809327b75a/numpy-2.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c12afb53450fa976d4c681c50a7423729a4c51c0465ed9f32b8a9cabbc472373", size = 16539135, upload-time = "2026-07-04T17:07:22.015Z" },
+ { url = "https://files.pythonhosted.org/packages/c4/5b/4db81e4ba0be7e2776b1de68c82aa862c7f8ec27e1b4927d4ae075e20678/numpy-2.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e8c11c405efc5ff6816d5983c96cdfa215bab3428961243af3ff59b228490438", size = 18426684, upload-time = "2026-07-04T17:07:24.941Z" },
+ { url = "https://files.pythonhosted.org/packages/1f/64/c0ba2d90724d450279a7df8f32057241070250a26a7e2b5337d77347f481/numpy-2.5.1-cp314-cp314-win32.whl", hash = "sha256:f2479a47f8d5932d1718168a681ad6e536a9df484c83cfcf9de365e164537ace", size = 6116103, upload-time = "2026-07-04T17:07:27.622Z" },
+ { url = "https://files.pythonhosted.org/packages/c1/1a/837f9ed7405adcd7a40538792eb169eddd8fa5630c16a1ef49dae71a30f4/numpy-2.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:24d0eb82c0541d3415a33425db64ae439dffccd7b4dbcb30e7c35120205c506a", size = 12562177, upload-time = "2026-07-04T17:07:29.887Z" },
+ { url = "https://files.pythonhosted.org/packages/22/ed/49707938b6dd0a78a9178dd93227dc89e4c11af47f5c798d70366e8d0483/numpy-2.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:5a4c988b38d261deeeaad9954e3deb091ad905c94e8bb6708654ef1d97f286b0", size = 10627739, upload-time = "2026-07-04T17:07:32.568Z" },
+ { url = "https://files.pythonhosted.org/packages/a6/c7/bb4b882cfe7f299cbc8b66e42e7dd78cf9d14e40f9469fc5e3db7e15b3bd/numpy-2.5.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a33276be12fa045805f477f22482088b66bb758ffbe89a9d21457de863a32e22", size = 11894709, upload-time = "2026-07-04T17:07:34.941Z" },
+ { url = "https://files.pythonhosted.org/packages/40/3f/5af7f4a7f6224aef48017aa82bb6174c7a659d724be0c75017b7e64a55b4/numpy-2.5.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:f089d7b00756190aacf1f5d34bdf38c3c430ac82b4f868f8cede73380460fce7", size = 5453810, upload-time = "2026-07-04T17:07:37.495Z" },
+ { url = "https://files.pythonhosted.org/packages/20/c9/3474309bc94d634d3f9c3eddf03250ecb8c22cd948ef16fef69a77cc5d7b/numpy-2.5.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:09e9bfd8d2cf479c7d174804fb3811c53a8e9f20a37444008606b57d6b7a826d", size = 6761189, upload-time = "2026-07-04T17:07:39.563Z" },
+ { url = "https://files.pythonhosted.org/packages/90/8a/558ae39fdd55d7e7f7fef9a84a6e964ac6b23edbd2a07e52bb084500507d/numpy-2.5.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e68d8dd1e7eba712948f2053a29ec86917bc70ba1358df869d9f06649ef9cf09", size = 15225039, upload-time = "2026-07-04T17:07:41.682Z" },
+ { url = "https://files.pythonhosted.org/packages/63/27/ca7392b2d030277bdf0273e7d23255b3ee57d57a7c170a6f4fb3981e1e5d/numpy-2.5.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:99d5095fa265a0c4152e7bb12759e14381ef5496152f1ce58f44bdf55c44beb4", size = 16701306, upload-time = "2026-07-04T17:07:44.611Z" },
+ { url = "https://files.pythonhosted.org/packages/02/42/03d53ae7996c44d4374a8262e9dc41671fd56cbb98f7d47ef85cf5da4c6b/numpy-2.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ab87a91b3cc3382b8956095bd8f95e00cf679bb81554339be1a2ba404a1473c1", size = 16589955, upload-time = "2026-07-04T17:07:47.694Z" },
+ { url = "https://files.pythonhosted.org/packages/7b/15/6c1784ae469640e65db111e9a34b3d0f14d91e8a38b9ce34810ced370dbb/numpy-2.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:224ca51130ef7da85bea2191625181cb4f337f9cb64b471f10c1a12aa8b60077", size = 18464252, upload-time = "2026-07-04T17:07:50.684Z" },
+ { url = "https://files.pythonhosted.org/packages/94/a8/f98e50356cf167df656c526c2dfeec2d7dde182f2a3da4b458a5938e2776/numpy-2.5.1-cp314-cp314t-win32.whl", hash = "sha256:6eab239876581b2b3c5a242281b6007bbdbcd1c7085d7709bb57c5929b11e6bf", size = 6263298, upload-time = "2026-07-04T17:07:53.445Z" },
+ { url = "https://files.pythonhosted.org/packages/72/ac/96ae880cdecad0b3275d9359fcec72667b49a4863c9f12942e43679dda02/numpy-2.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:83ce9c80d5b521b0d77ddcbe5447c218d247929b6cc056ca5351342accfff0af", size = 12748623, upload-time = "2026-07-04T17:07:55.384Z" },
+ { url = "https://files.pythonhosted.org/packages/a1/5a/4d2b1601df3602dba7a14f3348ba9bfe94a18adb428e693df6154c293831/numpy-2.5.1-cp314-cp314t-win_arm64.whl", hash = "sha256:5a6db61f9aaa57e369905c67d852045d3c4f7126405b29d09b19dec118e9c9cb", size = 10697674, upload-time = "2026-07-04T17:07:58.506Z" },
+]
+
[[package]]
name = "packaging"
version = "25.0"
@@ -786,6 +1071,151 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" },
]
+[[package]]
+name = "pandas"
+version = "2.3.3"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version == '3.10.*'",
+ "python_full_version < '3.10'",
+]
+dependencies = [
+ { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" },
+ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" },
+ { name = "python-dateutil", marker = "python_full_version < '3.11' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" },
+ { name = "pytz", marker = "python_full_version < '3.11' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" },
+ { name = "tzdata", marker = "python_full_version < '3.11' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223, upload-time = "2025-09-29T23:34:51.853Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/3d/f7/f425a00df4fcc22b292c6895c6831c0c8ae1d9fac1e024d16f98a9ce8749/pandas-2.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:376c6446ae31770764215a6c937f72d917f214b43560603cd60da6408f183b6c", size = 11555763, upload-time = "2025-09-29T23:16:53.287Z" },
+ { url = "https://files.pythonhosted.org/packages/13/4f/66d99628ff8ce7857aca52fed8f0066ce209f96be2fede6cef9f84e8d04f/pandas-2.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e19d192383eab2f4ceb30b412b22ea30690c9e618f78870357ae1d682912015a", size = 10801217, upload-time = "2025-09-29T23:17:04.522Z" },
+ { url = "https://files.pythonhosted.org/packages/1d/03/3fc4a529a7710f890a239cc496fc6d50ad4a0995657dccc1d64695adb9f4/pandas-2.3.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5caf26f64126b6c7aec964f74266f435afef1c1b13da3b0636c7518a1fa3e2b1", size = 12148791, upload-time = "2025-09-29T23:17:18.444Z" },
+ { url = "https://files.pythonhosted.org/packages/40/a8/4dac1f8f8235e5d25b9955d02ff6f29396191d4e665d71122c3722ca83c5/pandas-2.3.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd7478f1463441ae4ca7308a70e90b33470fa593429f9d4c578dd00d1fa78838", size = 12769373, upload-time = "2025-09-29T23:17:35.846Z" },
+ { url = "https://files.pythonhosted.org/packages/df/91/82cc5169b6b25440a7fc0ef3a694582418d875c8e3ebf796a6d6470aa578/pandas-2.3.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4793891684806ae50d1288c9bae9330293ab4e083ccd1c5e383c34549c6e4250", size = 13200444, upload-time = "2025-09-29T23:17:49.341Z" },
+ { url = "https://files.pythonhosted.org/packages/10/ae/89b3283800ab58f7af2952704078555fa60c807fff764395bb57ea0b0dbd/pandas-2.3.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:28083c648d9a99a5dd035ec125d42439c6c1c525098c58af0fc38dd1a7a1b3d4", size = 13858459, upload-time = "2025-09-29T23:18:03.722Z" },
+ { url = "https://files.pythonhosted.org/packages/85/72/530900610650f54a35a19476eca5104f38555afccda1aa11a92ee14cb21d/pandas-2.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:503cf027cf9940d2ceaa1a93cfb5f8c8c7e6e90720a2850378f0b3f3b1e06826", size = 11346086, upload-time = "2025-09-29T23:18:18.505Z" },
+ { url = "https://files.pythonhosted.org/packages/c1/fa/7ac648108144a095b4fb6aa3de1954689f7af60a14cf25583f4960ecb878/pandas-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523", size = 11578790, upload-time = "2025-09-29T23:18:30.065Z" },
+ { url = "https://files.pythonhosted.org/packages/9b/35/74442388c6cf008882d4d4bdfc4109be87e9b8b7ccd097ad1e7f006e2e95/pandas-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45", size = 10833831, upload-time = "2025-09-29T23:38:56.071Z" },
+ { url = "https://files.pythonhosted.org/packages/fe/e4/de154cbfeee13383ad58d23017da99390b91d73f8c11856f2095e813201b/pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66", size = 12199267, upload-time = "2025-09-29T23:18:41.627Z" },
+ { url = "https://files.pythonhosted.org/packages/bf/c9/63f8d545568d9ab91476b1818b4741f521646cbdd151c6efebf40d6de6f7/pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b", size = 12789281, upload-time = "2025-09-29T23:18:56.834Z" },
+ { url = "https://files.pythonhosted.org/packages/f2/00/a5ac8c7a0e67fd1a6059e40aa08fa1c52cc00709077d2300e210c3ce0322/pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791", size = 13240453, upload-time = "2025-09-29T23:19:09.247Z" },
+ { url = "https://files.pythonhosted.org/packages/27/4d/5c23a5bc7bd209231618dd9e606ce076272c9bc4f12023a70e03a86b4067/pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151", size = 13890361, upload-time = "2025-09-29T23:19:25.342Z" },
+ { url = "https://files.pythonhosted.org/packages/8e/59/712db1d7040520de7a4965df15b774348980e6df45c129b8c64d0dbe74ef/pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c", size = 11348702, upload-time = "2025-09-29T23:19:38.296Z" },
+ { url = "https://files.pythonhosted.org/packages/9c/fb/231d89e8637c808b997d172b18e9d4a4bc7bf31296196c260526055d1ea0/pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53", size = 11597846, upload-time = "2025-09-29T23:19:48.856Z" },
+ { url = "https://files.pythonhosted.org/packages/5c/bd/bf8064d9cfa214294356c2d6702b716d3cf3bb24be59287a6a21e24cae6b/pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35", size = 10729618, upload-time = "2025-09-29T23:39:08.659Z" },
+ { url = "https://files.pythonhosted.org/packages/57/56/cf2dbe1a3f5271370669475ead12ce77c61726ffd19a35546e31aa8edf4e/pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908", size = 11737212, upload-time = "2025-09-29T23:19:59.765Z" },
+ { url = "https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89", size = 12362693, upload-time = "2025-09-29T23:20:14.098Z" },
+ { url = "https://files.pythonhosted.org/packages/a6/de/8b1895b107277d52f2b42d3a6806e69cfef0d5cf1d0ba343470b9d8e0a04/pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98", size = 12771002, upload-time = "2025-09-29T23:20:26.76Z" },
+ { url = "https://files.pythonhosted.org/packages/87/21/84072af3187a677c5893b170ba2c8fbe450a6ff911234916da889b698220/pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084", size = 13450971, upload-time = "2025-09-29T23:20:41.344Z" },
+ { url = "https://files.pythonhosted.org/packages/86/41/585a168330ff063014880a80d744219dbf1dd7a1c706e75ab3425a987384/pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b", size = 10992722, upload-time = "2025-09-29T23:20:54.139Z" },
+ { url = "https://files.pythonhosted.org/packages/cd/4b/18b035ee18f97c1040d94debd8f2e737000ad70ccc8f5513f4eefad75f4b/pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713", size = 11544671, upload-time = "2025-09-29T23:21:05.024Z" },
+ { url = "https://files.pythonhosted.org/packages/31/94/72fac03573102779920099bcac1c3b05975c2cb5f01eac609faf34bed1ca/pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8", size = 10680807, upload-time = "2025-09-29T23:21:15.979Z" },
+ { url = "https://files.pythonhosted.org/packages/16/87/9472cf4a487d848476865321de18cc8c920b8cab98453ab79dbbc98db63a/pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d", size = 11709872, upload-time = "2025-09-29T23:21:27.165Z" },
+ { url = "https://files.pythonhosted.org/packages/15/07/284f757f63f8a8d69ed4472bfd85122bd086e637bf4ed09de572d575a693/pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac", size = 12306371, upload-time = "2025-09-29T23:21:40.532Z" },
+ { url = "https://files.pythonhosted.org/packages/33/81/a3afc88fca4aa925804a27d2676d22dcd2031c2ebe08aabd0ae55b9ff282/pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c", size = 12765333, upload-time = "2025-09-29T23:21:55.77Z" },
+ { url = "https://files.pythonhosted.org/packages/8d/0f/b4d4ae743a83742f1153464cf1a8ecfafc3ac59722a0b5c8602310cb7158/pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493", size = 13418120, upload-time = "2025-09-29T23:22:10.109Z" },
+ { url = "https://files.pythonhosted.org/packages/4f/c7/e54682c96a895d0c808453269e0b5928a07a127a15704fedb643e9b0a4c8/pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee", size = 10993991, upload-time = "2025-09-29T23:25:04.889Z" },
+ { url = "https://files.pythonhosted.org/packages/f9/ca/3f8d4f49740799189e1395812f3bf23b5e8fc7c190827d55a610da72ce55/pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5", size = 12048227, upload-time = "2025-09-29T23:22:24.343Z" },
+ { url = "https://files.pythonhosted.org/packages/0e/5a/f43efec3e8c0cc92c4663ccad372dbdff72b60bdb56b2749f04aa1d07d7e/pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21", size = 11411056, upload-time = "2025-09-29T23:22:37.762Z" },
+ { url = "https://files.pythonhosted.org/packages/46/b1/85331edfc591208c9d1a63a06baa67b21d332e63b7a591a5ba42a10bb507/pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78", size = 11645189, upload-time = "2025-09-29T23:22:51.688Z" },
+ { url = "https://files.pythonhosted.org/packages/44/23/78d645adc35d94d1ac4f2a3c4112ab6f5b8999f4898b8cdf01252f8df4a9/pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110", size = 12121912, upload-time = "2025-09-29T23:23:05.042Z" },
+ { url = "https://files.pythonhosted.org/packages/53/da/d10013df5e6aaef6b425aa0c32e1fc1f3e431e4bcabd420517dceadce354/pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86", size = 12712160, upload-time = "2025-09-29T23:23:28.57Z" },
+ { url = "https://files.pythonhosted.org/packages/bd/17/e756653095a083d8a37cbd816cb87148debcfcd920129b25f99dd8d04271/pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc", size = 13199233, upload-time = "2025-09-29T23:24:24.876Z" },
+ { url = "https://files.pythonhosted.org/packages/04/fd/74903979833db8390b73b3a8a7d30d146d710bd32703724dd9083950386f/pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0", size = 11540635, upload-time = "2025-09-29T23:25:52.486Z" },
+ { url = "https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593", size = 10759079, upload-time = "2025-09-29T23:26:33.204Z" },
+ { url = "https://files.pythonhosted.org/packages/ca/05/d01ef80a7a3a12b2f8bbf16daba1e17c98a2f039cbc8e2f77a2c5a63d382/pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c", size = 11814049, upload-time = "2025-09-29T23:27:15.384Z" },
+ { url = "https://files.pythonhosted.org/packages/15/b2/0e62f78c0c5ba7e3d2c5945a82456f4fac76c480940f805e0b97fcbc2f65/pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b", size = 12332638, upload-time = "2025-09-29T23:27:51.625Z" },
+ { url = "https://files.pythonhosted.org/packages/c5/33/dd70400631b62b9b29c3c93d2feee1d0964dc2bae2e5ad7a6c73a7f25325/pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6", size = 12886834, upload-time = "2025-09-29T23:28:21.289Z" },
+ { url = "https://files.pythonhosted.org/packages/d3/18/b5d48f55821228d0d2692b34fd5034bb185e854bdb592e9c640f6290e012/pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3", size = 13409925, upload-time = "2025-09-29T23:28:58.261Z" },
+ { url = "https://files.pythonhosted.org/packages/a6/3d/124ac75fcd0ecc09b8fdccb0246ef65e35b012030defb0e0eba2cbbbe948/pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5", size = 11109071, upload-time = "2025-09-29T23:32:27.484Z" },
+ { url = "https://files.pythonhosted.org/packages/89/9c/0e21c895c38a157e0faa1fb64587a9226d6dd46452cac4532d80c3c4a244/pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec", size = 12048504, upload-time = "2025-09-29T23:29:31.47Z" },
+ { url = "https://files.pythonhosted.org/packages/d7/82/b69a1c95df796858777b68fbe6a81d37443a33319761d7c652ce77797475/pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7", size = 11410702, upload-time = "2025-09-29T23:29:54.591Z" },
+ { url = "https://files.pythonhosted.org/packages/f9/88/702bde3ba0a94b8c73a0181e05144b10f13f29ebfc2150c3a79062a8195d/pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450", size = 11634535, upload-time = "2025-09-29T23:30:21.003Z" },
+ { url = "https://files.pythonhosted.org/packages/a4/1e/1bac1a839d12e6a82ec6cb40cda2edde64a2013a66963293696bbf31fbbb/pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5", size = 12121582, upload-time = "2025-09-29T23:30:43.391Z" },
+ { url = "https://files.pythonhosted.org/packages/44/91/483de934193e12a3b1d6ae7c8645d083ff88dec75f46e827562f1e4b4da6/pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788", size = 12699963, upload-time = "2025-09-29T23:31:10.009Z" },
+ { url = "https://files.pythonhosted.org/packages/70/44/5191d2e4026f86a2a109053e194d3ba7a31a2d10a9c2348368c63ed4e85a/pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87", size = 13202175, upload-time = "2025-09-29T23:31:59.173Z" },
+ { url = "https://files.pythonhosted.org/packages/56/b4/52eeb530a99e2a4c55ffcd352772b599ed4473a0f892d127f4147cf0f88e/pandas-2.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c503ba5216814e295f40711470446bc3fd00f0faea8a086cbc688808e26f92a2", size = 11567720, upload-time = "2025-09-29T23:33:06.209Z" },
+ { url = "https://files.pythonhosted.org/packages/48/4a/2d8b67632a021bced649ba940455ed441ca854e57d6e7658a6024587b083/pandas-2.3.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a637c5cdfa04b6d6e2ecedcb81fc52ffb0fd78ce2ebccc9ea964df9f658de8c8", size = 10810302, upload-time = "2025-09-29T23:33:35.846Z" },
+ { url = "https://files.pythonhosted.org/packages/13/e6/d2465010ee0569a245c975dc6967b801887068bc893e908239b1f4b6c1ac/pandas-2.3.3-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:854d00d556406bffe66a4c0802f334c9ad5a96b4f1f868adf036a21b11ef13ff", size = 12154874, upload-time = "2025-09-29T23:33:49.939Z" },
+ { url = "https://files.pythonhosted.org/packages/1f/18/aae8c0aa69a386a3255940e9317f793808ea79d0a525a97a903366bb2569/pandas-2.3.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bf1f8a81d04ca90e32a0aceb819d34dbd378a98bf923b6398b9a3ec0bf44de29", size = 12790141, upload-time = "2025-09-29T23:34:05.655Z" },
+ { url = "https://files.pythonhosted.org/packages/f7/26/617f98de789de00c2a444fbe6301bb19e66556ac78cff933d2c98f62f2b4/pandas-2.3.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:23ebd657a4d38268c7dfbdf089fbc31ea709d82e4923c5ffd4fbd5747133ce73", size = 13208697, upload-time = "2025-09-29T23:34:21.835Z" },
+ { url = "https://files.pythonhosted.org/packages/b9/fb/25709afa4552042bd0e15717c75e9b4a2294c3dc4f7e6ea50f03c5136600/pandas-2.3.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5554c929ccc317d41a5e3d1234f3be588248e61f08a74dd17c9eabb535777dc9", size = 13879233, upload-time = "2025-09-29T23:34:35.079Z" },
+ { url = "https://files.pythonhosted.org/packages/98/af/7be05277859a7bc399da8ba68b88c96b27b48740b6cf49688899c6eb4176/pandas-2.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:d3e28b3e83862ccf4d85ff19cf8c20b2ae7e503881711ff2d534dc8f761131aa", size = 11359119, upload-time = "2025-09-29T23:34:46.339Z" },
+]
+
+[[package]]
+name = "pandas"
+version = "3.0.3"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version >= '3.14' and sys_platform == 'win32'",
+ "python_full_version >= '3.14' and sys_platform == 'emscripten'",
+ "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'",
+ "python_full_version == '3.11.*' and sys_platform == 'win32'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'",
+ "python_full_version == '3.11.*' and sys_platform == 'emscripten'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+ "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+]
+dependencies = [
+ { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" },
+ { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" },
+ { name = "python-dateutil", marker = "python_full_version >= '3.11' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" },
+ { name = "tzdata", marker = "(python_full_version >= '3.11' and sys_platform == 'emscripten') or (python_full_version >= '3.11' and sys_platform == 'win32') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2') or (sys_platform == 'emscripten' and extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2') or (sys_platform == 'win32' and extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/f8/87/4341c6252d1c47b08768c3d25ac487362bf403f0313ddae4a2a26c9b1b4c/pandas-3.0.3.tar.gz", hash = "sha256:696a4a00a2a2a35d4e5deb3fc946641b96c944f02230e4f76137fe35d806c4fc", size = 4651414, upload-time = "2026-05-11T18:54:29.21Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/42/16/b5c76b838fd9bf6ce84d3a53346b8874ec05c5f0040d75ef2c320100cd2a/pandas-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:455f6f8139d4282188f526868dbc3c828470e88a3d9d59a891bd46a455f21b98", size = 10338495, upload-time = "2026-05-11T18:52:11.558Z" },
+ { url = "https://files.pythonhosted.org/packages/5a/b0/a4ffc4ae74d2d822200dcc46898987d8eb6032d1e2b219cae39da6f5cbcc/pandas-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4e15135e2ee5df1063313e2425ceef8ac0f4ae775893815b0923651b806a5639", size = 9938250, upload-time = "2026-05-11T18:52:17.005Z" },
+ { url = "https://files.pythonhosted.org/packages/2e/b2/3323601a52caee42c019e370090ca4544b241437240ca04f786cce82b0cf/pandas-3.0.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:05f1f1752b8533ea03f7f39a9c15b1a058d067bb48f4748948e7a8691e0510f2", size = 10770558, upload-time = "2026-05-11T18:52:19.865Z" },
+ { url = "https://files.pythonhosted.org/packages/32/f1/bbecd2f867b97abebe0f9b53d750f862251b40337e061b36676ded3d920f/pandas-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a1e45c80cceb3b4a21bc5939d52e8cbd8d9b7305309219d59e9754d9ce09e27", size = 11274611, upload-time = "2026-05-11T18:52:22.622Z" },
+ { url = "https://files.pythonhosted.org/packages/7f/4f/eafabf2d5fae5adf143b4d18d3706c5efdc368a7c4eb1ee8a3eddabbd0f6/pandas-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:14da8316da4d0c5a77618425996bfb1248ca87fc2c1486e6fde4652bd18b5824", size = 11784670, upload-time = "2026-05-11T18:52:25.4Z" },
+ { url = "https://files.pythonhosted.org/packages/49/44/1eb20389301b57b19cc099a1c2f662501f72f08a65f912d05822613c1532/pandas-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a55066a0505dae0ba2b50a46637db34b46f9094c65c5d4800794ef6335010938", size = 12353708, upload-time = "2026-05-11T18:52:28.139Z" },
+ { url = "https://files.pythonhosted.org/packages/eb/62/c321f13b5ba1819fc8dca456c7fce578da2dcfecff1abbf0eaddf8406c0f/pandas-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6674ab18ad8c57802867264b00e15e7bb904700cdd9046e3b2fa1fce237439ea", size = 9907609, upload-time = "2026-05-11T18:52:30.982Z" },
+ { url = "https://files.pythonhosted.org/packages/53/85/1b7f563ebc6357c27233a02a96b589bcce1fa9c6eb89fb4f0e56421d277e/pandas-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:5cc09a68b3120e0f54870dede8287a7bb1fa463907e4fcec1ea77cab6179bf7a", size = 9165596, upload-time = "2026-05-11T18:52:33.334Z" },
+ { url = "https://files.pythonhosted.org/packages/24/f1/392f8c5bfc16f66a0d2d41561c01627c228fe7ed2a0d056ef11315042570/pandas-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fed2ff7fd9779120e388e285fc029bd5cf9490cdd2e4166a9ee22c0e49a9ab09", size = 10357846, upload-time = "2026-05-11T18:52:36.143Z" },
+ { url = "https://files.pythonhosted.org/packages/cf/3d/b16412745651e855f357e5e66930248688378853a6e2698a214e331fba1f/pandas-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b168fc218fd80a6cbdbdbc1a97ddc7889ed057d7eb45f50d866ceab5f39904c4", size = 9899550, upload-time = "2026-05-11T18:52:38.976Z" },
+ { url = "https://files.pythonhosted.org/packages/31/a8/fa2535168fffcedf67f4f6de28d2dd903a747ca7c8ea6989451aaeb3a92f/pandas-3.0.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0383c72c75cdcca61a9e116e611143902dbfd08bff356829c2f6d1cf40a9ca8c", size = 10412965, upload-time = "2026-05-11T18:52:41.915Z" },
+ { url = "https://files.pythonhosted.org/packages/65/b6/09b01cdbc15224e2850365192d17b7bdebb8bdbd8780ed221fcdf0d9a515/pandas-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6dc0b3fd2169c9157deed50b4d519553a3655c8c6a96027136d654592be973a9", size = 10894600, upload-time = "2026-05-11T18:52:45.02Z" },
+ { url = "https://files.pythonhosted.org/packages/c9/a4/2eb28f2fccb4ced4a2c79ab2a5dee9ade1ebf44922ebad6fea158c9f95d4/pandas-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7e65d5407dc0b394f509699650e4a2ec01c0514f21850f453fa60f3be79a5dbf", size = 11422824, upload-time = "2026-05-11T18:52:48.058Z" },
+ { url = "https://files.pythonhosted.org/packages/f8/45/830bb57f533a4604b355e07edcb8ea18cf88b5f94e5fca92f27052d7c597/pandas-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f8894dc474d648fe7b6ff0ca9b0bd73950d19952bc1a6534540762c5d79d305c", size = 11950889, upload-time = "2026-05-11T18:52:50.905Z" },
+ { url = "https://files.pythonhosted.org/packages/b9/c5/fc1b368f303087d20e8c9bf3d6ceb186263cfac0ade735cd938538bea839/pandas-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:c7be265b62cef88e253a941e4698604973736dcfe242fdb5198f0f7bc473cdcc", size = 9755463, upload-time = "2026-05-11T18:52:53.386Z" },
+ { url = "https://files.pythonhosted.org/packages/86/bd/fda8f9705b1b09c6ebe14bfc0fa0e4ec8584d54ea673628f157ff55131af/pandas-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:557409bc4178e70ee8d9ddb494798e51ebf6ea59330f6be22c51bab2a7db6c49", size = 9066158, upload-time = "2026-05-11T18:52:56.038Z" },
+ { url = "https://files.pythonhosted.org/packages/c5/90/62d8302883c44308c477e222c3daf7c813a34c8e96985882fbd53d964352/pandas-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:67b3b64c11910cfa29f4e94a14d3bff9ee693b6fc76055e7cad549cee0aec5fa", size = 10331071, upload-time = "2026-05-11T18:52:58.838Z" },
+ { url = "https://files.pythonhosted.org/packages/7f/ae/6a6493c783a101f165e4356953ba3c74d6f77f0042fa7d753da9dfbb640c/pandas-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:39436b377d56d2a2e52d0395bdbee171f01068e99af5250509aceeb929f765c7", size = 9875690, upload-time = "2026-05-11T18:53:01.431Z" },
+ { url = "https://files.pythonhosted.org/packages/62/7c/5df8e9f56c69a2769fbe9382a5ef8f2658c007e376434e1e2cbb57ad895f/pandas-3.0.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4be06d68f9ddcfc645b87534911da79a8fbffc7573c80e0edcf42a5020624d8", size = 10381634, upload-time = "2026-05-11T18:53:04.393Z" },
+ { url = "https://files.pythonhosted.org/packages/99/68/1237369725aa617bb358263d535803e3053fdbc593513ec5ed9c9896b5b6/pandas-3.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a4eeb6830daf35a71cc09649bd823e2b542dac246cdee9614c6e4bd65028cd6a", size = 10891243, upload-time = "2026-05-11T18:53:07.643Z" },
+ { url = "https://files.pythonhosted.org/packages/25/93/77d108e8af7222b4a503ebde0e30215b1c2e4f8e53a526431890f22d5586/pandas-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1928e07221f82db493cd4af1e23c1bfca524a19a4699887975bff68f49a72bfb", size = 11388659, upload-time = "2026-05-11T18:53:10.634Z" },
+ { url = "https://files.pythonhosted.org/packages/d0/bd/eff5b4399f332ac386c853f6cd2bd3fa2ca0061b9f36ecd9c4d7c4265649/pandas-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51b1fe551acb77dac643c6fda86084d8d446c10fe64b06a9cc29c4cc8540e7f2", size = 11942880, upload-time = "2026-05-11T18:53:13.536Z" },
+ { url = "https://files.pythonhosted.org/packages/2c/20/559ace4200982c3887d0b86bfd0d856a2143ef8ddab63cc07934951a964c/pandas-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:a82d532a3351d435432cd913edbccaf8b8e01d4dd0e5ced5a8d2e8ecd94c7e44", size = 9757091, upload-time = "2026-05-11T18:53:16.306Z" },
+ { url = "https://files.pythonhosted.org/packages/3a/66/69055a09fe200f29f922a3eeec4804611900b95f52d932ece3393c3c0c19/pandas-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:275c14e0fce14a2ec20eee474aecd305478ea3c1e6f6a9d8fe219a165542717e", size = 9057282, upload-time = "2026-05-11T18:53:18.768Z" },
+ { url = "https://files.pythonhosted.org/packages/57/0e/efe801b0e6811e8e650cd21b7f2608e30f08a7067e2bf6e8752b0d56ee3c/pandas-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:46997386d528eb40376ecd6b033cf4a8a1e5282580f68f43de875b78cba2199d", size = 10767016, upload-time = "2026-05-11T18:53:21.227Z" },
+ { url = "https://files.pythonhosted.org/packages/ea/dc/eb55135a1d5f0f0519f28da1f609a206d2cad1f9c35c32d51e38dd7261ae/pandas-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:261e308dfb22448384b7580cf719d2f998fe2966c92893c3e77d14008af1f066", size = 10420210, upload-time = "2026-05-11T18:53:23.982Z" },
+ { url = "https://files.pythonhosted.org/packages/c6/3e/b1d5d955ce33ffecb407465a60bc32769d74fcf68224b7ae67ae11d4dea4/pandas-3.0.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd1a5d1def6a46002e964510bdc67c368aa0951df5d1d9f8365336f5a1f490cd", size = 10336126, upload-time = "2026-05-11T18:53:26.731Z" },
+ { url = "https://files.pythonhosted.org/packages/f5/76/a01261711ab60a22d71b862f0de20e4c504bf80457270ad8cb42110f6abc/pandas-3.0.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d72828c20c6d6e83e1e22a6a3b47b326b71664112fa9705dcbccfd7a39b62085", size = 10728051, upload-time = "2026-05-11T18:53:29.125Z" },
+ { url = "https://files.pythonhosted.org/packages/e9/21/ea191195e587b18cf682e97f433f81b2d0fbe341380e80a3e0d6e4403c8e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d26cbe1fcfc12e8fd900e2454163e466b2d3af84f7c75481df7683ffc073d870", size = 11350796, upload-time = "2026-05-11T18:53:32.056Z" },
+ { url = "https://files.pythonhosted.org/packages/64/69/f0eaaf54939f0e8c6768fd06be9af2cef9b36048b96dfb9e1b2c685a807e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e91cec1879ada0624fc3dc9953c5cbd60208e59c0db28f540c5d6d47502422f", size = 11799741, upload-time = "2026-05-11T18:53:34.985Z" },
+ { url = "https://files.pythonhosted.org/packages/45/a4/865e0e510cae5fc2194de4db28be638952de942571ba9125934fd9c01d47/pandas-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:08d789b41f87e0905880e293cedf6197ce71fe67cc081358b1e148a491b9bd13", size = 10499958, upload-time = "2026-05-11T18:53:37.857Z" },
+ { url = "https://files.pythonhosted.org/packages/86/54/effdcc3c0ff7a08037889200e148ebe94c16c4f653be078c7b3675955df1/pandas-3.0.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3650109c0f22879df8bd6179ab9ee3d7f1d1d4e7e0094a3f0032d9f51e2e64ac", size = 10336065, upload-time = "2026-05-11T18:53:41.099Z" },
+ { url = "https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bab900348131a7db1f69a7309ef141fd5680f1487094193bcbbb61791573bf8f", size = 9926101, upload-time = "2026-05-11T18:53:43.515Z" },
+ { url = "https://files.pythonhosted.org/packages/ae/e9/e35cf11c8a136e757b956f5f0efdcaa50aecde85ea055f1898dfc68262f3/pandas-3.0.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba7e08b9ac1d54569cd1e256e3668975ed624d6826f7b68df0342b012007bddb", size = 10457553, upload-time = "2026-05-11T18:53:46.394Z" },
+ { url = "https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d71c63ae4ebdbf70209742096f1fc46a83a0613c99d4b23766cced9ff8cd62a", size = 10914065, upload-time = "2026-05-11T18:53:49.134Z" },
+ { url = "https://files.pythonhosted.org/packages/c4/c2/1ef644445fcd72e3627bceec77e3560636f87ddce4ed841afe76b83b5bf9/pandas-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e3a2ec42c98ffa2565a67e08e218d06d72576d758d90facb7c00805194d8f360", size = 11459188, upload-time = "2026-05-11T18:53:52.527Z" },
+ { url = "https://files.pythonhosted.org/packages/7e/49/4d8d4f42cbc9c4adc7a1870f269c02cbd6cd40d059622c06fb298addcbad/pandas-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:335f62418ed562cfc3c49e9e196375c28b729dcef8543abf4f9438e381bf3c76", size = 11982966, upload-time = "2026-05-11T18:53:55.043Z" },
+ { url = "https://files.pythonhosted.org/packages/38/55/792619469bab9882d8bbd5865d45a72f6478762d04a9af4bf0d08c503e95/pandas-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:3c20a521bbb85902f79f7270c80a59e1b5452d96d170c034f207181870f97ac5", size = 9876755, upload-time = "2026-05-11T18:53:58.067Z" },
+ { url = "https://files.pythonhosted.org/packages/2a/af/33c469653b0ba03b50c3a98192d4c07f0c75c66b263ceb097fce0ee97d31/pandas-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:a2d2dff8a04f3917b55ab3910c32990f8ddf7eceba114947838cefa976a68977", size = 9198658, upload-time = "2026-05-11T18:54:00.733Z" },
+ { url = "https://files.pythonhosted.org/packages/a2/fa/b8c257bd76b8bd060c3a9151c1fca05e9b9c5e3af5d0f549c0356f6d143d/pandas-3.0.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:0d589105b3c14645af1738ff279b2995102d8f7a03b0a66dc8d95550eb513e04", size = 10787242, upload-time = "2026-05-11T18:54:03.564Z" },
+ { url = "https://files.pythonhosted.org/packages/54/eb/f19206ffb0bf1919002969aa448b4702c6594845156a6f8050674855aac3/pandas-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:13fc1e853d9e04743d11ba75a985ccbc2a317fe07d8af61e445a6fd24dacd6a6", size = 10436369, upload-time = "2026-05-11T18:54:06.311Z" },
+ { url = "https://files.pythonhosted.org/packages/fd/24/c7c39fb4fe22b71a0c2d78bf0c585c600092d85f94f086d2b3b2f6ca27e2/pandas-3.0.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:819959dab7bbd0049c15623fbac4e29a191b9528160a61fb1032242d8ced2d9c", size = 10358306, upload-time = "2026-05-11T18:54:09.085Z" },
+ { url = "https://files.pythonhosted.org/packages/16/ec/dd2a9eb7fa1204df88c0864164e35b228ac581062ac612ba0a67fd812e4c/pandas-3.0.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:60ae316d3fd75d1858d450d0db0103ea2be3e7d4a95ec2f064f7e2ae63f7b028", size = 10758394, upload-time = "2026-05-11T18:54:11.956Z" },
+ { url = "https://files.pythonhosted.org/packages/95/6e/00c61ea8e85b4f6d8d35e11852a1a4998fc7fafc91c6a602d1cc9c972d64/pandas-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bd3a518890b400d32f9023722dc9a9a5c969f00b415419a3c06c043f09bb5d7d", size = 11375717, upload-time = "2026-05-11T18:54:14.539Z" },
+ { url = "https://files.pythonhosted.org/packages/31/89/8fc1c268969fac43688d65fd92e67df24bd128d53cb4d2eee534cd307399/pandas-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9c39be2d709d01fa972a0cabc522389fceca4f3969332ba25a7d6c5802cf976a", size = 11828897, upload-time = "2026-05-11T18:54:17.146Z" },
+ { url = "https://files.pythonhosted.org/packages/56/3b/e7d20dea247a3e6dc0bd8a6953854afbedc03951def4e7371e05e7263e25/pandas-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4db8c527972a821cf5286b40ccc57642a39bc62e62022b42f99f8a67fca8c3a1", size = 10900855, upload-time = "2026-05-11T18:54:19.72Z" },
+ { url = "https://files.pythonhosted.org/packages/0f/54/68a0978d1ef8502b8492099beaa6e7a0c1b32e3b5d4f677f5810cb08711c/pandas-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b2c95f8bfc1ee412bf482605d7bfd30c12d1d26bd59fdd91efeef1d4718decb1", size = 9466464, upload-time = "2026-05-11T18:54:22.754Z" },
+]
+
[[package]]
name = "pathspec"
version = "1.0.3"
@@ -806,7 +1236,7 @@ wheels = [
[[package]]
name = "profound"
-version = "0.42.0"
+version = "0.53.0"
source = { editable = "." }
dependencies = [
{ name = "anyio" },
@@ -881,6 +1311,32 @@ pydantic-v2 = [
{ name = "pydantic", marker = "python_full_version >= '3.14'", specifier = "~=2.12" },
]
+[[package]]
+name = "profound-examples"
+version = "0.1.0"
+source = { virtual = "examples" }
+dependencies = [
+ { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" },
+ { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" },
+ { name = "profound" },
+ { name = "pytz" },
+]
+
+[package.dev-dependencies]
+dev = [
+ { name = "ruff" },
+]
+
+[package.metadata]
+requires-dist = [
+ { name = "pandas", specifier = ">=2.3.3" },
+ { name = "profound", editable = "." },
+ { name = "pytz", specifier = ">=2025.2" },
+]
+
+[package.metadata.requires-dev]
+dev = [{ name = "ruff", specifier = ">=0.14.13" }]
+
[[package]]
name = "propcache"
version = "0.4.1"
@@ -1015,7 +1471,16 @@ name = "pydantic"
version = "1.10.26"
source = { registry = "https://pypi.org/simple" }
resolution-markers = [
- "python_full_version >= '3.10'",
+ "python_full_version >= '3.14' and sys_platform == 'win32'",
+ "python_full_version >= '3.14' and sys_platform == 'emscripten'",
+ "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'",
+ "python_full_version == '3.11.*' and sys_platform == 'win32'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'",
+ "python_full_version == '3.11.*' and sys_platform == 'emscripten'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+ "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+ "python_full_version == '3.10.*'",
"python_full_version < '3.10'",
]
dependencies = [
@@ -1061,11 +1526,17 @@ name = "pydantic"
version = "2.12.5"
source = { registry = "https://pypi.org/simple" }
resolution-markers = [
- "python_full_version >= '3.14' and extra != 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2'",
- "python_full_version >= '3.10' and python_full_version < '3.14' and extra != 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2'",
- "python_full_version < '3.10' and extra != 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2'",
- "python_full_version >= '3.10' and extra != 'group-8-profound-pydantic-v1' and extra != 'group-8-profound-pydantic-v2'",
- "python_full_version < '3.10' and extra != 'group-8-profound-pydantic-v1' and extra != 'group-8-profound-pydantic-v2'",
+ "python_full_version >= '3.14' and sys_platform == 'win32'",
+ "python_full_version >= '3.14' and sys_platform == 'emscripten'",
+ "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'",
+ "python_full_version == '3.11.*' and sys_platform == 'win32'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'",
+ "python_full_version == '3.11.*' and sys_platform == 'emscripten'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+ "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+ "python_full_version == '3.10.*'",
+ "python_full_version < '3.10'",
]
dependencies = [
{ name = "annotated-types", marker = "extra == 'group-8-profound-pydantic-v2' or extra != 'group-8-profound-pydantic-v1'" },
@@ -1257,10 +1728,16 @@ name = "pytest"
version = "9.0.2"
source = { registry = "https://pypi.org/simple" }
resolution-markers = [
- "python_full_version >= '3.14' and extra != 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2'",
- "python_full_version >= '3.10' and python_full_version < '3.14' and extra != 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2'",
- "python_full_version >= '3.10' and extra == 'group-8-profound-pydantic-v1' and extra != 'group-8-profound-pydantic-v2'",
- "python_full_version >= '3.10' and extra != 'group-8-profound-pydantic-v1' and extra != 'group-8-profound-pydantic-v2'",
+ "python_full_version >= '3.14' and sys_platform == 'win32'",
+ "python_full_version >= '3.14' and sys_platform == 'emscripten'",
+ "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'",
+ "python_full_version == '3.11.*' and sys_platform == 'win32'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'",
+ "python_full_version == '3.11.*' and sys_platform == 'emscripten'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+ "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+ "python_full_version == '3.10.*'",
]
dependencies = [
{ name = "colorama", marker = "(python_full_version >= '3.10' and sys_platform == 'win32') or (python_full_version < '3.10' and extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2') or (sys_platform != 'win32' and extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" },
@@ -1298,10 +1775,16 @@ name = "pytest-asyncio"
version = "1.3.0"
source = { registry = "https://pypi.org/simple" }
resolution-markers = [
- "python_full_version >= '3.14' and extra != 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2'",
- "python_full_version >= '3.10' and python_full_version < '3.14' and extra != 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2'",
- "python_full_version >= '3.10' and extra == 'group-8-profound-pydantic-v1' and extra != 'group-8-profound-pydantic-v2'",
- "python_full_version >= '3.10' and extra != 'group-8-profound-pydantic-v1' and extra != 'group-8-profound-pydantic-v2'",
+ "python_full_version >= '3.14' and sys_platform == 'win32'",
+ "python_full_version >= '3.14' and sys_platform == 'emscripten'",
+ "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'",
+ "python_full_version == '3.11.*' and sys_platform == 'win32'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'",
+ "python_full_version == '3.11.*' and sys_platform == 'emscripten'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+ "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+ "python_full_version == '3.10.*'",
]
dependencies = [
{ name = "backports-asyncio-runner", marker = "python_full_version == '3.10.*' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" },
@@ -1332,13 +1815,22 @@ name = "python-dateutil"
version = "2.9.0.post0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "six", marker = "python_full_version < '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" },
+ { name = "six" },
]
sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" },
]
+[[package]]
+name = "pytz"
+version = "2026.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/ff/46/dd499ec9038423421951e4fad73051febaa13d2df82b4064f87af8b8c0c3/pytz-2026.2.tar.gz", hash = "sha256:0e60b47b29f21574376f218fe21abc009894a2321ea16c6754f3cad6eb7cdd6a", size = 320861, upload-time = "2026-05-04T01:35:29.667Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ec/dd/96da98f892250475bdf2328112d7468abdd4acc7b902b6af23f4ed958ea0/pytz-2026.2-py2.py3-none-any.whl", hash = "sha256:04156e608bee23d3792fd45c94ae47fae1036688e75032eea2e3bf0323d1f126", size = 510141, upload-time = "2026-05-04T01:35:27.408Z" },
+]
+
[[package]]
name = "respx"
version = "0.22.0"
@@ -1516,10 +2008,16 @@ name = "time-machine"
version = "3.2.0"
source = { registry = "https://pypi.org/simple" }
resolution-markers = [
- "python_full_version >= '3.14' and extra != 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2'",
- "python_full_version >= '3.10' and python_full_version < '3.14' and extra != 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2'",
- "python_full_version >= '3.10' and extra == 'group-8-profound-pydantic-v1' and extra != 'group-8-profound-pydantic-v2'",
- "python_full_version >= '3.10' and extra != 'group-8-profound-pydantic-v1' and extra != 'group-8-profound-pydantic-v2'",
+ "python_full_version >= '3.14' and sys_platform == 'win32'",
+ "python_full_version >= '3.14' and sys_platform == 'emscripten'",
+ "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'",
+ "python_full_version == '3.11.*' and sys_platform == 'win32'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'",
+ "python_full_version == '3.11.*' and sys_platform == 'emscripten'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+ "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+ "python_full_version == '3.10.*'",
]
sdist = { url = "https://files.pythonhosted.org/packages/02/fc/37b02f6094dbb1f851145330460532176ed2f1dc70511a35828166c41e52/time_machine-3.2.0.tar.gz", hash = "sha256:a4ddd1cea17b8950e462d1805a42b20c81eb9aafc8f66b392dd5ce997e037d79", size = 14804, upload-time = "2025-12-17T23:33:02.599Z" }
wheels = [
@@ -1677,6 +2175,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" },
]
+[[package]]
+name = "tzdata"
+version = "2026.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/92/ff/5a28bdfd8c3ebec42564ac7d0e54ca3db65044a9314a97f9564fa7a1e926/tzdata-2026.3.tar.gz", hash = "sha256:4a1518b8993086a7982523e071643f3c0e5f213e75b21318e78bcabfff9d1415", size = 198674, upload-time = "2026-07-10T08:50:37.887Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e5/6d/b53b99a9f2766d095985947a5782f1702cabb129a34f7a802d7197af832f/tzdata-2026.3-py2.py3-none-any.whl", hash = "sha256:dc096730c87af6cab1b171c9d532be840741ff5d459015e7f6947bd7d7e54931", size = 348168, upload-time = "2026-07-10T08:50:36.46Z" },
+]
+
[[package]]
name = "yarl"
version = "1.22.0"
From fadb34245e14ebe738d9c585ffae8f0bae4bc000 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Wed, 22 Jul 2026 20:17:31 +0000
Subject: [PATCH 33/48] feat(api): api update
---
.stats.yml | 4 ++--
src/profound/resources/reports/accuracy.py | 12 ++++++++++++
.../accuracy_create_breakdown_params.py | 19 ++++++++++++++++++-
.../accuracy_create_breakdown_response.py | 2 ++
tests/api_resources/reports/test_accuracy.py | 14 ++++++++++++++
5 files changed, 48 insertions(+), 3 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 26bb26cb..22612716 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-ac4bfc34d1fbe01b1ab18763f490bbf2dad4d8692b0e9a3c55e3263662c0b2d6.yml
-openapi_spec_hash: 1af73c070054c564e1b1f90b315a1e89
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-b4888fbe1dcabc1af7399d0d34329e5f2d1f6365e99ff67981d1cd3663e25888.yml
+openapi_spec_hash: ed115ac0786a5d1ce1c33f939eb529f3
config_hash: 48130b77367435ca80edf565b73c49f9
diff --git a/src/profound/resources/reports/accuracy.py b/src/profound/resources/reports/accuracy.py
index d5aefa7e..156eb754 100644
--- a/src/profound/resources/reports/accuracy.py
+++ b/src/profound/resources/reports/accuracy.py
@@ -87,10 +87,12 @@ def create_breakdown(
exclude_topic_ids: bool | Omit = omit,
group_by: Optional[List[Literal["platform", "topic", "prompt", "tag", "region", "persona", "theme", "date"]]]
| Omit = omit,
+ include_groups_without_scores: bool | Omit = omit,
include_no_persona: bool | Omit = omit,
include_no_tag: bool | Omit = omit,
limit: int | Omit = omit,
offset: int | Omit = omit,
+ pagination: Optional[accuracy_create_breakdown_params.Pagination] | Omit = omit,
persona_ids: Optional[SequenceNotStr[str]] | Omit = omit,
platform_ids: Optional[SequenceNotStr[str]] | Omit = omit,
prompt_ids: Optional[SequenceNotStr[str]] | Omit = omit,
@@ -112,6 +114,8 @@ def create_breakdown(
Accuracy Breakdown
Args:
+ pagination: Canonical grouped pagination plan for Accuracy Breakdown rows.
+
extra_headers: Send extra headers
extra_query: Add additional query parameters to the request
@@ -134,10 +138,12 @@ def create_breakdown(
"date_bucket": date_bucket,
"exclude_topic_ids": exclude_topic_ids,
"group_by": group_by,
+ "include_groups_without_scores": include_groups_without_scores,
"include_no_persona": include_no_persona,
"include_no_tag": include_no_tag,
"limit": limit,
"offset": offset,
+ "pagination": pagination,
"persona_ids": persona_ids,
"platform_ids": platform_ids,
"prompt_ids": prompt_ids,
@@ -933,10 +939,12 @@ async def create_breakdown(
exclude_topic_ids: bool | Omit = omit,
group_by: Optional[List[Literal["platform", "topic", "prompt", "tag", "region", "persona", "theme", "date"]]]
| Omit = omit,
+ include_groups_without_scores: bool | Omit = omit,
include_no_persona: bool | Omit = omit,
include_no_tag: bool | Omit = omit,
limit: int | Omit = omit,
offset: int | Omit = omit,
+ pagination: Optional[accuracy_create_breakdown_params.Pagination] | Omit = omit,
persona_ids: Optional[SequenceNotStr[str]] | Omit = omit,
platform_ids: Optional[SequenceNotStr[str]] | Omit = omit,
prompt_ids: Optional[SequenceNotStr[str]] | Omit = omit,
@@ -958,6 +966,8 @@ async def create_breakdown(
Accuracy Breakdown
Args:
+ pagination: Canonical grouped pagination plan for Accuracy Breakdown rows.
+
extra_headers: Send extra headers
extra_query: Add additional query parameters to the request
@@ -980,10 +990,12 @@ async def create_breakdown(
"date_bucket": date_bucket,
"exclude_topic_ids": exclude_topic_ids,
"group_by": group_by,
+ "include_groups_without_scores": include_groups_without_scores,
"include_no_persona": include_no_persona,
"include_no_tag": include_no_tag,
"limit": limit,
"offset": offset,
+ "pagination": pagination,
"persona_ids": persona_ids,
"platform_ids": platform_ids,
"prompt_ids": prompt_ids,
diff --git a/src/profound/types/reports/accuracy_create_breakdown_params.py b/src/profound/types/reports/accuracy_create_breakdown_params.py
index b275ddad..c9386403 100644
--- a/src/profound/types/reports/accuracy_create_breakdown_params.py
+++ b/src/profound/types/reports/accuracy_create_breakdown_params.py
@@ -7,7 +7,7 @@
from ..._types import SequenceNotStr
-__all__ = ["AccuracyCreateBreakdownParams"]
+__all__ = ["AccuracyCreateBreakdownParams", "Pagination"]
class AccuracyCreateBreakdownParams(TypedDict, total=False):
@@ -31,6 +31,8 @@ class AccuracyCreateBreakdownParams(TypedDict, total=False):
group_by: Optional[List[Literal["platform", "topic", "prompt", "tag", "region", "persona", "theme", "date"]]]
+ include_groups_without_scores: bool
+
include_no_persona: bool
include_no_tag: bool
@@ -39,6 +41,9 @@ class AccuracyCreateBreakdownParams(TypedDict, total=False):
offset: int
+ pagination: Optional[Pagination]
+ """Canonical grouped pagination plan for Accuracy Breakdown rows."""
+
persona_ids: Optional[SequenceNotStr[str]]
platform_ids: Optional[SequenceNotStr[str]]
@@ -58,3 +63,15 @@ class AccuracyCreateBreakdownParams(TypedDict, total=False):
tag_ids: Optional[SequenceNotStr[str]]
topic_ids: Optional[SequenceNotStr[str]]
+
+
+class Pagination(TypedDict, total=False):
+ """Canonical grouped pagination plan for Accuracy Breakdown rows."""
+
+ dimension: Literal["group"]
+
+ direction: Optional[Literal["asc", "desc"]]
+
+ metric: Literal["accuracy", "inaccurate_claims"]
+
+ mode: Literal["current", "delta"]
diff --git a/src/profound/types/reports/accuracy_create_breakdown_response.py b/src/profound/types/reports/accuracy_create_breakdown_response.py
index d5bbd51b..c4d1440a 100644
--- a/src/profound/types/reports/accuracy_create_breakdown_response.py
+++ b/src/profound/types/reports/accuracy_create_breakdown_response.py
@@ -30,6 +30,8 @@ class Data(BaseModel):
group_names: Optional[Dict[str, str]] = FieldInfo(alias="groupNames", default=None)
+ has_score: Optional[bool] = FieldInfo(alias="hasScore", default=None)
+
inaccurate_count_change: Optional[int] = FieldInfo(alias="inaccurateCountChange", default=None)
prompt_count: Optional[int] = FieldInfo(alias="promptCount", default=None)
diff --git a/tests/api_resources/reports/test_accuracy.py b/tests/api_resources/reports/test_accuracy.py
index 224ff46b..32b7d727 100644
--- a/tests/api_resources/reports/test_accuracy.py
+++ b/tests/api_resources/reports/test_accuracy.py
@@ -55,10 +55,17 @@ def test_method_create_breakdown_with_all_params(self, client: Profound) -> None
date_bucket="date_bucket",
exclude_topic_ids=True,
group_by=["platform"],
+ include_groups_without_scores=True,
include_no_persona=True,
include_no_tag=True,
limit=1,
offset=0,
+ pagination={
+ "dimension": "group",
+ "direction": "asc",
+ "metric": "accuracy",
+ "mode": "current",
+ },
persona_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"],
platform_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"],
prompt_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"],
@@ -822,10 +829,17 @@ async def test_method_create_breakdown_with_all_params(self, async_client: Async
date_bucket="date_bucket",
exclude_topic_ids=True,
group_by=["platform"],
+ include_groups_without_scores=True,
include_no_persona=True,
include_no_tag=True,
limit=1,
offset=0,
+ pagination={
+ "dimension": "group",
+ "direction": "asc",
+ "metric": "accuracy",
+ "mode": "current",
+ },
persona_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"],
platform_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"],
prompt_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"],
From 13f9064e5c7886eac3c50de67bb64e2e0763fb44 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Wed, 22 Jul 2026 21:08:30 +0000
Subject: [PATCH 34/48] feat(api): api update
---
.stats.yml | 4 ++--
src/profound/resources/organizations/categories.py | 8 ++++----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 22612716..2524d8cf 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-b4888fbe1dcabc1af7399d0d34329e5f2d1f6365e99ff67981d1cd3663e25888.yml
-openapi_spec_hash: ed115ac0786a5d1ce1c33f939eb529f3
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-de8c712f1308a9cd6b961c512073fe881b6c24191e5d5851870804a4639741eb.yml
+openapi_spec_hash: 48293b18ef450eed58290d9c86ee1174
config_hash: 48130b77367435ca80edf565b73c49f9
diff --git a/src/profound/resources/organizations/categories.py b/src/profound/resources/organizations/categories.py
index a25f99a4..de074b28 100644
--- a/src/profound/resources/organizations/categories.py
+++ b/src/profound/resources/organizations/categories.py
@@ -111,7 +111,7 @@ def assets(
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> CategoryAssetsResponse:
"""
- Get Assets
+ Get Category Assets
Args:
extra_headers: Send extra headers
@@ -193,7 +193,7 @@ def get_category_personas(
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> CategoryGetCategoryPersonasResponse:
"""
- Get Personas
+ Get Category Personas
Args:
extra_headers: Send extra headers
@@ -587,7 +587,7 @@ async def assets(
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> CategoryAssetsResponse:
"""
- Get Assets
+ Get Category Assets
Args:
extra_headers: Send extra headers
@@ -669,7 +669,7 @@ async def get_category_personas(
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> CategoryGetCategoryPersonasResponse:
"""
- Get Personas
+ Get Category Personas
Args:
extra_headers: Send extra headers
From 6f089e68aab2fbf5cccf193aada21f7e7c890bfa Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Wed, 22 Jul 2026 21:17:33 +0000
Subject: [PATCH 35/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 2524d8cf..e2094de0 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-de8c712f1308a9cd6b961c512073fe881b6c24191e5d5851870804a4639741eb.yml
-openapi_spec_hash: 48293b18ef450eed58290d9c86ee1174
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-a559e47b2b67de8ac212b68ee758c519735ca8ba328889b846aaabe89c286773.yml
+openapi_spec_hash: 4976b77b76efe21a844a629d7787ca6f
config_hash: 48130b77367435ca80edf565b73c49f9
From 9549e3dea7bec7c6854d653e661bc4f7592d82b3 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 23 Jul 2026 03:17:26 +0000
Subject: [PATCH 36/48] feat(api): api update
---
.stats.yml | 4 +-
src/profound/resources/reports/reports.py | 38 +++++++++++--------
src/profound/types/report_citations_params.py | 13 ++++++-
.../types/report_stream_citations_params.py | 13 ++++++-
4 files changed, 48 insertions(+), 20 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index e2094de0..b625af3a 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-a559e47b2b67de8ac212b68ee758c519735ca8ba328889b846aaabe89c286773.yml
-openapi_spec_hash: 4976b77b76efe21a844a629d7787ca6f
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-43809c9e9152edc94eb2e6dc484974a4b941f64abf7ac68fdc6e794725e0c361.yml
+openapi_spec_hash: 1725abd07294ed1399550f74847fb0fa
config_hash: 48130b77367435ca80edf565b73c49f9
diff --git a/src/profound/resources/reports/reports.py b/src/profound/resources/reports/reports.py
index e9e071d6..d491ac7e 100644
--- a/src/profound/resources/reports/reports.py
+++ b/src/profound/resources/reports/reports.py
@@ -166,12 +166,16 @@ def citations(
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> ReportCitationsResponse:
- """Get citations for a given category.
+ """
+ Get citations for a given category.
- Args:
- end_date: End date for the report.
+ The `mentioned` filter supports `is true` and `is false`. It uses the latest
+ page analysis available at or before `end_date`; pages without an analysis by
+ then are excluded from both values. `citation_share` keeps all otherwise
+ eligible citations in its denominator when this filter is used.
- Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full
+ Args:
+ end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full
ISO timestamp.
metrics: Metrics to include. `share_of_voice` is deprecated, use `citation_share`
@@ -1212,12 +1216,11 @@ def stream_citations(
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> Stream[ReportStreamCitationsResponse]:
- """Stream Citations
+ """
+ Stream citations with the same filter semantics as the non-streaming route.
Args:
- end_date: End date for the report.
-
- Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full
+ end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full
ISO timestamp.
metrics: Metrics to include. `share_of_voice` is deprecated, use `citation_share`
@@ -1976,12 +1979,16 @@ async def citations(
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> ReportCitationsResponse:
- """Get citations for a given category.
+ """
+ Get citations for a given category.
- Args:
- end_date: End date for the report.
+ The `mentioned` filter supports `is true` and `is false`. It uses the latest
+ page analysis available at or before `end_date`; pages without an analysis by
+ then are excluded from both values. `citation_share` keeps all otherwise
+ eligible citations in its denominator when this filter is used.
- Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full
+ Args:
+ end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full
ISO timestamp.
metrics: Metrics to include. `share_of_voice` is deprecated, use `citation_share`
@@ -3022,12 +3029,11 @@ async def stream_citations(
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> AsyncStream[ReportStreamCitationsResponse]:
- """Stream Citations
+ """
+ Stream citations with the same filter semantics as the non-streaming route.
Args:
- end_date: End date for the report.
-
- Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full
+ end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full
ISO timestamp.
metrics: Metrics to include. `share_of_voice` is deprecated, use `citation_share`
diff --git a/src/profound/types/report_citations_params.py b/src/profound/types/report_citations_params.py
index ec17e087..3f8e9cf8 100644
--- a/src/profound/types/report_citations_params.py
+++ b/src/profound/types/report_citations_params.py
@@ -26,7 +26,7 @@
from .shared_params.region_name_filter import RegionNameFilter
from .shared_params.analysis_type_filter import AnalysisTypeFilter
-__all__ = ["ReportCitationsParams", "Filter", "FilterCitationCategoryFilter"]
+__all__ = ["ReportCitationsParams", "Filter", "FilterCitationCategoryFilter", "FilterMentionedFilter"]
class ReportCitationsParams(TypedDict, total=False):
@@ -112,6 +112,16 @@ class FilterCitationCategoryFilter(TypedDict, total=False):
value: Required[Union[str, SequenceNotStr[str]]]
+class FilterMentionedFilter(TypedDict, total=False):
+ """Filter citation pages by whether they mention an owned category asset."""
+
+ field: Required[Literal["mentioned"]]
+
+ operator: Required[Literal["is"]]
+
+ value: Required[Union[bool, Iterable[bool]]]
+
+
Filter: TypeAlias = Union[
HostnameFilterParam,
PathFilter,
@@ -130,4 +140,5 @@ class FilterCitationCategoryFilter(TypedDict, total=False):
FilterCitationCategoryFilter,
PromptFilter,
PromptIDFilterParam,
+ FilterMentionedFilter,
]
diff --git a/src/profound/types/report_stream_citations_params.py b/src/profound/types/report_stream_citations_params.py
index 3dfceea5..dec5d957 100644
--- a/src/profound/types/report_stream_citations_params.py
+++ b/src/profound/types/report_stream_citations_params.py
@@ -26,7 +26,7 @@
from .shared_params.region_name_filter import RegionNameFilter
from .shared_params.analysis_type_filter import AnalysisTypeFilter
-__all__ = ["ReportStreamCitationsParams", "Filter", "FilterCitationCategoryFilter"]
+__all__ = ["ReportStreamCitationsParams", "Filter", "FilterCitationCategoryFilter", "FilterMentionedFilter"]
class ReportStreamCitationsParams(TypedDict, total=False):
@@ -112,6 +112,16 @@ class FilterCitationCategoryFilter(TypedDict, total=False):
value: Required[Union[str, SequenceNotStr[str]]]
+class FilterMentionedFilter(TypedDict, total=False):
+ """Filter citation pages by whether they mention an owned category asset."""
+
+ field: Required[Literal["mentioned"]]
+
+ operator: Required[Literal["is"]]
+
+ value: Required[Union[bool, Iterable[bool]]]
+
+
Filter: TypeAlias = Union[
HostnameFilterParam,
PathFilter,
@@ -130,4 +140,5 @@ class FilterCitationCategoryFilter(TypedDict, total=False):
FilterCitationCategoryFilter,
PromptFilter,
PromptIDFilterParam,
+ FilterMentionedFilter,
]
From 205aad0ca05fa9e8250bc2f70f3f827a193eb0fd Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 23 Jul 2026 15:17:27 +0000
Subject: [PATCH 37/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index b625af3a..5ccbc5ef 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-43809c9e9152edc94eb2e6dc484974a4b941f64abf7ac68fdc6e794725e0c361.yml
-openapi_spec_hash: 1725abd07294ed1399550f74847fb0fa
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-be6b9412f09212bb401a30cae782ba1e63ea941176fe6bb47c85df7128a38a94.yml
+openapi_spec_hash: a1119e6ea37ff005bc6c4587cba8ebaa
config_hash: 48130b77367435ca80edf565b73c49f9
From a25750e935139c20c3f38eff1485ccfca371f1e7 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 23 Jul 2026 23:17:25 +0000
Subject: [PATCH 38/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 5ccbc5ef..f8c09217 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-be6b9412f09212bb401a30cae782ba1e63ea941176fe6bb47c85df7128a38a94.yml
-openapi_spec_hash: a1119e6ea37ff005bc6c4587cba8ebaa
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-45b393d02b221213d75a999148fdfbc1b01d55c6b1d23eb2c340ede6b8a8a0d2.yml
+openapi_spec_hash: bb9d862c5df379c6a22acdabc5f30ee7
config_hash: 48130b77367435ca80edf565b73c49f9
From 3498a56a7746baf081d8c3b2be8d934547428d63 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 24 Jul 2026 02:17:27 +0000
Subject: [PATCH 39/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index f8c09217..483f8ac5 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-45b393d02b221213d75a999148fdfbc1b01d55c6b1d23eb2c340ede6b8a8a0d2.yml
-openapi_spec_hash: bb9d862c5df379c6a22acdabc5f30ee7
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-aee046cb7538e41d24c4af426dc47d6a314cb78f10fd2fb735c648c6ce1e71ce.yml
+openapi_spec_hash: baf466eab288a82fbb040ae4f9838ab8
config_hash: 48130b77367435ca80edf565b73c49f9
From edf0fe4e6052b5c0353521e102391d9fb729ab11 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 24 Jul 2026 15:17:26 +0000
Subject: [PATCH 40/48] feat(api): api update
---
.stats.yml | 4 +-
.../report_get_referrals_report_params.py | 40 ++------
.../report_get_referrals_report_v2_params.py | 40 ++------
src/profound/types/shared/bot_name_filter.py | 93 ++---------------
.../types/shared/bot_provider_filter.py | 2 +
.../types/shared_params/bot_name_filter.py | 99 ++-----------------
.../shared_params/bot_provider_filter.py | 2 +
7 files changed, 35 insertions(+), 245 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 483f8ac5..55d436d9 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-aee046cb7538e41d24c4af426dc47d6a314cb78f10fd2fb735c648c6ce1e71ce.yml
-openapi_spec_hash: baf466eab288a82fbb040ae4f9838ab8
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-ee24ab02360893800f8a7090835d528c35dd014ae2763d825b760bcc87149c59.yml
+openapi_spec_hash: 6c6391cc04de2ca91b7705933b8092c8
config_hash: 48130b77367435ca80edf565b73c49f9
diff --git a/src/profound/types/report_get_referrals_report_params.py b/src/profound/types/report_get_referrals_report_params.py
index 5039b740..fe899e15 100644
--- a/src/profound/types/report_get_referrals_report_params.py
+++ b/src/profound/types/report_get_referrals_report_params.py
@@ -6,6 +6,7 @@
from datetime import datetime
from typing_extensions import Literal, Required, Annotated, TypeAlias, TypedDict
+from .._types import SequenceNotStr
from .._utils import PropertyInfo
from .shared_params.pagination import Pagination
from .shared_params.path_filter import PathFilter
@@ -64,7 +65,11 @@ class ReportGetReferralsReportParams(TypedDict, total=False):
class FilterReferralSourceFilter(TypedDict, total=False):
- """Filter by referral source"""
+ """Filter by referral source.
+
+ Values are not enum-constrained so the platform's shared
+ provider filter can pass through IDs that have bot data but no referral data.
+ """
field: Required[Literal["referral_source"]]
@@ -82,38 +87,7 @@ class FilterReferralSourceFilter(TypedDict, total=False):
]
]
- value: Required[
- Union[
- Literal[
- "openai",
- "none",
- "anthropic",
- "deepseek",
- "perplexity",
- "you",
- "grok",
- "microsoft",
- "gemini",
- "internal",
- "other",
- ],
- List[
- Literal[
- "openai",
- "none",
- "anthropic",
- "deepseek",
- "perplexity",
- "you",
- "grok",
- "microsoft",
- "gemini",
- "internal",
- "other",
- ]
- ],
- ]
- ]
+ value: Required[Union[str, SequenceNotStr[str]]]
Filter: TypeAlias = Union[PathFilter, FilterReferralSourceFilter]
diff --git a/src/profound/types/report_get_referrals_report_v2_params.py b/src/profound/types/report_get_referrals_report_v2_params.py
index 5d1d799c..6c545e99 100644
--- a/src/profound/types/report_get_referrals_report_v2_params.py
+++ b/src/profound/types/report_get_referrals_report_v2_params.py
@@ -6,6 +6,7 @@
from datetime import datetime
from typing_extensions import Literal, Required, Annotated, TypeAlias, TypedDict
+from .._types import SequenceNotStr
from .._utils import PropertyInfo
from .shared_params.pagination import Pagination
from .shared_params.path_filter import PathFilter
@@ -73,7 +74,11 @@ class ReportGetReferralsReportV2Params(TypedDict, total=False):
class FilterReferralSourceFilter(TypedDict, total=False):
- """Filter by referral source"""
+ """Filter by referral source.
+
+ Values are not enum-constrained so the platform's shared
+ provider filter can pass through IDs that have bot data but no referral data.
+ """
field: Required[Literal["referral_source"]]
@@ -91,38 +96,7 @@ class FilterReferralSourceFilter(TypedDict, total=False):
]
]
- value: Required[
- Union[
- Literal[
- "openai",
- "none",
- "anthropic",
- "deepseek",
- "perplexity",
- "you",
- "grok",
- "microsoft",
- "gemini",
- "internal",
- "other",
- ],
- List[
- Literal[
- "openai",
- "none",
- "anthropic",
- "deepseek",
- "perplexity",
- "you",
- "grok",
- "microsoft",
- "gemini",
- "internal",
- "other",
- ]
- ],
- ]
- ]
+ value: Required[Union[str, SequenceNotStr[str]]]
class FilterReferralTypeFilter(TypedDict, total=False):
diff --git a/src/profound/types/shared/bot_name_filter.py b/src/profound/types/shared/bot_name_filter.py
index fc7d0923..84088df2 100644
--- a/src/profound/types/shared/bot_name_filter.py
+++ b/src/profound/types/shared/bot_name_filter.py
@@ -9,7 +9,11 @@
class BotNameFilter(BaseModel):
- """Filter by bot name (user agent)"""
+ """Filter by bot name (user agent).
+
+ Values come from analytics data and should
+ not be enum-constrained because web-v2 may send newly cataloged user-agent names.
+ """
field: Literal["bot_name"]
@@ -25,89 +29,4 @@ class BotNameFilter(BaseModel):
"not_contains_case_insensitive",
]
- value: Union[
- Literal[
- "Amazonbot",
- "ClaudeBot",
- "Claude-User",
- "Claude-SearchBot",
- "Applebot",
- "Applebot-Extended",
- "Bytespider",
- "DeepSeek",
- "DuckAssistBot",
- "DuckDuckBot",
- "Googlebot",
- "Googlebot-News",
- "Googlebot-Video",
- "Googlebot-Image",
- "Google-Extended",
- "Storebot-Google",
- "Google-CloudVertexBot",
- "meta-externalfetcher",
- "meta-externalagent",
- "bingbot",
- "MicrosoftPreview",
- "ChatGPT-User",
- "GPTBot",
- "OAI-SearchBot",
- "OAI-Operator",
- "PerplexityBot",
- "Perplexity-User",
- "Grok-PageBrowser",
- "YouBot",
- "OpenClaw",
- "baiduspider",
- "CCBot",
- "ERNIEBot",
- "Gemini-Fetch",
- "YandexBot",
- "PetalBot",
- "MistralAI-User",
- "Slurp",
- "Gemini-Deep-Research",
- ],
- List[
- Literal[
- "Amazonbot",
- "ClaudeBot",
- "Claude-User",
- "Claude-SearchBot",
- "Applebot",
- "Applebot-Extended",
- "Bytespider",
- "DeepSeek",
- "DuckAssistBot",
- "DuckDuckBot",
- "Googlebot",
- "Googlebot-News",
- "Googlebot-Video",
- "Googlebot-Image",
- "Google-Extended",
- "Storebot-Google",
- "Google-CloudVertexBot",
- "meta-externalfetcher",
- "meta-externalagent",
- "bingbot",
- "MicrosoftPreview",
- "ChatGPT-User",
- "GPTBot",
- "OAI-SearchBot",
- "OAI-Operator",
- "PerplexityBot",
- "Perplexity-User",
- "Grok-PageBrowser",
- "YouBot",
- "OpenClaw",
- "baiduspider",
- "CCBot",
- "ERNIEBot",
- "Gemini-Fetch",
- "YandexBot",
- "PetalBot",
- "MistralAI-User",
- "Slurp",
- "Gemini-Deep-Research",
- ]
- ],
- ]
+ value: Union[str, List[str]]
diff --git a/src/profound/types/shared/bot_provider_filter.py b/src/profound/types/shared/bot_provider_filter.py
index 904ef62e..9168234a 100644
--- a/src/profound/types/shared/bot_provider_filter.py
+++ b/src/profound/types/shared/bot_provider_filter.py
@@ -40,6 +40,7 @@ class BotProviderFilter(BaseModel):
"meta",
"duckduckgo",
"you",
+ "you.com",
"xai",
"grok",
"gemini",
@@ -66,6 +67,7 @@ class BotProviderFilter(BaseModel):
"meta",
"duckduckgo",
"you",
+ "you.com",
"xai",
"grok",
"gemini",
diff --git a/src/profound/types/shared_params/bot_name_filter.py b/src/profound/types/shared_params/bot_name_filter.py
index 7db87388..81450d87 100644
--- a/src/profound/types/shared_params/bot_name_filter.py
+++ b/src/profound/types/shared_params/bot_name_filter.py
@@ -2,14 +2,20 @@
from __future__ import annotations
-from typing import List, Union
+from typing import Union
from typing_extensions import Literal, Required, TypedDict
+from ..._types import SequenceNotStr
+
__all__ = ["BotNameFilter"]
class BotNameFilter(TypedDict, total=False):
- """Filter by bot name (user agent)"""
+ """Filter by bot name (user agent).
+
+ Values come from analytics data and should
+ not be enum-constrained because web-v2 may send newly cataloged user-agent names.
+ """
field: Required[Literal["bot_name"]]
@@ -27,91 +33,4 @@ class BotNameFilter(TypedDict, total=False):
]
]
- value: Required[
- Union[
- Literal[
- "Amazonbot",
- "ClaudeBot",
- "Claude-User",
- "Claude-SearchBot",
- "Applebot",
- "Applebot-Extended",
- "Bytespider",
- "DeepSeek",
- "DuckAssistBot",
- "DuckDuckBot",
- "Googlebot",
- "Googlebot-News",
- "Googlebot-Video",
- "Googlebot-Image",
- "Google-Extended",
- "Storebot-Google",
- "Google-CloudVertexBot",
- "meta-externalfetcher",
- "meta-externalagent",
- "bingbot",
- "MicrosoftPreview",
- "ChatGPT-User",
- "GPTBot",
- "OAI-SearchBot",
- "OAI-Operator",
- "PerplexityBot",
- "Perplexity-User",
- "Grok-PageBrowser",
- "YouBot",
- "OpenClaw",
- "baiduspider",
- "CCBot",
- "ERNIEBot",
- "Gemini-Fetch",
- "YandexBot",
- "PetalBot",
- "MistralAI-User",
- "Slurp",
- "Gemini-Deep-Research",
- ],
- List[
- Literal[
- "Amazonbot",
- "ClaudeBot",
- "Claude-User",
- "Claude-SearchBot",
- "Applebot",
- "Applebot-Extended",
- "Bytespider",
- "DeepSeek",
- "DuckAssistBot",
- "DuckDuckBot",
- "Googlebot",
- "Googlebot-News",
- "Googlebot-Video",
- "Googlebot-Image",
- "Google-Extended",
- "Storebot-Google",
- "Google-CloudVertexBot",
- "meta-externalfetcher",
- "meta-externalagent",
- "bingbot",
- "MicrosoftPreview",
- "ChatGPT-User",
- "GPTBot",
- "OAI-SearchBot",
- "OAI-Operator",
- "PerplexityBot",
- "Perplexity-User",
- "Grok-PageBrowser",
- "YouBot",
- "OpenClaw",
- "baiduspider",
- "CCBot",
- "ERNIEBot",
- "Gemini-Fetch",
- "YandexBot",
- "PetalBot",
- "MistralAI-User",
- "Slurp",
- "Gemini-Deep-Research",
- ]
- ],
- ]
- ]
+ value: Required[Union[str, SequenceNotStr[str]]]
diff --git a/src/profound/types/shared_params/bot_provider_filter.py b/src/profound/types/shared_params/bot_provider_filter.py
index b97373a8..1861cf75 100644
--- a/src/profound/types/shared_params/bot_provider_filter.py
+++ b/src/profound/types/shared_params/bot_provider_filter.py
@@ -43,6 +43,7 @@ class BotProviderFilter(TypedDict, total=False):
"meta",
"duckduckgo",
"you",
+ "you.com",
"xai",
"grok",
"gemini",
@@ -69,6 +70,7 @@ class BotProviderFilter(TypedDict, total=False):
"meta",
"duckduckgo",
"you",
+ "you.com",
"xai",
"grok",
"gemini",
From c972f3eb6c6506a377235f9bf6e1f9452190991d Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 24 Jul 2026 15:27:57 +0000
Subject: [PATCH 41/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 55d436d9..8115a4a8 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-ee24ab02360893800f8a7090835d528c35dd014ae2763d825b760bcc87149c59.yml
-openapi_spec_hash: 6c6391cc04de2ca91b7705933b8092c8
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-4d33d72ab864eb1d9c3557a27526fd44a147f835a140327cc75312919f33f113.yml
+openapi_spec_hash: d25b28b971d451bb671a4714e1a066c3
config_hash: 48130b77367435ca80edf565b73c49f9
From 8a0b8d0541764a82a5c7bc137b7f666ddb68cd5f Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 24 Jul 2026 15:39:22 +0000
Subject: [PATCH 42/48] feat(api): manual updates
---
.stats.yml | 6 +-
api.md | 12 +
src/profound/_client.py | 39 +++-
src/profound/resources/__init__.py | 14 ++
src/profound/resources/integrations.py | 210 ++++++++++++++++++
src/profound/types/__init__.py | 2 +
src/profound/types/integration_list_params.py | 19 ++
.../types/integration_list_response.py | 34 +++
tests/api_resources/test_integrations.py | 100 +++++++++
9 files changed, 432 insertions(+), 4 deletions(-)
create mode 100644 src/profound/resources/integrations.py
create mode 100644 src/profound/types/integration_list_params.py
create mode 100644 src/profound/types/integration_list_response.py
create mode 100644 tests/api_resources/test_integrations.py
diff --git a/.stats.yml b/.stats.yml
index 8115a4a8..ba56ecd4 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
-configured_endpoints: 102
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-4d33d72ab864eb1d9c3557a27526fd44a147f835a140327cc75312919f33f113.yml
+configured_endpoints: 103
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-79261d6167720ca4d288ffa83e1e1ef14880b47746ac7dbe705ced5e592abbd3.yml
openapi_spec_hash: d25b28b971d451bb671a4714e1a066c3
-config_hash: 48130b77367435ca80edf565b73c49f9
+config_hash: f47f5fe0661d0c081ac6f2364b4cf41a
diff --git a/api.md b/api.md
index 7a40c941..ffcbbbf3 100644
--- a/api.md
+++ b/api.md
@@ -439,3 +439,15 @@ Methods:
- client.projects.tasks.list(project_id, \*\*params) -> TaskListResponse
- client.projects.tasks.delete(task_id, \*, project_id, \*\*params) -> None
- client.projects.tasks.update_status(task_id, \*, project_id, \*\*params) -> TaskUpdateStatusResponse
+
+# Integrations
+
+Types:
+
+```python
+from profound.types import IntegrationListResponse
+```
+
+Methods:
+
+- client.integrations.list(\*\*params) -> IntegrationListResponse
diff --git a/src/profound/_client.py b/src/profound/_client.py
index 5db25034..e547da8f 100644
--- a/src/profound/_client.py
+++ b/src/profound/_client.py
@@ -36,8 +36,9 @@
)
if TYPE_CHECKING:
- from .resources import agents, content, prompts, reports, projects, organizations, knowledge_bases
+ from .resources import agents, content, prompts, reports, projects, integrations, organizations, knowledge_bases
from .resources.prompts import PromptsResource, AsyncPromptsResource
+ from .resources.integrations import IntegrationsResource, AsyncIntegrationsResource
from .resources.agents.agents import AgentsResource, AsyncAgentsResource
from .resources.content.content import ContentResource, AsyncContentResource
from .resources.reports.reports import ReportsResource, AsyncReportsResource
@@ -197,6 +198,12 @@ def projects(self) -> ProjectsResource:
return ProjectsResource(self)
+ @cached_property
+ def integrations(self) -> IntegrationsResource:
+ from .resources.integrations import IntegrationsResource
+
+ return IntegrationsResource(self)
+
@cached_property
def with_raw_response(self) -> ProfoundWithRawResponse:
return ProfoundWithRawResponse(self)
@@ -473,6 +480,12 @@ def projects(self) -> AsyncProjectsResource:
return AsyncProjectsResource(self)
+ @cached_property
+ def integrations(self) -> AsyncIntegrationsResource:
+ from .resources.integrations import AsyncIntegrationsResource
+
+ return AsyncIntegrationsResource(self)
+
@cached_property
def with_raw_response(self) -> AsyncProfoundWithRawResponse:
return AsyncProfoundWithRawResponse(self)
@@ -663,6 +676,12 @@ def projects(self) -> projects.ProjectsResourceWithRawResponse:
return ProjectsResourceWithRawResponse(self._client.projects)
+ @cached_property
+ def integrations(self) -> integrations.IntegrationsResourceWithRawResponse:
+ from .resources.integrations import IntegrationsResourceWithRawResponse
+
+ return IntegrationsResourceWithRawResponse(self._client.integrations)
+
class AsyncProfoundWithRawResponse:
_client: AsyncProfound
@@ -712,6 +731,12 @@ def projects(self) -> projects.AsyncProjectsResourceWithRawResponse:
return AsyncProjectsResourceWithRawResponse(self._client.projects)
+ @cached_property
+ def integrations(self) -> integrations.AsyncIntegrationsResourceWithRawResponse:
+ from .resources.integrations import AsyncIntegrationsResourceWithRawResponse
+
+ return AsyncIntegrationsResourceWithRawResponse(self._client.integrations)
+
class ProfoundWithStreamedResponse:
_client: Profound
@@ -761,6 +786,12 @@ def projects(self) -> projects.ProjectsResourceWithStreamingResponse:
return ProjectsResourceWithStreamingResponse(self._client.projects)
+ @cached_property
+ def integrations(self) -> integrations.IntegrationsResourceWithStreamingResponse:
+ from .resources.integrations import IntegrationsResourceWithStreamingResponse
+
+ return IntegrationsResourceWithStreamingResponse(self._client.integrations)
+
class AsyncProfoundWithStreamedResponse:
_client: AsyncProfound
@@ -810,6 +841,12 @@ def projects(self) -> projects.AsyncProjectsResourceWithStreamingResponse:
return AsyncProjectsResourceWithStreamingResponse(self._client.projects)
+ @cached_property
+ def integrations(self) -> integrations.AsyncIntegrationsResourceWithStreamingResponse:
+ from .resources.integrations import AsyncIntegrationsResourceWithStreamingResponse
+
+ return AsyncIntegrationsResourceWithStreamingResponse(self._client.integrations)
+
Client = Profound
diff --git a/src/profound/resources/__init__.py b/src/profound/resources/__init__.py
index 274c95dd..d46f886e 100644
--- a/src/profound/resources/__init__.py
+++ b/src/profound/resources/__init__.py
@@ -40,6 +40,14 @@
ProjectsResourceWithStreamingResponse,
AsyncProjectsResourceWithStreamingResponse,
)
+from .integrations import (
+ IntegrationsResource,
+ AsyncIntegrationsResource,
+ IntegrationsResourceWithRawResponse,
+ AsyncIntegrationsResourceWithRawResponse,
+ IntegrationsResourceWithStreamingResponse,
+ AsyncIntegrationsResourceWithStreamingResponse,
+)
from .organizations import (
OrganizationsResource,
AsyncOrganizationsResource,
@@ -100,4 +108,10 @@
"AsyncProjectsResourceWithRawResponse",
"ProjectsResourceWithStreamingResponse",
"AsyncProjectsResourceWithStreamingResponse",
+ "IntegrationsResource",
+ "AsyncIntegrationsResource",
+ "IntegrationsResourceWithRawResponse",
+ "AsyncIntegrationsResourceWithRawResponse",
+ "IntegrationsResourceWithStreamingResponse",
+ "AsyncIntegrationsResourceWithStreamingResponse",
]
diff --git a/src/profound/resources/integrations.py b/src/profound/resources/integrations.py
new file mode 100644
index 00000000..25d73b5d
--- /dev/null
+++ b/src/profound/resources/integrations.py
@@ -0,0 +1,210 @@
+# 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 Literal
+
+import httpx
+
+from ..types import integration_list_params
+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.integration_list_response import IntegrationListResponse
+
+__all__ = ["IntegrationsResource", "AsyncIntegrationsResource"]
+
+
+class IntegrationsResource(SyncAPIResource):
+ @cached_property
+ def with_raw_response(self) -> IntegrationsResourceWithRawResponse:
+ """
+ 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/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers
+ """
+ return IntegrationsResourceWithRawResponse(self)
+
+ @cached_property
+ def with_streaming_response(self) -> IntegrationsResourceWithStreamingResponse:
+ """
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
+
+ For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response
+ """
+ return IntegrationsResourceWithStreamingResponse(self)
+
+ def list(
+ self,
+ *,
+ organization_id: Optional[str] | Omit = omit,
+ provider: Optional[str] | Omit = omit,
+ status_filter: Optional[Literal["active", "pending", "needs_reauth", "revoking", "revoked"]] | 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,
+ ) -> IntegrationListResponse:
+ """
+ List the organization's connected integrations.
+
+ Returns every connected integration by default, each with its lifecycle
+ `status`; pass `status_filter` to narrow to one status (e.g. `needs_reauth`).
+ Each row's `integration_id` is the value a hub-backed node needs bound to it.
+
+ Args:
+ organization_id: Organization scope for API keys that can access multiple organizations.
+
+ provider: Filter to a single connector/provider id, e.g. `google_drive`.
+
+ status_filter: Filter to one lifecycle status. Omitted returns all statuses.
+
+ 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(
+ "/v1/integrations",
+ options=make_request_options(
+ extra_headers=extra_headers,
+ extra_query=extra_query,
+ extra_body=extra_body,
+ timeout=timeout,
+ query=maybe_transform(
+ {
+ "organization_id": organization_id,
+ "provider": provider,
+ "status_filter": status_filter,
+ },
+ integration_list_params.IntegrationListParams,
+ ),
+ ),
+ cast_to=IntegrationListResponse,
+ )
+
+
+class AsyncIntegrationsResource(AsyncAPIResource):
+ @cached_property
+ def with_raw_response(self) -> AsyncIntegrationsResourceWithRawResponse:
+ """
+ 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/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers
+ """
+ return AsyncIntegrationsResourceWithRawResponse(self)
+
+ @cached_property
+ def with_streaming_response(self) -> AsyncIntegrationsResourceWithStreamingResponse:
+ """
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
+
+ For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response
+ """
+ return AsyncIntegrationsResourceWithStreamingResponse(self)
+
+ async def list(
+ self,
+ *,
+ organization_id: Optional[str] | Omit = omit,
+ provider: Optional[str] | Omit = omit,
+ status_filter: Optional[Literal["active", "pending", "needs_reauth", "revoking", "revoked"]] | 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,
+ ) -> IntegrationListResponse:
+ """
+ List the organization's connected integrations.
+
+ Returns every connected integration by default, each with its lifecycle
+ `status`; pass `status_filter` to narrow to one status (e.g. `needs_reauth`).
+ Each row's `integration_id` is the value a hub-backed node needs bound to it.
+
+ Args:
+ organization_id: Organization scope for API keys that can access multiple organizations.
+
+ provider: Filter to a single connector/provider id, e.g. `google_drive`.
+
+ status_filter: Filter to one lifecycle status. Omitted returns all statuses.
+
+ 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(
+ "/v1/integrations",
+ options=make_request_options(
+ extra_headers=extra_headers,
+ extra_query=extra_query,
+ extra_body=extra_body,
+ timeout=timeout,
+ query=await async_maybe_transform(
+ {
+ "organization_id": organization_id,
+ "provider": provider,
+ "status_filter": status_filter,
+ },
+ integration_list_params.IntegrationListParams,
+ ),
+ ),
+ cast_to=IntegrationListResponse,
+ )
+
+
+class IntegrationsResourceWithRawResponse:
+ def __init__(self, integrations: IntegrationsResource) -> None:
+ self._integrations = integrations
+
+ self.list = to_raw_response_wrapper(
+ integrations.list,
+ )
+
+
+class AsyncIntegrationsResourceWithRawResponse:
+ def __init__(self, integrations: AsyncIntegrationsResource) -> None:
+ self._integrations = integrations
+
+ self.list = async_to_raw_response_wrapper(
+ integrations.list,
+ )
+
+
+class IntegrationsResourceWithStreamingResponse:
+ def __init__(self, integrations: IntegrationsResource) -> None:
+ self._integrations = integrations
+
+ self.list = to_streamed_response_wrapper(
+ integrations.list,
+ )
+
+
+class AsyncIntegrationsResourceWithStreamingResponse:
+ def __init__(self, integrations: AsyncIntegrationsResource) -> None:
+ self._integrations = integrations
+
+ self.list = async_to_streamed_response_wrapper(
+ integrations.list,
+ )
diff --git a/src/profound/types/__init__.py b/src/profound/types/__init__.py
index b071faa7..eb487ef0 100644
--- a/src/profound/types/__init__.py
+++ b/src/profound/types/__init__.py
@@ -45,6 +45,7 @@
from .project_archive_params import ProjectArchiveParams as ProjectArchiveParams
from .prompt_id_filter_param import PromptIDFilterParam as PromptIDFilterParam
from .agent_retrieve_response import AgentRetrieveResponse as AgentRetrieveResponse
+from .integration_list_params import IntegrationListParams as IntegrationListParams
from .project_create_response import ProjectCreateResponse as ProjectCreateResponse
from .project_retrieve_params import ProjectRetrieveParams as ProjectRetrieveParams
from .prompt_answers_response import PromptAnswersResponse as PromptAnswersResponse
@@ -57,6 +58,7 @@
from .prompt_answers_v2_params import PromptAnswersV2Params as PromptAnswersV2Params
from .report_visibility_params import ReportVisibilityParams as ReportVisibilityParams
from .root_domain_filter_param import RootDomainFilterParam as RootDomainFilterParam
+from .integration_list_response import IntegrationListResponse as IntegrationListResponse
from .project_get_status_params import ProjectGetStatusParams as ProjectGetStatusParams
from .project_retrieve_response import ProjectRetrieveResponse as ProjectRetrieveResponse
from .report_citations_response import ReportCitationsResponse as ReportCitationsResponse
diff --git a/src/profound/types/integration_list_params.py b/src/profound/types/integration_list_params.py
new file mode 100644
index 00000000..2d9e5b62
--- /dev/null
+++ b/src/profound/types/integration_list_params.py
@@ -0,0 +1,19 @@
+# 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 Literal, TypedDict
+
+__all__ = ["IntegrationListParams"]
+
+
+class IntegrationListParams(TypedDict, total=False):
+ organization_id: Optional[str]
+ """Organization scope for API keys that can access multiple organizations."""
+
+ provider: Optional[str]
+ """Filter to a single connector/provider id, e.g. `google_drive`."""
+
+ status_filter: Optional[Literal["active", "pending", "needs_reauth", "revoking", "revoked"]]
+ """Filter to one lifecycle status. Omitted returns all statuses."""
diff --git a/src/profound/types/integration_list_response.py b/src/profound/types/integration_list_response.py
new file mode 100644
index 00000000..b605e567
--- /dev/null
+++ b/src/profound/types/integration_list_response.py
@@ -0,0 +1,34 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import List
+from typing_extensions import Literal
+
+from .._models import BaseModel
+
+__all__ = ["IntegrationListResponse", "Data"]
+
+
+class Data(BaseModel):
+ """One connected integration installation visible to the caller."""
+
+ id: str
+ """Installation id to bind to a hub-backed node's `integration_id`."""
+
+ label: str
+ """Human-readable account label for the connection."""
+
+ level: Literal["org", "user"]
+ """Installation scope: shared across the org, or user-owned."""
+
+ provider: str
+ """Canonical connector id, matching node contracts."""
+
+ status: str
+ """Connection lifecycle status."""
+
+
+class IntegrationListResponse(BaseModel):
+ """Connected integrations visible to the caller's org/user context."""
+
+ data: List[Data]
+ """Connected integrations."""
diff --git a/tests/api_resources/test_integrations.py b/tests/api_resources/test_integrations.py
new file mode 100644
index 00000000..51289d7e
--- /dev/null
+++ b/tests/api_resources/test_integrations.py
@@ -0,0 +1,100 @@
+# 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 profound import Profound, AsyncProfound
+from tests.utils import assert_matches_type
+from profound.types import IntegrationListResponse
+
+base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
+
+
+class TestIntegrations:
+ parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_list(self, client: Profound) -> None:
+ integration = client.integrations.list()
+ assert_matches_type(IntegrationListResponse, integration, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_list_with_all_params(self, client: Profound) -> None:
+ integration = client.integrations.list(
+ organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ provider="provider",
+ status_filter="active",
+ )
+ assert_matches_type(IntegrationListResponse, integration, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_list(self, client: Profound) -> None:
+ response = client.integrations.with_raw_response.list()
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ integration = response.parse()
+ assert_matches_type(IntegrationListResponse, integration, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_list(self, client: Profound) -> None:
+ with client.integrations.with_streaming_response.list() as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ integration = response.parse()
+ assert_matches_type(IntegrationListResponse, integration, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+
+class TestAsyncIntegrations:
+ parametrize = pytest.mark.parametrize(
+ "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"]
+ )
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_list(self, async_client: AsyncProfound) -> None:
+ integration = await async_client.integrations.list()
+ assert_matches_type(IntegrationListResponse, integration, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_list_with_all_params(self, async_client: AsyncProfound) -> None:
+ integration = await async_client.integrations.list(
+ organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ provider="provider",
+ status_filter="active",
+ )
+ assert_matches_type(IntegrationListResponse, integration, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_raw_response_list(self, async_client: AsyncProfound) -> None:
+ response = await async_client.integrations.with_raw_response.list()
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ integration = await response.parse()
+ assert_matches_type(IntegrationListResponse, integration, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_streaming_response_list(self, async_client: AsyncProfound) -> None:
+ async with async_client.integrations.with_streaming_response.list() as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ integration = await response.parse()
+ assert_matches_type(IntegrationListResponse, integration, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
From dc0f9163082e3ab3acbab33182105048c98a4f80 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 24 Jul 2026 16:17:35 +0000
Subject: [PATCH 43/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index ba56ecd4..8df60ddd 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 103
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-79261d6167720ca4d288ffa83e1e1ef14880b47746ac7dbe705ced5e592abbd3.yml
-openapi_spec_hash: d25b28b971d451bb671a4714e1a066c3
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-9345c00b7d172478351737d347037c0067026053de90669f621287432fe60d9a.yml
+openapi_spec_hash: 3625d13fc1822bc810784bdac02a1fe9
config_hash: f47f5fe0661d0c081ac6f2364b4cf41a
From 4b6e1b2db60777ed5061de2bc564aaaaa2219be7 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 24 Jul 2026 17:18:10 +0000
Subject: [PATCH 44/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 8df60ddd..ba56ecd4 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 103
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-9345c00b7d172478351737d347037c0067026053de90669f621287432fe60d9a.yml
-openapi_spec_hash: 3625d13fc1822bc810784bdac02a1fe9
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-79261d6167720ca4d288ffa83e1e1ef14880b47746ac7dbe705ced5e592abbd3.yml
+openapi_spec_hash: d25b28b971d451bb671a4714e1a066c3
config_hash: f47f5fe0661d0c081ac6f2364b4cf41a
From 3e597f4b261c5f178261d03ab24ed2890be5f718 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 24 Jul 2026 18:17:30 +0000
Subject: [PATCH 45/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index ba56ecd4..8df60ddd 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 103
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-79261d6167720ca4d288ffa83e1e1ef14880b47746ac7dbe705ced5e592abbd3.yml
-openapi_spec_hash: d25b28b971d451bb671a4714e1a066c3
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-9345c00b7d172478351737d347037c0067026053de90669f621287432fe60d9a.yml
+openapi_spec_hash: 3625d13fc1822bc810784bdac02a1fe9
config_hash: f47f5fe0661d0c081ac6f2364b4cf41a
From cc82b0abd70b0a4bc1d51fe93ea366c62151a444 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 24 Jul 2026 21:17:28 +0000
Subject: [PATCH 46/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 8df60ddd..7d32ef18 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 103
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-9345c00b7d172478351737d347037c0067026053de90669f621287432fe60d9a.yml
-openapi_spec_hash: 3625d13fc1822bc810784bdac02a1fe9
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-75d7327ff6c70a8b8b0f140b0c3b5dee93139506661781d6e78a2d6e55a1da8d.yml
+openapi_spec_hash: 622c3c6d1bc7a8daecb5b19482332d34
config_hash: f47f5fe0661d0c081ac6f2364b4cf41a
From c18033b3d4450936df440e5ae710f09d2d466416 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 24 Jul 2026 22:17:26 +0000
Subject: [PATCH 47/48] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 7d32ef18..db850fa2 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 103
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-75d7327ff6c70a8b8b0f140b0c3b5dee93139506661781d6e78a2d6e55a1da8d.yml
-openapi_spec_hash: 622c3c6d1bc7a8daecb5b19482332d34
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-d4de4432ed5c94723a807b2ac182da745b8fee526789255579af38561763c7e0.yml
+openapi_spec_hash: c217ca0ab6d9e5ace83fea51c21febdd
config_hash: f47f5fe0661d0c081ac6f2364b4cf41a
From 9dfa5febcd5ff4ce43716f094b6c7b80c3a563c4 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 24 Jul 2026 22:17:59 +0000
Subject: [PATCH 48/48] release: 0.54.0
---
.release-please-manifest.json | 2 +-
CHANGELOG.md | 27 +++++++++++++++++++++++++++
pyproject.toml | 2 +-
src/profound/_version.py | 2 +-
4 files changed, 30 insertions(+), 3 deletions(-)
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index c3e01e1e..21fa4455 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "0.53.0"
+ ".": "0.54.0"
}
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3c85f2e8..c2bff0f6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,32 @@
# Changelog
+## 0.54.0 (2026-07-24)
+
+Full Changelog: [v0.53.0...v0.54.0](https://github.com/cooper-square-technologies/profound-python-sdk/compare/v0.53.0...v0.54.0)
+
+### Features
+
+* **api:** api update ([edf0fe4](https://github.com/cooper-square-technologies/profound-python-sdk/commit/edf0fe4e6052b5c0353521e102391d9fb729ab11))
+* **api:** api update ([9549e3d](https://github.com/cooper-square-technologies/profound-python-sdk/commit/9549e3dea7bec7c6854d653e661bc4f7592d82b3))
+* **api:** api update ([13f9064](https://github.com/cooper-square-technologies/profound-python-sdk/commit/13f9064e5c7886eac3c50de67bb64e2e0763fb44))
+* **api:** api update ([fadb342](https://github.com/cooper-square-technologies/profound-python-sdk/commit/fadb34245e14ebe738d9c585ffae8f0bae4bc000))
+* **api:** api update ([54791e5](https://github.com/cooper-square-technologies/profound-python-sdk/commit/54791e50b45c5df9af9bcb6a524297ccb9a7d744))
+* **api:** api update ([edd5fb6](https://github.com/cooper-square-technologies/profound-python-sdk/commit/edd5fb6d807dd72234eeda6f0effddbed4086c9e))
+* **api:** api update ([79dcecf](https://github.com/cooper-square-technologies/profound-python-sdk/commit/79dcecf0ac4be6dbb3ec556677e21c6688818e5b))
+* **api:** api update ([949c8c4](https://github.com/cooper-square-technologies/profound-python-sdk/commit/949c8c4aecea50ff7fdf56dc3b3ab74a032aa2bb))
+* **api:** api update ([ee476f4](https://github.com/cooper-square-technologies/profound-python-sdk/commit/ee476f40439fd739ac8b3e97b028e55b98135a5d))
+* **api:** api update ([641081e](https://github.com/cooper-square-technologies/profound-python-sdk/commit/641081e222e99a24287f76aca3888d4752b4a07a))
+* **api:** api update ([dcd95d9](https://github.com/cooper-square-technologies/profound-python-sdk/commit/dcd95d9e47d35660760d6590073613d4ef0fc510))
+* **api:** api update ([7aa69a6](https://github.com/cooper-square-technologies/profound-python-sdk/commit/7aa69a6761298ead98c4092ce427303f0343b626))
+* **api:** api update ([bedb038](https://github.com/cooper-square-technologies/profound-python-sdk/commit/bedb0380d42036914f5b548f24d3e056a7672f19))
+* **api:** manual updates ([8a0b8d0](https://github.com/cooper-square-technologies/profound-python-sdk/commit/8a0b8d0541764a82a5c7bc137b7f666ddb68cd5f))
+* **stlc:** configurable CI runner and private-production-repo support in workflow templates ([02477bf](https://github.com/cooper-square-technologies/profound-python-sdk/commit/02477bf17e69c20b0132cfafe82e54949e0fe960))
+
+
+### Bug Fixes
+
+* **internal:** resolve build failures ([a3e6d1f](https://github.com/cooper-square-technologies/profound-python-sdk/commit/a3e6d1f6665d12629d8c16e90bcc946b18b089bb))
+
## 0.53.0 (2026-07-13)
Full Changelog: [v0.52.0...v0.53.0](https://github.com/cooper-square-technologies/profound-python-sdk/compare/v0.52.0...v0.53.0)
diff --git a/pyproject.toml b/pyproject.toml
index bd5d6bb6..ac99ab4a 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "profound"
-version = "0.53.0"
+version = "0.54.0"
description = "The official Python library for the profound API"
dynamic = ["readme"]
license = "Apache-2.0"
diff --git a/src/profound/_version.py b/src/profound/_version.py
index fa206d86..735d55b2 100644
--- a/src/profound/_version.py
+++ b/src/profound/_version.py
@@ -1,4 +1,4 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
__title__ = "profound"
-__version__ = "0.53.0" # x-release-please-version
+__version__ = "0.54.0" # x-release-please-version