@cobrowser/chatgpt 0.7.10 → 0.7.12
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/services/TranslationService/TranslationService.d.ts +1 -0
- package/dist/services/TranslationService/TranslationService.js +40 -1
- package/package.json +2 -2
- package/dist/services/AssistantService/AssistantService.d.ts +0 -19
- package/dist/services/AssistantService/AssistantService.js +0 -94
|
@@ -13,4 +13,5 @@ export declare class TranslationService extends BaseService {
|
|
|
13
13
|
translate(text: string, toLanguage?: string, fromLanguage?: string): Promise<ChatGptResponse | undefined>;
|
|
14
14
|
findTextLanguage(text: string): Promise<ChatGptResponse | undefined>;
|
|
15
15
|
getFindTextLanguagePromptMessage(text: string): string;
|
|
16
|
+
findTextLanguageBasedOnFrequency(text: string): Promise<ChatGptResponse | undefined>;
|
|
16
17
|
}
|
|
@@ -53,7 +53,8 @@ class TranslationService extends BaseService_1.default {
|
|
|
53
53
|
}
|
|
54
54
|
const desiredLanguage = toLanguage,
|
|
55
55
|
// instruction on what to do with the text
|
|
56
|
-
translateText = `Translate the following ${fromLanguage} text to ${desiredLanguage}
|
|
56
|
+
translateText = `Translate the following ${fromLanguage} text to ${desiredLanguage}
|
|
57
|
+
if it's not already in ${desiredLanguage}: ${text}`,
|
|
57
58
|
// the body we need to send to the request
|
|
58
59
|
requestBody = {
|
|
59
60
|
model: this.chatGptModel,
|
|
@@ -122,5 +123,43 @@ class TranslationService extends BaseService_1.default {
|
|
|
122
123
|
return `In which language is this text in '${text}'? The response should be {'languageCode': 'language_code_here', 'isError': 'true or false based on whether you did find the language code or not'}.
|
|
123
124
|
Other responses or explanations are not allowed.`;
|
|
124
125
|
}
|
|
126
|
+
findTextLanguageBasedOnFrequency(text) {
|
|
127
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
128
|
+
if (!text) {
|
|
129
|
+
logger_1.default.error('translation text should be provided');
|
|
130
|
+
return Promise.reject(new Error('text must be provided'));
|
|
131
|
+
}
|
|
132
|
+
text = '```' + text + '```';
|
|
133
|
+
// instruction on what to do with the text
|
|
134
|
+
const translateText = `Tell me the language ISO code of the enclosed between triple backticks ${text}
|
|
135
|
+
based on most words used. Give me the result in just one word, the ISO code of the language with most words.`,
|
|
136
|
+
// the body we need to send to the request
|
|
137
|
+
requestBody = {
|
|
138
|
+
model: this.chatGptModel,
|
|
139
|
+
response_format: { type: 'json_object' },
|
|
140
|
+
messages: [
|
|
141
|
+
{
|
|
142
|
+
role: ChatGptMessage_1.ChatGptRole.SYSTEM,
|
|
143
|
+
content: this.FIND_TEXT_LANGUAGE_SYSTEM_ROLE,
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
role: ChatGptMessage_1.ChatGptRole.USER,
|
|
147
|
+
content: translateText,
|
|
148
|
+
}
|
|
149
|
+
],
|
|
150
|
+
};
|
|
151
|
+
try {
|
|
152
|
+
const response = yield this.request.post('', requestBody);
|
|
153
|
+
return {
|
|
154
|
+
firstChoice: this.getResponseFirstChoice(response),
|
|
155
|
+
usageTokens: this.getResponseUsageTokens(response),
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
catch (e) {
|
|
159
|
+
this.handleErrors(e);
|
|
160
|
+
return Promise.reject(e);
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
}
|
|
125
164
|
}
|
|
126
165
|
exports.TranslationService = TranslationService;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cobrowser/chatgpt",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.12",
|
|
4
4
|
"description": "chatgpt services to connect our projects with chatgpt api",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"chatgpt",
|
|
@@ -39,5 +39,5 @@
|
|
|
39
39
|
"bugs": {
|
|
40
40
|
"url": "https://bitbucket.org/cobrowser/cb_utils/issues"
|
|
41
41
|
},
|
|
42
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "346f32b794180f7d008560c9cddff248de092355"
|
|
43
43
|
}
|
|
@@ -1,19 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,94 +0,0 @@
|
|
|
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;
|