openai-api-mock 0.1.10 → 0.1.12

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.
Files changed (3) hide show
  1. package/main.test.js +43 -0
  2. package/package.json +1 -1
  3. package/src/chat.js +38 -18
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.10",
3
+ "version": "0.1.12",
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,19 +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 {
116
- return faker.lorem.words(5);
117
- }
106
+ return generateFakeStringData(name);
118
107
  case "number":
119
108
  return faker.number.int({ max: 100 });
120
109
  case "array":
@@ -135,7 +124,7 @@ function generateFakeArray(properties) {
135
124
  return faker.lorem.words(1);
136
125
  } else if (arrayItemsType === "object") {
137
126
  const itemProperties = properties.items.properties;
138
- return generateFakeData("object", { properties: itemProperties });
127
+ return generateFakeData("object", { properties: itemProperties }, "item");
139
128
  }
140
129
  });
141
130
  }
@@ -147,7 +136,6 @@ function generateFakeObject(properties) {
147
136
  });
148
137
  return itemObject;
149
138
  }
150
-
151
139
  function generateFunctionCallArguments(requestBody) {
152
140
  const { parameters } = requestBody.functions[0];
153
141
  const argumentsObject = {};
@@ -155,13 +143,45 @@ function generateFunctionCallArguments(requestBody) {
155
143
  Object.entries(parameters.properties).forEach(([paramName, paramDetails]) => {
156
144
  argumentsObject[paramName] = generateFakeData(
157
145
  paramDetails.type,
158
- paramDetails
146
+ paramDetails,
147
+ paramName
159
148
  );
160
149
  });
161
150
 
162
151
  return JSON.stringify(argumentsObject, null, 2);
163
152
  }
164
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.companyName();
163
+ } else if (name === "phone") {
164
+ return faker.phone.phoneNumber();
165
+ } else if (name === "address") {
166
+ return faker.address.streetAddress();
167
+ } else if (name === "date") {
168
+ return faker.date.past();
169
+ } else if (name === "jobTitle") {
170
+ return faker.name.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.datatype.uuid();
179
+ } else {
180
+ return faker.lorem.words(5);
181
+ }
182
+ }
183
+
184
+
165
185
  module.exports = {
166
186
  getChatResponce,
167
- };
187
+ };