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
@@ -1,164 +0,0 @@
1
- # Руководство: Потоковый чат с Thinking через SDK
2
-
3
- Это руководство объясняет, как использовать обновленный `solver-sdk` для получения потоковых ответов от языковой модели с поддержкой режима "thinking" через WebSocket. Это позволяет отображать ход мыслей модели и финальный ответ в реальном времени.
4
-
5
- ## Основной метод: `streamChatWithThinking`
6
-
7
- Для потоковой передачи с thinking используйте новый метод `sdk.chat.streamChatWithThinking`.
8
-
9
- **Преимущества:**
10
-
11
- - **Автоматическое подключение WebSocket:** SDK сам создает и управляет WebSocket соединением.
12
- - **Простая обработка событий:** Вы просто предоставляете callback-функцию для обработки всех событий потока.
13
- - **Полная поддержка Anthropic:** Обрабатываются все актуальные события (`thinking_delta`, `text_delta`, `signature_delta`, `message_delta`, `ping` и т.д.).
14
-
15
- ## Пример использования
16
-
17
- ```javascript
18
- const { CodeSolverSDK } = require('solver-sdk'); // Или import { CodeSolverSDK } from 'solver-sdk';
19
-
20
- async function runStreamingExample() {
21
- // 1. Инициализация SDK
22
- const sdk = new CodeSolverSDK({
23
- baseURL: 'https://your-backend-url.com', // URL вашего бэкенда
24
- // apiKey: 'your-api-key' // Если требуется
25
- });
26
-
27
- // 2. Сообщения для отправки
28
- const messages = [
29
- { role: 'user', content: 'Объясни теорию относительности простыми словами.' }
30
- ];
31
-
32
- // 3. Опции запроса (включаем thinking)
33
- const options = {
34
- model: 'claude-3-7-sonnet-20240229', // Или другая модель с поддержкой thinking
35
- thinking: true, // Обязательно для активации режима
36
- temperature: 0.7
37
- };
38
-
39
- // 4. Обработчик событий WebSocket
40
- const handleEvent = (eventType, data) => {
41
- console.log(`[EVENT: ${eventType}]`, data); // Логирование всех событий для отладки
42
-
43
- switch(eventType) {
44
- // Начало потока
45
- case 'connect':
46
- console.log(`WebSocket подключен: ${data.socketId}`);
47
- break;
48
- case 'message_start':
49
- console.log(`Начало ответа модели: ${data.model}`);
50
- // Здесь можно инициализировать UI для отображения ответа
51
- break;
52
-
53
- // Поток размышлений
54
- case 'thinking_start':
55
- console.log('-- Начало размышлений --');
56
- // Очистить/показать область для размышлений
57
- break;
58
- case 'thinking_delta':
59
- process.stdout.write(data.text); // Выводим текст размышлений по мере поступления
60
- // Добавить data.text в UI область размышлений
61
- break;
62
- case 'signature_delta':
63
- console.log('[Подпись блока thinking получена]');
64
- break;
65
-
66
- // Поток основного ответа
67
- case 'text_delta':
68
- process.stdout.write(data.text); // Выводим текст ответа по мере поступления
69
- // Добавить data.text в UI область ответа
70
- break;
71
-
72
- // Завершение блоков и сообщения
73
- case 'content_block_stop':
74
- // Блок (thinking или text) завершен
75
- break;
76
- case 'message_delta':
77
- // Обновление статуса сообщения (например, stop_reason)
78
- console.log(`Обновление сообщения: ${JSON.stringify(data.delta)}`);
79
- break;
80
- case 'message_stop':
81
- console.log('-- Сообщение завершено --');
82
- // Показать финальное состояние UI
83
- break;
84
-
85
- // Служебные события
86
- case 'ping':
87
- console.log('[Ping от сервера]');
88
- break;
89
- case 'retry':
90
- console.warn(`Попытка переподключения ${data.retryCount} из-за перегрузки...`);
91
- break;
92
-
93
- // Ошибки и завершение
94
- case 'error':
95
- console.error(`Ошибка WebSocket: ${data.message} (Код: ${data.code})`);
96
- // Показать сообщение об ошибке в UI
97
- break;
98
- case 'disconnect':
99
- console.log('WebSocket отключен');
100
- break;
101
- case 'done':
102
- console.log('Поток данных завершен.');
103
- // Можно закрыть соединение или ожидать новых запросов
104
- break;
105
-
106
- case 'unknown_event':
107
- console.log(`Получено неизвестное событие: ${data.type}`);
108
- break;
109
- }
110
- };
111
-
112
- // 5. Вызов метода и ожидание потока
113
- try {
114
- console.log('Отправка запроса...');
115
- const response = await sdk.chat.streamChatWithThinking(
116
- messages,
117
- options,
118
- handleEvent // Передаем наш обработчик
119
- );
120
-
121
- console.log(`Запрос успешно отправлен. Используется Socket ID: ${response.socketId}`);
122
- console.log('Ожидание событий через WebSocket...');
123
- // В реальном приложении здесь будет основной цикл работы или ожидание
124
-
125
- } catch (error) {
126
- console.error('Ошибка при отправке запроса:', error);
127
- // Обработка ошибки инициации запроса
128
- }
129
- }
130
-
131
- // Запуск примера
132
- runStreamingExample();
133
- ```
134
-
135
- ## Ключевые моменты
136
-
137
- 1. **Включите `thinking: true`**: Это главный параметр для активации режима потокового мышления.
138
- 2. **Предоставьте обработчик `onEvent`**: Эта функция будет получать все события WebSocket.
139
- 3. **Обрабатывайте нужные события**: Как минимум, вам понадобятся `thinking_delta` (для размышлений) и `text_delta` (для основного ответа), а также `error` и `done`.
140
- 4. **SDK управляет соединением**: Вам не нужно вручную создавать `socketId` или подключаться к WebSocket – SDK сделает это автоматически.
141
-
142
- ## (Опционально) Использование существующего `socketId`
143
-
144
- Если ваш клиент уже управляет WebSocket соединением и имеет `socketId`, вы можете передать его в опциях, чтобы SDK использовал существующее соединение:
145
-
146
- ```javascript
147
- // Предположим, у вас есть connectResponse от sdk.chat.connectWebSocket()
148
- const existingSocketId = connectResponse.socketId;
149
-
150
- const options = {
151
- model: 'claude-3-7-sonnet-20240229',
152
- thinking: true,
153
- socketId: existingSocketId // Передаем существующий ID
154
- };
155
-
156
- // SDK не будет создавать новое соединение, а использует указанное
157
- const response = await sdk.chat.streamChatWithThinking(
158
- messages,
159
- options,
160
- handleEvent
161
- );
162
- ```
163
-
164
- Это полезно, если вы хотите использовать одно WebSocket соединение для нескольких запросов.
@@ -1,366 +0,0 @@
1
- # Руководство по интеграции функциональности мышления (Thinking Mode)
2
-
3
- В этом документе описывается полный процесс интеграции функциональности мышления в клиентские приложения с использованием SDK версии 1.7.2.
4
-
5
- ## Обзор функциональности
6
-
7
- **Режим мышления** (Thinking Mode) - это расширенная функциональность, которая позволяет получать доступ к промежуточным рассуждениям языковой модели в процессе формирования ответа. Это дает следующие преимущества:
8
-
9
- - Прозрачность в процессе генерации ответа
10
- - Отладка и улучшение качества ответов
11
- - Возможность показать пользователю как модель пришла к своему решению
12
- - Поэтапное отображение процесса мышления в реальном времени (через WebSocket)
13
-
14
- ## Архитектура взаимодействия
15
-
16
- ```
17
- Client (SDK) <--WebSocket--> NestJS Server <--HTTP Stream--> Anthropic API
18
- ```
19
-
20
- Существует два способа работы с функциональностью мышления:
21
-
22
- 1. **REST API** - синхронный режим, где ответ возвращается после завершения генерации
23
- 2. **WebSocket** - потоковый режим, с получением событий мышления в реальном времени
24
-
25
- ## Интеграция через REST API
26
-
27
- Простейший способ получить доступ к мышлению модели - использовать REST API:
28
-
29
- ```javascript
30
- const response = await sdk.chat.chat([
31
- { role: 'user', content: 'Как работает алгоритм быстрой сортировки?' }
32
- ], {
33
- model: 'claude-3-7-sonnet-20240229',
34
- thinking: true
35
- });
36
-
37
- // Ход мыслей доступен в свойстве thinking первого элемента choices
38
- const thinking = response.choices[0].thinking;
39
- ```
40
-
41
- ## Интеграция через WebSocket (рекомендуемый подход)
42
-
43
- Интеграция через WebSocket позволяет получать события мышления в реальном времени и показывать пользователю как модель формирует ответ шаг за шагом.
44
-
45
- ### Шаг 1: Инициализация SDK и подключение WebSocket
46
-
47
- ```javascript
48
- const sdk = new CodeSolverSDK({
49
- baseURL: 'https://api.example.com',
50
- apiKey: 'ваш-ключ-api'
51
- });
52
-
53
- // Подключаем WebSocket
54
- await sdk.chat.connectWebSocket();
55
- ```
56
-
57
- ### Шаг 2: Определение обработчика событий
58
-
59
- ```javascript
60
- // Функция обработки событий
61
- function handleEvent(eventType, data) {
62
- switch(eventType) {
63
- case 'thinking_delta':
64
- // Новый фрагмент мышления
65
- console.log('Мышление:', data.text);
66
- break;
67
-
68
- case 'text_delta':
69
- // Новый фрагмент ответа
70
- console.log('Ответ:', data.text);
71
- break;
72
-
73
- case 'message_start':
74
- console.log('Начало сообщения');
75
- break;
76
-
77
- case 'message_stop':
78
- console.log('Завершение ответа');
79
- break;
80
- }
81
- }
82
- ```
83
-
84
- ### Шаг 3: Отправка запроса с потоковой передачей мышления
85
-
86
- ```javascript
87
- // Сообщения для отправки
88
- const messages = [
89
- { role: 'user', content: 'Как реализовать алгоритм сортировки слиянием?' }
90
- ];
91
-
92
- // Опции запроса
93
- const options = {
94
- model: 'claude-3-7-sonnet-20240229',
95
- thinking: true, // Активируем режим мышления
96
- temperature: 0.7
97
- };
98
-
99
- // Отправляем запрос с потоковым мышлением
100
- const response = await sdk.chat.streamChatWithThinking(
101
- messages,
102
- options,
103
- handleEvent
104
- );
105
-
106
- console.log(`Запрос успешно отправлен. Socket ID: ${response.socketId}`);
107
- ```
108
-
109
- ### Шаг 4: Отключение от сервера после использования
110
-
111
- ```javascript
112
- // Отключаемся от WebSocket сервера
113
- await sdk.chat.disconnectWebSocket();
114
- ```
115
-
116
- ## Полный пример интеграции в клиентское приложение
117
-
118
- ```javascript
119
- class ThinkingModeIntegration {
120
- constructor(apiKey, baseURL) {
121
- this.sdk = new CodeSolverSDK({
122
- baseURL,
123
- apiKey
124
- });
125
-
126
- this.thinkingText = '';
127
- this.responseText = '';
128
- this.isProcessing = false;
129
- }
130
-
131
- // Инициализация и подключение к WebSocket
132
- async connect() {
133
- const response = await this.sdk.chat.connectWebSocket();
134
- return response.socketId;
135
- }
136
-
137
- // Отправка запроса с мышлением
138
- async sendWithThinking(messages, options = {}) {
139
- this.isProcessing = true;
140
- this.thinkingText = '';
141
- this.responseText = '';
142
-
143
- // Настраиваем опции по умолчанию
144
- const defaultOptions = {
145
- model: 'claude-3-7-sonnet-20240229',
146
- thinking: true,
147
- temperature: 0.7
148
- };
149
-
150
- const mergedOptions = { ...defaultOptions, ...options };
151
-
152
- try {
153
- // Отправляем запрос с обработчиком событий
154
- const response = await this.sdk.chat.streamChatWithThinking(
155
- messages,
156
- mergedOptions,
157
- this.handleEvent.bind(this)
158
- );
159
-
160
- return response;
161
- } catch (error) {
162
- console.error('Ошибка при отправке запроса:', error);
163
- this.isProcessing = false;
164
- throw error;
165
- }
166
- }
167
-
168
- // Обработчик событий WebSocket
169
- handleEvent(eventType, data) {
170
- switch(eventType) {
171
- case 'thinking_delta':
172
- this.thinkingText += data.text || '';
173
-
174
- // Вызываем колбэк для обновления UI мышления
175
- if (this.onThinkingUpdate) {
176
- this.onThinkingUpdate(this.thinkingText);
177
- }
178
- break;
179
-
180
- case 'text_delta':
181
- this.responseText += data.text || '';
182
-
183
- // Вызываем колбэк для обновления UI ответа
184
- if (this.onResponseUpdate) {
185
- this.onResponseUpdate(this.responseText);
186
- }
187
- break;
188
-
189
- case 'message_stop':
190
- this.isProcessing = false;
191
-
192
- // Вызываем колбэк завершения
193
- if (this.onComplete) {
194
- this.onComplete({
195
- thinking: this.thinkingText,
196
- response: this.responseText
197
- });
198
- }
199
- break;
200
-
201
- case 'error':
202
- this.isProcessing = false;
203
-
204
- // Вызываем колбэк ошибки
205
- if (this.onError) {
206
- this.onError(data);
207
- }
208
- break;
209
- }
210
- }
211
-
212
- // Отключение от сервера
213
- async disconnect() {
214
- await this.sdk.chat.disconnectWebSocket();
215
- }
216
-
217
- // Регистрация обработчиков событий
218
- registerCallbacks({
219
- onThinkingUpdate,
220
- onResponseUpdate,
221
- onComplete,
222
- onError
223
- }) {
224
- this.onThinkingUpdate = onThinkingUpdate;
225
- this.onResponseUpdate = onResponseUpdate;
226
- this.onComplete = onComplete;
227
- this.onError = onError;
228
- }
229
- }
230
-
231
- // Пример использования
232
- async function main() {
233
- const thinkingMode = new ThinkingModeIntegration(
234
- 'ваш-ключ-api',
235
- 'https://api.example.com'
236
- );
237
-
238
- // Подключаемся к WebSocket
239
- await thinkingMode.connect();
240
-
241
- // Регистрируем обработчики
242
- thinkingMode.registerCallbacks({
243
- onThinkingUpdate: (thinking) => {
244
- console.log('Обновление мышления');
245
- document.getElementById('thinkingOutput').innerHTML = thinking;
246
- },
247
- onResponseUpdate: (response) => {
248
- console.log('Обновление ответа');
249
- document.getElementById('finalAnswer').innerHTML = response;
250
- },
251
- onComplete: (result) => {
252
- console.log('Завершено!');
253
- document.getElementById('status').textContent = 'Готово';
254
- },
255
- onError: (error) => {
256
- console.error('Ошибка:', error);
257
- document.getElementById('status').textContent = 'Ошибка: ' + error.message;
258
- }
259
- });
260
-
261
- // Отправляем запрос
262
- const messages = [
263
- { role: 'user', content: 'Объясни, как работает алгоритм быстрой сортировки?' }
264
- ];
265
-
266
- document.getElementById('status').textContent = 'Обработка...';
267
-
268
- await thinkingMode.sendWithThinking(messages);
269
-
270
- // После завершения работы
271
- // await thinkingMode.disconnect();
272
- }
273
- ```
274
-
275
- ## Рекомендации по интеграции в UI
276
-
277
- При интеграции функциональности мышления в пользовательский интерфейс рекомендуется:
278
-
279
- 1. **Показывать индикатор загрузки** пока идет инициализация соединения
280
- 2. **Выделять шаги мышления** визуально отдельно от окончательного ответа
281
- 3. **Предусмотреть автоскроллинг** для длинных цепочек рассуждений
282
- 4. **Добавить возможность скрыть/показать** ход мыслей для пользователей
283
- 5. **Обеспечить обработку отключения** от сервера (например, при закрытии вкладки/приложения)
284
-
285
- ### Пример HTML/CSS структуры для отображения мышления
286
-
287
- ```html
288
- <div class="thinking-container">
289
- <div class="thinking-header">
290
- <h3>Ход мыслей модели</h3>
291
- <button id="toggleThinking">Скрыть</button>
292
- <span id="status">Готово</span>
293
- </div>
294
-
295
- <div id="thinkingOutput" class="thinking-steps">
296
- <!-- Шаги мышления будут добавляться здесь -->
297
- </div>
298
-
299
- <div class="final-answer">
300
- <h3>Ответ модели</h3>
301
- <div id="finalAnswer">
302
- <!-- Финальный ответ будет здесь -->
303
- </div>
304
- </div>
305
- </div>
306
- ```
307
-
308
- ## Отладка и устранение проблем
309
-
310
- ### Распространенные проблемы и их решения
311
-
312
- 1. **Нет соединения WebSocket**
313
- - Проверьте, правильно ли указан baseURL
314
- - Убедитесь, что порт не блокируется фаерволом
315
- - Проверьте наличие CORS ограничений
316
- - Используйте метод `sdk.getWebSocketClient().diagnoseConnection()` для диагностики
317
-
318
- 2. **Не приходят события мышления**
319
- - Убедитесь, что активирован параметр `thinking: true`
320
- - Проверьте, что соединение WebSocket активно
321
- - Убедитесь, что используется поддерживаемая модель
322
-
323
- 3. **Разрыв соединения в процессе работы**
324
- - Увеличьте timeout в настройках WebSocket
325
- - Включите механизм ping/pong для поддержания соединения
326
- - Используйте опцию `websocket.reconnect: true` в настройках SDK
327
-
328
- ### Включение расширенной диагностики
329
-
330
- В SDK версии 1.7.2 добавлены мощные инструменты для диагностики WebSocket соединений:
331
-
332
- ```javascript
333
- const sdk = new CodeSolverSDK({
334
- baseURL: 'https://api.example.com',
335
- apiKey: 'ваш-ключ-api',
336
- websocket: {
337
- debug: true, // Включаем подробное логирование
338
- reconnect: true, // Автоматическое переподключение
339
- reconnectAttempts: 5, // Количество попыток переподключения
340
- reconnectDelay: 1000 // Задержка перед переподключением (мс)
341
- }
342
- });
343
-
344
- // Включаем механизм ping/pong для поддержания соединения
345
- const wsClient = sdk.getWebSocketClient();
346
- wsClient.enablePingPong(30000, 3);
347
-
348
- // Диагностика состояния соединения
349
- const diagnostics = wsClient.diagnoseConnection();
350
- console.log('Диагностика соединения:', diagnostics);
351
- ```
352
-
353
- ## Версии и совместимость
354
-
355
- Функциональность мышления поддерживается в:
356
- - SDK версии 1.5.0 и выше
357
- - Потоковая передача мышления (streaming) полностью поддерживается с версии 1.7.2
358
- - Backend API версии 1.5.0 и выше
359
- - Совместима с моделями Claude 3 Opus, Claude 3 Sonnet и Claude 3 Haiku
360
-
361
- ## Дополнительные ресурсы
362
-
363
- - [Архитектура потоковой передачи мышления](../THINKING_ARCHITECTURE.md)
364
- - [Руководство по потоковой передаче мышления](../streaming-thinking-guide.md)
365
- - [WebSocket API](../WEBSOCKET.md)
366
- - [Документация Anthropic по потоковой передаче](https://docs.anthropic.com/en/api/messages-streaming)