@cobrowser/chatgpt 0.7.12 → 0.7.14
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/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -17,3 +17,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
__exportStar(require("./services/TranslationService/TranslationService"), exports);
|
|
18
18
|
__exportStar(require("./services/CopilotService/CopilotService"), exports);
|
|
19
19
|
__exportStar(require("./services/ChatService/ChatService"), exports);
|
|
20
|
+
__exportStar(require("./services/AssistantService/AssistantService"), exports);
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import ChatGptResponse from '../../models/ChatGptResponse';
|
|
2
|
+
import BaseService from '../BaseService/BaseService';
|
|
3
|
+
export declare class AssistantService extends BaseService {
|
|
4
|
+
assistantId: string | undefined;
|
|
5
|
+
threadId: string | undefined;
|
|
6
|
+
constructor(apiKey?: string, assistantId?: string, threadId?: string);
|
|
7
|
+
/**
|
|
8
|
+
* Create new thread
|
|
9
|
+
*
|
|
10
|
+
* @param message
|
|
11
|
+
*/
|
|
12
|
+
createThread(): Promise<string>;
|
|
13
|
+
/**
|
|
14
|
+
* Get the reply of the assistant if the assistant_id is available
|
|
15
|
+
*
|
|
16
|
+
* @param message
|
|
17
|
+
*/
|
|
18
|
+
getReply(message: string): Promise<ChatGptResponse | undefined>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.AssistantService = void 0;
|
|
16
|
+
const logger_1 = __importDefault(require("../logger"));
|
|
17
|
+
const openai_1 = __importDefault(require("openai"));
|
|
18
|
+
const BaseService_1 = __importDefault(require("../BaseService/BaseService"));
|
|
19
|
+
class AssistantService extends BaseService_1.default {
|
|
20
|
+
constructor(apiKey, assistantId, threadId) {
|
|
21
|
+
super(apiKey);
|
|
22
|
+
Object.defineProperty(this, "assistantId", {
|
|
23
|
+
enumerable: true,
|
|
24
|
+
configurable: true,
|
|
25
|
+
writable: true,
|
|
26
|
+
value: void 0
|
|
27
|
+
});
|
|
28
|
+
Object.defineProperty(this, "threadId", {
|
|
29
|
+
enumerable: true,
|
|
30
|
+
configurable: true,
|
|
31
|
+
writable: true,
|
|
32
|
+
value: void 0
|
|
33
|
+
});
|
|
34
|
+
this.assistantId = assistantId;
|
|
35
|
+
this.threadId = threadId;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Create new thread
|
|
39
|
+
*
|
|
40
|
+
* @param message
|
|
41
|
+
*/
|
|
42
|
+
createThread() {
|
|
43
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
44
|
+
const openai = new openai_1.default({ apiKey: this.openaiApiKey }), thread = yield openai.beta.threads.create();
|
|
45
|
+
this.threadId = thread.id;
|
|
46
|
+
return this.threadId;
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get the reply of the assistant if the assistant_id is available
|
|
51
|
+
*
|
|
52
|
+
* @param message
|
|
53
|
+
*/
|
|
54
|
+
getReply(message) {
|
|
55
|
+
var _a;
|
|
56
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
57
|
+
if (!this.assistantId || !this.threadId) {
|
|
58
|
+
logger_1.default.error('Assistant and Thread are required');
|
|
59
|
+
return Promise.reject(new Error('Assistant and Thread are required'));
|
|
60
|
+
}
|
|
61
|
+
const openai = new openai_1.default({ apiKey: this.openaiApiKey });
|
|
62
|
+
let run;
|
|
63
|
+
const lastThreadMessasges = yield openai.beta.threads.messages.list(this.threadId, { order: "desc", limit: 2 });
|
|
64
|
+
const isRepeatedMessage = lastThreadMessasges.data.find(msg => msg.content[0].type === 'text' && msg.content[0].text.value === message);
|
|
65
|
+
if (isRepeatedMessage) {
|
|
66
|
+
const runs = yield openai.beta.threads.runs.list(this.threadId, { order: "desc", limit: 1 });
|
|
67
|
+
run = runs.data[0];
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
yield openai.beta.threads.messages.create(this.threadId, { role: "user", content: message });
|
|
71
|
+
run = yield openai.beta.threads.runs.create(this.threadId, { assistant_id: (_a = this.assistantId) !== null && _a !== void 0 ? _a : '' });
|
|
72
|
+
}
|
|
73
|
+
while (['queued', 'in_progress', 'cancelling'].includes(run.status)) {
|
|
74
|
+
yield new Promise(resolve => setTimeout(resolve, 500));
|
|
75
|
+
run = yield openai.beta.threads.runs.retrieve(run.thread_id, run.id);
|
|
76
|
+
}
|
|
77
|
+
if (run.status === 'completed') {
|
|
78
|
+
const { data } = yield openai.beta.threads.messages.list(run.thread_id, { order: 'desc', limit: 1 });
|
|
79
|
+
const messages = data.flatMap((message) => message === null || message === void 0 ? void 0 : message.content.map((content) => ((content.type === 'text' && message.role === 'assistant') ? content.text : '')));
|
|
80
|
+
const assistantMessages = messages.filter(message => typeof message === 'object' && 'value' in message && typeof message.value === 'string');
|
|
81
|
+
if (assistantMessages.length) {
|
|
82
|
+
let answer = assistantMessages.map(message => message.value).join('\n');
|
|
83
|
+
return {
|
|
84
|
+
firstChoice: answer.replace(/【.*?】/g, ''),
|
|
85
|
+
threadId: run.thread_id,
|
|
86
|
+
usageTokens: run.usage,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return undefined;
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.AssistantService = AssistantService;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cobrowser/chatgpt",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.14",
|
|
4
4
|
"description": "chatgpt services to connect our projects with chatgpt api",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"chatgpt",
|
|
@@ -38,6 +38,5 @@
|
|
|
38
38
|
},
|
|
39
39
|
"bugs": {
|
|
40
40
|
"url": "https://bitbucket.org/cobrowser/cb_utils/issues"
|
|
41
|
-
}
|
|
42
|
-
"gitHead": "346f32b794180f7d008560c9cddff248de092355"
|
|
41
|
+
}
|
|
43
42
|
}
|