UNPKG

solver-sdk

Version:

SDK для интеграции с Code Solver Backend API

300 lines (238 loc) 10 kB
# Работа с WebSocket соединениями В этом разделе описаны основные методы для работы с WebSocket соединениями. ## Получение WebSocket клиента ```javascript const { CodeSolverSDK } = require('solver-sdk'); const sdk = new CodeSolverSDK({ baseURL: 'https://api.example.com', apiKey: 'your-api-key', websocket: { reconnect: true, reconnectAttempts: 5, reconnectDelay: 3000, rejectUnauthorized: true // false для самоподписанных сертификатов } }); // Получение WebSocket клиента const wsClient = sdk.getWebSocketClient(); // Подключение к namespace рассуждений await wsClient.connectToReasoning(); // Подключение к namespace индексации await wsClient.connectToIndexing(); // Проверка статуса подключения const isConnected = wsClient.isConnected(WebSocketNamespace.REASONING); // Отключение от определенного namespace await wsClient.disconnect(WebSocketNamespace.REASONING); // Отключение от всех namespace await wsClient.disconnectAll(); ``` ## Мониторинг индексации проектов ```javascript // Подключение к WebSocket для проектов await sdk.projects.connectWebSocket(); // Отслеживание прогресса индексации sdk.projects.on('indexing_progress', (data) => { console.log(`Прогресс индексации: ${data.progress}%`); console.log(`Обработано файлов: ${data.processedFiles} из ${data.totalFiles}`); }); // Завершение индексации sdk.projects.on('indexing_complete', (data) => { console.log('Индексация завершена!', data.success ? 'Успешно' : 'С ошибками'); // Отключение после завершения sdk.projects.disconnectWebSocket(); }); // Остановка индексации await sdk.projects.stopIndexing(projectId); ``` ## Потоковый чат с мышлением AI ```javascript // Обработчик событий для потокового получения ответа и мышления const handleEvent = (eventType, data) => { if (eventType === 'thinking_delta' && data.thinking) { console.log('Мышление:', data.thinking); } else if (eventType === 'text_delta' && data.text) { process.stdout.write(data.text); // Вывод текста без переноса строки } else if (eventType === 'message_stop') { console.log('\nОтвет завершен'); } }; // Отправка запроса const messages = [ { role: 'user', content: 'Расскажи о JavaScript' } ]; const options = { model: 'claude-3-7-sonnet-20240229', thinking: true, temperature: 0.7 }; const response = await sdk.chat.streamChatWithThinking( messages, options, handleEvent ); console.log(`Socket ID: ${response.socketId}`); ``` ## Работа с рассуждениями через WebSocket ```javascript // Создание рассуждения const reasoning = await sdk.reasoning.createReasoning({ projectId: 'project-id', query: 'Объясни этот проект' }); // Подключение к WebSocket для рассуждений await sdk.reasoning.connectWebSocket(reasoning.id); // Подписка на события sdk.reasoning.on('thinking', (data) => { console.log('Мышление:', data.content); }); sdk.reasoning.on('complete', (data) => { console.log('Результат:', data.content); // Отключение после завершения sdk.reasoning.disconnectWebSocket(); }); // Запуск рассуждения await sdk.reasoning.startReasoning(reasoning.id); ``` ## Настройка параметров WebSocket ```javascript // Настройка параметров WebSocket при создании SDK const sdk = new CodeSolverSDK({ baseURL: 'https://api.example.com', apiKey: 'your-api-key', websocket: { reconnect: true, // Автоматическое переподключение reconnectAttempts: 5, // Максимальное количество попыток reconnectDelay: 3000, // Задержка между попытками (мс) rejectUnauthorized: true, // Проверка SSL-сертификатов reconnectStrategy: 'exponential', // Стратегия задержки между попытками enableAutoPing: true, // Автоматический ping/pong pingInterval: 25000, // Интервал ping в мс enableSessionPersistence: true // Сохранение сессии } }); ``` ## Обработка ошибок в WebSocket ```javascript try { await sdk.projects.connectWebSocket(); // Подписка на события ошибок sdk.projects.on('error', (error) => { console.error('Ошибка WebSocket:', error.message); if (error.type === 'connection_error') { console.error('Проблема с подключением'); } else if (error.type === 'authentication_error') { console.error('Ошибка аутентификации'); } }); } catch (error) { console.error('Ошибка при подключении:', error.message); } ``` ## Модули с поддержкой WebSocket ### Чат и рассуждения ```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); } } ``` ## Настройка WebSocket ```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).