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.
- package/README.md +40 -49
- package/dist/cjs/api/{chat-api.js → chat-api/index.js} +37 -151
- 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/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} +34 -151
- 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/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} +10 -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/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/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 +168 -0
- package/docs/AUTHENTICATION.md +179 -0
- package/docs/ERROR_HANDLING.md +240 -0
- package/docs/README.md +32 -56
- package/docs/WEBSOCKET.md +55 -394
- package/docs/advanced/PING_PONG.md +212 -0
- package/docs/features/THINKING.md +158 -0
- package/package.json +1 -1
- 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
|
@@ -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)
|