solver-sdk 2.7.0 → 2.7.2
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/cjs/api/chat-api/index.js +3 -2
- package/dist/cjs/api/chat-api/index.js.map +1 -1
- package/dist/cjs/api/projects-api.js +2 -2
- package/dist/cjs/api/projects-api.js.map +1 -1
- package/dist/cjs/code-solver-sdk.js +70 -109
- package/dist/cjs/code-solver-sdk.js.map +1 -1
- package/dist/cjs/constants/websocket-namespaces.constants.js +9 -9
- package/dist/cjs/constants/websocket-namespaces.constants.js.map +1 -1
- package/dist/cjs/index.js +2 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/utils/code-solver-websocket-client.js +23 -21
- package/dist/cjs/utils/code-solver-websocket-client.js.map +1 -1
- package/dist/cjs/ws/indexing-ws-client.js +8 -2
- package/dist/cjs/ws/indexing-ws-client.js.map +1 -1
- package/dist/esm/api/chat-api/index.js +3 -2
- package/dist/esm/api/chat-api/index.js.map +1 -1
- package/dist/esm/api/projects-api.js +2 -2
- package/dist/esm/api/projects-api.js.map +1 -1
- package/dist/esm/code-solver-sdk.js +70 -109
- package/dist/esm/code-solver-sdk.js.map +1 -1
- package/dist/esm/constants/websocket-namespaces.constants.js +9 -9
- package/dist/esm/constants/websocket-namespaces.constants.js.map +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/utils/code-solver-websocket-client.js +23 -21
- package/dist/esm/utils/code-solver-websocket-client.js.map +1 -1
- package/dist/esm/ws/indexing-ws-client.js +8 -2
- package/dist/esm/ws/indexing-ws-client.js.map +1 -1
- package/dist/types/api/chat-api/index.d.ts.map +1 -1
- package/dist/types/code-solver-sdk.d.ts +0 -44
- package/dist/types/code-solver-sdk.d.ts.map +1 -1
- package/dist/types/constants/websocket-namespaces.constants.d.ts +8 -9
- package/dist/types/constants/websocket-namespaces.constants.d.ts.map +1 -1
- package/dist/types/index.d.ts +0 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/utils/code-solver-websocket-client.d.ts.map +1 -1
- package/docs/ARCHITECTURE.md +2 -2
- package/docs/WEBSOCKET.md +9 -7
- package/package.json +1 -1
- package/dist/cjs/api/reasoning-api.js +0 -309
- package/dist/cjs/api/reasoning-api.js.map +0 -1
- package/dist/cjs/utils/reasoning-auth-helper.js +0 -58
- package/dist/cjs/utils/reasoning-auth-helper.js.map +0 -1
- package/dist/cjs/ws/reasoning-ws-client.js +0 -330
- package/dist/cjs/ws/reasoning-ws-client.js.map +0 -1
- package/dist/esm/api/reasoning-api.js +0 -305
- package/dist/esm/api/reasoning-api.js.map +0 -1
- package/dist/esm/utils/reasoning-auth-helper.js +0 -54
- package/dist/esm/utils/reasoning-auth-helper.js.map +0 -1
- package/dist/esm/ws/reasoning-ws-client.js +0 -326
- package/dist/esm/ws/reasoning-ws-client.js.map +0 -1
- package/dist/types/api/reasoning-api.d.ts +0 -281
- package/dist/types/api/reasoning-api.d.ts.map +0 -1
- package/dist/types/utils/reasoning-auth-helper.d.ts +0 -24
- package/dist/types/utils/reasoning-auth-helper.d.ts.map +0 -1
- package/dist/types/ws/reasoning-ws-client.d.ts +0 -87
- package/dist/types/ws/reasoning-ws-client.d.ts.map +0 -1
|
@@ -1,330 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ReasoningWebSocketClient = void 0;
|
|
4
|
-
const websocket_namespaces_constants_js_1 = require("../constants/websocket-namespaces.constants.js");
|
|
5
|
-
const websocket_events_constants_js_1 = require("../constants/websocket-events.constants.js");
|
|
6
|
-
const base_ws_client_js_1 = require("./base-ws-client.js");
|
|
7
|
-
const reasoning_auth_helper_js_1 = require("../utils/reasoning-auth-helper.js");
|
|
8
|
-
/**
|
|
9
|
-
* WebSocket клиент для пространства имен рассуждений
|
|
10
|
-
*/
|
|
11
|
-
class ReasoningWebSocketClient extends base_ws_client_js_1.BaseWebSocketClient {
|
|
12
|
-
/**
|
|
13
|
-
* Создает новый WebSocket клиент для рассуждений
|
|
14
|
-
* @param {string} baseURL Базовый URL API
|
|
15
|
-
* @param {ReasoningWebSocketClientOptions} options Опции клиента
|
|
16
|
-
*/
|
|
17
|
-
constructor(baseURL, options = {}) {
|
|
18
|
-
super(websocket_namespaces_constants_js_1.WebSocketNamespace.REASONING, baseURL, options);
|
|
19
|
-
/** ID активного рассуждения */
|
|
20
|
-
this.activeReasoningId = null;
|
|
21
|
-
/** Обработчики событий мышления */
|
|
22
|
-
this.thinkingEventHandlers = new Map();
|
|
23
|
-
// Инициализируем ID рассуждения, если указан
|
|
24
|
-
this.activeReasoningId = options.reasoningId || null;
|
|
25
|
-
// Инициализируем обработчики событий
|
|
26
|
-
this.callbacks = options.callbacks || {};
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Подключается к серверу WebSocket
|
|
30
|
-
* @param {boolean} autoJoin Автоматически присоединиться к рассуждению
|
|
31
|
-
* @returns {Promise<boolean>} Успешность подключения
|
|
32
|
-
*/
|
|
33
|
-
async connectToReasoning(autoJoin = true) {
|
|
34
|
-
try {
|
|
35
|
-
// Получаем параметры авторизации для пространства имен рассуждений
|
|
36
|
-
const authParams = (0, reasoning_auth_helper_js_1.createReasoningConnectionParams)(this.options.apiKey, this.activeReasoningId, this.sessionManager.getSessionToken(this.namespace));
|
|
37
|
-
// Подключаемся к серверу
|
|
38
|
-
const connected = await this.connect(authParams);
|
|
39
|
-
if (!connected) {
|
|
40
|
-
this.logger.error('Не удалось подключиться к серверу рассуждений');
|
|
41
|
-
return false;
|
|
42
|
-
}
|
|
43
|
-
// Аутентифицируемся с увеличенным таймаутом
|
|
44
|
-
try {
|
|
45
|
-
const authResult = await this.emitWithAck(websocket_events_constants_js_1.WebSocketEvents.AUTHENTICATE, {
|
|
46
|
-
token: this.options.apiKey,
|
|
47
|
-
reasoningId: this.activeReasoningId
|
|
48
|
-
}, 10000);
|
|
49
|
-
this.logger.debug('Результат аутентификации в namespace рассуждений', authResult);
|
|
50
|
-
// Если сервер вернул токен сессии, сохраняем его
|
|
51
|
-
if (authResult.sessionToken) {
|
|
52
|
-
this.sessionManager.saveSessionToken(this.namespace, authResult.sessionToken);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
catch (error) {
|
|
56
|
-
this.logger.error('Ошибка аутентификации в namespace рассуждений', error);
|
|
57
|
-
return false;
|
|
58
|
-
}
|
|
59
|
-
// Если у нас есть ID рассуждения и включено автоматическое присоединение
|
|
60
|
-
if (this.activeReasoningId && autoJoin) {
|
|
61
|
-
return this.joinReasoning(this.activeReasoningId);
|
|
62
|
-
}
|
|
63
|
-
return true;
|
|
64
|
-
}
|
|
65
|
-
catch (error) {
|
|
66
|
-
this.logger.error('Ошибка подключения к пространству имен рассуждений', error);
|
|
67
|
-
return false;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Присоединяется к сессии рассуждения
|
|
72
|
-
* @param {string} reasoningId ID сессии рассуждения
|
|
73
|
-
* @returns {Promise<boolean>} Успешность операции
|
|
74
|
-
*/
|
|
75
|
-
async joinReasoning(reasoningId) {
|
|
76
|
-
if (!reasoningId) {
|
|
77
|
-
this.logger.error('Попытка присоединиться к пустому reasoningId');
|
|
78
|
-
return false;
|
|
79
|
-
}
|
|
80
|
-
// Сохраняем ID рассуждения
|
|
81
|
-
this.activeReasoningId = reasoningId;
|
|
82
|
-
try {
|
|
83
|
-
// Отправляем запрос на присоединение к сессии рассуждения
|
|
84
|
-
const joinResult = await this.emitWithAck(websocket_events_constants_js_1.WebSocketEvents.JOIN_REASONING, {
|
|
85
|
-
reasoningId,
|
|
86
|
-
token: this.options.apiKey
|
|
87
|
-
}, 10000);
|
|
88
|
-
this.logger.debug(`Результат присоединения к рассуждению ${reasoningId}`, joinResult);
|
|
89
|
-
if (joinResult.success !== true) {
|
|
90
|
-
this.logger.error(`Ошибка при присоединении к рассуждению: ${joinResult.error || 'Неизвестная ошибка'}`);
|
|
91
|
-
return false;
|
|
92
|
-
}
|
|
93
|
-
return true;
|
|
94
|
-
}
|
|
95
|
-
catch (error) {
|
|
96
|
-
this.logger.error(`Ошибка при присоединении к рассуждению ${reasoningId}`, error);
|
|
97
|
-
return false;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Запускает рассуждение
|
|
102
|
-
* @param {string} reasoningId ID сессии рассуждения
|
|
103
|
-
* @returns {Promise<boolean>} Успешность операции
|
|
104
|
-
*/
|
|
105
|
-
async startReasoning(reasoningId) {
|
|
106
|
-
const targetId = reasoningId || this.activeReasoningId;
|
|
107
|
-
if (!targetId) {
|
|
108
|
-
this.logger.error('Попытка запустить рассуждение без указания ID');
|
|
109
|
-
return false;
|
|
110
|
-
}
|
|
111
|
-
try {
|
|
112
|
-
// Отправляем запрос на запуск рассуждения
|
|
113
|
-
const startResult = await this.emitWithAck(websocket_events_constants_js_1.WebSocketEvents.START_REASONING, {
|
|
114
|
-
reasoningId: targetId,
|
|
115
|
-
token: this.options.apiKey
|
|
116
|
-
}, 10000);
|
|
117
|
-
this.logger.debug(`Результат запуска рассуждения ${targetId}`, startResult);
|
|
118
|
-
if (startResult.success !== true) {
|
|
119
|
-
this.logger.error(`Ошибка при запуске рассуждения: ${startResult.error || 'Неизвестная ошибка'}`);
|
|
120
|
-
return false;
|
|
121
|
-
}
|
|
122
|
-
return true;
|
|
123
|
-
}
|
|
124
|
-
catch (error) {
|
|
125
|
-
this.logger.error(`Ошибка при запуске рассуждения ${targetId}`, error);
|
|
126
|
-
return false;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Создает новое рассуждение на сервере
|
|
131
|
-
* @returns {Promise<string>} ID нового рассуждения
|
|
132
|
-
*/
|
|
133
|
-
async createNewReasoning() {
|
|
134
|
-
if (!this.isConnected()) {
|
|
135
|
-
this.logger.debug('Подключение к пространству имен рассуждений для создания нового рассуждения');
|
|
136
|
-
const connected = await this.connectToReasoning(false);
|
|
137
|
-
if (!connected) {
|
|
138
|
-
throw new Error('Не удалось подключиться к пространству имен рассуждений');
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
this.logger.debug('Отправка запроса на создание нового рассуждения');
|
|
142
|
-
const result = await this.emitWithAck(websocket_events_constants_js_1.WebSocketEvents.CREATE_REASONING, {
|
|
143
|
-
token: this.options.apiKey
|
|
144
|
-
}, 10000);
|
|
145
|
-
if (!result.reasoningId) {
|
|
146
|
-
throw new Error(`Сервер не вернул ID рассуждения: ${JSON.stringify(result)}`);
|
|
147
|
-
}
|
|
148
|
-
// Сохраняем ID нового рассуждения
|
|
149
|
-
this.activeReasoningId = result.reasoningId;
|
|
150
|
-
return result.reasoningId;
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Подключается к сессии thinking с расширенными возможностями
|
|
154
|
-
* @param {string} [reasoningId="system"] Идентификатор рассуждения
|
|
155
|
-
* @param {(data: any) => void} [thinkingHandler] Обработчик событий мышления
|
|
156
|
-
* @returns {Promise<string>} Идентификатор сессии рассуждения
|
|
157
|
-
*/
|
|
158
|
-
async connectToThinkingSession(reasoningId = "system", thinkingHandler) {
|
|
159
|
-
try {
|
|
160
|
-
// Подключаемся к пространству имен
|
|
161
|
-
const connected = await this.connectToReasoning(false);
|
|
162
|
-
if (!connected) {
|
|
163
|
-
throw new Error('Не удалось подключиться к пространству имен рассуждений');
|
|
164
|
-
}
|
|
165
|
-
// Если reasoningId == "system", сервер заменит его на новый
|
|
166
|
-
// с префиксом "system-". Для получения нового ID нужно подписаться
|
|
167
|
-
// на событие создания рассуждения.
|
|
168
|
-
if (reasoningId === "system") {
|
|
169
|
-
// Будем ждать ответа о создании рассуждения
|
|
170
|
-
const newReasoningId = await this.createNewReasoning();
|
|
171
|
-
this.activeReasoningId = newReasoningId;
|
|
172
|
-
// Отправляем запрос на присоединение к сессии рассуждения
|
|
173
|
-
const joinSuccess = await this.joinReasoning(newReasoningId);
|
|
174
|
-
if (!joinSuccess) {
|
|
175
|
-
throw new Error(`Ошибка при присоединении к сессии рассуждения: ${newReasoningId}`);
|
|
176
|
-
}
|
|
177
|
-
// Отправляем запрос на запуск рассуждения
|
|
178
|
-
const startSuccess = await this.startReasoning(newReasoningId);
|
|
179
|
-
if (!startSuccess) {
|
|
180
|
-
throw new Error(`Ошибка при запуске рассуждения: ${newReasoningId}`);
|
|
181
|
-
}
|
|
182
|
-
// Если передан обработчик событий мышления, подписываемся
|
|
183
|
-
if (thinkingHandler) {
|
|
184
|
-
this.subscribeToThinking(newReasoningId, thinkingHandler);
|
|
185
|
-
}
|
|
186
|
-
return newReasoningId;
|
|
187
|
-
}
|
|
188
|
-
else {
|
|
189
|
-
this.activeReasoningId = reasoningId;
|
|
190
|
-
// Отправляем запрос на присоединение к сессии рассуждения
|
|
191
|
-
const joinSuccess = await this.joinReasoning(reasoningId);
|
|
192
|
-
if (!joinSuccess) {
|
|
193
|
-
throw new Error(`Ошибка при присоединении к сессии рассуждения: ${reasoningId}`);
|
|
194
|
-
}
|
|
195
|
-
// Отправляем запрос на запуск рассуждения
|
|
196
|
-
const startSuccess = await this.startReasoning(reasoningId);
|
|
197
|
-
if (!startSuccess) {
|
|
198
|
-
throw new Error(`Ошибка при запуске рассуждения: ${reasoningId}`);
|
|
199
|
-
}
|
|
200
|
-
// Если передан обработчик событий мышления, подписываемся
|
|
201
|
-
if (thinkingHandler) {
|
|
202
|
-
this.subscribeToThinking(reasoningId, thinkingHandler);
|
|
203
|
-
}
|
|
204
|
-
return reasoningId;
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
catch (error) {
|
|
208
|
-
throw new Error(`Ошибка при подключении к сессии thinking: ${error instanceof Error ? error.message : String(error)}`);
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
/**
|
|
212
|
-
* Настраивает обработчики событий для стрима от Anthropic
|
|
213
|
-
*/
|
|
214
|
-
setupAnthropicStreamHandlers() {
|
|
215
|
-
if (!this.isConnected() || !this.client) {
|
|
216
|
-
this.logger.warn('Попытка настроить обработчики событий Anthropic Stream, но клиент не подключен');
|
|
217
|
-
return;
|
|
218
|
-
}
|
|
219
|
-
// Устанавливаем обработчики для различных событий
|
|
220
|
-
// Обработчик для события начала сообщения
|
|
221
|
-
if (this.callbacks.onMessageStart) {
|
|
222
|
-
this.client.on('message_start', this.callbacks.onMessageStart);
|
|
223
|
-
}
|
|
224
|
-
// Обработчик для события начала блока контента
|
|
225
|
-
this.client.on('content_block_start', (data) => {
|
|
226
|
-
if (data.content_type === 'thinking' && this.callbacks.onThinkingStart) {
|
|
227
|
-
this.callbacks.onThinkingStart(data);
|
|
228
|
-
}
|
|
229
|
-
else if (this.callbacks.onContentStart) {
|
|
230
|
-
this.callbacks.onContentStart(data);
|
|
231
|
-
}
|
|
232
|
-
// Для отладки
|
|
233
|
-
if (this.callbacks.onAny) {
|
|
234
|
-
this.callbacks.onAny('content_block_start', data);
|
|
235
|
-
}
|
|
236
|
-
});
|
|
237
|
-
// Обработчик для события дельты блока контента
|
|
238
|
-
this.client.on('content_block_delta', (data) => {
|
|
239
|
-
if (data.delta.type === 'thinking_delta' && this.callbacks.onThinkingDelta && data.delta.thinking) {
|
|
240
|
-
this.callbacks.onThinkingDelta({
|
|
241
|
-
index: data.index,
|
|
242
|
-
delta: data.delta.thinking
|
|
243
|
-
});
|
|
244
|
-
}
|
|
245
|
-
else if (this.callbacks.onContentDelta) {
|
|
246
|
-
this.callbacks.onContentDelta(data);
|
|
247
|
-
}
|
|
248
|
-
// Для отладки
|
|
249
|
-
if (this.callbacks.onAny) {
|
|
250
|
-
this.callbacks.onAny('content_block_delta', data);
|
|
251
|
-
}
|
|
252
|
-
});
|
|
253
|
-
// Обработчик для события остановки блока контента
|
|
254
|
-
this.client.on('content_block_stop', (data) => {
|
|
255
|
-
if (data.content_type === 'thinking' && this.callbacks.onThinkingStop) {
|
|
256
|
-
this.callbacks.onThinkingStop(data);
|
|
257
|
-
}
|
|
258
|
-
else if (this.callbacks.onContentStop) {
|
|
259
|
-
this.callbacks.onContentStop(data);
|
|
260
|
-
}
|
|
261
|
-
// Для отладки
|
|
262
|
-
if (this.callbacks.onAny) {
|
|
263
|
-
this.callbacks.onAny('content_block_stop', data);
|
|
264
|
-
}
|
|
265
|
-
});
|
|
266
|
-
// Обработчик для события окончания сообщения
|
|
267
|
-
if (this.callbacks.onMessageStop) {
|
|
268
|
-
this.client.on('message_stop', this.callbacks.onMessageStop);
|
|
269
|
-
}
|
|
270
|
-
// Обработчик для события ошибки
|
|
271
|
-
if (this.callbacks.onError) {
|
|
272
|
-
this.client.on('error', this.callbacks.onError);
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
/**
|
|
276
|
-
* Подписывается на события мышления
|
|
277
|
-
* @param {string} reasoningId Идентификатор рассуждения
|
|
278
|
-
* @param {Function} handler Обработчик событий мышления
|
|
279
|
-
* @returns {void}
|
|
280
|
-
*/
|
|
281
|
-
subscribeToThinking(reasoningId, handler) {
|
|
282
|
-
// Сохраняем обработчик
|
|
283
|
-
this.thinkingEventHandlers.set(reasoningId, handler);
|
|
284
|
-
// Подписываемся на события мышления
|
|
285
|
-
this.on(`thinking:${reasoningId}`, handler);
|
|
286
|
-
// Дублируем подписку для полной совместимости
|
|
287
|
-
this.on(`reasoning:thinking:${reasoningId}`, handler);
|
|
288
|
-
this.logger.debug(`Подписан на события мышления для ${reasoningId}`);
|
|
289
|
-
}
|
|
290
|
-
/**
|
|
291
|
-
* Отписывается от событий мышления
|
|
292
|
-
* @param {string} reasoningId Идентификатор рассуждения
|
|
293
|
-
* @returns {void}
|
|
294
|
-
*/
|
|
295
|
-
unsubscribeFromThinking(reasoningId) {
|
|
296
|
-
// Получаем обработчик
|
|
297
|
-
const handler = this.thinkingEventHandlers.get(reasoningId);
|
|
298
|
-
if (handler) {
|
|
299
|
-
// Отписываемся от событий
|
|
300
|
-
this.off(`thinking:${reasoningId}`, handler);
|
|
301
|
-
this.off(`reasoning:thinking:${reasoningId}`, handler);
|
|
302
|
-
// Удаляем обработчик
|
|
303
|
-
this.thinkingEventHandlers.delete(reasoningId);
|
|
304
|
-
this.logger.debug(`Отписан от событий мышления для ${reasoningId}`);
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
/**
|
|
308
|
-
* Получает текущий ID активного рассуждения
|
|
309
|
-
* @returns {string | null} ID активного рассуждения или null
|
|
310
|
-
*/
|
|
311
|
-
getActiveReasoningId() {
|
|
312
|
-
return this.activeReasoningId;
|
|
313
|
-
}
|
|
314
|
-
/**
|
|
315
|
-
* Устанавливает ID активного рассуждения
|
|
316
|
-
* @param {string} reasoningId ID рассуждения
|
|
317
|
-
* @returns {boolean} Успешность установки
|
|
318
|
-
*/
|
|
319
|
-
setActiveReasoningId(reasoningId) {
|
|
320
|
-
if (!reasoningId) {
|
|
321
|
-
this.logger.error('Попытка установить пустой reasoningId');
|
|
322
|
-
return false;
|
|
323
|
-
}
|
|
324
|
-
this.activeReasoningId = reasoningId;
|
|
325
|
-
this.logger.debug(`Установлен активный reasoningId: ${reasoningId}`);
|
|
326
|
-
return true;
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
exports.ReasoningWebSocketClient = ReasoningWebSocketClient;
|
|
330
|
-
//# sourceMappingURL=reasoning-ws-client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reasoning-ws-client.js","sourceRoot":"","sources":["../../../src/ws/reasoning-ws-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,305 +0,0 @@
|
|
|
1
|
-
import { WebSocketNamespace } from '../utils/code-solver-websocket-client.js';
|
|
2
|
-
/**
|
|
3
|
-
* API для работы с рассуждениями
|
|
4
|
-
*/
|
|
5
|
-
export class ReasoningApi {
|
|
6
|
-
/**
|
|
7
|
-
* Создает новый экземпляр API для работы с рассуждениями
|
|
8
|
-
* @param {HttpClient} httpClient HTTP клиент
|
|
9
|
-
* @param {ProjectsApi} projectsApi API для работы с проектами
|
|
10
|
-
*/
|
|
11
|
-
constructor(httpClient, projectsApi) {
|
|
12
|
-
/** WebSocket клиент */
|
|
13
|
-
this.wsClient = null;
|
|
14
|
-
/** Родительский SDK */
|
|
15
|
-
this.parentSdk = null;
|
|
16
|
-
this.httpClient = httpClient;
|
|
17
|
-
this.projectsApi = projectsApi;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Получает список рассуждений
|
|
21
|
-
* @param {GetReasoningsParams} [params] Параметры для получения списка
|
|
22
|
-
* @returns {Promise<Reasoning[]>} Список рассуждений
|
|
23
|
-
*/
|
|
24
|
-
async getReasonings(params) {
|
|
25
|
-
return this.httpClient.get('/api/reasonings', params);
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Получает рассуждение по ID
|
|
29
|
-
* @param {string} reasoningId ID рассуждения
|
|
30
|
-
* @returns {Promise<Reasoning>} Рассуждение
|
|
31
|
-
*/
|
|
32
|
-
async getReasoning(reasoningId) {
|
|
33
|
-
return this.httpClient.get(`/api/v1/reasoning/${reasoningId}`);
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Создает новое рассуждение
|
|
37
|
-
* @param {ReasoningOptions} options Опции для рассуждения
|
|
38
|
-
* @returns {Promise<Reasoning>} Созданное рассуждение
|
|
39
|
-
*/
|
|
40
|
-
async createReasoning(options) {
|
|
41
|
-
return this.httpClient.post('/api/v1/reasoning/create', options);
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Создает новое рассуждение с автоматическим переключением между регионами при ошибке перегрузки
|
|
45
|
-
* @param {ReasoningOptions} options Опции для рассуждения
|
|
46
|
-
* @returns {Promise<Reasoning>} Созданное рассуждение
|
|
47
|
-
*/
|
|
48
|
-
async createReasoningWithRegionFailover(options) {
|
|
49
|
-
// Список всех доступных регионов
|
|
50
|
-
const allRegions = ['us-east-1', 'eu-west-1', 'ap-southeast-2'];
|
|
51
|
-
// Начинаем с региона из параметров, или первого в списке
|
|
52
|
-
let startRegionIndex = 0;
|
|
53
|
-
if (options.options?.region) {
|
|
54
|
-
const regionIndex = allRegions.indexOf(options.options.region);
|
|
55
|
-
if (regionIndex !== -1) {
|
|
56
|
-
startRegionIndex = regionIndex;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
// Реорганизуем массив, чтобы начать с указанного региона
|
|
60
|
-
const regions = [
|
|
61
|
-
...allRegions.slice(startRegionIndex),
|
|
62
|
-
...allRegions.slice(0, startRegionIndex)
|
|
63
|
-
];
|
|
64
|
-
// Последняя ошибка, будет возвращена если все регионы недоступны
|
|
65
|
-
let lastError = null;
|
|
66
|
-
// Пробуем каждый регион по очереди
|
|
67
|
-
for (let i = 0; i < regions.length; i++) {
|
|
68
|
-
const region = regions[i];
|
|
69
|
-
try {
|
|
70
|
-
console.log(`Попытка запроса рассуждения к Anthropic API в регионе ${region}`);
|
|
71
|
-
// Копируем опции и устанавливаем текущий регион
|
|
72
|
-
const regionOptions = {
|
|
73
|
-
...options,
|
|
74
|
-
options: {
|
|
75
|
-
...(options.options || {}),
|
|
76
|
-
region
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
// Отправляем запрос с конкретным регионом
|
|
80
|
-
return await this.createReasoning(regionOptions);
|
|
81
|
-
}
|
|
82
|
-
catch (error) {
|
|
83
|
-
lastError = error;
|
|
84
|
-
// Проверяем, является ли ошибка ошибкой перегрузки (код 529)
|
|
85
|
-
const isOverloadError = error.status === 529 ||
|
|
86
|
-
error.code === 529 ||
|
|
87
|
-
(error.response?.status === 529) ||
|
|
88
|
-
(error.message && error.message.includes('overloaded')) ||
|
|
89
|
-
(error.error?.type === 'overloaded_error');
|
|
90
|
-
if (isOverloadError) {
|
|
91
|
-
console.warn(`Регион ${region} перегружен, пробуем следующий регион для рассуждения`);
|
|
92
|
-
// Продолжаем цикл и пробуем следующий регион
|
|
93
|
-
continue;
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
// Если ошибка не связана с перегрузкой, прекращаем попытки
|
|
97
|
-
console.error(`Ошибка в регионе ${region}, не связанная с перегрузкой:`, error);
|
|
98
|
-
throw error;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
// Если мы здесь, значит все регионы перегружены
|
|
103
|
-
throw lastError || new Error('Все регионы Anthropic API перегружены, попробуйте создать рассуждение позже');
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Запускает рассуждение
|
|
107
|
-
* @param {string} reasoningId ID рассуждения
|
|
108
|
-
* @returns {Promise<Reasoning>} Обновленное рассуждение
|
|
109
|
-
*/
|
|
110
|
-
async startReasoning(reasoningId) {
|
|
111
|
-
return this.httpClient.post(`/api/v1/reasoning/start/${reasoningId}`);
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Останавливает рассуждение
|
|
115
|
-
* @param {string} reasoningId ID рассуждения
|
|
116
|
-
* @returns {Promise<Reasoning>} Обновленное рассуждение
|
|
117
|
-
*/
|
|
118
|
-
async stopReasoning(reasoningId) {
|
|
119
|
-
return this.httpClient.post(`/api/v1/reasoning/cancel/${reasoningId}`);
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Удаляет рассуждение
|
|
123
|
-
* @param {string} reasoningId ID рассуждения
|
|
124
|
-
* @returns {Promise<void>}
|
|
125
|
-
*/
|
|
126
|
-
async deleteReasoning(reasoningId) {
|
|
127
|
-
return this.httpClient.delete(`/api/v1/reasoning/${reasoningId}`);
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Получает ход мыслей рассуждения
|
|
131
|
-
* @param {string} reasoningId ID рассуждения
|
|
132
|
-
* @returns {Promise<ThinkingStep[]>} Ход мыслей
|
|
133
|
-
*/
|
|
134
|
-
async getThinking(reasoningId) {
|
|
135
|
-
return this.httpClient.get(`/api/v1/reasoning/${reasoningId}/thinking`);
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Получает все рассуждения проекта
|
|
139
|
-
* @param {string} projectId ID проекта
|
|
140
|
-
* @returns {Promise<Reasoning[]>} Список рассуждений
|
|
141
|
-
*/
|
|
142
|
-
async getAllReasonings(projectId) {
|
|
143
|
-
return this.httpClient.get(`/api/v1/reasoning/project/${projectId}`);
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Подключается к WebSocket для событий рассуждений
|
|
147
|
-
* @returns {Promise<boolean>} Результат подключения
|
|
148
|
-
*/
|
|
149
|
-
async connectWebSocket() {
|
|
150
|
-
try {
|
|
151
|
-
if (!this.parentSdk || typeof this.parentSdk.getWebSocketClient !== 'function') {
|
|
152
|
-
throw new Error('Родительский SDK не настроен или не поддерживает WebSocket');
|
|
153
|
-
}
|
|
154
|
-
this.wsClient = this.parentSdk.getWebSocketClient();
|
|
155
|
-
await this.wsClient.connect(WebSocketNamespace.REASONING);
|
|
156
|
-
return this.wsClient.isConnected(WebSocketNamespace.REASONING);
|
|
157
|
-
}
|
|
158
|
-
catch (error) {
|
|
159
|
-
console.error('[ReasoningApi] Ошибка при подключении к WebSocket:', error.message);
|
|
160
|
-
return false;
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* Отключается от WebSocket для событий рассуждений
|
|
165
|
-
* @returns {Promise<void>}
|
|
166
|
-
*/
|
|
167
|
-
async disconnectWebSocket() {
|
|
168
|
-
if (this.wsClient) {
|
|
169
|
-
await this.wsClient.disconnect(WebSocketNamespace.REASONING);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Проверяет, подключен ли WebSocket
|
|
174
|
-
* @returns {boolean} Состояние подключения
|
|
175
|
-
*/
|
|
176
|
-
isWebSocketConnected() {
|
|
177
|
-
return this.wsClient ? this.wsClient.isConnected(WebSocketNamespace.REASONING) : false;
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Устанавливает родительский SDK
|
|
181
|
-
* @param sdk Родительский SDK
|
|
182
|
-
*/
|
|
183
|
-
setParent(sdk) {
|
|
184
|
-
this.parentSdk = sdk;
|
|
185
|
-
}
|
|
186
|
-
// ✅ ИСПРАВЛЕНИЕ: Алиасы для краткости использования
|
|
187
|
-
/**
|
|
188
|
-
* Алиас для createReasoning()
|
|
189
|
-
* @param options Опции для создания рассуждения
|
|
190
|
-
* @returns Promise с созданным рассуждением
|
|
191
|
-
*/
|
|
192
|
-
async create(options) {
|
|
193
|
-
return this.createReasoning(options);
|
|
194
|
-
}
|
|
195
|
-
/**
|
|
196
|
-
* Алиас для startReasoning()
|
|
197
|
-
* @param reasoningId ID рассуждения для запуска
|
|
198
|
-
* @returns Promise с обновленным рассуждением
|
|
199
|
-
*/
|
|
200
|
-
async start(reasoningId) {
|
|
201
|
-
return this.startReasoning(reasoningId);
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* Алиас для stopReasoning()
|
|
205
|
-
* @param reasoningId ID рассуждения для остановки
|
|
206
|
-
* @returns Promise с обновленным рассуждением
|
|
207
|
-
*/
|
|
208
|
-
async stop(reasoningId) {
|
|
209
|
-
return this.stopReasoning(reasoningId);
|
|
210
|
-
}
|
|
211
|
-
/**
|
|
212
|
-
* Подписывается на событие через WebSocket
|
|
213
|
-
* @param event Название события
|
|
214
|
-
* @param callback Функция обратного вызова
|
|
215
|
-
*/
|
|
216
|
-
on(event, callback) {
|
|
217
|
-
if (!this.wsClient) {
|
|
218
|
-
throw new Error('[ReasoningApi] WebSocket не подключен. Подключитесь к WebSocket перед подпиской на события.');
|
|
219
|
-
}
|
|
220
|
-
this.wsClient.on(event, callback);
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* Отправляет событие через WebSocket
|
|
224
|
-
* @param event Название события
|
|
225
|
-
* @param data Данные для отправки
|
|
226
|
-
*/
|
|
227
|
-
emitSocketEvent(event, data) {
|
|
228
|
-
if (!this.wsClient) {
|
|
229
|
-
throw new Error('[ReasoningApi] WebSocket не подключен. Подключитесь к WebSocket перед отправкой событий.');
|
|
230
|
-
}
|
|
231
|
-
this.wsClient.send(WebSocketNamespace.REASONING, event, data);
|
|
232
|
-
}
|
|
233
|
-
/**
|
|
234
|
-
* Отправляет событие через WebSocket с ожиданием ответа
|
|
235
|
-
* @param event Имя события
|
|
236
|
-
* @param data Данные для отправки
|
|
237
|
-
* @param timeout Таймаут ожидания ответа
|
|
238
|
-
* @returns {Promise<any>} Ответ от сервера
|
|
239
|
-
*/
|
|
240
|
-
async sendSocketEventWithResponse(event, data, timeout = 5000) {
|
|
241
|
-
if (!this.wsClient) {
|
|
242
|
-
throw new Error('[ReasoningApi] WebSocket не подключен');
|
|
243
|
-
}
|
|
244
|
-
// Реализуем собственный механизм emitWithAck, если wsClient не поддерживает его
|
|
245
|
-
return new Promise((resolve, reject) => {
|
|
246
|
-
try {
|
|
247
|
-
// Создаем уникальный ID для запроса
|
|
248
|
-
const requestId = `req_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
|
|
249
|
-
// Имя события для ответа
|
|
250
|
-
const responseEvent = `${event}_response`;
|
|
251
|
-
// Обработчик для получения ответа
|
|
252
|
-
const responseHandler = (response) => {
|
|
253
|
-
if (response && response.requestId === requestId) {
|
|
254
|
-
// Очищаем таймер и удаляем обработчик
|
|
255
|
-
clearTimeout(timeoutId);
|
|
256
|
-
if (this.wsClient) {
|
|
257
|
-
this.wsClient.off(responseEvent, responseHandler);
|
|
258
|
-
}
|
|
259
|
-
// Разрешаем промис с ответом
|
|
260
|
-
resolve(response.data || response);
|
|
261
|
-
}
|
|
262
|
-
};
|
|
263
|
-
// Устанавливаем таймаут
|
|
264
|
-
const timeoutId = setTimeout(() => {
|
|
265
|
-
if (this.wsClient) {
|
|
266
|
-
this.wsClient.off(responseEvent, responseHandler);
|
|
267
|
-
}
|
|
268
|
-
reject(new Error(`Таймаут ожидания ответа на событие ${event}`));
|
|
269
|
-
}, timeout);
|
|
270
|
-
// Регистрируем обработчик
|
|
271
|
-
this.wsClient.on(responseEvent, responseHandler);
|
|
272
|
-
// Отправляем событие
|
|
273
|
-
this.wsClient.send(WebSocketNamespace.REASONING, event, {
|
|
274
|
-
...data,
|
|
275
|
-
requestId
|
|
276
|
-
});
|
|
277
|
-
}
|
|
278
|
-
catch (error) {
|
|
279
|
-
reject(error);
|
|
280
|
-
}
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
/**
|
|
284
|
-
* Присоединяется к конкретному рассуждению через WebSocket
|
|
285
|
-
* @param reasoningId ID рассуждения
|
|
286
|
-
* @returns {Promise<any>} Результат операции
|
|
287
|
-
*/
|
|
288
|
-
async joinReasoning(reasoningId) {
|
|
289
|
-
if (!this.wsClient || !this.isWebSocketConnected()) {
|
|
290
|
-
await this.connectWebSocket();
|
|
291
|
-
}
|
|
292
|
-
return this.sendSocketEventWithResponse('JOIN_REASONING', { reasoningId }, 5000);
|
|
293
|
-
}
|
|
294
|
-
/**
|
|
295
|
-
* Покидает конкретное рассуждение через WebSocket
|
|
296
|
-
* @param reasoningId ID рассуждения
|
|
297
|
-
*/
|
|
298
|
-
leaveReasoning(reasoningId) {
|
|
299
|
-
if (!this.wsClient || !this.isWebSocketConnected()) {
|
|
300
|
-
throw new Error('[ReasoningApi] WebSocket не подключен. Подключитесь к WebSocket перед выходом из рассуждения.');
|
|
301
|
-
}
|
|
302
|
-
this.emitSocketEvent('LEAVE_REASONING', { reasoningId });
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
//# sourceMappingURL=reasoning-api.js.map
|