solver-sdk
Version:
SDK для интеграции с Code Solver Backend API (совместимо с браузером и Node.js), с поддержкой функциональности мышления (Thinking Mode)
169 lines (131 loc) • 5.68 kB
Markdown
В этом разделе описаны методы SDK для работы с WebSocket соединениями и потоковой передачей данных.
SDK предоставляет высокоуровневое API для работы с WebSocket, интегрированное в основные классы:
```javascript
const { CodeSolverSDK } = require('solver-sdk');
const sdk = new CodeSolverSDK({
baseURL: 'https://api.example.com',
apiKey: 'your-api-key'
});
// Получение WebSocket клиента
const wsClient = sdk.getWebSocketClient();
// Подключение к пространству имен рассуждений
await wsClient.connectToReasoning('reasoning-id');
// Подписка на события
wsClient.on('content_block_delta', (data) => {
if (data.delta?.type === 'thinking_delta') {
console.log('Фрагмент мышления:', data.delta.thinking);
}
});
// Отключение
wsClient.disconnect(WebSocketNamespace.REASONING);
```
```javascript
// Подключение WebSocket для чата
await sdk.chat.connectWebSocket();
// Подписка на события
sdk.chat.on('message_start', (data) => {
console.log('Начало сообщения:', data);
});
sdk.chat.on('content_block_delta', (data) => {
if (data.delta?.type === 'thinking_delta') {
console.log('Фрагмент мышления:', data.delta.thinking);
}
});
// Отключение
await sdk.chat.disconnectWebSocket();
```
```javascript
// Подключение к пространству имен зависимостей
await sdk.dependencies.connectWebSocket(projectId);
// Подписка на события зависимостей
sdk.dependencies.on('dependency_update', (data) => {
console.log('Обновление зависимостей:', data);
});
// Отключение
await sdk.dependencies.disconnectWebSocket();
```
```javascript
// Подключение к пространству имен проектов
await sdk.projects.connectWebSocket();
// Подписка на события индексации
sdk.projects.on('indexing_progress', (data) => {
console.log('Прогресс индексации:', data.progress);
});
// Отключение
await sdk.projects.disconnectWebSocket();
```
Основные события, на которые можно подписаться:
| Событие | Описание | Примечание |
|---------|----------|------------|
| `message_start` | Начало сообщения | { id, model, type } |
| `content_block_start` | Начало блока контента | { content_block: { type }, index } |
| `content_block_delta` | Дельта блока контента | См. документацию для типов дельт |
| `content_block_stop` | Конец блока контента | { content_block: { type }, index } |
| `message_stop` | Конец сообщения | { id, type, stop_reason } |
| `error` | Ошибка | { message, code, ... } |
Самый простой способ получать мышление — использовать метод `streamChatWithThinking`:
```javascript
// Обработчик событий
const handleEvent = (eventType, data) => {
if (eventType === 'content_block_delta' && data.delta?.type === 'thinking_delta') {
console.log('Мышление:', data.delta.thinking);
} else if (eventType === 'content_block_delta' && data.delta?.type === 'text_delta') {
console.log('Ответ:', data.delta.text);
} else if (eventType === 'message_stop') {
console.log('Завершение ответа');
}
};
// Отправка запроса с потоковым мышлением
const messages = [
{ role: 'user', content: 'Объясни квантовую механику' }
];
const options = {
model: 'claude-3-7-sonnet-20240229',
thinking: true,
temperature: 0.7
};
const response = await sdk.chat.streamChatWithThinking(
messages,
options,
handleEvent
);
```
```javascript
try {
await sdk.chat.streamChatWithThinking(
messages,
options,
handleEvent
);
} catch (error) {
if (error.code === 'CONNECTION_ERROR') {
console.error('Ошибка подключения:', error.message);
} else {
console.error('Произошла ошибка:', error.message);
}
}
```
```javascript
// Настройка параметров WebSocket при создании SDK
const sdk = new CodeSolverSDK({
baseURL: 'https://api.example.com',
apiKey: 'your-api-key',
websocket: {
reconnect: true, // Автоматическое переподключение
reconnectAttempts: 5, // Максимальное количество попыток
rejectUnauthorized: false // Для самоподписанных сертификатов
}
});
```
Для детального описания всех возможностей WebSocket, смотрите [руководство по мышлению](./features/THINKING.md) и примеры в директории [examples/websocket](../examples/websocket).