Skip to content

Commit 40cb10e

Browse files
feat: Bedrock auth passthrough
1 parent 2c6c4be commit 40cb10e

27 files changed

Lines changed: 2078 additions & 57 deletions

.stats.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
configured_endpoints: 8
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/browserbase%2Fstagehand-b969ce378479c79ee64c05127c0ed6c6ce2edbee017ecd037242fb618a5ebc9f.yml
3-
openapi_spec_hash: a24aabaa5214effb679808b7f2be0ad4
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/browserbase%2Fstagehand-7773ef4ca29c983daafb787ee918cfa6b5b12c5bbdc088308653f2737c26e51f.yml
3+
openapi_spec_hash: 47fc8f2540be0b6374e4230c021072d9
44
config_hash: 0cc516caf1432087f40654336e0fa8cd

src/ServiceContracts/SessionsContract.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,17 @@
2121
use Stagehand\Sessions\SessionReplayResponse;
2222
use Stagehand\Sessions\SessionStartParams\Browser;
2323
use Stagehand\Sessions\SessionStartParams\BrowserbaseSessionCreateParams;
24+
use Stagehand\Sessions\SessionStartParams\ModelClientOptions\BedrockAPIKeyModelClientOptions;
25+
use Stagehand\Sessions\SessionStartParams\ModelClientOptions\BedrockAwsCredentialsModelClientOptions;
26+
use Stagehand\Sessions\SessionStartParams\ModelClientOptions\GenericModelClientOptions;
2427
use Stagehand\Sessions\SessionStartResponse;
2528
use Stagehand\Sessions\StreamEvent;
2629

2730
/**
2831
* @phpstan-import-type OptionsShape from \Stagehand\Sessions\SessionNavigateParams\Options
2932
* @phpstan-import-type BrowserShape from \Stagehand\Sessions\SessionStartParams\Browser
3033
* @phpstan-import-type BrowserbaseSessionCreateParamsShape from \Stagehand\Sessions\SessionStartParams\BrowserbaseSessionCreateParams
34+
* @phpstan-import-type ModelClientOptionsShape from \Stagehand\Sessions\SessionStartParams\ModelClientOptions
3135
* @phpstan-import-type InputShape from \Stagehand\Sessions\SessionActParams\Input
3236
* @phpstan-import-type OptionsShape from \Stagehand\Sessions\SessionActParams\Options as OptionsShape1
3337
* @phpstan-import-type RequestOpts from \Stagehand\RequestOptions
@@ -285,6 +289,7 @@ public function replay(
285289
* @param string $browserbaseSessionID Body param: Existing Browserbase session ID to resume
286290
* @param float $domSettleTimeoutMs Body param: Timeout in ms to wait for DOM to settle
287291
* @param bool $experimental Body param
292+
* @param ModelClientOptionsShape $modelClientOptions Body param: Optional provider-specific configuration for the session model (for example Bedrock region and credentials)
288293
* @param bool $selfHeal Body param: Enable self-healing for failed actions
289294
* @param string $systemPrompt Body param: Custom system prompt for AI operations
290295
* @param float $verbose Body param: Logging verbosity level (0=quiet, 1=normal, 2=debug)
@@ -302,6 +307,7 @@ public function start(
302307
?string $browserbaseSessionID = null,
303308
?float $domSettleTimeoutMs = null,
304309
?bool $experimental = null,
310+
BedrockAPIKeyModelClientOptions|array|BedrockAwsCredentialsModelClientOptions|GenericModelClientOptions|null $modelClientOptions = null,
305311
?bool $selfHeal = null,
306312
?string $systemPrompt = null,
307313
?float $verbose = null,

src/Services/SessionsRawService.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
* @phpstan-import-type OptionsShape from \Stagehand\Sessions\SessionNavigateParams\Options
4141
* @phpstan-import-type BrowserShape from \Stagehand\Sessions\SessionStartParams\Browser
4242
* @phpstan-import-type BrowserbaseSessionCreateParamsShape from \Stagehand\Sessions\SessionStartParams\BrowserbaseSessionCreateParams
43+
* @phpstan-import-type ModelClientOptionsShape from \Stagehand\Sessions\SessionStartParams\ModelClientOptions
4344
* @phpstan-import-type InputShape from \Stagehand\Sessions\SessionActParams\Input
4445
* @phpstan-import-type OptionsShape from \Stagehand\Sessions\SessionActParams\Options as OptionsShape1
4546
* @phpstan-import-type RequestOpts from \Stagehand\RequestOptions
@@ -588,6 +589,7 @@ public function replay(
588589
* browserbaseSessionID?: string,
589590
* domSettleTimeoutMs?: float,
590591
* experimental?: bool,
592+
* modelClientOptions?: ModelClientOptionsShape,
591593
* selfHeal?: bool,
592594
* systemPrompt?: string,
593595
* verbose?: float,

src/Services/SessionsService.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,17 @@
2424
use Stagehand\Sessions\SessionReplayResponse;
2525
use Stagehand\Sessions\SessionStartParams\Browser;
2626
use Stagehand\Sessions\SessionStartParams\BrowserbaseSessionCreateParams;
27+
use Stagehand\Sessions\SessionStartParams\ModelClientOptions\BedrockAPIKeyModelClientOptions;
28+
use Stagehand\Sessions\SessionStartParams\ModelClientOptions\BedrockAwsCredentialsModelClientOptions;
29+
use Stagehand\Sessions\SessionStartParams\ModelClientOptions\GenericModelClientOptions;
2730
use Stagehand\Sessions\SessionStartResponse;
2831
use Stagehand\Sessions\StreamEvent;
2932

3033
/**
3134
* @phpstan-import-type OptionsShape from \Stagehand\Sessions\SessionNavigateParams\Options
3235
* @phpstan-import-type BrowserShape from \Stagehand\Sessions\SessionStartParams\Browser
3336
* @phpstan-import-type BrowserbaseSessionCreateParamsShape from \Stagehand\Sessions\SessionStartParams\BrowserbaseSessionCreateParams
37+
* @phpstan-import-type ModelClientOptionsShape from \Stagehand\Sessions\SessionStartParams\ModelClientOptions
3438
* @phpstan-import-type InputShape from \Stagehand\Sessions\SessionActParams\Input
3539
* @phpstan-import-type OptionsShape from \Stagehand\Sessions\SessionActParams\Options as OptionsShape1
3640
* @phpstan-import-type RequestOpts from \Stagehand\RequestOptions
@@ -462,6 +466,7 @@ public function replay(
462466
* @param string $browserbaseSessionID Body param: Existing Browserbase session ID to resume
463467
* @param float $domSettleTimeoutMs Body param: Timeout in ms to wait for DOM to settle
464468
* @param bool $experimental Body param
469+
* @param ModelClientOptionsShape $modelClientOptions Body param: Optional provider-specific configuration for the session model (for example Bedrock region and credentials)
465470
* @param bool $selfHeal Body param: Enable self-healing for failed actions
466471
* @param string $systemPrompt Body param: Custom system prompt for AI operations
467472
* @param float $verbose Body param: Logging verbosity level (0=quiet, 1=normal, 2=debug)
@@ -479,6 +484,7 @@ public function start(
479484
?string $browserbaseSessionID = null,
480485
?float $domSettleTimeoutMs = null,
481486
?bool $experimental = null,
487+
BedrockAPIKeyModelClientOptions|array|BedrockAwsCredentialsModelClientOptions|GenericModelClientOptions|null $modelClientOptions = null,
482488
?bool $selfHeal = null,
483489
?string $systemPrompt = null,
484490
?float $verbose = null,
@@ -495,6 +501,7 @@ public function start(
495501
'browserbaseSessionID' => $browserbaseSessionID,
496502
'domSettleTimeoutMs' => $domSettleTimeoutMs,
497503
'experimental' => $experimental,
504+
'modelClientOptions' => $modelClientOptions,
498505
'selfHeal' => $selfHeal,
499506
'systemPrompt' => $systemPrompt,
500507
'verbose' => $verbose,

src/Sessions/ModelConfig.php

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,22 @@
99
use Stagehand\Core\Concerns\SdkModel;
1010
use Stagehand\Core\Contracts\BaseModel;
1111
use Stagehand\Sessions\ModelConfig\Provider;
12+
use Stagehand\Sessions\ModelConfig\ProviderOptions\BedrockAPIKeyProviderOptions;
13+
use Stagehand\Sessions\ModelConfig\ProviderOptions\BedrockAwsCredentialsProviderOptions;
14+
use Stagehand\Sessions\ModelConfig\ProviderOptions\GoogleVertexProviderOptions;
1215

1316
/**
17+
* @phpstan-import-type ProviderOptionsVariants from \Stagehand\Sessions\ModelConfig\ProviderOptions
18+
* @phpstan-import-type ProviderOptionsShape from \Stagehand\Sessions\ModelConfig\ProviderOptions
19+
*
1420
* @phpstan-type ModelConfigShape = array{
1521
* modelName: string,
1622
* apiKey?: string|null,
1723
* baseURL?: string|null,
1824
* headers?: array<string,string>|null,
1925
* provider?: null|Provider|value-of<Provider>,
26+
* providerOptions?: ProviderOptionsShape|null,
27+
* skipAPIKeyFallback?: bool|null,
2028
* }
2129
*/
2230
final class ModelConfig implements BaseModel
@@ -43,7 +51,7 @@ final class ModelConfig implements BaseModel
4351
public ?string $baseURL;
4452

4553
/**
46-
* Custom headers sent with every request to the model provider.
54+
* Custom headers for the model provider.
4755
*
4856
* @var array<string,string>|null $headers
4957
*/
@@ -58,6 +66,20 @@ final class ModelConfig implements BaseModel
5866
#[Optional(enum: Provider::class)]
5967
public ?string $provider;
6068

69+
/**
70+
* Provider-specific options passed through to the AI SDK provider constructor. For Bedrock: { region, accessKeyId, secretAccessKey, sessionToken }. For Vertex: { project, location, googleAuthOptions }.
71+
*
72+
* @var ProviderOptionsVariants|null $providerOptions
73+
*/
74+
#[Optional]
75+
public BedrockAPIKeyProviderOptions|BedrockAwsCredentialsProviderOptions|GoogleVertexProviderOptions|null $providerOptions;
76+
77+
/**
78+
* When true, hosted sessions will not copy x-model-api-key into model.apiKey. Use this when auth is carried through providerOptions instead of an API key.
79+
*/
80+
#[Optional('skipApiKeyFallback')]
81+
public ?bool $skipAPIKeyFallback;
82+
6183
/**
6284
* `new ModelConfig()` is missing required properties by the API.
6385
*
@@ -84,13 +106,16 @@ public function __construct()
84106
*
85107
* @param array<string,string>|null $headers
86108
* @param Provider|value-of<Provider>|null $provider
109+
* @param ProviderOptionsShape|null $providerOptions
87110
*/
88111
public static function with(
89112
string $modelName,
90113
?string $apiKey = null,
91114
?string $baseURL = null,
92115
?array $headers = null,
93116
Provider|string|null $provider = null,
117+
BedrockAPIKeyProviderOptions|array|BedrockAwsCredentialsProviderOptions|GoogleVertexProviderOptions|null $providerOptions = null,
118+
?bool $skipAPIKeyFallback = null,
94119
): self {
95120
$self = new self;
96121

@@ -100,6 +125,8 @@ public static function with(
100125
null !== $baseURL && $self['baseURL'] = $baseURL;
101126
null !== $headers && $self['headers'] = $headers;
102127
null !== $provider && $self['provider'] = $provider;
128+
null !== $providerOptions && $self['providerOptions'] = $providerOptions;
129+
null !== $skipAPIKeyFallback && $self['skipAPIKeyFallback'] = $skipAPIKeyFallback;
103130

104131
return $self;
105132
}
@@ -138,7 +165,7 @@ public function withBaseURL(string $baseURL): self
138165
}
139166

140167
/**
141-
* Custom headers sent with every request to the model provider.
168+
* Custom headers for the model provider.
142169
*
143170
* @param array<string,string> $headers
144171
*/
@@ -162,4 +189,29 @@ public function withProvider(Provider|string $provider): self
162189

163190
return $self;
164191
}
192+
193+
/**
194+
* Provider-specific options passed through to the AI SDK provider constructor. For Bedrock: { region, accessKeyId, secretAccessKey, sessionToken }. For Vertex: { project, location, googleAuthOptions }.
195+
*
196+
* @param ProviderOptionsShape $providerOptions
197+
*/
198+
public function withProviderOptions(
199+
BedrockAPIKeyProviderOptions|array|BedrockAwsCredentialsProviderOptions|GoogleVertexProviderOptions $providerOptions,
200+
): self {
201+
$self = clone $this;
202+
$self['providerOptions'] = $providerOptions;
203+
204+
return $self;
205+
}
206+
207+
/**
208+
* When true, hosted sessions will not copy x-model-api-key into model.apiKey. Use this when auth is carried through providerOptions instead of an API key.
209+
*/
210+
public function withSkipAPIKeyFallback(bool $skipAPIKeyFallback): self
211+
{
212+
$self = clone $this;
213+
$self['skipAPIKeyFallback'] = $skipAPIKeyFallback;
214+
215+
return $self;
216+
}
165217
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Stagehand\Sessions\ModelConfig;
6+
7+
use Stagehand\Core\Concerns\SdkUnion;
8+
use Stagehand\Core\Conversion\Contracts\Converter;
9+
use Stagehand\Core\Conversion\Contracts\ConverterSource;
10+
use Stagehand\Sessions\ModelConfig\ProviderOptions\BedrockAPIKeyProviderOptions;
11+
use Stagehand\Sessions\ModelConfig\ProviderOptions\BedrockAwsCredentialsProviderOptions;
12+
use Stagehand\Sessions\ModelConfig\ProviderOptions\GoogleVertexProviderOptions;
13+
14+
/**
15+
* Provider-specific options passed through to the AI SDK provider constructor. For Bedrock: { region, accessKeyId, secretAccessKey, sessionToken }. For Vertex: { project, location, googleAuthOptions }.
16+
*
17+
* @phpstan-import-type BedrockAPIKeyProviderOptionsShape from \Stagehand\Sessions\ModelConfig\ProviderOptions\BedrockAPIKeyProviderOptions
18+
* @phpstan-import-type BedrockAwsCredentialsProviderOptionsShape from \Stagehand\Sessions\ModelConfig\ProviderOptions\BedrockAwsCredentialsProviderOptions
19+
* @phpstan-import-type GoogleVertexProviderOptionsShape from \Stagehand\Sessions\ModelConfig\ProviderOptions\GoogleVertexProviderOptions
20+
*
21+
* @phpstan-type ProviderOptionsVariants = BedrockAPIKeyProviderOptions|BedrockAwsCredentialsProviderOptions|GoogleVertexProviderOptions
22+
* @phpstan-type ProviderOptionsShape = ProviderOptionsVariants|BedrockAPIKeyProviderOptionsShape|BedrockAwsCredentialsProviderOptionsShape|GoogleVertexProviderOptionsShape
23+
*/
24+
final class ProviderOptions implements ConverterSource
25+
{
26+
use SdkUnion;
27+
28+
/**
29+
* @return list<string|Converter|ConverterSource>|array<string,string|Converter|ConverterSource>
30+
*/
31+
public static function variants(): array
32+
{
33+
return [
34+
BedrockAPIKeyProviderOptions::class,
35+
BedrockAwsCredentialsProviderOptions::class,
36+
GoogleVertexProviderOptions::class,
37+
];
38+
}
39+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Stagehand\Sessions\ModelConfig\ProviderOptions;
6+
7+
use Stagehand\Core\Attributes\Required;
8+
use Stagehand\Core\Concerns\SdkModel;
9+
use Stagehand\Core\Contracts\BaseModel;
10+
11+
/**
12+
* @phpstan-type BedrockAPIKeyProviderOptionsShape = array{region: string}
13+
*/
14+
final class BedrockAPIKeyProviderOptions implements BaseModel
15+
{
16+
/** @use SdkModel<BedrockAPIKeyProviderOptionsShape> */
17+
use SdkModel;
18+
19+
/**
20+
* AWS region for Amazon Bedrock.
21+
*/
22+
#[Required]
23+
public string $region;
24+
25+
/**
26+
* `new BedrockAPIKeyProviderOptions()` is missing required properties by the API.
27+
*
28+
* To enforce required parameters use
29+
* ```
30+
* BedrockAPIKeyProviderOptions::with(region: ...)
31+
* ```
32+
*
33+
* Otherwise ensure the following setters are called
34+
*
35+
* ```
36+
* (new BedrockAPIKeyProviderOptions)->withRegion(...)
37+
* ```
38+
*/
39+
public function __construct()
40+
{
41+
$this->initialize();
42+
}
43+
44+
/**
45+
* Construct an instance from the required parameters.
46+
*
47+
* You must use named parameters to construct any parameters with a default value.
48+
*/
49+
public static function with(string $region): self
50+
{
51+
$self = new self;
52+
53+
$self['region'] = $region;
54+
55+
return $self;
56+
}
57+
58+
/**
59+
* AWS region for Amazon Bedrock.
60+
*/
61+
public function withRegion(string $region): self
62+
{
63+
$self = clone $this;
64+
$self['region'] = $region;
65+
66+
return $self;
67+
}
68+
}

0 commit comments

Comments
 (0)