solver-sdk 1.7.3 → 1.7.5

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 (63) hide show
  1. package/README.md +40 -49
  2. package/dist/cjs/api/{chat-api.js → chat-api/index.js} +37 -151
  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/code-solver-sdk.js +10 -15
  13. package/dist/cjs/code-solver-sdk.js.map +1 -1
  14. package/dist/cjs/constants/websocket-events.constants.js +77 -52
  15. package/dist/cjs/constants/websocket-events.constants.js.map +1 -1
  16. package/dist/cjs/utils/code-solver-websocket-client.js.map +1 -1
  17. package/dist/esm/api/{chat-api.js → chat-api/index.js} +34 -151
  18. package/dist/esm/api/chat-api/index.js.map +1 -0
  19. package/dist/esm/api/chat-api/interfaces.js +2 -0
  20. package/dist/esm/api/chat-api/interfaces.js.map +1 -0
  21. package/dist/esm/api/chat-api/models.js +5 -0
  22. package/dist/esm/api/chat-api/models.js.map +1 -0
  23. package/dist/esm/api/chat-api/stream-utils.js +188 -0
  24. package/dist/esm/api/chat-api/stream-utils.js.map +1 -0
  25. package/dist/esm/api/chat-api/websocket-helpers.js +205 -0
  26. package/dist/esm/api/chat-api/websocket-helpers.js.map +1 -0
  27. package/dist/esm/code-solver-sdk.js +8 -13
  28. package/dist/esm/code-solver-sdk.js.map +1 -1
  29. package/dist/esm/constants/websocket-events.constants.js +76 -51
  30. package/dist/esm/constants/websocket-events.constants.js.map +1 -1
  31. package/dist/esm/utils/code-solver-websocket-client.js.map +1 -1
  32. package/dist/types/api/chat-api/index.d.ts +81 -0
  33. package/dist/types/api/chat-api/index.d.ts.map +1 -0
  34. package/dist/types/api/chat-api/interfaces.d.ts +47 -0
  35. package/dist/types/api/chat-api/interfaces.d.ts.map +1 -0
  36. package/dist/types/api/{chat-api.d.ts → chat-api/models.d.ts} +10 -79
  37. package/dist/types/api/chat-api/models.d.ts.map +1 -0
  38. package/dist/types/api/chat-api/stream-utils.d.ts +31 -0
  39. package/dist/types/api/chat-api/stream-utils.d.ts.map +1 -0
  40. package/dist/types/api/chat-api/websocket-helpers.d.ts +40 -0
  41. package/dist/types/api/chat-api/websocket-helpers.d.ts.map +1 -0
  42. package/dist/types/code-solver-sdk.d.ts +1 -1
  43. package/dist/types/code-solver-sdk.d.ts.map +1 -1
  44. package/dist/types/constants/websocket-events.constants.d.ts +65 -36
  45. package/dist/types/constants/websocket-events.constants.d.ts.map +1 -1
  46. package/dist/types/utils/code-solver-websocket-client.d.ts +28 -34
  47. package/dist/types/utils/code-solver-websocket-client.d.ts.map +1 -1
  48. package/docs/API_REFERENCE.md +168 -0
  49. package/docs/AUTHENTICATION.md +179 -0
  50. package/docs/ERROR_HANDLING.md +240 -0
  51. package/docs/README.md +32 -56
  52. package/docs/WEBSOCKET.md +55 -394
  53. package/docs/advanced/PING_PONG.md +212 -0
  54. package/docs/features/THINKING.md +158 -0
  55. package/package.json +1 -1
  56. package/dist/cjs/api/chat-api.js.map +0 -1
  57. package/dist/esm/api/chat-api.js.map +0 -1
  58. package/dist/types/api/chat-api.d.ts.map +0 -1
  59. package/docs/REGIONS.md +0 -140
  60. package/docs/WEBSOCKET_EVENTS.md +0 -183
  61. package/docs/thinking/THINKING_ARCHITECTURE.md +0 -221
  62. package/docs/thinking/streaming-thinking-guide.md +0 -164
  63. package/docs/thinking/thinking-mode.md +0 -366
package/docs/README.md CHANGED
@@ -1,77 +1,53 @@
1
- # Документация Solver SDK
1
+ # Документация SDK
2
2
 
3
- Эта директория содержит подробную документацию по Solver SDK версии 1.7.2.
3
+ Добро пожаловать в документацию SDK для интеграции с Code Solver Backend API.
4
4
 
5
5
  ## Содержание
6
6
 
7
- ### Основная документация
7
+ ### Введение
8
+ - [Быстрый старт](../README.md) - основная информация по установке и использованию SDK
8
9
 
9
- - [Потоковая передача мышления (Thinking Architecture)](./THINKING_ARCHITECTURE.md) - Архитектура системы потоковой передачи мышления
10
- - [Руководство по потоковой передаче мышления](./streaming-thinking-guide.md) - Практическое руководство по использованию потоковой передачи мышления
11
- - [Работа с региональными эндпоинтами](./REGIONS.md) - Информация о работе с региональными эндпоинтами Anthropic API
12
- - [Расширенные возможности SDK](./ADVANCED.md) - Продвинутые функции и конфигурация SDK
13
- - [WebSocket API](./WEBSOCKET.md) - Подробное руководство по работе с WebSocket
14
- - [Справочник WebSocket событий](./WEBSOCKET_EVENTS.md) - Полный список всех WebSocket событий SDK
15
- - [Механизм Ping/Pong](./PING_PONG.md) - Документация по мониторингу состояния WebSocket соединений
16
- - [Индексация проектов](./INDEXING.md) - Руководство по индексации и обновлению индекса проектов
10
+ ### Основные функции
11
+ - [Потоковая передача мышления](./features/THINKING.md) - получение процесса мышления модели
12
+ - [Работа с WebSocket](./WEBSOCKET.md) - соединения и потоковая передача данных
13
+ - [Работа с проектами](./PROJECTS.md) - создание и управление проектами
17
14
 
18
- ### Дополнительные материалы
15
+ ### API Reference
16
+ - [Аутентификация](./AUTHENTICATION.md) - способы аутентификации в API
17
+ - [Обработка ошибок](./ERROR_HANDLING.md) - типы ошибок и их обработка
18
+ - [API Reference](./API_REFERENCE.md) - полное описание всех методов SDK
19
19
 
20
- - [Режим мышления](./thinking/thinking-mode.md) - Основная информация о режиме мышления
20
+ ### Расширенные возможности
21
+ - [Механизм ping/pong](./advanced/PING_PONG.md) - мониторинг состояния соединений
21
22
 
22
- ## Основные возможности SDK 1.7.2
23
+ ## Начало работы
23
24
 
24
- ### Потоковая передача мышления (Streaming Thinking)
25
+ Установите SDK с помощью npm:
25
26
 
26
- В версии 1.7.2 добавлена полная поддержка потоковой передачи мышления с помощью метода `streamChatWithThinking()`. Это позволяет получать события мышления модели в реальном времени через WebSocket.
27
-
28
- ```javascript
29
- const response = await sdk.chat.streamChatWithThinking(
30
- messages,
31
- { model: 'claude-3-7-sonnet-20240229', thinking: true },
32
- handleEvent
33
- );
27
+ ```bash
28
+ npm install solver-sdk
34
29
  ```
35
30
 
36
- ### Региональные эндпоинты
37
-
38
- SDK поддерживает работу с различными региональными эндпоинтами Anthropic API:
31
+ Простой пример использования:
39
32
 
40
33
  ```javascript
34
+ const { CodeSolverSDK } = require('solver-sdk');
35
+
36
+ // Создание экземпляра SDK
41
37
  const sdk = new CodeSolverSDK({
42
- providers: {
43
- anthropic: {
44
- region: 'eu-west-1' // Использовать европейский регион
45
- }
46
- }
38
+ baseURL: 'https://api.example.com',
39
+ apiKey: 'your-api-key'
47
40
  });
48
41
 
49
- // Автоматическое переключение между регионами при ошибках
50
- const response = await sdk.chat.chatWithRegionFailover([...], options);
51
- ```
52
-
53
- ### WebSocket улучшения
42
+ // Получение списка моделей
43
+ async function getModels() {
44
+ const models = await sdk.chat.getModels();
45
+ console.log('Доступные модели:', models);
46
+ }
54
47
 
55
- Улучшена надежность и диагностика WebSocket соединений:
56
-
57
- ```javascript
58
- // Диагностика соединения
59
- const diagnostics = sdk.getWebSocketClient().diagnoseConnection(namespace);
60
- console.log(diagnostics);
61
-
62
- // Мониторинг здоровья
63
- sdk.getWebSocketClient().setupConnectionHealthCheck(interval);
48
+ getModels().catch(console.error);
64
49
  ```
65
50
 
66
- ## Примеры кода
67
-
68
- Примеры использования SDK доступны в директории `examples` корневого каталога проекта:
69
-
70
- - `example:check-api` - Проверка соединения с API
71
- - `example:indexing` - Индексация проектов
72
- - `example:dependencies` - Работа с зависимостями
73
- - `example:regions` - Проверка доступности регионов
74
-
75
- ## Обратная связь
51
+ ## Примеры использования
76
52
 
77
- Если вы обнаружили ошибки в документации или у вас есть предложения по улучшению, пожалуйста, создайте issue в репозитории проекта.
53
+ Полный набор примеров доступен в директории [examples](../examples).
package/docs/WEBSOCKET.md CHANGED
@@ -1,24 +1,10 @@
1
1
  # Работа с WebSocket соединениями
2
2
 
3
- В этом разделе описаны возможности SDK для работы с WebSocket соединениями, методы управления сессиями рассуждений, диагностика соединений и дополнительные возможности для обеспечения стабильной работы.
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)
3
+ В этом разделе описаны методы SDK для работы с WebSocket соединениями и потоковой передачей данных.
18
4
 
19
5
  ## Основы работы с WebSocket
20
6
 
21
- SDK предоставляет низкоуровневый WebSocket клиент (`CodeSolverWebSocketClient`), который используется для связи с различными пространствами имен сервера:
7
+ SDK предоставляет высокоуровневое API для работы с WebSocket, интегрированное в основные классы:
22
8
 
23
9
  ```javascript
24
10
  const { CodeSolverSDK } = require('solver-sdk');
@@ -34,24 +20,20 @@ const wsClient = sdk.getWebSocketClient();
34
20
  // Подключение к пространству имен рассуждений
35
21
  await wsClient.connectToReasoning('reasoning-id');
36
22
 
37
- // Проверка состояния подключения
38
- const isConnected = wsClient.isConnectedToReasoning();
39
- console.log('Подключено к рассуждениям:', isConnected);
40
-
41
23
  // Подписка на события
42
- wsClient.on('thinking_delta', (data) => {
43
- console.log('Получен фрагмент мышления:', data.text);
24
+ wsClient.on('content_block_delta', (data) => {
25
+ if (data.delta?.type === 'thinking_delta') {
26
+ console.log('Фрагмент мышления:', data.delta.thinking);
27
+ }
44
28
  });
45
29
 
46
30
  // Отключение
47
31
  wsClient.disconnect(WebSocketNamespace.REASONING);
48
32
  ```
49
33
 
50
- ## Высокоуровневый API (версия 1.7.2)
34
+ ## Модули с поддержкой WebSocket
51
35
 
52
- Начиная с версии 1.7.2, SDK предоставляет высокоуровневый API для работы с WebSocket, интегрированный непосредственно в основные классы API:
53
-
54
- ### Работа с чатом и рассуждениями
36
+ ### Чат и рассуждения
55
37
 
56
38
  ```javascript
57
39
  // Подключение WebSocket для чата
@@ -62,15 +44,17 @@ sdk.chat.on('message_start', (data) => {
62
44
  console.log('Начало сообщения:', data);
63
45
  });
64
46
 
65
- sdk.chat.on('thinking_delta', (data) => {
66
- console.log('Фрагмент мышления:', data.text);
47
+ sdk.chat.on('content_block_delta', (data) => {
48
+ if (data.delta?.type === 'thinking_delta') {
49
+ console.log('Фрагмент мышления:', data.delta.thinking);
50
+ }
67
51
  });
68
52
 
69
53
  // Отключение
70
54
  await sdk.chat.disconnectWebSocket();
71
55
  ```
72
56
 
73
- ### Работа с зависимостями
57
+ ### Зависимости
74
58
 
75
59
  ```javascript
76
60
  // Подключение к пространству имен зависимостей
@@ -85,7 +69,7 @@ sdk.dependencies.on('dependency_update', (data) => {
85
69
  await sdk.dependencies.disconnectWebSocket();
86
70
  ```
87
71
 
88
- ### Работа с проектами и индексацией
72
+ ### Проекты и индексация
89
73
 
90
74
  ```javascript
91
75
  // Подключение к пространству имен проектов
@@ -100,32 +84,38 @@ sdk.projects.on('indexing_progress', (data) => {
100
84
  await sdk.projects.disconnectWebSocket();
101
85
  ```
102
86
 
87
+ ## Поддерживаемые события
88
+
89
+ Основные события, на которые можно подписаться:
90
+
91
+ | Событие | Описание | Примечание |
92
+ |---------|----------|------------|
93
+ | `message_start` | Начало сообщения | { id, model, type } |
94
+ | `content_block_start` | Начало блока контента | { content_block: { type }, index } |
95
+ | `content_block_delta` | Дельта блока контента | См. документацию для типов дельт |
96
+ | `content_block_stop` | Конец блока контента | { content_block: { type }, index } |
97
+ | `message_stop` | Конец сообщения | { id, type, stop_reason } |
98
+ | `error` | Ошибка | { message, code, ... } |
99
+
103
100
  ## Потоковая передача мышления
104
101
 
105
- В версии 1.7.2 добавлена полная поддержка потоковой передачи мышления через метод `streamChatWithThinking`:
102
+ Самый простой способ получать мышление использовать метод `streamChatWithThinking`:
106
103
 
107
104
  ```javascript
108
105
  // Обработчик событий
109
106
  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;
107
+ if (eventType === 'content_block_delta' && data.delta?.type === 'thinking_delta') {
108
+ console.log('Мышление:', data.delta.thinking);
109
+ } else if (eventType === 'content_block_delta' && data.delta?.type === 'text_delta') {
110
+ console.log('Ответ:', data.delta.text);
111
+ } else if (eventType === 'message_stop') {
112
+ console.log('Завершение ответа');
123
113
  }
124
114
  };
125
115
 
126
116
  // Отправка запроса с потоковым мышлением
127
117
  const messages = [
128
- { role: 'user', content: 'Как работает квантовый компьютер?' }
118
+ { role: 'user', content: 'Объясни квантовую механику' }
129
119
  ];
130
120
 
131
121
  const options = {
@@ -141,368 +131,39 @@ const response = await sdk.chat.streamChatWithThinking(
141
131
  );
142
132
  ```
143
133
 
144
- ### Поддерживаемые события мышления
145
-
146
- SDK поддерживает следующие ключевые события:
147
-
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+ предоставляет расширенные возможности для управления сессиями рассуждений:
160
-
161
- ### Установка активной сессии рассуждения
162
-
163
- ```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
- ```
174
-
175
- ### Создание нового рассуждения
176
-
177
- ```javascript
178
- // Создание нового рассуждения и получение его ID
179
- const newReasoningId = await wsClient.createNewReasoning();
180
- console.log('Создано новое рассуждение:', newReasoningId);
181
- ```
182
-
183
- ### Проверка существования рассуждения
184
-
185
- ```javascript
186
- // Проверка существования рассуждения на сервере
187
- const exists = await wsClient.checkReasoningExists('reasoning-id');
188
- if (exists) {
189
- console.log('Рассуждение существует');
190
- } else {
191
- console.log('Рассуждение не найдено');
192
- }
193
- ```
194
-
195
- ### Получение статуса рассуждения
134
+ ## Обработка ошибок
196
135
 
197
136
  ```javascript
198
- // Получение детальной информации о сессии рассуждения
199
- const status = await wsClient.getReasoningStatus('reasoning-id');
200
- console.log('Статус:', status.exists, status.isActive);
201
- console.log('Метаданные:', status.metadata);
202
- ```
203
-
204
- ### Присоединение к сессии рассуждения
205
-
206
- ```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('Не удалось присоединиться к рассуждению');
217
- }
218
- ```
219
-
220
- ## Диагностика соединений
221
-
222
- SDK предоставляет методы для диагностики состояния соединений и получения подробной информации о них:
223
-
224
- ```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
- ## Механизм переподключения
263
-
264
- SDK реализует интеллектуальный механизм переподключения с экспоненциальной задержкой и случайным фактором (jitter) для предотвращения штормов переподключений:
265
-
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 // Максимальное количество попыток
137
+ try {
138
+ await sdk.chat.streamChatWithThinking(
139
+ messages,
140
+ options,
141
+ handleEvent
142
+ );
143
+ } catch (error) {
144
+ if (error.code === 'CONNECTION_ERROR') {
145
+ console.error('Ошибка подключения:', error.message);
146
+ } else {
147
+ console.error('Произошла ошибка:', error.message);
277
148
  }
278
- });
279
-
280
- // Принудительное переподключение к пространству имен
281
- await wsClient.reconnectNamespace(
282
- WebSocketNamespace.REASONING,
283
- true // immediate: переподключиться немедленно, без задержки
284
- );
149
+ }
285
150
  ```
286
151
 
287
- ## Сохранение и восстановление сессий
288
-
289
- SDK поддерживает механизм сохранения и восстановления токенов сессий для непрерывной работы при переподключениях:
152
+ ## Настройка WebSocket
290
153
 
291
154
  ```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);
300
-
301
- // Включение/отключение сохранения сессий при создании SDK
155
+ // Настройка параметров WebSocket при создании SDK
302
156
  const sdk = new CodeSolverSDK({
303
157
  baseURL: 'https://api.example.com',
304
158
  apiKey: 'your-api-key',
305
159
  websocket: {
306
- enableSessionPersistence: true // Включить сохранение токенов сессий
160
+ reconnect: true, // Автоматическое переподключение
161
+ reconnectAttempts: 5, // Максимальное количество попыток
162
+ rejectUnauthorized: false // Для самоподписанных сертификатов
307
163
  }
308
164
  });
309
165
  ```
310
166
 
311
- ## Проверка здоровья соединений
312
-
313
- SDK предоставляет механизм регулярной проверки здоровья соединений и автоматического переподключения при обнаружении проблем:
314
-
315
- ```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
329
-
330
- Для поддержания активных соединений и измерения времени отклика SDK использует механизм ping/pong:
331
-
332
- ```javascript
333
- // Включение автоматического ping/pong
334
- wsClient.enablePingPong(
335
- 15000, // Интервал между ping-сообщениями (мс)
336
- 3 // Порог таймаута (количество пропущенных pong)
337
- );
338
-
339
- // Отключение механизма ping/pong
340
- wsClient.disablePingPong();
341
-
342
- // Получение статистики ping/pong
343
- const stats = wsClient.getPingStats(WebSocketNamespace.REASONING);
344
- console.log('Статистика ping/pong:', stats);
345
-
346
- // Подписка на события таймаута соединения
347
- wsClient.onPingPongEvent('connection_timeout', (data) => {
348
- console.log('Таймаут соединения:', data);
349
- });
350
- ```
351
-
352
- ## Примеры использования
353
-
354
- ### Работа с потоковой передачей мышления
355
-
356
- ```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;
429
- }
430
- }
431
-
432
- // Функции для обновления UI
433
- function updateThinkingUI(text) {
434
- console.log('Обновление блока мышления');
435
- // document.getElementById('thinking-container').textContent = text;
436
- }
437
-
438
- function updateResponseUI(text) {
439
- console.log('Обновление блока ответа');
440
- // document.getElementById('response-container').textContent = text;
441
- }
442
-
443
- // Запуск функции
444
- streamingThinking().catch(console.error);
445
- ```
446
-
447
- ### Работа с региональным переключением
448
-
449
- ```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();
496
- }
497
- }
498
-
499
- chatWithRegionalFailover().catch(console.error);
500
- ```
501
-
502
- ## Справочник всех событий WebSocket
503
-
504
- Полный список всех поддерживаемых WebSocket событий, их описание, формат данных и примеры использования доступны в отдельном документе:
505
-
506
- [Справочник WebSocket событий SDK](./WEBSOCKET_EVENTS.md)
167
+ ## Дополнительная информация
507
168
 
508
- В этом справочнике содержится подробная информация обо всех константах событий, их строковых значениях, форматах данных и рекомендациях по использованию в различных сценариях.
169
+ Для детального описания всех возможностей WebSocket, смотрите [руководство по мышлению](./features/THINKING.md) и примеры в директории [examples/websocket](../examples/websocket).