@cobrowser/chatgpt 0.7.36 → 0.7.37
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.
|
@@ -105,43 +105,87 @@ class CopilotService extends BaseService_1.default {
|
|
|
105
105
|
* @param message
|
|
106
106
|
*/
|
|
107
107
|
getAssistantSuggestions(conversation) {
|
|
108
|
-
var _a;
|
|
108
|
+
var _a, _b;
|
|
109
109
|
return __awaiter(this, void 0, void 0, function* () {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
110
|
+
const conversationLines = conversation.split('\n').filter(line => line.trim());
|
|
111
|
+
const messages = [];
|
|
112
|
+
for (const line of conversationLines) {
|
|
113
|
+
if (line.includes('customer:')) {
|
|
114
|
+
messages.push({
|
|
115
|
+
role: 'user',
|
|
116
|
+
content: line.replace(/^customer:\s*/, '').trim()
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
else if (line.includes('agent:')) {
|
|
120
|
+
messages.push({
|
|
121
|
+
role: 'assistant',
|
|
122
|
+
content: line.replace(/^agent:\s*/, '').trim()
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
if (messages.length === 0) {
|
|
127
|
+
logger_1.default.error('No valid messages found in conversation');
|
|
128
|
+
return Promise.reject(new Error('No valid messages found in conversation'));
|
|
116
129
|
}
|
|
117
130
|
const openai = new openai_1.default({ apiKey: this.openaiApiKey });
|
|
118
|
-
let
|
|
131
|
+
let thread;
|
|
119
132
|
if (!this.threadId) {
|
|
120
|
-
|
|
133
|
+
thread = yield openai.beta.threads.create({
|
|
134
|
+
metadata: {
|
|
135
|
+
lastMessageIndex: '-1'
|
|
136
|
+
}
|
|
137
|
+
});
|
|
121
138
|
this.threadId = thread.id;
|
|
122
139
|
}
|
|
123
|
-
const lastThreadMessasges = yield openai.beta.threads.messages.list(this.threadId, { order: "desc", limit: 2 }), isRepeatedMessage = lastThreadMessasges.data.find(msg => msg.content[0].type === 'text' && msg.content[0].text.value === lastCustomerMessage);
|
|
124
|
-
// making sure that we're not saving repeated messages
|
|
125
|
-
if (isRepeatedMessage) {
|
|
126
|
-
const runs = yield openai.beta.threads.runs.list(this.threadId, { order: "desc", limit: 1 });
|
|
127
|
-
run = runs.data[0];
|
|
128
|
-
}
|
|
129
140
|
else {
|
|
130
|
-
yield openai.beta.threads.
|
|
131
|
-
run = yield openai.beta.threads.runs.create(this.threadId, { assistant_id: (_a = this.assistantId) !== null && _a !== void 0 ? _a : '' });
|
|
141
|
+
thread = yield openai.beta.threads.retrieve(this.threadId);
|
|
132
142
|
}
|
|
133
|
-
|
|
143
|
+
const lastMessageIndex = parseInt(((_a = thread.metadata) === null || _a === void 0 ? void 0 : _a.lastMessageIndex) || '-1', 10);
|
|
144
|
+
const newMessages = messages.slice(lastMessageIndex + 1);
|
|
145
|
+
if (newMessages.length === 0) {
|
|
146
|
+
// Retrieve the last assistant message from the thread
|
|
147
|
+
const { data } = yield openai.beta.threads.messages.list(this.threadId, { order: 'desc', limit: 10 });
|
|
148
|
+
const lastAssistantMessage = data.find(msg => msg.role === 'assistant');
|
|
149
|
+
if (lastAssistantMessage) {
|
|
150
|
+
const messagesData = lastAssistantMessage.content.map((content) => content.type === 'text' ? content.text : '').filter(text => text);
|
|
151
|
+
if (messagesData.length) {
|
|
152
|
+
const answers = messagesData.map(message => message.value);
|
|
153
|
+
return {
|
|
154
|
+
data: __classPrivateFieldGet(this, _CopilotService_instances, "m", _CopilotService_processSuggestions).call(this, answers),
|
|
155
|
+
threadId: this.threadId,
|
|
156
|
+
usageTokens: undefined,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return Promise.reject(new Error('No previous assistant messages found'));
|
|
161
|
+
}
|
|
162
|
+
for (const message of newMessages) {
|
|
163
|
+
yield openai.beta.threads.messages.create(this.threadId, {
|
|
164
|
+
role: message.role,
|
|
165
|
+
content: message.content
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
yield openai.beta.threads.update(this.threadId, {
|
|
169
|
+
metadata: {
|
|
170
|
+
lastMessageIndex: (messages.length - 1).toString()
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
const run = yield openai.beta.threads.runs.create(this.threadId, {
|
|
174
|
+
assistant_id: (_b = this.assistantId) !== null && _b !== void 0 ? _b : ''
|
|
175
|
+
});
|
|
176
|
+
let currentRun = run;
|
|
177
|
+
while (['queued', 'in_progress', 'cancelling'].includes(currentRun.status)) {
|
|
134
178
|
yield new Promise(resolve => setTimeout(resolve, 500));
|
|
135
|
-
|
|
179
|
+
currentRun = yield openai.beta.threads.runs.retrieve(currentRun.thread_id, currentRun.id);
|
|
136
180
|
}
|
|
137
|
-
if (
|
|
138
|
-
const { data } = yield openai.beta.threads.messages.list(
|
|
181
|
+
if (currentRun.status === 'completed') {
|
|
182
|
+
const { data } = yield openai.beta.threads.messages.list(currentRun.thread_id, { order: 'desc', limit: 1 }), messagesData = data.flatMap((message) => message === null || message === void 0 ? void 0 : message.content.map((content) => ((content.type === 'text' && message.role === 'assistant') ? content.text : ''))), assistantMessages = messagesData.filter(message => typeof message === 'object' && 'value' in message && typeof message.value === 'string');
|
|
139
183
|
if (assistantMessages.length) {
|
|
140
184
|
const answers = assistantMessages.map(message => message.value);
|
|
141
185
|
return {
|
|
142
186
|
data: __classPrivateFieldGet(this, _CopilotService_instances, "m", _CopilotService_processSuggestions).call(this, answers),
|
|
143
|
-
threadId:
|
|
144
|
-
usageTokens:
|
|
187
|
+
threadId: currentRun.thread_id,
|
|
188
|
+
usageTokens: currentRun.usage,
|
|
145
189
|
};
|
|
146
190
|
}
|
|
147
191
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cobrowser/chatgpt",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.37",
|
|
4
4
|
"description": "chatgpt services to connect our projects with chatgpt api",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"chatgpt",
|
|
@@ -40,5 +40,5 @@
|
|
|
40
40
|
"bugs": {
|
|
41
41
|
"url": "https://bitbucket.org/cobrowser/cb_utils/issues"
|
|
42
42
|
},
|
|
43
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "b72f8b0bd24f523172f83cb4bc833ad605684565"
|
|
44
44
|
}
|