File tree Expand file tree Collapse file tree 2 files changed +50
-0
lines changed Expand file tree Collapse file tree 2 files changed +50
-0
lines changed Original file line number Diff line number Diff line change @@ -67,6 +67,20 @@ export class GenerateResponse<O = unknown> implements ModelResponseData {
6767 const generatedMessage =
6868 response . message || response . candidates ?. [ 0 ] ?. message ;
6969 if ( generatedMessage ) {
70+ if (
71+ options ?. request ?. output ?. contentType ||
72+ options ?. request ?. output ?. format
73+ ) {
74+ generatedMessage . metadata = {
75+ ...generatedMessage . metadata ,
76+ generate : {
77+ output : {
78+ contentType : options ?. request ?. output ?. contentType ,
79+ format : options ?. request ?. output ?. format ,
80+ } ,
81+ } ,
82+ } ;
83+ }
7084 this . message = new Message < O > ( generatedMessage , {
7185 parser : options ?. parser ,
7286 } ) ;
Original file line number Diff line number Diff line change @@ -244,4 +244,40 @@ describe('GenerateResponse', () => {
244244 assert . deepStrictEqual ( response . toolRequests , [ toolCall1 , toolCall2 ] ) ;
245245 } ) ;
246246 } ) ;
247+
248+ it ( 'returns metadata for output conformance' , ( ) => {
249+ const request : GenerateRequest = {
250+ messages : [ ] ,
251+ output : {
252+ constrained : true ,
253+ format : 'json' ,
254+ contentType : 'application/json' ,
255+ schema : toJsonSchema ( {
256+ schema : z . object ( {
257+ name : z . string ( ) ,
258+ age : z . number ( ) ,
259+ } ) ,
260+ } ) ,
261+ } ,
262+ } ;
263+
264+ const response = new GenerateResponse (
265+ {
266+ message : {
267+ role : 'model' ,
268+ content : [ { text : '{"name": "John", "age": "30"}' } ] ,
269+ } ,
270+ finishReason : 'stop' ,
271+ } ,
272+ {
273+ request,
274+ }
275+ ) ;
276+
277+ assert . deepEqual ( response . message ?. metadata , {
278+ generate : {
279+ output : { contentType : 'application/json' , format : 'json' } ,
280+ } ,
281+ } ) ;
282+ } ) ;
247283} ) ;
You can’t perform that action at this time.
0 commit comments