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.
Files changed (71) hide show
  1. package/README.md +25 -49
  2. package/dist/cjs/api/{chat-api.js → chat-api/index.js} +32 -192
  3. package/dist/cjs/api/chat-api/index.js.map +1 -0
  4. package/dist/cjs/api/chat-api/interfaces.js +3 -0
  5. package/dist/cjs/api/chat-api/interfaces.js.map +1 -0
  6. package/dist/cjs/api/chat-api/models.js +6 -0
  7. package/dist/cjs/api/chat-api/models.js.map +1 -0
  8. package/dist/cjs/api/chat-api/stream-utils.js +192 -0
  9. package/dist/cjs/api/chat-api/stream-utils.js.map +1 -0
  10. package/dist/cjs/api/chat-api/websocket-helpers.js +211 -0
  11. package/dist/cjs/api/chat-api/websocket-helpers.js.map +1 -0
  12. package/dist/cjs/api/projects-api.js +211 -0
  13. package/dist/cjs/api/projects-api.js.map +1 -1
  14. package/dist/cjs/code-solver-sdk.js +10 -15
  15. package/dist/cjs/code-solver-sdk.js.map +1 -1
  16. package/dist/cjs/constants/websocket-events.constants.js +77 -52
  17. package/dist/cjs/constants/websocket-events.constants.js.map +1 -1
  18. package/dist/cjs/utils/code-solver-websocket-client.js.map +1 -1
  19. package/dist/esm/api/{chat-api.js → chat-api/index.js} +29 -192
  20. package/dist/esm/api/chat-api/index.js.map +1 -0
  21. package/dist/esm/api/chat-api/interfaces.js +2 -0
  22. package/dist/esm/api/chat-api/interfaces.js.map +1 -0
  23. package/dist/esm/api/chat-api/models.js +5 -0
  24. package/dist/esm/api/chat-api/models.js.map +1 -0
  25. package/dist/esm/api/chat-api/stream-utils.js +188 -0
  26. package/dist/esm/api/chat-api/stream-utils.js.map +1 -0
  27. package/dist/esm/api/chat-api/websocket-helpers.js +205 -0
  28. package/dist/esm/api/chat-api/websocket-helpers.js.map +1 -0
  29. package/dist/esm/api/projects-api.js +211 -0
  30. package/dist/esm/api/projects-api.js.map +1 -1
  31. package/dist/esm/code-solver-sdk.js +8 -13
  32. package/dist/esm/code-solver-sdk.js.map +1 -1
  33. package/dist/esm/constants/websocket-events.constants.js +76 -51
  34. package/dist/esm/constants/websocket-events.constants.js.map +1 -1
  35. package/dist/esm/utils/code-solver-websocket-client.js.map +1 -1
  36. package/dist/types/api/chat-api/index.d.ts +81 -0
  37. package/dist/types/api/chat-api/index.d.ts.map +1 -0
  38. package/dist/types/api/chat-api/interfaces.d.ts +47 -0
  39. package/dist/types/api/chat-api/interfaces.d.ts.map +1 -0
  40. package/dist/types/api/{chat-api.d.ts → chat-api/models.d.ts} +8 -79
  41. package/dist/types/api/chat-api/models.d.ts.map +1 -0
  42. package/dist/types/api/chat-api/stream-utils.d.ts +31 -0
  43. package/dist/types/api/chat-api/stream-utils.d.ts.map +1 -0
  44. package/dist/types/api/chat-api/websocket-helpers.d.ts +40 -0
  45. package/dist/types/api/chat-api/websocket-helpers.d.ts.map +1 -0
  46. package/dist/types/api/projects-api.d.ts +76 -0
  47. package/dist/types/api/projects-api.d.ts.map +1 -1
  48. package/dist/types/code-solver-sdk.d.ts +1 -1
  49. package/dist/types/code-solver-sdk.d.ts.map +1 -1
  50. package/dist/types/constants/websocket-events.constants.d.ts +65 -36
  51. package/dist/types/constants/websocket-events.constants.d.ts.map +1 -1
  52. package/dist/types/types/index.d.ts +8 -0
  53. package/dist/types/types/index.d.ts.map +1 -1
  54. package/dist/types/utils/code-solver-websocket-client.d.ts +28 -34
  55. package/dist/types/utils/code-solver-websocket-client.d.ts.map +1 -1
  56. package/docs/API_REFERENCE.md +432 -0
  57. package/docs/INTEGRATION_EXAMPLES.md +342 -0
  58. package/docs/README.md +78 -53
  59. package/docs/WEBSOCKET.md +191 -400
  60. package/docs/advanced/PING_PONG.md +212 -0
  61. package/docs/features/THINKING.md +158 -0
  62. package/docs/indexing/INDEXING.md +434 -210
  63. package/package.json +2 -2
  64. package/dist/cjs/api/chat-api.js.map +0 -1
  65. package/dist/esm/api/chat-api.js.map +0 -1
  66. package/dist/types/api/chat-api.d.ts.map +0 -1
  67. package/docs/REGIONS.md +0 -140
  68. package/docs/WEBSOCKET_EVENTS.md +0 -183
  69. package/docs/thinking/THINKING_ARCHITECTURE.md +0 -221
  70. package/docs/thinking/streaming-thinking-guide.md +0 -164
  71. package/docs/thinking/thinking-mode.md +0 -366
package/README.md CHANGED
@@ -43,8 +43,8 @@ SDK для интеграции с Code Solver Backend API. Поддержива
43
43
  - Настраиваемый мониторинг здоровья соединения
44
44
  - **Потоковая передача мышления**:
45
45
  - Метод `streamChatWithThinking()` для потоковой передачи процесса мышления модели
46
- - Полная поддержка событий Anthropic API (`thinking_delta`, `text_delta` и др.)
47
- - Стандартизированный формат для всех типов событий
46
+ - Полная поддержка официального Anthropic API со всеми типами блоков контента
47
+ - Единый стандартизированный формат событий
48
48
  - **Работа с регионами**:
49
49
  - Поддержка региональных эндпоинтов Anthropic API
50
50
  - Автоматическое переключение между регионами при ошибках
@@ -150,7 +150,6 @@ example().catch(console.error);
150
150
  | `headers` | object | Пользовательские HTTP заголовки | Нет |
151
151
  | `httpsAgent` | object | Опции для HTTPS агента (Node.js) | Нет |
152
152
  | `mode` | string | Режим работы SDK ('browser', 'node', 'auto') | Нет |
153
- | `providers` | object | Настройки провайдеров API (Anthropic и др.) | Нет |
154
153
  | `websocket` | object | Настройки WebSocket (reconnect, timeout и др.) | Нет |
155
154
 
156
155
  ## Продвинутые функции
@@ -205,8 +204,12 @@ await wsClient.connectToReasoning(reasoning.id);
205
204
  wsClient.enablePingPong(30000, 3);
206
205
 
207
206
  // Обработка событий мышления
208
- wsClient.on('thinking_delta', (data) => {
209
- console.log('Фрагмент размышления:', data.text);
207
+ wsClient.on('content_block_delta', (data) => {
208
+ if (data.delta?.type === 'thinking_delta') {
209
+ console.log('Фрагмент размышления:', data.delta.thinking);
210
+ } else if (data.delta?.type === 'text_delta') {
211
+ console.log('Фрагмент ответа:', data.delta.text);
212
+ }
210
213
  });
211
214
 
212
215
  wsClient.on('message_stop', (data) => {
@@ -276,16 +279,18 @@ async function streamThinking() {
276
279
  // Обработчик событий WebSocket
277
280
  const handleEvent = (eventType, data) => {
278
281
  switch(eventType) {
279
- case 'thinking_start':
280
- console.log('Начало размышлений:');
281
- break;
282
-
283
- case 'thinking_delta':
284
- process.stdout.write(data.text); // Потоковый вывод размышлений
282
+ case 'content_block_start':
283
+ if (data.content_block && data.content_block.type === 'thinking') {
284
+ console.log('Начало размышлений:');
285
+ }
285
286
  break;
286
287
 
287
- case 'text_delta':
288
- process.stdout.write(data.text); // Потоковый вывод итогового текста
288
+ case 'content_block_delta':
289
+ if (data.delta && data.delta.type === 'thinking_delta') {
290
+ process.stdout.write(data.delta.thinking); // Потоковый вывод размышлений
291
+ } else if (data.delta && data.delta.type === 'text_delta') {
292
+ process.stdout.write(data.delta.text); // Потоковый вывод итогового текста
293
+ }
289
294
  break;
290
295
 
291
296
  case 'error':
@@ -325,41 +330,15 @@ streamThinking();
325
330
 
326
331
  - `message_start` - начало сообщения от модели
327
332
  - `content_block_start` - начало блока контента (текст или thinking)
328
- - `thinking_delta` - фрагмент размышления модели
329
- - `text_delta` - фрагмент итогового текста
333
+ - `content_block_delta` - дельта блока контента со следующими типами:
334
+ - `delta.type === 'thinking_delta'` - фрагмент размышления модели
335
+ - `delta.type === 'text_delta'` - фрагмент текстового ответа
336
+ - `delta.type === 'input_json_delta'` - фрагмент JSON для инструментов
337
+ - `delta.type === 'signature_delta'` - подпись блока мышления
330
338
  - `content_block_stop` - завершение блока контента
339
+ - `message_delta` - дельта сообщения
331
340
  - `message_stop` - завершение сообщения
332
341
 
333
- ### Работа с региональными эндпоинтами
334
-
335
- ```javascript
336
- // Настройка SDK с указанием предпочтительного региона
337
- const sdk = new CodeSolverSDK({
338
- baseURL: 'https://api.example.com',
339
- apiKey: 'your-api-key',
340
- providers: {
341
- anthropic: {
342
- region: 'eu-west-1' // Использовать европейский регион
343
- }
344
- }
345
- });
346
-
347
- // Запрос с автоматическим переключением между регионами при ошибках
348
- const response = await sdk.chat.chatWithRegionFailover([
349
- { role: 'user', content: 'Расскажи о квантовых компьютерах' }
350
- ], {
351
- model: 'claude-3-7-sonnet-20240229'
352
- });
353
-
354
- // Запрос с явным указанием региона
355
- const responseFromAsia = await sdk.chat.chat([
356
- { role: 'user', content: 'Расскажи о квантовых компьютерах' }
357
- ], {
358
- model: 'claude-3-7-sonnet-20240229',
359
- region: 'ap-southeast-2' // Явно указываем регион
360
- });
361
- ```
362
-
363
342
  ## Примеры
364
343
 
365
344
  В директории [`examples`](./examples) доступны примеры использования SDK:
@@ -373,9 +352,6 @@ npm run example:indexing
373
352
 
374
353
  # Работа с зависимостями
375
354
  npm run example:dependencies
376
-
377
- # Проверка доступности регионов
378
- npm run example:regions
379
355
  ```
380
356
 
381
357
  ## Совместимость
@@ -434,4 +410,4 @@ const sdk = new CodeSolverSDK({
434
410
 
435
411
  ## Лицензия
436
412
 
437
- [MIT](./LICENSE)
413
+ [MIT](./LICENSE)
@@ -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 {HttpClient} httpClient HTTP клиент
51
+ * @param {IHttpClient} httpClient HTTP клиент
44
52
  */
45
53
  constructor(httpClient) {
46
54
  this.httpClient = httpClient;
@@ -234,78 +242,21 @@ class ChatApi {
234
242
  for (const line of lines) {
235
243
  if (!line.startsWith('data:'))
236
244
  continue;
237
- const data = line.slice(5).trim();
238
- if (data === '[DONE]') {
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) {
239
254
  // Поток завершен
240
255
  if (options?.onComplete) {
241
256
  options.onComplete(textContent);
242
257
  }
243
- yield {
244
- text: '',
245
- isComplete: true,
246
- thinkingContent: thinkingContent.length > 0 ? thinkingContent : undefined,
247
- thinkingSignature: thinkingSignature.length > 0 ? thinkingSignature : undefined
248
- };
249
258
  return;
250
259
  }
251
- try {
252
- const parsedData = JSON.parse(data);
253
- // Обрабатываем различные типы событий
254
- if (parsedData.type === 'thinking_start' || parsedData.type === 'content_block_start' && parsedData.content_block?.type === 'thinking') {
255
- isInThinkingBlock = true;
256
- // Отправляем начало блока thinking
257
- if (options?.onToken) {
258
- options.onToken('[THINKING_START]');
259
- }
260
- yield {
261
- text: '[THINKING_START]',
262
- isComplete: false,
263
- isThinking: true
264
- };
265
- }
266
- else if (parsedData.type === 'thinking_end' || parsedData.type === 'content_block_stop' && isInThinkingBlock) {
267
- isInThinkingBlock = false;
268
- // Отправляем конец блока thinking
269
- if (options?.onToken) {
270
- options.onToken('[THINKING_END]');
271
- }
272
- yield {
273
- text: '[THINKING_END]',
274
- isComplete: false,
275
- isThinking: true
276
- };
277
- }
278
- else if (parsedData.type === 'content_block_delta' || parsedData.type === 'thinking_delta') {
279
- const text = parsedData.delta?.text || '';
280
- if (isInThinkingBlock || parsedData.type === 'thinking_delta') {
281
- // Добавляем текст к блоку размышлений
282
- thinkingContent += text;
283
- if (options?.onToken) {
284
- options.onToken(text);
285
- }
286
- yield {
287
- text,
288
- isComplete: false,
289
- isThinking: true
290
- };
291
- }
292
- else {
293
- // Добавляем текст к основному содержимому
294
- textContent += text;
295
- if (options?.onToken) {
296
- options.onToken(text);
297
- }
298
- yield {
299
- text,
300
- isComplete: false,
301
- isThinking: false
302
- };
303
- }
304
- }
305
- }
306
- catch (e) {
307
- console.error('Ошибка при парсинге данных:', e);
308
- }
309
260
  }
310
261
  }
311
262
  // Финальный чанк, если поток завершился без [DONE]
@@ -320,22 +271,7 @@ class ChatApi {
320
271
  };
321
272
  }
322
273
  catch (error) {
323
- // Проверяем наличие ошибки географических ограничений
324
- const errorObj = error;
325
- const isGeoRestriction = (errorObj.status === 403 || errorObj.code === 403) &&
326
- errorObj.message &&
327
- (errorObj.message.includes('ограничен в вашем регионе') ||
328
- errorObj.message.includes('Request not allowed') ||
329
- errorObj.message.includes('forbidden'));
330
- if (isGeoRestriction) {
331
- console.error('\n==============================================');
332
- console.error('⚠️ ОШИБКА ГЕОГРАФИЧЕСКОГО ОГРАНИЧЕНИЯ API ANTHROPIC');
333
- console.error('⚠️ Для работы с API Anthropic требуется VPN или прокси');
334
- console.error('⚠️ Anthropic API доступен только из определенных регионов');
335
- console.error('==============================================');
336
- // Обогащаем объект ошибки информацией о географических ограничениях
337
- errorObj.type = 'geo_restriction';
338
- }
274
+ const errorObj = (0, stream_utils_1.handleStreamError)(error);
339
275
  if (options?.onError) {
340
276
  options.onError(errorObj);
341
277
  }
@@ -365,7 +301,7 @@ class ChatApi {
365
301
  * Отправляет сообщение в чат в потоковом режиме с поддержкой thinking через WebSocket
366
302
  * @param {ChatMessage[]} messages Массив сообщений для отправки
367
303
  * @param {ChatStreamOptions} [options] Дополнительные параметры
368
- * @param {(eventType: string, data: any) => void} [onEvent] Обработчик событий WebSocket
304
+ * @param {EventHandler} [onEvent] Обработчик событий WebSocket
369
305
  * @returns {Promise<ThinkingStreamResponse>} Информация о потоковом запросе
370
306
  */
371
307
  async streamChatWithThinking(messages, options = {}, onEvent) {
@@ -374,7 +310,9 @@ class ChatApi {
374
310
  }
375
311
  try {
376
312
  // 1. Создаем параметры для запроса
377
- const socketId = `socket_${Date.now()}_${this.generateId(10)}`;
313
+ const socketId = `socket_${Date.now()}_${(0, websocket_helpers_1.generateId)(10)}`;
314
+ // Создаем sessionId для отслеживания контекста между запросами
315
+ const sessionId = options.sessionId || `thinking-${Date.now()}`;
378
316
  let socket = null;
379
317
  // 2. Подключаемся к WebSocket и ждем успешного подключения
380
318
  if (onEvent) {
@@ -399,84 +337,12 @@ class ChatApi {
399
337
  return;
400
338
  }
401
339
  // Создаем соединение с сервером WebSocket
402
- const serverUrl = this.httpClient.getBaseURL() || 'http://localhost:3000';
340
+ const serverUrl = this.httpClient.getBaseURL?.() || 'http://localhost:3000';
403
341
  socket = io(`${serverUrl}/reasoning`, socketOptions);
404
342
  // Устанавливаем обработчики событий
405
- socket.on('connect', () => {
406
- console.log(`[SDK] WebSocket подключен: ${socket.id}, задано socketId: ${socketId}`);
407
- // При подключении отправляем событие аутентификации
408
- socket.emit('authenticate', {
409
- socketId: socketId,
410
- token: options.authToken || 'test-token'
411
- });
412
- // Отправляем событие присоединения к комнате с ID
413
- socket.emit('join_room', { roomId: socketId });
414
- // Вызываем обработчик события connect
415
- if (onEvent) {
416
- onEvent('connect', { socketId });
417
- }
418
- // Разрешаем промис, продолжаем выполнение
419
- resolve();
420
- });
421
- // Обработчик сообщений от сервера
422
- socket.on('message', (data) => {
423
- if (onEvent && data && data.type) {
424
- onEvent(data.type, data.data || data);
425
- }
426
- });
427
- // Обработчик ошибок
428
- socket.on('error', (error) => {
429
- console.error('[SDK] WebSocket error:', error);
430
- // Проверяем наличие ошибки географических ограничений
431
- const isGeoRestriction = (error.type === 'geo_restriction' || error.code === 403) &&
432
- error.message &&
433
- (error.message.includes('ограничен в вашем регионе') ||
434
- error.message.includes('Request not allowed'));
435
- if (isGeoRestriction) {
436
- console.error('\n==============================================');
437
- console.error('⚠️ ОШИБКА ГЕОГРАФИЧЕСКОГО ОГРАНИЧЕНИЯ API ANTHROPIC');
438
- console.error('⚠️ Для работы с API Anthropic требуется VPN или прокси');
439
- console.error('⚠️ Anthropic API доступен только из определенных регионов');
440
- console.error('==============================================');
441
- }
442
- if (onEvent) {
443
- onEvent('error', {
444
- message: error.message || 'Unknown WebSocket error',
445
- code: error.code,
446
- type: isGeoRestriction ? 'geo_restriction' : (error.type || 'websocket_error')
447
- });
448
- }
449
- });
450
- // Обработчик отключения
451
- socket.on('disconnect', (reason) => {
452
- console.log(`[SDK] WebSocket отключен: ${reason}`);
453
- if (onEvent) {
454
- onEvent('disconnect', { reason });
455
- }
456
- });
457
- // Обработчики для событий аутентификации
458
- socket.on('authenticated', (data) => {
459
- console.log('[SDK] Аутентификация успешна', data);
460
- if (onEvent) {
461
- onEvent('authenticated', data);
462
- }
463
- });
464
- socket.on('authentication_error', (data) => {
465
- console.error('[SDK] Ошибка аутентификации:', data);
466
- if (onEvent) {
467
- onEvent('error', { message: 'Ошибка аутентификации: ' + (data.message || 'Unknown error'), code: 'AUTH_ERROR' });
468
- }
469
- reject(new Error('Ошибка аутентификации: ' + (data.message || 'Unknown error')));
470
- });
471
- // Регистрируем обработчики для всех событий потока мышления
472
- ['message_start', 'content_block_start', 'thinking_start', 'thinking_delta',
473
- 'text_delta', 'content_block_stop', 'message_stop', 'done'].forEach(eventType => {
474
- socket.on(eventType, (data) => {
475
- if (onEvent) {
476
- onEvent(eventType, data);
477
- }
478
- });
479
- });
343
+ (0, websocket_helpers_1.setupSocketEventHandlers)(socket, socketId, sessionId, onEvent);
344
+ // Разрешаем промис, продолжаем выполнение
345
+ resolve();
480
346
  // Обработчик таймаута соединения
481
347
  setTimeout(() => {
482
348
  if (socket && !socket.connected) {
@@ -501,48 +367,22 @@ class ChatApi {
501
367
  temperature: options.temperature,
502
368
  maxTokens: options.maxTokens,
503
369
  socketId: socketId,
370
+ sessionId: sessionId, // Добавляем sessionId для кэширования блоков мышления
504
371
  thinking: true,
505
372
  region: options.region
506
373
  }, {
507
- 'X-Socket-ID': socketId
374
+ 'X-Socket-ID': socketId,
375
+ 'X-Session-ID': sessionId // Добавляем ID сессии в заголовки
508
376
  });
509
377
  }
510
378
  catch (error) {
511
- // Проверяем наличие ошибки географических ограничений
512
- const errorObj = error;
513
- const isGeoRestriction = (errorObj.status === 403 || errorObj.code === 403) &&
514
- errorObj.message &&
515
- (errorObj.message.includes('ограничен в вашем регионе') ||
516
- errorObj.message.includes('Request not allowed') ||
517
- errorObj.message.includes('forbidden'));
518
- if (isGeoRestriction) {
519
- console.error('\n==============================================');
520
- console.error('⚠️ ОШИБКА ГЕОГРАФИЧЕСКОГО ОГРАНИЧЕНИЯ API ANTHROPIC');
521
- console.error('⚠️ Для работы с API Anthropic требуется VPN или прокси');
522
- console.error('⚠️ Anthropic API доступен только из определенных регионов');
523
- console.error('==============================================');
524
- // Обогащаем объект ошибки информацией о географических ограничениях
525
- errorObj.type = 'geo_restriction';
526
- }
379
+ const errorObj = (0, stream_utils_1.handleStreamError)(error);
527
380
  if (options.onError) {
528
381
  options.onError(errorObj);
529
382
  }
530
383
  throw errorObj;
531
384
  }
532
385
  }
533
- /**
534
- * Генерирует случайный ID указанной длины
535
- * @param {number} length Длина ID
536
- * @returns {string} Сгенерированный ID
537
- */
538
- generateId(length) {
539
- const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
540
- let result = '';
541
- for (let i = 0; i < length; i++) {
542
- result += chars.charAt(Math.floor(Math.random() * chars.length));
543
- }
544
- return result;
545
- }
546
386
  }
547
387
  exports.ChatApi = ChatApi;
548
- //# sourceMappingURL=chat-api.js.map
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,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../../src/api/chat-api/interfaces.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Модели данных для чат-API
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=models.js.map
@@ -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