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.
- package/main.test.js +43 -0
- package/package.json +1 -1
- 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
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
|
-
|
|
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
|
+
};
|