# Потоковая передача мышления

Метод `streamChatWithThinking()` позволяет получать не только финальный ответ модели, но и её размышления в процессе формирования ответа. Этот подход даёт более глубокое понимание логики модели и возможность видеть её работу в режиме реального времени.

## Быстрый старт

```javascript
const { CodeSolverSDK } = require('solver-sdk');

async function example() {
  // Инициализация SDK
  const sdk = new CodeSolverSDK({
    baseURL: 'https://api.example.com',
    apiKey: 'ваш-ключ-api'
  });
  
  // Сообщения для отправки
  const messages = [
    { role: 'user', content: 'Объясни, как работает квантовая криптография' }
  ];
  
  // Опции запроса
  const options = {
    model: 'claude-3-7-sonnet-20240229',
    thinking: true,  // Включаем передачу мышления
    temperature: 0.7
  };
  
  // Обработчик потоковых данных
  const handleStream = (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('Ответ завершён');
    }
  };
  
  try {
    // Отправляем запрос с потоковым мышлением
    await sdk.chat.streamChatWithThinking(
      messages,
      options,
      handleStream
    );
  } catch (error) {
    // Обработка ошибок соединения
    if (error.code === 'CONNECTION_ERROR') {
      console.error('Проблема с подключением к серверу');
    }
    // Обработка прочих ошибок
    else {
      console.error('Произошла ошибка:', error.message);
    }
  }
}

example();
```

## Метод streamChatWithThinking

### Синтаксис

```javascript
sdk.chat.streamChatWithThinking(messages, options, callback)
```

### Параметры

| Параметр | Тип | Описание |
|----------|-----|----------|
| `messages` | Array | Массив сообщений для отправки модели |
| `options` | Object | Параметры запроса, включая модель и флаг `thinking: true` |
| `callback` | Function | Функция обратного вызова для обработки событий потока |

### Возвращаемое значение

Промис, который разрешается объектом с информацией о соединении:

```javascript
{
  status: 'streaming',
  socketId: 'socket_12345678',
  provider: 'AnthropicProviderAdapter',
  model: 'claude-3-7-sonnet-20240229'
}
```

## Примеры использования

### Обработка мышления и ответа с выводом в UI

```javascript
// Предполагаем наличие элементов UI для вывода мышления и ответа
const thinkingElement = document.getElementById('thinking-output');
const responseElement = document.getElementById('response-output');

// Обработчик потока
const handleStream = (eventType, data) => {
  if (eventType === 'content_block_delta') {
    // Обработка мышления
    if (data.delta?.type === 'thinking_delta') {
      thinkingElement.textContent += data.delta.thinking;
    }
    // Обработка ответа
    else if (data.delta?.type === 'text_delta') {
      responseElement.textContent += data.delta.text;
    }
  }
};

// Отправка запроса
sdk.chat.streamChatWithThinking(
  [{ role: 'user', content: userInput }],
  { model: 'claude-3-7-sonnet-20240229', thinking: true },
  handleStream
);
```

### Обработка ошибок

```javascript
try {
  await sdk.chat.streamChatWithThinking(
    messages,
    options,
    handleStream
  );
} catch (error) {
  // Обработка ошибок соединения
  if (error.code === 'CONNECTION_ERROR') {
    console.error('Проблема с подключением к серверу');
  }
  // Обработка прочих ошибок
  else {
    console.error('Произошла ошибка:', error.message);
  }
}
```

## Рекомендации по использованию

- **Включайте режим мышления** только когда это необходимо (опция `thinking: true`), так как это увеличивает объем передаваемых данных
- **Используйте буферизацию** при отображении потоковых данных в UI, чтобы снизить нагрузку на рендеринг
- **Обрабатывайте все типы событий**, особенно `error` и `message_stop`
- **Учитывайте объем данных** - поток мышления может быть очень большим для сложных запросов

## Ограничения

- Не все модели поддерживают режим мышления (убедитесь, что используете совместимую модель)
- Требуется стабильное интернет-соединение для потоковой передачи