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.
Files changed (165) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +9 -2
  3. package/client.d.mts +1 -0
  4. package/client.d.mts.map +1 -1
  5. package/client.d.ts +1 -0
  6. package/client.d.ts.map +1 -1
  7. package/client.js +11 -5
  8. package/client.js.map +1 -1
  9. package/client.mjs +11 -5
  10. package/client.mjs.map +1 -1
  11. package/core/streaming.d.mts.map +1 -1
  12. package/core/streaming.d.ts.map +1 -1
  13. package/core/streaming.js +38 -6
  14. package/core/streaming.js.map +1 -1
  15. package/core/streaming.mjs +38 -6
  16. package/core/streaming.mjs.map +1 -1
  17. package/core/uploads.d.mts +1 -1
  18. package/core/uploads.d.mts.map +1 -1
  19. package/core/uploads.d.ts +1 -1
  20. package/core/uploads.d.ts.map +1 -1
  21. package/core/uploads.js +3 -1
  22. package/core/uploads.js.map +1 -1
  23. package/core/uploads.mjs +1 -0
  24. package/core/uploads.mjs.map +1 -1
  25. package/helpers/zod.d.mts +20 -7
  26. package/helpers/zod.d.mts.map +1 -1
  27. package/helpers/zod.d.ts +20 -7
  28. package/helpers/zod.d.ts.map +1 -1
  29. package/helpers/zod.js +24 -12
  30. package/helpers/zod.js.map +1 -1
  31. package/helpers/zod.mjs +24 -12
  32. package/helpers/zod.mjs.map +1 -1
  33. package/index.d.mts +1 -1
  34. package/index.d.mts.map +1 -1
  35. package/index.d.ts +1 -1
  36. package/index.d.ts.map +1 -1
  37. package/index.js +2 -1
  38. package/index.js.map +1 -1
  39. package/index.mjs +1 -1
  40. package/index.mjs.map +1 -1
  41. package/internal/uploads.d.mts +26 -1
  42. package/internal/uploads.d.mts.map +1 -1
  43. package/internal/uploads.d.ts +26 -1
  44. package/internal/uploads.d.ts.map +1 -1
  45. package/internal/uploads.js +169 -1
  46. package/internal/uploads.js.map +1 -1
  47. package/internal/uploads.mjs +169 -2
  48. package/internal/uploads.mjs.map +1 -1
  49. package/lib/AbstractChatCompletionRunner.d.mts +3 -3
  50. package/lib/AbstractChatCompletionRunner.d.mts.map +1 -1
  51. package/lib/AbstractChatCompletionRunner.d.ts +3 -3
  52. package/lib/AbstractChatCompletionRunner.d.ts.map +1 -1
  53. package/lib/AbstractChatCompletionRunner.js +4 -3
  54. package/lib/AbstractChatCompletionRunner.js.map +1 -1
  55. package/lib/AbstractChatCompletionRunner.mjs +4 -3
  56. package/lib/AbstractChatCompletionRunner.mjs.map +1 -1
  57. package/lib/AssistantStream.d.mts.map +1 -1
  58. package/lib/AssistantStream.d.ts.map +1 -1
  59. package/lib/AssistantStream.js +3 -2
  60. package/lib/AssistantStream.js.map +1 -1
  61. package/lib/AssistantStream.mjs +3 -2
  62. package/lib/AssistantStream.mjs.map +1 -1
  63. package/lib/ChatCompletionRunner.d.mts +26 -2
  64. package/lib/ChatCompletionRunner.d.mts.map +1 -1
  65. package/lib/ChatCompletionRunner.d.ts +26 -2
  66. package/lib/ChatCompletionRunner.d.ts.map +1 -1
  67. package/lib/ChatCompletionRunner.js.map +1 -1
  68. package/lib/ChatCompletionRunner.mjs.map +1 -1
  69. package/lib/ChatCompletionStream.d.mts +14 -1
  70. package/lib/ChatCompletionStream.d.mts.map +1 -1
  71. package/lib/ChatCompletionStream.d.ts +14 -1
  72. package/lib/ChatCompletionStream.d.ts.map +1 -1
  73. package/lib/ChatCompletionStream.js +68 -12
  74. package/lib/ChatCompletionStream.js.map +1 -1
  75. package/lib/ChatCompletionStream.mjs +67 -12
  76. package/lib/ChatCompletionStream.mjs.map +1 -1
  77. package/lib/ChatCompletionStreamingRunner.d.mts +25 -2
  78. package/lib/ChatCompletionStreamingRunner.d.mts.map +1 -1
  79. package/lib/ChatCompletionStreamingRunner.d.ts +25 -2
  80. package/lib/ChatCompletionStreamingRunner.d.ts.map +1 -1
  81. package/lib/ChatCompletionStreamingRunner.js +77 -0
  82. package/lib/ChatCompletionStreamingRunner.js.map +1 -1
  83. package/lib/ChatCompletionStreamingRunner.mjs +78 -1
  84. package/lib/ChatCompletionStreamingRunner.mjs.map +1 -1
  85. package/lib/EventStream.d.mts +13 -0
  86. package/lib/EventStream.d.mts.map +1 -1
  87. package/lib/EventStream.d.ts +13 -0
  88. package/lib/EventStream.d.ts.map +1 -1
  89. package/lib/EventStream.js +107 -2
  90. package/lib/EventStream.js.map +1 -1
  91. package/lib/EventStream.mjs +107 -2
  92. package/lib/EventStream.mjs.map +1 -1
  93. package/lib/RunnableFunction.d.mts +38 -21
  94. package/lib/RunnableFunction.d.mts.map +1 -1
  95. package/lib/RunnableFunction.d.ts +38 -21
  96. package/lib/RunnableFunction.d.ts.map +1 -1
  97. package/lib/RunnableFunction.js.map +1 -1
  98. package/lib/RunnableFunction.mjs.map +1 -1
  99. package/lib/parser.d.mts +2 -2
  100. package/lib/parser.d.mts.map +1 -1
  101. package/lib/parser.d.ts +2 -2
  102. package/lib/parser.d.ts.map +1 -1
  103. package/lib/parser.js.map +1 -1
  104. package/lib/parser.mjs.map +1 -1
  105. package/lib/responses/ResponseStream.d.mts +6 -1
  106. package/lib/responses/ResponseStream.d.mts.map +1 -1
  107. package/lib/responses/ResponseStream.d.ts +6 -1
  108. package/lib/responses/ResponseStream.d.ts.map +1 -1
  109. package/lib/responses/ResponseStream.js +21 -0
  110. package/lib/responses/ResponseStream.js.map +1 -1
  111. package/lib/responses/ResponseStream.mjs +21 -0
  112. package/lib/responses/ResponseStream.mjs.map +1 -1
  113. package/package.json +1 -1
  114. package/resources/admin/organization/projects/api-keys.d.mts +12 -0
  115. package/resources/admin/organization/projects/api-keys.d.mts.map +1 -1
  116. package/resources/admin/organization/projects/api-keys.d.ts +12 -0
  117. package/resources/admin/organization/projects/api-keys.d.ts.map +1 -1
  118. package/resources/beta/responses/responses.d.mts +3 -2
  119. package/resources/beta/responses/responses.d.mts.map +1 -1
  120. package/resources/beta/responses/responses.d.ts +3 -2
  121. package/resources/beta/responses/responses.d.ts.map +1 -1
  122. package/resources/beta/responses/responses.js.map +1 -1
  123. package/resources/beta/responses/responses.mjs.map +1 -1
  124. package/resources/chat/completions/completions.d.mts +15 -6
  125. package/resources/chat/completions/completions.d.mts.map +1 -1
  126. package/resources/chat/completions/completions.d.ts +15 -6
  127. package/resources/chat/completions/completions.d.ts.map +1 -1
  128. package/resources/chat/completions/completions.js.map +1 -1
  129. package/resources/chat/completions/completions.mjs.map +1 -1
  130. package/resources/responses/responses.d.mts +3 -2
  131. package/resources/responses/responses.d.mts.map +1 -1
  132. package/resources/responses/responses.d.ts +3 -2
  133. package/resources/responses/responses.d.ts.map +1 -1
  134. package/resources/responses/responses.js.map +1 -1
  135. package/resources/responses/responses.mjs.map +1 -1
  136. package/resources/webhooks/webhooks.d.mts +2 -54
  137. package/resources/webhooks/webhooks.d.mts.map +1 -1
  138. package/resources/webhooks/webhooks.d.ts +2 -54
  139. package/resources/webhooks/webhooks.d.ts.map +1 -1
  140. package/src/client.ts +13 -5
  141. package/src/core/streaming.ts +36 -8
  142. package/src/core/uploads.ts +6 -1
  143. package/src/helpers/zod.ts +62 -23
  144. package/src/index.ts +1 -1
  145. package/src/internal/uploads.ts +214 -4
  146. package/src/lib/AbstractChatCompletionRunner.ts +17 -9
  147. package/src/lib/AssistantStream.ts +3 -2
  148. package/src/lib/ChatCompletionRunner.ts +46 -6
  149. package/src/lib/ChatCompletionStream.ts +108 -13
  150. package/src/lib/ChatCompletionStreamingRunner.ts +144 -7
  151. package/src/lib/EventStream.ts +114 -4
  152. package/src/lib/RunnableFunction.ts +60 -31
  153. package/src/lib/parser.ts +4 -0
  154. package/src/lib/responses/ResponseStream.ts +29 -1
  155. package/src/resources/admin/organization/projects/api-keys.ts +15 -1
  156. package/src/resources/beta/responses/responses.ts +3 -2
  157. package/src/resources/chat/completions/completions.ts +66 -9
  158. package/src/resources/responses/responses.ts +3 -2
  159. package/src/resources/webhooks/api.md +0 -1
  160. package/src/resources/webhooks/webhooks.ts +1 -65
  161. package/src/version.ts +1 -1
  162. package/version.d.mts +1 -1
  163. package/version.d.ts +1 -1
  164. package/version.js +1 -1
  165. 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(zodObject) ? zodV4ToJsonSchema(zodObject) : zodV3ToJsonSchema(zodObject, { name }),
95
+ schema: isZodV4(zodSchema) ? zodV4ToJsonSchema(zodSchema) : zodV3ToJsonSchema(zodSchema, { name }),
87
96
  },
88
- }, (content) => zodObject.parse(JSON.parse(content)));
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(zodObject) ? zodV4ToJsonSchema(zodObject) : zodV3ToJsonSchema(zodObject, { name }),
97
- }, (content) => zodObject.parse(JSON.parse(content)));
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(options.parameters) ?
111
- zodV4ToJsonSchema(options.parameters)
112
- : zodV3ToJsonSchema(options.parameters, { name: options.name }),
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.parse(JSON.parse(args)),
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(options.parameters) ?
126
- zodV4ToJsonSchema(options.parameters)
127
- : zodV3ToJsonSchema(options.parameters, { name: options.name }),
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.parse(JSON.parse(args)),
144
+ parser: (args) => parseZodObject(options.parameters, args),
133
145
  });
134
146
  }
135
147
  //# sourceMappingURL=zod.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"zod.js","sourceRoot":"","sources":["../src/helpers/zod.ts"],"names":[],"mappings":"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"}
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(zodObject) ? zodV4ToJsonSchema(zodObject) : zodV3ToJsonSchema(zodObject, { name }),
88
+ schema: isZodV4(zodSchema) ? zodV4ToJsonSchema(zodSchema) : zodV3ToJsonSchema(zodSchema, { name }),
80
89
  },
81
- }, (content) => zodObject.parse(JSON.parse(content)));
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(zodObject) ? zodV4ToJsonSchema(zodObject) : zodV3ToJsonSchema(zodObject, { name }),
90
- }, (content) => zodObject.parse(JSON.parse(content)));
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(options.parameters) ?
104
- zodV4ToJsonSchema(options.parameters)
105
- : zodV3ToJsonSchema(options.parameters, { name: options.name }),
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.parse(JSON.parse(args)),
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(options.parameters) ?
119
- zodV4ToJsonSchema(options.parameters)
120
- : zodV3ToJsonSchema(options.parameters, { name: options.name }),
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.parse(JSON.parse(args)),
137
+ parser: (args) => parseZodObject(options.parameters, args),
126
138
  });
127
139
  }
128
140
  //# sourceMappingURL=zod.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"zod.mjs","sourceRoot":"","sources":["../src/helpers/zod.ts"],"names":[],"mappings":"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"}
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;AACzD,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"}
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;AACzD,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"}
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,6CAAyD;AAA/B,iGAAA,MAAM,OAAA;AAChC,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"}
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;AACzD,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"}
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"}
@@ -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;AAG1F,UAAU,OAAQ,SAAQ,IAAI;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,eAAO,MAAM,gBAAgB,YAY5B,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAC;AAElE;;;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,CAIxB,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,CAExB,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"}
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"}
@@ -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;AAG1F,UAAU,OAAQ,SAAQ,IAAI;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,eAAO,MAAM,gBAAgB,YAY5B,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAC;AAElE;;;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,CAIxB,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,CAExB,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"}
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"}
@@ -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 || (0, exports.isAsyncIterable)(value) || isNamedBlob(value));
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;