@sprucelabs/sprucebot-llm 8.5.1 → 8.6.1

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.
@@ -1,7 +1,7 @@
1
1
  import { BotOptions, LlmAdapter, SkillOptions, SprucebotLlmBot, SprucebotLLmSkill } from '../llm.types';
2
2
  export default class SprucebotLlmFactory {
3
- private instance?;
4
3
  protected adapter: LlmAdapter;
4
+ private instance?;
5
5
  static FactoryClass?: typeof SprucebotLlmFactory;
6
6
  static BotClass?: new (options: any) => SprucebotLlmBot;
7
7
  static SkillClass?: new (options: any) => SprucebotLLmSkill;
@@ -2,9 +2,9 @@ import { AbstractEventEmitter } from '@sprucelabs/mercury-event-emitter';
2
2
  import { Schema, SchemaValues } from '@sprucelabs/schema';
3
3
  import { LlmEventContract, SerializedSkill, SkillOptions, SprucebotLLmSkill } from '../llm.types';
4
4
  export default class SprucebotLlmSkillImpl<StateSchema extends Schema = Schema, State extends SchemaValues<StateSchema> = SchemaValues<StateSchema>> extends AbstractEventEmitter<LlmEventContract> implements SprucebotLLmSkill<StateSchema, State> {
5
- private options;
5
+ protected options: SkillOptions;
6
6
  private state?;
7
- private stateSchema?;
7
+ protected stateSchema?: StateSchema;
8
8
  constructor(options: SkillOptions<StateSchema, State>);
9
9
  updateState(updates: Partial<State>): Promise<void>;
10
10
  getState(): Partial<State> | undefined;
@@ -7,7 +7,7 @@ class SprucebotLlmSkillImpl extends mercury_event_emitter_1.AbstractEventEmitter
7
7
  constructor(options) {
8
8
  super(llm_types_1.llmEventContract);
9
9
  this.state = {};
10
- const { state, stateSchema, ...rest } = options;
10
+ const { state, stateSchema, ...rest } = options ?? {};
11
11
  this.options = { ...rest, stateSchema };
12
12
  this.stateSchema = stateSchema;
13
13
  this.state = stateSchema
@@ -1,7 +1,7 @@
1
1
  import { BotOptions, LlmAdapter, SkillOptions, SprucebotLlmBot, SprucebotLLmSkill } from '../llm.types';
2
2
  export default class SprucebotLlmFactory {
3
- private instance?;
4
3
  protected adapter: LlmAdapter;
4
+ private instance?;
5
5
  static FactoryClass?: typeof SprucebotLlmFactory;
6
6
  static BotClass?: new (options: any) => SprucebotLlmBot;
7
7
  static SkillClass?: new (options: any) => SprucebotLLmSkill;
@@ -2,9 +2,9 @@ import { AbstractEventEmitter } from '@sprucelabs/mercury-event-emitter';
2
2
  import { Schema, SchemaValues } from '@sprucelabs/schema';
3
3
  import { LlmEventContract, SerializedSkill, SkillOptions, SprucebotLLmSkill } from '../llm.types';
4
4
  export default class SprucebotLlmSkillImpl<StateSchema extends Schema = Schema, State extends SchemaValues<StateSchema> = SchemaValues<StateSchema>> extends AbstractEventEmitter<LlmEventContract> implements SprucebotLLmSkill<StateSchema, State> {
5
- private options;
5
+ protected options: SkillOptions;
6
6
  private state?;
7
- private stateSchema?;
7
+ protected stateSchema?: StateSchema;
8
8
  constructor(options: SkillOptions<StateSchema, State>);
9
9
  updateState(updates: Partial<State>): Promise<void>;
10
10
  getState(): Partial<State> | undefined;
@@ -25,7 +25,7 @@ export default class SprucebotLlmSkillImpl extends AbstractEventEmitter {
25
25
  constructor(options) {
26
26
  super(llmEventContract);
27
27
  this.state = {};
28
- const { state, stateSchema } = options, rest = __rest(options, ["state", "stateSchema"]);
28
+ const _a = options !== null && options !== void 0 ? options : {}, { state, stateSchema } = _a, rest = __rest(_a, ["state", "stateSchema"]);
29
29
  this.options = Object.assign(Object.assign({}, rest), { stateSchema });
30
30
  this.stateSchema = stateSchema;
31
31
  this.state = stateSchema
@@ -4,3 +4,6 @@ export { default as SprucebotLlmSkillImpl } from './bots/SprucebotLlmSkillImpl';
4
4
  export { OpenAiAdapter } from './bots/adapters/OpenAi';
5
5
  export * from './llm.types';
6
6
  export { default as SprucebotLlmError } from './errors/SpruceError';
7
+ export { default as MockLlmSkill } from './tests/MockLlmSkill';
8
+ export { default as SpyLllmBot } from './tests/SpyLlmBot';
9
+ export { default as SpyLlmAdapter } from './tests/SpyAdapter';
@@ -4,3 +4,6 @@ export { default as SprucebotLlmSkillImpl } from './bots/SprucebotLlmSkillImpl.j
4
4
  export { OpenAiAdapter } from './bots/adapters/OpenAi.js';
5
5
  export * from './llm.types.js';
6
6
  export { default as SprucebotLlmError } from './errors/SpruceError.js';
7
+ export { default as MockLlmSkill } from './tests/MockLlmSkill.js';
8
+ export { default as SpyLllmBot } from './tests/SpyLlmBot.js';
9
+ export { default as SpyLlmAdapter } from './tests/SpyAdapter.js';
@@ -0,0 +1,13 @@
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'>): void;
13
+ }
@@ -0,0 +1,44 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { assertOptions } from '@sprucelabs/schema';
13
+ import { assert } from '@sprucelabs/test-utils';
14
+ import SprucebotLlmSkillImpl from '../bots/SprucebotLlmSkillImpl.js';
15
+ export default class MockLlmSkill extends SprucebotLlmSkillImpl {
16
+ constructor(options) {
17
+ super(options);
18
+ assertOptions(options, ['yourJobIfYouChooseToAcceptItIs']);
19
+ MockLlmSkill.instance = this;
20
+ }
21
+ assertYourJobEquals(expected) {
22
+ assert.isEqual(this.options.yourJobIfYouChooseToAcceptItIs, expected, 'yourJobIfYouChooseToAcceptItIs passed to constructor does not equal expected');
23
+ }
24
+ assertWeAreDoneWhenEquals(expected) {
25
+ assert.isEqual(this.options.weAreDoneWhen, expected, 'weAreDoneWhen passed to constructor does not equal expected');
26
+ }
27
+ assertPleaseKeepInMindEquals(expected) {
28
+ assert.isEqualDeep(this.options.pleaseKeepInMindThat, expected, 'pleaseKeepInMindThat passed to constructor does not equal expected');
29
+ }
30
+ assertModelEquals(model) {
31
+ assert.isEqual(this.options.model, model, 'model passed to constructor does not equal expected');
32
+ }
33
+ assertStateSchemaEquals(expected) {
34
+ assert.isEqualDeep(this.stateSchema, expected, 'stateSchema passed to constructor does not equal expected');
35
+ }
36
+ assertHasCallback(name, expectedOptions) {
37
+ var _a, _b;
38
+ 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"]);
39
+ assert.isTruthy(cb, 'Could not find callback with name: ' + name);
40
+ if (expectedOptions) {
41
+ assert.isEqualDeep(options, expectedOptions, `the options for the '${name}' callback don\`t match`);
42
+ }
43
+ }
44
+ }
@@ -0,0 +1,8 @@
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
+ }
@@ -0,0 +1,21 @@
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
+ }
@@ -0,0 +1,8 @@
1
+ import SprucebotLlmBotImpl from '../bots/SprucebotLlmBotImpl';
2
+ import { LlmMessage, SprucebotLlmBot } from '../llm.types';
3
+ export default class SpyLlmBot extends SprucebotLlmBotImpl implements SprucebotLlmBot {
4
+ getState(): Partial<Pick<import("@sprucelabs/schema").SchemaStaticValues<import("@sprucelabs/schema").Schema, false, never, import("@sprucelabs/schema").StaticSchemaAllValues<import("@sprucelabs/schema").Schema, false>>, never>> | undefined;
5
+ getSkill(): import("../llm.types").SprucebotLLmSkill<import("@sprucelabs/schema").Schema, Pick<import("@sprucelabs/schema").SchemaStaticValues<import("@sprucelabs/schema").Schema, false, never, import("@sprucelabs/schema").StaticSchemaAllValues<import("@sprucelabs/schema").Schema, false>>, never>> | undefined;
6
+ setMessages(messages: LlmMessage[]): void;
7
+ getMessages(): LlmMessage[];
8
+ }
@@ -0,0 +1,15 @@
1
+ import SprucebotLlmBotImpl from '../bots/SprucebotLlmBotImpl.js';
2
+ export default class SpyLlmBot extends SprucebotLlmBotImpl {
3
+ getState() {
4
+ return this.state;
5
+ }
6
+ getSkill() {
7
+ return this.skill;
8
+ }
9
+ setMessages(messages) {
10
+ this.messages = messages;
11
+ }
12
+ getMessages() {
13
+ return this.messages;
14
+ }
15
+ }
package/build/index.d.ts CHANGED
@@ -4,3 +4,6 @@ export { default as SprucebotLlmSkillImpl } from './bots/SprucebotLlmSkillImpl';
4
4
  export { OpenAiAdapter } from './bots/adapters/OpenAi';
5
5
  export * from './llm.types';
6
6
  export { default as SprucebotLlmError } from './errors/SpruceError';
7
+ export { default as MockLlmSkill } from './tests/MockLlmSkill';
8
+ export { default as SpyLllmBot } from './tests/SpyLlmBot';
9
+ export { default as SpyLlmAdapter } from './tests/SpyAdapter';
package/build/index.js CHANGED
@@ -17,7 +17,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
17
17
  return (mod && mod.__esModule) ? mod : { "default": mod };
18
18
  };
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.SprucebotLlmError = exports.OpenAiAdapter = exports.SprucebotLlmSkillImpl = exports.SprucebotLlmBotImpl = exports.SprucebotLlmFactory = void 0;
20
+ exports.SpyLlmAdapter = exports.SpyLllmBot = exports.MockLlmSkill = exports.SprucebotLlmError = exports.OpenAiAdapter = exports.SprucebotLlmSkillImpl = exports.SprucebotLlmBotImpl = exports.SprucebotLlmFactory = void 0;
21
21
  var SprucebotLlmFactory_1 = require("./bots/SprucebotLlmFactory");
22
22
  Object.defineProperty(exports, "SprucebotLlmFactory", { enumerable: true, get: function () { return __importDefault(SprucebotLlmFactory_1).default; } });
23
23
  var SprucebotLlmBotImpl_1 = require("./bots/SprucebotLlmBotImpl");
@@ -29,3 +29,9 @@ Object.defineProperty(exports, "OpenAiAdapter", { enumerable: true, get: functio
29
29
  __exportStar(require("./llm.types"), exports);
30
30
  var SpruceError_1 = require("./errors/SpruceError");
31
31
  Object.defineProperty(exports, "SprucebotLlmError", { enumerable: true, get: function () { return __importDefault(SpruceError_1).default; } });
32
+ var MockLlmSkill_1 = require("./tests/MockLlmSkill");
33
+ Object.defineProperty(exports, "MockLlmSkill", { enumerable: true, get: function () { return __importDefault(MockLlmSkill_1).default; } });
34
+ var SpyLlmBot_1 = require("./tests/SpyLlmBot");
35
+ Object.defineProperty(exports, "SpyLllmBot", { enumerable: true, get: function () { return __importDefault(SpyLlmBot_1).default; } });
36
+ var SpyAdapter_1 = require("./tests/SpyAdapter");
37
+ Object.defineProperty(exports, "SpyLlmAdapter", { enumerable: true, get: function () { return __importDefault(SpyAdapter_1).default; } });
@@ -0,0 +1,13 @@
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'>): void;
13
+ }
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const schema_1 = require("@sprucelabs/schema");
7
+ const test_utils_1 = require("@sprucelabs/test-utils");
8
+ const SprucebotLlmSkillImpl_1 = __importDefault(require("../bots/SprucebotLlmSkillImpl"));
9
+ class MockLlmSkill extends SprucebotLlmSkillImpl_1.default {
10
+ constructor(options) {
11
+ super(options);
12
+ (0, schema_1.assertOptions)(options, ['yourJobIfYouChooseToAcceptItIs']);
13
+ MockLlmSkill.instance = this;
14
+ }
15
+ assertYourJobEquals(expected) {
16
+ test_utils_1.assert.isEqual(this.options.yourJobIfYouChooseToAcceptItIs, expected, 'yourJobIfYouChooseToAcceptItIs passed to constructor does not equal expected');
17
+ }
18
+ assertWeAreDoneWhenEquals(expected) {
19
+ test_utils_1.assert.isEqual(this.options.weAreDoneWhen, expected, 'weAreDoneWhen passed to constructor does not equal expected');
20
+ }
21
+ assertPleaseKeepInMindEquals(expected) {
22
+ test_utils_1.assert.isEqualDeep(this.options.pleaseKeepInMindThat, expected, 'pleaseKeepInMindThat passed to constructor does not equal expected');
23
+ }
24
+ assertModelEquals(model) {
25
+ test_utils_1.assert.isEqual(this.options.model, model, 'model passed to constructor does not equal expected');
26
+ }
27
+ assertStateSchemaEquals(expected) {
28
+ test_utils_1.assert.isEqualDeep(this.stateSchema, expected, 'stateSchema passed to constructor does not equal expected');
29
+ }
30
+ assertHasCallback(name, expectedOptions) {
31
+ const { cb, ...options } = this.options.callbacks?.[name] ?? {};
32
+ test_utils_1.assert.isTruthy(cb, 'Could not find callback with name: ' + name);
33
+ if (expectedOptions) {
34
+ test_utils_1.assert.isEqualDeep(options, expectedOptions, `the options for the '${name}' callback don\`t match`);
35
+ }
36
+ }
37
+ }
38
+ exports.default = MockLlmSkill;
@@ -0,0 +1,8 @@
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
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class SpyLlmAdapter {
4
+ constructor() {
5
+ this.messageResponse = '';
6
+ }
7
+ async sendMessage(bot, options) {
8
+ this.lastBot = bot;
9
+ this.lastSendOptions = options;
10
+ return this.messageResponse;
11
+ }
12
+ }
13
+ exports.default = SpyLlmAdapter;
@@ -0,0 +1,8 @@
1
+ import SprucebotLlmBotImpl from '../bots/SprucebotLlmBotImpl';
2
+ import { LlmMessage, SprucebotLlmBot } from '../llm.types';
3
+ export default class SpyLlmBot extends SprucebotLlmBotImpl implements SprucebotLlmBot {
4
+ getState(): Partial<Pick<import("@sprucelabs/schema").SchemaStaticValues<import("@sprucelabs/schema").Schema, false, never, import("@sprucelabs/schema").StaticSchemaAllValues<import("@sprucelabs/schema").Schema, false>>, never>> | undefined;
5
+ getSkill(): import("../llm.types").SprucebotLLmSkill<import("@sprucelabs/schema").Schema, Pick<import("@sprucelabs/schema").SchemaStaticValues<import("@sprucelabs/schema").Schema, false, never, import("@sprucelabs/schema").StaticSchemaAllValues<import("@sprucelabs/schema").Schema, false>>, never>> | undefined;
6
+ setMessages(messages: LlmMessage[]): void;
7
+ getMessages(): LlmMessage[];
8
+ }
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const SprucebotLlmBotImpl_1 = __importDefault(require("../bots/SprucebotLlmBotImpl"));
7
+ class SpyLlmBot extends SprucebotLlmBotImpl_1.default {
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
+ }
21
+ exports.default = SpyLlmBot;
package/package.json CHANGED
@@ -9,7 +9,7 @@
9
9
  "@sprucelabs/spruce-test-fixtures"
10
10
  ]
11
11
  },
12
- "version": "8.5.1",
12
+ "version": "8.6.1",
13
13
  "files": [
14
14
  "build"
15
15
  ],