@@ -332,79 +332,90 @@ export async function generate<
332332 const resolvedOptions : GenerateOptions < O , CustomOptions > = {
333333 ...( await Promise . resolve ( options ) ) ,
334334 } ;
335- const resolvedModel = await resolveModel ( registry , resolvedOptions . model ) ;
335+ const resolvedFormat = await resolveFormat ( registry , resolvedOptions . output ) ;
336+
337+ const params = await toGenerateActionOptions ( registry , resolvedOptions ) ;
336338
337339 const tools = await toolsToActionRefs ( registry , resolvedOptions . tools ) ;
340+ return await runWithStreamingCallback (
341+ registry ,
342+ stripNoop ( resolvedOptions . onChunk ?? resolvedOptions . streamingCallback ) ,
343+ async ( ) => {
344+ const response = await runWithContext (
345+ registry ,
346+ resolvedOptions . context ,
347+ ( ) =>
348+ generateHelper ( registry , {
349+ rawRequest : params ,
350+ middleware : resolvedOptions . use ,
351+ } )
352+ ) ;
353+ const request = await toGenerateRequest ( registry , {
354+ ...resolvedOptions ,
355+ tools,
356+ } ) ;
357+ return new GenerateResponse < O > ( response , {
358+ request : response . request ?? request ,
359+ parser : resolvedFormat ?. handler ( request . output ?. schema ) . parseMessage ,
360+ } ) ;
361+ }
362+ ) ;
363+ }
338364
339- const messages : MessageData [ ] = messagesFromOptions ( resolvedOptions ) ;
365+ export async function toGenerateActionOptions <
366+ O extends z . ZodTypeAny = z . ZodTypeAny ,
367+ CustomOptions extends z . ZodTypeAny = typeof GenerationCommonConfigSchema ,
368+ > (
369+ registry : Registry ,
370+ options : GenerateOptions < O , CustomOptions >
371+ ) : Promise < GenerateActionOptions > {
372+ const resolvedModel = await resolveModel ( registry , options . model ) ;
373+ const tools = await toolsToActionRefs ( registry , options . tools ) ;
374+ const messages : MessageData [ ] = messagesFromOptions ( options ) ;
340375
341376 const resolvedSchema = toJsonSchema ( {
342- schema : resolvedOptions . output ?. schema ,
343- jsonSchema : resolvedOptions . output ?. jsonSchema ,
377+ schema : options . output ?. schema ,
378+ jsonSchema : options . output ?. jsonSchema ,
344379 } ) ;
345380
346381 // If is schema is set but format is not explicitly set, default to `json` format.
347382 if (
348- ( resolvedOptions . output ?. schema || resolvedOptions . output ?. jsonSchema ) &&
349- ! resolvedOptions . output ?. format
383+ ( options . output ?. schema || options . output ?. jsonSchema ) &&
384+ ! options . output ?. format
350385 ) {
351- resolvedOptions . output . format = 'json' ;
386+ options . output . format = 'json' ;
352387 }
353- const resolvedFormat = await resolveFormat ( registry , resolvedOptions . output ) ;
354388
355389 const params : GenerateActionOptions = {
356390 model : resolvedModel . modelAction . __action . name ,
357- docs : resolvedOptions . docs ,
391+ docs : options . docs ,
358392 messages : messages ,
359393 tools,
360- toolChoice : resolvedOptions . toolChoice ,
394+ toolChoice : options . toolChoice ,
361395 config : {
362396 version : resolvedModel . version ,
363397 ...stripUndefinedOptions ( resolvedModel . config ) ,
364- ...stripUndefinedOptions ( resolvedOptions . config ) ,
398+ ...stripUndefinedOptions ( options . config ) ,
365399 } ,
366- output : resolvedOptions . output && {
367- ...resolvedOptions . output ,
368- format : resolvedOptions . output . format ,
400+ output : options . output && {
401+ ...options . output ,
402+ format : options . output . format ,
369403 jsonSchema : resolvedSchema ,
370404 } ,
371405 // coerce reply and restart into arrays for the action schema
372- resume : resolvedOptions . resume && {
373- respond : [ resolvedOptions . resume . respond || [ ] ] . flat ( ) ,
374- restart : [ resolvedOptions . resume . restart || [ ] ] . flat ( ) ,
375- metadata : resolvedOptions . resume . metadata ,
406+ resume : options . resume && {
407+ respond : [ options . resume . respond || [ ] ] . flat ( ) ,
408+ restart : [ options . resume . restart || [ ] ] . flat ( ) ,
409+ metadata : options . resume . metadata ,
376410 } ,
377- returnToolRequests : resolvedOptions . returnToolRequests ,
378- maxTurns : resolvedOptions . maxTurns ,
411+ returnToolRequests : options . returnToolRequests ,
412+ maxTurns : options . maxTurns ,
379413 } ;
380414 // if config is empty and it was not explicitly passed in, we delete it, don't want {}
381- if ( Object . keys ( params . config ) . length === 0 && ! resolvedOptions . config ) {
415+ if ( Object . keys ( params . config ) . length === 0 && ! options . config ) {
382416 delete params . config ;
383417 }
384-
385- return await runWithStreamingCallback (
386- registry ,
387- stripNoop ( resolvedOptions . onChunk ?? resolvedOptions . streamingCallback ) ,
388- async ( ) => {
389- const response = await runWithContext (
390- registry ,
391- resolvedOptions . context ,
392- ( ) =>
393- generateHelper ( registry , {
394- rawRequest : params ,
395- middleware : resolvedOptions . use ,
396- } )
397- ) ;
398- const request = await toGenerateRequest ( registry , {
399- ...resolvedOptions ,
400- tools,
401- } ) ;
402- return new GenerateResponse < O > ( response , {
403- request : response . request ?? request ,
404- parser : resolvedFormat ?. handler ( request . output ?. schema ) . parseMessage ,
405- } ) ;
406- }
407- ) ;
418+ return params ;
408419}
409420
410421/**
0 commit comments