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/docs/WEBSOCKET.md CHANGED
@@ -1,131 +1,83 @@
1
1
  # Работа с WebSocket соединениями
2
2
 
3
- В этом разделе описаны возможности SDK для работы с WebSocket соединениями, методы управления сессиями рассуждений, диагностика соединений и дополнительные возможности для обеспечения стабильной работы.
3
+ В этом разделе описаны основные методы для работы с WebSocket соединениями.
4
4
 
5
- ## Содержание
6
-
7
- - [Основы работы с WebSocket](#основы-работы-с-websocket)
8
- - [Высокоуровневый API (версия 1.7.2)](#высокоуровневый-api-версия-172)
9
- - [Потоковая передача мышления](#потоковая-передача-мышления)
10
- - [Управление сессиями рассуждений](#управление-сессиями-рассуждений)
11
- - [Диагностика соединений](#диагностика-соединений)
12
- - [Механизм переподключения](#механизм-переподключения)
13
- - [Сохранение и восстановление сессий](#сохранение-и-восстановление-сессий)
14
- - [Проверка здоровья соединений](#проверка-здоровья-соединений)
15
- - [Работа с ping/pong](#работа-с-pingpong)
16
- - [Примеры использования](#примеры-использования)
17
- - [Справочник всех событий WebSocket](#справочник-всех-событий-websocket)
18
-
19
- ## Основы работы с WebSocket
20
-
21
- SDK предоставляет низкоуровневый WebSocket клиент (`CodeSolverWebSocketClient`), который используется для связи с различными пространствами имен сервера:
5
+ ## Получение WebSocket клиента
22
6
 
23
7
  ```javascript
24
8
  const { CodeSolverSDK } = require('solver-sdk');
25
9
 
26
10
  const sdk = new CodeSolverSDK({
27
11
  baseURL: 'https://api.example.com',
28
- apiKey: 'your-api-key'
12
+ apiKey: 'your-api-key',
13
+ websocket: {
14
+ reconnect: true,
15
+ reconnectAttempts: 5,
16
+ reconnectDelay: 3000,
17
+ rejectUnauthorized: true // false для самоподписанных сертификатов
18
+ }
29
19
  });
30
20
 
31
21
  // Получение WebSocket клиента
32
22
  const wsClient = sdk.getWebSocketClient();
33
23
 
34
- // Подключение к пространству имен рассуждений
35
- await wsClient.connectToReasoning('reasoning-id');
36
-
37
- // Проверка состояния подключения
38
- const isConnected = wsClient.isConnectedToReasoning();
39
- console.log('Подключено к рассуждениям:', isConnected);
40
-
41
- // Подписка на события
42
- wsClient.on('thinking_delta', (data) => {
43
- console.log('Получен фрагмент мышления:', data.text);
44
- });
45
-
46
- // Отключение
47
- wsClient.disconnect(WebSocketNamespace.REASONING);
48
- ```
49
-
50
- ## Высокоуровневый API (версия 1.7.2)
51
-
52
- Начиная с версии 1.7.2, SDK предоставляет высокоуровневый API для работы с WebSocket, интегрированный непосредственно в основные классы API:
24
+ // Подключение к namespace рассуждений
25
+ await wsClient.connectToReasoning();
53
26
 
54
- ### Работа с чатом и рассуждениями
55
-
56
- ```javascript
57
- // Подключение WebSocket для чата
58
- await sdk.chat.connectWebSocket();
27
+ // Подключение к namespace индексации
28
+ await wsClient.connectToIndexing();
59
29
 
60
- // Подписка на события
61
- sdk.chat.on('message_start', (data) => {
62
- console.log('Начало сообщения:', data);
63
- });
30
+ // Проверка статуса подключения
31
+ const isConnected = wsClient.isConnected(WebSocketNamespace.REASONING);
64
32
 
65
- sdk.chat.on('thinking_delta', (data) => {
66
- console.log('Фрагмент мышления:', data.text);
67
- });
33
+ // Отключение от определенного namespace
34
+ await wsClient.disconnect(WebSocketNamespace.REASONING);
68
35
 
69
- // Отключение
70
- await sdk.chat.disconnectWebSocket();
36
+ // Отключение от всех namespace
37
+ await wsClient.disconnectAll();
71
38
  ```
72
39
 
73
- ### Работа с зависимостями
40
+ ## Мониторинг индексации проектов
74
41
 
75
42
  ```javascript
76
- // Подключение к пространству имен зависимостей
77
- await sdk.dependencies.connectWebSocket(projectId);
78
-
79
- // Подписка на события зависимостей
80
- sdk.dependencies.on('dependency_update', (data) => {
81
- console.log('Обновление зависимостей:', data);
82
- });
83
-
84
- // Отключение
85
- await sdk.dependencies.disconnectWebSocket();
86
- ```
87
-
88
- ### Работа с проектами и индексацией
89
-
90
- ```javascript
91
- // Подключение к пространству имен проектов
43
+ // Подключение к WebSocket для проектов
92
44
  await sdk.projects.connectWebSocket();
93
45
 
94
- // Подписка на события индексации
46
+ // Отслеживание прогресса индексации
95
47
  sdk.projects.on('indexing_progress', (data) => {
96
- console.log('Прогресс индексации:', data.progress);
48
+ console.log(`Прогресс индексации: ${data.progress}%`);
49
+ console.log(`Обработано файлов: ${data.processedFiles} из ${data.totalFiles}`);
97
50
  });
98
51
 
99
- // Отключение
100
- await sdk.projects.disconnectWebSocket();
101
- ```
52
+ // Завершение индексации
53
+ sdk.projects.on('indexing_complete', (data) => {
54
+ console.log('Индексация завершена!', data.success ? 'Успешно' : 'С ошибками');
55
+
56
+ // Отключение после завершения
57
+ sdk.projects.disconnectWebSocket();
58
+ });
102
59
 
103
- ## Потоковая передача мышления
60
+ // Остановка индексации
61
+ await sdk.projects.stopIndexing(projectId);
62
+ ```
104
63
 
105
- В версии 1.7.2 добавлена полная поддержка потоковой передачи мышления через метод `streamChatWithThinking`:
64
+ ## Потоковый чат с мышлением AI
106
65
 
107
66
  ```javascript
108
- // Обработчик событий
67
+ // Обработчик событий для потокового получения ответа и мышления
109
68
  const handleEvent = (eventType, data) => {
110
- switch(eventType) {
111
- case 'thinking_delta':
112
- console.log('Мышление:', data.text);
113
- break;
114
- case 'text_delta':
115
- console.log('Ответ:', data.text);
116
- break;
117
- case 'message_start':
118
- console.log('Начало сообщения');
119
- break;
120
- case 'message_stop':
121
- console.log('Завершение ответа');
122
- break;
69
+ if (eventType === 'thinking_delta' && data.thinking) {
70
+ console.log('Мышление:', data.thinking);
71
+ } else if (eventType === 'text_delta' && data.text) {
72
+ process.stdout.write(data.text); // Вывод текста без переноса строки
73
+ } else if (eventType === 'message_stop') {
74
+ console.log('\nОтвет завершен');
123
75
  }
124
76
  };
125
77
 
126
- // Отправка запроса с потоковым мышлением
78
+ // Отправка запроса
127
79
  const messages = [
128
- { role: 'user', content: 'Как работает квантовый компьютер?' }
80
+ { role: 'user', content: 'Расскажи о JavaScript' }
129
81
  ];
130
82
 
131
83
  const options = {
@@ -135,374 +87,213 @@ const options = {
135
87
  };
136
88
 
137
89
  const response = await sdk.chat.streamChatWithThinking(
138
- messages,
90
+ messages,
139
91
  options,
140
92
  handleEvent
141
93
  );
142
- ```
143
-
144
- ### Поддерживаемые события мышления
145
-
146
- SDK поддерживает следующие ключевые события:
147
94
 
148
- | Событие | Описание | Данные |
149
- |---------|----------|--------|
150
- | `message_start` | Начало сообщения | `{ model: string, type: string }` |
151
- | `content_block_start` | Начало блока контента | `{ index: number, type: string }` |
152
- | `thinking_delta` | Фрагмент мышления | `{ text: string, index: number }` |
153
- | `text_delta` | Фрагмент ответа | `{ text: string, index: number }` |
154
- | `content_block_stop` | Завершение блока контента | `{ index: number, type: string }` |
155
- | `message_stop` | Завершение сообщения | `{ type: string }` |
156
-
157
- ## Управление сессиями рассуждений
158
-
159
- SDK версии 1.7.0+ предоставляет расширенные возможности для управления сессиями рассуждений:
95
+ console.log(`Socket ID: ${response.socketId}`);
96
+ ```
160
97
 
161
- ### Установка активной сессии рассуждения
98
+ ## Работа с рассуждениями через WebSocket
162
99
 
163
100
  ```javascript
164
- // Простая установка активного ID рассуждения
165
- wsClient.setActiveReasoningId('reasoning-id');
166
-
167
- // Расширенный вариант с дополнительными возможностями
168
- await wsClient.setActiveReasoningIdAsync(
169
- 'reasoning-id', // ID рассуждения (можно передать null для создания нового)
170
- true, // waitForJoin: ждать результата присоединения
171
- true // createIfNotExists: создать новое, если не существует
172
- );
173
- ```
101
+ // Создание рассуждения
102
+ const reasoning = await sdk.reasoning.createReasoning({
103
+ projectId: 'project-id',
104
+ query: 'Объясни этот проект'
105
+ });
174
106
 
175
- ### Создание нового рассуждения
107
+ // Подключение к WebSocket для рассуждений
108
+ await sdk.reasoning.connectWebSocket(reasoning.id);
176
109
 
177
- ```javascript
178
- // Создание нового рассуждения и получение его ID
179
- const newReasoningId = await wsClient.createNewReasoning();
180
- console.log('Создано новое рассуждение:', newReasoningId);
181
- ```
110
+ // Подписка на события
111
+ sdk.reasoning.on('thinking', (data) => {
112
+ console.log('Мышление:', data.content);
113
+ });
182
114
 
183
- ### Проверка существования рассуждения
115
+ sdk.reasoning.on('complete', (data) => {
116
+ console.log('Результат:', data.content);
117
+ // Отключение после завершения
118
+ sdk.reasoning.disconnectWebSocket();
119
+ });
184
120
 
185
- ```javascript
186
- // Проверка существования рассуждения на сервере
187
- const exists = await wsClient.checkReasoningExists('reasoning-id');
188
- if (exists) {
189
- console.log('Рассуждение существует');
190
- } else {
191
- console.log('Рассуждение не найдено');
192
- }
121
+ // Запуск рассуждения
122
+ await sdk.reasoning.startReasoning(reasoning.id);
193
123
  ```
194
124
 
195
- ### Получение статуса рассуждения
125
+ ## Настройка параметров WebSocket
196
126
 
197
127
  ```javascript
198
- // Получение детальной информации о сессии рассуждения
199
- const status = await wsClient.getReasoningStatus('reasoning-id');
200
- console.log('Статус:', status.exists, status.isActive);
201
- console.log('Метаданные:', status.metadata);
128
+ // Настройка параметров WebSocket при создании SDK
129
+ const sdk = new CodeSolverSDK({
130
+ baseURL: 'https://api.example.com',
131
+ apiKey: 'your-api-key',
132
+ websocket: {
133
+ reconnect: true, // Автоматическое переподключение
134
+ reconnectAttempts: 5, // Максимальное количество попыток
135
+ reconnectDelay: 3000, // Задержка между попытками (мс)
136
+ rejectUnauthorized: true, // Проверка SSL-сертификатов
137
+ reconnectStrategy: 'exponential', // Стратегия задержки между попытками
138
+ enableAutoPing: true, // Автоматический ping/pong
139
+ pingInterval: 25000, // Интервал ping в мс
140
+ enableSessionPersistence: true // Сохранение сессии
141
+ }
142
+ });
202
143
  ```
203
144
 
204
- ### Присоединение к сессии рассуждения
145
+ ## Обработка ошибок в WebSocket
205
146
 
206
147
  ```javascript
207
- // Явное присоединение к существующей сессии
208
- const joined = await wsClient.joinReasoning(
209
- 'reasoning-id',
210
- true // setActive: установить как активное рассуждение
211
- );
212
-
213
- if (joined) {
214
- console.log('Успешно присоединились к рассуждению');
215
- } else {
216
- console.log('Не удалось присоединиться к рассуждению');
148
+ try {
149
+ await sdk.projects.connectWebSocket();
150
+
151
+ // Подписка на события ошибок
152
+ sdk.projects.on('error', (error) => {
153
+ console.error('Ошибка WebSocket:', error.message);
154
+ if (error.type === 'connection_error') {
155
+ console.error('Проблема с подключением');
156
+ } else if (error.type === 'authentication_error') {
157
+ console.error('Ошибка аутентификации');
158
+ }
159
+ });
160
+ } catch (error) {
161
+ console.error('Ошибка при подключении:', error.message);
217
162
  }
218
163
  ```
219
164
 
220
- ## Диагностика соединений
165
+ ## Модули с поддержкой WebSocket
221
166
 
222
- SDK предоставляет методы для диагностики состояния соединений и получения подробной информации о них:
167
+ ### Чат и рассуждения
223
168
 
224
169
  ```javascript
225
- // Диагностика конкретного соединения
226
- const diagnostics = wsClient.diagnoseConnection(WebSocketNamespace.REASONING);
227
- console.log('Диагностика соединения:', diagnostics);
228
-
229
- // Диагностика всех активных соединений
230
- const allDiagnostics = wsClient.diagnoseAllConnections();
231
- console.log('Все соединения:', allDiagnostics);
232
- ```
233
-
234
- Результат диагностики содержит следующую информацию:
235
-
236
- ```typescript
237
- interface ConnectionDiagnostics {
238
- namespace: WebSocketNamespace; // Пространство имен
239
- isConnected: boolean; // Активно ли соединение
240
- socketId: string | null; // ID сокета
241
- lastActivity: number; // Время последней активности
242
- rtt: { // Round Trip Time (задержка)
243
- current: number; // Текущая задержка
244
- min: number; // Минимальная задержка
245
- max: number; // Максимальная задержка
246
- avg: number; // Средняя задержка
247
- };
248
- pingSent: number; // Отправлено ping-сообщений
249
- pongReceived: number; // Получено pong-ответов
250
- missedPongs: number; // Пропущено pong-ответов
251
- timeoutCount: number; // Количество таймаутов
252
- reconnectAttempts: number; // Количество попыток переподключения
253
- lastConnectTime: number; // Время последнего подключения
254
- sessionRecovery: { // Информация о восстановлении сессии
255
- hasSessionToken: boolean; // Наличие токена сессии
256
- tokenLength: number; // Длина токена сессии
257
- wasRecovered: boolean; // Было ли восстановлено из сессии
258
- };
259
- }
260
- ```
261
-
262
- ## Механизм переподключения
170
+ // Подключение WebSocket для чата
171
+ await sdk.chat.connectWebSocket();
263
172
 
264
- SDK реализует интеллектуальный механизм переподключения с экспоненциальной задержкой и случайным фактором (jitter) для предотвращения штормов переподключений:
173
+ // Подписка на события
174
+ sdk.chat.on('message_start', (data) => {
175
+ console.log('Начало сообщения:', data);
176
+ });
265
177
 
266
- ```javascript
267
- // Настройка параметров переподключения при создании SDK
268
- const sdk = new CodeSolverSDK({
269
- baseURL: 'https://api.example.com',
270
- apiKey: 'your-api-key',
271
- websocket: {
272
- reconnect: true, // Включить автоматическое переподключение
273
- reconnectStrategy: 'exponential', // 'linear' или 'exponential'
274
- retryDelay: 1000, // Базовая задержка в миллисекундах
275
- maxRetryDelay: 30000, // Максимальная задержка
276
- reconnectAttempts: 5 // Максимальное количество попыток
178
+ sdk.chat.on('content_block_delta', (data) => {
179
+ if (data.delta?.type === 'thinking_delta') {
180
+ console.log('Фрагмент мышления:', data.delta.thinking);
277
181
  }
278
182
  });
279
183
 
280
- // Принудительное переподключение к пространству имен
281
- await wsClient.reconnectNamespace(
282
- WebSocketNamespace.REASONING,
283
- true // immediate: переподключиться немедленно, без задержки
284
- );
184
+ // Отключение
185
+ await sdk.chat.disconnectWebSocket();
285
186
  ```
286
187
 
287
- ## Сохранение и восстановление сессий
288
-
289
- SDK поддерживает механизм сохранения и восстановления токенов сессий для непрерывной работы при переподключениях:
188
+ ### Зависимости
290
189
 
291
190
  ```javascript
292
- // Явное сохранение токена сессии
293
- wsClient.saveSessionToken(WebSocketNamespace.REASONING, 'session-token');
294
-
295
- // Получение сохраненного токена
296
- const token = wsClient.getSessionToken(WebSocketNamespace.REASONING);
297
-
298
- // Очистка токена сессии
299
- wsClient.clearSessionToken(WebSocketNamespace.REASONING);
191
+ // Подключение к пространству имен зависимостей
192
+ await sdk.dependencies.connectWebSocket(projectId);
300
193
 
301
- // Включение/отключение сохранения сессий при создании SDK
302
- const sdk = new CodeSolverSDK({
303
- baseURL: 'https://api.example.com',
304
- apiKey: 'your-api-key',
305
- websocket: {
306
- enableSessionPersistence: true // Включить сохранение токенов сессий
307
- }
194
+ // Подписка на события зависимостей
195
+ sdk.dependencies.on('dependency_update', (data) => {
196
+ console.log('Обновление зависимостей:', data);
308
197
  });
309
- ```
310
198
 
311
- ## Проверка здоровья соединений
199
+ // Отключение
200
+ await sdk.dependencies.disconnectWebSocket();
201
+ ```
312
202
 
313
- SDK предоставляет механизм регулярной проверки здоровья соединений и автоматического переподключения при обнаружении проблем:
203
+ ### Проекты и индексация
314
204
 
315
205
  ```javascript
316
- // Настройка проверки здоровья соединений
317
- wsClient.setupConnectionHealthCheck(
318
- 30000 // Интервал проверки в миллисекундах
319
- );
320
-
321
- // Отключение проверки здоровья
322
- if (wsClient.healthCheckTimer) {
323
- clearInterval(wsClient.healthCheckTimer);
324
- wsClient.healthCheckTimer = null;
325
- }
326
- ```
327
-
328
- ## Работа с ping/pong
206
+ // Подключение к пространству имен проектов
207
+ await sdk.projects.connectWebSocket();
329
208
 
330
- Для поддержания активных соединений и измерения времени отклика SDK использует механизм ping/pong:
209
+ // Подписка на события индексации
210
+ sdk.projects.on('indexing_progress', (data) => {
211
+ console.log('Прогресс индексации:', data.progress);
212
+ });
331
213
 
332
- ```javascript
333
- // Включение автоматического ping/pong
334
- wsClient.enablePingPong(
335
- 15000, // Интервал между ping-сообщениями (мс)
336
- 3 // Порог таймаута (количество пропущенных pong)
337
- );
214
+ // Отключение
215
+ await sdk.projects.disconnectWebSocket();
216
+ ```
338
217
 
339
- // Отключение механизма ping/pong
340
- wsClient.disablePingPong();
218
+ ## Поддерживаемые события
341
219
 
342
- // Получение статистики ping/pong
343
- const stats = wsClient.getPingStats(WebSocketNamespace.REASONING);
344
- console.log('Статистика ping/pong:', stats);
220
+ Основные события, на которые можно подписаться:
345
221
 
346
- // Подписка на события таймаута соединения
347
- wsClient.onPingPongEvent('connection_timeout', (data) => {
348
- console.log('Таймаут соединения:', data);
349
- });
350
- ```
222
+ | Событие | Описание | Примечание |
223
+ |---------|----------|------------|
224
+ | `message_start` | Начало сообщения | { id, model, type } |
225
+ | `content_block_start` | Начало блока контента | { content_block: { type }, index } |
226
+ | `content_block_delta` | Дельта блока контента | См. документацию для типов дельт |
227
+ | `content_block_stop` | Конец блока контента | { content_block: { type }, index } |
228
+ | `message_stop` | Конец сообщения | { id, type, stop_reason } |
229
+ | `error` | Ошибка | { message, code, ... } |
351
230
 
352
- ## Примеры использования
231
+ ## Потоковая передача мышления
353
232
 
354
- ### Работа с потоковой передачей мышления
233
+ Самый простой способ получать мышление — использовать метод `streamChatWithThinking`:
355
234
 
356
235
  ```javascript
357
- const { CodeSolverSDK } = require('solver-sdk');
358
-
359
- async function streamingThinking() {
360
- const sdk = new CodeSolverSDK({
361
- baseURL: 'https://api.example.com',
362
- apiKey: 'ваш-ключ-api',
363
- websocket: {
364
- reconnect: true,
365
- pingInterval: 30000
366
- }
367
- });
368
-
369
- // Подключаем WebSocket
370
- await sdk.chat.connectWebSocket();
371
-
372
- // Создаем буферы для накопления контента
373
- let thinkingBuffer = '';
374
- let responseBuffer = '';
375
-
376
- // Настраиваем обработчик событий
377
- const handleEvent = (eventType, data) => {
378
- switch(eventType) {
379
- case 'thinking_delta':
380
- thinkingBuffer += data.text || '';
381
- // Обновляем UI с мышлением
382
- updateThinkingUI(thinkingBuffer);
383
- break;
384
-
385
- case 'text_delta':
386
- responseBuffer += data.text || '';
387
- // Обновляем UI с ответом
388
- updateResponseUI(responseBuffer);
389
- break;
390
-
391
- case 'message_stop':
392
- console.log('Обработка завершена');
393
- break;
394
- }
395
- };
396
-
397
- // Отправляем запрос
398
- const messages = [
399
- { role: 'user', content: 'Объясни принцип работы квантового компьютера' }
400
- ];
401
-
402
- try {
403
- const response = await sdk.chat.streamChatWithThinking(
404
- messages,
405
- {
406
- model: 'claude-3-7-sonnet-20240229',
407
- thinking: true,
408
- temperature: 0.7
409
- },
410
- handleEvent
411
- );
412
-
413
- console.log('Запрос отправлен, ID сокета:', response.socketId);
414
-
415
- // После завершения можно отключиться
416
- setTimeout(() => {
417
- sdk.chat.disconnectWebSocket();
418
- console.log('Соединение закрыто');
419
- }, 1000);
420
-
421
- return {
422
- thinking: thinkingBuffer,
423
- response: responseBuffer
424
- };
425
- } catch (error) {
426
- console.error('Ошибка при отправке запроса:', error);
427
- sdk.chat.disconnectWebSocket();
428
- throw error;
236
+ // Обработчик событий
237
+ const handleEvent = (eventType, data) => {
238
+ if (eventType === 'content_block_delta' && data.delta?.type === 'thinking_delta') {
239
+ console.log('Мышление:', data.delta.thinking);
240
+ } else if (eventType === 'content_block_delta' && data.delta?.type === 'text_delta') {
241
+ console.log('Ответ:', data.delta.text);
242
+ } else if (eventType === 'message_stop') {
243
+ console.log('Завершение ответа');
429
244
  }
430
- }
245
+ };
431
246
 
432
- // Функции для обновления UI
433
- function updateThinkingUI(text) {
434
- console.log('Обновление блока мышления');
435
- // document.getElementById('thinking-container').textContent = text;
436
- }
247
+ // Отправка запроса с потоковым мышлением
248
+ const messages = [
249
+ { role: 'user', content: 'Объясни квантовую механику' }
250
+ ];
437
251
 
438
- function updateResponseUI(text) {
439
- console.log('Обновление блока ответа');
440
- // document.getElementById('response-container').textContent = text;
441
- }
252
+ const options = {
253
+ model: 'claude-3-7-sonnet-20240229',
254
+ thinking: true,
255
+ temperature: 0.7
256
+ };
442
257
 
443
- // Запуск функции
444
- streamingThinking().catch(console.error);
258
+ const response = await sdk.chat.streamChatWithThinking(
259
+ messages,
260
+ options,
261
+ handleEvent
262
+ );
445
263
  ```
446
264
 
447
- ### Работа с региональным переключением
265
+ ## Обработка ошибок
448
266
 
449
267
  ```javascript
450
- const { CodeSolverSDK } = require('solver-sdk');
451
-
452
- async function chatWithRegionalFailover() {
453
- const sdk = new CodeSolverSDK({
454
- baseURL: 'https://api.example.com',
455
- apiKey: 'ваш-ключ-api',
456
- providers: {
457
- anthropic: {
458
- region: 'us-east-1' // Базовый регион
459
- }
460
- }
461
- });
462
-
463
- // Подключаем WebSocket
464
- await sdk.chat.connectWebSocket();
465
-
466
- // Настраиваем обработчик для отображения региона и ошибок
467
- sdk.chat.on('region_switch', (data) => {
468
- console.log(`Переключение на регион: ${data.region}`);
469
- });
470
-
471
- sdk.chat.on('error', (data) => {
472
- console.error('Ошибка:', data);
473
- });
474
-
475
- // Отправляем запрос с автоматическим переключением регионов при ошибках
476
- try {
477
- const response = await sdk.chat.chatWithRegionFailover(
478
- [{ role: 'user', content: 'Расскажи о квантовой физике' }],
479
- {
480
- model: 'claude-3-7-sonnet-20240229',
481
- thinking: true,
482
- // Порядок перебора регионов при ошибках
483
- regionPreference: ['us-east-1', 'eu-west-1', 'ap-southeast-2']
484
- }
485
- );
486
-
487
- console.log('Ответ получен из региона:', response.region);
488
- console.log('Ответ:', response.choices[0].message.content);
489
-
490
- return response;
491
- } catch (error) {
492
- console.error('Не удалось получить ответ ни из одного региона:', error);
493
- throw error;
494
- } finally {
495
- await sdk.chat.disconnectWebSocket();
268
+ try {
269
+ await sdk.chat.streamChatWithThinking(
270
+ messages,
271
+ options,
272
+ handleEvent
273
+ );
274
+ } catch (error) {
275
+ if (error.code === 'CONNECTION_ERROR') {
276
+ console.error('Ошибка подключения:', error.message);
277
+ } else {
278
+ console.error('Произошла ошибка:', error.message);
496
279
  }
497
280
  }
498
-
499
- chatWithRegionalFailover().catch(console.error);
500
281
  ```
501
282
 
502
- ## Справочник всех событий WebSocket
503
-
504
- Полный список всех поддерживаемых WebSocket событий, их описание, формат данных и примеры использования доступны в отдельном документе:
283
+ ## Настройка WebSocket
505
284
 
506
- [Справочник WebSocket событий SDK](./WEBSOCKET_EVENTS.md)
285
+ ```javascript
286
+ // Настройка параметров WebSocket при создании SDK
287
+ const sdk = new CodeSolverSDK({
288
+ baseURL: 'https://api.example.com',
289
+ apiKey: 'your-api-key',
290
+ websocket: {
291
+ reconnect: true, // Автоматическое переподключение
292
+ reconnectAttempts: 5, // Максимальное количество попыток
293
+ rejectUnauthorized: false // Для самоподписанных сертификатов
294
+ }
295
+ });
296
+ ```
297
+ ## Дополнительная информация
507
298
 
508
- В этом справочнике содержится подробная информация обо всех константах событий, их строковых значениях, форматах данных и рекомендациях по использованию в различных сценариях.
299
+ Для детального описания всех возможностей WebSocket, смотрите [руководство по мышлению](./features/THINKING.md) и примеры в директории [examples/websocket](../examples/websocket).