From 1da4b212644549666e19f23146b8d1e2ab9511d9 Mon Sep 17 00:00:00 2001 From: "kernel-internal[bot]" <260533166+kernel-internal[bot]@users.noreply.github.com> Date: Sat, 26 Sep 2026 03:06:04 +0000 Subject: [PATCH 1/3] feat: Randomize automatic search provider routing Stainless-Generated-From: 3a5146ad5bd2c016799d76d0361f72c61bfce90a --- src/kernel/resources/search/providers.py | 6 ++++-- src/kernel/types/search/provider_list_params.py | 5 ++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/kernel/resources/search/providers.py b/src/kernel/resources/search/providers.py index f913f1cd..c2b3b31e 100644 --- a/src/kernel/resources/search/providers.py +++ b/src/kernel/resources/search/providers.py @@ -64,7 +64,8 @@ def list( contains no latency benchmarks. X-Request-Id identifies the request. Args: - slug: Optional concrete provider slug filter. Omit to list every provider. + slug: Optional concrete provider slug filter. Omit to list every provider. A slug that + is not listed returns an empty array. extra_headers: Send extra headers @@ -128,7 +129,8 @@ async def list( contains no latency benchmarks. X-Request-Id identifies the request. Args: - slug: Optional concrete provider slug filter. Omit to list every provider. + slug: Optional concrete provider slug filter. Omit to list every provider. A slug that + is not listed returns an empty array. extra_headers: Send extra headers diff --git a/src/kernel/types/search/provider_list_params.py b/src/kernel/types/search/provider_list_params.py index 07ef4659..908a1b17 100644 --- a/src/kernel/types/search/provider_list_params.py +++ b/src/kernel/types/search/provider_list_params.py @@ -9,4 +9,7 @@ class ProviderListParams(TypedDict, total=False): slug: Literal["brave", "exa", "perplexity", "context", "parallel", "valyu", "octen", "you", "tavily", "serpapi"] - """Optional concrete provider slug filter. Omit to list every provider.""" + """Optional concrete provider slug filter. + + Omit to list every provider. A slug that is not listed returns an empty array. + """ From 7d004def693a57505b4294307b272ba1fc4f78b2 Mon Sep 17 00:00:00 2001 From: "kernel-internal[bot]" <260533166+kernel-internal[bot]@users.noreply.github.com> Date: Sun, 27 Sep 2026 21:44:26 +0000 Subject: [PATCH 2/3] feat: Support 16GiB memory in browser pools Stainless-Generated-From: 491b38f4736aca671f22d24be01e6d55fec9058b --- src/kernel/resources/browser_pools.py | 22 +++++++++++++++++++ src/kernel/types/browser_pool.py | 4 ++++ .../types/browser_pool_create_params.py | 4 ++++ .../types/browser_pool_update_params.py | 9 +++++++- tests/api_resources/test_browser_pools.py | 4 ++++ 5 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/kernel/resources/browser_pools.py b/src/kernel/resources/browser_pools.py index 13dbceca..20fdc7fa 100644 --- a/src/kernel/resources/browser_pools.py +++ b/src/kernel/resources/browser_pools.py @@ -8,6 +8,7 @@ import httpx from ..types import ( + BrowserMemoryRequest, browser_pool_list_params, browser_pool_create_params, browser_pool_delete_params, @@ -29,6 +30,7 @@ from .._base_client import AsyncPaginator, make_request_options from ..types.tags_param import TagsParam from ..types.browser_pool import BrowserPool +from ..types.browser_memory_request import BrowserMemoryRequest from ..types.browser_network_config_param import BrowserNetworkConfigParam from ..types.browser_pool_acquire_response import BrowserPoolAcquireResponse from ..types.shared_params.browser_profile import BrowserProfile @@ -69,6 +71,7 @@ def create( fill_rate_per_minute: int | Omit = omit, headless: bool | Omit = omit, kiosk_mode: bool | Omit = omit, + memory: BrowserMemoryRequest | Omit = omit, name: str | Omit = omit, network: BrowserNetworkConfigParam | Omit = omit, profile: browser_pool_create_params.Profile | Omit = omit, @@ -116,6 +119,8 @@ def create( kiosk_mode: If true, launches the browser in kiosk mode to hide address bar and tabs in live view. Defaults to false. + memory: Memory requested for headful browsers in this pool. + name: Optional name for the browser pool. Must be unique within the project. network: Network configuration applied to browsers in this pool. @@ -187,6 +192,7 @@ def create( "fill_rate_per_minute": fill_rate_per_minute, "headless": headless, "kiosk_mode": kiosk_mode, + "memory": memory, "name": name, "network": network, "profile": profile, @@ -250,6 +256,7 @@ def update( fill_rate_per_minute: int | Omit = omit, headless: bool | Omit = omit, kiosk_mode: bool | Omit = omit, + memory: Literal["8GiB", "16GiB"] | Omit = omit, name: str | Omit = omit, network: BrowserNetworkConfigParam | Omit = omit, profile: browser_pool_update_params.Profile | Omit = omit, @@ -302,6 +309,10 @@ def update( kiosk_mode: If provided, replaces whether browsers launch in kiosk mode. + memory: Memory requested for newly-warmed headful browsers in this pool. Existing + browsers retain their original allocation. Use discard_all_idle to replace idle + browsers. + name: If provided, replaces the pool name. Empty string is a no-op; the pool name cannot be cleared or reset to empty once assigned. @@ -380,6 +391,7 @@ def update( "fill_rate_per_minute": fill_rate_per_minute, "headless": headless, "kiosk_mode": kiosk_mode, + "memory": memory, "name": name, "network": network, "profile": profile, @@ -706,6 +718,7 @@ async def create( fill_rate_per_minute: int | Omit = omit, headless: bool | Omit = omit, kiosk_mode: bool | Omit = omit, + memory: BrowserMemoryRequest | Omit = omit, name: str | Omit = omit, network: BrowserNetworkConfigParam | Omit = omit, profile: browser_pool_create_params.Profile | Omit = omit, @@ -753,6 +766,8 @@ async def create( kiosk_mode: If true, launches the browser in kiosk mode to hide address bar and tabs in live view. Defaults to false. + memory: Memory requested for headful browsers in this pool. + name: Optional name for the browser pool. Must be unique within the project. network: Network configuration applied to browsers in this pool. @@ -824,6 +839,7 @@ async def create( "fill_rate_per_minute": fill_rate_per_minute, "headless": headless, "kiosk_mode": kiosk_mode, + "memory": memory, "name": name, "network": network, "profile": profile, @@ -887,6 +903,7 @@ async def update( fill_rate_per_minute: int | Omit = omit, headless: bool | Omit = omit, kiosk_mode: bool | Omit = omit, + memory: Literal["8GiB", "16GiB"] | Omit = omit, name: str | Omit = omit, network: BrowserNetworkConfigParam | Omit = omit, profile: browser_pool_update_params.Profile | Omit = omit, @@ -939,6 +956,10 @@ async def update( kiosk_mode: If provided, replaces whether browsers launch in kiosk mode. + memory: Memory requested for newly-warmed headful browsers in this pool. Existing + browsers retain their original allocation. Use discard_all_idle to replace idle + browsers. + name: If provided, replaces the pool name. Empty string is a no-op; the pool name cannot be cleared or reset to empty once assigned. @@ -1017,6 +1038,7 @@ async def update( "fill_rate_per_minute": fill_rate_per_minute, "headless": headless, "kiosk_mode": kiosk_mode, + "memory": memory, "name": name, "network": network, "profile": profile, diff --git a/src/kernel/types/browser_pool.py b/src/kernel/types/browser_pool.py index 68f96450..58a1a9cd 100644 --- a/src/kernel/types/browser_pool.py +++ b/src/kernel/types/browser_pool.py @@ -5,6 +5,7 @@ from typing_extensions import Literal from .._models import BaseModel +from .browser_memory import BrowserMemory from .browser_network_config import BrowserNetworkConfig from .shared.browser_viewport import BrowserViewport from .shared.browser_extension import BrowserExtension @@ -73,6 +74,9 @@ class BrowserPoolConfig(BaseModel): view. """ + memory: Optional[BrowserMemory] = None + """Memory allocated to the browser session.""" + name: Optional[str] = None """Optional name for the browser pool. Must be unique within the project.""" diff --git a/src/kernel/types/browser_pool_create_params.py b/src/kernel/types/browser_pool_create_params.py index 33cff052..99fb61d2 100644 --- a/src/kernel/types/browser_pool_create_params.py +++ b/src/kernel/types/browser_pool_create_params.py @@ -5,6 +5,7 @@ from typing import Dict, Iterable, Optional from typing_extensions import Literal, Required, TypedDict +from .browser_memory_request import BrowserMemoryRequest from .browser_network_config_param import BrowserNetworkConfigParam from .shared_params.browser_viewport import BrowserViewport from .shared_params.browser_extension import BrowserExtension @@ -59,6 +60,9 @@ class BrowserPoolCreateParams(TypedDict, total=False): view. Defaults to false. """ + memory: BrowserMemoryRequest + """Memory requested for headful browsers in this pool.""" + name: str """Optional name for the browser pool. Must be unique within the project.""" diff --git a/src/kernel/types/browser_pool_update_params.py b/src/kernel/types/browser_pool_update_params.py index 9bf898f2..2ccfa9b9 100644 --- a/src/kernel/types/browser_pool_update_params.py +++ b/src/kernel/types/browser_pool_update_params.py @@ -3,7 +3,7 @@ from __future__ import annotations from typing import Dict, Iterable, Optional -from typing_extensions import TypedDict +from typing_extensions import Literal, TypedDict from .browser_network_config_param import BrowserNetworkConfigParam from .shared_params.browser_viewport import BrowserViewport @@ -61,6 +61,13 @@ class BrowserPoolUpdateParams(TypedDict, total=False): kiosk_mode: bool """If provided, replaces whether browsers launch in kiosk mode.""" + memory: Literal["8GiB", "16GiB"] + """Memory requested for newly-warmed headful browsers in this pool. + + Existing browsers retain their original allocation. Use discard_all_idle to + replace idle browsers. + """ + name: str """If provided, replaces the pool name. diff --git a/tests/api_resources/test_browser_pools.py b/tests/api_resources/test_browser_pools.py index e42664c4..d97b0704 100644 --- a/tests/api_resources/test_browser_pools.py +++ b/tests/api_resources/test_browser_pools.py @@ -44,6 +44,7 @@ def test_method_create_with_all_params(self, client: Kernel) -> None: fill_rate_per_minute=0, headless=False, kiosk_mode=True, + memory="8GiB", name="my-pool", network={ "private_hosts": ["*.example.ts.net", "100.64.0.0/10"], @@ -194,6 +195,7 @@ def test_method_update_with_all_params(self, client: Kernel) -> None: fill_rate_per_minute=0, headless=False, kiosk_mode=True, + memory="8GiB", name="my-pool", network={ "private_hosts": ["*.example.ts.net", "100.64.0.0/10"], @@ -593,6 +595,7 @@ async def test_method_create_with_all_params(self, async_client: AsyncKernel) -> fill_rate_per_minute=0, headless=False, kiosk_mode=True, + memory="8GiB", name="my-pool", network={ "private_hosts": ["*.example.ts.net", "100.64.0.0/10"], @@ -743,6 +746,7 @@ async def test_method_update_with_all_params(self, async_client: AsyncKernel) -> fill_rate_per_minute=0, headless=False, kiosk_mode=True, + memory="8GiB", name="my-pool", network={ "private_hosts": ["*.example.ts.net", "100.64.0.0/10"], From 2eabd23ab1b3ba810532869b1103f2a89b492bf9 Mon Sep 17 00:00:00 2001 From: "kernel-internal[bot]" <260533166+kernel-internal[bot]@users.noreply.github.com> Date: Sun, 27 Sep 2026 21:48:55 +0000 Subject: [PATCH 3/3] release: 0.113.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 8 ++++++++ pyproject.toml | 2 +- src/kernel/_version.py | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 820b5c1a..939bb175 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.112.0" + ".": "0.113.0" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 284e73ea..347647b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [0.113.0](https://github.com/kernel/kernel-python-sdk/compare/v0.112.0...v0.113.0) (2026-09-27) + + +### Features + +* Randomize automatic search provider routing ([1da4b21](https://github.com/kernel/kernel-python-sdk/commit/1da4b212644549666e19f23146b8d1e2ab9511d9)) +* Support 16GiB memory in browser pools ([7d004de](https://github.com/kernel/kernel-python-sdk/commit/7d004def693a57505b4294307b272ba1fc4f78b2)) + ## [0.112.0](https://github.com/kernel/kernel-python-sdk/compare/v0.111.0...v0.112.0) (2026-09-24) diff --git a/pyproject.toml b/pyproject.toml index 55d2a163..82dfdf81 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "kernel" -version = "0.112.0" +version = "0.113.0" description = "The official Python library for the kernel API" dynamic = ["readme"] license = "Apache-2.0" diff --git a/src/kernel/_version.py b/src/kernel/_version.py index 8211aa6c..3350781a 100644 --- a/src/kernel/_version.py +++ b/src/kernel/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "kernel" -__version__ = "0.112.0" # x-release-please-version +__version__ = "0.113.0" # x-release-please-version