@sprucelabs/sprucebot-llm 11.1.13 → 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 +1 -1
  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
@@ -1,84 +0,0 @@
1
- import { MercuryEventEmitter } from '@sprucelabs/mercury-types';
2
- import { Schema, SchemaValues, SelectFieldDefinition } from '@sprucelabs/schema';
3
- export interface BotOptions<StateSchema extends Schema = Schema, State extends SchemaValues<StateSchema> = SchemaValues<StateSchema>> extends Omit<PromptOptions<StateSchema, State>, 'skill'> {
4
- adapter: LlmAdapter;
5
- Class?: new (...opts: any[]) => SprucebotLlmBot<Schema, State>;
6
- skill?: SprucebotLLmSkill<Schema>;
7
- }
8
- export interface SprucebotLlmBot<StateSchema extends Schema = Schema, State extends SchemaValues<StateSchema> = SchemaValues<StateSchema>> extends MercuryEventEmitter<LlmEventContract> {
9
- markAsDone(): void;
10
- getIsDone(): boolean;
11
- sendMessage(message: SendMessage, responseCb?: MessageResponseCallback): Promise<string>;
12
- serialize(): SerializedBot<StateSchema, State>;
13
- updateState(state: Partial<State>): Promise<void>;
14
- setSkill(skill: SprucebotLLmSkill<any>): void;
15
- clearMessageHistory(): void;
16
- }
17
- export interface LlmAdapter {
18
- sendMessage(bot: SprucebotLlmBot<Schema>, options?: SendMessageOptions): Promise<string>;
19
- }
20
- export interface PromptOptions<StateSchema extends Schema, State extends SchemaValues<StateSchema> = SchemaValues<StateSchema>> {
21
- /**
22
- * Tell the bot who/what it is. Example: youAre: "a super funny comedian. You absolutely love dad jokes!"
23
- */
24
- youAre: string;
25
- stateSchema?: StateSchema;
26
- state?: Partial<State>;
27
- skill?: SerializedSkill<Schema>;
28
- }
29
- export interface SendMessageOptions {
30
- model?: string;
31
- }
32
- export interface SerializedBot<StateSchema extends Schema = Schema, State extends SchemaValues<StateSchema> = SchemaValues<StateSchema>> extends PromptOptions<Schema, State> {
33
- messages: LlmMessage[];
34
- }
35
- export declare const llmEventContract: {
36
- eventSignatures: {
37
- 'did-update-state': {};
38
- };
39
- };
40
- export type LlmEventContract = typeof llmEventContract;
41
- export type LlmMessageFrom = 'Me' | 'You' | 'Api';
42
- export interface LlmMessage {
43
- from: LlmMessageFrom;
44
- message: string;
45
- imageBase64?: string;
46
- }
47
- export interface SkillOptions<StateSchema extends Schema = Schema, State extends SchemaValues<StateSchema> = SchemaValues<StateSchema>> {
48
- yourJobIfYouChooseToAcceptItIs: string;
49
- weAreDoneWhen?: string;
50
- pleaseKeepInMindThat?: string[];
51
- stateSchema?: StateSchema;
52
- state?: Partial<State>;
53
- callbacks?: LlmCallbackMap;
54
- model?: string;
55
- }
56
- export interface SprucebotLLmSkill<StateSchema extends Schema = Schema, State extends SchemaValues<StateSchema> = SchemaValues<StateSchema>> extends MercuryEventEmitter<LlmEventContract> {
57
- getState(): Partial<State> | undefined;
58
- serialize(): SerializedSkill<StateSchema, State>;
59
- updateState(state: Partial<State>): Promise<void>;
60
- }
61
- export interface SerializedSkill<StateSchema extends Schema = Schema, State extends SchemaValues<StateSchema> = SchemaValues<StateSchema>> extends SkillOptions<StateSchema, State> {
62
- }
63
- export type LlmCallbackMap = Record<string, LlmCallback>;
64
- export type LmmCallbackResponse = void | SendMessage;
65
- export interface LlmCallback {
66
- cb: (options?: Record<string, any>) => LmmCallbackResponse | Promise<LmmCallbackResponse>;
67
- useThisWhenever: string;
68
- parameters?: LlmCallbackParameter[];
69
- }
70
- export type LlmCallbackParameter = {
71
- name: string;
72
- type: ('text' | 'number' | 'boolean' | 'dateMs' | 'dateTimeMs') | (string & {});
73
- isRequired?: boolean;
74
- description?: string;
75
- } | (SelectFieldDefinition & {
76
- name: string;
77
- description?: string;
78
- });
79
- export type MessageResponseCallback = (message: string) => any;
80
- export type SendMessage = string | SendMessageWithImage;
81
- export interface SendMessageWithImage {
82
- imageDescription: string;
83
- imageBase64: string;
84
- }
@@ -1,6 +0,0 @@
1
- import { buildEventContract, } from '@sprucelabs/mercury-types';
2
- export const llmEventContract = buildEventContract({
3
- eventSignatures: {
4
- 'did-update-state': {},
5
- },
6
- });
@@ -1,18 +0,0 @@
1
- import { LlmCallbackMap, SendMessage } from '../llm.types';
2
- export default class ResponseParser {
3
- private static instance;
4
- static setInstance(parser: ResponseParser): void;
5
- static getInstance(): ResponseParser;
6
- parse(response: string, callbacks?: LlmCallbackMap): Promise<ParsedResponse>;
7
- private findFirstBadCallback;
8
- private invokeCallbackAndDropInLegacyResults;
9
- private doesIncludeDoneToken;
10
- private parseState;
11
- private assertAtMostOneCallback;
12
- }
13
- export interface ParsedResponse {
14
- isDone: boolean;
15
- state?: Record<string, any>;
16
- message: string;
17
- callbackResults?: SendMessage;
18
- }
@@ -1,115 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import { DONE_TOKEN, STATE_BOUNDARY } from '../bots/templates.js';
11
- import SpruceError from '../errors/SpruceError.js';
12
- import renderPlaceholder from './renderPlaceholder.js';
13
- class ResponseParser {
14
- static setInstance(parser) {
15
- this.instance = parser;
16
- }
17
- static getInstance() {
18
- return this.instance;
19
- }
20
- parse(response, callbacks) {
21
- return __awaiter(this, void 0, void 0, function* () {
22
- var _a;
23
- let message = response.replace(DONE_TOKEN, '').trim();
24
- let state;
25
- let callbackResults;
26
- let callbacksInvoked = 0;
27
- for (const key of Object.keys(callbacks || {})) {
28
- const match = message.match(renderPlaceholder(key));
29
- if (match) {
30
- message = yield this.invokeCallbackAndDropInLegacyResults(callbacks, key, message);
31
- }
32
- let xmlCallMatches = message.match(new RegExp(`<<\\s*${key}\\s*\/>>`, 'g'));
33
- let data;
34
- if (!xmlCallMatches) {
35
- const matchWithJson = message
36
- .matchAll(new RegExp(`<<\\s*${key}\\s*>>(.*?)<<\/\\s*${key}\\s*>>`, 'gs'))
37
- .next().value;
38
- xmlCallMatches = (matchWithJson === null || matchWithJson === void 0 ? void 0 : matchWithJson[0])
39
- ? [matchWithJson === null || matchWithJson === void 0 ? void 0 : matchWithJson[0]]
40
- : null;
41
- data = (matchWithJson === null || matchWithJson === void 0 ? void 0 : matchWithJson[1])
42
- ? JSON.parse(matchWithJson === null || matchWithJson === void 0 ? void 0 : matchWithJson[1])
43
- : undefined;
44
- }
45
- if (xmlCallMatches) {
46
- this.assertAtMostOneCallback(++callbacksInvoked);
47
- try {
48
- callbackResults = yield ((_a = callbacks === null || callbacks === void 0 ? void 0 : callbacks[key]) === null || _a === void 0 ? void 0 : _a.cb(data));
49
- message = message.replace(xmlCallMatches[0], '').trim();
50
- }
51
- catch (error) {
52
- throw new SpruceError({
53
- code: 'CALLBACK_ERROR',
54
- friendlyMessage: `Error while executing callback (${key}). The error is: ${error.message}`,
55
- originalError: error,
56
- });
57
- }
58
- }
59
- }
60
- const matchedCallback = this.findFirstBadCallback(message);
61
- if (matchedCallback) {
62
- throw new SpruceError({
63
- code: 'INVALID_CALLBACK',
64
- validCallbacks: Object.keys(callbacks !== null && callbacks !== void 0 ? callbacks : {}),
65
- matchedCallback,
66
- });
67
- }
68
- const { match, fullMatch } = this.parseState(message);
69
- if (match && fullMatch) {
70
- message = message.replace(fullMatch, '').trim();
71
- state = JSON.parse(match);
72
- }
73
- return {
74
- isDone: this.doesIncludeDoneToken(response),
75
- state,
76
- message,
77
- callbackResults: callbackResults !== null && callbackResults !== void 0 ? callbackResults : undefined,
78
- };
79
- });
80
- }
81
- findFirstBadCallback(message) {
82
- const simpleMatches = message.match(new RegExp(`<<(.*)\/?>>`, 'g'));
83
- const extraJsonMatches = message.match(new RegExp(`<<.*?>>(.*?)<<\/.*?>>`, 'gs'));
84
- const matchedCallback = (extraJsonMatches === null || extraJsonMatches === void 0 ? void 0 : extraJsonMatches[0]) || (simpleMatches === null || simpleMatches === void 0 ? void 0 : simpleMatches[0]);
85
- return matchedCallback;
86
- }
87
- invokeCallbackAndDropInLegacyResults(callbacks, key, message) {
88
- return __awaiter(this, void 0, void 0, function* () {
89
- var _a;
90
- const v = (yield ((_a = callbacks === null || callbacks === void 0 ? void 0 : callbacks[key]) === null || _a === void 0 ? void 0 : _a.cb()));
91
- message = message.replace(renderPlaceholder(key), v !== null && v !== void 0 ? v : '').trim();
92
- return message;
93
- });
94
- }
95
- doesIncludeDoneToken(response) {
96
- return response.includes(DONE_TOKEN);
97
- }
98
- parseState(message) {
99
- const ESCAPED_BOUNDARY = STATE_BOUNDARY.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
100
- const searchRegex = new RegExp(`${ESCAPED_BOUNDARY}(.*?)${ESCAPED_BOUNDARY}`);
101
- const stateMatches = message.match(searchRegex);
102
- const match = stateMatches === null || stateMatches === void 0 ? void 0 : stateMatches[1];
103
- return { match, fullMatch: stateMatches === null || stateMatches === void 0 ? void 0 : stateMatches[0] };
104
- }
105
- assertAtMostOneCallback(invocations) {
106
- if (invocations > 1) {
107
- throw new SpruceError({
108
- code: 'CALLBACK_ERROR',
109
- friendlyMessage: 'You can only invoke one callback per message.',
110
- });
111
- }
112
- }
113
- }
114
- ResponseParser.instance = new ResponseParser();
115
- export default ResponseParser;
@@ -1 +0,0 @@
1
- export default function renderPlaceholder(key: string): string;
@@ -1,4 +0,0 @@
1
- import { CALLBACK_BOUNDARY } from '../bots/templates.js';
2
- export default function renderPlaceholder(key) {
3
- return `${CALLBACK_BOUNDARY} ${key} ${CALLBACK_BOUNDARY}`;
4
- }
@@ -1,14 +0,0 @@
1
- import { Schema, SchemaValues } from '@sprucelabs/schema';
2
- import SprucebotLlmSkillImpl from '../bots/SprucebotLlmSkillImpl';
3
- import { LlmCallback, SkillOptions } from '../llm.types';
4
- export default class MockLlmSkill<StateSchema extends Schema = Schema, State extends SchemaValues<StateSchema> = SchemaValues<StateSchema>> extends SprucebotLlmSkillImpl<StateSchema, State> {
5
- static instance: MockLlmSkill;
6
- constructor(options: SkillOptions<StateSchema, State>);
7
- assertYourJobEquals(expected: string): void;
8
- assertWeAreDoneWhenEquals(expected: string | undefined): void;
9
- assertPleaseKeepInMindEquals(expected: string[] | undefined): void;
10
- assertModelEquals(model: string | undefined): void;
11
- assertStateSchemaEquals(expected: Schema | undefined): void;
12
- assertHasCallback(name: string, expectedOptions?: Omit<LlmCallback, 'cb'>): (options?: Record<string, any>) => import("../llm.types").LmmCallbackResponse | Promise<import("../llm.types").LmmCallbackResponse>;
13
- invokeCallback(cbName: string, options?: Record<string, any>): Promise<import("../llm.types").LmmCallbackResponse>;
14
- }
@@ -1,60 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- var __rest = (this && this.__rest) || function (s, e) {
11
- var t = {};
12
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
13
- t[p] = s[p];
14
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
15
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
16
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
17
- t[p[i]] = s[p[i]];
18
- }
19
- return t;
20
- };
21
- import { assertOptions } from '@sprucelabs/schema';
22
- import { assert } from '@sprucelabs/test-utils';
23
- import SprucebotLlmSkillImpl from '../bots/SprucebotLlmSkillImpl.js';
24
- export default class MockLlmSkill extends SprucebotLlmSkillImpl {
25
- constructor(options) {
26
- super(options);
27
- assertOptions(options, ['yourJobIfYouChooseToAcceptItIs']);
28
- MockLlmSkill.instance = this;
29
- }
30
- assertYourJobEquals(expected) {
31
- assert.isEqual(this.options.yourJobIfYouChooseToAcceptItIs, expected, 'yourJobIfYouChooseToAcceptItIs passed to constructor does not equal expected');
32
- }
33
- assertWeAreDoneWhenEquals(expected) {
34
- assert.isEqual(this.options.weAreDoneWhen, expected, 'weAreDoneWhen passed to constructor does not equal expected');
35
- }
36
- assertPleaseKeepInMindEquals(expected) {
37
- assert.isEqualDeep(this.options.pleaseKeepInMindThat, expected, 'pleaseKeepInMindThat passed to constructor does not equal expected');
38
- }
39
- assertModelEquals(model) {
40
- assert.isEqual(this.options.model, model, 'model passed to constructor does not equal expected');
41
- }
42
- assertStateSchemaEquals(expected) {
43
- assert.isEqualDeep(this.stateSchema, expected, 'stateSchema passed to constructor does not equal expected');
44
- }
45
- assertHasCallback(name, expectedOptions) {
46
- var _a, _b;
47
- const _c = (_b = (_a = this.options.callbacks) === null || _a === void 0 ? void 0 : _a[name]) !== null && _b !== void 0 ? _b : {}, { cb } = _c, options = __rest(_c, ["cb"]);
48
- assert.isTruthy(cb, 'Could not find callback with name: ' + name);
49
- if (expectedOptions) {
50
- assert.isEqualDeep(options, expectedOptions, `the options for the '${name}' callback don\`t match`);
51
- }
52
- return cb;
53
- }
54
- invokeCallback(cbName, options) {
55
- return __awaiter(this, void 0, void 0, function* () {
56
- const cb = this.assertHasCallback(cbName);
57
- return yield cb(options);
58
- });
59
- }
60
- }
@@ -1,8 +0,0 @@
1
- import { LlmAdapter, SendMessageOptions, SprucebotLlmBot } from '../llm.types';
2
- export default class SpyLlmAdapter implements LlmAdapter {
3
- lastBot?: SprucebotLlmBot;
4
- lastMessage?: string;
5
- messageResponse: string;
6
- lastSendOptions?: SendMessageOptions;
7
- sendMessage(bot: SprucebotLlmBot, options?: SendMessageOptions): Promise<string>;
8
- }
@@ -1,21 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- export default class SpyLlmAdapter {
11
- constructor() {
12
- this.messageResponse = '';
13
- }
14
- sendMessage(bot, options) {
15
- return __awaiter(this, void 0, void 0, function* () {
16
- this.lastBot = bot;
17
- this.lastSendOptions = options;
18
- return this.messageResponse;
19
- });
20
- }
21
- }
@@ -1,12 +0,0 @@
1
- import { Schema, SchemaValues } from '@sprucelabs/schema';
2
- import SprucebotLlmBotImpl from '../bots/SprucebotLlmBotImpl';
3
- import { BotOptions, LlmMessage, SprucebotLlmBot } from '../llm.types';
4
- export default class SpyLlmBot<StateSchema extends Schema = Schema, State extends SchemaValues<StateSchema> = SchemaValues<StateSchema>> extends SprucebotLlmBotImpl<StateSchema, State> implements SprucebotLlmBot {
5
- static instance: SpyLlmBot;
6
- constructorOptions: BotOptions<StateSchema, State>;
7
- constructor(options: BotOptions<StateSchema, State>);
8
- getState(): Partial<State> | undefined;
9
- getSkill(): import("../llm.types").SprucebotLLmSkill<Schema, Pick<import("@sprucelabs/schema").SchemaStaticValues<Schema, false, never, import("@sprucelabs/schema").StaticSchemaAllValues<Schema, false>>, never>> | undefined;
10
- setMessages(messages: LlmMessage[]): void;
11
- getMessages(): LlmMessage[];
12
- }
@@ -1,20 +0,0 @@
1
- import SprucebotLlmBotImpl from '../bots/SprucebotLlmBotImpl.js';
2
- export default class SpyLlmBot extends SprucebotLlmBotImpl {
3
- constructor(options) {
4
- super(options);
5
- SpyLlmBot.instance = this;
6
- this.constructorOptions = options;
7
- }
8
- getState() {
9
- return this.state;
10
- }
11
- getSkill() {
12
- return this.skill;
13
- }
14
- setMessages(messages) {
15
- this.messages = messages;
16
- }
17
- getMessages() {
18
- return this.messages;
19
- }
20
- }