@@ -38,19 +38,19 @@ const MODE_TO_PARAMS = {
38
38
[ MODE . JSON_SCHEMA ] : OAIBuildMessageBasedParams
39
39
}
40
40
41
- type ResponseModel < T > = {
41
+ type ResponseModel < T extends z . ZodTypeAny > = {
42
42
schema : T
43
- name ? : string
43
+ name : string
44
44
description ?: string
45
45
}
46
46
47
- type InstructorChatCompletionParams < T > = {
47
+ type InstructorChatCompletionParams < T extends z . ZodTypeAny > = {
48
48
response_model : ResponseModel < T >
49
49
max_retries ?: number
50
50
}
51
51
52
- type ChatCompletionCreateParamsWithModel < T extends z . ZodTypeAny > = ChatCompletionCreateParams &
53
- InstructorChatCompletionParams < T >
52
+ export type ChatCompletionCreateParamsWithModel < T extends z . ZodTypeAny > =
53
+ InstructorChatCompletionParams < T > & ChatCompletionCreateParams
54
54
55
55
type ReturnTypeBasedOnParams < P > = P extends ChatCompletionCreateParamsWithModel < infer T >
56
56
? P extends { stream : true }
@@ -96,17 +96,17 @@ class Instructor {
96
96
* @param {ChatCompletionCreateParamsWithModel } params - The parameters for chat completion.
97
97
* @returns {Promise<any> } The response from the chat completion.
98
98
*/
99
- chatCompletion = async < T extends z . ZodTypeAny > ( {
99
+ chatCompletion = < T extends z . ZodTypeAny > ( {
100
100
max_retries = 3 ,
101
101
...params
102
- } : ChatCompletionCreateParamsWithModel < T > ) : Promise <
103
- Promise < z . infer < T > > | AsyncGenerator < z . infer < T > , void , unknown >
102
+ } : ChatCompletionCreateParamsWithModel < T > ) : ReturnTypeBasedOnParams <
103
+ ChatCompletionCreateParamsWithModel < T >
104
104
> => {
105
105
let attempts = 0
106
106
let validationIssues = ""
107
107
let lastMessage : ChatCompletionMessageParam | null = null
108
108
109
- const completionParams = this . buildChatCompletionParams ( { ... params } )
109
+ const completionParams = this . buildChatCompletionParams ( params )
110
110
111
111
const makeCompletionCall = async ( ) => {
112
112
let resolvedParams = completionParams
@@ -133,7 +133,7 @@ class Instructor {
133
133
134
134
if ( "choices" in completion ) {
135
135
const parsedCompletion = parser ( completion )
136
- return JSON . parse ( parsedCompletion )
136
+ return JSON . parse ( parsedCompletion ) as z . infer < T >
137
137
} else {
138
138
return OAIStream ( { res : completion , parser } )
139
139
}
@@ -182,7 +182,7 @@ class Instructor {
182
182
}
183
183
}
184
184
185
- return await makeCompletionCallWithRetries ( )
185
+ return makeCompletionCallWithRetries ( )
186
186
}
187
187
188
188
private async partialStreamResponse ( { stream, schema } ) {
@@ -243,10 +243,9 @@ class Instructor {
243
243
* @returns {ChatCompletionCreateParams } The chat completion parameters.
244
244
*/
245
245
private buildChatCompletionParams = < T extends z . ZodTypeAny > ( {
246
- response_model,
246
+ response_model : { name , schema , description } ,
247
247
...params
248
248
} : ChatCompletionCreateParamsWithModel < T > ) : ChatCompletionCreateParams => {
249
- const { schema, name = "response_model" , description } = response_model
250
249
const safeName = name . replace ( / [ ^ a - z A - Z 0 - 9 ] / g, "_" ) . replace ( / \s / g, "_" )
251
250
252
251
const { definitions } = zodToJsonSchema ( schema , {
@@ -275,7 +274,7 @@ class Instructor {
275
274
}
276
275
}
277
276
278
- chatCompletionWithoutModel = async (
277
+ chatCompletionWithoutModel = (
279
278
params : ChatCompletionCreateParams
280
279
) : Promise <
281
280
Stream < OpenAI . Chat . Completions . ChatCompletionChunk > | OpenAI . Chat . Completions . ChatCompletion
@@ -286,18 +285,18 @@ class Instructor {
286
285
public chat = {
287
286
completions : {
288
287
create : <
289
- P extends ChatCompletionCreateParamsWithModel < z . ZodTypeAny > | ChatCompletionCreateParams
288
+ T extends z . ZodTypeAny | undefined ,
289
+ P extends T extends z . ZodTypeAny
290
+ ? ChatCompletionCreateParamsWithModel < T >
291
+ : ChatCompletionCreateParams & { response_model : never }
290
292
> (
291
293
params : P
292
294
) : ReturnTypeBasedOnParams < P > => {
293
- if ( "response_model" in params && params . response_model ?. schema !== undefined ) {
294
- return this . chatCompletion (
295
- params as ChatCompletionCreateParamsWithModel < z . ZodTypeAny >
296
- ) as ReturnTypeBasedOnParams < P >
295
+ if ( "response_model" in params ) {
296
+ console . log ( params . response_model . name )
297
+ return this . chatCompletion ( params ) as ReturnTypeBasedOnParams < P >
297
298
} else {
298
- return this . chatCompletionWithoutModel (
299
- params as ChatCompletionCreateParams
300
- ) as ReturnTypeBasedOnParams < P >
299
+ return this . chatCompletionWithoutModel ( params ) as ReturnTypeBasedOnParams < P >
301
300
}
302
301
}
303
302
}
0 commit comments