Skip to content

Commit f511e47

Browse files
chore(api): clarify external storage deletion behavior (#1057)
## Summary Clarifies how disconnecting an external storage configuration affects project retention settings and cloud storage. ## Changes - Document restoration of organization-default retention when the last project configuration is removed. - Explain that repeated deletion completes interrupted retention updates and leaves cloud storage unchanged. Co-authored-by: marcuswood-oai <323319819+marcuswood-oai@users.noreply.github.com>
1 parent 0956c64 commit f511e47

13 files changed

Lines changed: 89 additions & 72 deletions

File tree

‎.castiron.stats.yml‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
schema_version: 1
2-
generation_id: c5d3dd34-f750-47f7-97dd-2b06d84974c7
3-
openapi_spec_hash: ce912f79d7f8cb19a7a515513c214b8a
4-
openapi_transformed_spec_hash: 352b5a7a028f990b6475b6593e381eee
5-
config_hash: dde98d9c41cd6f4163320f92c70f83e6
6-
codegen_sha: 2a14074079a9331f4b3e7638ded42c0a8dbe2541
7-
codegen_hash: b09f75ad1d66062668b44c17bd3ca8bd060baaf16c3b1a892eb8e49f2a0d97fe
8-
public_codegen_sha: a817eabe36bad4c6479430cbe9f29fe353499c10
2+
generation_id: df13bfb8-f64e-490b-8449-3b4b10b30510
3+
openapi_spec_hash: 3a0031a277862428a7586125d5cec8c8
4+
openapi_transformed_spec_hash: 951060c87157ffcd2b99d6ec617d2f6b
5+
config_hash: 18f602826c88bad76c6fdf08ab67247a
6+
codegen_sha: cd85f5100378285631495fa9381b12beeb3724a2
7+
codegen_hash: b053bfcf443accffd13c8738807d62816189e2c775d56d2bc17819715f9f3f85
8+
public_codegen_sha: 3b35198fa93c82ca0ce4f3431706f523a80fe6f5

‎api_reference/openapi.transformed.yml‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22961,7 +22961,7 @@ paths:
2296122961
- AdminApiKeyAuth: []
2296222962
delete:
2296322963
summary: Delete an external storage configuration
22964-
description: Soft-delete one customer-managed external storage configuration.
22964+
description: Disconnect a customer-managed external storage configuration. Removing the project's last configuration restores organization-default retention if customer-managed retention was active. Repeating a deletion also completes any interrupted retention update. Cloud storage is unchanged.
2296522965
operationId: Deleteanexternalstorageconfiguration
2296622966
parameters:
2296722967
- name: external_storage_id
@@ -80509,6 +80509,7 @@ components:
8050980509
- $ref: '#/components/schemas/ReasoningEffortParam'
8051080510
- type: 'null'
8051180511
description: Omit to keep the current effort. Null selects the model's default effort.
80512+
x-openai-go-optional-enum: true
8051280513
additionalProperties: false
8051380514
description: Reasoning effort for subsequent turns. The reasoning summary stays unchanged.
8051480515
UpdateSessionAgentParam:
@@ -80527,6 +80528,7 @@ components:
8052780528
- $ref: '#/components/schemas/ServiceTierParam'
8052880529
- type: 'null'
8052980530
description: Omit to keep the current tier. Null resets it to auto.
80531+
x-openai-go-optional-enum: true
8053080532
additionalProperties: false
8053180533
description: Model settings that can change after session creation.
8053280534
UpdateAgentSessionParams:
@@ -96391,6 +96393,7 @@ components:
9639196393
- gpt-5.1
9639296394
- gpt-5.1-2025-11-13
9639396395
- gpt-5.1-codex
96396+
- gpt-5.1-mini
9639496397
- gpt-5.1-chat-latest
9639596398
- gpt-5
9639696399
- gpt-5-mini

‎openai-java-core/src/main/kotlin/com/openai/models/admin/organization/externalstorage/ExternalStorageDeleteParams.kt‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,11 @@ import java.util.Objects
1111
import java.util.Optional
1212
import kotlin.jvm.optionals.getOrNull
1313

14-
/** Soft-delete one customer-managed external storage configuration. */
14+
/**
15+
* Disconnect a customer-managed external storage configuration. Removing the project's last
16+
* configuration restores organization-default retention if customer-managed retention was active.
17+
* Repeating a deletion also completes any interrupted retention update. Cloud storage is unchanged.
18+
*/
1519
class ExternalStorageDeleteParams
1620
private constructor(
1721
private val externalStorageId: String?,

‎openai-java-core/src/main/kotlin/com/openai/services/async/SafetyServiceAsync.kt‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ interface SafetyServiceAsync {
2121
*/
2222
fun withOptions(modifier: Consumer<ClientOptions.Builder>): SafetyServiceAsync
2323

24-
fun alerts(): AlertServiceAsync
25-
2624
fun cases(): CaseServiceAsync
2725

26+
fun alerts(): AlertServiceAsync
27+
2828
/**
2929
* A view of [SafetyServiceAsync] that provides access to raw HTTP responses for each method.
3030
*/
@@ -39,8 +39,8 @@ interface SafetyServiceAsync {
3939
modifier: Consumer<ClientOptions.Builder>
4040
): SafetyServiceAsync.WithRawResponse
4141

42-
fun alerts(): AlertServiceAsync.WithRawResponse
43-
4442
fun cases(): CaseServiceAsync.WithRawResponse
43+
44+
fun alerts(): AlertServiceAsync.WithRawResponse
4545
}
4646
}

‎openai-java-core/src/main/kotlin/com/openai/services/async/SafetyServiceAsyncImpl.kt‎

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,39 +16,39 @@ class SafetyServiceAsyncImpl internal constructor(private val clientOptions: Cli
1616
WithRawResponseImpl(clientOptions)
1717
}
1818

19-
private val alerts: AlertServiceAsync by lazy { AlertServiceAsyncImpl(clientOptions) }
20-
2119
private val cases: CaseServiceAsync by lazy { CaseServiceAsyncImpl(clientOptions) }
2220

21+
private val alerts: AlertServiceAsync by lazy { AlertServiceAsyncImpl(clientOptions) }
22+
2323
override fun withRawResponse(): SafetyServiceAsync.WithRawResponse = withRawResponse
2424

2525
override fun withOptions(modifier: Consumer<ClientOptions.Builder>): SafetyServiceAsync =
2626
SafetyServiceAsyncImpl(clientOptions.toBuilder().apply(modifier::accept).build())
2727

28-
override fun alerts(): AlertServiceAsync = alerts
29-
3028
override fun cases(): CaseServiceAsync = cases
3129

30+
override fun alerts(): AlertServiceAsync = alerts
31+
3232
class WithRawResponseImpl internal constructor(private val clientOptions: ClientOptions) :
3333
SafetyServiceAsync.WithRawResponse {
3434

35-
private val alerts: AlertServiceAsync.WithRawResponse by lazy {
36-
AlertServiceAsyncImpl.WithRawResponseImpl(clientOptions)
37-
}
38-
3935
private val cases: CaseServiceAsync.WithRawResponse by lazy {
4036
CaseServiceAsyncImpl.WithRawResponseImpl(clientOptions)
4137
}
4238

39+
private val alerts: AlertServiceAsync.WithRawResponse by lazy {
40+
AlertServiceAsyncImpl.WithRawResponseImpl(clientOptions)
41+
}
42+
4343
override fun withOptions(
4444
modifier: Consumer<ClientOptions.Builder>
4545
): SafetyServiceAsync.WithRawResponse =
4646
SafetyServiceAsyncImpl.WithRawResponseImpl(
4747
clientOptions.toBuilder().apply(modifier::accept).build()
4848
)
4949

50-
override fun alerts(): AlertServiceAsync.WithRawResponse = alerts
51-
5250
override fun cases(): CaseServiceAsync.WithRawResponse = cases
51+
52+
override fun alerts(): AlertServiceAsync.WithRawResponse = alerts
5353
}
5454
}

‎openai-java-core/src/main/kotlin/com/openai/services/async/admin/OrganizationServiceAsync.kt‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,6 @@ interface OrganizationServiceAsync {
3232
*/
3333
fun withOptions(modifier: Consumer<ClientOptions.Builder>): OrganizationServiceAsync
3434

35-
fun externalStorage(): ExternalStorageServiceAsync
36-
3735
/** List user actions and configuration changes within this organization. */
3836
fun auditLogs(): AuditLogServiceAsync
3937

@@ -51,6 +49,8 @@ interface OrganizationServiceAsync {
5149

5250
fun dataRetention(): DataRetentionServiceAsync
5351

52+
fun externalStorage(): ExternalStorageServiceAsync
53+
5454
fun spendLimit(): SpendLimitServiceAsync
5555

5656
fun spendAlerts(): SpendAlertServiceAsync
@@ -74,8 +74,6 @@ interface OrganizationServiceAsync {
7474
modifier: Consumer<ClientOptions.Builder>
7575
): OrganizationServiceAsync.WithRawResponse
7676

77-
fun externalStorage(): ExternalStorageServiceAsync.WithRawResponse
78-
7977
/** List user actions and configuration changes within this organization. */
8078
fun auditLogs(): AuditLogServiceAsync.WithRawResponse
8179

@@ -93,6 +91,8 @@ interface OrganizationServiceAsync {
9391

9492
fun dataRetention(): DataRetentionServiceAsync.WithRawResponse
9593

94+
fun externalStorage(): ExternalStorageServiceAsync.WithRawResponse
95+
9696
fun spendLimit(): SpendLimitServiceAsync.WithRawResponse
9797

9898
fun spendAlerts(): SpendAlertServiceAsync.WithRawResponse

‎openai-java-core/src/main/kotlin/com/openai/services/async/admin/OrganizationServiceAsyncImpl.kt‎

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,6 @@ class OrganizationServiceAsyncImpl internal constructor(private val clientOption
3838
WithRawResponseImpl(clientOptions)
3939
}
4040

41-
private val externalStorage: ExternalStorageServiceAsync by lazy {
42-
ExternalStorageServiceAsyncImpl(clientOptions)
43-
}
44-
4541
private val auditLogs: AuditLogServiceAsync by lazy { AuditLogServiceAsyncImpl(clientOptions) }
4642

4743
private val adminApiKeys: AdminApiKeyServiceAsync by lazy {
@@ -62,6 +58,10 @@ class OrganizationServiceAsyncImpl internal constructor(private val clientOption
6258
DataRetentionServiceAsyncImpl(clientOptions)
6359
}
6460

61+
private val externalStorage: ExternalStorageServiceAsync by lazy {
62+
ExternalStorageServiceAsyncImpl(clientOptions)
63+
}
64+
6565
private val spendLimit: SpendLimitServiceAsync by lazy {
6666
SpendLimitServiceAsyncImpl(clientOptions)
6767
}
@@ -81,8 +81,6 @@ class OrganizationServiceAsyncImpl internal constructor(private val clientOption
8181
override fun withOptions(modifier: Consumer<ClientOptions.Builder>): OrganizationServiceAsync =
8282
OrganizationServiceAsyncImpl(clientOptions.toBuilder().apply(modifier::accept).build())
8383

84-
override fun externalStorage(): ExternalStorageServiceAsync = externalStorage
85-
8684
/** List user actions and configuration changes within this organization. */
8785
override fun auditLogs(): AuditLogServiceAsync = auditLogs
8886

@@ -100,6 +98,8 @@ class OrganizationServiceAsyncImpl internal constructor(private val clientOption
10098

10199
override fun dataRetention(): DataRetentionServiceAsync = dataRetention
102100

101+
override fun externalStorage(): ExternalStorageServiceAsync = externalStorage
102+
103103
override fun spendLimit(): SpendLimitServiceAsync = spendLimit
104104

105105
override fun spendAlerts(): SpendAlertServiceAsync = spendAlerts
@@ -111,10 +111,6 @@ class OrganizationServiceAsyncImpl internal constructor(private val clientOption
111111
class WithRawResponseImpl internal constructor(private val clientOptions: ClientOptions) :
112112
OrganizationServiceAsync.WithRawResponse {
113113

114-
private val externalStorage: ExternalStorageServiceAsync.WithRawResponse by lazy {
115-
ExternalStorageServiceAsyncImpl.WithRawResponseImpl(clientOptions)
116-
}
117-
118114
private val auditLogs: AuditLogServiceAsync.WithRawResponse by lazy {
119115
AuditLogServiceAsyncImpl.WithRawResponseImpl(clientOptions)
120116
}
@@ -147,6 +143,10 @@ class OrganizationServiceAsyncImpl internal constructor(private val clientOption
147143
DataRetentionServiceAsyncImpl.WithRawResponseImpl(clientOptions)
148144
}
149145

146+
private val externalStorage: ExternalStorageServiceAsync.WithRawResponse by lazy {
147+
ExternalStorageServiceAsyncImpl.WithRawResponseImpl(clientOptions)
148+
}
149+
150150
private val spendLimit: SpendLimitServiceAsync.WithRawResponse by lazy {
151151
SpendLimitServiceAsyncImpl.WithRawResponseImpl(clientOptions)
152152
}
@@ -170,9 +170,6 @@ class OrganizationServiceAsyncImpl internal constructor(private val clientOption
170170
clientOptions.toBuilder().apply(modifier::accept).build()
171171
)
172172

173-
override fun externalStorage(): ExternalStorageServiceAsync.WithRawResponse =
174-
externalStorage
175-
176173
/** List user actions and configuration changes within this organization. */
177174
override fun auditLogs(): AuditLogServiceAsync.WithRawResponse = auditLogs
178175

@@ -190,6 +187,9 @@ class OrganizationServiceAsyncImpl internal constructor(private val clientOption
190187

191188
override fun dataRetention(): DataRetentionServiceAsync.WithRawResponse = dataRetention
192189

190+
override fun externalStorage(): ExternalStorageServiceAsync.WithRawResponse =
191+
externalStorage
192+
193193
override fun spendLimit(): SpendLimitServiceAsync.WithRawResponse = spendLimit
194194

195195
override fun spendAlerts(): SpendAlertServiceAsync.WithRawResponse = spendAlerts

‎openai-java-core/src/main/kotlin/com/openai/services/async/admin/organization/ExternalStorageServiceAsync.kt‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,12 @@ interface ExternalStorageServiceAsync {
9797
fun list(requestOptions: RequestOptions): CompletableFuture<ExternalStorageListPageAsync> =
9898
list(ExternalStorageListParams.none(), requestOptions)
9999

100-
/** Soft-delete one customer-managed external storage configuration. */
100+
/**
101+
* Disconnect a customer-managed external storage configuration. Removing the project's last
102+
* configuration restores organization-default retention if customer-managed retention was
103+
* active. Repeating a deletion also completes any interrupted retention update. Cloud storage
104+
* is unchanged.
105+
*/
101106
fun delete(externalStorageId: String): CompletableFuture<ExternalStorageDeleted> =
102107
delete(externalStorageId, ExternalStorageDeleteParams.none())
103108

‎openai-java-core/src/main/kotlin/com/openai/services/blocking/SafetyService.kt‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ interface SafetyService {
2121
*/
2222
fun withOptions(modifier: Consumer<ClientOptions.Builder>): SafetyService
2323

24-
fun alerts(): AlertService
25-
2624
fun cases(): CaseService
2725

26+
fun alerts(): AlertService
27+
2828
/** A view of [SafetyService] that provides access to raw HTTP responses for each method. */
2929
interface WithRawResponse {
3030

@@ -35,8 +35,8 @@ interface SafetyService {
3535
*/
3636
fun withOptions(modifier: Consumer<ClientOptions.Builder>): SafetyService.WithRawResponse
3737

38-
fun alerts(): AlertService.WithRawResponse
39-
4038
fun cases(): CaseService.WithRawResponse
39+
40+
fun alerts(): AlertService.WithRawResponse
4141
}
4242
}

‎openai-java-core/src/main/kotlin/com/openai/services/blocking/SafetyServiceImpl.kt‎

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,39 +16,39 @@ class SafetyServiceImpl internal constructor(private val clientOptions: ClientOp
1616
WithRawResponseImpl(clientOptions)
1717
}
1818

19-
private val alerts: AlertService by lazy { AlertServiceImpl(clientOptions) }
20-
2119
private val cases: CaseService by lazy { CaseServiceImpl(clientOptions) }
2220

21+
private val alerts: AlertService by lazy { AlertServiceImpl(clientOptions) }
22+
2323
override fun withRawResponse(): SafetyService.WithRawResponse = withRawResponse
2424

2525
override fun withOptions(modifier: Consumer<ClientOptions.Builder>): SafetyService =
2626
SafetyServiceImpl(clientOptions.toBuilder().apply(modifier::accept).build())
2727

28-
override fun alerts(): AlertService = alerts
29-
3028
override fun cases(): CaseService = cases
3129

30+
override fun alerts(): AlertService = alerts
31+
3232
class WithRawResponseImpl internal constructor(private val clientOptions: ClientOptions) :
3333
SafetyService.WithRawResponse {
3434

35-
private val alerts: AlertService.WithRawResponse by lazy {
36-
AlertServiceImpl.WithRawResponseImpl(clientOptions)
37-
}
38-
3935
private val cases: CaseService.WithRawResponse by lazy {
4036
CaseServiceImpl.WithRawResponseImpl(clientOptions)
4137
}
4238

39+
private val alerts: AlertService.WithRawResponse by lazy {
40+
AlertServiceImpl.WithRawResponseImpl(clientOptions)
41+
}
42+
4343
override fun withOptions(
4444
modifier: Consumer<ClientOptions.Builder>
4545
): SafetyService.WithRawResponse =
4646
SafetyServiceImpl.WithRawResponseImpl(
4747
clientOptions.toBuilder().apply(modifier::accept).build()
4848
)
4949

50-
override fun alerts(): AlertService.WithRawResponse = alerts
51-
5250
override fun cases(): CaseService.WithRawResponse = cases
51+
52+
override fun alerts(): AlertService.WithRawResponse = alerts
5353
}
5454
}

0 commit comments

Comments
 (0)