Проблема с эмбеддингами Gemini после обновления Discourse до 3.6.0 Beta 2

После обновления Discourse до версии 3.6.0 beta 2 embeddings перестали работать, и я не могу понять почему.

Я использую модели Gemini Flash и Flash Lite LLM, они работают отлично, AI-бот функционирует и так далее. Однако при поиске возникает ошибка 500.

Когда я перехожу к модели Embedding и запускаю test для gemini embedding, получаю эту ошибку (и логи тоже полны ею):

 Trying to contact the model returned this error: { "error": { "code": 429, "message": "Вы превысили свой текущий лимит, пожалуйста, проверьте свой тарифный план и данные биллинга. Подробнее об этой ошибке: https://ai.google.dev/gemini-api/docs/rate-limits.\n* Превышен лимит для метрики: generativelanguage.googleapis.com/embed_content_free_tier_requests, лимит: 0\n* Превышен лимит для метрики: generativelanguage.googleapis.com/embed_content_free_tier_requests, лимит: 0\n* Превышен лимит для метрики: generativelanguage.googleapis.com/embed_content_free_tier_requests, лимит: 0\n* Превышен лимит для метрики: generativelanguage.googleapis.com/embed_content_free_tier_requests, лимит: 0", "status": "RESOURCE_EXHAUSTED", "details": [ { "@type": "type.googleapis.com/google.rpc.QuotaFailure", "violations": [ { "quotaMetric": "generativelanguage.googleapis.com/embed_content_free_tier_requests", "quotaId": "EmbedContentRequestsPerMinutePerProjectPerModel-FreeTier" }, { "quotaMetric": "generativelanguage.googleapis.com/embed_content_free_tier_requests", "quotaId": "EmbedContentRequestsPerMinutePerUserPerProjectPerModel-FreeTier" }, { "quotaMetric": "generativelanguage.googleapis.com/embed_content_free_tier_requests", "quotaId": "EmbedContentRequestsPerDayPerUserPerProjectPerModel-FreeTier" }, { "quotaMetric": "generativelanguage.googleapis.com/embed_content_free_tier_requests", "quotaId": "EmbedContentRequestsPerDayPerProjectPerModel-FreeTier" } ] }, { "@type": "type.googleapis.com/google.rpc.Help", "links": [ { "description": "Узнать больше о лимитах Gemini API", "url": "https://ai.google.dev/gemini-api/docs/rate-limits" } ] } ] } }

До версии 3.6.0 beta 1 всё работало отлично, но после обновления до beta 2 началась эта ошибка. Я использую тот же ключ для этого embedding, что и для LLM. Я даже пробовал сгенерировать новый ключ, ждал 48 часов и так далее, но ничего не помогает.

Может кто-то подсказать, почему это внезапно перестало работать, почему AI-бот LLM функционирует, а embeddings — нет, и как это исправить?

Я отвечу сам на свой пост. Проблема не в сборке, а во времени. В октябре Google сделал текущую модель встраивания (embedding-001) устаревшей, и она перестала работать. Новая модель — gemini-embedding-001.

В конфигурации встраивания (Администрирование → Плагины → Discourse AI → Встраивания → Изменить) нужно изменить URL службы встраивания с
https://generativelanguage.googleapis.com/v1beta/models/embedding-001:embedContent

на

https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-001:embedContent

Подробности можно найти здесь: https://ai.google.dev/gemini-api/docs/embeddings

@Falco, возможно, конфигурация Gemini по умолчанию в Discourse требует обновления: при создании нового встраивания Gemini всё ещё используется embedding-001 вместо gemini-embedding-001.

…и, похоже, что Discourse не настроен для работы с новой моделью gemini-embedding-001. Тест «Запуск теста» проходит успешно, но при попытке поиска по форуму в логах теперь появляются следующие ошибки:

Сообщение (2 сообщения в отчёте)

Ошибка ERROR: ожидалось 768 измерений, а не 3072
запрос вложений для модели gemini

Трассировка стека

/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-8.0.3/lib/active_support/broadcast_logger.rb:218:in `block in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-8.0.3/lib/active_support/broadcast_logger.rb:217:in `map'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-8.0.3/lib/active_support/broadcast_logger.rb:217:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-8.0.3/lib/active_support/broadcast_logger.rb:129:in `error'
/var/www/discourse/plugins/discourse-ai/lib/embeddings/schema.rb:192:in `rescue in asymmetric_similarity_search'
/var/www/discourse/plugins/discourse-ai/lib/embeddings/schema.rb:139:in `asymmetric_similarity_search'
/var/www/discourse/plugins/discourse-ai/lib/embeddings/semantic_search.rb:89:in `search_for_topics'
/var/www/discourse/plugins/discourse-ai/app/controllers/discourse_ai/embeddings/embeddings_controller.rb:56:in `block in search'
/var/www/discourse/lib/hijack.rb:68:in `instance_eval'
/var/www/discourse/lib/hijack.rb:68:in `block (2 levels) in hijack'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/i18n-1.14.7/lib/i18n.rb:353:in `with_locale'
/var/www/discourse/lib/hijack.rb:68:in `block in hijack'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:911:in `callback_on_resolution'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:797:in `call_callback'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:803:in `call_callbacks'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:692:in `resolve_with'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:1325:in `resolve'
/var/www/discourse/lib/scheduler/defer.rb:125:in `block in do_work'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-7.0.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-7.0.0/lib/rails_multisite/connection_management.rb:17:in `with_connection'
/var/www/discourse/lib/scheduler/defer.rb:119:in `do_work'
/var/www/discourse/lib/scheduler/defer.rb:105:in `block (2 levels) in start_thread'
Сообщение (2 сообщения в отчёте)

Не удалось корректно обработать перехваченный ответ: DiscourseAi::Embeddings::Schema::MissingEmbeddingError : DiscourseAi::Embeddings::Schema::MissingEmbeddingError

Трассировка стека

/var/www/discourse/plugins/discourse-ai/lib/embeddings/schema.rb:193:in `rescue in asymmetric_similarity_search'
/var/www/discourse/plugins/discourse-ai/lib/embeddings/schema.rb:139:in `asymmetric_similarity_search'
/var/www/discourse/plugins/discourse-ai/lib/embeddings/semantic_search.rb:89:in `search_for_topics'
/var/www/discourse/plugins/discourse-ai/app/controllers/discourse_ai/embeddings/embeddings_controller.rb:56:in `block in search'
/var/www/discourse/lib/hijack.rb:68:in `instance_eval'
/var/www/discourse/lib/hijack.rb:68:in `block (2 levels) in hijack'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/i18n-1.14.7/lib/i18n.rb:353:in `with_locale'
/var/www/discourse/lib/hijack.rb:68:in `block in hijack'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:911:in `callback_on_resolution'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:797:in `call_callback'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:803:in `call_callbacks'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:692:in `resolve_with'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:1325:in `resolve'
/var/www/discourse/lib/scheduler/defer.rb:125:in `block in do_work'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-7.0.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-7.0.0/lib/rails_multisite/connection_management.rb:17:in `with_connection'
/var/www/discourse/lib/scheduler/defer.rb:119:in `do_work'
/var/www/discourse/lib/scheduler/defer.rb:105:in `block (2 levels) in start_thread'

…и то, что, похоже, работает, — это создание новой модели и изменение параметра Размерность вложений на 3072 вместо значения по умолчанию 768.

Возможно, для вложений Gemini в Discourse потребуется пересмотреть настройки по умолчанию, а также было бы неплохо добавить краткую инструкцию «Как настроить вложения Gemini» в первом посте.

Дубликат Настройка встраивания Gemini не передаёт output_dimensionality?