openai-api-mock 0.1.11 → 0.1.13

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.
package/main.test.js CHANGED
@@ -89,6 +89,49 @@ describe('Mock OpenAI Chat & Image generation API', () => {
89
89
  });
90
90
 
91
91
 
92
+ it('should mock the chat completion with email function call (tools)', async () => {
93
+ try{
94
+ const response = await openai.chat.completions.create({
95
+ model: "gpt-3.5",
96
+ messages: [
97
+ { role: 'system', content: "You'r an expert chef" },
98
+ { role: 'user', content: "Suggest at least 5 recipes" },
99
+ ],
100
+ tools: [
101
+ {
102
+ type: "function",
103
+ function: {
104
+ name: 'send_email',
105
+ description: 'Send an email to the user with the recipes',
106
+ parameters: {
107
+ type: "object",
108
+ properties: {
109
+ email: {
110
+ type: "string",
111
+ description: "The email address of the user",
112
+ }
113
+ }
114
+ },
115
+ required: ["email"],
116
+ }
117
+
118
+ }],
119
+
120
+ tool_choice: { name: 'send_email' },
121
+ });
122
+ expect(response.model).toEqual('gpt-3.5-mock');
123
+ expect(response.choices[0]).toHaveProperty('finish_reason', 'tool_calls');
124
+ expect(response.choices[0].message.tool_calls[0].function).toHaveProperty('name', 'send_email');
125
+ expect(response.choices[0].message.tool_calls[0].function).toHaveProperty('arguments');
126
+ expect(JSON.parse(response.choices[0].message.tool_calls[0].function.arguments)).toHaveProperty('email');
127
+
128
+ }catch(error){
129
+ throw new Error(error);
130
+ }
131
+
132
+ });
133
+
134
+
92
135
  it('should mock the chat completion with function call (tools)', async () => {
93
136
  const response = await openai.chat.completions.create({
94
137
  model: "gpt-3.5",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openai-api-mock",
3
- "version": "0.1.11",
3
+ "version": "0.1.13",
4
4
  "description": "A Node.js module for mocking OpenAI API responses in a development environment",
5
5
  "repository": {
6
6
  "type": "git",
package/src/chat.js CHANGED
@@ -92,7 +92,8 @@ function generateToolCallArguments(requestBody) {
92
92
  Object.entries(parameters.properties).forEach(([paramName, paramDetails]) => {
93
93
  argumentsObject[paramName] = generateFakeData(
94
94
  paramDetails.type,
95
- paramDetails
95
+ paramDetails,
96
+ paramName
96
97
  );
97
98
  });
98
99
 
@@ -102,33 +103,7 @@ function generateToolCallArguments(requestBody) {
102
103
  function generateFakeData(type, properties, name) {
103
104
  switch (type) {
104
105
  case "string":
105
- if (name === "name") {
106
- return faker.person.fullName();
107
- } else if (name === "email") {
108
- return faker.internet.email();
109
- } else if (name === "price") {
110
- return faker.commerce.price({ min: 100 });
111
- } else if (name === "company") {
112
- return faker.company.bs();
113
- } else if (name === "phone") {
114
- return faker.phone.number();
115
- } else if (name === "address") {
116
- return faker.address.streetAddress();
117
- } else if (name === "date") {
118
- return faker.date.past();
119
- } else if (name === "jobTitle") {
120
- return faker.name.jobTitle();
121
- } else if (name === "creditCardNumber") {
122
- return faker.finance.creditCardNumber();
123
- } else if (name === "currencyCode") {
124
- return faker.finance.currencyCode();
125
- } else if (name === "productName") {
126
- return faker.commerce.productName();
127
- } else if (name === "uuid") {
128
- return faker.datatype.uuid();
129
- } else {
130
- return faker.lorem.words(5);
131
- }
106
+ return generateFakeStringData(name);
132
107
  case "number":
133
108
  return faker.number.int({ max: 100 });
134
109
  case "array":
@@ -149,7 +124,7 @@ function generateFakeArray(properties) {
149
124
  return faker.lorem.words(1);
150
125
  } else if (arrayItemsType === "object") {
151
126
  const itemProperties = properties.items.properties;
152
- return generateFakeData("object", { properties: itemProperties });
127
+ return generateFakeData("object", { properties: itemProperties }, "item");
153
128
  }
154
129
  });
155
130
  }
@@ -161,7 +136,6 @@ function generateFakeObject(properties) {
161
136
  });
162
137
  return itemObject;
163
138
  }
164
-
165
139
  function generateFunctionCallArguments(requestBody) {
166
140
  const { parameters } = requestBody.functions[0];
167
141
  const argumentsObject = {};
@@ -169,13 +143,45 @@ function generateFunctionCallArguments(requestBody) {
169
143
  Object.entries(parameters.properties).forEach(([paramName, paramDetails]) => {
170
144
  argumentsObject[paramName] = generateFakeData(
171
145
  paramDetails.type,
172
- paramDetails
146
+ paramDetails,
147
+ paramName
173
148
  );
174
149
  });
175
150
 
176
151
  return JSON.stringify(argumentsObject, null, 2);
177
152
  }
178
153
 
154
+ function generateFakeStringData(name) {
155
+ if (name === "name") {
156
+ return faker.person.fullName();
157
+ } else if (name === "email") {
158
+ return faker.internet.email();
159
+ } else if (name === "price") {
160
+ return faker.commerce.price();
161
+ } else if (name === "company") {
162
+ return faker.company.name();
163
+ } else if (name === "phone") {
164
+ return faker.phone.number();
165
+ } else if (name === "address") {
166
+ return faker.location.streetAddress();
167
+ } else if (name === "date") {
168
+ return faker.date.past();
169
+ } else if (name === "jobTitle") {
170
+ return faker.person.jobTitle();
171
+ } else if (name === "creditCardNumber") {
172
+ return faker.finance.creditCardNumber();
173
+ } else if (name === "currencyCode") {
174
+ return faker.finance.currencyCode();
175
+ } else if (name === "productName") {
176
+ return faker.commerce.productName();
177
+ } else if (name === "uuid") {
178
+ return faker.string.uuid();
179
+ } else {
180
+ return faker.lorem.words(5);
181
+ }
182
+ }
183
+
184
+
179
185
  module.exports = {
180
186
  getChatResponce,
181
187
  };