solver-sdk 1.7.4 → 1.7.6
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 +25 -49
- package/dist/cjs/api/{chat-api.js → chat-api/index.js} +32 -192
- 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 +211 -0
- package/dist/cjs/api/projects-api.js.map +1 -1
- package/dist/cjs/code-solver-sdk.js +10 -15
- 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.map +1 -1
- package/dist/esm/api/{chat-api.js → chat-api/index.js} +29 -192
- 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 +211 -0
- package/dist/esm/api/projects-api.js.map +1 -1
- package/dist/esm/code-solver-sdk.js +8 -13
- 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.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} +8 -79
- 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 +76 -0
- 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/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 +28 -34
- package/dist/types/utils/code-solver-websocket-client.d.ts.map +1 -1
- package/docs/API_REFERENCE.md +432 -0
- package/docs/INTEGRATION_EXAMPLES.md +342 -0
- package/docs/README.md +78 -53
- package/docs/WEBSOCKET.md +191 -400
- package/docs/advanced/PING_PONG.md +212 -0
- package/docs/features/THINKING.md +158 -0
- package/docs/indexing/INDEXING.md +434 -210
- package/package.json +2 -2
- 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
- package/docs/REGIONS.md +0 -140
- package/docs/WEBSOCKET_EVENTS.md +0 -183
- package/docs/thinking/THINKING_ARCHITECTURE.md +0 -221
- package/docs/thinking/streaming-thinking-guide.md +0 -164
- package/docs/thinking/thinking-mode.md +0 -366
|
@@ -1,10 +1,15 @@
|
|
|
1
|
+
import { generateId, setupSocketEventHandlers } from './websocket-helpers';
|
|
2
|
+
import { handleStreamError, processStreamChunk } from './stream-utils';
|
|
3
|
+
// Экспортируем все типы и интерфейсы для внешнего использования
|
|
4
|
+
export * from './models';
|
|
5
|
+
export * from './interfaces';
|
|
1
6
|
/**
|
|
2
7
|
* API для работы с чатом
|
|
3
8
|
*/
|
|
4
9
|
export class ChatApi {
|
|
5
10
|
/**
|
|
6
11
|
* Создает новый экземпляр API для работы с чатом
|
|
7
|
-
* @param {
|
|
12
|
+
* @param {IHttpClient} httpClient HTTP клиент
|
|
8
13
|
*/
|
|
9
14
|
constructor(httpClient) {
|
|
10
15
|
this.httpClient = httpClient;
|
|
@@ -198,78 +203,21 @@ export class ChatApi {
|
|
|
198
203
|
for (const line of lines) {
|
|
199
204
|
if (!line.startsWith('data:'))
|
|
200
205
|
continue;
|
|
201
|
-
const
|
|
202
|
-
|
|
206
|
+
const result = processStreamChunk(line, isInThinkingBlock, thinkingContent, textContent, thinkingSignature, options?.onToken);
|
|
207
|
+
isInThinkingBlock = result.isInThinkingBlock;
|
|
208
|
+
thinkingContent = result.thinkingContent;
|
|
209
|
+
textContent = result.textContent;
|
|
210
|
+
thinkingSignature = result.thinkingSignature;
|
|
211
|
+
if (result.chunk) {
|
|
212
|
+
yield result.chunk;
|
|
213
|
+
}
|
|
214
|
+
if (result.isDone) {
|
|
203
215
|
// Поток завершен
|
|
204
216
|
if (options?.onComplete) {
|
|
205
217
|
options.onComplete(textContent);
|
|
206
218
|
}
|
|
207
|
-
yield {
|
|
208
|
-
text: '',
|
|
209
|
-
isComplete: true,
|
|
210
|
-
thinkingContent: thinkingContent.length > 0 ? thinkingContent : undefined,
|
|
211
|
-
thinkingSignature: thinkingSignature.length > 0 ? thinkingSignature : undefined
|
|
212
|
-
};
|
|
213
219
|
return;
|
|
214
220
|
}
|
|
215
|
-
try {
|
|
216
|
-
const parsedData = JSON.parse(data);
|
|
217
|
-
// Обрабатываем различные типы событий
|
|
218
|
-
if (parsedData.type === 'thinking_start' || parsedData.type === 'content_block_start' && parsedData.content_block?.type === 'thinking') {
|
|
219
|
-
isInThinkingBlock = true;
|
|
220
|
-
// Отправляем начало блока thinking
|
|
221
|
-
if (options?.onToken) {
|
|
222
|
-
options.onToken('[THINKING_START]');
|
|
223
|
-
}
|
|
224
|
-
yield {
|
|
225
|
-
text: '[THINKING_START]',
|
|
226
|
-
isComplete: false,
|
|
227
|
-
isThinking: true
|
|
228
|
-
};
|
|
229
|
-
}
|
|
230
|
-
else if (parsedData.type === 'thinking_end' || parsedData.type === 'content_block_stop' && isInThinkingBlock) {
|
|
231
|
-
isInThinkingBlock = false;
|
|
232
|
-
// Отправляем конец блока thinking
|
|
233
|
-
if (options?.onToken) {
|
|
234
|
-
options.onToken('[THINKING_END]');
|
|
235
|
-
}
|
|
236
|
-
yield {
|
|
237
|
-
text: '[THINKING_END]',
|
|
238
|
-
isComplete: false,
|
|
239
|
-
isThinking: true
|
|
240
|
-
};
|
|
241
|
-
}
|
|
242
|
-
else if (parsedData.type === 'content_block_delta' || parsedData.type === 'thinking_delta') {
|
|
243
|
-
const text = parsedData.delta?.text || '';
|
|
244
|
-
if (isInThinkingBlock || parsedData.type === 'thinking_delta') {
|
|
245
|
-
// Добавляем текст к блоку размышлений
|
|
246
|
-
thinkingContent += text;
|
|
247
|
-
if (options?.onToken) {
|
|
248
|
-
options.onToken(text);
|
|
249
|
-
}
|
|
250
|
-
yield {
|
|
251
|
-
text,
|
|
252
|
-
isComplete: false,
|
|
253
|
-
isThinking: true
|
|
254
|
-
};
|
|
255
|
-
}
|
|
256
|
-
else {
|
|
257
|
-
// Добавляем текст к основному содержимому
|
|
258
|
-
textContent += text;
|
|
259
|
-
if (options?.onToken) {
|
|
260
|
-
options.onToken(text);
|
|
261
|
-
}
|
|
262
|
-
yield {
|
|
263
|
-
text,
|
|
264
|
-
isComplete: false,
|
|
265
|
-
isThinking: false
|
|
266
|
-
};
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
catch (e) {
|
|
271
|
-
console.error('Ошибка при парсинге данных:', e);
|
|
272
|
-
}
|
|
273
221
|
}
|
|
274
222
|
}
|
|
275
223
|
// Финальный чанк, если поток завершился без [DONE]
|
|
@@ -284,22 +232,7 @@ export class ChatApi {
|
|
|
284
232
|
};
|
|
285
233
|
}
|
|
286
234
|
catch (error) {
|
|
287
|
-
|
|
288
|
-
const errorObj = error;
|
|
289
|
-
const isGeoRestriction = (errorObj.status === 403 || errorObj.code === 403) &&
|
|
290
|
-
errorObj.message &&
|
|
291
|
-
(errorObj.message.includes('ограничен в вашем регионе') ||
|
|
292
|
-
errorObj.message.includes('Request not allowed') ||
|
|
293
|
-
errorObj.message.includes('forbidden'));
|
|
294
|
-
if (isGeoRestriction) {
|
|
295
|
-
console.error('\n==============================================');
|
|
296
|
-
console.error('⚠️ ОШИБКА ГЕОГРАФИЧЕСКОГО ОГРАНИЧЕНИЯ API ANTHROPIC');
|
|
297
|
-
console.error('⚠️ Для работы с API Anthropic требуется VPN или прокси');
|
|
298
|
-
console.error('⚠️ Anthropic API доступен только из определенных регионов');
|
|
299
|
-
console.error('==============================================');
|
|
300
|
-
// Обогащаем объект ошибки информацией о географических ограничениях
|
|
301
|
-
errorObj.type = 'geo_restriction';
|
|
302
|
-
}
|
|
235
|
+
const errorObj = handleStreamError(error);
|
|
303
236
|
if (options?.onError) {
|
|
304
237
|
options.onError(errorObj);
|
|
305
238
|
}
|
|
@@ -329,7 +262,7 @@ export class ChatApi {
|
|
|
329
262
|
* Отправляет сообщение в чат в потоковом режиме с поддержкой thinking через WebSocket
|
|
330
263
|
* @param {ChatMessage[]} messages Массив сообщений для отправки
|
|
331
264
|
* @param {ChatStreamOptions} [options] Дополнительные параметры
|
|
332
|
-
* @param {
|
|
265
|
+
* @param {EventHandler} [onEvent] Обработчик событий WebSocket
|
|
333
266
|
* @returns {Promise<ThinkingStreamResponse>} Информация о потоковом запросе
|
|
334
267
|
*/
|
|
335
268
|
async streamChatWithThinking(messages, options = {}, onEvent) {
|
|
@@ -338,7 +271,9 @@ export class ChatApi {
|
|
|
338
271
|
}
|
|
339
272
|
try {
|
|
340
273
|
// 1. Создаем параметры для запроса
|
|
341
|
-
const socketId = `socket_${Date.now()}_${
|
|
274
|
+
const socketId = `socket_${Date.now()}_${generateId(10)}`;
|
|
275
|
+
// Создаем sessionId для отслеживания контекста между запросами
|
|
276
|
+
const sessionId = options.sessionId || `thinking-${Date.now()}`;
|
|
342
277
|
let socket = null;
|
|
343
278
|
// 2. Подключаемся к WebSocket и ждем успешного подключения
|
|
344
279
|
if (onEvent) {
|
|
@@ -363,84 +298,12 @@ export class ChatApi {
|
|
|
363
298
|
return;
|
|
364
299
|
}
|
|
365
300
|
// Создаем соединение с сервером WebSocket
|
|
366
|
-
const serverUrl = this.httpClient.getBaseURL() || 'http://localhost:3000';
|
|
301
|
+
const serverUrl = this.httpClient.getBaseURL?.() || 'http://localhost:3000';
|
|
367
302
|
socket = io(`${serverUrl}/reasoning`, socketOptions);
|
|
368
303
|
// Устанавливаем обработчики событий
|
|
369
|
-
socket
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
socket.emit('authenticate', {
|
|
373
|
-
socketId: socketId,
|
|
374
|
-
token: options.authToken || 'test-token'
|
|
375
|
-
});
|
|
376
|
-
// Отправляем событие присоединения к комнате с ID
|
|
377
|
-
socket.emit('join_room', { roomId: socketId });
|
|
378
|
-
// Вызываем обработчик события connect
|
|
379
|
-
if (onEvent) {
|
|
380
|
-
onEvent('connect', { socketId });
|
|
381
|
-
}
|
|
382
|
-
// Разрешаем промис, продолжаем выполнение
|
|
383
|
-
resolve();
|
|
384
|
-
});
|
|
385
|
-
// Обработчик сообщений от сервера
|
|
386
|
-
socket.on('message', (data) => {
|
|
387
|
-
if (onEvent && data && data.type) {
|
|
388
|
-
onEvent(data.type, data.data || data);
|
|
389
|
-
}
|
|
390
|
-
});
|
|
391
|
-
// Обработчик ошибок
|
|
392
|
-
socket.on('error', (error) => {
|
|
393
|
-
console.error('[SDK] WebSocket error:', error);
|
|
394
|
-
// Проверяем наличие ошибки географических ограничений
|
|
395
|
-
const isGeoRestriction = (error.type === 'geo_restriction' || error.code === 403) &&
|
|
396
|
-
error.message &&
|
|
397
|
-
(error.message.includes('ограничен в вашем регионе') ||
|
|
398
|
-
error.message.includes('Request not allowed'));
|
|
399
|
-
if (isGeoRestriction) {
|
|
400
|
-
console.error('\n==============================================');
|
|
401
|
-
console.error('⚠️ ОШИБКА ГЕОГРАФИЧЕСКОГО ОГРАНИЧЕНИЯ API ANTHROPIC');
|
|
402
|
-
console.error('⚠️ Для работы с API Anthropic требуется VPN или прокси');
|
|
403
|
-
console.error('⚠️ Anthropic API доступен только из определенных регионов');
|
|
404
|
-
console.error('==============================================');
|
|
405
|
-
}
|
|
406
|
-
if (onEvent) {
|
|
407
|
-
onEvent('error', {
|
|
408
|
-
message: error.message || 'Unknown WebSocket error',
|
|
409
|
-
code: error.code,
|
|
410
|
-
type: isGeoRestriction ? 'geo_restriction' : (error.type || 'websocket_error')
|
|
411
|
-
});
|
|
412
|
-
}
|
|
413
|
-
});
|
|
414
|
-
// Обработчик отключения
|
|
415
|
-
socket.on('disconnect', (reason) => {
|
|
416
|
-
console.log(`[SDK] WebSocket отключен: ${reason}`);
|
|
417
|
-
if (onEvent) {
|
|
418
|
-
onEvent('disconnect', { reason });
|
|
419
|
-
}
|
|
420
|
-
});
|
|
421
|
-
// Обработчики для событий аутентификации
|
|
422
|
-
socket.on('authenticated', (data) => {
|
|
423
|
-
console.log('[SDK] Аутентификация успешна', data);
|
|
424
|
-
if (onEvent) {
|
|
425
|
-
onEvent('authenticated', data);
|
|
426
|
-
}
|
|
427
|
-
});
|
|
428
|
-
socket.on('authentication_error', (data) => {
|
|
429
|
-
console.error('[SDK] Ошибка аутентификации:', data);
|
|
430
|
-
if (onEvent) {
|
|
431
|
-
onEvent('error', { message: 'Ошибка аутентификации: ' + (data.message || 'Unknown error'), code: 'AUTH_ERROR' });
|
|
432
|
-
}
|
|
433
|
-
reject(new Error('Ошибка аутентификации: ' + (data.message || 'Unknown error')));
|
|
434
|
-
});
|
|
435
|
-
// Регистрируем обработчики для всех событий потока мышления
|
|
436
|
-
['message_start', 'content_block_start', 'thinking_start', 'thinking_delta',
|
|
437
|
-
'text_delta', 'content_block_stop', 'message_stop', 'done'].forEach(eventType => {
|
|
438
|
-
socket.on(eventType, (data) => {
|
|
439
|
-
if (onEvent) {
|
|
440
|
-
onEvent(eventType, data);
|
|
441
|
-
}
|
|
442
|
-
});
|
|
443
|
-
});
|
|
304
|
+
setupSocketEventHandlers(socket, socketId, sessionId, onEvent);
|
|
305
|
+
// Разрешаем промис, продолжаем выполнение
|
|
306
|
+
resolve();
|
|
444
307
|
// Обработчик таймаута соединения
|
|
445
308
|
setTimeout(() => {
|
|
446
309
|
if (socket && !socket.connected) {
|
|
@@ -465,47 +328,21 @@ export class ChatApi {
|
|
|
465
328
|
temperature: options.temperature,
|
|
466
329
|
maxTokens: options.maxTokens,
|
|
467
330
|
socketId: socketId,
|
|
331
|
+
sessionId: sessionId, // Добавляем sessionId для кэширования блоков мышления
|
|
468
332
|
thinking: true,
|
|
469
333
|
region: options.region
|
|
470
334
|
}, {
|
|
471
|
-
'X-Socket-ID': socketId
|
|
335
|
+
'X-Socket-ID': socketId,
|
|
336
|
+
'X-Session-ID': sessionId // Добавляем ID сессии в заголовки
|
|
472
337
|
});
|
|
473
338
|
}
|
|
474
339
|
catch (error) {
|
|
475
|
-
|
|
476
|
-
const errorObj = error;
|
|
477
|
-
const isGeoRestriction = (errorObj.status === 403 || errorObj.code === 403) &&
|
|
478
|
-
errorObj.message &&
|
|
479
|
-
(errorObj.message.includes('ограничен в вашем регионе') ||
|
|
480
|
-
errorObj.message.includes('Request not allowed') ||
|
|
481
|
-
errorObj.message.includes('forbidden'));
|
|
482
|
-
if (isGeoRestriction) {
|
|
483
|
-
console.error('\n==============================================');
|
|
484
|
-
console.error('⚠️ ОШИБКА ГЕОГРАФИЧЕСКОГО ОГРАНИЧЕНИЯ API ANTHROPIC');
|
|
485
|
-
console.error('⚠️ Для работы с API Anthropic требуется VPN или прокси');
|
|
486
|
-
console.error('⚠️ Anthropic API доступен только из определенных регионов');
|
|
487
|
-
console.error('==============================================');
|
|
488
|
-
// Обогащаем объект ошибки информацией о географических ограничениях
|
|
489
|
-
errorObj.type = 'geo_restriction';
|
|
490
|
-
}
|
|
340
|
+
const errorObj = handleStreamError(error);
|
|
491
341
|
if (options.onError) {
|
|
492
342
|
options.onError(errorObj);
|
|
493
343
|
}
|
|
494
344
|
throw errorObj;
|
|
495
345
|
}
|
|
496
346
|
}
|
|
497
|
-
/**
|
|
498
|
-
* Генерирует случайный ID указанной длины
|
|
499
|
-
* @param {number} length Длина ID
|
|
500
|
-
* @returns {string} Сгенерированный ID
|
|
501
|
-
*/
|
|
502
|
-
generateId(length) {
|
|
503
|
-
const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
|
|
504
|
-
let result = '';
|
|
505
|
-
for (let i = 0; i < length; i++) {
|
|
506
|
-
result += chars.charAt(Math.floor(Math.random() * chars.length));
|
|
507
|
-
}
|
|
508
|
-
return result;
|
|
509
|
-
}
|
|
510
347
|
}
|
|
511
|
-
//# sourceMappingURL=
|
|
348
|
+
//# 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,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Обрабатывает чанк данных из потока SSE
|
|
3
|
+
*/
|
|
4
|
+
export function processStreamChunk(line, isInThinkingBlock, thinkingContent, textContent, thinkingSignature, onToken) {
|
|
5
|
+
// Проверяем формат строки
|
|
6
|
+
if (!line.startsWith('data:')) {
|
|
7
|
+
return {
|
|
8
|
+
isInThinkingBlock,
|
|
9
|
+
thinkingContent,
|
|
10
|
+
textContent,
|
|
11
|
+
thinkingSignature,
|
|
12
|
+
isDone: false
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
const data = line.slice(5).trim();
|
|
16
|
+
// Проверяем завершение потока
|
|
17
|
+
if (data === '[DONE]') {
|
|
18
|
+
if (onToken) {
|
|
19
|
+
onToken('');
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
isInThinkingBlock,
|
|
23
|
+
thinkingContent,
|
|
24
|
+
textContent,
|
|
25
|
+
thinkingSignature,
|
|
26
|
+
chunk: {
|
|
27
|
+
text: '',
|
|
28
|
+
isComplete: true,
|
|
29
|
+
thinkingContent: thinkingContent.length > 0 ? thinkingContent : undefined,
|
|
30
|
+
thinkingSignature: thinkingSignature.length > 0 ? thinkingSignature : undefined
|
|
31
|
+
},
|
|
32
|
+
isDone: true
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const parsedData = JSON.parse(data);
|
|
37
|
+
// Обрабатываем типы событий по актуальному API Anthropic
|
|
38
|
+
if (parsedData.type === 'content_block_start' && parsedData.content_block?.type === 'thinking') {
|
|
39
|
+
const newIsInThinkingBlock = true;
|
|
40
|
+
if (onToken) {
|
|
41
|
+
onToken('[THINKING_START]');
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
isInThinkingBlock: newIsInThinkingBlock,
|
|
45
|
+
thinkingContent,
|
|
46
|
+
textContent,
|
|
47
|
+
thinkingSignature,
|
|
48
|
+
chunk: {
|
|
49
|
+
text: '[THINKING_START]',
|
|
50
|
+
isComplete: false,
|
|
51
|
+
isThinking: true
|
|
52
|
+
},
|
|
53
|
+
isDone: false
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
else if (parsedData.type === 'content_block_stop' && isInThinkingBlock) {
|
|
57
|
+
const newIsInThinkingBlock = false;
|
|
58
|
+
if (onToken) {
|
|
59
|
+
onToken('[THINKING_END]');
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
isInThinkingBlock: newIsInThinkingBlock,
|
|
63
|
+
thinkingContent,
|
|
64
|
+
textContent,
|
|
65
|
+
thinkingSignature,
|
|
66
|
+
chunk: {
|
|
67
|
+
text: '[THINKING_END]',
|
|
68
|
+
isComplete: false,
|
|
69
|
+
isThinking: true
|
|
70
|
+
},
|
|
71
|
+
isDone: false
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
else if (parsedData.type === 'content_block_delta') {
|
|
75
|
+
// Получаем тип дельты из данных события
|
|
76
|
+
const deltaType = parsedData.delta?.type;
|
|
77
|
+
// Обрабатываем дельту в зависимости от типа
|
|
78
|
+
if (deltaType === 'text_delta') {
|
|
79
|
+
const text = parsedData.delta?.text || '';
|
|
80
|
+
const newTextContent = textContent + text;
|
|
81
|
+
if (onToken) {
|
|
82
|
+
onToken(text);
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
isInThinkingBlock,
|
|
86
|
+
thinkingContent,
|
|
87
|
+
textContent: newTextContent,
|
|
88
|
+
thinkingSignature,
|
|
89
|
+
chunk: {
|
|
90
|
+
text,
|
|
91
|
+
isComplete: false,
|
|
92
|
+
isThinking: false
|
|
93
|
+
},
|
|
94
|
+
isDone: false
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
else if (deltaType === 'thinking_delta') {
|
|
98
|
+
const thinking = parsedData.delta?.thinking || '';
|
|
99
|
+
const newThinkingContent = thinkingContent + thinking;
|
|
100
|
+
if (onToken) {
|
|
101
|
+
onToken(thinking);
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
isInThinkingBlock: true,
|
|
105
|
+
thinkingContent: newThinkingContent,
|
|
106
|
+
textContent,
|
|
107
|
+
thinkingSignature,
|
|
108
|
+
chunk: {
|
|
109
|
+
text: thinking,
|
|
110
|
+
isComplete: false,
|
|
111
|
+
isThinking: true
|
|
112
|
+
},
|
|
113
|
+
isDone: false
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
else if (deltaType === 'signature_delta') {
|
|
117
|
+
const signature = parsedData.delta?.signature || '';
|
|
118
|
+
return {
|
|
119
|
+
isInThinkingBlock,
|
|
120
|
+
thinkingContent,
|
|
121
|
+
textContent,
|
|
122
|
+
thinkingSignature: signature,
|
|
123
|
+
isDone: false
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
else if (deltaType === 'input_json_delta') {
|
|
127
|
+
const jsonData = parsedData.delta?.input_json || '';
|
|
128
|
+
if (onToken) {
|
|
129
|
+
onToken(jsonData);
|
|
130
|
+
}
|
|
131
|
+
// Убираем свойство isToolUse, добавляем метаданные
|
|
132
|
+
return {
|
|
133
|
+
isInThinkingBlock,
|
|
134
|
+
thinkingContent,
|
|
135
|
+
textContent,
|
|
136
|
+
thinkingSignature,
|
|
137
|
+
chunk: {
|
|
138
|
+
text: jsonData,
|
|
139
|
+
isComplete: false,
|
|
140
|
+
isThinking: false
|
|
141
|
+
},
|
|
142
|
+
isDone: false
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// Возвращаем без изменений, если тип события не обрабатывается
|
|
147
|
+
return {
|
|
148
|
+
isInThinkingBlock,
|
|
149
|
+
thinkingContent,
|
|
150
|
+
textContent,
|
|
151
|
+
thinkingSignature,
|
|
152
|
+
isDone: false
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
catch (e) {
|
|
156
|
+
console.error('Ошибка при парсинге данных:', e);
|
|
157
|
+
return {
|
|
158
|
+
isInThinkingBlock,
|
|
159
|
+
thinkingContent,
|
|
160
|
+
textContent,
|
|
161
|
+
thinkingSignature,
|
|
162
|
+
isDone: false
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Обрабатывает ошибку из потока
|
|
168
|
+
*/
|
|
169
|
+
export function handleStreamError(error) {
|
|
170
|
+
// Проверяем наличие ошибки географических ограничений
|
|
171
|
+
const errorObj = error;
|
|
172
|
+
const isGeoRestriction = (errorObj.status === 403 || errorObj.code === 403) &&
|
|
173
|
+
errorObj.message &&
|
|
174
|
+
(errorObj.message.includes('ограничен в вашем регионе') ||
|
|
175
|
+
errorObj.message.includes('Request not allowed') ||
|
|
176
|
+
errorObj.message.includes('forbidden'));
|
|
177
|
+
if (isGeoRestriction) {
|
|
178
|
+
console.error('\n==============================================');
|
|
179
|
+
console.error('⚠️ ОШИБКА ГЕОГРАФИЧЕСКОГО ОГРАНИЧЕНИЯ API ANTHROPIC');
|
|
180
|
+
console.error('⚠️ Для работы с API Anthropic требуется VPN или прокси');
|
|
181
|
+
console.error('⚠️ Anthropic API доступен только из определенных регионов');
|
|
182
|
+
console.error('==============================================');
|
|
183
|
+
// Обогащаем объект ошибки информацией о географических ограничениях
|
|
184
|
+
errorObj.type = 'geo_restriction';
|
|
185
|
+
}
|
|
186
|
+
return errorObj;
|
|
187
|
+
}
|
|
188
|
+
//# 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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"}
|