@@ -40,54 +40,85 @@ const fakeResponseText: GenerateContentResponse = {
4040 ] ,
4141} ;
4242
43+ const functionCallPart1 = {
44+ functionCall : {
45+ name : "find_theaters" ,
46+ args : {
47+ location : "Mountain View, CA" ,
48+ movie : "Barbie" ,
49+ } ,
50+ } ,
51+ } ;
52+
53+ const functionCallPart2 = {
54+ functionCall : {
55+ name : "find_times" ,
56+ args : {
57+ location : "Mountain View, CA" ,
58+ movie : "Barbie" ,
59+ time : "20:00" ,
60+ } ,
61+ } ,
62+ } ;
63+
4364const fakeResponseFunctionCall : GenerateContentResponse = {
4465 candidates : [
4566 {
4667 index : 0 ,
4768 content : {
4869 role : "model" ,
49- parts : [
50- {
51- functionCall : {
52- name : "find_theaters" ,
53- args : {
54- location : "Mountain View, CA" ,
55- movie : "Barbie" ,
56- } ,
57- } ,
58- } ,
59- ] ,
70+ parts : [ functionCallPart1 ] ,
6071 } ,
6172 } ,
6273 ] ,
6374} ;
6475
6576const fakeResponseFunctionCalls : GenerateContentResponse = {
77+ candidates : [
78+ {
79+ index : 0 ,
80+ content : {
81+ role : "model" ,
82+ parts : [ functionCallPart1 , functionCallPart2 ] ,
83+ } ,
84+ } ,
85+ ] ,
86+ } ;
87+
88+ const fakeResponseMixed1 : GenerateContentResponse = {
89+ candidates : [
90+ {
91+ index : 0 ,
92+ content : {
93+ role : "model" ,
94+ parts : [ { text : "some text" } , functionCallPart2 ] ,
95+ } ,
96+ } ,
97+ ] ,
98+ } ;
99+
100+ const fakeResponseMixed2 : GenerateContentResponse = {
101+ candidates : [
102+ {
103+ index : 0 ,
104+ content : {
105+ role : "model" ,
106+ parts : [ functionCallPart1 , { text : "some text" } ] ,
107+ } ,
108+ } ,
109+ ] ,
110+ } ;
111+
112+ const fakeResponseMixed3 : GenerateContentResponse = {
66113 candidates : [
67114 {
68115 index : 0 ,
69116 content : {
70117 role : "model" ,
71118 parts : [
72- {
73- functionCall : {
74- name : "find_theaters" ,
75- args : {
76- location : "Mountain View, CA" ,
77- movie : "Barbie" ,
78- } ,
79- } ,
80- } ,
81- {
82- functionCall : {
83- name : "find_times" ,
84- args : {
85- location : "Mountain View, CA" ,
86- movie : "Barbie" ,
87- time : "20:00" ,
88- } ,
89- } ,
90- } ,
119+ { text : "some text" } ,
120+ functionCallPart1 ,
121+ { text : " and more text" } ,
91122 ] ,
92123 } ,
93124 } ,
@@ -109,19 +140,43 @@ describe("response-helpers methods", () => {
109140 it ( "good response text" , async ( ) => {
110141 const enhancedResponse = addHelpers ( fakeResponseText ) ;
111142 expect ( enhancedResponse . text ( ) ) . to . equal ( "Some text and some more text" ) ;
143+ expect ( enhancedResponse . functionCalls ( ) ) . to . be . undefined ;
112144 } ) ;
113145 it ( "good response functionCall" , async ( ) => {
114146 const enhancedResponse = addHelpers ( fakeResponseFunctionCall ) ;
115- expect ( enhancedResponse . functionCall ( ) ) . to . deep . equal (
116- fakeResponseFunctionCall . candidates [ 0 ] . content . parts [ 0 ] . functionCall ,
117- ) ;
147+ expect ( enhancedResponse . text ( ) ) . to . equal ( "" ) ;
148+ expect ( enhancedResponse . functionCalls ( ) ) . to . deep . equal ( [
149+ functionCallPart1 . functionCall ,
150+ ] ) ;
118151 } ) ;
119152 it ( "good response functionCalls" , async ( ) => {
120153 const enhancedResponse = addHelpers ( fakeResponseFunctionCalls ) ;
154+ expect ( enhancedResponse . text ( ) ) . to . equal ( "" ) ;
155+ expect ( enhancedResponse . functionCalls ( ) ) . to . deep . equal ( [
156+ functionCallPart1 . functionCall ,
157+ functionCallPart2 . functionCall ,
158+ ] ) ;
159+ } ) ;
160+ it ( "good response text/functionCall" , async ( ) => {
161+ const enhancedResponse = addHelpers ( fakeResponseMixed1 ) ;
162+ expect ( enhancedResponse . functionCalls ( ) ) . to . deep . equal ( [
163+ functionCallPart2 . functionCall ,
164+ ] ) ;
165+ expect ( enhancedResponse . text ( ) ) . to . equal ( "some text" ) ;
166+ } ) ;
167+ it ( "good response functionCall/text" , async ( ) => {
168+ const enhancedResponse = addHelpers ( fakeResponseMixed2 ) ;
169+ expect ( enhancedResponse . functionCalls ( ) ) . to . deep . equal ( [
170+ functionCallPart1 . functionCall ,
171+ ] ) ;
172+ expect ( enhancedResponse . text ( ) ) . to . equal ( "some text" ) ;
173+ } ) ;
174+ it ( "good response text/functionCall/text" , async ( ) => {
175+ const enhancedResponse = addHelpers ( fakeResponseMixed3 ) ;
121176 expect ( enhancedResponse . functionCalls ( ) ) . to . deep . equal ( [
122- fakeResponseFunctionCalls . candidates [ 0 ] . content . parts [ 0 ] . functionCall ,
123- fakeResponseFunctionCalls . candidates [ 0 ] . content . parts [ 1 ] . functionCall ,
177+ functionCallPart1 . functionCall ,
124178 ] ) ;
179+ expect ( enhancedResponse . text ( ) ) . to . equal ( "some text and more text" ) ;
125180 } ) ;
126181 it ( "bad response safety" , async ( ) => {
127182 const enhancedResponse = addHelpers ( badFakeResponse ) ;
0 commit comments