@sprucelabs/sprucebot-llm 11.1.12 → 11.1.14
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/README.md +1 -1
- package/build/.spruce/errors/errors.types.js +1 -0
- package/build/.spruce/errors/errors.types.js.map +1 -0
- package/build/.spruce/errors/options.types.js +1 -0
- package/build/.spruce/errors/options.types.js.map +1 -0
- package/build/.spruce/errors/sprucebotLlm/callbackError.schema.js +1 -0
- package/build/.spruce/errors/sprucebotLlm/callbackError.schema.js.map +1 -0
- package/build/.spruce/errors/sprucebotLlm/invalidCallback.schema.js +1 -0
- package/build/.spruce/errors/sprucebotLlm/invalidCallback.schema.js.map +1 -0
- package/build/.spruce/errors/sprucebotLlm/noBotInstanceSet.schema.js +1 -0
- package/build/.spruce/errors/sprucebotLlm/noBotInstanceSet.schema.js.map +1 -0
- package/build/.spruce/event-cache.json +1 -0
- package/build/.spruce/schemas/fields/fieldClassMap.js +1 -0
- package/build/.spruce/schemas/fields/fieldClassMap.js.map +1 -0
- package/build/.spruce/schemas/fields/fields.types.js +1 -0
- package/build/.spruce/schemas/fields/fields.types.js.map +1 -0
- package/build/__tests__/behavioral/LlmBot.test.d.ts +55 -0
- package/build/__tests__/behavioral/LlmBot.test.js +607 -0
- package/build/__tests__/behavioral/LlmBot.test.js.map +1 -0
- package/build/__tests__/behavioral/SprucebotLlmFactory.test.d.ts +16 -0
- package/build/__tests__/behavioral/SprucebotLlmFactory.test.js +132 -0
- package/build/__tests__/behavioral/SprucebotLlmFactory.test.js.map +1 -0
- package/build/__tests__/behavioral/adapters/OpenAi.test.d.ts +52 -0
- package/build/__tests__/behavioral/adapters/OpenAi.test.js +699 -0
- package/build/__tests__/behavioral/adapters/OpenAi.test.js.map +1 -0
- package/build/__tests__/behavioral/prompts/PromptGenerator.test.d.ts +20 -0
- package/build/__tests__/behavioral/prompts/PromptGenerator.test.js +211 -0
- package/build/__tests__/behavioral/prompts/PromptGenerator.test.js.map +1 -0
- package/build/__tests__/behavioral/prompts/ResponseParser.test.d.ts +35 -0
- package/build/__tests__/behavioral/prompts/ResponseParser.test.js +312 -0
- package/build/__tests__/behavioral/prompts/ResponseParser.test.js.map +1 -0
- package/build/__tests__/behavioral/skills/Skill.test.d.ts +19 -0
- package/build/__tests__/behavioral/skills/Skill.test.js +188 -0
- package/build/__tests__/behavioral/skills/Skill.test.js.map +1 -0
- package/build/__tests__/behavioral/testing/MockLlmSkill.test.d.ts +37 -0
- package/build/__tests__/behavioral/testing/MockLlmSkill.test.js +340 -0
- package/build/__tests__/behavioral/testing/MockLlmSkill.test.js.map +1 -0
- package/build/__tests__/behavioral/testing/SpyLlmBot.test.d.ts +4 -0
- package/build/__tests__/behavioral/testing/SpyLlmBot.test.js +34 -0
- package/build/__tests__/behavioral/testing/SpyLlmBot.test.js.map +1 -0
- package/build/__tests__/support/AbstractLlmTest.d.ts +14 -0
- package/build/__tests__/support/AbstractLlmTest.js +67 -0
- package/build/__tests__/support/AbstractLlmTest.js.map +1 -0
- package/build/__tests__/support/schemas/carSchema.d.ts +16 -0
- package/build/__tests__/support/schemas/carSchema.js +19 -0
- package/build/__tests__/support/schemas/carSchema.js.map +1 -0
- package/build/__tests__/support/schemas/personSchema.d.ts +23 -0
- package/build/__tests__/support/schemas/personSchema.js +37 -0
- package/build/__tests__/support/schemas/personSchema.js.map +1 -0
- package/build/__tests__/support/schemas/personWithDefaultsSchema.d.ts +13 -0
- package/build/__tests__/support/schemas/personWithDefaultsSchema.js +18 -0
- package/build/__tests__/support/schemas/personWithDefaultsSchema.js.map +1 -0
- package/build/bots/PromptGenerator.js +1 -0
- package/build/bots/PromptGenerator.js.map +1 -0
- package/build/bots/SprucebotLlmBotImpl.js +9 -4
- package/build/bots/SprucebotLlmBotImpl.js.map +1 -0
- package/build/bots/SprucebotLlmFactory.js +1 -0
- package/build/bots/SprucebotLlmFactory.js.map +1 -0
- package/build/bots/SprucebotLlmSkillImpl.js +1 -0
- package/build/bots/SprucebotLlmSkillImpl.js.map +1 -0
- package/build/bots/adapters/OpenAi.js +1 -0
- package/build/bots/adapters/OpenAi.js.map +1 -0
- package/build/bots/adapters/OpenAiMessageBuilder.js +1 -0
- package/build/bots/adapters/OpenAiMessageBuilder.js.map +1 -0
- package/build/bots/adapters/SpyOpenAiApi.js +1 -0
- package/build/bots/adapters/SpyOpenAiApi.js.map +1 -0
- package/build/bots/templates.js +1 -0
- package/build/bots/templates.js.map +1 -0
- package/build/chat.js +1 -0
- package/build/chat.js.map +1 -0
- package/build/chatWithImages.js +1 -0
- package/build/chatWithImages.js.map +1 -0
- package/build/errors/SpruceError.js +1 -0
- package/build/errors/SpruceError.js.map +1 -0
- package/build/errors/callbackError.builder.js +1 -0
- package/build/errors/callbackError.builder.js.map +1 -0
- package/build/errors/invalidCallback.builder.js +1 -0
- package/build/errors/invalidCallback.builder.js.map +1 -0
- package/build/errors/noBotInstanceSet.builder.js +1 -0
- package/build/errors/noBotInstanceSet.builder.js.map +1 -0
- package/build/examples/buildCallbackSkill.js +1 -0
- package/build/examples/buildCallbackSkill.js.map +1 -0
- package/build/examples/buildFileTransformerSkill.js +1 -0
- package/build/examples/buildFileTransformerSkill.js.map +1 -0
- package/build/examples/buildJokeSkill.js +1 -0
- package/build/examples/buildJokeSkill.js.map +1 -0
- package/build/examples/buildProfileSkill.js +1 -0
- package/build/examples/buildProfileSkill.js.map +1 -0
- package/build/examples/buildReceptionistSkill.js +1 -0
- package/build/examples/buildReceptionistSkill.js.map +1 -0
- package/build/fineTuningSprucebot/constants/DIRECTORY_SHARES.js +1 -0
- package/build/fineTuningSprucebot/constants/DIRECTORY_SHARES.js.map +1 -0
- package/build/fineTuningSprucebot/constants/FIRST_MESSAGES.js +1 -0
- package/build/fineTuningSprucebot/constants/FIRST_MESSAGES.js.map +1 -0
- package/build/fineTuningSprucebot/constants/GREETINGS.js +1 -0
- package/build/fineTuningSprucebot/constants/GREETINGS.js.map +1 -0
- package/build/fineTuningSprucebot/constants/OFF_THE_RAILS_CONVERSATIONS.js +1 -0
- package/build/fineTuningSprucebot/constants/OFF_THE_RAILS_CONVERSATIONS.js.map +1 -0
- package/build/fineTuningSprucebot/constants/TOPICS.js +1 -0
- package/build/fineTuningSprucebot/constants/TOPICS.js.map +1 -0
- package/build/fineTuningSprucebot/generateSamples.js +1 -0
- package/build/fineTuningSprucebot/generateSamples.js.map +1 -0
- package/build/fineTuningSprucebot/support.js +1 -0
- package/build/fineTuningSprucebot/support.js.map +1 -0
- package/build/fineTuningSprucebot/types.js +1 -0
- package/build/fineTuningSprucebot/types.js.map +1 -0
- package/build/index.js +1 -0
- package/build/index.js.map +1 -0
- package/build/llm.types.js +1 -0
- package/build/llm.types.js.map +1 -0
- package/build/parsingResponses/ResponseParser.js +1 -0
- package/build/parsingResponses/ResponseParser.js.map +1 -0
- package/build/parsingResponses/renderPlaceholder.js +1 -0
- package/build/parsingResponses/renderPlaceholder.js.map +1 -0
- package/build/tests/MockLlmSkill.js +1 -0
- package/build/tests/MockLlmSkill.js.map +1 -0
- package/build/tests/SpyAdapter.js +1 -0
- package/build/tests/SpyAdapter.js.map +1 -0
- package/build/tests/SpyLlmBot.js +1 -0
- package/build/tests/SpyLlmBot.js.map +1 -0
- package/package.json +14 -14
- package/build/esm/.spruce/errors/errors.types.d.ts +0 -52
- package/build/esm/.spruce/errors/errors.types.js +0 -1
- package/build/esm/.spruce/errors/options.types.d.ts +0 -13
- package/build/esm/.spruce/errors/options.types.js +0 -1
- package/build/esm/bots/PromptGenerator.d.ts +0 -22
- package/build/esm/bots/PromptGenerator.js +0 -74
- package/build/esm/bots/SprucebotLlmBotImpl.d.ts +0 -26
- package/build/esm/bots/SprucebotLlmBotImpl.js +0 -159
- package/build/esm/bots/SprucebotLlmFactory.d.ts +0 -15
- package/build/esm/bots/SprucebotLlmFactory.js +0 -41
- package/build/esm/bots/SprucebotLlmSkillImpl.d.ts +0 -12
- package/build/esm/bots/SprucebotLlmSkillImpl.js +0 -47
- package/build/esm/bots/adapters/OpenAi.d.ts +0 -11
- package/build/esm/bots/adapters/OpenAi.js +0 -46
- package/build/esm/bots/adapters/OpenAiMessageBuilder.d.ts +0 -18
- package/build/esm/bots/adapters/OpenAiMessageBuilder.js +0 -153
- package/build/esm/bots/adapters/SpyOpenAiApi.d.ts +0 -19
- package/build/esm/bots/adapters/SpyOpenAiApi.js +0 -49
- package/build/esm/bots/templates.d.ts +0 -4
- package/build/esm/bots/templates.js +0 -68
- package/build/esm/chat.d.ts +0 -1
- package/build/esm/chat.js +0 -53
- package/build/esm/chatWithImages.d.ts +0 -1
- package/build/esm/chatWithImages.js +0 -46
- package/build/esm/errors/SpruceError.d.ts +0 -6
- package/build/esm/errors/SpruceError.js +0 -25
- package/build/esm/errors/callbackError.builder.d.ts +0 -6
- package/build/esm/errors/callbackError.builder.js +0 -6
- package/build/esm/errors/invalidCallback.builder.d.ts +0 -17
- package/build/esm/errors/invalidCallback.builder.js +0 -17
- package/build/esm/errors/noBotInstanceSet.builder.d.ts +0 -6
- package/build/esm/errors/noBotInstanceSet.builder.js +0 -6
- package/build/esm/examples/buildCallbackSkill.d.ts +0 -2
- package/build/esm/examples/buildCallbackSkill.js +0 -57
- package/build/esm/examples/buildFileTransformerSkill.d.ts +0 -2
- package/build/esm/examples/buildFileTransformerSkill.js +0 -25
- package/build/esm/examples/buildJokeSkill.d.ts +0 -2
- package/build/esm/examples/buildJokeSkill.js +0 -12
- package/build/esm/examples/buildProfileSkill.d.ts +0 -2
- package/build/esm/examples/buildProfileSkill.js +0 -30
- package/build/esm/examples/buildReceptionistSkill.d.ts +0 -2
- package/build/esm/examples/buildReceptionistSkill.js +0 -16
- package/build/esm/fineTuningSprucebot/constants/DIRECTORY_SHARES.d.ts +0 -1
- package/build/esm/fineTuningSprucebot/constants/DIRECTORY_SHARES.js +0 -7
- package/build/esm/fineTuningSprucebot/constants/FIRST_MESSAGES.d.ts +0 -1
- package/build/esm/fineTuningSprucebot/constants/FIRST_MESSAGES.js +0 -17
- package/build/esm/fineTuningSprucebot/constants/GREETINGS.d.ts +0 -1
- package/build/esm/fineTuningSprucebot/constants/GREETINGS.js +0 -22
- package/build/esm/fineTuningSprucebot/constants/OFF_THE_RAILS_CONVERSATIONS.d.ts +0 -2
- package/build/esm/fineTuningSprucebot/constants/OFF_THE_RAILS_CONVERSATIONS.js +0 -32
- package/build/esm/fineTuningSprucebot/constants/TOPICS.d.ts +0 -2
- package/build/esm/fineTuningSprucebot/constants/TOPICS.js +0 -314
- package/build/esm/fineTuningSprucebot/generateSamples.d.ts +0 -1
- package/build/esm/fineTuningSprucebot/generateSamples.js +0 -41
- package/build/esm/fineTuningSprucebot/support.d.ts +0 -12
- package/build/esm/fineTuningSprucebot/support.js +0 -60
- package/build/esm/fineTuningSprucebot/types.d.ts +0 -15
- package/build/esm/fineTuningSprucebot/types.js +0 -1
- package/build/esm/index.d.ts +0 -10
- package/build/esm/index.js +0 -10
- package/build/esm/llm.types.d.ts +0 -84
- package/build/esm/llm.types.js +0 -6
- package/build/esm/parsingResponses/ResponseParser.d.ts +0 -18
- package/build/esm/parsingResponses/ResponseParser.js +0 -115
- package/build/esm/parsingResponses/renderPlaceholder.d.ts +0 -1
- package/build/esm/parsingResponses/renderPlaceholder.js +0 -4
- package/build/esm/tests/MockLlmSkill.d.ts +0 -14
- package/build/esm/tests/MockLlmSkill.js +0 -60
- package/build/esm/tests/SpyAdapter.d.ts +0 -8
- package/build/esm/tests/SpyAdapter.js +0 -21
- package/build/esm/tests/SpyLlmBot.d.ts +0 -12
- package/build/esm/tests/SpyLlmBot.js +0 -20
|
@@ -0,0 +1,699 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
42
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
43
|
+
};
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
const schema_1 = require("@sprucelabs/schema");
|
|
46
|
+
const test_utils_1 = require("@sprucelabs/test-utils");
|
|
47
|
+
const openai_1 = __importDefault(require("openai"));
|
|
48
|
+
const OpenAi_1 = __importStar(require("../../../bots/adapters/OpenAi"));
|
|
49
|
+
const SpyOpenAiApi_1 = __importDefault(require("../../../bots/adapters/SpyOpenAiApi"));
|
|
50
|
+
const templates_1 = require("../../../bots/templates");
|
|
51
|
+
const AbstractLlmTest_1 = __importDefault(require("../../support/AbstractLlmTest"));
|
|
52
|
+
let OpenAiTest = class OpenAiTest extends AbstractLlmTest_1.default {
|
|
53
|
+
constructor() {
|
|
54
|
+
super(...arguments);
|
|
55
|
+
this.skillJob = (0, test_utils_1.generateId)();
|
|
56
|
+
}
|
|
57
|
+
static async beforeAll() {
|
|
58
|
+
await super.beforeAll();
|
|
59
|
+
test_utils_1.assert.isEqual(OpenAi_1.default.OpenAI, openai_1.default, 'OpenAI not set');
|
|
60
|
+
}
|
|
61
|
+
async beforeEach() {
|
|
62
|
+
await super.beforeEach();
|
|
63
|
+
this.setupSpys();
|
|
64
|
+
this.openAi = this.OpenAi();
|
|
65
|
+
this.bot = this.Bot();
|
|
66
|
+
delete process.env.OPENAI_CHAT_HISTORY_LIMIT;
|
|
67
|
+
delete process.env.OPENAI_REASONING_EFFORT;
|
|
68
|
+
}
|
|
69
|
+
async throwsWhenMissingKey() {
|
|
70
|
+
//@ts-ignore
|
|
71
|
+
const err = test_utils_1.assert.doesThrow(() => new OpenAi_1.default());
|
|
72
|
+
test_utils_1.errorAssert.assertError(err, 'MISSING_PARAMETERS', {
|
|
73
|
+
parameters: ['apiKey'],
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
async instantiatingOpenAiSetsKeyToConfig() {
|
|
77
|
+
const key = (0, test_utils_1.generateId)();
|
|
78
|
+
this.OpenAi(key);
|
|
79
|
+
test_utils_1.assert.isEqual(SpyOpenAiApi_1.default.config?.apiKey, key);
|
|
80
|
+
}
|
|
81
|
+
async canSendMessage() {
|
|
82
|
+
const message = (0, test_utils_1.generateId)();
|
|
83
|
+
await this.setAndSendMessage(message);
|
|
84
|
+
this.assertLastCompletionEquals([
|
|
85
|
+
{
|
|
86
|
+
role: 'user',
|
|
87
|
+
content: message,
|
|
88
|
+
},
|
|
89
|
+
]);
|
|
90
|
+
}
|
|
91
|
+
async returnsResponseFromSendMessage() {
|
|
92
|
+
SpyOpenAiApi_1.default.responseMessage = (0, test_utils_1.generateId)();
|
|
93
|
+
await this.assertResponseEquals(SpyOpenAiApi_1.default.responseMessage);
|
|
94
|
+
}
|
|
95
|
+
async trimsResponseMessage() {
|
|
96
|
+
SpyOpenAiApi_1.default.responseMessage = ' hello world ';
|
|
97
|
+
await this.assertResponseEquals('hello world');
|
|
98
|
+
}
|
|
99
|
+
async noResponseReturnsDefaultErrorMesssage() {
|
|
100
|
+
SpyOpenAiApi_1.default.responseMessage = false;
|
|
101
|
+
await this.assertResponseEquals(OpenAi_1.MESSAGE_RESPONSE_ERROR_MESSAGE);
|
|
102
|
+
}
|
|
103
|
+
async sendMessageCanAcceptModel() {
|
|
104
|
+
const model = 'davinci:ft-personal:sprucebot-concierge-2023-04-28-04-42-19';
|
|
105
|
+
await this.setAndSendMessage((0, test_utils_1.generateId)(), {
|
|
106
|
+
model,
|
|
107
|
+
});
|
|
108
|
+
test_utils_1.assert.isEqual(SpyOpenAiApi_1.default.lastSentCompletion?.model, model);
|
|
109
|
+
}
|
|
110
|
+
async sendsAllMessagesToOpenAi() {
|
|
111
|
+
const message1 = (0, test_utils_1.generateId)();
|
|
112
|
+
const message2 = (0, test_utils_1.generateId)();
|
|
113
|
+
this.bot.setMessages([
|
|
114
|
+
{
|
|
115
|
+
from: 'Me',
|
|
116
|
+
message: message1,
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
from: 'You',
|
|
120
|
+
message: message2,
|
|
121
|
+
},
|
|
122
|
+
]);
|
|
123
|
+
await this.sendMessage();
|
|
124
|
+
this.assertLastCompletionEquals([
|
|
125
|
+
{
|
|
126
|
+
role: 'user',
|
|
127
|
+
content: message1,
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
role: 'assistant',
|
|
131
|
+
content: message2,
|
|
132
|
+
},
|
|
133
|
+
]);
|
|
134
|
+
}
|
|
135
|
+
async sendsExpectedMessageIfSkillIsPassedWithJustJustJob() {
|
|
136
|
+
await this.setSkillSendMessageAndAssertSystemMessagesEqual({}, []);
|
|
137
|
+
}
|
|
138
|
+
async sendsExpectedMessageIfSkillPassedWithWhenWeAreDone() {
|
|
139
|
+
const doneWhen = (0, test_utils_1.generateId)();
|
|
140
|
+
await this.setSkillSendMessageAndAssertSystemMessagesEqual({
|
|
141
|
+
weAreDoneWhen: doneWhen,
|
|
142
|
+
}, [
|
|
143
|
+
{
|
|
144
|
+
role: 'developer',
|
|
145
|
+
content: `Our conversation is done when ${doneWhen}. Once you determine we are done, send me the following message so I know we're done: ${templates_1.DONE_TOKEN}`,
|
|
146
|
+
},
|
|
147
|
+
]);
|
|
148
|
+
}
|
|
149
|
+
async sendsExpectedWithOnePleaseKeepInMind() {
|
|
150
|
+
const pleaseKeepInMind = [(0, test_utils_1.generateId)()];
|
|
151
|
+
await this.setSkillSendMessageAndAssertSystemMessagesEqual({
|
|
152
|
+
pleaseKeepInMindThat: pleaseKeepInMind,
|
|
153
|
+
}, [this.buildPleaseKeepInMindMessage(pleaseKeepInMind)]);
|
|
154
|
+
}
|
|
155
|
+
async sendsExpectedWithMultiplePleaseKeepInMind() {
|
|
156
|
+
const pleaseKeepInMind = [(0, test_utils_1.generateId)(), (0, test_utils_1.generateId)()];
|
|
157
|
+
await this.setSkillSendMessageAndAssertSystemMessagesEqual({
|
|
158
|
+
pleaseKeepInMindThat: pleaseKeepInMind,
|
|
159
|
+
}, [
|
|
160
|
+
{
|
|
161
|
+
role: 'developer',
|
|
162
|
+
content: `During this conversation, please keep the following in mind:\n\n1. ${pleaseKeepInMind[0]}\n2. ${pleaseKeepInMind[1]}.`,
|
|
163
|
+
},
|
|
164
|
+
]);
|
|
165
|
+
}
|
|
166
|
+
async sendsExpectedWithSchema() {
|
|
167
|
+
await this.setSkillSendMessageWithSchemaAndAssertSystemMessagesEqualExpected((0, schema_1.buildSchema)({
|
|
168
|
+
id: 'test',
|
|
169
|
+
fields: {
|
|
170
|
+
firstName: {
|
|
171
|
+
type: 'text',
|
|
172
|
+
},
|
|
173
|
+
},
|
|
174
|
+
}));
|
|
175
|
+
await this.setSkillSendMessageWithSchemaAndAssertSystemMessagesEqualExpected((0, schema_1.buildSchema)({
|
|
176
|
+
id: 'another',
|
|
177
|
+
fields: {
|
|
178
|
+
lastName: {
|
|
179
|
+
type: 'text',
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
}));
|
|
183
|
+
}
|
|
184
|
+
async sendsExpectedWithState() {
|
|
185
|
+
const schema = (0, schema_1.buildSchema)({
|
|
186
|
+
id: 'next',
|
|
187
|
+
fields: {
|
|
188
|
+
firstName: {
|
|
189
|
+
type: 'text',
|
|
190
|
+
isRequired: true,
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
});
|
|
194
|
+
const state = {
|
|
195
|
+
firstName: (0, test_utils_1.generateId)(),
|
|
196
|
+
};
|
|
197
|
+
await this.setSkillSendMessageAndAssertSystemMessagesEqual({
|
|
198
|
+
state,
|
|
199
|
+
stateSchema: schema,
|
|
200
|
+
}, [this.renderSchemaMessage(schema), this.renderStateMessage(state)]);
|
|
201
|
+
}
|
|
202
|
+
async sendsExpectedMessageWithSimpleCallback() {
|
|
203
|
+
await this.setSkillSendMessageWithCallbacksAndAssertSystemMessagesEqualExpected({
|
|
204
|
+
test: {
|
|
205
|
+
cb: async () => 'hello',
|
|
206
|
+
useThisWhenever: (0, test_utils_1.generateId)(),
|
|
207
|
+
},
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
async sendsExectedMessageWithDifferentSimpleCallback() {
|
|
211
|
+
await this.setSkillSendMessageWithCallbacksAndAssertSystemMessagesEqualExpected({
|
|
212
|
+
aDifferentCallback: {
|
|
213
|
+
cb: async () => 'hello',
|
|
214
|
+
useThisWhenever: (0, test_utils_1.generateId)(),
|
|
215
|
+
},
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
async sendsExpectedMessagesWithMultipleCallbacks() {
|
|
219
|
+
await this.setSkillSendMessageWithCallbacksAndAssertSystemMessagesEqualExpected({
|
|
220
|
+
a: {
|
|
221
|
+
cb: async () => 'hello',
|
|
222
|
+
useThisWhenever: (0, test_utils_1.generateId)(),
|
|
223
|
+
},
|
|
224
|
+
b: {
|
|
225
|
+
cb: async () => 'hello',
|
|
226
|
+
useThisWhenever: (0, test_utils_1.generateId)(),
|
|
227
|
+
},
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
async sendsExpectedWithCallbackWithParameters() {
|
|
231
|
+
await this.setSkillSendMessageWithCallbacksAndAssertSystemMessagesEqualExpected({
|
|
232
|
+
a: {
|
|
233
|
+
cb: async () => `hello`,
|
|
234
|
+
useThisWhenever: (0, test_utils_1.generateId)(),
|
|
235
|
+
parameters: [
|
|
236
|
+
{
|
|
237
|
+
name: (0, test_utils_1.generateId)(),
|
|
238
|
+
type: (0, test_utils_1.generateId)(),
|
|
239
|
+
},
|
|
240
|
+
],
|
|
241
|
+
},
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
async sendsExpectedWithCallbackParameterWithDescription() {
|
|
245
|
+
await this.setSkillSendMessageWithCallbacksAndAssertSystemMessagesEqualExpected({
|
|
246
|
+
callbackOne: {
|
|
247
|
+
cb: async () => `hello`,
|
|
248
|
+
useThisWhenever: (0, test_utils_1.generateId)(),
|
|
249
|
+
parameters: [
|
|
250
|
+
{
|
|
251
|
+
name: (0, test_utils_1.generateId)(),
|
|
252
|
+
description: (0, test_utils_1.generateId)(),
|
|
253
|
+
type: (0, test_utils_1.generateId)(),
|
|
254
|
+
},
|
|
255
|
+
],
|
|
256
|
+
},
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
async sendsExpectedWithCallbackParmaterThatIsRequired() {
|
|
260
|
+
await this.setSkillSendMessageWithCallbacksAndAssertSystemMessagesEqualExpected({
|
|
261
|
+
callbackOne: {
|
|
262
|
+
cb: async () => `hello`,
|
|
263
|
+
useThisWhenever: (0, test_utils_1.generateId)(),
|
|
264
|
+
parameters: [
|
|
265
|
+
{
|
|
266
|
+
name: (0, test_utils_1.generateId)(),
|
|
267
|
+
isRequired: true,
|
|
268
|
+
type: (0, test_utils_1.generateId)(),
|
|
269
|
+
},
|
|
270
|
+
],
|
|
271
|
+
},
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
async sendsExpectedWithMultipleCallbackParameters() {
|
|
275
|
+
await this.setSkillSendMessageWithCallbacksAndAssertSystemMessagesEqualExpected({
|
|
276
|
+
callbackOne: {
|
|
277
|
+
cb: async () => `hello`,
|
|
278
|
+
useThisWhenever: (0, test_utils_1.generateId)(),
|
|
279
|
+
parameters: [
|
|
280
|
+
{
|
|
281
|
+
name: (0, test_utils_1.generateId)(),
|
|
282
|
+
type: (0, test_utils_1.generateId)(),
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
name: (0, test_utils_1.generateId)(),
|
|
286
|
+
type: (0, test_utils_1.generateId)(),
|
|
287
|
+
},
|
|
288
|
+
],
|
|
289
|
+
},
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
async chatHistoryCanBeLimitedByEnvTo1() {
|
|
293
|
+
this.setMessageMemoryLimit('1');
|
|
294
|
+
this.bot.setMessages([
|
|
295
|
+
{
|
|
296
|
+
from: 'Me',
|
|
297
|
+
message: (0, test_utils_1.generateId)(),
|
|
298
|
+
},
|
|
299
|
+
{
|
|
300
|
+
from: 'You',
|
|
301
|
+
message: 'hello world',
|
|
302
|
+
},
|
|
303
|
+
]);
|
|
304
|
+
await this.sendMessage();
|
|
305
|
+
this.assertLastCompletionEquals([
|
|
306
|
+
{
|
|
307
|
+
role: 'assistant',
|
|
308
|
+
content: 'hello world',
|
|
309
|
+
},
|
|
310
|
+
]);
|
|
311
|
+
}
|
|
312
|
+
async chatHistoryCanBeLimitedByEnvTo2() {
|
|
313
|
+
this.setMessageMemoryLimit('2');
|
|
314
|
+
this.bot.setMessages([
|
|
315
|
+
{
|
|
316
|
+
from: 'Me',
|
|
317
|
+
message: 'hey there!',
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
from: 'You',
|
|
321
|
+
message: 'hello world',
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
from: 'Me',
|
|
325
|
+
message: 'another',
|
|
326
|
+
},
|
|
327
|
+
]);
|
|
328
|
+
await this.sendMessage();
|
|
329
|
+
this.assertLastCompletionEquals([
|
|
330
|
+
{
|
|
331
|
+
role: 'assistant',
|
|
332
|
+
content: 'hello world',
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
role: 'user',
|
|
336
|
+
content: 'another',
|
|
337
|
+
},
|
|
338
|
+
]);
|
|
339
|
+
}
|
|
340
|
+
async pleaseKeepInMindIsLast() {
|
|
341
|
+
const callbacks = {
|
|
342
|
+
test: {
|
|
343
|
+
cb: async () => 'hello',
|
|
344
|
+
useThisWhenever: 'here we go!',
|
|
345
|
+
},
|
|
346
|
+
};
|
|
347
|
+
await this.setSkillSendMessageAndAssertSystemMessagesEqual({
|
|
348
|
+
callbacks,
|
|
349
|
+
pleaseKeepInMindThat: ['this is important'],
|
|
350
|
+
}, [
|
|
351
|
+
this.buildCallbacksMessage(callbacks),
|
|
352
|
+
this.buildPleaseKeepInMindMessage(['this is important']),
|
|
353
|
+
]);
|
|
354
|
+
}
|
|
355
|
+
async canSendImageAsBase64() {
|
|
356
|
+
const image = (0, test_utils_1.generateId)();
|
|
357
|
+
const message = (0, test_utils_1.generateId)();
|
|
358
|
+
this.bot.setMessages([
|
|
359
|
+
{
|
|
360
|
+
from: 'Me',
|
|
361
|
+
message,
|
|
362
|
+
imageBase64: image,
|
|
363
|
+
},
|
|
364
|
+
]);
|
|
365
|
+
await this.sendMessage();
|
|
366
|
+
this.assertLastCompletionEquals([
|
|
367
|
+
{
|
|
368
|
+
role: 'user',
|
|
369
|
+
content: [
|
|
370
|
+
{
|
|
371
|
+
type: 'text',
|
|
372
|
+
text: message,
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
type: 'image_url',
|
|
376
|
+
image_url: {
|
|
377
|
+
url: `data:image/png;base64,${image}`,
|
|
378
|
+
},
|
|
379
|
+
},
|
|
380
|
+
],
|
|
381
|
+
},
|
|
382
|
+
]);
|
|
383
|
+
}
|
|
384
|
+
async rendersSelectOptionsAsExpected() {
|
|
385
|
+
const callbacks = {
|
|
386
|
+
test: {
|
|
387
|
+
cb: async () => 'hello',
|
|
388
|
+
useThisWhenever: 'here we go!',
|
|
389
|
+
parameters: [
|
|
390
|
+
{
|
|
391
|
+
name: 'option',
|
|
392
|
+
type: 'select',
|
|
393
|
+
options: {
|
|
394
|
+
choices: [
|
|
395
|
+
{
|
|
396
|
+
label: 'Option 1',
|
|
397
|
+
value: 'option_1',
|
|
398
|
+
},
|
|
399
|
+
{
|
|
400
|
+
label: 'Option 2',
|
|
401
|
+
value: 'option_2',
|
|
402
|
+
},
|
|
403
|
+
],
|
|
404
|
+
},
|
|
405
|
+
},
|
|
406
|
+
],
|
|
407
|
+
},
|
|
408
|
+
};
|
|
409
|
+
await this.setSkillSendMessageAndAssertSystemMessagesEqual({
|
|
410
|
+
callbacks,
|
|
411
|
+
}, [this.buildCallbacksMessage(callbacks)]);
|
|
412
|
+
}
|
|
413
|
+
async rendersDifferentSelectOptionsAsExpected() {
|
|
414
|
+
const callbacks = {
|
|
415
|
+
test: {
|
|
416
|
+
cb: async () => 'what the',
|
|
417
|
+
useThisWhenever: (0, test_utils_1.generateId)(),
|
|
418
|
+
parameters: [
|
|
419
|
+
{
|
|
420
|
+
name: (0, test_utils_1.generateId)(),
|
|
421
|
+
type: 'boolean',
|
|
422
|
+
},
|
|
423
|
+
{
|
|
424
|
+
name: (0, test_utils_1.generateId)(),
|
|
425
|
+
type: 'select',
|
|
426
|
+
options: {
|
|
427
|
+
choices: [
|
|
428
|
+
{
|
|
429
|
+
label: (0, test_utils_1.generateId)(),
|
|
430
|
+
value: (0, test_utils_1.generateId)(),
|
|
431
|
+
},
|
|
432
|
+
{
|
|
433
|
+
label: (0, test_utils_1.generateId)(),
|
|
434
|
+
value: (0, test_utils_1.generateId)(),
|
|
435
|
+
},
|
|
436
|
+
{
|
|
437
|
+
label: (0, test_utils_1.generateId)(),
|
|
438
|
+
value: (0, test_utils_1.generateId)(),
|
|
439
|
+
},
|
|
440
|
+
],
|
|
441
|
+
},
|
|
442
|
+
},
|
|
443
|
+
],
|
|
444
|
+
},
|
|
445
|
+
};
|
|
446
|
+
await this.setSkillSendMessageAndAssertSystemMessagesEqual({
|
|
447
|
+
callbacks,
|
|
448
|
+
}, [this.buildCallbacksMessage(callbacks)]);
|
|
449
|
+
}
|
|
450
|
+
async canSetReasoningEffortViaEnv() {
|
|
451
|
+
process.env.OPENAI_REASONING_EFFORT = (0, test_utils_1.generateId)();
|
|
452
|
+
const message = (0, test_utils_1.generateId)();
|
|
453
|
+
await this.setAndSendMessage(message);
|
|
454
|
+
this.assertLastCompletionEquals([
|
|
455
|
+
{
|
|
456
|
+
role: 'user',
|
|
457
|
+
content: message,
|
|
458
|
+
},
|
|
459
|
+
]);
|
|
460
|
+
}
|
|
461
|
+
buildPleaseKeepInMindMessage(pleaseKeepInMind) {
|
|
462
|
+
return {
|
|
463
|
+
role: 'developer',
|
|
464
|
+
content: this.renderPleaseKeepInMind(pleaseKeepInMind),
|
|
465
|
+
};
|
|
466
|
+
}
|
|
467
|
+
renderPleaseKeepInMind(pleaseKeepInMind) {
|
|
468
|
+
return `During this conversation, please keep the following in mind:\n\n${pleaseKeepInMind.map((m, idx) => `${idx + 1}. ${m}`).join('\n')}.`;
|
|
469
|
+
}
|
|
470
|
+
setMessageMemoryLimit(limit) {
|
|
471
|
+
process.env.OPENAI_MESSAGE_MEMORY_LIMIT = limit;
|
|
472
|
+
}
|
|
473
|
+
async setSkillSendMessageWithCallbacksAndAssertSystemMessagesEqualExpected(callbacks) {
|
|
474
|
+
await this.setSkillSendMessageAndAssertSystemMessagesEqual({
|
|
475
|
+
callbacks,
|
|
476
|
+
}, [this.buildCallbacksMessage(callbacks)]);
|
|
477
|
+
}
|
|
478
|
+
buildCallbacksMessage(callbacks) {
|
|
479
|
+
const keys = Object.keys(callbacks);
|
|
480
|
+
const descriptions = [];
|
|
481
|
+
for (const key of keys) {
|
|
482
|
+
const callback = callbacks[key];
|
|
483
|
+
let desc = `
|
|
484
|
+
<Function name="${key}">
|
|
485
|
+
<Description>For use when ${callback.useThisWhenever}</Description>`;
|
|
486
|
+
if (callback.parameters) {
|
|
487
|
+
desc += `<Parameters>`;
|
|
488
|
+
const parameters = [];
|
|
489
|
+
for (const parameter of callback.parameters) {
|
|
490
|
+
let parameterChoices = '';
|
|
491
|
+
if (parameter.type === 'select') {
|
|
492
|
+
const choices = parameter
|
|
493
|
+
.options.choices;
|
|
494
|
+
parameterChoices = `<Choices>\n${choices
|
|
495
|
+
.map((c) => `
|
|
496
|
+
<Choice>
|
|
497
|
+
<Label>${c.label}</Label>
|
|
498
|
+
<Value>${c.value}</Value>
|
|
499
|
+
</Choice>`)
|
|
500
|
+
.join('\n')}\n</Choices>`;
|
|
501
|
+
}
|
|
502
|
+
const parameterDefinition = `
|
|
503
|
+
<Parameter${parameter.isRequired ? ' required="true"' : ''}>
|
|
504
|
+
<Name>${parameter.name}</Name>
|
|
505
|
+
<Type>${parameter.type}</Type>
|
|
506
|
+
${parameter.description ? `<Description>${parameter.description}</Description>` : ''}${parameterChoices}
|
|
507
|
+
</Parameter>`;
|
|
508
|
+
parameters.push(parameterDefinition);
|
|
509
|
+
}
|
|
510
|
+
desc += parameters.join('\n') + `</Parameters>`;
|
|
511
|
+
}
|
|
512
|
+
descriptions.push(desc +
|
|
513
|
+
`
|
|
514
|
+
</Function>`);
|
|
515
|
+
}
|
|
516
|
+
const api = `<APIReference>\n\n${descriptions.join('\n\n')}</APIReference>`;
|
|
517
|
+
const message = `You have an API available to you to lookup answers. When you need the response of the function call to proceed, you can call a function using a custom markup we created that looks like this: <<FunctionName/>>. The API will respond with the results and then you can continue the conversation with your new knowledge. If the api call has parameters, call it like this: <<FunctionName>>{{parametersJsonEncoded}}<</FunctionName>>. Make sure to json encode the data and drop it between the function tags. Note: You can only make one API call at a time. The API is as follows (in xml format):\n\n${api}`;
|
|
518
|
+
return { role: 'developer', content: message };
|
|
519
|
+
}
|
|
520
|
+
renderStateMessage(state) {
|
|
521
|
+
return {
|
|
522
|
+
role: 'developer',
|
|
523
|
+
content: `The current state of this conversation is:\n\n${JSON.stringify(state)}. As the state is being updated, send it back to me in json format (something in can JSON.parse()) at the end of each response (it's not meant for reading, but for parsing, so don't call it out, but send it as we progress), surrounded by a boundary, like this: ${templates_1.STATE_BOUNDARY} { "fieldName": "fieldValue" } ${templates_1.STATE_BOUNDARY}`,
|
|
524
|
+
};
|
|
525
|
+
}
|
|
526
|
+
async setSkillSendMessageWithSchemaAndAssertSystemMessagesEqualExpected(schema) {
|
|
527
|
+
await this.setSkillSendMessageAndAssertSystemMessagesEqual({
|
|
528
|
+
stateSchema: schema,
|
|
529
|
+
}, [this.renderSchemaMessage(schema), this.renderStateMessage({})]);
|
|
530
|
+
}
|
|
531
|
+
renderSchemaMessage(schema) {
|
|
532
|
+
return {
|
|
533
|
+
role: 'developer',
|
|
534
|
+
content: `We will be tracking state for this conversation. The following schema is what we'll use to define the shape of the state:\n\n${JSON.stringify(schema)}`,
|
|
535
|
+
};
|
|
536
|
+
}
|
|
537
|
+
async setSkillSendMessageAndAssertSystemMessagesEqual(skillOptions, messages) {
|
|
538
|
+
const skill = this.Skill({
|
|
539
|
+
yourJobIfYouChooseToAcceptItIs: this.skillJob,
|
|
540
|
+
weAreDoneWhen: undefined,
|
|
541
|
+
...skillOptions,
|
|
542
|
+
});
|
|
543
|
+
this.bot.setSkill(skill);
|
|
544
|
+
const message = (0, test_utils_1.generateId)();
|
|
545
|
+
await this.setAndSendMessage(message);
|
|
546
|
+
this.assertLastCompletionEquals([
|
|
547
|
+
{
|
|
548
|
+
role: 'developer',
|
|
549
|
+
content: `For this interaction, your job is ${this.skillJob}.`,
|
|
550
|
+
},
|
|
551
|
+
...messages,
|
|
552
|
+
{
|
|
553
|
+
role: 'user',
|
|
554
|
+
content: message,
|
|
555
|
+
},
|
|
556
|
+
]);
|
|
557
|
+
}
|
|
558
|
+
assertLastCompletionEquals(expected) {
|
|
559
|
+
const params = {
|
|
560
|
+
model: 'gpt-4o',
|
|
561
|
+
messages: [
|
|
562
|
+
{
|
|
563
|
+
role: 'developer',
|
|
564
|
+
content: `You are ${this.youAre}.`,
|
|
565
|
+
},
|
|
566
|
+
...expected,
|
|
567
|
+
],
|
|
568
|
+
};
|
|
569
|
+
if (process.env.OPENAI_REASONING_EFFORT) {
|
|
570
|
+
params.reasoning_effort = process.env
|
|
571
|
+
.OPENAI_REASONING_EFFORT;
|
|
572
|
+
}
|
|
573
|
+
test_utils_1.assert.isEqualDeep(this.stripTabsAndNewlinesFromCompletion(SpyOpenAiApi_1.default.lastSentCompletion), this.stripTabsAndNewlinesFromCompletion(params), 'Last completion does not match expected.');
|
|
574
|
+
}
|
|
575
|
+
stripTabsAndNewlinesFromCompletion(completion) {
|
|
576
|
+
const { messages } = completion;
|
|
577
|
+
completion.messages = messages.map((message) => ({
|
|
578
|
+
...message,
|
|
579
|
+
content: typeof message.content === 'string'
|
|
580
|
+
? message.content
|
|
581
|
+
.replace(/\t|\n|/g, '')
|
|
582
|
+
.replace(/\s+/g, ' ')
|
|
583
|
+
: message.content,
|
|
584
|
+
}));
|
|
585
|
+
return completion;
|
|
586
|
+
}
|
|
587
|
+
async assertResponseEquals(expected) {
|
|
588
|
+
const response = await this.setAndSendMessage();
|
|
589
|
+
test_utils_1.assert.isEqual(response, expected, 'Response does not match expected value.');
|
|
590
|
+
}
|
|
591
|
+
async setAndSendMessage(message, options) {
|
|
592
|
+
this.bot.setMessages([
|
|
593
|
+
{
|
|
594
|
+
from: 'Me',
|
|
595
|
+
message: message ?? (0, test_utils_1.generateId)(),
|
|
596
|
+
},
|
|
597
|
+
]);
|
|
598
|
+
return await this.sendMessage(options);
|
|
599
|
+
}
|
|
600
|
+
async sendMessage(options) {
|
|
601
|
+
return await this.openAi.sendMessage(this.bot, options);
|
|
602
|
+
}
|
|
603
|
+
OpenAi(key) {
|
|
604
|
+
return OpenAi_1.default.Adapter(key ?? (0, test_utils_1.generateId)());
|
|
605
|
+
}
|
|
606
|
+
setupSpys() {
|
|
607
|
+
OpenAi_1.default.OpenAI = SpyOpenAiApi_1.default;
|
|
608
|
+
SpyOpenAiApi_1.default.lastSentCompletion = undefined;
|
|
609
|
+
}
|
|
610
|
+
};
|
|
611
|
+
__decorate([
|
|
612
|
+
(0, test_utils_1.test)()
|
|
613
|
+
], OpenAiTest.prototype, "throwsWhenMissingKey", null);
|
|
614
|
+
__decorate([
|
|
615
|
+
(0, test_utils_1.test)()
|
|
616
|
+
], OpenAiTest.prototype, "instantiatingOpenAiSetsKeyToConfig", null);
|
|
617
|
+
__decorate([
|
|
618
|
+
(0, test_utils_1.test)()
|
|
619
|
+
], OpenAiTest.prototype, "canSendMessage", null);
|
|
620
|
+
__decorate([
|
|
621
|
+
(0, test_utils_1.test)()
|
|
622
|
+
], OpenAiTest.prototype, "returnsResponseFromSendMessage", null);
|
|
623
|
+
__decorate([
|
|
624
|
+
(0, test_utils_1.test)()
|
|
625
|
+
], OpenAiTest.prototype, "trimsResponseMessage", null);
|
|
626
|
+
__decorate([
|
|
627
|
+
(0, test_utils_1.test)()
|
|
628
|
+
], OpenAiTest.prototype, "noResponseReturnsDefaultErrorMesssage", null);
|
|
629
|
+
__decorate([
|
|
630
|
+
(0, test_utils_1.test)()
|
|
631
|
+
], OpenAiTest.prototype, "sendMessageCanAcceptModel", null);
|
|
632
|
+
__decorate([
|
|
633
|
+
(0, test_utils_1.test)()
|
|
634
|
+
], OpenAiTest.prototype, "sendsAllMessagesToOpenAi", null);
|
|
635
|
+
__decorate([
|
|
636
|
+
(0, test_utils_1.test)()
|
|
637
|
+
], OpenAiTest.prototype, "sendsExpectedMessageIfSkillIsPassedWithJustJustJob", null);
|
|
638
|
+
__decorate([
|
|
639
|
+
(0, test_utils_1.test)()
|
|
640
|
+
], OpenAiTest.prototype, "sendsExpectedMessageIfSkillPassedWithWhenWeAreDone", null);
|
|
641
|
+
__decorate([
|
|
642
|
+
(0, test_utils_1.test)()
|
|
643
|
+
], OpenAiTest.prototype, "sendsExpectedWithOnePleaseKeepInMind", null);
|
|
644
|
+
__decorate([
|
|
645
|
+
(0, test_utils_1.test)()
|
|
646
|
+
], OpenAiTest.prototype, "sendsExpectedWithMultiplePleaseKeepInMind", null);
|
|
647
|
+
__decorate([
|
|
648
|
+
(0, test_utils_1.test)()
|
|
649
|
+
], OpenAiTest.prototype, "sendsExpectedWithSchema", null);
|
|
650
|
+
__decorate([
|
|
651
|
+
(0, test_utils_1.test)()
|
|
652
|
+
], OpenAiTest.prototype, "sendsExpectedWithState", null);
|
|
653
|
+
__decorate([
|
|
654
|
+
(0, test_utils_1.test)()
|
|
655
|
+
], OpenAiTest.prototype, "sendsExpectedMessageWithSimpleCallback", null);
|
|
656
|
+
__decorate([
|
|
657
|
+
(0, test_utils_1.test)()
|
|
658
|
+
], OpenAiTest.prototype, "sendsExectedMessageWithDifferentSimpleCallback", null);
|
|
659
|
+
__decorate([
|
|
660
|
+
(0, test_utils_1.test)()
|
|
661
|
+
], OpenAiTest.prototype, "sendsExpectedMessagesWithMultipleCallbacks", null);
|
|
662
|
+
__decorate([
|
|
663
|
+
(0, test_utils_1.test)()
|
|
664
|
+
], OpenAiTest.prototype, "sendsExpectedWithCallbackWithParameters", null);
|
|
665
|
+
__decorate([
|
|
666
|
+
(0, test_utils_1.test)()
|
|
667
|
+
], OpenAiTest.prototype, "sendsExpectedWithCallbackParameterWithDescription", null);
|
|
668
|
+
__decorate([
|
|
669
|
+
(0, test_utils_1.test)()
|
|
670
|
+
], OpenAiTest.prototype, "sendsExpectedWithCallbackParmaterThatIsRequired", null);
|
|
671
|
+
__decorate([
|
|
672
|
+
(0, test_utils_1.test)()
|
|
673
|
+
], OpenAiTest.prototype, "sendsExpectedWithMultipleCallbackParameters", null);
|
|
674
|
+
__decorate([
|
|
675
|
+
(0, test_utils_1.test)()
|
|
676
|
+
], OpenAiTest.prototype, "chatHistoryCanBeLimitedByEnvTo1", null);
|
|
677
|
+
__decorate([
|
|
678
|
+
(0, test_utils_1.test)()
|
|
679
|
+
], OpenAiTest.prototype, "chatHistoryCanBeLimitedByEnvTo2", null);
|
|
680
|
+
__decorate([
|
|
681
|
+
(0, test_utils_1.test)()
|
|
682
|
+
], OpenAiTest.prototype, "pleaseKeepInMindIsLast", null);
|
|
683
|
+
__decorate([
|
|
684
|
+
(0, test_utils_1.test)()
|
|
685
|
+
], OpenAiTest.prototype, "canSendImageAsBase64", null);
|
|
686
|
+
__decorate([
|
|
687
|
+
(0, test_utils_1.test)()
|
|
688
|
+
], OpenAiTest.prototype, "rendersSelectOptionsAsExpected", null);
|
|
689
|
+
__decorate([
|
|
690
|
+
(0, test_utils_1.test)()
|
|
691
|
+
], OpenAiTest.prototype, "rendersDifferentSelectOptionsAsExpected", null);
|
|
692
|
+
__decorate([
|
|
693
|
+
(0, test_utils_1.test)()
|
|
694
|
+
], OpenAiTest.prototype, "canSetReasoningEffortViaEnv", null);
|
|
695
|
+
OpenAiTest = __decorate([
|
|
696
|
+
(0, test_utils_1.suite)()
|
|
697
|
+
], OpenAiTest);
|
|
698
|
+
exports.default = OpenAiTest;
|
|
699
|
+
//# sourceMappingURL=OpenAi.test.js.map
|