openai 6.46.0 → 6.47.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/README.md +9 -2
- package/client.d.mts +1 -0
- package/client.d.mts.map +1 -1
- package/client.d.ts +1 -0
- package/client.d.ts.map +1 -1
- package/client.js +11 -5
- package/client.js.map +1 -1
- package/client.mjs +11 -5
- package/client.mjs.map +1 -1
- package/core/streaming.d.mts.map +1 -1
- package/core/streaming.d.ts.map +1 -1
- package/core/streaming.js +38 -6
- package/core/streaming.js.map +1 -1
- package/core/streaming.mjs +38 -6
- package/core/streaming.mjs.map +1 -1
- package/core/uploads.d.mts +1 -1
- package/core/uploads.d.mts.map +1 -1
- package/core/uploads.d.ts +1 -1
- package/core/uploads.d.ts.map +1 -1
- package/core/uploads.js +3 -1
- package/core/uploads.js.map +1 -1
- package/core/uploads.mjs +1 -0
- package/core/uploads.mjs.map +1 -1
- package/helpers/zod.d.mts +20 -7
- package/helpers/zod.d.mts.map +1 -1
- package/helpers/zod.d.ts +20 -7
- package/helpers/zod.d.ts.map +1 -1
- package/helpers/zod.js +24 -12
- package/helpers/zod.js.map +1 -1
- package/helpers/zod.mjs +24 -12
- package/helpers/zod.mjs.map +1 -1
- package/index.d.mts +1 -1
- package/index.d.mts.map +1 -1
- package/index.d.ts +1 -1
- package/index.d.ts.map +1 -1
- package/index.js +2 -1
- package/index.js.map +1 -1
- package/index.mjs +1 -1
- package/index.mjs.map +1 -1
- package/internal/uploads.d.mts +26 -1
- package/internal/uploads.d.mts.map +1 -1
- package/internal/uploads.d.ts +26 -1
- package/internal/uploads.d.ts.map +1 -1
- package/internal/uploads.js +169 -1
- package/internal/uploads.js.map +1 -1
- package/internal/uploads.mjs +169 -2
- package/internal/uploads.mjs.map +1 -1
- package/lib/AbstractChatCompletionRunner.d.mts +3 -3
- package/lib/AbstractChatCompletionRunner.d.mts.map +1 -1
- package/lib/AbstractChatCompletionRunner.d.ts +3 -3
- package/lib/AbstractChatCompletionRunner.d.ts.map +1 -1
- package/lib/AbstractChatCompletionRunner.js +4 -3
- package/lib/AbstractChatCompletionRunner.js.map +1 -1
- package/lib/AbstractChatCompletionRunner.mjs +4 -3
- package/lib/AbstractChatCompletionRunner.mjs.map +1 -1
- package/lib/AssistantStream.d.mts.map +1 -1
- package/lib/AssistantStream.d.ts.map +1 -1
- package/lib/AssistantStream.js +3 -2
- package/lib/AssistantStream.js.map +1 -1
- package/lib/AssistantStream.mjs +3 -2
- package/lib/AssistantStream.mjs.map +1 -1
- package/lib/ChatCompletionRunner.d.mts +26 -2
- package/lib/ChatCompletionRunner.d.mts.map +1 -1
- package/lib/ChatCompletionRunner.d.ts +26 -2
- package/lib/ChatCompletionRunner.d.ts.map +1 -1
- package/lib/ChatCompletionRunner.js.map +1 -1
- package/lib/ChatCompletionRunner.mjs.map +1 -1
- package/lib/ChatCompletionStream.d.mts +14 -1
- package/lib/ChatCompletionStream.d.mts.map +1 -1
- package/lib/ChatCompletionStream.d.ts +14 -1
- package/lib/ChatCompletionStream.d.ts.map +1 -1
- package/lib/ChatCompletionStream.js +68 -12
- package/lib/ChatCompletionStream.js.map +1 -1
- package/lib/ChatCompletionStream.mjs +67 -12
- package/lib/ChatCompletionStream.mjs.map +1 -1
- package/lib/ChatCompletionStreamingRunner.d.mts +25 -2
- package/lib/ChatCompletionStreamingRunner.d.mts.map +1 -1
- package/lib/ChatCompletionStreamingRunner.d.ts +25 -2
- package/lib/ChatCompletionStreamingRunner.d.ts.map +1 -1
- package/lib/ChatCompletionStreamingRunner.js +77 -0
- package/lib/ChatCompletionStreamingRunner.js.map +1 -1
- package/lib/ChatCompletionStreamingRunner.mjs +78 -1
- package/lib/ChatCompletionStreamingRunner.mjs.map +1 -1
- package/lib/EventStream.d.mts +13 -0
- package/lib/EventStream.d.mts.map +1 -1
- package/lib/EventStream.d.ts +13 -0
- package/lib/EventStream.d.ts.map +1 -1
- package/lib/EventStream.js +107 -2
- package/lib/EventStream.js.map +1 -1
- package/lib/EventStream.mjs +107 -2
- package/lib/EventStream.mjs.map +1 -1
- package/lib/RunnableFunction.d.mts +38 -21
- package/lib/RunnableFunction.d.mts.map +1 -1
- package/lib/RunnableFunction.d.ts +38 -21
- package/lib/RunnableFunction.d.ts.map +1 -1
- package/lib/RunnableFunction.js.map +1 -1
- package/lib/RunnableFunction.mjs.map +1 -1
- package/lib/parser.d.mts +2 -2
- package/lib/parser.d.mts.map +1 -1
- package/lib/parser.d.ts +2 -2
- package/lib/parser.d.ts.map +1 -1
- package/lib/parser.js.map +1 -1
- package/lib/parser.mjs.map +1 -1
- package/lib/responses/ResponseStream.d.mts +6 -1
- package/lib/responses/ResponseStream.d.mts.map +1 -1
- package/lib/responses/ResponseStream.d.ts +6 -1
- package/lib/responses/ResponseStream.d.ts.map +1 -1
- package/lib/responses/ResponseStream.js +21 -0
- package/lib/responses/ResponseStream.js.map +1 -1
- package/lib/responses/ResponseStream.mjs +21 -0
- package/lib/responses/ResponseStream.mjs.map +1 -1
- package/package.json +1 -1
- package/resources/admin/organization/projects/api-keys.d.mts +12 -0
- package/resources/admin/organization/projects/api-keys.d.mts.map +1 -1
- package/resources/admin/organization/projects/api-keys.d.ts +12 -0
- package/resources/admin/organization/projects/api-keys.d.ts.map +1 -1
- package/resources/beta/responses/responses.d.mts +3 -2
- package/resources/beta/responses/responses.d.mts.map +1 -1
- package/resources/beta/responses/responses.d.ts +3 -2
- package/resources/beta/responses/responses.d.ts.map +1 -1
- package/resources/beta/responses/responses.js.map +1 -1
- package/resources/beta/responses/responses.mjs.map +1 -1
- package/resources/chat/completions/completions.d.mts +15 -6
- package/resources/chat/completions/completions.d.mts.map +1 -1
- package/resources/chat/completions/completions.d.ts +15 -6
- package/resources/chat/completions/completions.d.ts.map +1 -1
- package/resources/chat/completions/completions.js.map +1 -1
- package/resources/chat/completions/completions.mjs.map +1 -1
- package/resources/responses/responses.d.mts +3 -2
- package/resources/responses/responses.d.mts.map +1 -1
- package/resources/responses/responses.d.ts +3 -2
- package/resources/responses/responses.d.ts.map +1 -1
- package/resources/responses/responses.js.map +1 -1
- package/resources/responses/responses.mjs.map +1 -1
- package/resources/webhooks/webhooks.d.mts +2 -54
- package/resources/webhooks/webhooks.d.mts.map +1 -1
- package/resources/webhooks/webhooks.d.ts +2 -54
- package/resources/webhooks/webhooks.d.ts.map +1 -1
- package/src/client.ts +13 -5
- package/src/core/streaming.ts +36 -8
- package/src/core/uploads.ts +6 -1
- package/src/helpers/zod.ts +62 -23
- package/src/index.ts +1 -1
- package/src/internal/uploads.ts +214 -4
- package/src/lib/AbstractChatCompletionRunner.ts +17 -9
- package/src/lib/AssistantStream.ts +3 -2
- package/src/lib/ChatCompletionRunner.ts +46 -6
- package/src/lib/ChatCompletionStream.ts +108 -13
- package/src/lib/ChatCompletionStreamingRunner.ts +144 -7
- package/src/lib/EventStream.ts +114 -4
- package/src/lib/RunnableFunction.ts +60 -31
- package/src/lib/parser.ts +4 -0
- package/src/lib/responses/ResponseStream.ts +29 -1
- package/src/resources/admin/organization/projects/api-keys.ts +15 -1
- package/src/resources/beta/responses/responses.ts +3 -2
- package/src/resources/chat/completions/completions.ts +66 -9
- package/src/resources/responses/responses.ts +3 -2
- package/src/resources/webhooks/api.md +0 -1
- package/src/resources/webhooks/webhooks.ts +1 -65
- package/src/version.ts +1 -1
- package/version.d.mts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.mjs +1 -1
package/helpers/zod.js
CHANGED
|
@@ -39,6 +39,14 @@ function zodV4ToJsonSchema(schema) {
|
|
|
39
39
|
function isZodV4(zodObject) {
|
|
40
40
|
return '_zod' in zodObject;
|
|
41
41
|
}
|
|
42
|
+
function parseZodObject(zodObject, content) {
|
|
43
|
+
const parsed = JSON.parse(content);
|
|
44
|
+
const parser = zodObject.parse;
|
|
45
|
+
if (typeof parser === 'function') {
|
|
46
|
+
return parser.call(zodObject, parsed);
|
|
47
|
+
}
|
|
48
|
+
return z4.parse(zodObject, parsed);
|
|
49
|
+
}
|
|
42
50
|
/**
|
|
43
51
|
* Creates a chat completion `JSONSchema` response format object from
|
|
44
52
|
* the given Zod schema.
|
|
@@ -77,24 +85,26 @@ function isZodV4(zodObject) {
|
|
|
77
85
|
* result in any automatic parsing, you'll have to parse the response yourself.
|
|
78
86
|
*/
|
|
79
87
|
function zodResponseFormat(zodObject, name, props) {
|
|
88
|
+
const zodSchema = zodObject;
|
|
80
89
|
return (0, parser_1.makeParseableResponseFormat)({
|
|
81
90
|
type: 'json_schema',
|
|
82
91
|
json_schema: {
|
|
83
92
|
...props,
|
|
84
93
|
name,
|
|
85
94
|
strict: true,
|
|
86
|
-
schema: isZodV4(
|
|
95
|
+
schema: isZodV4(zodSchema) ? zodV4ToJsonSchema(zodSchema) : zodV3ToJsonSchema(zodSchema, { name }),
|
|
87
96
|
},
|
|
88
|
-
}, (content) => zodObject
|
|
97
|
+
}, (content) => parseZodObject(zodObject, content));
|
|
89
98
|
}
|
|
90
99
|
function zodTextFormat(zodObject, name, props) {
|
|
100
|
+
const zodSchema = zodObject;
|
|
91
101
|
return (0, parser_1.makeParseableTextFormat)({
|
|
92
102
|
type: 'json_schema',
|
|
93
103
|
...props,
|
|
94
104
|
name,
|
|
95
105
|
strict: true,
|
|
96
|
-
schema: isZodV4(
|
|
97
|
-
}, (content) => zodObject
|
|
106
|
+
schema: isZodV4(zodSchema) ? zodV4ToJsonSchema(zodSchema) : zodV3ToJsonSchema(zodSchema, { name }),
|
|
107
|
+
}, (content) => parseZodObject(zodObject, content));
|
|
98
108
|
}
|
|
99
109
|
/**
|
|
100
110
|
* Creates a chat completion `function` tool that can be invoked
|
|
@@ -102,34 +112,36 @@ function zodTextFormat(zodObject, name, props) {
|
|
|
102
112
|
* parsed by `.parse()` / `.stream()`.
|
|
103
113
|
*/
|
|
104
114
|
function zodFunction(options) {
|
|
115
|
+
const zodSchema = options.parameters;
|
|
105
116
|
// @ts-expect-error TODO
|
|
106
117
|
return (0, parser_1.makeParseableTool)({
|
|
107
118
|
type: 'function',
|
|
108
119
|
function: {
|
|
109
120
|
name: options.name,
|
|
110
|
-
parameters: isZodV4(
|
|
111
|
-
zodV4ToJsonSchema(
|
|
112
|
-
: zodV3ToJsonSchema(
|
|
121
|
+
parameters: isZodV4(zodSchema) ?
|
|
122
|
+
zodV4ToJsonSchema(zodSchema)
|
|
123
|
+
: zodV3ToJsonSchema(zodSchema, { name: options.name }),
|
|
113
124
|
strict: true,
|
|
114
125
|
...(options.description ? { description: options.description } : undefined),
|
|
115
126
|
},
|
|
116
127
|
}, {
|
|
117
128
|
callback: options.function,
|
|
118
|
-
parser: (args) => options.parameters
|
|
129
|
+
parser: (args) => parseZodObject(options.parameters, args),
|
|
119
130
|
});
|
|
120
131
|
}
|
|
121
132
|
function zodResponsesFunction(options) {
|
|
133
|
+
const zodSchema = options.parameters;
|
|
122
134
|
return (0, ResponsesParser_1.makeParseableResponseTool)({
|
|
123
135
|
type: 'function',
|
|
124
136
|
name: options.name,
|
|
125
|
-
parameters: isZodV4(
|
|
126
|
-
zodV4ToJsonSchema(
|
|
127
|
-
: zodV3ToJsonSchema(
|
|
137
|
+
parameters: isZodV4(zodSchema) ?
|
|
138
|
+
zodV4ToJsonSchema(zodSchema)
|
|
139
|
+
: zodV3ToJsonSchema(zodSchema, { name: options.name }),
|
|
128
140
|
strict: true,
|
|
129
141
|
...(options.description ? { description: options.description } : undefined),
|
|
130
142
|
}, {
|
|
131
143
|
callback: options.function,
|
|
132
|
-
parser: (args) => options.parameters
|
|
144
|
+
parser: (args) => parseZodObject(options.parameters, args),
|
|
133
145
|
});
|
|
134
146
|
}
|
|
135
147
|
//# sourceMappingURL=zod.js.map
|
package/helpers/zod.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zod.js","sourceRoot":"","sources":["../src/helpers/zod.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"zod.js","sourceRoot":"","sources":["../src/helpers/zod.ts"],"names":[],"mappings":"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"}
|
package/helpers/zod.mjs
CHANGED
|
@@ -32,6 +32,14 @@ function zodV4ToJsonSchema(schema) {
|
|
|
32
32
|
function isZodV4(zodObject) {
|
|
33
33
|
return '_zod' in zodObject;
|
|
34
34
|
}
|
|
35
|
+
function parseZodObject(zodObject, content) {
|
|
36
|
+
const parsed = JSON.parse(content);
|
|
37
|
+
const parser = zodObject.parse;
|
|
38
|
+
if (typeof parser === 'function') {
|
|
39
|
+
return parser.call(zodObject, parsed);
|
|
40
|
+
}
|
|
41
|
+
return z4.parse(zodObject, parsed);
|
|
42
|
+
}
|
|
35
43
|
/**
|
|
36
44
|
* Creates a chat completion `JSONSchema` response format object from
|
|
37
45
|
* the given Zod schema.
|
|
@@ -70,24 +78,26 @@ function isZodV4(zodObject) {
|
|
|
70
78
|
* result in any automatic parsing, you'll have to parse the response yourself.
|
|
71
79
|
*/
|
|
72
80
|
export function zodResponseFormat(zodObject, name, props) {
|
|
81
|
+
const zodSchema = zodObject;
|
|
73
82
|
return makeParseableResponseFormat({
|
|
74
83
|
type: 'json_schema',
|
|
75
84
|
json_schema: {
|
|
76
85
|
...props,
|
|
77
86
|
name,
|
|
78
87
|
strict: true,
|
|
79
|
-
schema: isZodV4(
|
|
88
|
+
schema: isZodV4(zodSchema) ? zodV4ToJsonSchema(zodSchema) : zodV3ToJsonSchema(zodSchema, { name }),
|
|
80
89
|
},
|
|
81
|
-
}, (content) => zodObject
|
|
90
|
+
}, (content) => parseZodObject(zodObject, content));
|
|
82
91
|
}
|
|
83
92
|
export function zodTextFormat(zodObject, name, props) {
|
|
93
|
+
const zodSchema = zodObject;
|
|
84
94
|
return makeParseableTextFormat({
|
|
85
95
|
type: 'json_schema',
|
|
86
96
|
...props,
|
|
87
97
|
name,
|
|
88
98
|
strict: true,
|
|
89
|
-
schema: isZodV4(
|
|
90
|
-
}, (content) => zodObject
|
|
99
|
+
schema: isZodV4(zodSchema) ? zodV4ToJsonSchema(zodSchema) : zodV3ToJsonSchema(zodSchema, { name }),
|
|
100
|
+
}, (content) => parseZodObject(zodObject, content));
|
|
91
101
|
}
|
|
92
102
|
/**
|
|
93
103
|
* Creates a chat completion `function` tool that can be invoked
|
|
@@ -95,34 +105,36 @@ export function zodTextFormat(zodObject, name, props) {
|
|
|
95
105
|
* parsed by `.parse()` / `.stream()`.
|
|
96
106
|
*/
|
|
97
107
|
export function zodFunction(options) {
|
|
108
|
+
const zodSchema = options.parameters;
|
|
98
109
|
// @ts-expect-error TODO
|
|
99
110
|
return makeParseableTool({
|
|
100
111
|
type: 'function',
|
|
101
112
|
function: {
|
|
102
113
|
name: options.name,
|
|
103
|
-
parameters: isZodV4(
|
|
104
|
-
zodV4ToJsonSchema(
|
|
105
|
-
: zodV3ToJsonSchema(
|
|
114
|
+
parameters: isZodV4(zodSchema) ?
|
|
115
|
+
zodV4ToJsonSchema(zodSchema)
|
|
116
|
+
: zodV3ToJsonSchema(zodSchema, { name: options.name }),
|
|
106
117
|
strict: true,
|
|
107
118
|
...(options.description ? { description: options.description } : undefined),
|
|
108
119
|
},
|
|
109
120
|
}, {
|
|
110
121
|
callback: options.function,
|
|
111
|
-
parser: (args) => options.parameters
|
|
122
|
+
parser: (args) => parseZodObject(options.parameters, args),
|
|
112
123
|
});
|
|
113
124
|
}
|
|
114
125
|
export function zodResponsesFunction(options) {
|
|
126
|
+
const zodSchema = options.parameters;
|
|
115
127
|
return makeParseableResponseTool({
|
|
116
128
|
type: 'function',
|
|
117
129
|
name: options.name,
|
|
118
|
-
parameters: isZodV4(
|
|
119
|
-
zodV4ToJsonSchema(
|
|
120
|
-
: zodV3ToJsonSchema(
|
|
130
|
+
parameters: isZodV4(zodSchema) ?
|
|
131
|
+
zodV4ToJsonSchema(zodSchema)
|
|
132
|
+
: zodV3ToJsonSchema(zodSchema, { name: options.name }),
|
|
121
133
|
strict: true,
|
|
122
134
|
...(options.description ? { description: options.description } : undefined),
|
|
123
135
|
}, {
|
|
124
136
|
callback: options.function,
|
|
125
|
-
parser: (args) => options.parameters
|
|
137
|
+
parser: (args) => parseZodObject(options.parameters, args),
|
|
126
138
|
});
|
|
127
139
|
}
|
|
128
140
|
//# sourceMappingURL=zod.mjs.map
|
package/helpers/zod.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zod.mjs","sourceRoot":"","sources":["../src/helpers/zod.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"zod.mjs","sourceRoot":"","sources":["../src/helpers/zod.ts"],"names":[],"mappings":"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"}
|
package/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { OpenAI as default } from "./client.mjs";
|
|
2
|
-
export { type Uploadable, toFile } from "./core/uploads.mjs";
|
|
2
|
+
export { type Uploadable, toFile, toStreamingFile } from "./core/uploads.mjs";
|
|
3
3
|
export { APIPromise } from "./core/api-promise.mjs";
|
|
4
4
|
export { OpenAI, type ClientOptions } from "./client.mjs";
|
|
5
5
|
export { PagePromise } from "./core/pagination.mjs";
|
package/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,qBAAiB;AAE7C,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,EAAE,2BAAuB;
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,qBAAiB;AAE7C,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,2BAAuB;AAC1E,OAAO,EAAE,UAAU,EAAE,+BAA2B;AAChD,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,qBAAiB;AACtD,OAAO,EAAE,WAAW,EAAE,8BAA0B;AAChD,OAAO,EACL,WAAW,EACX,QAAQ,EACR,kBAAkB,EAClB,yBAAyB,EACzB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,EACxB,4BAA4B,EAC5B,UAAU,EACV,yBAAyB,GAC1B,yBAAqB;AAEtB,OAAO,EAAE,WAAW,EAAE,oBAAgB;AACtC,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,sBAAkB"}
|
package/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { OpenAI as default } from "./client.js";
|
|
2
|
-
export { type Uploadable, toFile } from "./core/uploads.js";
|
|
2
|
+
export { type Uploadable, toFile, toStreamingFile } from "./core/uploads.js";
|
|
3
3
|
export { APIPromise } from "./core/api-promise.js";
|
|
4
4
|
export { OpenAI, type ClientOptions } from "./client.js";
|
|
5
5
|
export { PagePromise } from "./core/pagination.js";
|
package/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,oBAAiB;AAE7C,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,EAAE,0BAAuB;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,oBAAiB;AAE7C,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,0BAAuB;AAC1E,OAAO,EAAE,UAAU,EAAE,8BAA2B;AAChD,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,oBAAiB;AACtD,OAAO,EAAE,WAAW,EAAE,6BAA0B;AAChD,OAAO,EACL,WAAW,EACX,QAAQ,EACR,kBAAkB,EAClB,yBAAyB,EACzB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,EACxB,4BAA4B,EAC5B,UAAU,EACV,yBAAyB,GAC1B,wBAAqB;AAEtB,OAAO,EAAE,WAAW,EAAE,mBAAgB;AACtC,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,qBAAkB"}
|
package/index.js
CHANGED
|
@@ -4,11 +4,12 @@ exports = module.exports = function (...args) {
|
|
|
4
4
|
return new exports.default(...args)
|
|
5
5
|
}
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.BedrockOpenAI = exports.AzureOpenAI = exports.SubjectTokenProviderError = exports.OAuthError = exports.InvalidWebhookSignatureError = exports.UnprocessableEntityError = exports.PermissionDeniedError = exports.InternalServerError = exports.AuthenticationError = exports.BadRequestError = exports.RateLimitError = exports.ConflictError = exports.NotFoundError = exports.APIUserAbortError = exports.APIConnectionTimeoutError = exports.APIConnectionError = exports.APIError = exports.OpenAIError = exports.PagePromise = exports.OpenAI = exports.APIPromise = exports.toFile = exports.default = void 0;
|
|
7
|
+
exports.BedrockOpenAI = exports.AzureOpenAI = exports.SubjectTokenProviderError = exports.OAuthError = exports.InvalidWebhookSignatureError = exports.UnprocessableEntityError = exports.PermissionDeniedError = exports.InternalServerError = exports.AuthenticationError = exports.BadRequestError = exports.RateLimitError = exports.ConflictError = exports.NotFoundError = exports.APIUserAbortError = exports.APIConnectionTimeoutError = exports.APIConnectionError = exports.APIError = exports.OpenAIError = exports.PagePromise = exports.OpenAI = exports.APIPromise = exports.toStreamingFile = exports.toFile = exports.default = void 0;
|
|
8
8
|
var client_1 = require("./client.js");
|
|
9
9
|
Object.defineProperty(exports, "default", { enumerable: true, get: function () { return client_1.OpenAI; } });
|
|
10
10
|
var uploads_1 = require("./core/uploads.js");
|
|
11
11
|
Object.defineProperty(exports, "toFile", { enumerable: true, get: function () { return uploads_1.toFile; } });
|
|
12
|
+
Object.defineProperty(exports, "toStreamingFile", { enumerable: true, get: function () { return uploads_1.toStreamingFile; } });
|
|
12
13
|
var api_promise_1 = require("./core/api-promise.js");
|
|
13
14
|
Object.defineProperty(exports, "APIPromise", { enumerable: true, get: function () { return api_promise_1.APIPromise; } });
|
|
14
15
|
var client_2 = require("./client.js");
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;AAEtF,sCAA6C;AAApC,iGAAA,MAAM,OAAW;AAE1B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;AAEtF,sCAA6C;AAApC,iGAAA,MAAM,OAAW;AAE1B,6CAA0E;AAAhD,iGAAA,MAAM,OAAA;AAAE,0GAAA,eAAe,OAAA;AACjD,qDAAgD;AAAvC,yGAAA,UAAU,OAAA;AACnB,sCAAsD;AAA7C,gGAAA,MAAM,OAAA;AACf,mDAAgD;AAAvC,yGAAA,WAAW,OAAA;AACpB,yCAiBsB;AAhBpB,oGAAA,WAAW,OAAA;AACX,iGAAA,QAAQ,OAAA;AACR,2GAAA,kBAAkB,OAAA;AAClB,kHAAA,yBAAyB,OAAA;AACzB,0GAAA,iBAAiB,OAAA;AACjB,sGAAA,aAAa,OAAA;AACb,sGAAA,aAAa,OAAA;AACb,uGAAA,cAAc,OAAA;AACd,wGAAA,eAAe,OAAA;AACf,4GAAA,mBAAmB,OAAA;AACnB,4GAAA,mBAAmB,OAAA;AACnB,8GAAA,qBAAqB,OAAA;AACrB,iHAAA,wBAAwB,OAAA;AACxB,qHAAA,4BAA4B,OAAA;AAC5B,mGAAA,UAAU,OAAA;AACV,kHAAA,yBAAyB,OAAA;AAG3B,oCAAsC;AAA7B,oGAAA,WAAW,OAAA;AACpB,wCAAqE;AAA5D,wGAAA,aAAa,OAAA"}
|
package/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
2
|
export { OpenAI as default } from "./client.mjs";
|
|
3
|
-
export { toFile } from "./core/uploads.mjs";
|
|
3
|
+
export { toFile, toStreamingFile } from "./core/uploads.mjs";
|
|
4
4
|
export { APIPromise } from "./core/api-promise.mjs";
|
|
5
5
|
export { OpenAI } from "./client.mjs";
|
|
6
6
|
export { PagePromise } from "./core/pagination.mjs";
|
package/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAEtF,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,qBAAiB;AAE7C,OAAO,EAAmB,MAAM,EAAE,2BAAuB;
|
|
1
|
+
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAEtF,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,qBAAiB;AAE7C,OAAO,EAAmB,MAAM,EAAE,eAAe,EAAE,2BAAuB;AAC1E,OAAO,EAAE,UAAU,EAAE,+BAA2B;AAChD,OAAO,EAAE,MAAM,EAAsB,qBAAiB;AACtD,OAAO,EAAE,WAAW,EAAE,8BAA0B;AAChD,OAAO,EACL,WAAW,EACX,QAAQ,EACR,kBAAkB,EAClB,yBAAyB,EACzB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,EACxB,4BAA4B,EAC5B,UAAU,EACV,yBAAyB,GAC1B,yBAAqB;AAEtB,OAAO,EAAE,WAAW,EAAE,oBAAgB;AACtC,OAAO,EAAE,aAAa,EAA6B,sBAAkB"}
|
package/internal/uploads.d.mts
CHANGED
|
@@ -1,15 +1,40 @@
|
|
|
1
1
|
import { type RequestOptions } from "./request-options.mjs";
|
|
2
2
|
import type { FilePropertyBag, Fetch } from "./builtin-types.mjs";
|
|
3
3
|
import type { OpenAI } from "../client.mjs";
|
|
4
|
+
import type { ReadableStream } from "./shim-types.mjs";
|
|
4
5
|
export type BlobPart = string | ArrayBuffer | ArrayBufferView | Blob | DataView;
|
|
5
6
|
type FsReadStream = AsyncIterable<Uint8Array> & {
|
|
6
7
|
path: string | {
|
|
7
8
|
toString(): string;
|
|
8
9
|
};
|
|
9
10
|
};
|
|
11
|
+
export type StreamingFileInput = AsyncIterable<BlobPart> | ReadableStream<BlobPart>;
|
|
12
|
+
declare const brand_privateStreamingFile: unique symbol;
|
|
13
|
+
/**
|
|
14
|
+
* A file whose contents are read lazily while the multipart request is sent.
|
|
15
|
+
* Create one with {@link toStreamingFile} when buffering an upload into a `File` is undesirable.
|
|
16
|
+
*/
|
|
17
|
+
export interface StreamingFile {
|
|
18
|
+
/** Brand check, prevent users from creating a StreamingFile without a filename. */
|
|
19
|
+
readonly [brand_privateStreamingFile]: true;
|
|
20
|
+
readonly data: StreamingFileInput;
|
|
21
|
+
readonly name: string;
|
|
22
|
+
readonly type?: string | undefined;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Wrap a stream as an uploadable file without reading it into memory.
|
|
26
|
+
*
|
|
27
|
+
* Unlike {@link toFile}, this helper does not create a web `File`, because the `File` constructor
|
|
28
|
+
* must consume all of its contents up front. The stream is instead encoded lazily as multipart
|
|
29
|
+
* form data when the request is sent.
|
|
30
|
+
*/
|
|
31
|
+
export declare function toStreamingFile(data: StreamingFileInput, name: string, options?: Pick<FilePropertyBag, 'type'>): StreamingFile;
|
|
10
32
|
interface BunFile extends Blob {
|
|
11
33
|
readonly name?: string | undefined;
|
|
12
34
|
}
|
|
35
|
+
type NamedBlob = Blob & {
|
|
36
|
+
readonly name?: string | undefined;
|
|
37
|
+
};
|
|
13
38
|
export declare const checkFileSupport: () => void;
|
|
14
39
|
/**
|
|
15
40
|
* Typically, this is a native "File" class.
|
|
@@ -20,7 +45,7 @@ export declare const checkFileSupport: () => void;
|
|
|
20
45
|
* For convenience, you can also pass a fetch Response, or in Node,
|
|
21
46
|
* the result of fs.createReadStream().
|
|
22
47
|
*/
|
|
23
|
-
export type Uploadable = File | Response | FsReadStream | BunFile;
|
|
48
|
+
export type Uploadable = File | Response | FsReadStream | BunFile | NamedBlob | AsyncIterable<BlobPart> | ReadableStream<BlobPart> | StreamingFile;
|
|
24
49
|
/**
|
|
25
50
|
* Construct a `File` instance. This is used to ensure a helpful error is thrown
|
|
26
51
|
* for environments that don't define a global `File` yet.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploads.d.mts","sourceRoot":"","sources":["../src/internal/uploads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,8BAA0B;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,4BAAwB;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,sBAAkB;AAGxC,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,eAAe,GAAG,IAAI,GAAG,QAAQ,CAAC;AAChF,KAAK,YAAY,GAAG,aAAa,CAAC,UAAU,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,GAAG;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"uploads.d.mts","sourceRoot":"","sources":["../src/internal/uploads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,8BAA0B;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,4BAAwB;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,sBAAkB;AAGxC,OAAO,KAAK,EAAE,cAAc,EAAE,yBAAqB;AAGnD,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,eAAe,GAAG,IAAI,GAAG,QAAQ,CAAC;AAChF,KAAK,YAAY,GAAG,aAAa,CAAC,UAAU,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,GAAG;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAE1F,MAAM,MAAM,kBAAkB,GAAG,aAAa,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;AAEpF,QAAA,MAAM,0BAA0B,eAAuD,CAAC;AAExF;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,mFAAmF;IACnF,QAAQ,CAAC,CAAC,0BAA0B,CAAC,EAAE,IAAI,CAAC;IAC5C,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,kBAAkB,EACxB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GACtC,aAAa,CAWf;AAGD,UAAU,OAAQ,SAAQ,IAAI;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,KAAK,SAAS,GAAG,IAAI,GAAG;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAE/D,eAAO,MAAM,gBAAgB,YAY5B,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,GAClB,IAAI,GACJ,QAAQ,GACR,YAAY,GACZ,OAAO,GACP,SAAS,GACT,aAAa,CAAC,QAAQ,CAAC,GACvB,cAAc,CAAC,QAAQ,CAAC,GACxB,aAAa,CAAC;AAElB;;;GAGG;AACH,wBAAgB,QAAQ,CACtB,QAAQ,EAAE,QAAQ,EAAE,EACpB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,OAAO,CAAC,EAAE,eAAe,GACxB,IAAI,CAGN;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,GAAG,SAAS,CActD;AAED,eAAO,MAAM,eAAe,GAAI,OAAO,GAAG,KAAG,KAAK,IAAI,aAAa,CAAC,GAAG,CAC0B,CAAC;AAElG;;;GAGG;AACH,eAAO,MAAM,gCAAgC,GAC3C,MAAM,cAAc,EACpB,OAAO,MAAM,GAAG,KAAK,KACpB,OAAO,CAAC,cAAc,CAQxB,CAAC;AAEF,KAAK,2BAA2B,GAAG,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAEpF,eAAO,MAAM,2BAA2B,GACtC,MAAM,2BAA2B,EACjC,OAAO,MAAM,GAAG,KAAK,KACpB,OAAO,CAAC,cAAc,CAMxB,CAAC;AAkCF,eAAO,MAAM,UAAU,GAAU,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1D,MAAM,CAAC,GAAG,SAAS,EACnB,OAAO,MAAM,GAAG,KAAK,KACpB,OAAO,CAAC,QAAQ,CASlB,CAAC"}
|
package/internal/uploads.d.ts
CHANGED
|
@@ -1,15 +1,40 @@
|
|
|
1
1
|
import { type RequestOptions } from "./request-options.js";
|
|
2
2
|
import type { FilePropertyBag, Fetch } from "./builtin-types.js";
|
|
3
3
|
import type { OpenAI } from "../client.js";
|
|
4
|
+
import type { ReadableStream } from "./shim-types.js";
|
|
4
5
|
export type BlobPart = string | ArrayBuffer | ArrayBufferView | Blob | DataView;
|
|
5
6
|
type FsReadStream = AsyncIterable<Uint8Array> & {
|
|
6
7
|
path: string | {
|
|
7
8
|
toString(): string;
|
|
8
9
|
};
|
|
9
10
|
};
|
|
11
|
+
export type StreamingFileInput = AsyncIterable<BlobPart> | ReadableStream<BlobPart>;
|
|
12
|
+
declare const brand_privateStreamingFile: unique symbol;
|
|
13
|
+
/**
|
|
14
|
+
* A file whose contents are read lazily while the multipart request is sent.
|
|
15
|
+
* Create one with {@link toStreamingFile} when buffering an upload into a `File` is undesirable.
|
|
16
|
+
*/
|
|
17
|
+
export interface StreamingFile {
|
|
18
|
+
/** Brand check, prevent users from creating a StreamingFile without a filename. */
|
|
19
|
+
readonly [brand_privateStreamingFile]: true;
|
|
20
|
+
readonly data: StreamingFileInput;
|
|
21
|
+
readonly name: string;
|
|
22
|
+
readonly type?: string | undefined;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Wrap a stream as an uploadable file without reading it into memory.
|
|
26
|
+
*
|
|
27
|
+
* Unlike {@link toFile}, this helper does not create a web `File`, because the `File` constructor
|
|
28
|
+
* must consume all of its contents up front. The stream is instead encoded lazily as multipart
|
|
29
|
+
* form data when the request is sent.
|
|
30
|
+
*/
|
|
31
|
+
export declare function toStreamingFile(data: StreamingFileInput, name: string, options?: Pick<FilePropertyBag, 'type'>): StreamingFile;
|
|
10
32
|
interface BunFile extends Blob {
|
|
11
33
|
readonly name?: string | undefined;
|
|
12
34
|
}
|
|
35
|
+
type NamedBlob = Blob & {
|
|
36
|
+
readonly name?: string | undefined;
|
|
37
|
+
};
|
|
13
38
|
export declare const checkFileSupport: () => void;
|
|
14
39
|
/**
|
|
15
40
|
* Typically, this is a native "File" class.
|
|
@@ -20,7 +45,7 @@ export declare const checkFileSupport: () => void;
|
|
|
20
45
|
* For convenience, you can also pass a fetch Response, or in Node,
|
|
21
46
|
* the result of fs.createReadStream().
|
|
22
47
|
*/
|
|
23
|
-
export type Uploadable = File | Response | FsReadStream | BunFile;
|
|
48
|
+
export type Uploadable = File | Response | FsReadStream | BunFile | NamedBlob | AsyncIterable<BlobPart> | ReadableStream<BlobPart> | StreamingFile;
|
|
24
49
|
/**
|
|
25
50
|
* Construct a `File` instance. This is used to ensure a helpful error is thrown
|
|
26
51
|
* for environments that don't define a global `File` yet.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploads.d.ts","sourceRoot":"","sources":["../src/internal/uploads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,6BAA0B;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,2BAAwB;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,qBAAkB;AAGxC,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,eAAe,GAAG,IAAI,GAAG,QAAQ,CAAC;AAChF,KAAK,YAAY,GAAG,aAAa,CAAC,UAAU,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,GAAG;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"uploads.d.ts","sourceRoot":"","sources":["../src/internal/uploads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,6BAA0B;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,2BAAwB;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,qBAAkB;AAGxC,OAAO,KAAK,EAAE,cAAc,EAAE,wBAAqB;AAGnD,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,eAAe,GAAG,IAAI,GAAG,QAAQ,CAAC;AAChF,KAAK,YAAY,GAAG,aAAa,CAAC,UAAU,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,GAAG;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAE1F,MAAM,MAAM,kBAAkB,GAAG,aAAa,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;AAEpF,QAAA,MAAM,0BAA0B,eAAuD,CAAC;AAExF;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,mFAAmF;IACnF,QAAQ,CAAC,CAAC,0BAA0B,CAAC,EAAE,IAAI,CAAC;IAC5C,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,kBAAkB,EACxB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GACtC,aAAa,CAWf;AAGD,UAAU,OAAQ,SAAQ,IAAI;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,KAAK,SAAS,GAAG,IAAI,GAAG;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAE/D,eAAO,MAAM,gBAAgB,YAY5B,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,GAClB,IAAI,GACJ,QAAQ,GACR,YAAY,GACZ,OAAO,GACP,SAAS,GACT,aAAa,CAAC,QAAQ,CAAC,GACvB,cAAc,CAAC,QAAQ,CAAC,GACxB,aAAa,CAAC;AAElB;;;GAGG;AACH,wBAAgB,QAAQ,CACtB,QAAQ,EAAE,QAAQ,EAAE,EACpB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,OAAO,CAAC,EAAE,eAAe,GACxB,IAAI,CAGN;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,GAAG,SAAS,CActD;AAED,eAAO,MAAM,eAAe,GAAI,OAAO,GAAG,KAAG,KAAK,IAAI,aAAa,CAAC,GAAG,CAC0B,CAAC;AAElG;;;GAGG;AACH,eAAO,MAAM,gCAAgC,GAC3C,MAAM,cAAc,EACpB,OAAO,MAAM,GAAG,KAAK,KACpB,OAAO,CAAC,cAAc,CAQxB,CAAC;AAEF,KAAK,2BAA2B,GAAG,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAEpF,eAAO,MAAM,2BAA2B,GACtC,MAAM,2BAA2B,EACjC,OAAO,MAAM,GAAG,KAAK,KACpB,OAAO,CAAC,cAAc,CAMxB,CAAC;AAkCF,eAAO,MAAM,UAAU,GAAU,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1D,MAAM,CAAC,GAAG,SAAS,EACnB,OAAO,MAAM,GAAG,KAAK,KACpB,OAAO,CAAC,QAAQ,CASlB,CAAC"}
|
package/internal/uploads.js
CHANGED
|
@@ -1,9 +1,31 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createForm = exports.multipartFormRequestOptions = exports.maybeMultipartFormRequestOptions = exports.isAsyncIterable = exports.checkFileSupport = void 0;
|
|
4
|
+
exports.toStreamingFile = toStreamingFile;
|
|
4
5
|
exports.makeFile = makeFile;
|
|
5
6
|
exports.getName = getName;
|
|
7
|
+
const headers_1 = require("./headers.js");
|
|
6
8
|
const shims_1 = require("./shims.js");
|
|
9
|
+
const bytes_1 = require("./utils/bytes.js");
|
|
10
|
+
const brand_privateStreamingFile = /* @__PURE__ */ Symbol('brand.privateStreamingFile');
|
|
11
|
+
/**
|
|
12
|
+
* Wrap a stream as an uploadable file without reading it into memory.
|
|
13
|
+
*
|
|
14
|
+
* Unlike {@link toFile}, this helper does not create a web `File`, because the `File` constructor
|
|
15
|
+
* must consume all of its contents up front. The stream is instead encoded lazily as multipart
|
|
16
|
+
* form data when the request is sent.
|
|
17
|
+
*/
|
|
18
|
+
function toStreamingFile(data, name, options) {
|
|
19
|
+
if (!name) {
|
|
20
|
+
throw new TypeError('toStreamingFile requires a non-empty file name');
|
|
21
|
+
}
|
|
22
|
+
return {
|
|
23
|
+
[brand_privateStreamingFile]: true,
|
|
24
|
+
data,
|
|
25
|
+
name,
|
|
26
|
+
...(options?.type ? { type: options.type } : {}),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
7
29
|
const checkFileSupport = () => {
|
|
8
30
|
if (typeof File === 'undefined') {
|
|
9
31
|
const { process } = globalThis;
|
|
@@ -43,10 +65,16 @@ exports.isAsyncIterable = isAsyncIterable;
|
|
|
43
65
|
const maybeMultipartFormRequestOptions = async (opts, fetch) => {
|
|
44
66
|
if (!hasUploadableValue(opts.body))
|
|
45
67
|
return opts;
|
|
68
|
+
if (hasStreamingUploadableValue(opts.body)) {
|
|
69
|
+
return createStreamingFormRequestOptions(opts);
|
|
70
|
+
}
|
|
46
71
|
return { ...opts, body: await (0, exports.createForm)(opts.body, fetch) };
|
|
47
72
|
};
|
|
48
73
|
exports.maybeMultipartFormRequestOptions = maybeMultipartFormRequestOptions;
|
|
49
74
|
const multipartFormRequestOptions = async (opts, fetch) => {
|
|
75
|
+
if (hasStreamingUploadableValue(opts.body)) {
|
|
76
|
+
return createStreamingFormRequestOptions(opts);
|
|
77
|
+
}
|
|
50
78
|
return { ...opts, body: await (0, exports.createForm)(opts.body, fetch) };
|
|
51
79
|
};
|
|
52
80
|
exports.multipartFormRequestOptions = multipartFormRequestOptions;
|
|
@@ -93,9 +121,31 @@ exports.createForm = createForm;
|
|
|
93
121
|
// We check for Blob not File because Bun.File doesn't inherit from File,
|
|
94
122
|
// but they both inherit from Blob and have a `name` property at runtime.
|
|
95
123
|
const isNamedBlob = (value) => value instanceof Blob && 'name' in value;
|
|
124
|
+
const isReadableStream = (value) => typeof value === 'object' &&
|
|
125
|
+
value !== null &&
|
|
126
|
+
'getReader' in value &&
|
|
127
|
+
typeof value.getReader === 'function';
|
|
128
|
+
const isStreamingFile = (value) => typeof value === 'object' && value !== null && brand_privateStreamingFile in value;
|
|
96
129
|
const isUploadable = (value) => typeof value === 'object' &&
|
|
97
130
|
value !== null &&
|
|
98
|
-
(value instanceof Response ||
|
|
131
|
+
(value instanceof Response ||
|
|
132
|
+
(0, exports.isAsyncIterable)(value) ||
|
|
133
|
+
isReadableStream(value) ||
|
|
134
|
+
isStreamingFile(value) ||
|
|
135
|
+
isNamedBlob(value));
|
|
136
|
+
const hasStreamingUploadableValue = (value) => {
|
|
137
|
+
if (isStreamingFile(value) || (0, exports.isAsyncIterable)(value) || isReadableStream(value))
|
|
138
|
+
return true;
|
|
139
|
+
if (Array.isArray(value))
|
|
140
|
+
return value.some(hasStreamingUploadableValue);
|
|
141
|
+
if (value && typeof value === 'object' && !isNamedBlob(value) && !(value instanceof Response)) {
|
|
142
|
+
for (const k in value) {
|
|
143
|
+
if (hasStreamingUploadableValue(value[k]))
|
|
144
|
+
return true;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return false;
|
|
148
|
+
};
|
|
99
149
|
const hasUploadableValue = (value) => {
|
|
100
150
|
if (isUploadable(value))
|
|
101
151
|
return true;
|
|
@@ -109,6 +159,124 @@ const hasUploadableValue = (value) => {
|
|
|
109
159
|
}
|
|
110
160
|
return false;
|
|
111
161
|
};
|
|
162
|
+
const createStreamingFormRequestOptions = (opts) => {
|
|
163
|
+
const boundary = `openai-${Math.random().toString(36).slice(2)}`;
|
|
164
|
+
const body = (0, shims_1.ReadableStreamFrom)(iterateMultipartBody(opts.body, boundary));
|
|
165
|
+
return {
|
|
166
|
+
...opts,
|
|
167
|
+
body,
|
|
168
|
+
headers: (0, headers_1.buildHeaders)([{ 'content-type': `multipart/form-data; boundary=${boundary}` }, opts.headers]),
|
|
169
|
+
};
|
|
170
|
+
};
|
|
171
|
+
async function* iterateMultipartBody(body, boundary) {
|
|
172
|
+
for await (const { key, value } of iterateFormEntries(body)) {
|
|
173
|
+
yield (0, bytes_1.encodeUTF8)(`--${boundary}\r\n`);
|
|
174
|
+
if (isUploadable(value)) {
|
|
175
|
+
const filename = getStreamingFileName(value);
|
|
176
|
+
const type = getStreamingFileType(value);
|
|
177
|
+
yield (0, bytes_1.encodeUTF8)(`Content-Disposition: form-data; name="${escapeHeaderValue(key)}"; filename="${escapeHeaderValue(filename)}"\r\n` + `Content-Type: ${type}\r\n\r\n`);
|
|
178
|
+
yield* iterateBytes(getStreamingFileData(value));
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
yield (0, bytes_1.encodeUTF8)(`Content-Disposition: form-data; name="${escapeHeaderValue(key)}"\r\n\r\n${String(value)}`);
|
|
182
|
+
}
|
|
183
|
+
yield (0, bytes_1.encodeUTF8)('\r\n');
|
|
184
|
+
}
|
|
185
|
+
yield (0, bytes_1.encodeUTF8)(`--${boundary}--\r\n`);
|
|
186
|
+
}
|
|
187
|
+
async function* iterateFormEntries(body) {
|
|
188
|
+
if (!body || typeof body !== 'object')
|
|
189
|
+
return;
|
|
190
|
+
for (const [key, value] of Object.entries(body)) {
|
|
191
|
+
yield* iterateFormValue(key, value);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
async function* iterateFormValue(key, value) {
|
|
195
|
+
if (value === undefined)
|
|
196
|
+
return;
|
|
197
|
+
if (value == null) {
|
|
198
|
+
throw new TypeError(`Received null for "${key}"; to pass null in FormData, you must use the string 'null'`);
|
|
199
|
+
}
|
|
200
|
+
if (typeof value === 'string' ||
|
|
201
|
+
typeof value === 'number' ||
|
|
202
|
+
typeof value === 'boolean' ||
|
|
203
|
+
isUploadable(value)) {
|
|
204
|
+
yield { key, value };
|
|
205
|
+
}
|
|
206
|
+
else if (Array.isArray(value)) {
|
|
207
|
+
for (const entry of value) {
|
|
208
|
+
yield* iterateFormValue(key + '[]', entry);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
else if (typeof value === 'object') {
|
|
212
|
+
for (const [name, prop] of Object.entries(value)) {
|
|
213
|
+
yield* iterateFormValue(`${key}[${name}]`, prop);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
function getStreamingFileName(value) {
|
|
221
|
+
return isStreamingFile(value) ? value.name : getName(value) ?? 'unknown_file';
|
|
222
|
+
}
|
|
223
|
+
function getStreamingFileType(value) {
|
|
224
|
+
if (isStreamingFile(value))
|
|
225
|
+
return value.type || 'application/octet-stream';
|
|
226
|
+
if (isNamedBlob(value) && value.type)
|
|
227
|
+
return value.type;
|
|
228
|
+
if (value instanceof Response)
|
|
229
|
+
return value.headers.get('content-type') || 'application/octet-stream';
|
|
230
|
+
return 'application/octet-stream';
|
|
231
|
+
}
|
|
232
|
+
function getStreamingFileData(value) {
|
|
233
|
+
if (isStreamingFile(value))
|
|
234
|
+
return value.data;
|
|
235
|
+
return value;
|
|
236
|
+
}
|
|
237
|
+
async function* iterateBytes(value) {
|
|
238
|
+
if (typeof value === 'string') {
|
|
239
|
+
yield (0, bytes_1.encodeUTF8)(value);
|
|
240
|
+
}
|
|
241
|
+
else if (ArrayBuffer.isView(value)) {
|
|
242
|
+
yield new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
|
|
243
|
+
}
|
|
244
|
+
else if (value instanceof ArrayBuffer) {
|
|
245
|
+
yield new Uint8Array(value);
|
|
246
|
+
}
|
|
247
|
+
else if (value instanceof Response) {
|
|
248
|
+
if (value.body) {
|
|
249
|
+
yield* iterateBytes(value.body);
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
yield* iterateBytes(await value.blob());
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
else if (value instanceof Blob) {
|
|
256
|
+
if (typeof value.stream === 'function') {
|
|
257
|
+
yield* iterateBytes(value.stream());
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
yield new Uint8Array(await value.arrayBuffer());
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
else if (isReadableStream(value)) {
|
|
264
|
+
for await (const chunk of (0, shims_1.ReadableStreamToAsyncIterable)(value)) {
|
|
265
|
+
yield* iterateBytes(chunk);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
else if ((0, exports.isAsyncIterable)(value)) {
|
|
269
|
+
for await (const chunk of value) {
|
|
270
|
+
yield* iterateBytes(chunk);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
throw new TypeError(`Invalid streaming file chunk: ${String(value)}`);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
function escapeHeaderValue(value) {
|
|
278
|
+
return value.replace(/["\\\r\n]/g, (character) => encodeURIComponent(character));
|
|
279
|
+
}
|
|
112
280
|
const addFormValue = async (form, key, value) => {
|
|
113
281
|
if (value === undefined)
|
|
114
282
|
return;
|