diff --git a/.stats.yml b/.stats.yml
index 9797002bf..49956282b 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,2 +1,2 @@
configured_endpoints: 64
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai-97c9a5f089049dc9eb5cee9475558049003e37e42202cab39e59d75e08b4c613.yml
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai-edb5af3ade0cd27cf366b0654b90c7a81c43c433e11fc3f6e621e2c779de10d4.yml
diff --git a/api.md b/api.md
index c1ac8cfbd..18cdd9e62 100644
--- a/api.md
+++ b/api.md
@@ -41,6 +41,7 @@ Types:
- ChatCompletionMessageToolCall
- ChatCompletionNamedToolChoice
- ChatCompletionRole
+- ChatCompletionStreamOptions
- ChatCompletionSystemMessageParam
- ChatCompletionTokenLogprob
- ChatCompletionTool
diff --git a/src/index.ts b/src/index.ts
index 438a46779..b146a7bab 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -251,6 +251,7 @@ export namespace OpenAI {
export import ChatCompletionMessageToolCall = API.ChatCompletionMessageToolCall;
export import ChatCompletionNamedToolChoice = API.ChatCompletionNamedToolChoice;
export import ChatCompletionRole = API.ChatCompletionRole;
+ export import ChatCompletionStreamOptions = API.ChatCompletionStreamOptions;
export import ChatCompletionSystemMessageParam = API.ChatCompletionSystemMessageParam;
export import ChatCompletionTokenLogprob = API.ChatCompletionTokenLogprob;
export import ChatCompletionTool = API.ChatCompletionTool;
diff --git a/src/resources/chat/chat.ts b/src/resources/chat/chat.ts
index fa681ed64..ff271e5b4 100644
--- a/src/resources/chat/chat.ts
+++ b/src/resources/chat/chat.ts
@@ -45,6 +45,7 @@ export namespace Chat {
export import ChatCompletionMessageToolCall = CompletionsAPI.ChatCompletionMessageToolCall;
export import ChatCompletionNamedToolChoice = CompletionsAPI.ChatCompletionNamedToolChoice;
export import ChatCompletionRole = CompletionsAPI.ChatCompletionRole;
+ export import ChatCompletionStreamOptions = CompletionsAPI.ChatCompletionStreamOptions;
export import ChatCompletionSystemMessageParam = CompletionsAPI.ChatCompletionSystemMessageParam;
export import ChatCompletionTokenLogprob = CompletionsAPI.ChatCompletionTokenLogprob;
export import ChatCompletionTool = CompletionsAPI.ChatCompletionTool;
diff --git a/src/resources/chat/completions.ts b/src/resources/chat/completions.ts
index 467b33619..1098499b9 100644
--- a/src/resources/chat/completions.ts
+++ b/src/resources/chat/completions.ts
@@ -183,8 +183,9 @@ export interface ChatCompletionChunk {
id: string;
/**
- * A list of chat completion choices. Can be more than one if `n` is greater
- * than 1.
+ * A list of chat completion choices. Can contain more than one elements if `n` is
+ * greater than 1. Can also be empty for the last chunk if you set
+ * `stream_options: {"include_usage": true}`.
*/
choices: Array;
@@ -210,6 +211,14 @@ export interface ChatCompletionChunk {
* backend changes have been made that might impact determinism.
*/
system_fingerprint?: string;
+
+ /**
+ * An optional field that will only be present when you set
+ * `stream_options: {"include_usage": true}` in your request. When present, it
+ * contains a null value except for the last chunk which contains the token usage
+ * statistics for the entire request.
+ */
+ usage?: CompletionsAPI.CompletionUsage;
}
export namespace ChatCompletionChunk {
@@ -517,6 +526,19 @@ export namespace ChatCompletionNamedToolChoice {
*/
export type ChatCompletionRole = 'system' | 'user' | 'assistant' | 'tool' | 'function';
+/**
+ * Options for streaming response. Only set this when you set `stream: true`.
+ */
+export interface ChatCompletionStreamOptions {
+ /**
+ * If set, an additional chunk will be streamed before the `data: [DONE]` message.
+ * The `usage` field on this chunk shows the token usage statistics for the entire
+ * request, and the `choices` field will always be an empty array. All other chunks
+ * will also include a `usage` field, but with a null value.
+ */
+ include_usage?: boolean;
+}
+
export interface ChatCompletionSystemMessageParam {
/**
* The contents of the system message.
@@ -786,6 +808,11 @@ export interface ChatCompletionCreateParamsBase {
*/
stream?: boolean | null;
+ /**
+ * Options for streaming response. Only set this when you set `stream: true`.
+ */
+ stream_options?: ChatCompletionStreamOptions | null;
+
/**
* What sampling temperature to use, between 0 and 2. Higher values like 0.8 will
* make the output more random, while lower values like 0.2 will make it more
@@ -949,6 +976,7 @@ export namespace Completions {
export import ChatCompletionMessageToolCall = ChatCompletionsAPI.ChatCompletionMessageToolCall;
export import ChatCompletionNamedToolChoice = ChatCompletionsAPI.ChatCompletionNamedToolChoice;
export import ChatCompletionRole = ChatCompletionsAPI.ChatCompletionRole;
+ export import ChatCompletionStreamOptions = ChatCompletionsAPI.ChatCompletionStreamOptions;
export import ChatCompletionSystemMessageParam = ChatCompletionsAPI.ChatCompletionSystemMessageParam;
export import ChatCompletionTokenLogprob = ChatCompletionsAPI.ChatCompletionTokenLogprob;
export import ChatCompletionTool = ChatCompletionsAPI.ChatCompletionTool;
diff --git a/src/resources/chat/index.ts b/src/resources/chat/index.ts
index ef72bbbc9..2761385c2 100644
--- a/src/resources/chat/index.ts
+++ b/src/resources/chat/index.ts
@@ -14,6 +14,7 @@ export {
ChatCompletionMessageToolCall,
ChatCompletionNamedToolChoice,
ChatCompletionRole,
+ ChatCompletionStreamOptions,
ChatCompletionSystemMessageParam,
ChatCompletionTokenLogprob,
ChatCompletionTool,
diff --git a/src/resources/completions.ts b/src/resources/completions.ts
index b64c3a166..c37c6d802 100644
--- a/src/resources/completions.ts
+++ b/src/resources/completions.ts
@@ -4,6 +4,7 @@ import * as Core from 'openai/core';
import { APIPromise } from 'openai/core';
import { APIResource } from 'openai/resource';
import * as CompletionsAPI from 'openai/resources/completions';
+import * as ChatCompletionsAPI from 'openai/resources/chat/completions';
import { Stream } from 'openai/streaming';
export class Completions extends APIResource {
@@ -251,6 +252,11 @@ export interface CompletionCreateParamsBase {
*/
stream?: boolean | null;
+ /**
+ * Options for streaming response. Only set this when you set `stream: true`.
+ */
+ stream_options?: ChatCompletionsAPI.ChatCompletionStreamOptions | null;
+
/**
* The suffix that comes after a completion of inserted text.
*
diff --git a/tests/api-resources/chat/completions.test.ts b/tests/api-resources/chat/completions.test.ts
index bd398b91d..21277e1d6 100644
--- a/tests/api-resources/chat/completions.test.ts
+++ b/tests/api-resources/chat/completions.test.ts
@@ -39,6 +39,7 @@ describe('resource completions', () => {
seed: -9223372036854776000,
stop: 'string',
stream: false,
+ stream_options: { include_usage: true },
temperature: 1,
tool_choice: 'none',
tools: [
diff --git a/tests/api-resources/completions.test.ts b/tests/api-resources/completions.test.ts
index 2641bf7e3..3f6792447 100644
--- a/tests/api-resources/completions.test.ts
+++ b/tests/api-resources/completions.test.ts
@@ -35,6 +35,7 @@ describe('resource completions', () => {
seed: -9223372036854776000,
stop: '\n',
stream: false,
+ stream_options: { include_usage: true },
suffix: 'test.',
temperature: 1,
top_p: 1,