@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.
- package/dist/extensions/cmDotCom/v1/actions/sendSms/config/fields.d.ts +1 -1
- package/dist/extensions/healthie/actions/createGoal/createGoal.test.js +1 -1
- package/dist/extensions/healthie/actions/createGoal/createGoal.test.js.map +1 -1
- package/dist/extensions/shelly/actions/categorizeMessage/categorizeMessage.d.ts +4 -0
- package/dist/extensions/shelly/actions/categorizeMessage/categorizeMessage.js +40 -0
- package/dist/extensions/shelly/actions/categorizeMessage/categorizeMessage.js.map +1 -0
- package/dist/extensions/shelly/actions/categorizeMessage/categorizeMessage.test.d.ts +1 -0
- package/dist/extensions/shelly/actions/categorizeMessage/categorizeMessage.test.js +63 -0
- package/dist/extensions/shelly/actions/categorizeMessage/categorizeMessage.test.js.map +1 -0
- package/dist/extensions/shelly/actions/categorizeMessage/config/datapoints.d.ts +6 -0
- package/dist/extensions/shelly/actions/categorizeMessage/config/datapoints.js +10 -0
- package/dist/extensions/shelly/actions/categorizeMessage/config/datapoints.js.map +1 -0
- package/dist/extensions/shelly/actions/categorizeMessage/config/fields.d.ts +28 -0
- package/dist/extensions/shelly/actions/categorizeMessage/config/fields.js +36 -0
- package/dist/extensions/shelly/actions/categorizeMessage/config/fields.js.map +1 -0
- package/dist/extensions/shelly/actions/categorizeMessage/config/index.d.ts +2 -0
- package/dist/extensions/shelly/actions/categorizeMessage/config/index.js +9 -0
- package/dist/extensions/shelly/actions/categorizeMessage/config/index.js.map +1 -0
- package/dist/extensions/shelly/actions/categorizeMessage/index.d.ts +1 -0
- package/dist/extensions/shelly/actions/categorizeMessage/index.js +6 -0
- package/dist/extensions/shelly/actions/categorizeMessage/index.js.map +1 -0
- package/dist/extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/categorizeMessageWithLLM.d.ts +6 -0
- package/dist/extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/categorizeMessageWithLLM.js +22 -0
- package/dist/extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/categorizeMessageWithLLM.js.map +1 -0
- package/dist/extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/categorizeMessageWithLLM.test.d.ts +1 -0
- package/dist/extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/categorizeMessageWithLLM.test.js +72 -0
- package/dist/extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/categorizeMessageWithLLM.test.js.map +1 -0
- package/dist/extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/constants.d.ts +18 -0
- package/dist/extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/constants.js +24 -0
- package/dist/extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/constants.js.map +1 -0
- package/dist/extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/index.d.ts +1 -0
- package/dist/extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/index.js +6 -0
- package/dist/extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/index.js.map +1 -0
- package/dist/extensions/shelly/actions/categorizeMessage/realTest.test.d.ts +1 -0
- package/dist/extensions/shelly/actions/categorizeMessage/realTest.test.js +62 -0
- package/dist/extensions/shelly/actions/categorizeMessage/realTest.test.js.map +1 -0
- package/dist/extensions/shelly/actions/index.d.ts +49 -5
- package/dist/extensions/shelly/actions/index.js +6 -0
- package/dist/extensions/shelly/actions/index.js.map +1 -1
- package/dist/extensions/shelly/actions/medicationFromImage/config/datapoints.d.ts +6 -0
- package/dist/extensions/shelly/actions/medicationFromImage/config/datapoints.js +10 -0
- package/dist/extensions/shelly/actions/medicationFromImage/config/datapoints.js.map +1 -0
- package/dist/extensions/shelly/actions/medicationFromImage/config/fields.d.ts +18 -0
- package/dist/extensions/shelly/actions/medicationFromImage/config/fields.js +21 -0
- package/dist/extensions/shelly/actions/medicationFromImage/config/fields.js.map +1 -0
- package/dist/extensions/shelly/actions/medicationFromImage/config/index.d.ts +2 -0
- package/dist/extensions/shelly/actions/medicationFromImage/config/index.js +9 -0
- package/dist/extensions/shelly/actions/medicationFromImage/config/index.js.map +1 -0
- package/dist/extensions/shelly/actions/medicationFromImage/index.d.ts +1 -0
- package/dist/extensions/shelly/actions/medicationFromImage/index.js +6 -0
- package/dist/extensions/shelly/actions/medicationFromImage/index.js.map +1 -0
- package/dist/extensions/shelly/actions/medicationFromImage/medicationFromImage.d.ts +4 -0
- package/dist/extensions/shelly/actions/medicationFromImage/medicationFromImage.js +31 -0
- package/dist/extensions/shelly/actions/medicationFromImage/medicationFromImage.js.map +1 -0
- package/dist/extensions/shelly/actions/medicationFromImage/medicationFromImage.test.d.ts +1 -0
- package/dist/extensions/shelly/actions/medicationFromImage/medicationFromImage.test.js +33 -0
- package/dist/extensions/shelly/actions/medicationFromImage/medicationFromImage.test.js.map +1 -0
- package/dist/extensions/shelly/actions/summarizeCareFlow/config/datapoints.d.ts +6 -0
- package/dist/extensions/shelly/actions/summarizeCareFlow/config/datapoints.js +10 -0
- package/dist/extensions/shelly/actions/summarizeCareFlow/config/datapoints.js.map +1 -0
- package/dist/extensions/shelly/actions/summarizeCareFlow/config/fields.d.ts +18 -0
- package/dist/extensions/shelly/actions/summarizeCareFlow/config/fields.js +21 -0
- package/dist/extensions/shelly/actions/summarizeCareFlow/config/fields.js.map +1 -0
- package/dist/extensions/shelly/actions/summarizeCareFlow/config/index.d.ts +2 -0
- package/dist/extensions/shelly/actions/summarizeCareFlow/config/index.js +9 -0
- package/dist/extensions/shelly/actions/summarizeCareFlow/config/index.js.map +1 -0
- package/dist/extensions/shelly/actions/summarizeCareFlow/index.d.ts +1 -0
- package/dist/extensions/shelly/actions/summarizeCareFlow/index.js +6 -0
- package/dist/extensions/shelly/actions/summarizeCareFlow/index.js.map +1 -0
- package/dist/extensions/shelly/actions/summarizeCareFlow/summarizeCareFlow.d.ts +4 -0
- package/dist/extensions/shelly/actions/summarizeCareFlow/summarizeCareFlow.js +67 -0
- package/dist/extensions/shelly/actions/summarizeCareFlow/summarizeCareFlow.js.map +1 -0
- package/dist/extensions/shelly/actions/summarizeCareFlow/summarizeCareFlow.test.d.ts +1 -0
- package/dist/extensions/shelly/actions/summarizeCareFlow/summarizeCareFlow.test.js +48 -0
- package/dist/extensions/shelly/actions/summarizeCareFlow/summarizeCareFlow.test.js.map +1 -0
- package/dist/extensions/shelly/actions/summarizeForm/lib/getResponseText/getResponseText.js +28 -19
- package/dist/extensions/shelly/actions/summarizeForm/lib/getResponseText/getResponseText.js.map +1 -1
- package/dist/extensions/shelly/actions/summarizeForm/summarizeForm.js +1 -25
- package/dist/extensions/shelly/actions/summarizeForm/summarizeForm.js.map +1 -1
- package/dist/extensions/shelly/actions/summarizeForm/summarizeForm.test.js +1 -3
- package/dist/extensions/shelly/actions/summarizeForm/summarizeForm.test.js.map +1 -1
- package/dist/extensions/shelly/lib/validatePayloadAndCreateSdk.d.ts +2 -2
- package/dist/extensions/shelly/lib/validatePayloadAndCreateSdk.js +6 -6
- package/dist/extensions/shelly/lib/validatePayloadAndCreateSdk.js.map +1 -1
- package/dist/extensions/shelly/settings.d.ts +0 -20
- package/dist/extensions/shelly/settings.js +0 -16
- package/dist/extensions/shelly/settings.js.map +1 -1
- package/dist/extensions/textline/actions/sendSms/config/fields.d.ts +1 -1
- package/dist/extensions/textline/actions/setContactConsent/config/fields.d.ts +1 -1
- package/dist/extensions/twilio/v2/actions/createFlowExecution/config/actionSchema.d.ts +5 -5
- package/dist/extensions/twilio/v2/actions/createFlowExecution/config/fields.d.ts +1 -1
- package/dist/extensions/twilio/v2/actions/sendSms/config/datapoints.d.ts +9 -0
- package/dist/extensions/twilio/v2/actions/sendSms/config/datapoints.js +13 -0
- package/dist/extensions/twilio/v2/actions/sendSms/config/datapoints.js.map +1 -0
- package/dist/extensions/twilio/v2/actions/sendSms/config/fields.d.ts +1 -1
- package/dist/extensions/twilio/v2/actions/sendSms/config/index.d.ts +1 -0
- package/dist/extensions/twilio/v2/actions/sendSms/config/index.js +3 -1
- package/dist/extensions/twilio/v2/actions/sendSms/config/index.js.map +1 -1
- package/dist/extensions/twilio/v2/actions/sendSms/sendSms.js +7 -2
- package/dist/extensions/twilio/v2/actions/sendSms/sendSms.js.map +1 -1
- package/dist/extensions/twilio/v2/actions/sendSmsDuringBusinessHours/config/fields.d.ts +1 -1
- package/dist/extensions/twilio/v2/actions/sendSmsWithMessagingSid/config/datapoints.d.ts +9 -0
- package/dist/extensions/twilio/v2/actions/sendSmsWithMessagingSid/config/datapoints.js +13 -0
- package/dist/extensions/twilio/v2/actions/sendSmsWithMessagingSid/config/datapoints.js.map +1 -0
- package/dist/extensions/twilio/v2/actions/sendSmsWithMessagingSid/config/fields.d.ts +1 -1
- package/dist/extensions/twilio/v2/actions/sendSmsWithMessagingSid/config/index.d.ts +1 -0
- package/dist/extensions/twilio/v2/actions/sendSmsWithMessagingSid/config/index.js +3 -1
- package/dist/extensions/twilio/v2/actions/sendSmsWithMessagingSid/config/index.js.map +1 -1
- package/dist/extensions/twilio/v2/actions/sendSmsWithMessagingSid/sendSmsWithMessagingService.js +7 -2
- package/dist/extensions/twilio/v2/actions/sendSmsWithMessagingSid/sendSmsWithMessagingService.js.map +1 -1
- package/dist/src/tests/constants.js.map +1 -1
- package/package.json +5 -3
@@ -54,7 +54,7 @@ describe('Healthie - Create goal', () => {
|
|
54
54
|
name: 'My new goal',
|
55
55
|
titleLink: undefined,
|
56
56
|
repeat: undefined,
|
57
|
-
dueDate: '
|
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;
|
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,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 @@
|
|
1
|
+
export {};
|
@@ -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 @@
|
|
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,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,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 @@
|
|
1
|
+
import 'dotenv/config';
|
@@ -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"}
|
package/dist/extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/constants.d.ts
ADDED
@@ -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>;
|
package/dist/extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/constants.js
ADDED
@@ -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"}
|
package/dist/extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/index.d.ts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
export { categorizeMessageWithLLM } from './categorizeMessageWithLLM';
|
package/dist/extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/index.js
ADDED
@@ -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
|
package/dist/extensions/shelly/actions/categorizeMessage/lib/categorizeMessageWithLLM/index.js.map
ADDED
@@ -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
|
-
|
11
|
+
openAiApiKey: {
|
12
12
|
key: string;
|
13
13
|
label: string;
|
14
|
-
obfuscated:
|
14
|
+
obfuscated: true;
|
15
15
|
required: true;
|
16
16
|
description: string;
|
17
17
|
};
|
18
|
-
|
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:
|
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
|
-
}, "
|
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
|