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
|
@@ -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)
|