solver-sdk 1.8.0 → 1.8.1
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/README.md +176 -468
- package/dist/cjs/api/{chat-api.js → chat-api/index.js} +77 -125
- package/dist/cjs/api/chat-api/index.js.map +1 -0
- package/dist/cjs/api/chat-api/interfaces.js +3 -0
- package/dist/cjs/api/chat-api/interfaces.js.map +1 -0
- package/dist/cjs/api/chat-api/models.js +6 -0
- package/dist/cjs/api/chat-api/models.js.map +1 -0
- package/dist/cjs/api/chat-api/stream-utils.js +192 -0
- package/dist/cjs/api/chat-api/stream-utils.js.map +1 -0
- package/dist/cjs/api/chat-api/websocket-helpers.js +211 -0
- package/dist/cjs/api/chat-api/websocket-helpers.js.map +1 -0
- package/dist/cjs/api/projects-api.js +279 -5
- package/dist/cjs/api/projects-api.js.map +1 -1
- package/dist/cjs/code-solver-sdk.js +12 -17
- package/dist/cjs/code-solver-sdk.js.map +1 -1
- package/dist/cjs/constants/websocket-events.constants.js +77 -52
- package/dist/cjs/constants/websocket-events.constants.js.map +1 -1
- package/dist/cjs/utils/code-solver-websocket-client.js +87 -56
- package/dist/cjs/utils/code-solver-websocket-client.js.map +1 -1
- package/dist/cjs/utils/http-client.js +7 -0
- package/dist/cjs/utils/http-client.js.map +1 -1
- package/dist/cjs/utils/reasoning-auth-helper.js +58 -0
- package/dist/cjs/utils/reasoning-auth-helper.js.map +1 -0
- package/dist/cjs/utils/websocket-client.js +37 -10
- package/dist/cjs/utils/websocket-client.js.map +1 -1
- package/dist/esm/api/{chat-api.js → chat-api/index.js} +74 -125
- package/dist/esm/api/chat-api/index.js.map +1 -0
- package/dist/esm/api/chat-api/interfaces.js +2 -0
- package/dist/esm/api/chat-api/interfaces.js.map +1 -0
- package/dist/esm/api/chat-api/models.js +5 -0
- package/dist/esm/api/chat-api/models.js.map +1 -0
- package/dist/esm/api/chat-api/stream-utils.js +188 -0
- package/dist/esm/api/chat-api/stream-utils.js.map +1 -0
- package/dist/esm/api/chat-api/websocket-helpers.js +205 -0
- package/dist/esm/api/chat-api/websocket-helpers.js.map +1 -0
- package/dist/esm/api/projects-api.js +279 -5
- package/dist/esm/api/projects-api.js.map +1 -1
- package/dist/esm/code-solver-sdk.js +10 -15
- package/dist/esm/code-solver-sdk.js.map +1 -1
- package/dist/esm/constants/websocket-events.constants.js +76 -51
- package/dist/esm/constants/websocket-events.constants.js.map +1 -1
- package/dist/esm/utils/code-solver-websocket-client.js +87 -56
- package/dist/esm/utils/code-solver-websocket-client.js.map +1 -1
- package/dist/esm/utils/http-client.js +7 -0
- package/dist/esm/utils/http-client.js.map +1 -1
- package/dist/esm/utils/reasoning-auth-helper.js +54 -0
- package/dist/esm/utils/reasoning-auth-helper.js.map +1 -0
- package/dist/esm/utils/websocket-client.js +37 -10
- package/dist/esm/utils/websocket-client.js.map +1 -1
- package/dist/types/api/chat-api/index.d.ts +81 -0
- package/dist/types/api/chat-api/index.d.ts.map +1 -0
- package/dist/types/api/chat-api/interfaces.d.ts +47 -0
- package/dist/types/api/chat-api/interfaces.d.ts.map +1 -0
- package/dist/types/api/{chat-api.d.ts → chat-api/models.d.ts} +10 -73
- package/dist/types/api/chat-api/models.d.ts.map +1 -0
- package/dist/types/api/chat-api/stream-utils.d.ts +31 -0
- package/dist/types/api/chat-api/stream-utils.d.ts.map +1 -0
- package/dist/types/api/chat-api/websocket-helpers.d.ts +40 -0
- package/dist/types/api/chat-api/websocket-helpers.d.ts.map +1 -0
- package/dist/types/api/projects-api.d.ts +114 -1
- package/dist/types/api/projects-api.d.ts.map +1 -1
- package/dist/types/code-solver-sdk.d.ts +1 -1
- package/dist/types/code-solver-sdk.d.ts.map +1 -1
- package/dist/types/constants/websocket-events.constants.d.ts +65 -36
- package/dist/types/constants/websocket-events.constants.d.ts.map +1 -1
- package/dist/types/interfaces/http-client.d.ts +1 -1
- package/dist/types/interfaces/http-client.d.ts.map +1 -1
- package/dist/types/types/index.d.ts +8 -0
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/utils/code-solver-websocket-client.d.ts +44 -43
- package/dist/types/utils/code-solver-websocket-client.d.ts.map +1 -1
- package/dist/types/utils/http-client.d.ts +5 -0
- package/dist/types/utils/http-client.d.ts.map +1 -1
- package/dist/types/utils/reasoning-auth-helper.d.ts +24 -0
- package/dist/types/utils/reasoning-auth-helper.d.ts.map +1 -0
- package/dist/types/utils/websocket-client.d.ts +6 -0
- package/dist/types/utils/websocket-client.d.ts.map +1 -1
- package/docs/API_REFERENCE.md +432 -0
- package/docs/AUTHENTICATION.md +179 -0
- package/docs/ERROR_HANDLING.md +240 -0
- package/docs/INTEGRATION_EXAMPLES.md +342 -0
- package/docs/PING_PONG.md +212 -0
- package/docs/README.md +102 -0
- package/docs/WEBSOCKET.md +299 -0
- package/docs/advanced/PING_PONG.md +212 -0
- package/docs/features/THINKING.md +158 -0
- package/docs/indexing/INDEXING.md +231 -0
- package/package.json +4 -3
- package/dist/cjs/api/chat-api.js.map +0 -1
- package/dist/esm/api/chat-api.js.map +0 -1
- package/dist/types/api/chat-api.d.ts.map +0 -1
|
@@ -15,6 +15,9 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
15
15
|
}) : function(o, v) {
|
|
16
16
|
o["default"] = v;
|
|
17
17
|
});
|
|
18
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
19
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
20
|
+
};
|
|
18
21
|
var __importStar = (this && this.__importStar) || (function () {
|
|
19
22
|
var ownKeys = function(o) {
|
|
20
23
|
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
@@ -34,13 +37,18 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
37
|
})();
|
|
35
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
39
|
exports.ChatApi = void 0;
|
|
40
|
+
const websocket_helpers_1 = require("./websocket-helpers");
|
|
41
|
+
const stream_utils_1 = require("./stream-utils");
|
|
42
|
+
// Экспортируем все типы и интерфейсы для внешнего использования
|
|
43
|
+
__exportStar(require("./models"), exports);
|
|
44
|
+
__exportStar(require("./interfaces"), exports);
|
|
37
45
|
/**
|
|
38
46
|
* API для работы с чатом
|
|
39
47
|
*/
|
|
40
48
|
class ChatApi {
|
|
41
49
|
/**
|
|
42
50
|
* Создает новый экземпляр API для работы с чатом
|
|
43
|
-
* @param {
|
|
51
|
+
* @param {IHttpClient} httpClient HTTP клиент
|
|
44
52
|
*/
|
|
45
53
|
constructor(httpClient) {
|
|
46
54
|
this.httpClient = httpClient;
|
|
@@ -88,8 +96,11 @@ class ChatApi {
|
|
|
88
96
|
*/
|
|
89
97
|
async checkAvailability() {
|
|
90
98
|
try {
|
|
91
|
-
// Используем
|
|
92
|
-
await this.httpClient.
|
|
99
|
+
// Используем HEAD запрос вместо GET, так как эндпоинт поддерживает только HEAD/POST
|
|
100
|
+
await this.httpClient.request({
|
|
101
|
+
method: 'HEAD',
|
|
102
|
+
url: '/api/v1/chat'
|
|
103
|
+
});
|
|
93
104
|
return true;
|
|
94
105
|
}
|
|
95
106
|
catch (error) {
|
|
@@ -231,78 +242,21 @@ class ChatApi {
|
|
|
231
242
|
for (const line of lines) {
|
|
232
243
|
if (!line.startsWith('data:'))
|
|
233
244
|
continue;
|
|
234
|
-
const
|
|
235
|
-
|
|
245
|
+
const result = (0, stream_utils_1.processStreamChunk)(line, isInThinkingBlock, thinkingContent, textContent, thinkingSignature, options?.onToken);
|
|
246
|
+
isInThinkingBlock = result.isInThinkingBlock;
|
|
247
|
+
thinkingContent = result.thinkingContent;
|
|
248
|
+
textContent = result.textContent;
|
|
249
|
+
thinkingSignature = result.thinkingSignature;
|
|
250
|
+
if (result.chunk) {
|
|
251
|
+
yield result.chunk;
|
|
252
|
+
}
|
|
253
|
+
if (result.isDone) {
|
|
236
254
|
// Поток завершен
|
|
237
255
|
if (options?.onComplete) {
|
|
238
256
|
options.onComplete(textContent);
|
|
239
257
|
}
|
|
240
|
-
yield {
|
|
241
|
-
text: '',
|
|
242
|
-
isComplete: true,
|
|
243
|
-
thinkingContent: thinkingContent.length > 0 ? thinkingContent : undefined,
|
|
244
|
-
thinkingSignature: thinkingSignature.length > 0 ? thinkingSignature : undefined
|
|
245
|
-
};
|
|
246
258
|
return;
|
|
247
259
|
}
|
|
248
|
-
try {
|
|
249
|
-
const parsedData = JSON.parse(data);
|
|
250
|
-
// Обрабатываем различные типы событий
|
|
251
|
-
if (parsedData.type === 'thinking_start' || parsedData.type === 'content_block_start' && parsedData.content_block?.type === 'thinking') {
|
|
252
|
-
isInThinkingBlock = true;
|
|
253
|
-
// Отправляем начало блока thinking
|
|
254
|
-
if (options?.onToken) {
|
|
255
|
-
options.onToken('[THINKING_START]');
|
|
256
|
-
}
|
|
257
|
-
yield {
|
|
258
|
-
text: '[THINKING_START]',
|
|
259
|
-
isComplete: false,
|
|
260
|
-
isThinking: true
|
|
261
|
-
};
|
|
262
|
-
}
|
|
263
|
-
else if (parsedData.type === 'thinking_end' || parsedData.type === 'content_block_stop' && isInThinkingBlock) {
|
|
264
|
-
isInThinkingBlock = false;
|
|
265
|
-
// Отправляем конец блока thinking
|
|
266
|
-
if (options?.onToken) {
|
|
267
|
-
options.onToken('[THINKING_END]');
|
|
268
|
-
}
|
|
269
|
-
yield {
|
|
270
|
-
text: '[THINKING_END]',
|
|
271
|
-
isComplete: false,
|
|
272
|
-
isThinking: true
|
|
273
|
-
};
|
|
274
|
-
}
|
|
275
|
-
else if (parsedData.type === 'content_block_delta' || parsedData.type === 'thinking_delta') {
|
|
276
|
-
const text = parsedData.delta?.text || '';
|
|
277
|
-
if (isInThinkingBlock || parsedData.type === 'thinking_delta') {
|
|
278
|
-
// Добавляем текст к блоку размышлений
|
|
279
|
-
thinkingContent += text;
|
|
280
|
-
if (options?.onToken) {
|
|
281
|
-
options.onToken(text);
|
|
282
|
-
}
|
|
283
|
-
yield {
|
|
284
|
-
text,
|
|
285
|
-
isComplete: false,
|
|
286
|
-
isThinking: true
|
|
287
|
-
};
|
|
288
|
-
}
|
|
289
|
-
else {
|
|
290
|
-
// Добавляем текст к основному содержимому
|
|
291
|
-
textContent += text;
|
|
292
|
-
if (options?.onToken) {
|
|
293
|
-
options.onToken(text);
|
|
294
|
-
}
|
|
295
|
-
yield {
|
|
296
|
-
text,
|
|
297
|
-
isComplete: false,
|
|
298
|
-
isThinking: false
|
|
299
|
-
};
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
catch (e) {
|
|
304
|
-
console.error('Ошибка при парсинге данных:', e);
|
|
305
|
-
}
|
|
306
260
|
}
|
|
307
261
|
}
|
|
308
262
|
// Финальный чанк, если поток завершился без [DONE]
|
|
@@ -317,10 +271,11 @@ class ChatApi {
|
|
|
317
271
|
};
|
|
318
272
|
}
|
|
319
273
|
catch (error) {
|
|
274
|
+
const errorObj = (0, stream_utils_1.handleStreamError)(error);
|
|
320
275
|
if (options?.onError) {
|
|
321
|
-
options.onError(
|
|
276
|
+
options.onError(errorObj);
|
|
322
277
|
}
|
|
323
|
-
throw
|
|
278
|
+
throw errorObj;
|
|
324
279
|
}
|
|
325
280
|
}
|
|
326
281
|
/**
|
|
@@ -346,7 +301,7 @@ class ChatApi {
|
|
|
346
301
|
* Отправляет сообщение в чат в потоковом режиме с поддержкой thinking через WebSocket
|
|
347
302
|
* @param {ChatMessage[]} messages Массив сообщений для отправки
|
|
348
303
|
* @param {ChatStreamOptions} [options] Дополнительные параметры
|
|
349
|
-
* @param {
|
|
304
|
+
* @param {EventHandler} [onEvent] Обработчик событий WebSocket
|
|
350
305
|
* @returns {Promise<ThinkingStreamResponse>} Информация о потоковом запросе
|
|
351
306
|
*/
|
|
352
307
|
async streamChatWithThinking(messages, options = {}, onEvent) {
|
|
@@ -354,83 +309,80 @@ class ChatApi {
|
|
|
354
309
|
throw new Error('Необходимо предоставить хотя бы одно сообщение');
|
|
355
310
|
}
|
|
356
311
|
try {
|
|
357
|
-
// 1. Создаем
|
|
358
|
-
const
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
const connectResponse = await this.connectWebSocket();
|
|
366
|
-
socketId = connectResponse.socketId;
|
|
367
|
-
// Если есть обработчик событий, подключаемся к WebSocket и настраиваем форвардинг событий
|
|
368
|
-
if (onEvent && typeof window !== 'undefined') {
|
|
312
|
+
// 1. Создаем параметры для запроса
|
|
313
|
+
const socketId = `socket_${Date.now()}_${(0, websocket_helpers_1.generateId)(10)}`;
|
|
314
|
+
// Создаем sessionId для отслеживания контекста между запросами
|
|
315
|
+
const sessionId = options.sessionId || `thinking-${Date.now()}`;
|
|
316
|
+
let socket = null;
|
|
317
|
+
// 2. Подключаемся к WebSocket и ждем успешного подключения
|
|
318
|
+
if (onEvent) {
|
|
319
|
+
await new Promise((resolve, reject) => {
|
|
369
320
|
try {
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
const { io } = await Promise.resolve().then(() => __importStar(require('socket.io-client')));
|
|
373
|
-
const socket = io(`${connectResponse.protocol}://${new URL(connectResponse.url).host}${connectResponse.namespace}`, {
|
|
374
|
-
transports: ['websocket', 'polling'],
|
|
321
|
+
const socketOptions = {
|
|
322
|
+
transports: ['websocket'],
|
|
375
323
|
reconnection: true,
|
|
376
|
-
reconnectionAttempts:
|
|
324
|
+
reconnectionAttempts: 3,
|
|
377
325
|
reconnectionDelay: 1000,
|
|
326
|
+
timeout: 10000,
|
|
378
327
|
query: {
|
|
379
|
-
socketId
|
|
328
|
+
socketId: socketId,
|
|
329
|
+
token: options.authToken || 'test-token'
|
|
380
330
|
}
|
|
331
|
+
};
|
|
332
|
+
// Динамически импортируем socket.io-client
|
|
333
|
+
Promise.resolve().then(() => __importStar(require('socket.io-client'))).then((socketIoModule) => {
|
|
334
|
+
const io = socketIoModule.default || socketIoModule.io;
|
|
335
|
+
if (!io) {
|
|
336
|
+
reject(new Error('Не удалось импортировать socket.io-client'));
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
// Создаем соединение с сервером WebSocket
|
|
340
|
+
const serverUrl = this.httpClient.getBaseURL?.() || 'http://localhost:3000';
|
|
341
|
+
socket = io(`${serverUrl}/reasoning`, socketOptions);
|
|
342
|
+
// Устанавливаем обработчики событий
|
|
343
|
+
(0, websocket_helpers_1.setupSocketEventHandlers)(socket, socketId, sessionId, onEvent);
|
|
344
|
+
// Разрешаем промис, продолжаем выполнение
|
|
345
|
+
resolve();
|
|
346
|
+
// Обработчик таймаута соединения
|
|
347
|
+
setTimeout(() => {
|
|
348
|
+
if (socket && !socket.connected) {
|
|
349
|
+
reject(new Error('WebSocket connection timeout'));
|
|
350
|
+
}
|
|
351
|
+
}, 10000);
|
|
352
|
+
}).catch(error => {
|
|
353
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
354
|
+
reject(new Error(`Ошибка импорта socket.io-client: ${errorMessage}`));
|
|
381
355
|
});
|
|
382
|
-
// Настраиваем обработчики событий
|
|
383
|
-
socket.on('connect', () => {
|
|
384
|
-
onEvent('connect', { status: 'connected', socketId });
|
|
385
|
-
});
|
|
386
|
-
socket.on('disconnect', () => {
|
|
387
|
-
onEvent('disconnect', { status: 'disconnected', socketId });
|
|
388
|
-
});
|
|
389
|
-
socket.on('error', (error) => {
|
|
390
|
-
onEvent('error', { error, socketId });
|
|
391
|
-
});
|
|
392
|
-
// Настраиваем обработчики для всех типов событий из документации Anthropic
|
|
393
|
-
const eventTypes = [
|
|
394
|
-
'message_start', 'content_block_start', 'thinking_start',
|
|
395
|
-
'text_delta', 'thinking_delta', 'signature_delta', 'input_json_delta',
|
|
396
|
-
'content_block_stop', 'message_delta', 'message_stop',
|
|
397
|
-
'ping', 'tool_use_start', 'unknown_event', 'retry', 'done'
|
|
398
|
-
];
|
|
399
|
-
eventTypes.forEach(eventType => {
|
|
400
|
-
socket.on(eventType, (data) => {
|
|
401
|
-
onEvent(eventType, data);
|
|
402
|
-
});
|
|
403
|
-
});
|
|
404
|
-
// Сохраняем сокет, чтобы не собирался мусор
|
|
405
|
-
this._socket = socket;
|
|
406
356
|
}
|
|
407
|
-
catch (
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
// Данные все равно будут получены через HTTP ответ
|
|
357
|
+
catch (error) {
|
|
358
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
359
|
+
reject(new Error(`Ошибка WebSocket: ${errorMessage}`));
|
|
411
360
|
}
|
|
412
|
-
}
|
|
361
|
+
});
|
|
413
362
|
}
|
|
414
|
-
//
|
|
363
|
+
// 3. Отправляем HTTP запрос для инициации потока
|
|
415
364
|
return this.httpClient.post('/api/v1/chat/stream-chat', {
|
|
416
365
|
model: options.model || 'claude-3-7-sonnet-20240229',
|
|
417
366
|
messages,
|
|
418
367
|
temperature: options.temperature,
|
|
419
368
|
maxTokens: options.maxTokens,
|
|
420
369
|
socketId: socketId,
|
|
370
|
+
sessionId: sessionId, // Добавляем sessionId для кэширования блоков мышления
|
|
421
371
|
thinking: true,
|
|
422
372
|
region: options.region
|
|
423
373
|
}, {
|
|
424
|
-
'X-Socket-ID': socketId
|
|
374
|
+
'X-Socket-ID': socketId,
|
|
375
|
+
'X-Session-ID': sessionId // Добавляем ID сессии в заголовки
|
|
425
376
|
});
|
|
426
377
|
}
|
|
427
378
|
catch (error) {
|
|
379
|
+
const errorObj = (0, stream_utils_1.handleStreamError)(error);
|
|
428
380
|
if (options.onError) {
|
|
429
|
-
options.onError(
|
|
381
|
+
options.onError(errorObj);
|
|
430
382
|
}
|
|
431
|
-
throw
|
|
383
|
+
throw errorObj;
|
|
432
384
|
}
|
|
433
385
|
}
|
|
434
386
|
}
|
|
435
387
|
exports.ChatApi = ChatApi;
|
|
436
|
-
//# sourceMappingURL=
|
|
388
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/api/chat-api/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../../src/api/chat-api/interfaces.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../../src/api/chat-api/models.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.processStreamChunk = processStreamChunk;
|
|
4
|
+
exports.handleStreamError = handleStreamError;
|
|
5
|
+
/**
|
|
6
|
+
* Обрабатывает чанк данных из потока SSE
|
|
7
|
+
*/
|
|
8
|
+
function processStreamChunk(line, isInThinkingBlock, thinkingContent, textContent, thinkingSignature, onToken) {
|
|
9
|
+
// Проверяем формат строки
|
|
10
|
+
if (!line.startsWith('data:')) {
|
|
11
|
+
return {
|
|
12
|
+
isInThinkingBlock,
|
|
13
|
+
thinkingContent,
|
|
14
|
+
textContent,
|
|
15
|
+
thinkingSignature,
|
|
16
|
+
isDone: false
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
const data = line.slice(5).trim();
|
|
20
|
+
// Проверяем завершение потока
|
|
21
|
+
if (data === '[DONE]') {
|
|
22
|
+
if (onToken) {
|
|
23
|
+
onToken('');
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
isInThinkingBlock,
|
|
27
|
+
thinkingContent,
|
|
28
|
+
textContent,
|
|
29
|
+
thinkingSignature,
|
|
30
|
+
chunk: {
|
|
31
|
+
text: '',
|
|
32
|
+
isComplete: true,
|
|
33
|
+
thinkingContent: thinkingContent.length > 0 ? thinkingContent : undefined,
|
|
34
|
+
thinkingSignature: thinkingSignature.length > 0 ? thinkingSignature : undefined
|
|
35
|
+
},
|
|
36
|
+
isDone: true
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
const parsedData = JSON.parse(data);
|
|
41
|
+
// Обрабатываем типы событий по актуальному API Anthropic
|
|
42
|
+
if (parsedData.type === 'content_block_start' && parsedData.content_block?.type === 'thinking') {
|
|
43
|
+
const newIsInThinkingBlock = true;
|
|
44
|
+
if (onToken) {
|
|
45
|
+
onToken('[THINKING_START]');
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
isInThinkingBlock: newIsInThinkingBlock,
|
|
49
|
+
thinkingContent,
|
|
50
|
+
textContent,
|
|
51
|
+
thinkingSignature,
|
|
52
|
+
chunk: {
|
|
53
|
+
text: '[THINKING_START]',
|
|
54
|
+
isComplete: false,
|
|
55
|
+
isThinking: true
|
|
56
|
+
},
|
|
57
|
+
isDone: false
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
else if (parsedData.type === 'content_block_stop' && isInThinkingBlock) {
|
|
61
|
+
const newIsInThinkingBlock = false;
|
|
62
|
+
if (onToken) {
|
|
63
|
+
onToken('[THINKING_END]');
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
isInThinkingBlock: newIsInThinkingBlock,
|
|
67
|
+
thinkingContent,
|
|
68
|
+
textContent,
|
|
69
|
+
thinkingSignature,
|
|
70
|
+
chunk: {
|
|
71
|
+
text: '[THINKING_END]',
|
|
72
|
+
isComplete: false,
|
|
73
|
+
isThinking: true
|
|
74
|
+
},
|
|
75
|
+
isDone: false
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
else if (parsedData.type === 'content_block_delta') {
|
|
79
|
+
// Получаем тип дельты из данных события
|
|
80
|
+
const deltaType = parsedData.delta?.type;
|
|
81
|
+
// Обрабатываем дельту в зависимости от типа
|
|
82
|
+
if (deltaType === 'text_delta') {
|
|
83
|
+
const text = parsedData.delta?.text || '';
|
|
84
|
+
const newTextContent = textContent + text;
|
|
85
|
+
if (onToken) {
|
|
86
|
+
onToken(text);
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
isInThinkingBlock,
|
|
90
|
+
thinkingContent,
|
|
91
|
+
textContent: newTextContent,
|
|
92
|
+
thinkingSignature,
|
|
93
|
+
chunk: {
|
|
94
|
+
text,
|
|
95
|
+
isComplete: false,
|
|
96
|
+
isThinking: false
|
|
97
|
+
},
|
|
98
|
+
isDone: false
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
else if (deltaType === 'thinking_delta') {
|
|
102
|
+
const thinking = parsedData.delta?.thinking || '';
|
|
103
|
+
const newThinkingContent = thinkingContent + thinking;
|
|
104
|
+
if (onToken) {
|
|
105
|
+
onToken(thinking);
|
|
106
|
+
}
|
|
107
|
+
return {
|
|
108
|
+
isInThinkingBlock: true,
|
|
109
|
+
thinkingContent: newThinkingContent,
|
|
110
|
+
textContent,
|
|
111
|
+
thinkingSignature,
|
|
112
|
+
chunk: {
|
|
113
|
+
text: thinking,
|
|
114
|
+
isComplete: false,
|
|
115
|
+
isThinking: true
|
|
116
|
+
},
|
|
117
|
+
isDone: false
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
else if (deltaType === 'signature_delta') {
|
|
121
|
+
const signature = parsedData.delta?.signature || '';
|
|
122
|
+
return {
|
|
123
|
+
isInThinkingBlock,
|
|
124
|
+
thinkingContent,
|
|
125
|
+
textContent,
|
|
126
|
+
thinkingSignature: signature,
|
|
127
|
+
isDone: false
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
else if (deltaType === 'input_json_delta') {
|
|
131
|
+
const jsonData = parsedData.delta?.input_json || '';
|
|
132
|
+
if (onToken) {
|
|
133
|
+
onToken(jsonData);
|
|
134
|
+
}
|
|
135
|
+
// Убираем свойство isToolUse, добавляем метаданные
|
|
136
|
+
return {
|
|
137
|
+
isInThinkingBlock,
|
|
138
|
+
thinkingContent,
|
|
139
|
+
textContent,
|
|
140
|
+
thinkingSignature,
|
|
141
|
+
chunk: {
|
|
142
|
+
text: jsonData,
|
|
143
|
+
isComplete: false,
|
|
144
|
+
isThinking: false
|
|
145
|
+
},
|
|
146
|
+
isDone: false
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// Возвращаем без изменений, если тип события не обрабатывается
|
|
151
|
+
return {
|
|
152
|
+
isInThinkingBlock,
|
|
153
|
+
thinkingContent,
|
|
154
|
+
textContent,
|
|
155
|
+
thinkingSignature,
|
|
156
|
+
isDone: false
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
catch (e) {
|
|
160
|
+
console.error('Ошибка при парсинге данных:', e);
|
|
161
|
+
return {
|
|
162
|
+
isInThinkingBlock,
|
|
163
|
+
thinkingContent,
|
|
164
|
+
textContent,
|
|
165
|
+
thinkingSignature,
|
|
166
|
+
isDone: false
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Обрабатывает ошибку из потока
|
|
172
|
+
*/
|
|
173
|
+
function handleStreamError(error) {
|
|
174
|
+
// Проверяем наличие ошибки географических ограничений
|
|
175
|
+
const errorObj = error;
|
|
176
|
+
const isGeoRestriction = (errorObj.status === 403 || errorObj.code === 403) &&
|
|
177
|
+
errorObj.message &&
|
|
178
|
+
(errorObj.message.includes('ограничен в вашем регионе') ||
|
|
179
|
+
errorObj.message.includes('Request not allowed') ||
|
|
180
|
+
errorObj.message.includes('forbidden'));
|
|
181
|
+
if (isGeoRestriction) {
|
|
182
|
+
console.error('\n==============================================');
|
|
183
|
+
console.error('⚠️ ОШИБКА ГЕОГРАФИЧЕСКОГО ОГРАНИЧЕНИЯ API ANTHROPIC');
|
|
184
|
+
console.error('⚠️ Для работы с API Anthropic требуется VPN или прокси');
|
|
185
|
+
console.error('⚠️ Anthropic API доступен только из определенных регионов');
|
|
186
|
+
console.error('==============================================');
|
|
187
|
+
// Обогащаем объект ошибки информацией о географических ограничениях
|
|
188
|
+
errorObj.type = 'geo_restriction';
|
|
189
|
+
}
|
|
190
|
+
return errorObj;
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=stream-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-utils.js","sourceRoot":"","sources":["../../../../src/api/chat-api/stream-utils.ts"],"names":[],"mappings":"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"}
|