Задать вопрос
@pahom-ka

Почему Chat GPT возвращает 1 результат вместо 2-х?

Отправляю пакет из 2 задач файлом, в отложенные задачи - batch.
Задачи создаются, отправляются в пул, мониторятся и видно, что их там 2. Дожидаюсь выполнения, иду забирать - возвращает результат только по 1 задаче, по первой. Как так? Ответ смотрю прямо в ответе библиотеки в отладчике, да, приходит 1 ответ.
На той же кодовой базе крутятся другие сервисы, использующие отложенные задачи chatgpt, но они все корректно выполняются... В чем может быть причина? Деньги на балансе есть.

Код, картинки и прочее:
rPman, да собственно как в документации...
Вот так собирается запрос
prompt_batch_data = []
    prompt_description = f"большой промпт"
    prompt_description_jsonl_object = ai_batch_generate(1, prompt_description)
    prompt_title = f"маленький промпт"
    prompt_title_jsonl_object = ai_batch_generate(2, prompt_title)
    prompt_batch_data.extend([prompt_description_jsonl_object, prompt_title_jsonl_object])
    task_id = process_batch(
        prompt_batch_data=prompt_batch_data,
        filename="article_plan.jsonl",
        description="article_plan",
        client=client
    )


вспомогательные функции
def ai_batch_generate(custom_id, prompt, role):
    """
    Формирует jsonl объект для batch запросов
    :param custom_id:  Список id данных, только уникальные в рамках текущей задачи id
    :param prompt: Сформированный промпт
    :param role: роль нейронки в запросе
    :return: 
    """
    prompt_batch_data = []
    jsonl_object = {
        "custom_id": str(custom_id),
        "method": "POST",
        "url": "/v1/chat/completions",
        "body": {
            "model": "gpt-4o",
            "messages": [
                {"role": "system", "content": role},
                {"role": "user",
                 "content": prompt}
            ],
            "max_tokens": 1500
        }
    }

    return jsonl_object


def process_batch(
        prompt_batch_data,
        filename,
        description,
        client
):
    """
    Обрабатывает данные батча: сохраняет в .jsonl, отправляет в OpenAI,
    создаёт задачу и запускает мониторинг.

    :param prompt_batch_data: Список словарей с данными для генерации.
    :param filename: Имя выходного файла (.jsonl).
    :param description: Описание задачи (будет использоваться в метаданных).
    :param client: Клиент OpenAI с методами `files.create` и `batches.create`.
    """
    # Сохраняем данные в .jsonl файл
    with open(filename, 'w', encoding='utf-8') as f:
        for item in prompt_batch_data:
            f.write(json.dumps(item, ensure_ascii=False) + "\n")

    # Загружаем файл в OpenAI
    batch_input_file = client.files.create(
        file=open(filename, "rb"),
        purpose="batch"
    )
    batch_input_file_id = batch_input_file.id

    # Создаем батч-запрос
    send_batch = client.batches.create(
        input_file_id=batch_input_file_id,
        endpoint="/v1/chat/completions",
        completion_window="24h",
        metadata={
            "description": description
        }
    )
    task_id = send_batch.id
    logging.info(f"Генерация '{description}' отправлена в нейронку, задача: {task_id}")
    return task_id

Потом мониторю ответ, получаю вот такой
nSqgMvShSSGL7eX1S8sM1Q.jpeg
обращаюсь по этому output_file_id
batch_data = client.files.content(batch_file)
    jsonl_string = batch_data.text

    # Результирующий список
    prompt_batch_data = []
    # Обрабатываем строки файла построчно
    json_object = json.loads(jsonl_string[0])  # Преобразуем строку в JSON-объект
    custom_id = json_object['custom_id']  # Извлекаем custom_id
    content = json_object['response']['body']['choices'][0]['message']['content']
    content = prepare_content(content)  # Извлекаем и очищаем контент

и просто заглядывая в ответ chatgpt вижу такой ответ:
{
  "id": "batch_req_67fcf1bf76588190b9a6cf7b871babfb",
  "custom_id": "1",
  "response": {
    "status_code": 200,
    "request_id": "bf2823953630da7654984be23c14703b",
    "body": {
      "id": "chatcmpl-BMCIlgiLSLFb3I3pUImzV1115A3D9",
      "object": "chat.completion",
      "created": 1744630203,
      "model": "gpt-4o-2024-08-06",
      "choices": [
        {
          "index": 0,
          "message": {
            "role": "assistant",
            "content": "ответ",
            "refusal": null,
            "annotations": []
          },
          "logprobs": null,
          "finish_reason": "stop"
        }
      ],
      "usage": {
        "prompt_tokens": 106,
        "completion_tokens": 309,
        "total_tokens": 415,
        "prompt_tokens_details": {
          "cached_tokens": 0,
          "audio_tokens": 0
        },
        "completion_tokens_details": {
          "reasoning_tokens": 0,
          "audio_tokens": 0,
          "accepted_prediction_tokens": 0,
          "rejected_prediction_tokens": 0
        }
      },
      "service_tier": "default",
      "system_fingerprint": "fp_fa860cbac8"
    }
  },
  "error": null
}

то есть данные только для custom_id 1, данных по custom_id 2 нет.
  • Вопрос задан
  • 79 просмотров
Подписаться 2 Простой 3 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы