@cobrowser/chatgpt 0.7.13 → 0.7.15

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
@@ -1,3 +1,4 @@
1
1
  export * from './services/TranslationService/TranslationService';
2
2
  export * from './services/CopilotService/CopilotService';
3
3
  export * from './services/ChatService/ChatService';
4
+ export * from './services/AssistantService/AssistantService';
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.13",
3
+ "version": "0.7.15",
4
4
  "description": "chatgpt services to connect our projects with chatgpt api",
5
5
  "keywords": [
6
6
  "chatgpt",
@@ -21,7 +21,7 @@
21
21
  "precommit": "npm run lint && npm run test && npm run upgrade && npm run security"
22
22
  },
23
23
  "dependencies": {
24
- "@cobrowser/logger": "^1.0.0",
24
+ "@cobrowser/logger": "^2.0.2",
25
25
  "axios": "^1.6.1",
26
26
  "axios-mock-adapter": "^1.22.0",
27
27
  "openai": "^4.32.0"
@@ -39,5 +39,5 @@
39
39
  "bugs": {
40
40
  "url": "https://bitbucket.org/cobrowser/cb_utils/issues"
41
41
  },
42
- "gitHead": "1bd5425c9a3627192326d6d0ca25f06f7cb02c78"
42
+ "gitHead": "271ee62b6ffcd6d670eb31abb882647830e0a691"
43
43
  }