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 +43 -0
- package/package.json +1 -1
- package/src/chat.js +37 -31
- package/package-lock.json +0 -3956
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
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
|
-
|
|
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
|
};
|