Skip to content

Commit 74cb7fb

Browse files
authored
Samfinton/stg 1147 python sdk rename create() to start() (#295)
* - Renamed session.create() helper to session.start() to remain in sync with docs * lint fix
1 parent 20f4704 commit 74cb7fb

16 files changed

Lines changed: 135 additions & 52 deletions

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ async def main() -> None:
160160
client = AsyncStagehand()
161161

162162
# Start a new browser session (returns a session helper bound to a session_id)
163-
session = await client.sessions.create(model_name="openai/gpt-5-nano")
163+
session = await client.sessions.start(model_name="openai/gpt-5-nano")
164164

165165
print(f"Session started: {session.id}")
166166

@@ -308,7 +308,7 @@ from stagehand import AsyncStagehand
308308

309309
async def main() -> None:
310310
client = AsyncStagehand()
311-
session = await client.sessions.create(model_name="openai/gpt-5-nano")
311+
session = await client.sessions.start(model_name="openai/gpt-5-nano")
312312
response = await session.act(input="click the first link on the page")
313313
print(response.data)
314314

@@ -335,7 +335,7 @@ from stagehand import AsyncStagehand, DefaultAioHttpClient
335335

336336
async def main() -> None:
337337
async with AsyncStagehand(http_client=DefaultAioHttpClient()) as client:
338-
session = await client.sessions.create(model_name="openai/gpt-5-nano")
338+
session = await client.sessions.start(model_name="openai/gpt-5-nano")
339339
response = await session.act(input="click the first link on the page")
340340
print(response.data)
341341

@@ -360,7 +360,7 @@ from stagehand import AsyncStagehand
360360

361361
async def main() -> None:
362362
async with AsyncStagehand() as client:
363-
session = await client.sessions.create(model_name="openai/gpt-5-nano")
363+
session = await client.sessions.start(model_name="openai/gpt-5-nano")
364364

365365
stream = await client.sessions.act(
366366
id=session.id,

examples/act_example.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ async def main() -> None:
2828
model_api_key=os.environ.get("MODEL_API_KEY"),
2929
) as client:
3030
# Start a new browser session
31-
session = await client.sessions.create(
31+
session = await client.sessions.start(
3232
model_name="openai/gpt-5-nano",
3333
)
3434

examples/agent_execute.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ async def main() -> None:
2727
# with missing fields set to None).
2828
async with AsyncStagehand(_strict_response_validation=True) as client:
2929
try:
30-
session = await client.sessions.create(model_name=model_name)
30+
session = await client.sessions.start(model_name=model_name)
3131
except APIResponseValidationError as e:
3232
print("Session start response failed schema validation.")
3333
print(f"Base URL: {client.base_url!r}")

examples/byob_example.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ async def main() -> None:
3636
) as client, async_playwright() as playwright:
3737
browser = await playwright.chromium.launch(headless=True)
3838
page = await browser.new_page()
39-
session = await client.sessions.create(model_name="openai/gpt-5-nano")
39+
session = await client.sessions.start(model_name="openai/gpt-5-nano")
4040

4141
try:
4242
target_url = "https://news.ycombinator.com"

examples/full_example.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ async def main() -> None:
3030
model_api_key=os.environ.get("MODEL_API_KEY"),
3131
) as client:
3232
# Start a new browser session (returns a session helper bound to a session_id)
33-
session = await client.sessions.create(
33+
session = await client.sessions.start(
3434
model_name="openai/gpt-5-nano",
3535
)
3636

examples/logging_example.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ async def main() -> None:
2121
model_api_key=os.environ.get("MODEL_API_KEY"),
2222
) as client:
2323
# Start a new browser session with verbose logging enabled
24-
session = await client.sessions.create(
24+
session = await client.sessions.start(
2525
model_name="openai/gpt-5-nano",
2626
verbose=2,
2727
)

examples/playwright_page_example.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def main() -> None:
5555
model_api_key=model_api_key,
5656
) as client:
5757
print("⏳ Starting Stagehand session...")
58-
session = client.sessions.create(
58+
session = client.sessions.start(
5959
model_name="openai/gpt-5-nano",
6060
browser={"type": "browserbase"},
6161
)
@@ -115,4 +115,3 @@ def main() -> None:
115115

116116
if __name__ == "__main__":
117117
main()
118-

examples/pydoll_tab_example.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ async def main() -> None:
120120
model_api_key=model_api_key,
121121
) as client:
122122
print("⏳ Starting Stagehand session...")
123-
session = await client.sessions.create(
123+
session = await client.sessions.start(
124124
model_name="openai/gpt-5-nano",
125125
browser={"type": "browserbase"},
126126
)

src/stagehand/_client.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@
5151

5252
class Stagehand(SyncAPIClient):
5353
# client options
54-
browserbase_api_key: str
55-
browserbase_project_id: str
54+
browserbase_api_key: str | None
55+
browserbase_project_id: str | None
5656
model_api_key: str
5757

5858
def __init__(
@@ -299,7 +299,7 @@ def copy(
299299
)
300300

301301
# Alias for `copy` for nicer inline usage, e.g.
302-
# client.with_options(timeout=10).foo.create(...)
302+
# client.with_options(timeout=10).foo.start(...)
303303
with_options = copy
304304

305305
@override
@@ -338,8 +338,8 @@ def _make_status_error(
338338

339339
class AsyncStagehand(AsyncAPIClient):
340340
# client options
341-
browserbase_api_key: str
342-
browserbase_project_id: str
341+
browserbase_api_key: str | None
342+
browserbase_project_id: str | None
343343
model_api_key: str
344344

345345
def __init__(
@@ -585,7 +585,7 @@ def copy(
585585
)
586586

587587
# Alias for `copy` for nicer inline usage, e.g.
588-
# client.with_options(timeout=10).foo.create(...)
588+
# client.with_options(timeout=10).foo.start(...)
589589
with_options = copy
590590

591591
@override

src/stagehand/resources/sessions.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from __future__ import annotations
44

5-
from typing import Dict, TYPE_CHECKING, Union
5+
from typing import TYPE_CHECKING, Dict, Union
66
from datetime import datetime, timezone
77
from typing_extensions import Literal, overload
88

@@ -30,6 +30,7 @@
3030
async_to_streamed_response_wrapper,
3131
)
3232
from .._streaming import Stream, AsyncStream
33+
from .._exceptions import StagehandError
3334
from .._base_client import make_request_options
3435
from ..types.stream_event import StreamEvent
3536
from ..types.session_act_response import SessionActResponse
@@ -39,7 +40,6 @@
3940
from ..types.session_extract_response import SessionExtractResponse
4041
from ..types.session_observe_response import SessionObserveResponse
4142
from ..types.session_navigate_response import SessionNavigateResponse
42-
from .._exceptions import StagehandError
4343

4444
__all__ = ["SessionsResource", "AsyncSessionsResource"]
4545

@@ -62,9 +62,7 @@ def _requires_browserbase_credentials(
6262
if not is_given(browser):
6363
return True
6464

65-
browser_type = None
66-
if isinstance(browser, dict):
67-
browser_type = browser.get("type")
65+
browser_type = browser.get("type")
6866

6967
return browser_type != "local"
7068

0 commit comments

Comments
 (0)