Работа с 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);
    Важно: Отмена работает только для потоковых запросов к поддерживающим отмену провайдерам. Для не-потоковых запросов или неподдерживаемых провайдеров модель продолжит обработку, и вам будет выставлен счет за полный ответ.