@memberjunction/server 0.9.161 → 0.9.163
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.
- package/build.log.json +6 -0
- package/dist/config.js +3 -1
- package/dist/config.js.map +1 -1
- package/dist/generic/PushStatusResolver.js +0 -1
- package/dist/generic/PushStatusResolver.js.map +1 -1
- package/dist/resolvers/AskSkipResolver.js +214 -73
- package/dist/resolvers/AskSkipResolver.js.map +1 -1
- package/package.json +2 -2
- package/src/config.ts +4 -0
- package/src/generic/PushStatusResolver.ts +0 -1
- package/src/resolvers/AskSkipResolver.ts +250 -92
package/build.log.json
CHANGED
package/dist/config.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.loadConfig = exports.configInfo = exports.configFile = exports.mj_core_schema = exports.auth0ClientSecret = exports.auth0WebClientID = exports.auth0Domain = exports.userEmailMap = exports.websiteRunFromPackage = exports.enableIntrospection = exports.tenantID = exports.webClientID = exports.graphqlRootPath = exports.graphqlPort = exports.dbTrustServerCertificate = exports.dbInstanceName = exports.dbDatabase = exports.dbPassword = exports.dbUsername = exports.dbPort = exports.dbHost = exports.nodeEnv = void 0;
|
|
6
|
+
exports.loadConfig = exports.configInfo = exports.configFile = exports.mj_core_schema = exports.auth0ClientSecret = exports.auth0WebClientID = exports.auth0Domain = exports.___skipAPIOrgId = exports.___skipAPIurl = exports.userEmailMap = exports.websiteRunFromPackage = exports.enableIntrospection = exports.tenantID = exports.webClientID = exports.graphqlRootPath = exports.graphqlPort = exports.dbTrustServerCertificate = exports.dbInstanceName = exports.dbDatabase = exports.dbPassword = exports.dbUsername = exports.dbPort = exports.dbHost = exports.nodeEnv = void 0;
|
|
7
7
|
const env_var_1 = __importDefault(require("env-var"));
|
|
8
8
|
const fs_1 = __importDefault(require("fs"));
|
|
9
9
|
const path_1 = __importDefault(require("path"));
|
|
@@ -23,6 +23,8 @@ exports.tenantID = env_var_1.default.get('TENANT_ID').asString();
|
|
|
23
23
|
exports.enableIntrospection = env_var_1.default.get('ENABLE_INTROSPECTION').default('false').asBool();
|
|
24
24
|
exports.websiteRunFromPackage = env_var_1.default.get('WEBSITE_RUN_FROM_PACKAGE').asIntPositive();
|
|
25
25
|
exports.userEmailMap = env_var_1.default.get('USER_EMAIL_MAP').default('{}').asJsonObject();
|
|
26
|
+
exports.___skipAPIurl = env_var_1.default.get('ASK_SKIP_API_URL').required().asString();
|
|
27
|
+
exports.___skipAPIOrgId = env_var_1.default.get('ASK_SKIP_ORGANIZATION_ID').required().asString();
|
|
26
28
|
exports.auth0Domain = env_var_1.default.get('AUTH0_DOMAIN').asString();
|
|
27
29
|
exports.auth0WebClientID = env_var_1.default.get('AUTH0_CLIENT_ID').asString();
|
|
28
30
|
exports.auth0ClientSecret = env_var_1.default.get('AUTH0_CLIENT_SECRET').asString();
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,7 +43,6 @@ __decorate([
|
|
|
43
43
|
(0, type_graphql_1.Subscription)(() => PushStatusNotification, {
|
|
44
44
|
topics: exports.PUSH_STATUS_UPDATES_TOPIC,
|
|
45
45
|
filter: ({ payload, args, context }) => {
|
|
46
|
-
console.log('context', context);
|
|
47
46
|
return payload.sessionId === args.sessionId;
|
|
48
47
|
},
|
|
49
48
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PushStatusResolver.js","sourceRoot":"","sources":["../../src/generic/PushStatusResolver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,+CAA4G;AAE/F,QAAA,yBAAyB,GAAG,qBAAqB,CAAC;AAGxD,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;CASlC,CAAA;AATY,wDAAsB;AAEjC;IADC,IAAA,oBAAK,EAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;uDACvB;AAGjB;IADC,IAAA,oBAAK,EAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC;8BAChB,IAAI;oDAAC;AAGZ;IADC,IAAA,oBAAK,EAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAE,CAAC;;yDACF;iCARR,sBAAsB;IADlC,IAAA,yBAAU,GAAE;GACA,sBAAsB,CASlC;AAYM,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;
|
|
1
|
+
{"version":3,"file":"PushStatusResolver.js","sourceRoot":"","sources":["../../src/generic/PushStatusResolver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,+CAA4G;AAE/F,QAAA,yBAAyB,GAAG,qBAAqB,CAAC;AAGxD,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;CASlC,CAAA;AATY,wDAAsB;AAEjC;IADC,IAAA,oBAAK,EAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;uDACvB;AAGjB;IADC,IAAA,oBAAK,EAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC;8BAChB,IAAI;oDAAC;AAGZ;IADC,IAAA,oBAAK,EAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAE,CAAC;;yDACF;iCARR,sBAAsB;IADlC,IAAA,yBAAU,GAAE;GACA,sBAAsB,CASlC;AAYM,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAO7B,aAAa,CACH,EAAE,OAAO,EAAiC,EAClB,SAAiB;QAEjD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC;IAClD,CAAC;CACF,CAAA;AAbY,gDAAkB;AAO7B;IANC,IAAA,2BAAY,EAAC,GAAG,EAAE,CAAC,sBAAsB,EAAE;QAC1C,MAAM,EAAE,iCAAyB;QACjC,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAsF,EAAE,EAAE;YACzH,OAAO,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC;QAC9C,CAAC;KACF,CAAC;IAEC,WAAA,IAAA,mBAAI,GAAE,CAAA;IACN,WAAA,IAAA,kBAAG,EAAC,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;;;oCAC9B,sBAAsB;uDAExB;6BAZU,kBAAkB;IAD9B,IAAA,uBAAQ,GAAE;GACE,kBAAkB,CAa9B"}
|
|
@@ -26,7 +26,18 @@ const zlib_1 = __importDefault(require("zlib"));
|
|
|
26
26
|
const util_1 = require("util");
|
|
27
27
|
const gzip = (0, util_1.promisify)(zlib_1.default.gzip);
|
|
28
28
|
const PushStatusResolver_1 = require("../generic/PushStatusResolver");
|
|
29
|
-
const
|
|
29
|
+
const config_1 = require("../config");
|
|
30
|
+
const type_graphql_2 = require("type-graphql");
|
|
31
|
+
var SkipResponsePhase;
|
|
32
|
+
(function (SkipResponsePhase) {
|
|
33
|
+
SkipResponsePhase["ClarifyingQuestion"] = "clarifying_question";
|
|
34
|
+
SkipResponsePhase["DataRequest"] = "data_request";
|
|
35
|
+
SkipResponsePhase["AnalysisComplete"] = "analysis_complete";
|
|
36
|
+
})(SkipResponsePhase || (SkipResponsePhase = {}));
|
|
37
|
+
(0, type_graphql_2.registerEnumType)(SkipResponsePhase, {
|
|
38
|
+
name: "SkipResponsePhase",
|
|
39
|
+
description: "The phase of the respons: clarifying_question, data_request, or analysis_complete",
|
|
40
|
+
});
|
|
30
41
|
let AskSkipResultType = class AskSkipResultType {
|
|
31
42
|
};
|
|
32
43
|
exports.AskSkipResultType = AskSkipResultType;
|
|
@@ -38,6 +49,10 @@ __decorate([
|
|
|
38
49
|
(0, type_graphql_1.Field)(() => String),
|
|
39
50
|
__metadata("design:type", String)
|
|
40
51
|
], AskSkipResultType.prototype, "Status", void 0);
|
|
52
|
+
__decorate([
|
|
53
|
+
(0, type_graphql_1.Field)(() => SkipResponsePhase),
|
|
54
|
+
__metadata("design:type", String)
|
|
55
|
+
], AskSkipResultType.prototype, "ResponsePhase", void 0);
|
|
41
56
|
__decorate([
|
|
42
57
|
(0, type_graphql_1.Field)(() => String),
|
|
43
58
|
__metadata("design:type", String)
|
|
@@ -74,8 +89,9 @@ let AskSkipResolver = AskSkipResolver_1 = class AskSkipResolver {
|
|
|
74
89
|
else
|
|
75
90
|
throw new Error(`Creating a new conversation failed`);
|
|
76
91
|
}
|
|
77
|
-
else
|
|
92
|
+
else {
|
|
78
93
|
throw new Error(`User ${userPayload.email} not found in UserCache`);
|
|
94
|
+
}
|
|
79
95
|
}
|
|
80
96
|
else {
|
|
81
97
|
await convoEntity.Load(ConversationId);
|
|
@@ -87,19 +103,14 @@ let AskSkipResolver = AskSkipResolver_1 = class AskSkipResolver {
|
|
|
87
103
|
convoDetailEntity.Role = 'User';
|
|
88
104
|
convoDetailEntity.Set('Sequence', 1);
|
|
89
105
|
await convoDetailEntity.Save();
|
|
90
|
-
const OrganizationId =
|
|
106
|
+
const OrganizationId = config_1.___skipAPIOrgId;
|
|
91
107
|
const dataContext = new skip_types_1.SkipDataContext();
|
|
92
108
|
dataContext.Items.push({
|
|
93
109
|
Type: 'view',
|
|
94
110
|
RecordID: ViewId,
|
|
95
111
|
Data: await this.getViewData(ViewId, user),
|
|
96
112
|
});
|
|
97
|
-
const messages =
|
|
98
|
-
{
|
|
99
|
-
content: UserQuestion,
|
|
100
|
-
role: 'user'
|
|
101
|
-
}
|
|
102
|
-
];
|
|
113
|
+
const messages = await this.LoadConversationDetailsIntoSkipMessages(dataSource, convoEntity.ID, AskSkipResolver_1._maxHistoricalMessages);
|
|
103
114
|
const input = {
|
|
104
115
|
messages: messages,
|
|
105
116
|
conversationID: ConversationId.toString(),
|
|
@@ -117,9 +128,54 @@ let AskSkipResolver = AskSkipResolver_1 = class AskSkipResolver {
|
|
|
117
128
|
});
|
|
118
129
|
return this.HandleSkipRequest(input, UserQuestion, user, dataSource, ConversationId, userPayload, pubSub, md, convoEntity, convoDetailEntity);
|
|
119
130
|
}
|
|
131
|
+
async LoadConversationDetailsIntoSkipMessages(dataSource, ConversationId, maxHistoricalMessages) {
|
|
132
|
+
try {
|
|
133
|
+
const md = new core_1.Metadata();
|
|
134
|
+
const e = md.Entities.find((e) => e.Name === 'Conversation Details');
|
|
135
|
+
const sql = `SELECT
|
|
136
|
+
${maxHistoricalMessages ? 'TOP ' + maxHistoricalMessages : ''} ID, Message, Role, CreatedAt
|
|
137
|
+
FROM
|
|
138
|
+
${e.SchemaName}.${e.BaseView}
|
|
139
|
+
WHERE
|
|
140
|
+
ConversationID = ${ConversationId}
|
|
141
|
+
ORDER
|
|
142
|
+
BY CreatedAt DESC`;
|
|
143
|
+
const result = await dataSource.query(sql);
|
|
144
|
+
if (!result)
|
|
145
|
+
throw new Error(`Error running SQL: ${sql}`);
|
|
146
|
+
else {
|
|
147
|
+
const returnData = result.sort((a, b) => {
|
|
148
|
+
const aDate = new Date(a.CreatedAt);
|
|
149
|
+
const bDate = new Date(b.CreatedAt);
|
|
150
|
+
return aDate.getTime() - bDate.getTime();
|
|
151
|
+
});
|
|
152
|
+
return returnData.map((r) => {
|
|
153
|
+
const skipRole = this.MapDBRoleToSkipRole(r.Role);
|
|
154
|
+
const m = {
|
|
155
|
+
content: skipRole === 'system' ? (r.Message.length > 5000 ? "PARTIAL CONTENT: " + r.Message.substring(0, 5000) : r.Message) : r.Message,
|
|
156
|
+
role: skipRole,
|
|
157
|
+
};
|
|
158
|
+
return m;
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch (e) {
|
|
163
|
+
(0, core_1.LogError)(e);
|
|
164
|
+
throw e;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
MapDBRoleToSkipRole(role) {
|
|
168
|
+
switch (role.trim().toLowerCase()) {
|
|
169
|
+
case 'ai':
|
|
170
|
+
return 'system';
|
|
171
|
+
default:
|
|
172
|
+
return 'user';
|
|
173
|
+
}
|
|
174
|
+
}
|
|
120
175
|
async HandleSkipRequest(input, UserQuestion, user, dataSource, ConversationId, userPayload, pubSub, md, convoEntity, convoDetailEntity) {
|
|
176
|
+
(0, core_1.LogStatus)(`Sending request to Skip API: ${config_1.___skipAPIurl}`);
|
|
121
177
|
const compressedPayload = await gzip(Buffer.from(JSON.stringify(input)));
|
|
122
|
-
const response = await axios_1.default.post(___skipAPIurl, compressedPayload, {
|
|
178
|
+
const response = await axios_1.default.post(config_1.___skipAPIurl, compressedPayload, {
|
|
123
179
|
headers: {
|
|
124
180
|
'Content-Type': 'application/json',
|
|
125
181
|
'Content-Encoding': 'gzip'
|
|
@@ -127,42 +183,19 @@ let AskSkipResolver = AskSkipResolver_1 = class AskSkipResolver {
|
|
|
127
183
|
});
|
|
128
184
|
if (response.status === 200) {
|
|
129
185
|
const apiResponse = response.data;
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
case 'data_request':
|
|
133
|
-
sUserMessage = 'We need to gather some more data, I will do that next and update you soon.';
|
|
134
|
-
break;
|
|
135
|
-
case 'analysis_complete':
|
|
136
|
-
sUserMessage = 'I have completed the analysis, the results will be available momentarily.';
|
|
137
|
-
break;
|
|
138
|
-
case 'clarifying_question':
|
|
139
|
-
sUserMessage = 'I have a clarifying question for you, please see review our chat so you can provide me a little more info.';
|
|
140
|
-
break;
|
|
141
|
-
}
|
|
142
|
-
pubSub.publish(PushStatusResolver_1.PUSH_STATUS_UPDATES_TOPIC, {
|
|
143
|
-
message: JSON.stringify({
|
|
144
|
-
type: 'AskSkip',
|
|
145
|
-
status: 'OK',
|
|
146
|
-
message: sUserMessage,
|
|
147
|
-
}),
|
|
148
|
-
sessionId: userPayload.sessionId,
|
|
149
|
-
});
|
|
186
|
+
(0, core_1.LogStatus)(` Skip API response: ${apiResponse.responsePhase}`);
|
|
187
|
+
this.PublishApiResponseUserUpdateMessage(apiResponse, userPayload, pubSub);
|
|
150
188
|
if (apiResponse.responsePhase === 'data_request') {
|
|
151
189
|
return await this.HandleDataRequestPhase(input, apiResponse, UserQuestion, user, dataSource, ConversationId, userPayload, pubSub, convoEntity, convoDetailEntity);
|
|
152
190
|
}
|
|
153
191
|
else if (apiResponse.responsePhase === 'clarifying_question') {
|
|
154
|
-
|
|
192
|
+
return await this.HandleClarifyingQuestionPhase(input, apiResponse, UserQuestion, user, dataSource, ConversationId, userPayload, pubSub, convoEntity, convoDetailEntity);
|
|
193
|
+
}
|
|
194
|
+
else if (apiResponse.responsePhase === 'analysis_complete') {
|
|
195
|
+
return await this.HandleAnalysisComplete(input, apiResponse, UserQuestion, user, dataSource, ConversationId, userPayload, pubSub, convoEntity, convoDetailEntity);
|
|
155
196
|
}
|
|
156
197
|
else {
|
|
157
|
-
|
|
158
|
-
return {
|
|
159
|
-
Success: true,
|
|
160
|
-
Status: 'OK',
|
|
161
|
-
ConversationId: ConversationId,
|
|
162
|
-
UserMessageConversationDetailId: convoDetailEntity.ID,
|
|
163
|
-
AIMessageConversationDetailId: AIMessageConversationDetailID,
|
|
164
|
-
Result: JSON.stringify(response.data)
|
|
165
|
-
};
|
|
198
|
+
throw new Error(`Unknown Skip API response phase: ${apiResponse.responsePhase}`);
|
|
166
199
|
}
|
|
167
200
|
}
|
|
168
201
|
else {
|
|
@@ -178,53 +211,160 @@ let AskSkipResolver = AskSkipResolver_1 = class AskSkipResolver {
|
|
|
178
211
|
Success: false,
|
|
179
212
|
Status: 'Error',
|
|
180
213
|
Result: `User Question ${UserQuestion} didn't work!`,
|
|
214
|
+
ResponsePhase: SkipResponsePhase.AnalysisComplete,
|
|
181
215
|
ConversationId: ConversationId,
|
|
182
216
|
UserMessageConversationDetailId: 0,
|
|
183
217
|
AIMessageConversationDetailId: 0,
|
|
184
218
|
};
|
|
185
219
|
}
|
|
186
220
|
}
|
|
221
|
+
async PublishApiResponseUserUpdateMessage(apiResponse, userPayload, pubSub) {
|
|
222
|
+
let sUserMessage = '';
|
|
223
|
+
switch (apiResponse.responsePhase) {
|
|
224
|
+
case 'data_request':
|
|
225
|
+
sUserMessage = 'We need to gather some more data, I will do that next and update you soon.';
|
|
226
|
+
break;
|
|
227
|
+
case 'analysis_complete':
|
|
228
|
+
sUserMessage = 'I have completed the analysis, the results will be available momentarily.';
|
|
229
|
+
break;
|
|
230
|
+
case 'clarifying_question':
|
|
231
|
+
sUserMessage = 'I have a clarifying question for you, please see review our chat so you can provide me a little more info.';
|
|
232
|
+
break;
|
|
233
|
+
}
|
|
234
|
+
pubSub.publish(PushStatusResolver_1.PUSH_STATUS_UPDATES_TOPIC, {
|
|
235
|
+
message: JSON.stringify({
|
|
236
|
+
type: 'AskSkip',
|
|
237
|
+
status: 'OK',
|
|
238
|
+
message: sUserMessage,
|
|
239
|
+
}),
|
|
240
|
+
sessionId: userPayload.sessionId,
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
async HandleAnalysisComplete(apiRequest, apiResponse, UserQuestion, user, dataSource, ConversationId, userPayload, pubSub, convoEntity, convoDetailEntity) {
|
|
244
|
+
const md = new core_1.Metadata();
|
|
245
|
+
const { AIMessageConversationDetailID } = await this.FinishConversationAndNotifyUser(apiResponse, md, user, convoEntity, pubSub, userPayload);
|
|
246
|
+
return {
|
|
247
|
+
Success: true,
|
|
248
|
+
Status: 'OK',
|
|
249
|
+
ResponsePhase: SkipResponsePhase.AnalysisComplete,
|
|
250
|
+
ConversationId: ConversationId,
|
|
251
|
+
UserMessageConversationDetailId: convoDetailEntity.ID,
|
|
252
|
+
AIMessageConversationDetailId: AIMessageConversationDetailID,
|
|
253
|
+
Result: JSON.stringify(apiResponse)
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
async HandleClarifyingQuestionPhase(apiRequest, apiResponse, UserQuestion, user, dataSource, ConversationId, userPayload, pubSub, convoEntity, convoDetailEntity) {
|
|
257
|
+
const md = new core_1.Metadata();
|
|
258
|
+
const convoDetailEntityAI = await md.GetEntityObject('Conversation Details', user);
|
|
259
|
+
convoDetailEntityAI.NewRecord();
|
|
260
|
+
convoDetailEntityAI.ConversationID = ConversationId;
|
|
261
|
+
convoDetailEntityAI.Message = apiResponse.clarifyingQuestion;
|
|
262
|
+
convoDetailEntityAI.Role = 'AI';
|
|
263
|
+
if (await convoDetailEntityAI.Save()) {
|
|
264
|
+
return {
|
|
265
|
+
Success: true,
|
|
266
|
+
Status: 'OK',
|
|
267
|
+
ResponsePhase: SkipResponsePhase.ClarifyingQuestion,
|
|
268
|
+
ConversationId: ConversationId,
|
|
269
|
+
UserMessageConversationDetailId: convoDetailEntity.ID,
|
|
270
|
+
AIMessageConversationDetailId: convoDetailEntityAI.ID,
|
|
271
|
+
Result: JSON.stringify(apiResponse)
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
else {
|
|
275
|
+
return {
|
|
276
|
+
Success: false,
|
|
277
|
+
Status: 'Error',
|
|
278
|
+
ResponsePhase: SkipResponsePhase.ClarifyingQuestion,
|
|
279
|
+
ConversationId: ConversationId,
|
|
280
|
+
UserMessageConversationDetailId: convoDetailEntity.ID,
|
|
281
|
+
AIMessageConversationDetailId: convoDetailEntityAI.ID,
|
|
282
|
+
Result: JSON.stringify(apiResponse)
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
}
|
|
187
286
|
async HandleDataRequestPhase(apiRequest, apiResponse, UserQuestion, user, dataSource, ConversationId, userPayload, pubSub, convoEntity, convoDetailEntity) {
|
|
188
287
|
try {
|
|
288
|
+
const _maxDataGatheringRetries = 5;
|
|
289
|
+
const _dataGatheringFailureHeaderMessage = '***DATA GATHERING FAILURE***';
|
|
189
290
|
const md = new core_1.Metadata();
|
|
291
|
+
const executionErrors = [];
|
|
292
|
+
apiRequest.messages.push({
|
|
293
|
+
content: `Skip API Requested Data as shown below
|
|
294
|
+
${JSON.stringify(apiResponse.dataRequest)}`,
|
|
295
|
+
role: 'system'
|
|
296
|
+
});
|
|
190
297
|
for (const dr of apiResponse.dataRequest) {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
298
|
+
try {
|
|
299
|
+
switch (dr.type) {
|
|
300
|
+
case "sql":
|
|
301
|
+
const sql = dr.text;
|
|
302
|
+
const result = await dataSource.query(sql);
|
|
303
|
+
if (!result)
|
|
304
|
+
throw new Error(`Error running SQL: ${sql}`);
|
|
305
|
+
const item = new skip_types_1.SkipDataContextItem();
|
|
306
|
+
item.Type = 'sql';
|
|
307
|
+
item.Data = result;
|
|
308
|
+
item.RecordName = dr.text;
|
|
309
|
+
item.AdditionalDescription = dr.description;
|
|
310
|
+
apiRequest.dataContext.Items.push(item);
|
|
311
|
+
break;
|
|
312
|
+
case "stored_query":
|
|
313
|
+
const queryName = dr.text;
|
|
314
|
+
const query = md.Queries.find((q) => q.Name === queryName);
|
|
315
|
+
if (query) {
|
|
316
|
+
const rq = new core_1.RunQuery();
|
|
317
|
+
const result = await rq.RunQuery({ QueryID: query.ID }, user);
|
|
318
|
+
if (result && result.Success) {
|
|
319
|
+
const item = new skip_types_1.SkipDataContextItem();
|
|
320
|
+
item.Type = 'query';
|
|
321
|
+
item.Data = result.Results;
|
|
322
|
+
item.RecordID = query.ID;
|
|
323
|
+
item.RecordName = query.Name;
|
|
324
|
+
item.AdditionalDescription = dr.description;
|
|
325
|
+
apiRequest.dataContext.Items.push(item);
|
|
326
|
+
}
|
|
327
|
+
else
|
|
328
|
+
throw new Error(`Error running query ${queryName}`);
|
|
218
329
|
}
|
|
219
330
|
else
|
|
220
|
-
throw new Error(`
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
331
|
+
throw new Error(`Query ${queryName} not found.`);
|
|
332
|
+
break;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
catch (e) {
|
|
336
|
+
(0, core_1.LogError)(e);
|
|
337
|
+
executionErrors.push({ dataRequest: dr, errorMessage: e && e.message ? e.message : e.toString() });
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
if (executionErrors.length > 0) {
|
|
341
|
+
const dataGatheringFailedAttemptCount = apiRequest.messages.filter((m) => m.content.includes(_dataGatheringFailureHeaderMessage)).length + 1;
|
|
342
|
+
if (dataGatheringFailedAttemptCount > _maxDataGatheringRetries) {
|
|
343
|
+
(0, core_1.LogStatus)(`Execution errors for Skip data request occured, and we have exceeded the max retries${_maxDataGatheringRetries}, sending errors back to the user.`);
|
|
344
|
+
return {
|
|
345
|
+
Success: false,
|
|
346
|
+
Status: 'Error gathering data and we have exceedded the max retries. Try again later and Skip might be able to handle this request.',
|
|
347
|
+
ResponsePhase: SkipResponsePhase.DataRequest,
|
|
348
|
+
ConversationId: ConversationId,
|
|
349
|
+
UserMessageConversationDetailId: convoDetailEntity.ID,
|
|
350
|
+
AIMessageConversationDetailId: 0,
|
|
351
|
+
Result: JSON.stringify(apiResponse)
|
|
352
|
+
};
|
|
225
353
|
}
|
|
354
|
+
else {
|
|
355
|
+
(0, core_1.LogStatus)(`Execution errors for Skip data request occured, sending those errors back to the Skip API to get new instructions.`);
|
|
356
|
+
apiRequest.requestPhase = 'data_gathering_failure';
|
|
357
|
+
apiRequest.messages.push({
|
|
358
|
+
content: `${_dataGatheringFailureHeaderMessage} #${dataGatheringFailedAttemptCount} of ${_maxDataGatheringRetries} attempts to gather data failed. Errors:
|
|
359
|
+
${JSON.stringify(executionErrors)}
|
|
360
|
+
`,
|
|
361
|
+
role: 'user'
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
apiRequest.requestPhase = 'data_gathering_response';
|
|
226
367
|
}
|
|
227
|
-
apiRequest.requestPhase = 'data_gathering_response';
|
|
228
368
|
return this.HandleSkipRequest(apiRequest, UserQuestion, user, dataSource, ConversationId, userPayload, pubSub, md, convoEntity, convoDetailEntity);
|
|
229
369
|
}
|
|
230
370
|
catch (e) {
|
|
@@ -283,6 +423,7 @@ let AskSkipResolver = AskSkipResolver_1 = class AskSkipResolver {
|
|
|
283
423
|
};
|
|
284
424
|
exports.AskSkipResolver = AskSkipResolver;
|
|
285
425
|
AskSkipResolver._defaultNewChatName = 'New Chat';
|
|
426
|
+
AskSkipResolver._maxHistoricalMessages = 8;
|
|
286
427
|
__decorate([
|
|
287
428
|
(0, type_graphql_1.Query)(() => AskSkipResultType),
|
|
288
429
|
__param(0, (0, type_graphql_1.Arg)('UserQuestion', () => String)),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AskSkipResolver.js","sourceRoot":"","sources":["../../src/resolvers/AskSkipResolver.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AskSkipResolver.js","sourceRoot":"","sources":["../../src/resolvers/AskSkipResolver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,+CAAuG;AACvG,+CAAkH;AAElH,mFAAmE;AACnE,2DAAgO;AAChO,kDAA0B;AAC1B,gDAAwB;AACxB,+BAAiC;AAEjC,MAAM,IAAI,GAAG,IAAA,gBAAS,EAAC,cAAI,CAAC,IAAI,CAAC,CAAC;AAElC,sEAA0E;AAG1E,sCAA2D;AAG3D,+CAAgD;AAGhD,IAAK,iBAIJ;AAJD,WAAK,iBAAiB;IACpB,+DAA0C,CAAA;IAC1C,iDAA4B,CAAA;IAC5B,2DAAsC,CAAA;AACxC,CAAC,EAJI,iBAAiB,KAAjB,iBAAiB,QAIrB;AAED,IAAA,+BAAgB,EAAC,iBAAiB,EAAE;IAClC,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,mFAAmF;CACjG,CAAC,CAAC;AAII,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;CAqB7B,CAAA;AArBY,8CAAiB;AAE5B;IADC,IAAA,oBAAK,EAAC,GAAG,EAAE,CAAC,OAAO,CAAC;;kDACJ;AAGjB;IADC,IAAA,oBAAK,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC;;iDACL;AAGf;IADC,IAAA,oBAAK,EAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC;;wDACE;AAGjC;IADC,IAAA,oBAAK,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC;;iDACL;AAGf;IADC,IAAA,oBAAK,EAAC,GAAG,EAAE,CAAC,kBAAG,CAAC;;yDACM;AAGvB;IADC,IAAA,oBAAK,EAAC,GAAG,EAAE,CAAC,kBAAG,CAAC;;0EACuB;AAGxC;IADC,IAAA,oBAAK,EAAC,GAAG,EAAE,CAAC,kBAAG,CAAC;;wEACqB;4BApB3B,iBAAiB;IAD7B,IAAA,yBAAU,GAAE;GACA,iBAAiB,CAqB7B;AAIM,IAAM,eAAe,uBAArB,MAAM,eAAe;IAMpB,AAAN,KAAK,CAAC,2BAA2B,CACI,YAAoB,EAC7B,MAAc,EACN,cAAsB,EACjD,EAAE,UAAU,EAAE,WAAW,EAAc,EACpC,MAAoB;QAE9B,MAAM,EAAE,GAAG,IAAI,eAAQ,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,kCAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,KAAK,CAAC,CAAC;QACjF,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,WAAW,CAAC,KAAK,yBAAyB,CAAC,CAAC;QAE/E,MAAM,WAAW,GAAuB,MAAM,EAAE,CAAC,eAAe,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QACxF,IAAI,CAAC,cAAc,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;YAE3C,WAAW,CAAC,SAAS,EAAE,CAAC;YACxB,IAAI,IAAI,EAAE,CAAC;gBACT,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;gBAC7B,WAAW,CAAC,IAAI,GAAG,iBAAe,CAAC,mBAAmB,CAAC;gBACvD,IAAI,MAAM,WAAW,CAAC,IAAI,EAAE;oBAC1B,cAAc,GAAG,WAAW,CAAC,EAAE,CAAC;;oBAEhC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;YAC1D,CAAC;iBACI,CAAC;gBACJ,MAAM,IAAI,KAAK,CAAC,QAAQ,WAAW,CAAC,KAAK,yBAAyB,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACzC,CAAC;QAGD,MAAM,iBAAiB,GAAG,MAAM,EAAE,CAAC,eAAe,CAA2B,sBAAsB,EAAE,IAAI,CAAC,CAAC;QAC3G,iBAAiB,CAAC,SAAS,EAAE,CAAC;QAC9B,iBAAiB,CAAC,cAAc,GAAG,cAAc,CAAC;QAClD,iBAAiB,CAAC,OAAO,GAAG,YAAY,CAAC;QACzC,iBAAiB,CAAC,IAAI,GAAG,MAAM,CAAC;QAChC,iBAAiB,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QACrC,MAAM,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAG/B,MAAM,cAAc,GAAG,wBAAe,CAAC;QACvC,MAAM,WAAW,GAAoB,IAAI,4BAAe,EAAE,CAAC;QAC3D,WAAW,CAAC,KAAK,CAAC,IAAI,CACpB;YACE,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC;SACpB,CACzB,CAAC;QAGF,MAAM,QAAQ,GAAkB,MAAM,IAAI,CAAC,uCAAuC,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,EAAE,iBAAe,CAAC,sBAAsB,CAAC,CAAC;QAEvJ,MAAM,KAAK,GAAmB;YACd,QAAQ,EAAE,QAAQ;YAClB,cAAc,EAAE,cAAc,CAAC,QAAQ,EAAE;YACzC,WAAW,EAAE,WAAW;YACxB,cAAc,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/E,YAAY,EAAE,iBAAiB;SAChC,CAAC;QAEhB,MAAM,CAAC,OAAO,CAAC,8CAAyB,EAAE;YACxC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;gBACtB,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,qEAAqE;aAC/E,CAAC;YACF,SAAS,EAAE,WAAW,CAAC,SAAS;SACjC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;IAChJ,CAAC;IAES,KAAK,CAAC,uCAAuC,CAAC,UAAsB,EAAE,cAAsB,EAAE,qBAA8B;QACpI,IAAI,CAAC;YAEH,MAAM,EAAE,GAAG,IAAI,eAAQ,EAAE,CAAC;YAC1B,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,sBAAsB,CAAC,CAAC;YACrE,MAAM,GAAG,GAAG;wBACM,qBAAqB,CAAC,CAAC,CAAC,MAAM,GAAG,qBAAqB,CAAC,CAAC,CAAC,EAAE;;wBAE3D,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,QAAQ;;yCAET,cAAc;;wCAEf,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3C,IAAI,CAAC,MAAM;gBACT,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAG,EAAE,CAAC,CAAC;iBACzC,CAAC;gBAIL,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,EAAE,EAAE;oBAChD,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;oBACpC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;oBACpC,OAAO,KAAK,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC3C,CAAC,CAAC,CAAC;gBAGH,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAA2B,EAAE,EAAE;oBAGpD,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBAClD,MAAM,CAAC,GAAgB;wBACrB,OAAO,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,mBAAmB,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;wBACvI,IAAI,EAAE,QAAQ;qBACf,CAAC;oBACF,OAAO,CAAC,CAAC;gBACX,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,OAAO,CAAC,EAAE,CAAC;YACT,IAAA,eAAQ,EAAC,CAAC,CAAC,CAAC;YACZ,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IAES,mBAAmB,CAAC,IAAY;QACxC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;YAClC,KAAK,IAAI;gBACP,OAAO,QAAQ,CAAC;YAClB;gBACE,OAAO,MAAM,CAAC;QAClB,CAAC;IACH,CAAC;IAES,KAAK,CAAC,iBAAiB,CAAC,KAAqB,EAAE,YAAoB,EAAE,IAAc,EAAE,UAAsB,EACnF,cAAsB,EAAE,WAAwB,EAAE,MAAoB,EAAE,EAAY,EACpF,WAA+B,EAAE,iBAA2C;QAC5G,IAAA,gBAAS,EAAC,gCAAgC,sBAAa,EAAE,CAAC,CAAA;QAG1D,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAGzE,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAAC,sBAAa,EAAE,iBAAiB,EAAE;YAClE,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,kBAAkB,EAAE,MAAM;aAC3B;SACF,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,WAAW,GAAoB,QAAQ,CAAC,IAAI,CAAC;YACnD,IAAA,gBAAS,EAAC,wBAAwB,WAAW,CAAC,aAAa,EAAE,CAAC,CAAA;YAC9D,IAAI,CAAC,mCAAmC,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;YAG3E,IAAI,WAAW,CAAC,aAAa,KAAK,cAAc,EAAE,CAAC;gBACjD,OAAO,MAAM,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAA8B,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;YAChM,CAAC;iBACI,IAAI,WAAW,CAAC,aAAa,KAAK,qBAAqB,EAAE,CAAC;gBAE7D,OAAO,MAAM,IAAI,CAAC,6BAA6B,CAAC,KAAK,EAAqC,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;YAC9M,CAAC;iBACI,IAAI,WAAW,CAAC,aAAa,KAAK,mBAAmB,EAAE,CAAC;gBAC3D,OAAO,MAAM,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAmC,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;YACrM,CAAC;iBACI,CAAC;gBAEJ,MAAM,IAAI,KAAK,CAAC,oCAAoC,WAAW,CAAC,aAAa,EAAE,CAAC,CAAC;YACnF,CAAC;QACH,CAAC;aACI,CAAC;YACJ,MAAM,CAAC,OAAO,CAAC,8CAAyB,EAAE;gBACxC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;oBACtB,IAAI,EAAE,SAAS;oBACf,MAAM,EAAE,OAAO;oBACf,OAAO,EAAE,kGAAkG;iBAC5G,CAAC;gBACF,SAAS,EAAE,WAAW,CAAC,SAAS;aACjC,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,OAAO;gBACf,MAAM,EAAE,iBAAiB,YAAY,eAAe;gBACpD,aAAa,EAAE,iBAAiB,CAAC,gBAAgB;gBACjD,cAAc,EAAE,cAAc;gBAC9B,+BAA+B,EAAE,CAAC;gBAClC,6BAA6B,EAAE,CAAC;aACjC,CAAC;QACJ,CAAC;IACH,CAAC;IAES,KAAK,CAAC,mCAAmC,CAAC,WAA4B,EAAE,WAAwB,EAAE,MAAoB;QAC9H,IAAI,YAAY,GAAW,EAAE,CAAC;QAC9B,QAAQ,WAAW,CAAC,aAAa,EAAE,CAAC;YAClC,KAAK,cAAc;gBACjB,YAAY,GAAG,4EAA4E,CAAC;gBAC5F,MAAM;YACR,KAAK,mBAAmB;gBACtB,YAAY,GAAG,2EAA2E,CAAC;gBAC3F,MAAM;YACR,KAAK,qBAAqB;gBACxB,YAAY,GAAG,4GAA4G,CAAC;gBAC5H,MAAM;QACV,CAAC;QAGD,MAAM,CAAC,OAAO,CAAC,8CAAyB,EAAE;YACxC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;gBACtB,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,YAAY;aACtB,CAAC;YACF,SAAS,EAAE,WAAW,CAAC,SAAS;SACjC,CAAC,CAAC;IACL,CAAC;IAES,KAAK,CAAC,sBAAsB,CAAC,UAA0B,EAAE,WAA4C,EAAE,YAAoB,EAAE,IAAc,EAAE,UAAsB,EACtI,cAAsB,EAAE,WAAwB,EAAE,MAAoB,EAAE,WAA+B,EAAE,iBAA2C;QAGzL,MAAM,EAAE,GAAG,IAAI,eAAQ,EAAE,CAAC;QAC1B,MAAM,EAAC,6BAA6B,EAAC,GAAG,MAAM,IAAI,CAAC,+BAA+B,CAAC,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAE5I,OAAO;YACL,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,IAAI;YACZ,aAAa,EAAE,iBAAiB,CAAC,gBAAgB;YACjD,cAAc,EAAE,cAAc;YAC9B,+BAA+B,EAAE,iBAAiB,CAAC,EAAE;YACrD,6BAA6B,EAAE,6BAA6B;YAC5D,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;SACpC,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,6BAA6B,CAAC,UAA0B,EAAE,WAA8C,EAAE,YAAoB,EAAE,IAAc,EAAE,UAAsB,EACxI,cAAsB,EAAE,WAAwB,EAAE,MAAoB,EAAE,WAA+B,EAAE,iBAA2C;QAEhM,MAAM,EAAE,GAAG,IAAI,eAAQ,EAAE,CAAC;QAC1B,MAAM,mBAAmB,GAA6B,MAAM,EAAE,CAAC,eAAe,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;QAC7G,mBAAmB,CAAC,SAAS,EAAE,CAAC;QAChC,mBAAmB,CAAC,cAAc,GAAG,cAAc,CAAC;QACpD,mBAAmB,CAAC,OAAO,GAAG,WAAW,CAAC,kBAAkB,CAAC;QAC7D,mBAAmB,CAAC,IAAI,GAAG,IAAI,CAAC;QAChC,IAAI,MAAM,mBAAmB,CAAC,IAAI,EAAE,EAAE,CAAC;YACrC,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,IAAI;gBACZ,aAAa,EAAE,iBAAiB,CAAC,kBAAkB;gBACnD,cAAc,EAAE,cAAc;gBAC9B,+BAA+B,EAAE,iBAAiB,CAAC,EAAE;gBACrD,6BAA6B,EAAE,mBAAmB,CAAC,EAAE;gBACrD,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;aACpC,CAAC;QACJ,CAAC;aACI,CAAC;YACJ,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,OAAO;gBACf,aAAa,EAAE,iBAAiB,CAAC,kBAAkB;gBACnD,cAAc,EAAE,cAAc;gBAC9B,+BAA+B,EAAE,iBAAiB,CAAC,EAAE;gBACrD,6BAA6B,EAAE,mBAAmB,CAAC,EAAE;gBACrD,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;aACpC,CAAC;QACJ,CAAC;IACH,CAAC;IAES,KAAK,CAAC,sBAAsB,CAAC,UAA0B,EAAE,WAAuC,EAAE,YAAoB,EAAE,IAAc,EAAE,UAAsB,EACjI,cAAsB,EAAE,WAAwB,EAAE,MAAoB,EAAE,WAA+B,EAAE,iBAA2C;QAEzL,IAAI,CAAC;YACH,MAAM,wBAAwB,GAAG,CAAC,CAAC;YACnC,MAAM,kCAAkC,GAAG,8BAA8B,CAAC;YAC1E,MAAM,EAAE,GAAG,IAAI,eAAQ,EAAE,CAAC;YAC1B,MAAM,eAAe,GAAG,EAAE,CAAC;YAG3B,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACvB,OAAO,EAAE;oBACG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE;gBACrD,IAAI,EAAE,QAAQ;aACf,CAAC,CAAC;YAEH,KAAK,MAAM,EAAE,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;gBACzC,IAAI,CAAC;oBACH,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;wBAChB,KAAK,KAAK;4BACR,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;4BACpB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;4BAC3C,IAAI,CAAC,MAAM;gCACT,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAG,EAAE,CAAC,CAAC;4BAE/C,MAAM,IAAI,GAAG,IAAI,gCAAmB,EAAE,CAAC;4BACvC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;4BAClB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;4BACnB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,IAAI,CAAC;4BAC1B,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC,WAAW,CAAC;4BAC5C,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4BACxC,MAAM;wBACR,KAAK,cAAc;4BACjB,MAAM,SAAS,GAAG,EAAE,CAAC,IAAI,CAAC;4BAC1B,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;4BAC3D,IAAI,KAAK,EAAE,CAAC;gCACV,MAAM,EAAE,GAAG,IAAI,eAAQ,EAAE,CAAC;gCAC1B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAC,EAAE,IAAI,CAAC,CAAA;gCAC3D,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oCAC7B,MAAM,IAAI,GAAG,IAAI,gCAAmB,EAAE,CAAC;oCACvC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;oCACpB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;oCAC3B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC;oCACzB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC;oCAC7B,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC,WAAW,CAAC;oCAC5C,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gCAC1C,CAAC;;oCAEC,MAAM,IAAI,KAAK,CAAC,uBAAuB,SAAS,EAAE,CAAC,CAAC;4BACxD,CAAC;;gCAEC,MAAM,IAAI,KAAK,CAAC,SAAS,SAAS,aAAa,CAAC,CAAC;4BACnD,MAAM;oBACV,CAAC;gBACH,CAAC;gBACD,OAAO,CAAC,EAAE,CAAC;oBACT,IAAA,eAAQ,EAAC,CAAC,CAAC,CAAC;oBACZ,eAAe,CAAC,IAAI,CAAC,EAAC,WAAW,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAC,CAAC,CAAC;gBACnG,CAAC;YACH,CAAC;YAED,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,MAAM,+BAA+B,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,kCAAkC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC7I,IAAI,+BAA+B,GAAG,wBAAwB,EAAE,CAAC;oBAE/D,IAAA,gBAAS,EAAC,uFAAuF,wBAAwB,oCAAoC,CAAC,CAAC;oBAC/J,OAAO;wBACL,OAAO,EAAE,KAAK;wBACd,MAAM,EAAE,4HAA4H;wBACpI,aAAa,EAAE,iBAAiB,CAAC,WAAW;wBAC5C,cAAc,EAAE,cAAc;wBAC9B,+BAA+B,EAAE,iBAAiB,CAAC,EAAE;wBACrD,6BAA6B,EAAE,CAAC;wBAChC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;qBACpC,CAAC;gBACJ,CAAC;qBACI,CAAC;oBACJ,IAAA,gBAAS,EAAC,oHAAoH,CAAC,CAAC;oBAChI,UAAU,CAAC,YAAY,GAAG,wBAAwB,CAAC;oBACnD,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;wBACvB,OAAO,EAAE,GAAG,kCAAkC,KAAK,+BAA+B,OAAO,wBAAwB;wBACrG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC;qBAClC;wBACT,IAAI,EAAE,MAAM;qBACb,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;iBACI,CAAC;gBACF,UAAU,CAAC,YAAY,GAAG,yBAAyB,CAAC;YACtD,CAAC;YAEH,OAAO,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;QACrJ,CAAC;QACD,OAAO,CAAC,EAAE,CAAC;YACT,IAAA,eAAQ,EAAC,CAAC,CAAC,CAAC;YACZ,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IAYS,KAAK,CAAC,+BAA+B,CAAC,WAA4C,EAAE,EAAY,EAAE,IAAc,EAAE,WAA+B,EAAE,MAAoB,EAAE,WAAwB;QACzM,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAG5C,MAAM,mBAAmB,GAA6B,MAAM,EAAE,CAAC,eAAe,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;QAC7G,mBAAmB,CAAC,SAAS,EAAE,CAAC;QAChC,mBAAmB,CAAC,cAAc,GAAG,WAAW,CAAC,EAAE,CAAC;QACpD,mBAAmB,CAAC,OAAO,GAAG,OAAO,CAAC;QACtC,mBAAmB,CAAC,IAAI,GAAG,IAAI,CAAC;QAChC,mBAAmB,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QACvC,MAAM,mBAAmB,CAAC,IAAI,EAAE,CAAC;QAGjC,IAAI,WAAW,CAAC,IAAI,KAAK,iBAAe,CAAC,mBAAmB,IAAI,MAAM,EAAE,CAAC;YACvE,WAAW,CAAC,IAAI,GAAG,MAAM,CAAC;YAC1B,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;QAC3B,CAAC;QAGD,MAAM,gBAAgB,GAA2B,MAAM,EAAE,CAAC,eAAe,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;QACtG,gBAAgB,CAAC,SAAS,EAAE,CAAC;QAC7B,gBAAgB,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;QAClC,gBAAgB,CAAC,KAAK,GAAG,kBAAkB,GAAG,MAAM,CAAC;QACrD,gBAAgB,CAAC,OAAO,GAAG,oHAAoH,CAAC;QAChJ,gBAAgB,CAAC,MAAM,GAAG,IAAI,CAAC;QAC/B,gBAAgB,CAAC,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC;YACtD,IAAI,EAAE,SAAS;YACf,cAAc,EAAE,WAAW,CAAC,EAAE;SAC/B,CAAC,CAAC;QACH,MAAM,gBAAgB,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,CAAC,OAAO,CAAC,8CAAyB,EAAE;YACxC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;gBACtB,IAAI,EAAE,mBAAmB;gBACzB,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE;oBACP,MAAM,EAAE,QAAQ;oBAChB,QAAQ,EAAE,gBAAgB,CAAC,EAAE;iBAC9B;aACF,CAAC;YACF,SAAS,EAAE,WAAW,CAAC,SAAS;SACjC,CAAC,CAAC;QACH,OAAO;YACL,6BAA6B,EAAE,mBAAmB,CAAC,EAAE;SACtD,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,WAAW,CAAC,MAAc,EAAE,IAAc;QACxD,MAAM,EAAE,GAAG,IAAI,cAAO,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,EAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAC,EAAE,IAAI,CAAC,CAAC;QAC7E,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO;YAC1B,OAAO,MAAM,CAAC,OAAO,CAAC;;YAEtB,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,EAAE,CAAC,CAAC;IACpD,CAAC;;AA/aU,0CAAe;AACX,mCAAmB,GAAG,UAAU,AAAb,CAAc;AACjC,sCAAsB,GAAG,CAAC,AAAJ,CAAK;AAIpC;IADL,IAAA,oBAAK,EAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC;IAE5B,WAAA,IAAA,kBAAG,EAAC,cAAc,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;IACjC,WAAA,IAAA,kBAAG,EAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,kBAAG,CAAC,CAAA;IACxB,WAAA,IAAA,kBAAG,EAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,kBAAG,CAAC,CAAA;IAChC,WAAA,IAAA,kBAAG,GAAE,CAAA;IACL,WAAA,IAAA,qBAAM,GAAE,CAAA;;qEAAS,2BAAY;;kEAkE/B;0BA7EU,eAAe;IAD3B,IAAA,uBAAQ,EAAC,iBAAiB,CAAC;GACf,eAAe,CAgb3B;AAED,kBAAe,eAAe,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/server",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.163",
|
|
4
4
|
"description": "MemberJunction: This project provides API access via GraphQL to the common data store.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "src/index.ts",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"@memberjunction/global": "^0.9.132",
|
|
29
29
|
"@memberjunction/queue": "^0.9.139",
|
|
30
30
|
"@memberjunction/sqlserver-dataprovider": "^0.9.150",
|
|
31
|
-
"@memberjunction/skip-types": "^0.9.
|
|
31
|
+
"@memberjunction/skip-types": "^0.9.14",
|
|
32
32
|
"@types/cors": "^2.8.13",
|
|
33
33
|
"@types/jsonwebtoken": "^8.5.9",
|
|
34
34
|
"@types/node": "^18.11.14",
|
package/src/config.ts
CHANGED
|
@@ -23,6 +23,10 @@ export const enableIntrospection = env.get('ENABLE_INTROSPECTION').default('fals
|
|
|
23
23
|
export const websiteRunFromPackage = env.get('WEBSITE_RUN_FROM_PACKAGE').asIntPositive();
|
|
24
24
|
export const userEmailMap = env.get('USER_EMAIL_MAP').default('{}').asJsonObject() as Record<string, string>;
|
|
25
25
|
|
|
26
|
+
export const ___skipAPIurl = env.get('ASK_SKIP_API_URL').required().asString();
|
|
27
|
+
export const ___skipAPIOrgId = env.get('ASK_SKIP_ORGANIZATION_ID').required().asString();
|
|
28
|
+
|
|
29
|
+
|
|
26
30
|
export const auth0Domain = env.get('AUTH0_DOMAIN').asString();
|
|
27
31
|
export const auth0WebClientID = env.get('AUTH0_CLIENT_ID').asString();
|
|
28
32
|
export const auth0ClientSecret = env.get('AUTH0_CLIENT_SECRET').asString();
|
|
@@ -28,7 +28,6 @@ export class PushStatusResolver {
|
|
|
28
28
|
@Subscription(() => PushStatusNotification, {
|
|
29
29
|
topics: PUSH_STATUS_UPDATES_TOPIC,
|
|
30
30
|
filter: ({ payload, args, context }: ResolverFilterData<PushStatusNotificationPayload, PushStatusNotificationArgs, any>) => {
|
|
31
|
-
console.log('context', context);
|
|
32
31
|
return payload.sessionId === args.sessionId;
|
|
33
32
|
},
|
|
34
33
|
})
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Arg, Ctx, Field, Int, ObjectType, PubSub, PubSubEngine, Query, Resolver } from 'type-graphql';
|
|
2
|
-
import { LogError, Metadata, RunQuery, RunQueryParams, RunView, UserInfo } from '@memberjunction/core';
|
|
2
|
+
import { LogError, LogStatus, Metadata, RunQuery, RunQueryParams, RunView, UserInfo } from '@memberjunction/core';
|
|
3
3
|
import { AppContext, UserPayload } from '../types';
|
|
4
4
|
import { UserCache } from '@memberjunction/sqlserver-dataprovider';
|
|
5
|
-
import { SkipDataContext, SkipDataContextItem, SkipAPIRequest, SkipAPIResponse, SkipMessage, SkipAPIAnalysisCompleteResponse, SkipAPIDataRequestResponse } from '@memberjunction/skip-types';
|
|
5
|
+
import { SkipDataContext, SkipDataContextItem, SkipAPIRequest, SkipAPIResponse, SkipMessage, SkipAPIAnalysisCompleteResponse, SkipAPIDataRequestResponse, SkipAPIClarifyingQuestionResponse } from '@memberjunction/skip-types';
|
|
6
6
|
import axios from 'axios';
|
|
7
7
|
import zlib from 'zlib';
|
|
8
8
|
import { promisify } from 'util';
|
|
@@ -12,13 +12,23 @@ const gzip = promisify(zlib.gzip);
|
|
|
12
12
|
import { PUSH_STATUS_UPDATES_TOPIC } from '../generic/PushStatusResolver';
|
|
13
13
|
import { ConversationDetailEntity, ConversationEntity, UserNotificationEntity, UserViewEntityExtended } from '@memberjunction/core-entities';
|
|
14
14
|
import { DataSource } from 'typeorm';
|
|
15
|
+
import { ___skipAPIOrgId, ___skipAPIurl } from '../config';
|
|
15
16
|
|
|
16
17
|
|
|
17
|
-
|
|
18
|
-
// const url = process.env.BOT_EXTERNAL_API_URL;
|
|
19
|
-
// TEMP - call the separate server, we'll move this to real skip server soon!!!!!
|
|
18
|
+
import { registerEnumType } from "type-graphql";
|
|
20
19
|
|
|
21
20
|
|
|
21
|
+
enum SkipResponsePhase {
|
|
22
|
+
ClarifyingQuestion = "clarifying_question",
|
|
23
|
+
DataRequest = "data_request",
|
|
24
|
+
AnalysisComplete = "analysis_complete",
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
registerEnumType(SkipResponsePhase, {
|
|
28
|
+
name: "SkipResponsePhase",
|
|
29
|
+
description: "The phase of the respons: clarifying_question, data_request, or analysis_complete",
|
|
30
|
+
});
|
|
31
|
+
|
|
22
32
|
|
|
23
33
|
@ObjectType()
|
|
24
34
|
export class AskSkipResultType {
|
|
@@ -28,6 +38,9 @@ export class AskSkipResultType {
|
|
|
28
38
|
@Field(() => String)
|
|
29
39
|
Status: string; // required
|
|
30
40
|
|
|
41
|
+
@Field(() => SkipResponsePhase)
|
|
42
|
+
ResponsePhase: SkipResponsePhase;
|
|
43
|
+
|
|
31
44
|
@Field(() => String)
|
|
32
45
|
Result: string;
|
|
33
46
|
|
|
@@ -45,6 +58,7 @@ export class AskSkipResultType {
|
|
|
45
58
|
@Resolver(AskSkipResultType)
|
|
46
59
|
export class AskSkipResolver {
|
|
47
60
|
private static _defaultNewChatName = 'New Chat';
|
|
61
|
+
private static _maxHistoricalMessages = 8;
|
|
48
62
|
|
|
49
63
|
|
|
50
64
|
@Query(() => AskSkipResultType)
|
|
@@ -66,9 +80,14 @@ export class AskSkipResolver {
|
|
|
66
80
|
if (user) {
|
|
67
81
|
convoEntity.UserID = user.ID;
|
|
68
82
|
convoEntity.Name = AskSkipResolver._defaultNewChatName;
|
|
69
|
-
if (await convoEntity.Save())
|
|
70
|
-
|
|
71
|
-
|
|
83
|
+
if (await convoEntity.Save())
|
|
84
|
+
ConversationId = convoEntity.ID;
|
|
85
|
+
else
|
|
86
|
+
throw new Error(`Creating a new conversation failed`);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
throw new Error(`User ${userPayload.email} not found in UserCache`);
|
|
90
|
+
}
|
|
72
91
|
} else {
|
|
73
92
|
await convoEntity.Load(ConversationId); // load the existing conversation, will need it later
|
|
74
93
|
}
|
|
@@ -83,7 +102,7 @@ export class AskSkipResolver {
|
|
|
83
102
|
await convoDetailEntity.Save();
|
|
84
103
|
|
|
85
104
|
//const OrganizationId = 2 //HG 8/1/2023 TODO: Pull this from an environment variable
|
|
86
|
-
const OrganizationId =
|
|
105
|
+
const OrganizationId = ___skipAPIOrgId;
|
|
87
106
|
const dataContext: SkipDataContext = new SkipDataContext();
|
|
88
107
|
dataContext.Items.push(
|
|
89
108
|
{
|
|
@@ -93,12 +112,8 @@ export class AskSkipResolver {
|
|
|
93
112
|
} as SkipDataContextItem
|
|
94
113
|
);
|
|
95
114
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
content: UserQuestion,
|
|
99
|
-
role: 'user'
|
|
100
|
-
}
|
|
101
|
-
];
|
|
115
|
+
// now load up the messages. We will load up ALL of the messages for this conversation, and then pass them to the Skip API
|
|
116
|
+
const messages: SkipMessage[] = await this.LoadConversationDetailsIntoSkipMessages(dataSource, convoEntity.ID, AskSkipResolver._maxHistoricalMessages);
|
|
102
117
|
|
|
103
118
|
const input: SkipAPIRequest = {
|
|
104
119
|
messages: messages,
|
|
@@ -120,10 +135,65 @@ export class AskSkipResolver {
|
|
|
120
135
|
return this.HandleSkipRequest(input, UserQuestion, user, dataSource, ConversationId, userPayload, pubSub, md, convoEntity, convoDetailEntity);
|
|
121
136
|
}
|
|
122
137
|
|
|
138
|
+
protected async LoadConversationDetailsIntoSkipMessages(dataSource: DataSource, ConversationId: number, maxHistoricalMessages?: number): Promise<SkipMessage[]> {
|
|
139
|
+
try {
|
|
140
|
+
// load up all the conversation details from the database server
|
|
141
|
+
const md = new Metadata();
|
|
142
|
+
const e = md.Entities.find((e) => e.Name === 'Conversation Details');
|
|
143
|
+
const sql = `SELECT
|
|
144
|
+
${maxHistoricalMessages ? 'TOP ' + maxHistoricalMessages : ''} ID, Message, Role, CreatedAt
|
|
145
|
+
FROM
|
|
146
|
+
${e.SchemaName}.${e.BaseView}
|
|
147
|
+
WHERE
|
|
148
|
+
ConversationID = ${ConversationId}
|
|
149
|
+
ORDER
|
|
150
|
+
BY CreatedAt DESC`;
|
|
151
|
+
const result = await dataSource.query(sql);
|
|
152
|
+
if (!result)
|
|
153
|
+
throw new Error(`Error running SQL: ${sql}`);
|
|
154
|
+
else {
|
|
155
|
+
// first, let's sort the result array into a local variable called returnData and in that we will sort by CreatedAt in ASCENDING order so we have the right chronological order
|
|
156
|
+
// the reason we're doing a LOCAL sort here is because in the SQL query above, we're sorting in DESCENDING order so we can use the TOP clause to limit the number of records and get the
|
|
157
|
+
// N most recent records. We want to sort in ASCENDING order because we want to send the messages to the Skip API in the order they were created.
|
|
158
|
+
const returnData = result.sort((a: any, b: any) => {
|
|
159
|
+
const aDate = new Date(a.CreatedAt);
|
|
160
|
+
const bDate = new Date(b.CreatedAt);
|
|
161
|
+
return aDate.getTime() - bDate.getTime();
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
// now, we will map the returnData into an array of SkipMessages
|
|
165
|
+
return returnData.map((r: ConversationDetailEntity) => {
|
|
166
|
+
// we want to limit the # of characters in the message to 5000, rough approximation for 1000 words/tokens
|
|
167
|
+
// but we only do that for system messages
|
|
168
|
+
const skipRole = this.MapDBRoleToSkipRole(r.Role);
|
|
169
|
+
const m: SkipMessage = {
|
|
170
|
+
content: skipRole === 'system' ? (r.Message.length > 5000 ? "PARTIAL CONTENT: " + r.Message.substring(0, 5000) : r.Message) : r.Message,
|
|
171
|
+
role: skipRole,
|
|
172
|
+
};
|
|
173
|
+
return m;
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
catch (e) {
|
|
178
|
+
LogError(e);
|
|
179
|
+
throw e;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
protected MapDBRoleToSkipRole(role: string): "user" | "system" {
|
|
184
|
+
switch (role.trim().toLowerCase()) {
|
|
185
|
+
case 'ai':
|
|
186
|
+
return 'system';
|
|
187
|
+
default:
|
|
188
|
+
return 'user';
|
|
189
|
+
}
|
|
190
|
+
}
|
|
123
191
|
|
|
124
192
|
protected async HandleSkipRequest(input: SkipAPIRequest, UserQuestion: string, user: UserInfo, dataSource: DataSource,
|
|
125
193
|
ConversationId: number, userPayload: UserPayload, pubSub: PubSubEngine, md: Metadata,
|
|
126
194
|
convoEntity: ConversationEntity, convoDetailEntity: ConversationDetailEntity): Promise<AskSkipResultType> {
|
|
195
|
+
LogStatus(`Sending request to Skip API: ${___skipAPIurl}`)
|
|
196
|
+
|
|
127
197
|
// Convert JSON payload to a Buffer and compress it
|
|
128
198
|
const compressedPayload = await gzip(Buffer.from(JSON.stringify(input)));
|
|
129
199
|
|
|
@@ -135,36 +205,10 @@ export class AskSkipResolver {
|
|
|
135
205
|
}
|
|
136
206
|
});
|
|
137
207
|
|
|
138
|
-
// const response = await axios({
|
|
139
|
-
// method: 'post',
|
|
140
|
-
// url: ___skipAPIurl,
|
|
141
|
-
// data: input,
|
|
142
|
-
// });
|
|
143
|
-
|
|
144
208
|
if (response.status === 200) {
|
|
145
209
|
const apiResponse = <SkipAPIResponse>response.data;
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
case 'data_request':
|
|
149
|
-
sUserMessage = 'We need to gather some more data, I will do that next and update you soon.';
|
|
150
|
-
break;
|
|
151
|
-
case 'analysis_complete':
|
|
152
|
-
sUserMessage = 'I have completed the analysis, the results will be available momentarily.';
|
|
153
|
-
break;
|
|
154
|
-
case 'clarifying_question':
|
|
155
|
-
sUserMessage = 'I have a clarifying question for you, please see review our chat so you can provide me a little more info.';
|
|
156
|
-
break;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
// update the UI
|
|
160
|
-
pubSub.publish(PUSH_STATUS_UPDATES_TOPIC, {
|
|
161
|
-
message: JSON.stringify({
|
|
162
|
-
type: 'AskSkip',
|
|
163
|
-
status: 'OK',
|
|
164
|
-
message: sUserMessage,
|
|
165
|
-
}),
|
|
166
|
-
sessionId: userPayload.sessionId,
|
|
167
|
-
});
|
|
210
|
+
LogStatus(` Skip API response: ${apiResponse.responsePhase}`)
|
|
211
|
+
this.PublishApiResponseUserUpdateMessage(apiResponse, userPayload, pubSub);
|
|
168
212
|
|
|
169
213
|
// now, based on the result type, we will either wait for the next phase or we will process the results
|
|
170
214
|
if (apiResponse.responsePhase === 'data_request') {
|
|
@@ -172,22 +216,14 @@ export class AskSkipResolver {
|
|
|
172
216
|
}
|
|
173
217
|
else if (apiResponse.responsePhase === 'clarifying_question') {
|
|
174
218
|
// need to send the request back to the user for a clarifying question
|
|
175
|
-
|
|
176
|
-
|
|
219
|
+
return await this.HandleClarifyingQuestionPhase(input, <SkipAPIClarifyingQuestionResponse>apiResponse, UserQuestion, user, dataSource, ConversationId, userPayload, pubSub, convoEntity, convoDetailEntity);
|
|
220
|
+
}
|
|
221
|
+
else if (apiResponse.responsePhase === 'analysis_complete') {
|
|
222
|
+
return await this.HandleAnalysisComplete(input, <SkipAPIAnalysisCompleteResponse>apiResponse, UserQuestion, user, dataSource, ConversationId, userPayload, pubSub, convoEntity, convoDetailEntity);
|
|
177
223
|
}
|
|
178
|
-
else {
|
|
179
|
-
//
|
|
180
|
-
|
|
181
|
-
const {AIMessageConversationDetailID} = await this.FinishConversationAndNotifyUser(apiResponse, md, user, convoEntity, pubSub, userPayload);
|
|
182
|
-
|
|
183
|
-
return {
|
|
184
|
-
Success: true,
|
|
185
|
-
Status: 'OK',
|
|
186
|
-
ConversationId: ConversationId,
|
|
187
|
-
UserMessageConversationDetailId: convoDetailEntity.ID,
|
|
188
|
-
AIMessageConversationDetailId: AIMessageConversationDetailID,
|
|
189
|
-
Result: JSON.stringify(response.data)
|
|
190
|
-
};
|
|
224
|
+
else {
|
|
225
|
+
// unknown response phase
|
|
226
|
+
throw new Error(`Unknown Skip API response phase: ${apiResponse.responsePhase}`);
|
|
191
227
|
}
|
|
192
228
|
}
|
|
193
229
|
else {
|
|
@@ -204,6 +240,7 @@ export class AskSkipResolver {
|
|
|
204
240
|
Success: false,
|
|
205
241
|
Status: 'Error',
|
|
206
242
|
Result: `User Question ${UserQuestion} didn't work!`,
|
|
243
|
+
ResponsePhase: SkipResponsePhase.AnalysisComplete,
|
|
207
244
|
ConversationId: ConversationId,
|
|
208
245
|
UserMessageConversationDetailId: 0,
|
|
209
246
|
AIMessageConversationDetailId: 0,
|
|
@@ -211,52 +248,173 @@ export class AskSkipResolver {
|
|
|
211
248
|
}
|
|
212
249
|
}
|
|
213
250
|
|
|
251
|
+
protected async PublishApiResponseUserUpdateMessage(apiResponse: SkipAPIResponse, userPayload: UserPayload, pubSub: PubSubEngine) {
|
|
252
|
+
let sUserMessage: string = '';
|
|
253
|
+
switch (apiResponse.responsePhase) {
|
|
254
|
+
case 'data_request':
|
|
255
|
+
sUserMessage = 'We need to gather some more data, I will do that next and update you soon.';
|
|
256
|
+
break;
|
|
257
|
+
case 'analysis_complete':
|
|
258
|
+
sUserMessage = 'I have completed the analysis, the results will be available momentarily.';
|
|
259
|
+
break;
|
|
260
|
+
case 'clarifying_question':
|
|
261
|
+
sUserMessage = 'I have a clarifying question for you, please see review our chat so you can provide me a little more info.';
|
|
262
|
+
break;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// update the UI
|
|
266
|
+
pubSub.publish(PUSH_STATUS_UPDATES_TOPIC, {
|
|
267
|
+
message: JSON.stringify({
|
|
268
|
+
type: 'AskSkip',
|
|
269
|
+
status: 'OK',
|
|
270
|
+
message: sUserMessage,
|
|
271
|
+
}),
|
|
272
|
+
sessionId: userPayload.sessionId,
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
protected async HandleAnalysisComplete(apiRequest: SkipAPIRequest, apiResponse: SkipAPIAnalysisCompleteResponse, UserQuestion: string, user: UserInfo, dataSource: DataSource,
|
|
277
|
+
ConversationId: number, userPayload: UserPayload, pubSub: PubSubEngine, convoEntity: ConversationEntity, convoDetailEntity: ConversationDetailEntity): Promise<AskSkipResultType> {
|
|
278
|
+
// analysis is complete
|
|
279
|
+
// all done, wrap things up
|
|
280
|
+
const md = new Metadata();
|
|
281
|
+
const {AIMessageConversationDetailID} = await this.FinishConversationAndNotifyUser(apiResponse, md, user, convoEntity, pubSub, userPayload);
|
|
282
|
+
|
|
283
|
+
return {
|
|
284
|
+
Success: true,
|
|
285
|
+
Status: 'OK',
|
|
286
|
+
ResponsePhase: SkipResponsePhase.AnalysisComplete,
|
|
287
|
+
ConversationId: ConversationId,
|
|
288
|
+
UserMessageConversationDetailId: convoDetailEntity.ID,
|
|
289
|
+
AIMessageConversationDetailId: AIMessageConversationDetailID,
|
|
290
|
+
Result: JSON.stringify(apiResponse)
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
protected async HandleClarifyingQuestionPhase(apiRequest: SkipAPIRequest, apiResponse: SkipAPIClarifyingQuestionResponse, UserQuestion: string, user: UserInfo, dataSource: DataSource,
|
|
295
|
+
ConversationId: number, userPayload: UserPayload, pubSub: PubSubEngine, convoEntity: ConversationEntity, convoDetailEntity: ConversationDetailEntity): Promise<AskSkipResultType> {
|
|
296
|
+
// need to create a message here in the COnversation and then pass that id below
|
|
297
|
+
const md = new Metadata();
|
|
298
|
+
const convoDetailEntityAI = <ConversationDetailEntity>await md.GetEntityObject('Conversation Details', user);
|
|
299
|
+
convoDetailEntityAI.NewRecord();
|
|
300
|
+
convoDetailEntityAI.ConversationID = ConversationId;
|
|
301
|
+
convoDetailEntityAI.Message = apiResponse.clarifyingQuestion;
|
|
302
|
+
convoDetailEntityAI.Role = 'AI';
|
|
303
|
+
if (await convoDetailEntityAI.Save()) {
|
|
304
|
+
return {
|
|
305
|
+
Success: true,
|
|
306
|
+
Status: 'OK',
|
|
307
|
+
ResponsePhase: SkipResponsePhase.ClarifyingQuestion,
|
|
308
|
+
ConversationId: ConversationId,
|
|
309
|
+
UserMessageConversationDetailId: convoDetailEntity.ID,
|
|
310
|
+
AIMessageConversationDetailId: convoDetailEntityAI.ID,
|
|
311
|
+
Result: JSON.stringify(apiResponse)
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
else {
|
|
315
|
+
return {
|
|
316
|
+
Success: false,
|
|
317
|
+
Status: 'Error',
|
|
318
|
+
ResponsePhase: SkipResponsePhase.ClarifyingQuestion,
|
|
319
|
+
ConversationId: ConversationId,
|
|
320
|
+
UserMessageConversationDetailId: convoDetailEntity.ID,
|
|
321
|
+
AIMessageConversationDetailId: convoDetailEntityAI.ID,
|
|
322
|
+
Result: JSON.stringify(apiResponse)
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
|
|
214
327
|
protected async HandleDataRequestPhase(apiRequest: SkipAPIRequest, apiResponse: SkipAPIDataRequestResponse, UserQuestion: string, user: UserInfo, dataSource: DataSource,
|
|
215
328
|
ConversationId: number, userPayload: UserPayload, pubSub: PubSubEngine, convoEntity: ConversationEntity, convoDetailEntity: ConversationDetailEntity): Promise<AskSkipResultType> {
|
|
216
329
|
// our job in this method is to go through each of the data requests from the Skip API, get the data, and then go back to the Skip API again and to the next phase
|
|
217
330
|
try {
|
|
331
|
+
const _maxDataGatheringRetries = 5;
|
|
332
|
+
const _dataGatheringFailureHeaderMessage = '***DATA GATHERING FAILURE***';
|
|
218
333
|
const md = new Metadata();
|
|
334
|
+
const executionErrors = [];
|
|
335
|
+
|
|
336
|
+
// first, in this situation we want to add a message to our apiRequest so that it is part of the message history with the server
|
|
337
|
+
apiRequest.messages.push({
|
|
338
|
+
content: `Skip API Requested Data as shown below
|
|
339
|
+
${JSON.stringify(apiResponse.dataRequest)}`,
|
|
340
|
+
role: 'system' // user role of system because this came from Skip, we are simplifying the message for the next round if we need to send it back
|
|
341
|
+
});
|
|
342
|
+
|
|
219
343
|
for (const dr of apiResponse.dataRequest) {
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
344
|
+
try {
|
|
345
|
+
switch (dr.type) {
|
|
346
|
+
case "sql":
|
|
347
|
+
const sql = dr.text;
|
|
348
|
+
const result = await dataSource.query(sql);
|
|
349
|
+
if (!result)
|
|
350
|
+
throw new Error(`Error running SQL: ${sql}`);
|
|
351
|
+
|
|
352
|
+
const item = new SkipDataContextItem();
|
|
353
|
+
item.Type = 'sql';
|
|
354
|
+
item.Data = result;
|
|
355
|
+
item.RecordName = dr.text;
|
|
356
|
+
item.AdditionalDescription = dr.description;
|
|
357
|
+
apiRequest.dataContext.Items.push(item);
|
|
358
|
+
break;
|
|
359
|
+
case "stored_query":
|
|
360
|
+
const queryName = dr.text;
|
|
361
|
+
const query = md.Queries.find((q) => q.Name === queryName);
|
|
362
|
+
if (query) {
|
|
363
|
+
const rq = new RunQuery();
|
|
364
|
+
const result = await rq.RunQuery({QueryID: query.ID}, user)
|
|
365
|
+
if (result && result.Success) {
|
|
366
|
+
const item = new SkipDataContextItem();
|
|
367
|
+
item.Type = 'query';
|
|
368
|
+
item.Data = result.Results;
|
|
369
|
+
item.RecordID = query.ID;
|
|
370
|
+
item.RecordName = query.Name;
|
|
371
|
+
item.AdditionalDescription = dr.description;
|
|
372
|
+
apiRequest.dataContext.Items.push(item);
|
|
373
|
+
}
|
|
374
|
+
else
|
|
375
|
+
throw new Error(`Error running query ${queryName}`);
|
|
248
376
|
}
|
|
249
377
|
else
|
|
250
|
-
throw new Error(`
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
378
|
+
throw new Error(`Query ${queryName} not found.`);
|
|
379
|
+
break;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
catch (e) {
|
|
383
|
+
LogError(e);
|
|
384
|
+
executionErrors.push({dataRequest: dr, errorMessage: e && e.message ? e.message : e.toString()});
|
|
255
385
|
}
|
|
256
386
|
}
|
|
257
387
|
|
|
388
|
+
if (executionErrors.length > 0) {
|
|
389
|
+
const dataGatheringFailedAttemptCount = apiRequest.messages.filter((m) => m.content.includes(_dataGatheringFailureHeaderMessage)).length + 1;
|
|
390
|
+
if (dataGatheringFailedAttemptCount > _maxDataGatheringRetries) {
|
|
391
|
+
// we have exceeded the max retries, so in this case we do NOT go back to Skip, instead we just send the errors back to the user
|
|
392
|
+
LogStatus(`Execution errors for Skip data request occured, and we have exceeded the max retries${_maxDataGatheringRetries}, sending errors back to the user.`);
|
|
393
|
+
return {
|
|
394
|
+
Success: false,
|
|
395
|
+
Status: 'Error gathering data and we have exceedded the max retries. Try again later and Skip might be able to handle this request.',
|
|
396
|
+
ResponsePhase: SkipResponsePhase.DataRequest,
|
|
397
|
+
ConversationId: ConversationId,
|
|
398
|
+
UserMessageConversationDetailId: convoDetailEntity.ID,
|
|
399
|
+
AIMessageConversationDetailId: 0,
|
|
400
|
+
Result: JSON.stringify(apiResponse)
|
|
401
|
+
};
|
|
402
|
+
}
|
|
403
|
+
else {
|
|
404
|
+
LogStatus(`Execution errors for Skip data request occured, sending those errors back to the Skip API to get new instructions.`);
|
|
405
|
+
apiRequest.requestPhase = 'data_gathering_failure';
|
|
406
|
+
apiRequest.messages.push({
|
|
407
|
+
content: `${_dataGatheringFailureHeaderMessage} #${dataGatheringFailedAttemptCount} of ${_maxDataGatheringRetries} attempts to gather data failed. Errors:
|
|
408
|
+
${JSON.stringify(executionErrors)}
|
|
409
|
+
`,
|
|
410
|
+
role: 'user' // use user role becuase to the Skip API what we send it is "user"
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
else {
|
|
415
|
+
apiRequest.requestPhase = 'data_gathering_response';
|
|
416
|
+
}
|
|
258
417
|
// we have all of the data now, add it to the data context and then submit it back to the Skip API
|
|
259
|
-
apiRequest.requestPhase = 'data_gathering_response';
|
|
260
418
|
return this.HandleSkipRequest(apiRequest, UserQuestion, user, dataSource, ConversationId, userPayload, pubSub, md, convoEntity, convoDetailEntity);
|
|
261
419
|
}
|
|
262
420
|
catch (e) {
|