Skip to content

Commit 55ae767

Browse files
feat(api): Config update for pakrym-stream-param
1 parent f621086 commit 55ae767

28 files changed

+1882
-12
lines changed

.stats.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
configured_endpoints: 86
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai%2Fopenai-fc64d7c2c8f51f750813375356c3f3fdfc7fc1b1b34f19c20a5410279d445d37.yml
3-
openapi_spec_hash: 618285fc70199ee32b9ebe4bf72f7e4c
4-
config_hash: 3b590818075ca4b54949578b97494525
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai%2Fopenai-d4bcffecf0cdadf746faa6708ed1ec81fac451f9b857deabbab26f0a343b9314.yml
3+
openapi_spec_hash: 7c54a18b4381248bda7cc34c52142615
4+
config_hash: 2102e4b25bbcab5d32d5ffa5d34daa0c

openai-java-core/src/main/kotlin/com/openai/models/responses/ResponseOutputText.kt

Lines changed: 589 additions & 5 deletions
Large diffs are not rendered by default.

openai-java-core/src/main/kotlin/com/openai/models/responses/ResponseRetrieveParams.kt

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class ResponseRetrieveParams
1515
private constructor(
1616
private val responseId: String?,
1717
private val include: List<ResponseIncludable>?,
18+
private val startingAfter: Long?,
1819
private val additionalHeaders: Headers,
1920
private val additionalQueryParams: QueryParams,
2021
) : Params {
@@ -27,6 +28,9 @@ private constructor(
2728
*/
2829
fun include(): Optional<List<ResponseIncludable>> = Optional.ofNullable(include)
2930

31+
/** The sequence number of the event after which to start streaming. */
32+
fun startingAfter(): Optional<Long> = Optional.ofNullable(startingAfter)
33+
3034
fun _additionalHeaders(): Headers = additionalHeaders
3135

3236
fun _additionalQueryParams(): QueryParams = additionalQueryParams
@@ -46,13 +50,15 @@ private constructor(
4650

4751
private var responseId: String? = null
4852
private var include: MutableList<ResponseIncludable>? = null
53+
private var startingAfter: Long? = null
4954
private var additionalHeaders: Headers.Builder = Headers.builder()
5055
private var additionalQueryParams: QueryParams.Builder = QueryParams.builder()
5156

5257
@JvmSynthetic
5358
internal fun from(responseRetrieveParams: ResponseRetrieveParams) = apply {
5459
responseId = responseRetrieveParams.responseId
5560
include = responseRetrieveParams.include?.toMutableList()
61+
startingAfter = responseRetrieveParams.startingAfter
5662
additionalHeaders = responseRetrieveParams.additionalHeaders.toBuilder()
5763
additionalQueryParams = responseRetrieveParams.additionalQueryParams.toBuilder()
5864
}
@@ -82,6 +88,19 @@ private constructor(
8288
this.include = (this.include ?: mutableListOf()).apply { add(include) }
8389
}
8490

91+
/** The sequence number of the event after which to start streaming. */
92+
fun startingAfter(startingAfter: Long?) = apply { this.startingAfter = startingAfter }
93+
94+
/**
95+
* Alias for [Builder.startingAfter].
96+
*
97+
* This unboxed primitive overload exists for backwards compatibility.
98+
*/
99+
fun startingAfter(startingAfter: Long) = startingAfter(startingAfter as Long?)
100+
101+
/** Alias for calling [Builder.startingAfter] with `startingAfter.orElse(null)`. */
102+
fun startingAfter(startingAfter: Optional<Long>) = startingAfter(startingAfter.getOrNull())
103+
85104
fun additionalHeaders(additionalHeaders: Headers) = apply {
86105
this.additionalHeaders.clear()
87106
putAllAdditionalHeaders(additionalHeaders)
@@ -189,6 +208,7 @@ private constructor(
189208
ResponseRetrieveParams(
190209
responseId,
191210
include?.toImmutable(),
211+
startingAfter,
192212
additionalHeaders.build(),
193213
additionalQueryParams.build(),
194214
)
@@ -206,6 +226,8 @@ private constructor(
206226
QueryParams.builder()
207227
.apply {
208228
include?.forEach { put("include[]", it.toString()) }
229+
startingAfter?.let { put("starting_after", it.toString()) }
230+
stream?.let { put("stream", it.toString()) }
209231
putAll(additionalQueryParams)
210232
}
211233
.build()
@@ -215,11 +237,11 @@ private constructor(
215237
return true
216238
}
217239

218-
return /* spotless:off */ other is ResponseRetrieveParams && responseId == other.responseId && include == other.include && additionalHeaders == other.additionalHeaders && additionalQueryParams == other.additionalQueryParams /* spotless:on */
240+
return /* spotless:off */ other is ResponseRetrieveParams && responseId == other.responseId && include == other.include && startingAfter == other.startingAfter && additionalHeaders == other.additionalHeaders && additionalQueryParams == other.additionalQueryParams /* spotless:on */
219241
}
220242

221-
override fun hashCode(): Int = /* spotless:off */ Objects.hash(responseId, include, additionalHeaders, additionalQueryParams) /* spotless:on */
243+
override fun hashCode(): Int = /* spotless:off */ Objects.hash(responseId, include, startingAfter, additionalHeaders, additionalQueryParams) /* spotless:on */
222244

223245
override fun toString() =
224-
"ResponseRetrieveParams{responseId=$responseId, include=$include, additionalHeaders=$additionalHeaders, additionalQueryParams=$additionalQueryParams}"
246+
"ResponseRetrieveParams{responseId=$responseId, include=$include, startingAfter=$startingAfter, additionalHeaders=$additionalHeaders, additionalQueryParams=$additionalQueryParams}"
225247
}

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

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,43 @@ interface ResponseServiceAsync {
9898
fun retrieve(responseId: String, requestOptions: RequestOptions): CompletableFuture<Response> =
9999
retrieve(responseId, ResponseRetrieveParams.none(), requestOptions)
100100

101+
/** Retrieves a model response with the given ID. */
102+
fun retrieveStreaming(responseId: String): AsyncStreamResponse<ResponseStreamEvent> =
103+
retrieveStreaming(responseId, ResponseRetrieveParams.none())
104+
105+
/** @see [retrieveStreaming] */
106+
fun retrieveStreaming(
107+
responseId: String,
108+
params: ResponseRetrieveParams = ResponseRetrieveParams.none(),
109+
requestOptions: RequestOptions = RequestOptions.none(),
110+
): AsyncStreamResponse<ResponseStreamEvent> =
111+
retrieveStreaming(params.toBuilder().responseId(responseId).build(), requestOptions)
112+
113+
/** @see [retrieveStreaming] */
114+
fun retrieveStreaming(
115+
responseId: String,
116+
params: ResponseRetrieveParams = ResponseRetrieveParams.none(),
117+
): AsyncStreamResponse<ResponseStreamEvent> =
118+
retrieveStreaming(responseId, params, RequestOptions.none())
119+
120+
/** @see [retrieveStreaming] */
121+
fun retrieveStreaming(
122+
params: ResponseRetrieveParams,
123+
requestOptions: RequestOptions = RequestOptions.none(),
124+
): AsyncStreamResponse<ResponseStreamEvent>
125+
126+
/** @see [retrieveStreaming] */
127+
fun retrieveStreaming(
128+
params: ResponseRetrieveParams
129+
): AsyncStreamResponse<ResponseStreamEvent> = retrieveStreaming(params, RequestOptions.none())
130+
131+
/** @see [retrieveStreaming] */
132+
fun retrieveStreaming(
133+
responseId: String,
134+
requestOptions: RequestOptions,
135+
): AsyncStreamResponse<ResponseStreamEvent> =
136+
retrieveStreaming(responseId, ResponseRetrieveParams.none(), requestOptions)
137+
101138
/** Deletes a model response with the given ID. */
102139
fun delete(responseId: String): CompletableFuture<Void?> =
103140
delete(responseId, ResponseDeleteParams.none())
@@ -250,6 +287,55 @@ interface ResponseServiceAsync {
250287
): CompletableFuture<HttpResponseFor<Response>> =
251288
retrieve(responseId, ResponseRetrieveParams.none(), requestOptions)
252289

290+
/**
291+
* Returns a raw HTTP response for `get /responses/{response_id}`, but is otherwise the same
292+
* as [ResponseServiceAsync.retrieveStreaming].
293+
*/
294+
@MustBeClosed
295+
fun retrieveStreaming(
296+
responseId: String
297+
): CompletableFuture<HttpResponseFor<StreamResponse<ResponseStreamEvent>>> =
298+
retrieveStreaming(responseId, ResponseRetrieveParams.none())
299+
300+
/** @see [retrieveStreaming] */
301+
@MustBeClosed
302+
fun retrieveStreaming(
303+
responseId: String,
304+
params: ResponseRetrieveParams = ResponseRetrieveParams.none(),
305+
requestOptions: RequestOptions = RequestOptions.none(),
306+
): CompletableFuture<HttpResponseFor<StreamResponse<ResponseStreamEvent>>> =
307+
retrieveStreaming(params.toBuilder().responseId(responseId).build(), requestOptions)
308+
309+
/** @see [retrieveStreaming] */
310+
@MustBeClosed
311+
fun retrieveStreaming(
312+
responseId: String,
313+
params: ResponseRetrieveParams = ResponseRetrieveParams.none(),
314+
): CompletableFuture<HttpResponseFor<StreamResponse<ResponseStreamEvent>>> =
315+
retrieveStreaming(responseId, params, RequestOptions.none())
316+
317+
/** @see [retrieveStreaming] */
318+
@MustBeClosed
319+
fun retrieveStreaming(
320+
params: ResponseRetrieveParams,
321+
requestOptions: RequestOptions = RequestOptions.none(),
322+
): CompletableFuture<HttpResponseFor<StreamResponse<ResponseStreamEvent>>>
323+
324+
/** @see [retrieveStreaming] */
325+
@MustBeClosed
326+
fun retrieveStreaming(
327+
params: ResponseRetrieveParams
328+
): CompletableFuture<HttpResponseFor<StreamResponse<ResponseStreamEvent>>> =
329+
retrieveStreaming(params, RequestOptions.none())
330+
331+
/** @see [retrieveStreaming] */
332+
@MustBeClosed
333+
fun retrieveStreaming(
334+
responseId: String,
335+
requestOptions: RequestOptions,
336+
): CompletableFuture<HttpResponseFor<StreamResponse<ResponseStreamEvent>>> =
337+
retrieveStreaming(responseId, ResponseRetrieveParams.none(), requestOptions)
338+
253339
/**
254340
* Returns a raw HTTP response for `delete /responses/{response_id}`, but is otherwise the
255341
* same as [ResponseServiceAsync.delete].

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

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,16 @@ class ResponseServiceAsyncImpl internal constructor(private val clientOptions: C
7575
// get /responses/{response_id}
7676
withRawResponse().retrieve(params, requestOptions).thenApply { it.parse() }
7777

78+
override fun retrieveStreaming(
79+
params: ResponseRetrieveParams,
80+
requestOptions: RequestOptions,
81+
): AsyncStreamResponse<ResponseStreamEvent> =
82+
// get /responses/{response_id}
83+
withRawResponse()
84+
.retrieveStreaming(params, requestOptions)
85+
.thenApply { it.parse() }
86+
.toAsync(clientOptions.streamHandlerExecutor)
87+
7888
override fun delete(
7989
params: ResponseDeleteParams,
8090
requestOptions: RequestOptions,
@@ -205,6 +215,42 @@ class ResponseServiceAsyncImpl internal constructor(private val clientOptions: C
205215
}
206216
}
207217

218+
private val retrieveStreamingHandler: Handler<StreamResponse<ResponseStreamEvent>> =
219+
sseHandler(clientOptions.jsonMapper)
220+
.mapJson<ResponseStreamEvent>()
221+
.withErrorHandler(errorHandler)
222+
223+
override fun retrieveStreaming(
224+
params: ResponseRetrieveParams,
225+
requestOptions: RequestOptions,
226+
): CompletableFuture<HttpResponseFor<StreamResponse<ResponseStreamEvent>>> {
227+
// We check here instead of in the params builder because this can be specified
228+
// positionally or in the params class.
229+
checkRequired("responseId", params.responseId().getOrNull())
230+
val request =
231+
HttpRequest.builder()
232+
.method(HttpMethod.GET)
233+
.addPathSegments("responses", params._pathParam(0))
234+
.build()
235+
.prepareAsync(clientOptions, params)
236+
val requestOptions = requestOptions.applyDefaults(RequestOptions.from(clientOptions))
237+
return request
238+
.thenComposeAsync { clientOptions.httpClient.executeAsync(it, requestOptions) }
239+
.thenApply { response ->
240+
response.parseable {
241+
response
242+
.let { retrieveStreamingHandler.handle(it) }
243+
.let { streamResponse ->
244+
if (requestOptions.responseValidation!!) {
245+
streamResponse.map { it.validate() }
246+
} else {
247+
streamResponse
248+
}
249+
}
250+
}
251+
}
252+
}
253+
208254
private val deleteHandler: Handler<Void?> = emptyHandler().withErrorHandler(errorHandler)
209255

210256
override fun delete(

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

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,48 @@ interface ResponseService {
117117
fun retrieve(responseId: String, requestOptions: RequestOptions): Response =
118118
retrieve(responseId, ResponseRetrieveParams.none(), requestOptions)
119119

120+
/** Retrieves a model response with the given ID. */
121+
@MustBeClosed
122+
fun retrieveStreaming(responseId: String): StreamResponse<ResponseStreamEvent> =
123+
retrieveStreaming(responseId, ResponseRetrieveParams.none())
124+
125+
/** @see [retrieveStreaming] */
126+
@MustBeClosed
127+
fun retrieveStreaming(
128+
responseId: String,
129+
params: ResponseRetrieveParams = ResponseRetrieveParams.none(),
130+
requestOptions: RequestOptions = RequestOptions.none(),
131+
): StreamResponse<ResponseStreamEvent> =
132+
retrieveStreaming(params.toBuilder().responseId(responseId).build(), requestOptions)
133+
134+
/** @see [retrieveStreaming] */
135+
@MustBeClosed
136+
fun retrieveStreaming(
137+
responseId: String,
138+
params: ResponseRetrieveParams = ResponseRetrieveParams.none(),
139+
): StreamResponse<ResponseStreamEvent> =
140+
retrieveStreaming(responseId, params, RequestOptions.none())
141+
142+
/** @see [retrieveStreaming] */
143+
@MustBeClosed
144+
fun retrieveStreaming(
145+
params: ResponseRetrieveParams,
146+
requestOptions: RequestOptions = RequestOptions.none(),
147+
): StreamResponse<ResponseStreamEvent>
148+
149+
/** @see [retrieveStreaming] */
150+
@MustBeClosed
151+
fun retrieveStreaming(params: ResponseRetrieveParams): StreamResponse<ResponseStreamEvent> =
152+
retrieveStreaming(params, RequestOptions.none())
153+
154+
/** @see [retrieveStreaming] */
155+
@MustBeClosed
156+
fun retrieveStreaming(
157+
responseId: String,
158+
requestOptions: RequestOptions,
159+
): StreamResponse<ResponseStreamEvent> =
160+
retrieveStreaming(responseId, ResponseRetrieveParams.none(), requestOptions)
161+
120162
/** Deletes a model response with the given ID. */
121163
fun delete(responseId: String) = delete(responseId, ResponseDeleteParams.none())
122164

@@ -250,6 +292,55 @@ interface ResponseService {
250292
): HttpResponseFor<Response> =
251293
retrieve(responseId, ResponseRetrieveParams.none(), requestOptions)
252294

295+
/**
296+
* Returns a raw HTTP response for `get /responses/{response_id}`, but is otherwise the same
297+
* as [ResponseService.retrieveStreaming].
298+
*/
299+
@MustBeClosed
300+
fun retrieveStreaming(
301+
responseId: String
302+
): HttpResponseFor<StreamResponse<ResponseStreamEvent>> =
303+
retrieveStreaming(responseId, ResponseRetrieveParams.none())
304+
305+
/** @see [retrieveStreaming] */
306+
@MustBeClosed
307+
fun retrieveStreaming(
308+
responseId: String,
309+
params: ResponseRetrieveParams = ResponseRetrieveParams.none(),
310+
requestOptions: RequestOptions = RequestOptions.none(),
311+
): HttpResponseFor<StreamResponse<ResponseStreamEvent>> =
312+
retrieveStreaming(params.toBuilder().responseId(responseId).build(), requestOptions)
313+
314+
/** @see [retrieveStreaming] */
315+
@MustBeClosed
316+
fun retrieveStreaming(
317+
responseId: String,
318+
params: ResponseRetrieveParams = ResponseRetrieveParams.none(),
319+
): HttpResponseFor<StreamResponse<ResponseStreamEvent>> =
320+
retrieveStreaming(responseId, params, RequestOptions.none())
321+
322+
/** @see [retrieveStreaming] */
323+
@MustBeClosed
324+
fun retrieveStreaming(
325+
params: ResponseRetrieveParams,
326+
requestOptions: RequestOptions = RequestOptions.none(),
327+
): HttpResponseFor<StreamResponse<ResponseStreamEvent>>
328+
329+
/** @see [retrieveStreaming] */
330+
@MustBeClosed
331+
fun retrieveStreaming(
332+
params: ResponseRetrieveParams
333+
): HttpResponseFor<StreamResponse<ResponseStreamEvent>> =
334+
retrieveStreaming(params, RequestOptions.none())
335+
336+
/** @see [retrieveStreaming] */
337+
@MustBeClosed
338+
fun retrieveStreaming(
339+
responseId: String,
340+
requestOptions: RequestOptions,
341+
): HttpResponseFor<StreamResponse<ResponseStreamEvent>> =
342+
retrieveStreaming(responseId, ResponseRetrieveParams.none(), requestOptions)
343+
253344
/**
254345
* Returns a raw HTTP response for `delete /responses/{response_id}`, but is otherwise the
255346
* same as [ResponseService.delete].

0 commit comments

Comments
 (0)