Problème avec Gemini Embeddings après la mise à jour de Discourse vers 3.6.0 Beta 2

Quelque chose s’est produit après la mise à jour de discourse vers la version 2.6.0 beta 2, les embeddings ont cessé de fonctionner et je n’arrive pas à comprendre pourquoi.

J’utilise les LLM Gemini Flash et Flash Lite, et ils fonctionnent parfaitement, le bot IA fonctionne, etc.

Cependant, lorsque je vais dans le modèle d’embedding et que j’exécute test sur l’embedding Gemini, j’obtiens cette erreur (et les logs en sont également remplis) :

 Trying to contact the model returned this error: { "error": { "code": 429, "message": "You exceeded your current quota, please check your plan and billing details. For more information on this error, head to: https://ai.google.dev/gemini-api/docs/rate-limits.\n* Quota exceeded for metric: generativelanguage.googleapis.com/embed_content_free_tier_requests, limit: 0\n* Quota exceeded for metric: generativelanguage.googleapis.com/embed_content_free_tier_requests, limit: 0\n* Quota exceeded for metric: generativelanguage.googleapis.com/embed_content_free_tier_requests, limit: 0\n* Quota exceeded for metric: generativelanguage.googleapis.com/embed_content_free_tier_requests, limit: 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": "Learn more about Gemini API quotas", "url": "https://ai.google.dev/gemini-api/docs/rate-limits" } ] } ] } }

Cela fonctionnait parfaitement jusqu’à la version 3.6.0 beta 1, après la mise à jour vers la beta 2, cette erreur a commencé à apparaître. J’utilise la même clé pour cet embedding que pour le LLM. J’ai même essayé de générer une nouvelle clé, j’ai attendu 48 heures, etc., et rien ne semble résoudre ce problème.

Quelqu’un peut-il me conseiller sur la raison pour laquelle cela a soudainement cessé de fonctionner, pourquoi le bot IA LLM fonctionne mais pas celui-ci, et comment puis-je le réparer ?

Je vais répondre à mon propre post. Le problème ne vient pas de la construction, mais du moment. En octobre, Google a rendu obsolète le modèle d’intégration actuel (embedding-001), il a donc cessé de fonctionner. Le nouveau modèle est gemini-embedding-001.

Vous devez modifier la configuration d’intégration de
https://generativelanguage.googleapis.com/v1beta/models/embedding-001:embedContent
à
https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-001:embedContent

Vous pouvez trouver les détails ici : https://ai.google.dev/gemini-api/docs/embeddings

@Falco, peut-être que la configuration par défaut de Gemini doit être mise à jour dans Discourse, lors de la création d’une nouvelle intégration Gemini, elle utilise toujours embedding-001 au lieu de gemini-embedding-001.

1 « J'aime »

…et il semble que discourse ne soit pas configuré pour gérer le nouveau modèle gemini-embedding-001. Le test Run test fonctionne bien, mais lorsque j’essaie de rechercher sur le forum, je vois maintenant ces erreurs dans les journaux :

Message (2 copies signalées)

Erreur ERREUR : attendu 768 dimensions, pas 3072
 interroger les embeddings pour le modèle gemini

Backtrace

/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'
Message (2 copies signalées)

Échec du traitement correct de la réponse détournée : DiscourseAi::Embeddings::Schema::MissingEmbeddingError : DiscourseAi::Embeddings::Schema::MissingEmbeddingError

Backtrace

/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'

…et ce qui semble fonctionner, c’est de créer un nouveau modèle et de changer les Embedding dimensions à 3072 au lieu des 768 par défaut.

Il est possible que les embeddings gemini de discourse nécessitent une refonte de leurs paramètres par défaut, et un petit guide « Comment configurer les embeddings gemini » dans le premier message pourrait également être une bonne idée.

1 « J'aime »

Doublon de Le réglage de l’intégration Gemini ne transmet pas output_dimensionality ?