@awell-health/awell-extensions 2.0.14 → 2.0.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. package/dist/extensions/cmDotCom/v1/actions/sendSms/config/fields.d.ts +1 -1
  2. package/dist/extensions/healthie/actions/createGoal/createGoal.test.js +1 -1
  3. package/dist/extensions/healthie/actions/createGoal/createGoal.test.js.map +1 -1
  4. package/dist/extensions/shelly/actions/categorizeMessage/categorizeMessage.d.ts +4 -0
  5. package/dist/extensions/shelly/actions/categorizeMessage/categorizeMessage.js +40 -0
  6. package/dist/extensions/shelly/actions/categorizeMessage/categorizeMessage.js.map +1 -0
  7. package/dist/extensions/shelly/actions/categorizeMessage/categorizeMessage.test.d.ts +1 -0
  8. package/dist/extensions/shelly/actions/categorizeMessage/categorizeMessage.test.js +63 -0
  9. package/dist/extensions/shelly/actions/categorizeMessage/categorizeMessage.test.js.map +1 -0
  10. package/dist/extensions/shelly/actions/categorizeMessage/config/datapoints.d.ts +6 -0
  11. package/dist/extensions/shelly/actions/categorizeMessage/config/datapoints.js +10 -0
  12. package/dist/extensions/shelly/actions/categorizeMessage/config/datapoints.js.map +1 -0
  13. package/dist/extensions/shelly/actions/categorizeMessage/config/fields.d.ts +28 -0
  14. package/dist/extensions/shelly/actions/categorizeMessage/config/fields.js +36 -0
  15. package/dist/extensions/shelly/actions/categorizeMessage/config/fields.js.map +1 -0
  16. package/dist/extensions/shelly/actions/categorizeMessage/config/index.d.ts +2 -0
  17. package/dist/extensions/shelly/actions/categorizeMessage/config/index.js +9 -0
  18. package/dist/extensions/shelly/actions/categorizeMessage/config/index.js.map +1 -0
  19. package/dist/extensions/shelly/actions/categorizeMessage/index.d.ts +1 -0
  20. package/dist/extensions/shelly/actions/categorizeMessage/index.js +6 -0
  21. package/dist/extensions/shelly/actions/categorizeMessage/index.js.map +1 -0
  22. package/dist/extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/categorizeMessageWithLLM.d.ts +6 -0
  23. package/dist/extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/categorizeMessageWithLLM.js +22 -0
  24. package/dist/extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/categorizeMessageWithLLM.js.map +1 -0
  25. package/dist/extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/categorizeMessageWithLLM.test.d.ts +1 -0
  26. package/dist/extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/categorizeMessageWithLLM.test.js +72 -0
  27. package/dist/extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/categorizeMessageWithLLM.test.js.map +1 -0
  28. package/dist/extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/constants.d.ts +18 -0
  29. package/dist/extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/constants.js +24 -0
  30. package/dist/extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/constants.js.map +1 -0
  31. package/dist/extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/index.d.ts +1 -0
  32. package/dist/extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/index.js +6 -0
  33. package/dist/extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/index.js.map +1 -0
  34. package/dist/extensions/shelly/actions/categorizeMessage/realTest.test.d.ts +1 -0
  35. package/dist/extensions/shelly/actions/categorizeMessage/realTest.test.js +62 -0
  36. package/dist/extensions/shelly/actions/categorizeMessage/realTest.test.js.map +1 -0
  37. package/dist/extensions/shelly/actions/index.d.ts +49 -5
  38. package/dist/extensions/shelly/actions/index.js +6 -0
  39. package/dist/extensions/shelly/actions/index.js.map +1 -1
  40. package/dist/extensions/shelly/actions/medicationFromImage/config/datapoints.d.ts +6 -0
  41. package/dist/extensions/shelly/actions/medicationFromImage/config/datapoints.js +10 -0
  42. package/dist/extensions/shelly/actions/medicationFromImage/config/datapoints.js.map +1 -0
  43. package/dist/extensions/shelly/actions/medicationFromImage/config/fields.d.ts +18 -0
  44. package/dist/extensions/shelly/actions/medicationFromImage/config/fields.js +21 -0
  45. package/dist/extensions/shelly/actions/medicationFromImage/config/fields.js.map +1 -0
  46. package/dist/extensions/shelly/actions/medicationFromImage/config/index.d.ts +2 -0
  47. package/dist/extensions/shelly/actions/medicationFromImage/config/index.js +9 -0
  48. package/dist/extensions/shelly/actions/medicationFromImage/config/index.js.map +1 -0
  49. package/dist/extensions/shelly/actions/medicationFromImage/index.d.ts +1 -0
  50. package/dist/extensions/shelly/actions/medicationFromImage/index.js +6 -0
  51. package/dist/extensions/shelly/actions/medicationFromImage/index.js.map +1 -0
  52. package/dist/extensions/shelly/actions/medicationFromImage/medicationFromImage.d.ts +4 -0
  53. package/dist/extensions/shelly/actions/medicationFromImage/medicationFromImage.js +31 -0
  54. package/dist/extensions/shelly/actions/medicationFromImage/medicationFromImage.js.map +1 -0
  55. package/dist/extensions/shelly/actions/medicationFromImage/medicationFromImage.test.d.ts +1 -0
  56. package/dist/extensions/shelly/actions/medicationFromImage/medicationFromImage.test.js +33 -0
  57. package/dist/extensions/shelly/actions/medicationFromImage/medicationFromImage.test.js.map +1 -0
  58. package/dist/extensions/shelly/actions/summarizeCareFlow/config/datapoints.d.ts +6 -0
  59. package/dist/extensions/shelly/actions/summarizeCareFlow/config/datapoints.js +10 -0
  60. package/dist/extensions/shelly/actions/summarizeCareFlow/config/datapoints.js.map +1 -0
  61. package/dist/extensions/shelly/actions/summarizeCareFlow/config/fields.d.ts +18 -0
  62. package/dist/extensions/shelly/actions/summarizeCareFlow/config/fields.js +21 -0
  63. package/dist/extensions/shelly/actions/summarizeCareFlow/config/fields.js.map +1 -0
  64. package/dist/extensions/shelly/actions/summarizeCareFlow/config/index.d.ts +2 -0
  65. package/dist/extensions/shelly/actions/summarizeCareFlow/config/index.js +9 -0
  66. package/dist/extensions/shelly/actions/summarizeCareFlow/config/index.js.map +1 -0
  67. package/dist/extensions/shelly/actions/summarizeCareFlow/index.d.ts +1 -0
  68. package/dist/extensions/shelly/actions/summarizeCareFlow/index.js +6 -0
  69. package/dist/extensions/shelly/actions/summarizeCareFlow/index.js.map +1 -0
  70. package/dist/extensions/shelly/actions/summarizeCareFlow/summarizeCareFlow.d.ts +4 -0
  71. package/dist/extensions/shelly/actions/summarizeCareFlow/summarizeCareFlow.js +67 -0
  72. package/dist/extensions/shelly/actions/summarizeCareFlow/summarizeCareFlow.js.map +1 -0
  73. package/dist/extensions/shelly/actions/summarizeCareFlow/summarizeCareFlow.test.d.ts +1 -0
  74. package/dist/extensions/shelly/actions/summarizeCareFlow/summarizeCareFlow.test.js +48 -0
  75. package/dist/extensions/shelly/actions/summarizeCareFlow/summarizeCareFlow.test.js.map +1 -0
  76. package/dist/extensions/shelly/actions/summarizeForm/lib/getResponseText/getResponseText.js +28 -19
  77. package/dist/extensions/shelly/actions/summarizeForm/lib/getResponseText/getResponseText.js.map +1 -1
  78. package/dist/extensions/shelly/actions/summarizeForm/summarizeForm.js +1 -25
  79. package/dist/extensions/shelly/actions/summarizeForm/summarizeForm.js.map +1 -1
  80. package/dist/extensions/shelly/actions/summarizeForm/summarizeForm.test.js +1 -3
  81. package/dist/extensions/shelly/actions/summarizeForm/summarizeForm.test.js.map +1 -1
  82. package/dist/extensions/shelly/lib/validatePayloadAndCreateSdk.d.ts +2 -2
  83. package/dist/extensions/shelly/lib/validatePayloadAndCreateSdk.js +6 -6
  84. package/dist/extensions/shelly/lib/validatePayloadAndCreateSdk.js.map +1 -1
  85. package/dist/extensions/shelly/settings.d.ts +0 -20
  86. package/dist/extensions/shelly/settings.js +0 -16
  87. package/dist/extensions/shelly/settings.js.map +1 -1
  88. package/dist/extensions/textline/actions/sendSms/config/fields.d.ts +1 -1
  89. package/dist/extensions/textline/actions/setContactConsent/config/fields.d.ts +1 -1
  90. package/dist/extensions/twilio/v2/actions/createFlowExecution/config/actionSchema.d.ts +5 -5
  91. package/dist/extensions/twilio/v2/actions/createFlowExecution/config/fields.d.ts +1 -1
  92. package/dist/extensions/twilio/v2/actions/sendSms/config/datapoints.d.ts +9 -0
  93. package/dist/extensions/twilio/v2/actions/sendSms/config/datapoints.js +13 -0
  94. package/dist/extensions/twilio/v2/actions/sendSms/config/datapoints.js.map +1 -0
  95. package/dist/extensions/twilio/v2/actions/sendSms/config/fields.d.ts +1 -1
  96. package/dist/extensions/twilio/v2/actions/sendSms/config/index.d.ts +1 -0
  97. package/dist/extensions/twilio/v2/actions/sendSms/config/index.js +3 -1
  98. package/dist/extensions/twilio/v2/actions/sendSms/config/index.js.map +1 -1
  99. package/dist/extensions/twilio/v2/actions/sendSms/sendSms.js +7 -2
  100. package/dist/extensions/twilio/v2/actions/sendSms/sendSms.js.map +1 -1
  101. package/dist/extensions/twilio/v2/actions/sendSmsDuringBusinessHours/config/fields.d.ts +1 -1
  102. package/dist/extensions/twilio/v2/actions/sendSmsWithMessagingSid/config/datapoints.d.ts +9 -0
  103. package/dist/extensions/twilio/v2/actions/sendSmsWithMessagingSid/config/datapoints.js +13 -0
  104. package/dist/extensions/twilio/v2/actions/sendSmsWithMessagingSid/config/datapoints.js.map +1 -0
  105. package/dist/extensions/twilio/v2/actions/sendSmsWithMessagingSid/config/fields.d.ts +1 -1
  106. package/dist/extensions/twilio/v2/actions/sendSmsWithMessagingSid/config/index.d.ts +1 -0
  107. package/dist/extensions/twilio/v2/actions/sendSmsWithMessagingSid/config/index.js +3 -1
  108. package/dist/extensions/twilio/v2/actions/sendSmsWithMessagingSid/config/index.js.map +1 -1
  109. package/dist/extensions/twilio/v2/actions/sendSmsWithMessagingSid/sendSmsWithMessagingService.js +7 -2
  110. package/dist/extensions/twilio/v2/actions/sendSmsWithMessagingSid/sendSmsWithMessagingService.js.map +1 -1
  111. package/dist/src/tests/constants.js.map +1 -1
  112. package/package.json +5 -3
@@ -31,7 +31,7 @@ export declare const FieldsValidationSchema: z.ZodObject<{
31
31
  }, "strip", z.ZodTypeAny, {
32
32
  message: string;
33
33
  recipient: string & {
34
- __tag?: "E164Number" | undefined;
34
+ __tag: "E164Number";
35
35
  };
36
36
  fromName?: string | undefined;
37
37
  }, {
@@ -54,7 +54,7 @@ describe('Healthie - Create goal', () => {
54
54
  name: 'My new goal',
55
55
  titleLink: undefined,
56
56
  repeat: undefined,
57
- dueDate: '2024-09-12',
57
+ dueDate: (0, date_fns_1.format)((0, date_fns_1.addDays)(new Date(), 1), 'yyyy-MM-dd'),
58
58
  },
59
59
  settings: {
60
60
  apiUrl: 'https://staging-api.gethealthie.com/graphql',
@@ -1 +1 @@
1
- {"version":3,"file":"createGoal.test.js","sourceRoot":"","sources":["../../../../../extensions/healthie/actions/createGoal/createGoal.test.ts"],"names":[],"mappings":";;AAAA,mCAAqC;AACrC,mEAA2D;AAC3D,8DAAgE;AAChE,uCAA0C;AAC1C,wBAAiD;AACjD,qCAAiD;AAEjD,IAAI,CAAC,IAAI,CAAC,oCAAoC,EAAE,GAAG,EAAE,CAAC,CAAC;IACrD,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/C,MAAM,EAAE;YACN,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;gBACpC,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE;aACtC,CAAC;SACH;KACF,CAAC,CAAC;CACJ,CAAC,CAAC,CAAA;AAEH,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAW,CAAC,CAAA;AAElD,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,MAAM,EACJ,eAAe,EAAE,MAAM,EACvB,UAAU,EACV,OAAO,EACP,OAAO,EACP,UAAU,GACX,GAAG,6BAAW,CAAC,UAAU,CAAC,aAAe,CAAC,CAAA;IAE3C,UAAU,CAAC,GAAG,EAAE;QACd,UAAU,EAAE,CAAA;IACd,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,UAAU,GAAG,IAAA,iBAAM,EAAC,IAAA,kBAAO,EAAC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,CAAC,CAAA;QAE/D,MAAM,MAAM,GAAG;YACb,iBAAiB,EAAE,SAAS;YAC5B,IAAI,EAAE,aAAa;YACnB,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,UAAU;SACpB,CAAA;QAED,MAAM,MAAM,GAAG,+BAAsB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QAEvD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;YACnB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;SACjC;QAED,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEjC,IAAI,MAAM,CAAC,OAAO,EAAE;YAClB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;gBAC1B,iBAAiB,EAAE,SAAS;gBAC5B,IAAI,EAAE,aAAa;gBACnB,SAAS,EAAE,SAAS;gBACpB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,UAAU;aACpB,CAAC,CAAA;SACH;IACH,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,MAAM,CAAC,OAAO,CAAC;YACnB,OAAO,EAAE;gBACP,GAAG,mBAAW;gBACd,MAAM,EAAE;oBACN,iBAAiB,EAAE,QAAQ;oBAC3B,IAAI,EAAE,aAAa;oBACnB,SAAS,EAAE,SAAS;oBACpB,MAAM,EAAE,SAAS;oBACjB,OAAO,EAAE,YAAY;iBACtB;gBACD,QAAQ,EAAE;oBACR,MAAM,EAAE,6CAA6C;oBACrD,MAAM,EAAE,QAAQ;iBACjB;aACF;YACD,UAAU;YACV,OAAO;YACP,OAAO;SACR,CAAC,CAAA;QAEF,MAAM,CAAC,iBAAiB,CAAC,CAAC,gBAAgB,EAAE,CAAA;QAC5C,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC;YACtC,WAAW,EAAE;gBACX,aAAa,EAAE,OAAO;aACvB;SACF,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"createGoal.test.js","sourceRoot":"","sources":["../../../../../extensions/healthie/actions/createGoal/createGoal.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type Action } from '@awell-health/extensions-core';
2
+ import { type settings } from '../../settings';
3
+ import { fields, dataPoints } from './config';
4
+ export declare const categorizeMessage: Action<typeof fields, typeof settings, keyof typeof dataPoints>;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.categorizeMessage = void 0;
4
+ const extensions_core_1 = require("@awell-health/extensions-core");
5
+ const categorizeMessageWithLLM_1 = require("./lib/categorizeMessageWithLLM");
6
+ const lib_1 = require("../../lib");
7
+ const config_1 = require("./config");
8
+ exports.categorizeMessage = {
9
+ key: 'categorizeMessage',
10
+ category: extensions_core_1.Category.WORKFLOW,
11
+ title: 'Categorize Message',
12
+ description: 'Categorize the input message into set of predefined categories',
13
+ fields: config_1.fields,
14
+ previewable: false,
15
+ dataPoints: config_1.dataPoints,
16
+ onEvent: async ({ payload, onComplete, onError, helpers }) => {
17
+ const { langChainOpenAiSdk, fields: { categories, message }, } = await (0, lib_1.validatePayloadAndCreateSdk)({
18
+ fieldsSchema: config_1.FieldsValidationSchema,
19
+ payload,
20
+ });
21
+ try {
22
+ const category = await (0, categorizeMessageWithLLM_1.categorizeMessageWithLLM)({
23
+ langChainOpenAiSdk,
24
+ message,
25
+ categories,
26
+ });
27
+ await onComplete({
28
+ data_points: {
29
+ category,
30
+ },
31
+ });
32
+ }
33
+ catch (error) {
34
+ console.error('Error categorizing message:', error);
35
+ // Catch in extention server
36
+ throw new Error('Error categorizing message');
37
+ }
38
+ },
39
+ };
40
+ //# sourceMappingURL=categorizeMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"categorizeMessage.js","sourceRoot":"","sources":["../../../../../extensions/shelly/actions/categorizeMessage/categorizeMessage.ts"],"names":[],"mappings":";;;AAAA,mEAAqE;AACrE,6EAAyE;AACzE,mCAAuD;AAEvD,qCAAqE;AAExD,QAAA,iBAAiB,GAI1B;IACF,GAAG,EAAE,mBAAmB;IACxB,QAAQ,EAAE,0BAAQ,CAAC,QAAQ;IAC3B,KAAK,EAAE,oBAAoB;IAC3B,WAAW,EAAE,gEAAgE;IAC7E,MAAM,EAAN,eAAM;IACN,WAAW,EAAE,KAAK;IAClB,UAAU,EAAV,mBAAU;IACV,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,EAAiB,EAAE;QAC1E,MAAM,EACJ,kBAAkB,EAClB,MAAM,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,GAChC,GAAG,MAAM,IAAA,iCAA2B,EAAC;YACpC,YAAY,EAAE,+BAAsB;YACpC,OAAO;SACR,CAAC,CAAA;QAEF,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,IAAA,mDAAwB,EAAC;gBAC9C,kBAAkB;gBAClB,OAAO;gBACP,UAAU;aACX,CAAC,CAAA;YAEF,MAAM,UAAU,CAAC;gBACf,WAAW,EAAE;oBACX,QAAQ;iBACT;aACF,CAAC,CAAA;SACH;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAA;YACnD,4BAA4B;YAC5B,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;SAC9C;IACH,CAAC;CACF,CAAA"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const extensions_core_1 = require("@awell-health/extensions-core");
4
+ const tests_1 = require("@/tests");
5
+ const _1 = require(".");
6
+ const openai_1 = require("@langchain/openai");
7
+ jest.mock('@langchain/openai', () => ({
8
+ OpenAI: jest.fn().mockImplementation(() => ({
9
+ pipe: jest.fn().mockReturnThis(),
10
+ invoke: jest.fn().mockResolvedValue({
11
+ matched_entity: 'Appointment Scheduling',
12
+ }),
13
+ })),
14
+ }));
15
+ const mockedOpenAiSdk = jest.mocked(openai_1.OpenAI);
16
+ describe('categorizeMessage - Mocked LLM calls', () => {
17
+ const { onComplete, onError, helpers, extensionAction, clearMocks } = extensions_core_1.TestHelpers.fromAction(_1.categorizeMessage);
18
+ beforeEach(() => {
19
+ clearMocks();
20
+ jest.clearAllMocks();
21
+ });
22
+ it('should work', async () => {
23
+ const mockedOpenAiInstance = new openai_1.OpenAI();
24
+ jest.spyOn(mockedOpenAiInstance, 'invoke').mockResolvedValue({
25
+ // @ts-expect-error fine, we have a parser
26
+ matched_entity: 'Appointment Scheduling',
27
+ });
28
+ const categorizeMessageWithLLMSpy = jest.spyOn(require('./lib/categorizeMessageWithLLM'), 'categorizeMessageWithLLM');
29
+ const payload = (0, tests_1.generateTestPayload)({
30
+ fields: {
31
+ message: 'I would like to schedule an appointment for next week.',
32
+ categories: 'Appointment Scheduling,Medication Questions,Administrative Assistance,Feedback or Complaints',
33
+ },
34
+ settings: {
35
+ openAiApiKey: 'a',
36
+ },
37
+ });
38
+ await extensionAction.onEvent({
39
+ payload,
40
+ onComplete,
41
+ onError,
42
+ helpers,
43
+ });
44
+ expect(mockedOpenAiSdk).toHaveBeenCalled();
45
+ expect(categorizeMessageWithLLMSpy).toHaveBeenCalledWith({
46
+ langChainOpenAiSdk: expect.any(Object),
47
+ message: 'I would like to schedule an appointment for next week.',
48
+ categories: [
49
+ 'Appointment Scheduling',
50
+ 'Medication Questions',
51
+ 'Administrative Assistance',
52
+ 'Feedback or Complaints',
53
+ ],
54
+ });
55
+ expect(onComplete).toHaveBeenCalledWith({
56
+ data_points: {
57
+ category: 'Appointment Scheduling', // Expected category
58
+ },
59
+ });
60
+ expect(onError).not.toHaveBeenCalled();
61
+ });
62
+ });
63
+ //# sourceMappingURL=categorizeMessage.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"categorizeMessage.test.js","sourceRoot":"","sources":["../../../../../extensions/shelly/actions/categorizeMessage/categorizeMessage.test.ts"],"names":[],"mappings":";;AAAA,mEAA2D;AAC3D,mCAA6C;AAC7C,wBAAqC;AACrC,8CAA0C;AAE1C,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;IACpC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1C,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,cAAc,EAAE;QAChC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;YAClC,cAAc,EAAE,wBAAwB;SACzC,CAAC;KACH,CAAC,CAAC;CACJ,CAAC,CAAC,CAAA;AAEH,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,eAAM,CAAC,CAAA;AAE3C,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;IACpD,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,GACjE,6BAAW,CAAC,UAAU,CAAC,oBAAiB,CAAC,CAAA;IAE3C,UAAU,CAAC,GAAG,EAAE;QACd,UAAU,EAAE,CAAA;QACZ,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;QAC3B,MAAM,oBAAoB,GAAG,IAAI,eAAM,EAAE,CAAA;QAEzC,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC,iBAAiB,CAAC;YAC3D,0CAA0C;YAC1C,cAAc,EAAE,wBAAwB;SACzC,CAAC,CAAA;QAEF,MAAM,2BAA2B,GAAG,IAAI,CAAC,KAAK,CAC5C,OAAO,CAAC,gCAAgC,CAAC,EACzC,0BAA0B,CAC3B,CAAA;QAED,MAAM,OAAO,GAAG,IAAA,2BAAmB,EAAC;YAClC,MAAM,EAAE;gBACN,OAAO,EAAE,wDAAwD;gBACjE,UAAU,EACR,8FAA8F;aACjG;YACD,QAAQ,EAAE;gBACR,YAAY,EAAE,GAAG;aAClB;SACF,CAAC,CAAA;QAEF,MAAM,eAAe,CAAC,OAAO,CAAC;YAC5B,OAAO;YACP,UAAU;YACV,OAAO;YACP,OAAO;SACR,CAAC,CAAA;QAEF,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,EAAE,CAAA;QAC1C,MAAM,CAAC,2BAA2B,CAAC,CAAC,oBAAoB,CAAC;YACvD,kBAAkB,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;YACtC,OAAO,EAAE,wDAAwD;YACjE,UAAU,EAAE;gBACV,wBAAwB;gBACxB,sBAAsB;gBACtB,2BAA2B;gBAC3B,wBAAwB;aACzB;SACF,CAAC,CAAA;QAEF,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC;YACtC,WAAW,EAAE;gBACX,QAAQ,EAAE,wBAAwB,EAAE,oBAAoB;aACzD;SACF,CAAC,CAAA;QAEF,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;IACxC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ export declare const dataPoints: {
2
+ category: {
3
+ key: string;
4
+ valueType: "string";
5
+ };
6
+ };
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.dataPoints = void 0;
4
+ exports.dataPoints = {
5
+ category: {
6
+ key: 'category',
7
+ valueType: 'string',
8
+ },
9
+ };
10
+ //# sourceMappingURL=datapoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datapoints.js","sourceRoot":"","sources":["../../../../../../extensions/shelly/actions/categorizeMessage/config/datapoints.ts"],"names":[],"mappings":";;;AAEa,QAAA,UAAU,GAAG;IACxB,QAAQ,EAAE;QACR,GAAG,EAAE,UAAU;QACf,SAAS,EAAE,QAAQ;KACpB;CAC4C,CAAA"}
@@ -0,0 +1,28 @@
1
+ import { FieldType } from '@awell-health/extensions-core';
2
+ import z from 'zod';
3
+ export declare const fields: {
4
+ message: {
5
+ id: string;
6
+ label: string;
7
+ description: string;
8
+ type: FieldType.STRING;
9
+ required: true;
10
+ };
11
+ categories: {
12
+ id: string;
13
+ label: string;
14
+ description: string;
15
+ type: FieldType.STRING;
16
+ required: true;
17
+ };
18
+ };
19
+ export declare const FieldsValidationSchema: z.ZodObject<{
20
+ message: z.ZodString;
21
+ categories: z.ZodEffects<z.ZodEffects<z.ZodString, string[], string>, string[], string>;
22
+ }, "strip", z.ZodTypeAny, {
23
+ message: string;
24
+ categories: string[];
25
+ }, {
26
+ message: string;
27
+ categories: string;
28
+ }>;
@@ -0,0 +1,36 @@
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
+ exports.FieldsValidationSchema = exports.fields = void 0;
7
+ const extensions_core_1 = require("@awell-health/extensions-core");
8
+ const zod_1 = __importDefault(require("zod"));
9
+ exports.fields = {
10
+ message: {
11
+ id: 'message',
12
+ label: 'Message',
13
+ description: 'The message to be categorized',
14
+ type: extensions_core_1.FieldType.STRING,
15
+ required: true,
16
+ },
17
+ categories: {
18
+ id: 'categories',
19
+ label: 'Categories',
20
+ description: 'List of categories (comma-separated, no spaces)',
21
+ type: extensions_core_1.FieldType.STRING,
22
+ required: true,
23
+ },
24
+ };
25
+ exports.FieldsValidationSchema = zod_1.default.object({
26
+ message: zod_1.default.string().min(1, 'Message is required'),
27
+ categories: zod_1.default
28
+ .string()
29
+ .trim()
30
+ .min(1, 'At least one category is required')
31
+ .transform((s) => s.split(',').map((item) => item.trim()))
32
+ .refine((arr) => arr.length > 0, {
33
+ message: 'At least one category is required',
34
+ }),
35
+ });
36
+ //# sourceMappingURL=fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fields.js","sourceRoot":"","sources":["../../../../../../extensions/shelly/actions/categorizeMessage/config/fields.ts"],"names":[],"mappings":";;;;;;AAAA,mEAAqE;AACrE,8CAAwC;AAC3B,QAAA,MAAM,GAAG;IACpB,OAAO,EAAE;QACP,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,+BAA+B;QAC5C,IAAI,EAAE,2BAAS,CAAC,MAAM;QACtB,QAAQ,EAAE,IAAI;KACf;IACD,UAAU,EAAE;QACV,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,iDAAiD;QAC9D,IAAI,EAAE,2BAAS,CAAC,MAAM;QACtB,QAAQ,EAAE,IAAI;KACf;CAC8B,CAAA;AAEpB,QAAA,sBAAsB,GAAG,aAAC,CAAC,MAAM,CAAC;IAC7C,OAAO,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,qBAAqB,CAAC;IACjD,UAAU,EAAE,aAAC;SACV,MAAM,EAAE;SACR,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,EAAE,mCAAmC,CAAC;SAC3C,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;SACzD,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;QAC/B,OAAO,EAAE,mCAAmC;KAC7C,CAAC;CAC6C,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { fields, FieldsValidationSchema } from './fields';
2
+ export { dataPoints } from './datapoints';
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.dataPoints = exports.FieldsValidationSchema = exports.fields = void 0;
4
+ var fields_1 = require("./fields");
5
+ Object.defineProperty(exports, "fields", { enumerable: true, get: function () { return fields_1.fields; } });
6
+ Object.defineProperty(exports, "FieldsValidationSchema", { enumerable: true, get: function () { return fields_1.FieldsValidationSchema; } });
7
+ var datapoints_1 = require("./datapoints");
8
+ Object.defineProperty(exports, "dataPoints", { enumerable: true, get: function () { return datapoints_1.dataPoints; } });
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../extensions/shelly/actions/categorizeMessage/config/index.ts"],"names":[],"mappings":";;;AAAA,mCAAyD;AAAhD,gGAAA,MAAM,OAAA;AAAE,gHAAA,sBAAsB,OAAA;AACvC,2CAAyC;AAAhC,wGAAA,UAAU,OAAA"}
@@ -0,0 +1 @@
1
+ export { categorizeMessage } from './categorizeMessage';
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.categorizeMessage = void 0;
4
+ var categorizeMessage_1 = require("./categorizeMessage");
5
+ Object.defineProperty(exports, "categorizeMessage", { enumerable: true, get: function () { return categorizeMessage_1.categorizeMessage; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../extensions/shelly/actions/categorizeMessage/index.ts"],"names":[],"mappings":";;;AAAA,yDAAuD;AAA9C,sHAAA,iBAAiB,OAAA"}
@@ -0,0 +1,6 @@
1
+ import { type OpenAI } from '@langchain/openai';
2
+ export declare const categorizeMessageWithLLM: ({ langChainOpenAiSdk, message, categories, }: {
3
+ langChainOpenAiSdk: OpenAI;
4
+ message: string;
5
+ categories: string[];
6
+ }) => Promise<string>;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.categorizeMessageWithLLM = void 0;
4
+ const constants_1 = require("./constants");
5
+ const categorizeMessageWithLLM = async ({ langChainOpenAiSdk, message, categories, }) => {
6
+ var _a;
7
+ const prompt = await constants_1.systemPrompt.format({
8
+ categories: categories.concat('None').join(', '),
9
+ input: message,
10
+ });
11
+ const chain = langChainOpenAiSdk.pipe(constants_1.parser);
12
+ console.log('Prompt:', prompt);
13
+ const result = await chain.invoke(prompt);
14
+ console.log('Result', typeof result);
15
+ const matchedEntity = (_a = result.matched_entity) !== null && _a !== void 0 ? _a : 'None';
16
+ console.log('I am matching:', matchedEntity);
17
+ // Ensure that the returned matched entity is valid
18
+ const category = categories.includes(matchedEntity) ? matchedEntity : 'None';
19
+ return category;
20
+ };
21
+ exports.categorizeMessageWithLLM = categorizeMessageWithLLM;
22
+ //# sourceMappingURL=categorizeMessageWithLLM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"categorizeMessageWithLLM.js","sourceRoot":"","sources":["../../../../../../../extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/categorizeMessageWithLLM.ts"],"names":[],"mappings":";;;AAAA,2CAAkD;AAG3C,MAAM,wBAAwB,GAAG,KAAK,EAAE,EAC7C,kBAAkB,EAClB,OAAO,EACP,UAAU,GAKX,EAAmB,EAAE;;IACpB,MAAM,MAAM,GAAG,MAAM,wBAAY,CAAC,MAAM,CAAC;QACvC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAChD,KAAK,EAAE,OAAO;KACf,CAAC,CAAA;IAEF,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,kBAAM,CAAC,CAAA;IAC7C,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;IAC9B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAEzC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,MAAM,CAAC,CAAA;IAEpC,MAAM,aAAa,GAAG,MAAA,MAAM,CAAC,cAAc,mCAAI,MAAM,CAAA;IACrD,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAA;IAE5C,mDAAmD;IACnD,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAA;IAE5E,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AA3BY,QAAA,wBAAwB,4BA2BpC"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ require("dotenv/config");
4
+ const _1 = require("./");
5
+ describe('categorizeMessageWithLLM', () => {
6
+ let langChainOpenAiSdkMock;
7
+ beforeEach(() => {
8
+ // Create a mock for langChainOpenAiSdk
9
+ langChainOpenAiSdkMock = {
10
+ pipe: jest.fn().mockReturnThis(),
11
+ invoke: jest.fn(), // Will mock this separately for each test
12
+ };
13
+ });
14
+ it('should categorize a message about scheduling an appointment using real LLM', async () => {
15
+ langChainOpenAiSdkMock.invoke.mockResolvedValue({
16
+ // @ts-expect-error it's fine, we have a parser
17
+ matched_entity: 'Appointment Scheduling',
18
+ });
19
+ const categories = [
20
+ 'Appointment Scheduling',
21
+ 'Medical Symptoms Inquiry',
22
+ 'Medication Questions',
23
+ 'Administrative Assistance',
24
+ ];
25
+ const message = 'I would like to schedule an appointment for next week.';
26
+ const result = await (0, _1.categorizeMessageWithLLM)({
27
+ langChainOpenAiSdk: langChainOpenAiSdkMock,
28
+ message,
29
+ categories,
30
+ });
31
+ expect(result).toBe('Appointment Scheduling'); // Expected category
32
+ });
33
+ it('should categorize a message about medication using real LLM', async () => {
34
+ langChainOpenAiSdkMock.invoke.mockResolvedValue({
35
+ // @ts-expect-error it's fine, we have a parser
36
+ matched_entity: 'Medication Questions',
37
+ });
38
+ const categories = [
39
+ 'Appointment Scheduling',
40
+ 'Medical Symptoms Inquiry',
41
+ 'Medication Questions',
42
+ 'Administrative Assistance',
43
+ ];
44
+ const message = 'Can you tell me the correct dosage for my medication?';
45
+ const result = await (0, _1.categorizeMessageWithLLM)({
46
+ langChainOpenAiSdk: langChainOpenAiSdkMock,
47
+ message,
48
+ categories,
49
+ });
50
+ expect(result).toBe('Medication Questions'); // Expected category
51
+ });
52
+ it('should return "None" when the message does not match any category using real LLM', async () => {
53
+ langChainOpenAiSdkMock.invoke.mockResolvedValue({
54
+ // @ts-expect-error it's fine, we have a parser
55
+ matched_entity: 'None',
56
+ });
57
+ const categories = [
58
+ 'Appointment Scheduling',
59
+ 'Medical Symptoms Inquiry',
60
+ 'Medication Questions',
61
+ 'Administrative Assistance',
62
+ ];
63
+ const message = 'Is it going to rain tomorrow?'; // Non-related medical category
64
+ const result = await (0, _1.categorizeMessageWithLLM)({
65
+ langChainOpenAiSdk: langChainOpenAiSdkMock,
66
+ message,
67
+ categories,
68
+ });
69
+ expect(result).toBe('None'); // No match expected
70
+ });
71
+ });
72
+ //# sourceMappingURL=categorizeMessageWithLLM.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"categorizeMessageWithLLM.test.js","sourceRoot":"","sources":["../../../../../../../extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/categorizeMessageWithLLM.test.ts"],"names":[],"mappings":";;AAAA,yBAAsB;AACtB,yBAA6C;AAG7C,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,IAAI,sBAA2C,CAAA;IAE/C,UAAU,CAAC,GAAG,EAAE;QACd,uCAAuC;QACvC,sBAAsB,GAAG;YACvB,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,cAAc,EAAE;YAChC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,0CAA0C;SAC5B,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;QAC1F,sBAAsB,CAAC,MAAM,CAAC,iBAAiB,CAAC;YAC9C,+CAA+C;YAC/C,cAAc,EAAE,wBAAwB;SACzC,CAAC,CAAA;QAEF,MAAM,UAAU,GAAG;YACjB,wBAAwB;YACxB,0BAA0B;YAC1B,sBAAsB;YACtB,2BAA2B;SAC5B,CAAA;QACD,MAAM,OAAO,GAAG,wDAAwD,CAAA;QAExE,MAAM,MAAM,GAAG,MAAM,IAAA,2BAAwB,EAAC;YAC5C,kBAAkB,EAAE,sBAAsB;YAC1C,OAAO;YACP,UAAU;SACX,CAAC,CAAA;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA,CAAC,oBAAoB;IACpE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,sBAAsB,CAAC,MAAM,CAAC,iBAAiB,CAAC;YAC9C,+CAA+C;YAC/C,cAAc,EAAE,sBAAsB;SACvC,CAAC,CAAA;QAEF,MAAM,UAAU,GAAG;YACjB,wBAAwB;YACxB,0BAA0B;YAC1B,sBAAsB;YACtB,2BAA2B;SAC5B,CAAA;QACD,MAAM,OAAO,GAAG,uDAAuD,CAAA;QAEvE,MAAM,MAAM,GAAG,MAAM,IAAA,2BAAwB,EAAC;YAC5C,kBAAkB,EAAE,sBAAsB;YAC1C,OAAO;YACP,UAAU;SACX,CAAC,CAAA;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA,CAAC,oBAAoB;IAClE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kFAAkF,EAAE,KAAK,IAAI,EAAE;QAChG,sBAAsB,CAAC,MAAM,CAAC,iBAAiB,CAAC;YAC9C,+CAA+C;YAC/C,cAAc,EAAE,MAAM;SACvB,CAAC,CAAA;QAEF,MAAM,UAAU,GAAG;YACjB,wBAAwB;YACxB,0BAA0B;YAC1B,sBAAsB;YACtB,2BAA2B;SAC5B,CAAA;QACD,MAAM,OAAO,GAAG,+BAA+B,CAAA,CAAC,+BAA+B;QAE/E,MAAM,MAAM,GAAG,MAAM,IAAA,2BAAwB,EAAC;YAC5C,kBAAkB,EAAE,sBAAsB;YAC1C,OAAO;YACP,UAAU;SACX,CAAC,CAAA;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA,CAAC,oBAAoB;IAClD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,18 @@
1
+ import { ChatPromptTemplate } from '@langchain/core/prompts';
2
+ import { StructuredOutputParser } from 'langchain/output_parsers';
3
+ import { z } from 'zod';
4
+ export declare const messageCategoriesSchema: z.ZodObject<{
5
+ matched_entity: z.ZodDefault<z.ZodOptional<z.ZodString>>;
6
+ }, "strip", z.ZodTypeAny, {
7
+ matched_entity: string;
8
+ }, {
9
+ matched_entity?: string | undefined;
10
+ }>;
11
+ export declare const parser: StructuredOutputParser<z.ZodObject<{
12
+ matched_entity: z.ZodDefault<z.ZodOptional<z.ZodString>>;
13
+ }, "strip", z.ZodTypeAny, {
14
+ matched_entity: string;
15
+ }, {
16
+ matched_entity?: string | undefined;
17
+ }>>;
18
+ export declare const systemPrompt: ChatPromptTemplate<import("@langchain/core/prompts").ParamsFromFString<"\n You are an expert in categorizing messages. Your task is to match the provided message to one of the following categories: {categories}.\n If no match is found, return \"None.\"\n \n Please respond with a valid JSON object with the following key: matched_entity.\n \n \n Input:\n {input}\n ">, any>;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.systemPrompt = exports.parser = exports.messageCategoriesSchema = void 0;
4
+ const prompts_1 = require("@langchain/core/prompts");
5
+ const output_parsers_1 = require("langchain/output_parsers");
6
+ const zod_1 = require("zod");
7
+ // Define the Zod schema for the structured response
8
+ exports.messageCategoriesSchema = zod_1.z.object({
9
+ matched_entity: zod_1.z.string().optional().default('None'), // The matched category
10
+ });
11
+ // Create a structured output parser
12
+ exports.parser = output_parsers_1.StructuredOutputParser.fromZodSchema(exports.messageCategoriesSchema);
13
+ // Update the prompt to enforce a structured JSON response
14
+ exports.systemPrompt = prompts_1.ChatPromptTemplate.fromTemplate(`
15
+ You are an expert in categorizing messages. Your task is to match the provided message to one of the following categories: {categories}.
16
+ If no match is found, return "None."
17
+
18
+ Please respond with a valid JSON object with the following key: matched_entity.
19
+
20
+
21
+ Input:
22
+ {input}
23
+ `);
24
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../../../extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/constants.ts"],"names":[],"mappings":";;;AAAA,qDAA4D;AAC5D,6DAAiE;AACjE,6BAAuB;AAEvB,oDAAoD;AACvC,QAAA,uBAAuB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC9C,cAAc,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,uBAAuB;CAC/E,CAAC,CAAA;AAEF,oCAAoC;AACvB,QAAA,MAAM,GAAG,uCAAsB,CAAC,aAAa,CACxD,+BAAuB,CACxB,CAAA;AAED,0DAA0D;AAC7C,QAAA,YAAY,GAAG,4BAAkB,CAAC,YAAY,CAAC;;;;;;;;;OASrD,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export { categorizeMessageWithLLM } from './categorizeMessageWithLLM';
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.categorizeMessageWithLLM = void 0;
4
+ var categorizeMessageWithLLM_1 = require("./categorizeMessageWithLLM");
5
+ Object.defineProperty(exports, "categorizeMessageWithLLM", { enumerable: true, get: function () { return categorizeMessageWithLLM_1.categorizeMessageWithLLM; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/index.ts"],"names":[],"mappings":";;;AAAA,uEAAqE;AAA5D,oIAAA,wBAAwB,OAAA"}
@@ -0,0 +1 @@
1
+ import 'dotenv/config';
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const extensions_core_1 = require("@awell-health/extensions-core");
4
+ const tests_1 = require("@/tests");
5
+ const _1 = require(".");
6
+ require("dotenv/config");
7
+ const settings = {
8
+ openAiApiKey: process.env.OPENAI_TEST_KEY,
9
+ };
10
+ // Remove skip to run the test
11
+ describe.skip('categorizeMessage - Real LLM calls', () => {
12
+ const { onComplete, onError, helpers, extensionAction, clearMocks } = extensions_core_1.TestHelpers.fromAction(_1.categorizeMessage);
13
+ beforeEach(() => {
14
+ clearMocks(); // Reset mocks before each test
15
+ jest.clearAllMocks(); // Reset any mock functions
16
+ });
17
+ it('should successfully categorize a message about scheduling an appointment using real LLM', async () => {
18
+ const payload = (0, tests_1.generateTestPayload)({
19
+ fields: {
20
+ message: 'I would like to schedule an appointment for next week.',
21
+ categories: 'Appointment Scheduling,Medication Questions,Administrative Assistance,Feedback or Complaints',
22
+ },
23
+ settings,
24
+ });
25
+ await extensionAction.onEvent({
26
+ payload,
27
+ onComplete,
28
+ onError,
29
+ helpers,
30
+ });
31
+ // Real LangChain function is called
32
+ expect(onComplete).toHaveBeenCalledWith({
33
+ data_points: {
34
+ category: 'Appointment Scheduling', // Expected category from real LLM
35
+ },
36
+ });
37
+ expect(onError).not.toHaveBeenCalled();
38
+ });
39
+ it('should return "None" when the message does not match any category using real LLM', async () => {
40
+ const payload = (0, tests_1.generateTestPayload)({
41
+ fields: {
42
+ message: 'What books do you like ro read?',
43
+ categories: 'Appointment Scheduling,Medication Questions,Administrative Assistance,Feedback or Complaints',
44
+ },
45
+ settings,
46
+ });
47
+ await extensionAction.onEvent({
48
+ payload,
49
+ onComplete,
50
+ onError,
51
+ helpers,
52
+ });
53
+ // Real LangChain function is called and returns "None"
54
+ expect(onComplete).toHaveBeenCalledWith({
55
+ data_points: {
56
+ category: 'None', // Expected no match
57
+ },
58
+ });
59
+ expect(onError).not.toHaveBeenCalled();
60
+ });
61
+ });
62
+ //# sourceMappingURL=realTest.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realTest.test.js","sourceRoot":"","sources":["../../../../../extensions/shelly/actions/categorizeMessage/realTest.test.ts"],"names":[],"mappings":";;AAAA,mEAA2D;AAC3D,mCAA6C;AAC7C,wBAAqC;AACrC,yBAAsB;AAEtB,MAAM,QAAQ,GAAG;IACf,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe;CAC1C,CAAA;AAED,8BAA8B;AAC9B,QAAQ,CAAC,IAAI,CAAC,oCAAoC,EAAE,GAAG,EAAE;IACvD,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,GACjE,6BAAW,CAAC,UAAU,CAAC,oBAAiB,CAAC,CAAA;IAE3C,UAAU,CAAC,GAAG,EAAE;QACd,UAAU,EAAE,CAAA,CAAC,+BAA+B;QAC5C,IAAI,CAAC,aAAa,EAAE,CAAA,CAAC,2BAA2B;IAClD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yFAAyF,EAAE,KAAK,IAAI,EAAE;QACvG,MAAM,OAAO,GAAG,IAAA,2BAAmB,EAAC;YAClC,MAAM,EAAE;gBACN,OAAO,EAAE,wDAAwD;gBACjE,UAAU,EACR,8FAA8F;aACjG;YACD,QAAQ;SACT,CAAC,CAAA;QAEF,MAAM,eAAe,CAAC,OAAO,CAAC;YAC5B,OAAO;YACP,UAAU;YACV,OAAO;YACP,OAAO;SACR,CAAC,CAAA;QAEF,oCAAoC;QACpC,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC;YACtC,WAAW,EAAE;gBACX,QAAQ,EAAE,wBAAwB,EAAE,kCAAkC;aACvE;SACF,CAAC,CAAA;QAEF,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kFAAkF,EAAE,KAAK,IAAI,EAAE;QAChG,MAAM,OAAO,GAAG,IAAA,2BAAmB,EAAC;YAClC,MAAM,EAAE;gBACN,OAAO,EAAE,iCAAiC;gBAC1C,UAAU,EACR,8FAA8F;aACjG;YACD,QAAQ;SACT,CAAC,CAAA;QAEF,MAAM,eAAe,CAAC,OAAO,CAAC;YAC5B,OAAO;YACP,UAAU;YACV,OAAO;YACP,OAAO;SACR,CAAC,CAAA;QAEF,uDAAuD;QACvD,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC;YACtC,WAAW,EAAE;gBACX,QAAQ,EAAE,MAAM,EAAE,oBAAoB;aACvC;SACF,CAAC,CAAA;QAEF,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;IACxC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -8,20 +8,47 @@ declare const actions: {
8
8
  required: false;
9
9
  };
10
10
  }, {
11
- openAiOrgId: {
11
+ openAiApiKey: {
12
12
  key: string;
13
13
  label: string;
14
- obfuscated: false;
14
+ obfuscated: true;
15
15
  required: true;
16
16
  description: string;
17
17
  };
18
- openAiProjectId: {
18
+ }, "summary">;
19
+ summarizeCareFlow: import("@awell-health/extensions-core").Action<{
20
+ prompt: {
21
+ id: string;
22
+ label: string;
23
+ description: string;
24
+ type: import("@awell-health/extensions-core").FieldType.TEXT;
25
+ required: false;
26
+ };
27
+ }, {
28
+ openAiApiKey: {
19
29
  key: string;
20
30
  label: string;
21
- obfuscated: false;
31
+ obfuscated: true;
22
32
  required: true;
23
33
  description: string;
24
34
  };
35
+ }, "summary">;
36
+ categorizeMessage: import("@awell-health/extensions-core").Action<{
37
+ message: {
38
+ id: string;
39
+ label: string;
40
+ description: string;
41
+ type: import("@awell-health/extensions-core").FieldType.STRING;
42
+ required: true;
43
+ };
44
+ categories: {
45
+ id: string;
46
+ label: string;
47
+ description: string;
48
+ type: import("@awell-health/extensions-core").FieldType.STRING;
49
+ required: true;
50
+ };
51
+ }, {
25
52
  openAiApiKey: {
26
53
  key: string;
27
54
  label: string;
@@ -29,6 +56,23 @@ declare const actions: {
29
56
  required: true;
30
57
  description: string;
31
58
  };
32
- }, "summary">;
59
+ }, "category">;
60
+ medicationFromImage: import("@awell-health/extensions-core").Action<{
61
+ imageUrl: {
62
+ id: string;
63
+ label: string;
64
+ description: string;
65
+ type: import("@awell-health/extensions-core").FieldType.STRING;
66
+ required: true;
67
+ };
68
+ }, {
69
+ openAiApiKey: {
70
+ key: string;
71
+ label: string;
72
+ obfuscated: true;
73
+ required: true;
74
+ description: string;
75
+ };
76
+ }, "data">;
33
77
  };
34
78
  export default actions;
@@ -1,8 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const summarizeForm_1 = require("./summarizeForm");
4
+ const categorizeMessage_1 = require("./categorizeMessage");
5
+ const summarizeCareFlow_1 = require("./summarizeCareFlow");
6
+ const medicationFromImage_1 = require("./medicationFromImage");
4
7
  const actions = {
5
8
  summarizeForm: summarizeForm_1.summarizeForm,
9
+ summarizeCareFlow: summarizeCareFlow_1.summarizeCareFlow,
10
+ categorizeMessage: categorizeMessage_1.categorizeMessage,
11
+ medicationFromImage: medicationFromImage_1.medicationFromImage,
6
12
  };
7
13
  exports.default = actions;
8
14
  //# sourceMappingURL=index.js.map