Войти
Работа с API

Потоковая передача

Скопировать

API NeuroAPI позволяет получать потоковые ответы от любой модели. Это полезно для создания чат-интерфейсов или других приложений, где пользовательский интерфейс должен обновляться по мере генерации ответа моделью.

Чтобы включить потоковую передачу, установите параметр stream в true в вашем запросе. Модель будет передавать ответ клиенту по частям (чанками), а не возвращать весь ответ сразу.

Пример обработки потока

import requests
import json

response = requests.post(
  url="https://neuroapi.host/v1/chat/completions",
  headers={
    "Authorization": "Bearer <YOUR_API_KEY>",
    "Content-Type": "application/json"
  },
  json={
    "model": "gpt-4o",
    "messages": [{"role": "user", "content": "Напиши длинную историю о космосе"}],
    "stream": True
  },
  stream=True
)

buffer = ""
for chunk in response.iter_content(chunk_size=None, decode_unicode=True):
  buffer += chunk
  while '\n\n' in buffer:
    line, buffer = buffer.split('\n\n', 1)
    if line.startswith('data: '):
      data = line[6:]
      if data == '[DONE]':
        print("\n\n--- Стрим завершён ---")
        break
      try:
        data_obj = json.loads(data)
        content = data_obj["choices"][0]["delta"].get("content")
        if content:
          print(content, end="", flush=True)
      except json.JSONDecodeError:
        # Игнорируем некорректный JSON, это может быть ping-сообщение
        pass

Дополнительная информация

Keep-Alive сообщения: Для поддержания соединения API периодически отправляет keep-alive сообщения в формате : PING. Эти сообщения не начинаются с data: и должны игнорироваться вашим парсером событий (SSE). Наши примеры кода уже учитывают это.

Отмена потока

Потоковые запросы можно отменить, прервав соединение. Для поддерживаемых провайдеров это немедленно остановит обработку модели и биллинг.

Для этого в JavaScript используется AbortController, а в Python можно использовать более сложные механизмы, такие как threading.Event для сигнализации об отмене.

const controller = new AbortController();

async function cancelableStream() {
  try {
    const response = await fetch(
      'https://neuroapi.host/v1/chat/completions',
      {
        method: 'POST',
        headers: {
          Authorization: 'Bearer <YOUR_API_KEY>',
          'Content-Type': 'application/json',
        },
        body: JSON.stringify({
          model: 'gpt-4o',
          messages: [{ role: 'user', content: 'Напиши очень длинную историю' }],
          stream: true,
        }),
        signal: controller.signal, // Передаём AbortSignal
      },
    );

    // ... обработка стрима
    
  } catch (error) {
    if (error.name === 'AbortError') {
      console.log('Поток был отменён');
    } else {
      console.error('Произошла ошибка:', error);
    }
  }
}

// Запускаем стрим
cancelableStream();

// Отменяем стрим через 1 секунду
setTimeout(() => {
  controller.abort();
}, 1000);
Важно: Отмена работает только для потоковых запросов к поддерживающим отмену провайдерам. Для не-потоковых запросов или неподдерживаемых провайдеров модель продолжит обработку, и вам будет выставлен счет за полный ответ.