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
package/docs/WEBSOCKET.md
CHANGED
|
@@ -1,131 +1,83 @@
|
|
|
1
1
|
# Работа с WebSocket соединениями
|
|
2
2
|
|
|
3
|
-
В этом разделе описаны
|
|
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(
|
|
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
|
-
|
|
62
|
-
console.log('Начало сообщения:', data);
|
|
63
|
-
});
|
|
30
|
+
// Проверка статуса подключения
|
|
31
|
+
const isConnected = wsClient.isConnected(WebSocketNamespace.REASONING);
|
|
64
32
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
});
|
|
33
|
+
// Отключение от определенного namespace
|
|
34
|
+
await wsClient.disconnect(WebSocketNamespace.REASONING);
|
|
68
35
|
|
|
69
|
-
// Отключение
|
|
70
|
-
await
|
|
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(
|
|
48
|
+
console.log(`Прогресс индексации: ${data.progress}%`);
|
|
49
|
+
console.log(`Обработано файлов: ${data.processedFiles} из ${data.totalFiles}`);
|
|
97
50
|
});
|
|
98
51
|
|
|
99
|
-
//
|
|
100
|
-
|
|
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
|
-
|
|
64
|
+
## Потоковый чат с мышлением AI
|
|
106
65
|
|
|
107
66
|
```javascript
|
|
108
|
-
// Обработчик событий
|
|
67
|
+
// Обработчик событий для потокового получения ответа и мышления
|
|
109
68
|
const handleEvent = (eventType, data) => {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
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
|
-
//
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
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
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
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
|
-
|
|
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
|
|
200
|
-
|
|
201
|
-
|
|
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
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
)
|
|
212
|
-
|
|
213
|
-
if (
|
|
214
|
-
|
|
215
|
-
} else {
|
|
216
|
-
|
|
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
|
-
|
|
167
|
+
### Чат и рассуждения
|
|
223
168
|
|
|
224
169
|
```javascript
|
|
225
|
-
//
|
|
226
|
-
|
|
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
|
-
|
|
173
|
+
// Подписка на события
|
|
174
|
+
sdk.chat.on('message_start', (data) => {
|
|
175
|
+
console.log('Начало сообщения:', data);
|
|
176
|
+
});
|
|
265
177
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
//
|
|
302
|
-
|
|
303
|
-
|
|
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
|
-
|
|
203
|
+
### Проекты и индексация
|
|
314
204
|
|
|
315
205
|
```javascript
|
|
316
|
-
//
|
|
317
|
-
|
|
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
|
-
|
|
209
|
+
// Подписка на события индексации
|
|
210
|
+
sdk.projects.on('indexing_progress', (data) => {
|
|
211
|
+
console.log('Прогресс индексации:', data.progress);
|
|
212
|
+
});
|
|
331
213
|
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
15000, // Интервал между ping-сообщениями (мс)
|
|
336
|
-
3 // Порог таймаута (количество пропущенных pong)
|
|
337
|
-
);
|
|
214
|
+
// Отключение
|
|
215
|
+
await sdk.projects.disconnectWebSocket();
|
|
216
|
+
```
|
|
338
217
|
|
|
339
|
-
|
|
340
|
-
wsClient.disablePingPong();
|
|
218
|
+
## Поддерживаемые события
|
|
341
219
|
|
|
342
|
-
|
|
343
|
-
const stats = wsClient.getPingStats(WebSocketNamespace.REASONING);
|
|
344
|
-
console.log('Статистика ping/pong:', stats);
|
|
220
|
+
Основные события, на которые можно подписаться:
|
|
345
221
|
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
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
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
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
|
-
//
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
}
|
|
247
|
+
// Отправка запроса с потоковым мышлением
|
|
248
|
+
const messages = [
|
|
249
|
+
{ role: 'user', content: 'Объясни квантовую механику' }
|
|
250
|
+
];
|
|
437
251
|
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
252
|
+
const options = {
|
|
253
|
+
model: 'claude-3-7-sonnet-20240229',
|
|
254
|
+
thinking: true,
|
|
255
|
+
temperature: 0.7
|
|
256
|
+
};
|
|
442
257
|
|
|
443
|
-
|
|
444
|
-
|
|
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
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
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
|
-
##
|
|
503
|
-
|
|
504
|
-
Полный список всех поддерживаемых WebSocket событий, их описание, формат данных и примеры использования доступны в отдельном документе:
|
|
283
|
+
## Настройка WebSocket
|
|
505
284
|
|
|
506
|
-
|
|
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).
|