Skip to content

Commit fb2c94b

Browse files
committed
feat: add model_base_url parameter for custom LLM endpoints
Mirrors x-model-api-key pattern with x-model-base-url header, enabling OpenAI-compatible providers like ZhipuAI and Ollama.
1 parent a30258c commit fb2c94b

1 file changed

Lines changed: 22 additions & 2 deletions

File tree

src/stagehand/_client.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ def __init__(
6060
browserbase_api_key: str | None = None,
6161
browserbase_project_id: str | None = None,
6262
model_api_key: str | None = None,
63+
model_base_url: str | None = None,
6364
server: Literal["remote", "local"] = "remote",
6465
_local_stagehand_binary_path: str | os.PathLike[str] | None = None,
6566
local_host: str = "127.0.0.1",
@@ -121,6 +122,10 @@ def __init__(
121122
)
122123
self.model_api_key = model_api_key
123124

125+
if model_base_url is None:
126+
model_base_url = os.environ.get("MODEL_BASE_URL")
127+
self.model_base_url = model_base_url
128+
124129
self._sea_server: SeaServerManager | None = None
125130
if server == "local":
126131
# We'll switch `base_url` to the started server before the first request.
@@ -195,7 +200,7 @@ def qs(self) -> Querystring:
195200
@property
196201
@override
197202
def auth_headers(self) -> dict[str, str]:
198-
return {**self._bb_api_key_auth, **self._bb_project_id_auth, **self._llm_model_api_key_auth}
203+
return {**self._bb_api_key_auth, **self._bb_project_id_auth, **self._llm_model_api_key_auth, **self._llm_model_base_url_header}
199204

200205
@property
201206
def _bb_api_key_auth(self) -> dict[str, str]:
@@ -212,6 +217,11 @@ def _llm_model_api_key_auth(self) -> dict[str, str]:
212217
model_api_key = self.model_api_key
213218
return {"x-model-api-key": model_api_key}
214219

220+
@property
221+
def _llm_model_base_url_header(self) -> dict[str, str]:
222+
model_base_url = self.model_base_url
223+
return {"x-model-base-url": model_base_url} if model_base_url else {}
224+
215225
@property
216226
@override
217227
def default_headers(self) -> dict[str, str | Omit]:
@@ -348,6 +358,7 @@ def __init__(
348358
browserbase_api_key: str | None = None,
349359
browserbase_project_id: str | None = None,
350360
model_api_key: str | None = None,
361+
model_base_url: str | None = None,
351362
server: Literal["remote", "local"] = "remote",
352363
_local_stagehand_binary_path: str | os.PathLike[str] | None = None,
353364
local_host: str = "127.0.0.1",
@@ -409,6 +420,10 @@ def __init__(
409420
)
410421
self.model_api_key = model_api_key
411422

423+
if model_base_url is None:
424+
model_base_url = os.environ.get("MODEL_BASE_URL")
425+
self.model_base_url = model_base_url
426+
412427
self._sea_server: SeaServerManager | None = None
413428
if server == "local":
414429
if base_url is None:
@@ -482,7 +497,7 @@ def qs(self) -> Querystring:
482497
@property
483498
@override
484499
def auth_headers(self) -> dict[str, str]:
485-
return {**self._bb_api_key_auth, **self._bb_project_id_auth, **self._llm_model_api_key_auth}
500+
return {**self._bb_api_key_auth, **self._bb_project_id_auth, **self._llm_model_api_key_auth, **self._llm_model_base_url_header}
486501

487502
@property
488503
def _bb_api_key_auth(self) -> dict[str, str]:
@@ -499,6 +514,11 @@ def _llm_model_api_key_auth(self) -> dict[str, str]:
499514
model_api_key = self.model_api_key
500515
return {"x-model-api-key": model_api_key}
501516

517+
@property
518+
def _llm_model_base_url_header(self) -> dict[str, str]:
519+
model_base_url = self.model_base_url
520+
return {"x-model-base-url": model_base_url} if model_base_url else {}
521+
502522
@property
503523
@override
504524
def default_headers(self) -> dict[str, str | Omit]:

0 commit comments

Comments
 (0)