@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.
Files changed (193) hide show
  1. package/README.md +1 -1
  2. package/build/.spruce/errors/errors.types.js +1 -0
  3. package/build/.spruce/errors/errors.types.js.map +1 -0
  4. package/build/.spruce/errors/options.types.js +1 -0
  5. package/build/.spruce/errors/options.types.js.map +1 -0
  6. package/build/.spruce/errors/sprucebotLlm/callbackError.schema.js +1 -0
  7. package/build/.spruce/errors/sprucebotLlm/callbackError.schema.js.map +1 -0
  8. package/build/.spruce/errors/sprucebotLlm/invalidCallback.schema.js +1 -0
  9. package/build/.spruce/errors/sprucebotLlm/invalidCallback.schema.js.map +1 -0
  10. package/build/.spruce/errors/sprucebotLlm/noBotInstanceSet.schema.js +1 -0
  11. package/build/.spruce/errors/sprucebotLlm/noBotInstanceSet.schema.js.map +1 -0
  12. package/build/.spruce/event-cache.json +1 -0
  13. package/build/.spruce/schemas/fields/fieldClassMap.js +1 -0
  14. package/build/.spruce/schemas/fields/fieldClassMap.js.map +1 -0
  15. package/build/.spruce/schemas/fields/fields.types.js +1 -0
  16. package/build/.spruce/schemas/fields/fields.types.js.map +1 -0
  17. package/build/__tests__/behavioral/LlmBot.test.d.ts +55 -0
  18. package/build/__tests__/behavioral/LlmBot.test.js +607 -0
  19. package/build/__tests__/behavioral/LlmBot.test.js.map +1 -0
  20. package/build/__tests__/behavioral/SprucebotLlmFactory.test.d.ts +16 -0
  21. package/build/__tests__/behavioral/SprucebotLlmFactory.test.js +132 -0
  22. package/build/__tests__/behavioral/SprucebotLlmFactory.test.js.map +1 -0
  23. package/build/__tests__/behavioral/adapters/OpenAi.test.d.ts +52 -0
  24. package/build/__tests__/behavioral/adapters/OpenAi.test.js +699 -0
  25. package/build/__tests__/behavioral/adapters/OpenAi.test.js.map +1 -0
  26. package/build/__tests__/behavioral/prompts/PromptGenerator.test.d.ts +20 -0
  27. package/build/__tests__/behavioral/prompts/PromptGenerator.test.js +211 -0
  28. package/build/__tests__/behavioral/prompts/PromptGenerator.test.js.map +1 -0
  29. package/build/__tests__/behavioral/prompts/ResponseParser.test.d.ts +35 -0
  30. package/build/__tests__/behavioral/prompts/ResponseParser.test.js +312 -0
  31. package/build/__tests__/behavioral/prompts/ResponseParser.test.js.map +1 -0
  32. package/build/__tests__/behavioral/skills/Skill.test.d.ts +19 -0
  33. package/build/__tests__/behavioral/skills/Skill.test.js +188 -0
  34. package/build/__tests__/behavioral/skills/Skill.test.js.map +1 -0
  35. package/build/__tests__/behavioral/testing/MockLlmSkill.test.d.ts +37 -0
  36. package/build/__tests__/behavioral/testing/MockLlmSkill.test.js +340 -0
  37. package/build/__tests__/behavioral/testing/MockLlmSkill.test.js.map +1 -0
  38. package/build/__tests__/behavioral/testing/SpyLlmBot.test.d.ts +4 -0
  39. package/build/__tests__/behavioral/testing/SpyLlmBot.test.js +34 -0
  40. package/build/__tests__/behavioral/testing/SpyLlmBot.test.js.map +1 -0
  41. package/build/__tests__/support/AbstractLlmTest.d.ts +14 -0
  42. package/build/__tests__/support/AbstractLlmTest.js +67 -0
  43. package/build/__tests__/support/AbstractLlmTest.js.map +1 -0
  44. package/build/__tests__/support/schemas/carSchema.d.ts +16 -0
  45. package/build/__tests__/support/schemas/carSchema.js +19 -0
  46. package/build/__tests__/support/schemas/carSchema.js.map +1 -0
  47. package/build/__tests__/support/schemas/personSchema.d.ts +23 -0
  48. package/build/__tests__/support/schemas/personSchema.js +37 -0
  49. package/build/__tests__/support/schemas/personSchema.js.map +1 -0
  50. package/build/__tests__/support/schemas/personWithDefaultsSchema.d.ts +13 -0
  51. package/build/__tests__/support/schemas/personWithDefaultsSchema.js +18 -0
  52. package/build/__tests__/support/schemas/personWithDefaultsSchema.js.map +1 -0
  53. package/build/bots/PromptGenerator.js +1 -0
  54. package/build/bots/PromptGenerator.js.map +1 -0
  55. package/build/bots/SprucebotLlmBotImpl.js +9 -4
  56. package/build/bots/SprucebotLlmBotImpl.js.map +1 -0
  57. package/build/bots/SprucebotLlmFactory.js +1 -0
  58. package/build/bots/SprucebotLlmFactory.js.map +1 -0
  59. package/build/bots/SprucebotLlmSkillImpl.js +1 -0
  60. package/build/bots/SprucebotLlmSkillImpl.js.map +1 -0
  61. package/build/bots/adapters/OpenAi.js +1 -0
  62. package/build/bots/adapters/OpenAi.js.map +1 -0
  63. package/build/bots/adapters/OpenAiMessageBuilder.js +1 -0
  64. package/build/bots/adapters/OpenAiMessageBuilder.js.map +1 -0
  65. package/build/bots/adapters/SpyOpenAiApi.js +1 -0
  66. package/build/bots/adapters/SpyOpenAiApi.js.map +1 -0
  67. package/build/bots/templates.js +1 -0
  68. package/build/bots/templates.js.map +1 -0
  69. package/build/chat.js +1 -0
  70. package/build/chat.js.map +1 -0
  71. package/build/chatWithImages.js +1 -0
  72. package/build/chatWithImages.js.map +1 -0
  73. package/build/errors/SpruceError.js +1 -0
  74. package/build/errors/SpruceError.js.map +1 -0
  75. package/build/errors/callbackError.builder.js +1 -0
  76. package/build/errors/callbackError.builder.js.map +1 -0
  77. package/build/errors/invalidCallback.builder.js +1 -0
  78. package/build/errors/invalidCallback.builder.js.map +1 -0
  79. package/build/errors/noBotInstanceSet.builder.js +1 -0
  80. package/build/errors/noBotInstanceSet.builder.js.map +1 -0
  81. package/build/examples/buildCallbackSkill.js +1 -0
  82. package/build/examples/buildCallbackSkill.js.map +1 -0
  83. package/build/examples/buildFileTransformerSkill.js +1 -0
  84. package/build/examples/buildFileTransformerSkill.js.map +1 -0
  85. package/build/examples/buildJokeSkill.js +1 -0
  86. package/build/examples/buildJokeSkill.js.map +1 -0
  87. package/build/examples/buildProfileSkill.js +1 -0
  88. package/build/examples/buildProfileSkill.js.map +1 -0
  89. package/build/examples/buildReceptionistSkill.js +1 -0
  90. package/build/examples/buildReceptionistSkill.js.map +1 -0
  91. package/build/fineTuningSprucebot/constants/DIRECTORY_SHARES.js +1 -0
  92. package/build/fineTuningSprucebot/constants/DIRECTORY_SHARES.js.map +1 -0
  93. package/build/fineTuningSprucebot/constants/FIRST_MESSAGES.js +1 -0
  94. package/build/fineTuningSprucebot/constants/FIRST_MESSAGES.js.map +1 -0
  95. package/build/fineTuningSprucebot/constants/GREETINGS.js +1 -0
  96. package/build/fineTuningSprucebot/constants/GREETINGS.js.map +1 -0
  97. package/build/fineTuningSprucebot/constants/OFF_THE_RAILS_CONVERSATIONS.js +1 -0
  98. package/build/fineTuningSprucebot/constants/OFF_THE_RAILS_CONVERSATIONS.js.map +1 -0
  99. package/build/fineTuningSprucebot/constants/TOPICS.js +1 -0
  100. package/build/fineTuningSprucebot/constants/TOPICS.js.map +1 -0
  101. package/build/fineTuningSprucebot/generateSamples.js +1 -0
  102. package/build/fineTuningSprucebot/generateSamples.js.map +1 -0
  103. package/build/fineTuningSprucebot/support.js +1 -0
  104. package/build/fineTuningSprucebot/support.js.map +1 -0
  105. package/build/fineTuningSprucebot/types.js +1 -0
  106. package/build/fineTuningSprucebot/types.js.map +1 -0
  107. package/build/index.js +1 -0
  108. package/build/index.js.map +1 -0
  109. package/build/llm.types.js +1 -0
  110. package/build/llm.types.js.map +1 -0
  111. package/build/parsingResponses/ResponseParser.js +1 -0
  112. package/build/parsingResponses/ResponseParser.js.map +1 -0
  113. package/build/parsingResponses/renderPlaceholder.js +1 -0
  114. package/build/parsingResponses/renderPlaceholder.js.map +1 -0
  115. package/build/tests/MockLlmSkill.js +1 -0
  116. package/build/tests/MockLlmSkill.js.map +1 -0
  117. package/build/tests/SpyAdapter.js +1 -0
  118. package/build/tests/SpyAdapter.js.map +1 -0
  119. package/build/tests/SpyLlmBot.js +1 -0
  120. package/build/tests/SpyLlmBot.js.map +1 -0
  121. package/package.json +14 -14
  122. package/build/esm/.spruce/errors/errors.types.d.ts +0 -52
  123. package/build/esm/.spruce/errors/errors.types.js +0 -1
  124. package/build/esm/.spruce/errors/options.types.d.ts +0 -13
  125. package/build/esm/.spruce/errors/options.types.js +0 -1
  126. package/build/esm/bots/PromptGenerator.d.ts +0 -22
  127. package/build/esm/bots/PromptGenerator.js +0 -74
  128. package/build/esm/bots/SprucebotLlmBotImpl.d.ts +0 -26
  129. package/build/esm/bots/SprucebotLlmBotImpl.js +0 -159
  130. package/build/esm/bots/SprucebotLlmFactory.d.ts +0 -15
  131. package/build/esm/bots/SprucebotLlmFactory.js +0 -41
  132. package/build/esm/bots/SprucebotLlmSkillImpl.d.ts +0 -12
  133. package/build/esm/bots/SprucebotLlmSkillImpl.js +0 -47
  134. package/build/esm/bots/adapters/OpenAi.d.ts +0 -11
  135. package/build/esm/bots/adapters/OpenAi.js +0 -46
  136. package/build/esm/bots/adapters/OpenAiMessageBuilder.d.ts +0 -18
  137. package/build/esm/bots/adapters/OpenAiMessageBuilder.js +0 -153
  138. package/build/esm/bots/adapters/SpyOpenAiApi.d.ts +0 -19
  139. package/build/esm/bots/adapters/SpyOpenAiApi.js +0 -49
  140. package/build/esm/bots/templates.d.ts +0 -4
  141. package/build/esm/bots/templates.js +0 -68
  142. package/build/esm/chat.d.ts +0 -1
  143. package/build/esm/chat.js +0 -53
  144. package/build/esm/chatWithImages.d.ts +0 -1
  145. package/build/esm/chatWithImages.js +0 -46
  146. package/build/esm/errors/SpruceError.d.ts +0 -6
  147. package/build/esm/errors/SpruceError.js +0 -25
  148. package/build/esm/errors/callbackError.builder.d.ts +0 -6
  149. package/build/esm/errors/callbackError.builder.js +0 -6
  150. package/build/esm/errors/invalidCallback.builder.d.ts +0 -17
  151. package/build/esm/errors/invalidCallback.builder.js +0 -17
  152. package/build/esm/errors/noBotInstanceSet.builder.d.ts +0 -6
  153. package/build/esm/errors/noBotInstanceSet.builder.js +0 -6
  154. package/build/esm/examples/buildCallbackSkill.d.ts +0 -2
  155. package/build/esm/examples/buildCallbackSkill.js +0 -57
  156. package/build/esm/examples/buildFileTransformerSkill.d.ts +0 -2
  157. package/build/esm/examples/buildFileTransformerSkill.js +0 -25
  158. package/build/esm/examples/buildJokeSkill.d.ts +0 -2
  159. package/build/esm/examples/buildJokeSkill.js +0 -12
  160. package/build/esm/examples/buildProfileSkill.d.ts +0 -2
  161. package/build/esm/examples/buildProfileSkill.js +0 -30
  162. package/build/esm/examples/buildReceptionistSkill.d.ts +0 -2
  163. package/build/esm/examples/buildReceptionistSkill.js +0 -16
  164. package/build/esm/fineTuningSprucebot/constants/DIRECTORY_SHARES.d.ts +0 -1
  165. package/build/esm/fineTuningSprucebot/constants/DIRECTORY_SHARES.js +0 -7
  166. package/build/esm/fineTuningSprucebot/constants/FIRST_MESSAGES.d.ts +0 -1
  167. package/build/esm/fineTuningSprucebot/constants/FIRST_MESSAGES.js +0 -17
  168. package/build/esm/fineTuningSprucebot/constants/GREETINGS.d.ts +0 -1
  169. package/build/esm/fineTuningSprucebot/constants/GREETINGS.js +0 -22
  170. package/build/esm/fineTuningSprucebot/constants/OFF_THE_RAILS_CONVERSATIONS.d.ts +0 -2
  171. package/build/esm/fineTuningSprucebot/constants/OFF_THE_RAILS_CONVERSATIONS.js +0 -32
  172. package/build/esm/fineTuningSprucebot/constants/TOPICS.d.ts +0 -2
  173. package/build/esm/fineTuningSprucebot/constants/TOPICS.js +0 -314
  174. package/build/esm/fineTuningSprucebot/generateSamples.d.ts +0 -1
  175. package/build/esm/fineTuningSprucebot/generateSamples.js +0 -41
  176. package/build/esm/fineTuningSprucebot/support.d.ts +0 -12
  177. package/build/esm/fineTuningSprucebot/support.js +0 -60
  178. package/build/esm/fineTuningSprucebot/types.d.ts +0 -15
  179. package/build/esm/fineTuningSprucebot/types.js +0 -1
  180. package/build/esm/index.d.ts +0 -10
  181. package/build/esm/index.js +0 -10
  182. package/build/esm/llm.types.d.ts +0 -84
  183. package/build/esm/llm.types.js +0 -6
  184. package/build/esm/parsingResponses/ResponseParser.d.ts +0 -18
  185. package/build/esm/parsingResponses/ResponseParser.js +0 -115
  186. package/build/esm/parsingResponses/renderPlaceholder.d.ts +0 -1
  187. package/build/esm/parsingResponses/renderPlaceholder.js +0 -4
  188. package/build/esm/tests/MockLlmSkill.d.ts +0 -14
  189. package/build/esm/tests/MockLlmSkill.js +0 -60
  190. package/build/esm/tests/SpyAdapter.d.ts +0 -8
  191. package/build/esm/tests/SpyAdapter.js +0 -21
  192. package/build/esm/tests/SpyLlmBot.d.ts +0 -12
  193. package/build/esm/tests/SpyLlmBot.js +0 -20
@@ -0,0 +1,607 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const test_utils_1 = require("@sprucelabs/test-utils");
13
+ const SprucebotLlmBotImpl_1 = __importDefault(require("../../bots/SprucebotLlmBotImpl"));
14
+ const SpruceError_1 = __importDefault(require("../../errors/SpruceError"));
15
+ const ResponseParser_1 = __importDefault(require("../../parsingResponses/ResponseParser"));
16
+ const AbstractLlmTest_1 = __importDefault(require("../support/AbstractLlmTest"));
17
+ const carSchema_1 = require("../support/schemas/carSchema");
18
+ const personSchema_1 = require("../support/schemas/personSchema");
19
+ const personWithDefaultsSchema_1 = require("../support/schemas/personWithDefaultsSchema");
20
+ let LlmBotTest = class LlmBotTest extends AbstractLlmTest_1.default {
21
+ async beforeEach() {
22
+ await super.beforeEach();
23
+ this.bot = this.Bot({
24
+ stateSchema: personSchema_1.personSchema,
25
+ });
26
+ this.parser = new FakeResponseParser();
27
+ ResponseParser_1.default.setInstance(this.parser);
28
+ }
29
+ async throwsWhenSendingBadMessage() {
30
+ //@ts-ignore
31
+ const err = await test_utils_1.assert.doesThrowAsync(() => this.bot.sendMessage());
32
+ test_utils_1.errorAssert.assertError(err, 'MISSING_PARAMETERS', {
33
+ parameters: ['message'],
34
+ });
35
+ }
36
+ async sendsItselfToTheLlmAdapter() {
37
+ const message = (0, test_utils_1.generateId)();
38
+ await this.sendMessage(message);
39
+ test_utils_1.assert.isEqual(this.adapter.lastBot, this.bot);
40
+ }
41
+ async serializesAsExpected() {
42
+ const youAre = (0, test_utils_1.generateId)();
43
+ const state = {
44
+ favoriteColor: 'red',
45
+ firstName: (0, test_utils_1.generateId)(),
46
+ };
47
+ this.bot = this.Bot({
48
+ youAre,
49
+ stateSchema: personSchema_1.personSchema,
50
+ state,
51
+ });
52
+ test_utils_1.assert.isEqualDeep(this.bot.serialize(), {
53
+ youAre,
54
+ stateSchema: personSchema_1.personSchema,
55
+ state,
56
+ messages: [],
57
+ skill: undefined,
58
+ });
59
+ }
60
+ async canUpdateState() {
61
+ const newState = {
62
+ favoriteColor: 'blue',
63
+ firstName: (0, test_utils_1.generateId)(),
64
+ };
65
+ await this.updateState(newState);
66
+ this.assertSerializedStateEquals(newState);
67
+ }
68
+ async updatingStateMixesIn() {
69
+ const state = {
70
+ make: 'Ford',
71
+ };
72
+ this.bot = this.Bot({
73
+ stateSchema: carSchema_1.carSchema,
74
+ state,
75
+ });
76
+ const newState = {
77
+ model: 'F-150',
78
+ };
79
+ await this.updateState(newState);
80
+ const expected = {
81
+ ...state,
82
+ ...newState,
83
+ };
84
+ this.assertSerializedStateEquals(expected);
85
+ }
86
+ async stateHonorsDefaultValues() {
87
+ this.bot = this.Bot({
88
+ stateSchema: personWithDefaultsSchema_1.personWithDefaultsSchema,
89
+ });
90
+ this.assertSerializedStateEquals({
91
+ firstName: 'John',
92
+ lastName: 'Doe',
93
+ });
94
+ }
95
+ async updatingStateEmitsDidUpdateState() {
96
+ let wasHit = false;
97
+ await this.bot.on('did-update-state', () => {
98
+ wasHit = true;
99
+ });
100
+ await this.updateState({
101
+ favoriteColor: 'blue',
102
+ });
103
+ test_utils_1.assert.isTrue(wasHit);
104
+ }
105
+ async knowsWhenDone() {
106
+ test_utils_1.assert.isFalse(this.bot.getIsDone());
107
+ this.bot.markAsDone();
108
+ test_utils_1.assert.isTrue(this.bot.getIsDone());
109
+ }
110
+ async sendMessageReturnsResponseFromAdapter() {
111
+ this.adapter.messageResponse = (0, test_utils_1.generateId)();
112
+ const message = (0, test_utils_1.generateId)();
113
+ const response = await this.sendMessage(message);
114
+ test_utils_1.assert.isEqual(response, this.adapter.messageResponse);
115
+ }
116
+ async tracksMessageHistory() {
117
+ const message = (0, test_utils_1.generateId)();
118
+ this.adapter.messageResponse = (0, test_utils_1.generateId)();
119
+ await this.sendMessage(message);
120
+ const { messages } = this.bot.serialize();
121
+ test_utils_1.assert.isEqualDeep(messages, [
122
+ {
123
+ from: 'Me',
124
+ message,
125
+ },
126
+ {
127
+ from: 'You',
128
+ message: this.adapter.messageResponse,
129
+ },
130
+ ]);
131
+ }
132
+ async trackedMessageUsesResponseFromAdapterNotParser() {
133
+ this.setupBotWithSkill({
134
+ callbacks: {
135
+ helloWorld: {
136
+ cb: () => 'Hello, World!',
137
+ useThisWhenever: 'Hello, World!',
138
+ },
139
+ },
140
+ });
141
+ this.adapter.messageResponse =
142
+ 'should use this response to track message history';
143
+ this.parser.response.message = (0, test_utils_1.generateId)();
144
+ await this.sendMessage((0, test_utils_1.generateId)());
145
+ const { messages } = this.bot.serialize();
146
+ test_utils_1.assert.isEqual(messages[1].message, 'should use this response to track message history');
147
+ }
148
+ async isDoneWhenParsesSaysSo() {
149
+ this.setParserResponseIsDone(true);
150
+ await this.sendMessage((0, test_utils_1.generateId)());
151
+ test_utils_1.assert.isTrue(this.bot.getIsDone());
152
+ }
153
+ async notDoneUntilDone() {
154
+ this.setParserResponseIsDone(false);
155
+ await this.sendMessage((0, test_utils_1.generateId)());
156
+ test_utils_1.assert.isFalse(this.bot.getIsDone());
157
+ }
158
+ async botActuallySendsResponseToParser() {
159
+ this.adapter.messageResponse = (0, test_utils_1.generateId)();
160
+ await this.sendMessage((0, test_utils_1.generateId)());
161
+ test_utils_1.assert.isEqual(this.parser.lastMessage, this.adapter.messageResponse);
162
+ }
163
+ async enheritesStateSchemaFromSkillWhenSerializing() {
164
+ this.setupBotWithSkill({
165
+ stateSchema: personSchema_1.personSchema,
166
+ });
167
+ const { stateSchema } = this.serialize();
168
+ test_utils_1.assert.isEqualDeep(stateSchema, personSchema_1.personSchema);
169
+ }
170
+ async inheritsStateFromSkillWhenSerializing(skillState) {
171
+ this.setupBotWithSkill({
172
+ stateSchema: personSchema_1.personSchema,
173
+ state: skillState,
174
+ });
175
+ const { state } = this.bot.serialize();
176
+ test_utils_1.assert.isEqualDeep(state, skillState);
177
+ }
178
+ async stateIsSentBackToBotWhenParsing(state) {
179
+ this.bot = this.Bot({
180
+ stateSchema: personSchema_1.personSchema,
181
+ });
182
+ await this.sendMessageWithResponseState(state);
183
+ this.assertSerializedStateEquals(state);
184
+ }
185
+ async emitsDidUpdateStateWhenStateIsUpdated() {
186
+ this.bot = this.Bot({
187
+ stateSchema: personSchema_1.personSchema,
188
+ });
189
+ let wasHit = false;
190
+ await this.bot.on('did-update-state', () => {
191
+ wasHit = true;
192
+ });
193
+ await this.sendMessageWithResponseState({
194
+ favoriteColor: 'blue',
195
+ });
196
+ test_utils_1.assert.isTrue(wasHit);
197
+ }
198
+ async shouldNotEmitUpdateItNoStatePassed() {
199
+ let wasHit = false;
200
+ await this.bot.on('did-update-state', () => {
201
+ wasHit = true;
202
+ });
203
+ await this.sendRandomMessage();
204
+ test_utils_1.assert.isFalse(wasHit);
205
+ }
206
+ async setsStateInResponseToSkillIfSkillHasState(state) {
207
+ const skill = this.setupBotWithSkill({
208
+ stateSchema: personSchema_1.personSchema,
209
+ });
210
+ await this.sendMessageWithResponseState(state);
211
+ test_utils_1.assert.isEqualDeep(skill.serialize().state, state);
212
+ test_utils_1.assert.isUndefined(this.bot.getState());
213
+ }
214
+ async doesntEmitDidChangeOnSkillIfStateIsNotOnSkill() {
215
+ const skill = this.setupBotWithSkill({});
216
+ let wasHit = false;
217
+ await skill.on('did-update-state', () => {
218
+ wasHit = true;
219
+ });
220
+ await this.sendRandomMessage();
221
+ test_utils_1.assert.isFalse(wasHit);
222
+ }
223
+ async passesCallbacksToParserOnResponse() {
224
+ const callbacks = {
225
+ foo: {
226
+ cb: () => 'hey',
227
+ useThisWhenever: 'hey',
228
+ },
229
+ };
230
+ this.setupBotWithSkill({
231
+ callbacks,
232
+ });
233
+ await this.sendRandomMessage();
234
+ test_utils_1.assert.isEqual(this.parser.lastCallbacks, callbacks, 'did not pass callbacks to parser');
235
+ }
236
+ async canSwapSkillMidWayThrough() {
237
+ this.setupBotWithSkill({});
238
+ const skill2 = this.Skill();
239
+ this.bot.setSkill(skill2);
240
+ test_utils_1.assert.isEqual(this.bot.getSkill(), skill2);
241
+ }
242
+ async defaultLimitsMessagesTo10() {
243
+ await this.sendRandomMessage();
244
+ this.assertTotalMessagesTracked(2);
245
+ await this.sendRandomMessage();
246
+ this.assertTotalMessagesTracked(4);
247
+ await this.sendRandomMessage();
248
+ await this.sendRandomMessage();
249
+ await this.sendRandomMessage();
250
+ const body = await this.sendRandomMessage();
251
+ this.assertTotalMessagesTracked(10);
252
+ test_utils_1.assert.doesInclude(this.messages, { message: body });
253
+ }
254
+ async canSetMemory() {
255
+ SprucebotLlmBotImpl_1.default.messageMemoryLimit = 5;
256
+ await this.sendRandomMessage();
257
+ this.assertTotalMessagesTracked(2);
258
+ await this.sendRandomMessage();
259
+ this.assertTotalMessagesTracked(4);
260
+ await this.sendRandomMessage();
261
+ await this.sendRandomMessage();
262
+ await this.sendRandomMessage();
263
+ this.assertTotalMessagesTracked(5);
264
+ }
265
+ async settingSkillToBotSetsToNotDone() {
266
+ this.bot.markAsDone();
267
+ this.bot.setSkill(this.Skill());
268
+ test_utils_1.assert.isFalse(this.bot.getIsDone());
269
+ }
270
+ async canClearMessageHistory() {
271
+ await this.sendRandomMessage();
272
+ this.bot.clearMessageHistory();
273
+ test_utils_1.assert.isLength(this.messages, 0);
274
+ }
275
+ async botRespondingCallsMessageCallback() {
276
+ this.setParserResponseMessage();
277
+ let passedMessage;
278
+ await this.sendMessage((0, test_utils_1.generateId)(), (message) => {
279
+ passedMessage = message;
280
+ });
281
+ test_utils_1.assert.isEqual(passedMessage, this.parserResponse);
282
+ }
283
+ async messageCallbackFiredAfterAllMessagesTracked() {
284
+ await this.sendMessage((0, test_utils_1.generateId)(), () => {
285
+ this.assertTotalMessagesTracked(2);
286
+ });
287
+ }
288
+ async ifParserRespondsWithCallbackResultsTheyAreSentImmediately() {
289
+ const functionCallResponse = (0, test_utils_1.generateId)();
290
+ const response1 = (0, test_utils_1.generateId)();
291
+ const response2 = (0, test_utils_1.generateId)();
292
+ this.adapter.messageResponse = response1;
293
+ this.setParserResponseCallbackResults(functionCallResponse);
294
+ let passedMessages = [];
295
+ const message = await this.sendRandomMessage((message) => {
296
+ passedMessages.push(message);
297
+ this.setParserResponseCallbackResults(undefined);
298
+ this.adapter.messageResponse = response2;
299
+ });
300
+ test_utils_1.assert.isEqualDeep(this.messages, [
301
+ {
302
+ from: 'Me',
303
+ message,
304
+ },
305
+ {
306
+ from: 'You',
307
+ message: response1,
308
+ },
309
+ {
310
+ from: 'Api',
311
+ message: `API Results: ${functionCallResponse}`,
312
+ },
313
+ {
314
+ from: 'You',
315
+ message: response2,
316
+ },
317
+ ]);
318
+ test_utils_1.assert.isEqualDeep(passedMessages, [response1, response2], 'Messages passed to callback do not match');
319
+ }
320
+ async handleParserRespondingWithImage() {
321
+ const base64Image = (0, test_utils_1.generateId)();
322
+ const description = (0, test_utils_1.generateId)();
323
+ const functionResponse = {
324
+ imageBase64: base64Image,
325
+ imageDescription: description,
326
+ };
327
+ this.setParserResponseCallbackResults(functionResponse);
328
+ await this.sendRandomMessage(() => {
329
+ this.setParserResponseCallbackResults(undefined);
330
+ });
331
+ test_utils_1.assert.isEqualDeep(this.messages[2], {
332
+ from: 'Api',
333
+ message: `API Results: ${description}`,
334
+ imageBase64: base64Image,
335
+ });
336
+ }
337
+ async sendsMessageBackToBotIfParserThrows() {
338
+ const passedMessages = [];
339
+ const error = (0, test_utils_1.generateId)();
340
+ const parserResponse = (0, test_utils_1.generateId)();
341
+ this.setParserResponseMessage(parserResponse);
342
+ this.parser.invalidParseErrorOnNextParse = error;
343
+ await this.sendMessage((0, test_utils_1.generateId)(), (message) => {
344
+ passedMessages.push(message);
345
+ });
346
+ test_utils_1.assert.isEqual(this.messages[2].message, 'Error: ' + error);
347
+ test_utils_1.assert.isEqualDeep(passedMessages, [parserResponse]);
348
+ }
349
+ async sendsMessageBackToBotIfCallbackThrows() {
350
+ const passedMessages = [];
351
+ const error = (0, test_utils_1.generateId)();
352
+ const parserResponse = (0, test_utils_1.generateId)();
353
+ this.setParserResponseMessage(parserResponse);
354
+ this.parser.callbackErrorOnNextParse = error;
355
+ await this.sendMessage((0, test_utils_1.generateId)(), (message) => {
356
+ passedMessages.push(message);
357
+ });
358
+ test_utils_1.assert.isEqual(this.messages[2].message, 'Error: A Callback error just happened!');
359
+ test_utils_1.assert.isEqualDeep(passedMessages, [parserResponse]);
360
+ }
361
+ async responseThatThrowsIsStillTracked() {
362
+ const error = (0, test_utils_1.generateId)();
363
+ this.adapter.messageResponse = (0, test_utils_1.generateId)();
364
+ this.parser.invalidParseErrorOnNextParse = error;
365
+ const initialMessage = (0, test_utils_1.generateId)();
366
+ await this.sendMessage(initialMessage);
367
+ test_utils_1.assert.isEqualDeep(this.messages, [
368
+ {
369
+ from: 'Me',
370
+ message: initialMessage,
371
+ },
372
+ {
373
+ from: 'You',
374
+ message: this.adapter.messageResponse,
375
+ },
376
+ {
377
+ from: 'Api',
378
+ message: 'Error: ' + error,
379
+ },
380
+ {
381
+ from: 'You',
382
+ message: this.adapter.messageResponse,
383
+ },
384
+ ], 'Messages');
385
+ }
386
+ async canSendImage() {
387
+ const base64 = (0, test_utils_1.generateId)();
388
+ const description = (0, test_utils_1.generateId)();
389
+ await this.sendMessage({
390
+ imageBase64: base64,
391
+ imageDescription: description,
392
+ });
393
+ test_utils_1.assert.isEqualDeep(this.messages[0], {
394
+ from: 'Me',
395
+ message: description,
396
+ imageBase64: base64,
397
+ });
398
+ }
399
+ setParserResponseCallbackResults(results) {
400
+ this.parser.response.callbackResults = results;
401
+ }
402
+ get parserResponse() {
403
+ return this.parser.response.message;
404
+ }
405
+ setParserResponseMessage(message) {
406
+ this.parser.response.message = message ?? (0, test_utils_1.generateId)();
407
+ }
408
+ setParserResponseIsDone(isDone) {
409
+ this.parser.response.isDone = isDone;
410
+ }
411
+ assertTotalMessagesTracked(expected) {
412
+ test_utils_1.assert.isLength(this.messages, expected);
413
+ }
414
+ get messages() {
415
+ return this.bot.getMessages();
416
+ }
417
+ setupBotWithSkill(options) {
418
+ const skill = this.Skill(options);
419
+ this.bot = this.Bot({
420
+ skill,
421
+ });
422
+ return skill;
423
+ }
424
+ async sendMessageWithResponseState(state) {
425
+ this.setStateInResponse(state);
426
+ await this.sendRandomMessage();
427
+ }
428
+ async sendRandomMessage(cb) {
429
+ const body = (0, test_utils_1.generateId)();
430
+ await this.sendMessage(body, cb);
431
+ return body;
432
+ }
433
+ setStateInResponse(state) {
434
+ this.parser.response.state = state;
435
+ }
436
+ async sendMessage(message, cb) {
437
+ return await this.bot.sendMessage(message, cb);
438
+ }
439
+ serialize() {
440
+ return this.bot.serialize();
441
+ }
442
+ async updateState(updates) {
443
+ await this.bot.updateState(updates);
444
+ }
445
+ assertSerializedStateEquals(expected) {
446
+ test_utils_1.assert.isEqualDeep(this.bot.serialize().state, expected);
447
+ }
448
+ };
449
+ __decorate([
450
+ (0, test_utils_1.test)()
451
+ ], LlmBotTest.prototype, "throwsWhenSendingBadMessage", null);
452
+ __decorate([
453
+ (0, test_utils_1.test)()
454
+ ], LlmBotTest.prototype, "sendsItselfToTheLlmAdapter", null);
455
+ __decorate([
456
+ (0, test_utils_1.test)()
457
+ ], LlmBotTest.prototype, "serializesAsExpected", null);
458
+ __decorate([
459
+ (0, test_utils_1.test)()
460
+ ], LlmBotTest.prototype, "canUpdateState", null);
461
+ __decorate([
462
+ (0, test_utils_1.test)()
463
+ ], LlmBotTest.prototype, "updatingStateMixesIn", null);
464
+ __decorate([
465
+ (0, test_utils_1.test)()
466
+ ], LlmBotTest.prototype, "stateHonorsDefaultValues", null);
467
+ __decorate([
468
+ (0, test_utils_1.test)()
469
+ ], LlmBotTest.prototype, "updatingStateEmitsDidUpdateState", null);
470
+ __decorate([
471
+ (0, test_utils_1.test)()
472
+ ], LlmBotTest.prototype, "knowsWhenDone", null);
473
+ __decorate([
474
+ (0, test_utils_1.test)()
475
+ ], LlmBotTest.prototype, "sendMessageReturnsResponseFromAdapter", null);
476
+ __decorate([
477
+ (0, test_utils_1.test)()
478
+ ], LlmBotTest.prototype, "tracksMessageHistory", null);
479
+ __decorate([
480
+ (0, test_utils_1.test)()
481
+ ], LlmBotTest.prototype, "trackedMessageUsesResponseFromAdapterNotParser", null);
482
+ __decorate([
483
+ (0, test_utils_1.test)()
484
+ ], LlmBotTest.prototype, "isDoneWhenParsesSaysSo", null);
485
+ __decorate([
486
+ (0, test_utils_1.test)()
487
+ ], LlmBotTest.prototype, "notDoneUntilDone", null);
488
+ __decorate([
489
+ (0, test_utils_1.test)()
490
+ ], LlmBotTest.prototype, "botActuallySendsResponseToParser", null);
491
+ __decorate([
492
+ (0, test_utils_1.test)()
493
+ ], LlmBotTest.prototype, "enheritesStateSchemaFromSkillWhenSerializing", null);
494
+ __decorate([
495
+ (0, test_utils_1.test)('inherits state from skill when serializing', {
496
+ favoriteColor: 'blue',
497
+ }),
498
+ (0, test_utils_1.test)('inherits state from skill when serializing 2', {
499
+ firstName: (0, test_utils_1.generateId)(),
500
+ })
501
+ ], LlmBotTest.prototype, "inheritsStateFromSkillWhenSerializing", null);
502
+ __decorate([
503
+ (0, test_utils_1.test)('inherits state from bot when parsing response', {
504
+ favoriteColor: 'red',
505
+ }),
506
+ (0, test_utils_1.test)('inherits state from bot when parsing response 2', {
507
+ firstName: (0, test_utils_1.generateId)(),
508
+ })
509
+ ], LlmBotTest.prototype, "stateIsSentBackToBotWhenParsing", null);
510
+ __decorate([
511
+ (0, test_utils_1.test)()
512
+ ], LlmBotTest.prototype, "emitsDidUpdateStateWhenStateIsUpdated", null);
513
+ __decorate([
514
+ (0, test_utils_1.test)()
515
+ ], LlmBotTest.prototype, "shouldNotEmitUpdateItNoStatePassed", null);
516
+ __decorate([
517
+ (0, test_utils_1.test)('sets state in response to skill if skill has state 1', {
518
+ favoriteColor: 'blue',
519
+ }),
520
+ (0, test_utils_1.test)('sets state in response to skill if skill has state 2', {
521
+ firstName: (0, test_utils_1.generateId)(),
522
+ })
523
+ ], LlmBotTest.prototype, "setsStateInResponseToSkillIfSkillHasState", null);
524
+ __decorate([
525
+ (0, test_utils_1.test)()
526
+ ], LlmBotTest.prototype, "doesntEmitDidChangeOnSkillIfStateIsNotOnSkill", null);
527
+ __decorate([
528
+ (0, test_utils_1.test)()
529
+ ], LlmBotTest.prototype, "passesCallbacksToParserOnResponse", null);
530
+ __decorate([
531
+ (0, test_utils_1.test)()
532
+ ], LlmBotTest.prototype, "canSwapSkillMidWayThrough", null);
533
+ __decorate([
534
+ (0, test_utils_1.test)()
535
+ ], LlmBotTest.prototype, "defaultLimitsMessagesTo10", null);
536
+ __decorate([
537
+ (0, test_utils_1.test)()
538
+ ], LlmBotTest.prototype, "canSetMemory", null);
539
+ __decorate([
540
+ (0, test_utils_1.test)()
541
+ ], LlmBotTest.prototype, "settingSkillToBotSetsToNotDone", null);
542
+ __decorate([
543
+ (0, test_utils_1.test)()
544
+ ], LlmBotTest.prototype, "canClearMessageHistory", null);
545
+ __decorate([
546
+ (0, test_utils_1.test)()
547
+ ], LlmBotTest.prototype, "botRespondingCallsMessageCallback", null);
548
+ __decorate([
549
+ (0, test_utils_1.test)()
550
+ ], LlmBotTest.prototype, "messageCallbackFiredAfterAllMessagesTracked", null);
551
+ __decorate([
552
+ (0, test_utils_1.test)()
553
+ ], LlmBotTest.prototype, "ifParserRespondsWithCallbackResultsTheyAreSentImmediately", null);
554
+ __decorate([
555
+ (0, test_utils_1.test)()
556
+ ], LlmBotTest.prototype, "handleParserRespondingWithImage", null);
557
+ __decorate([
558
+ (0, test_utils_1.test)()
559
+ ], LlmBotTest.prototype, "sendsMessageBackToBotIfParserThrows", null);
560
+ __decorate([
561
+ (0, test_utils_1.test)()
562
+ ], LlmBotTest.prototype, "sendsMessageBackToBotIfCallbackThrows", null);
563
+ __decorate([
564
+ (0, test_utils_1.test)()
565
+ ], LlmBotTest.prototype, "responseThatThrowsIsStillTracked", null);
566
+ __decorate([
567
+ (0, test_utils_1.test)()
568
+ ], LlmBotTest.prototype, "canSendImage", null);
569
+ LlmBotTest = __decorate([
570
+ (0, test_utils_1.suite)()
571
+ ], LlmBotTest);
572
+ exports.default = LlmBotTest;
573
+ class FakeResponseParser extends ResponseParser_1.default {
574
+ constructor() {
575
+ super(...arguments);
576
+ this.response = {
577
+ isDone: false,
578
+ state: undefined,
579
+ };
580
+ }
581
+ async parse(message, callbacks) {
582
+ if (this.invalidParseErrorOnNextParse) {
583
+ const invalidParse = this.invalidParseErrorOnNextParse;
584
+ delete this.invalidParseErrorOnNextParse;
585
+ throw new SpruceError_1.default({
586
+ code: 'INVALID_CALLBACK',
587
+ matchedCallback: (0, test_utils_1.generateId)(),
588
+ validCallbacks: [],
589
+ friendlyMessage: invalidParse,
590
+ });
591
+ }
592
+ if (this.callbackErrorOnNextParse) {
593
+ delete this.callbackErrorOnNextParse;
594
+ throw new SpruceError_1.default({
595
+ code: 'CALLBACK_ERROR',
596
+ });
597
+ }
598
+ this.lastMessage = message;
599
+ this.lastCallbacks = callbacks;
600
+ return {
601
+ message,
602
+ isDone: false,
603
+ ...this.response,
604
+ };
605
+ }
606
+ }
607
+ //# sourceMappingURL=LlmBot.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LlmBot.test.js","sourceRoot":"","sources":["../../../src/__tests__/behavioral/LlmBot.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import AbstractLlmTest from '../support/AbstractLlmTest';
2
+ export default class SprucebotLlmFactoryTest extends AbstractLlmTest {
3
+ protected canGetInstance(): Promise<void>;
4
+ protected factoryMethodThrowsWithMissing(): Promise<void>;
5
+ protected throwsWhenMissingBotOptions(): Promise<void>;
6
+ protected canGetBot(): Promise<void>;
7
+ protected cantGetInstanceUntilOneIsSet(): void;
8
+ protected canGetBotInstance(): Promise<void>;
9
+ protected getInstanceReturnsBot(): void;
10
+ protected canSetTheFactoryClass(): Promise<void>;
11
+ protected canSetBotClass(): Promise<void>;
12
+ protected canSetSkillClass(): Promise<void>;
13
+ protected resettingFactoryClassResetsClasses(): Promise<void>;
14
+ private setInstance;
15
+ private assertInstanceOfBot;
16
+ }