Поддержка OpenAI Azure эндпоинта для gpt-4-32k?

Здравствуйте,

У меня возникла проблема с конечной точкой OpenAI Azure. Похоже, она не работает должным образом для следующего URL:

https://***.openai.azure.com/openai/deployments/DEPLOYMENT_NAME/chat/completions?api-version=2023-07-01-preview

где DEPLOYMENT_NAME установлен в значение gpt-4-32k.

Не могли бы вы помочь решить эту проблему? Любые рекомендации или предложения будут очень полезны.

Кроме того, у меня есть несколько вопросов по поводу плагинов Discourse:

  1. Как сделать форк плагина Discourse: Не могли бы вы предоставить подробные инструкции или руководство по созданию форка существующего плагина Discourse?
  2. Тестирование форкнутного плагина: После создания форка плагина, какие шаги необходимо выполнить для тестирования этой версии на собственном экземпляре Discourse?
  3. Загрузка и активация плагина: После тестирования, как можно загрузить и активировать этот форкнутый плагин на своем экземпляре Discourse?

Ваша помощь в решении этих вопросов будет чрезвычайно полезной. Спасибо за ваше время и поддержку.

С наилучшими пожеланиями,

Вы настроили это в параметре ai openai gpt4 32k url?

Да, я проверил, но проблема, похоже, в том, что в файле lib/summarization/entry_point.rb gpt-4-32k-2023-07-01-preview вообще не обрабатывается.

module DiscourseAi
  module Summarization
    class EntryPoint
      def inject_into(plugin)
        foldable_models = [
          Models::OpenAi.new("gpt-4", max_tokens: 8192),
          Models::OpenAi.new("gpt-4-32k", max_tokens: 32_768),
          Models::OpenAi.new("gpt-4-1106-preview", max_tokens: 100_000),
          Models::OpenAi.new("gpt-3.5-turbo", max_tokens: 4096),
          Models::OpenAi.new("gpt-3.5-turbo-16k", max_tokens: 16_384),
          Models::Anthropic.new("claude-2", max_tokens: 200_000),
          Models::Anthropic.new("claude-instant-1", max_tokens: 100_000),
          Models::Llama2.new("Llama2-chat-hf", max_tokens: SiteSetting.ai_hugging_face_token_limit),
          Models::Llama2FineTunedOrcaStyle.new(
            "StableBeluga2",
            max_tokens: SiteSetting.ai_hugging_face_token_limit,
          ),
          Models::Gemini.new("gemini-pro", max_tokens: 32_768),
          Models::Mixtral.new("mistralai/Mixtral-8x7B-Instruct-v0.1", max_tokens: 32_000),
        ]

        foldable_models.each do |model|
          plugin.register_summarization_strategy(Strategies::FoldContent.new(model))
        end

        truncable_models = [
          Models::Discourse.new("long-t5-tglobal-base-16384-book-summary", max_tokens: 16_384),
          Models::Discourse.new("bart-large-cnn-samsum", max_tokens: 1024),
          Models::Discourse.new("flan-t5-base-samsum", max_tokens: 512),
        ]

        truncable_models.each do |model|
          plugin.register_summarization_strategy(Strategies::TruncateContent.new(model))
        end
      end
    end
  end
end

Мы видим эту ошибку в логах:

DiscourseAi::Completions::Endpoints::OpenAi: status: 400 - body: {
  "error": {
    "message": "Unrecognized request argument supplied: tools",
    "type": "invalid_request_error",
    "param": null,
    "code": null
  }
}


 
Подготовка payload с prompt: [{:role=>"system", :content=>"Вы — полезный помощник Discourse.\nВы _понимаете_ и **генерируете** Markdown для Discourse.\nВы находитесь в сообщении форума Discourse.\n\nВы находитесь в форуме с URL: https://<URL>\nНазвание вашего сайта: Discourse\nОписание: \nУчастники этого разговора: gpt4_bot, Chris\nТекущая дата: 2024-01-19 10:10:05 UTC, с момента вашего обучения многое изменилось.\n\nВы обучались на СТАРЫХ данных, используйте поиск для получения актуальной информации об этом форуме.\nПри поиске старайтесь УПРОЩАТЬ поисковые запросы.\nПоиск в Discourse объединяет все термины через AND. Уменьшите и упростите термины, чтобы найти больше результатов."}, {:role=>"user", :content=>"comment faire une boucle en dart ?", :name=>"Chris"}], model_params: {}, dialect: #<DiscourseAi::Completions::Dialects::ChatGpt:0x00007f230513e6e0>

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

Нет, я не думаю, что это специфика Microsoft Azure. Я тестировал запросы на чистом JavaScript, и они работают без проблем, без какого-либо понятия «инструментов». Здесь у меня складывается впечатление, что проблема в плагине (уточню, что я не разработчик на Ruby), но, похоже, используемый слой абстракции всё усложняет. На всякий случай мы форкнули этот плагин и повсюду расставили отладчики: URL и заголовки, отправляемые в Azure, на 100% корректны.

DiscourseAi::Completions::Endpoints::OpenAi: status: 400 - body: { “error”: { “message”: “Unrecognized request argument supplied: tools”, “type”: “invalid_request_error”, “param”: null, “code”: null } }

Кажется, единственное место, где у нас вызывается «инструменты» (tools) в ./lib/completions/endpoints/open_ai.rb (DiscourseAi::Completions::Endpoints::OpenAi), это:

    def prepare_payload(prompt, model_params, dialect)
      Rails.logger.warn("Preparing payload with prompt: #{prompt}, model_params: #{model_params}, dialect: #{dialect}")
      default_options
        .merge(model_params)
        .merge(messages: prompt)
        .tap do |payload|
          payload[:stream] = true if @streaming_mode
          payload[:tools] = dialect.tools if dialect.tools.present?
        end
    end

что, похоже, ведёт нас к ./lib/completions/dialects/chat_gpt.rb (payload[:tools] = dialect.tools if dialect.tools.present?).

Из сообщения PEYRUSSE Christian мы видим, что «dialect» — это «dialect: #DiscourseAi::Completions::Dialects::ChatGpt:0x00007f230513e6e0».

Если это может помочь…

Спасибо.

Это не так, если вы используете актуальную конечную точку.

Мы используем конечные точки Azure на этом сайте, но с параметром api-version=2023-12-01-preview. Можете ли вы попробовать использовать конечную точку с этой версией API?

Мы изучим это и обязательно сообщим вам на следующей неделе. С уважением.

Здравствуйте,

Сегодня утром я обновил плагины Discourse AI, и теперь всё работает… Это отлично, спасибо за вашу помощь.