Discourse 3.6.0 Beta 2 업데이트 후 Gemini Embeddings 문제

discourse를 3.6.0 beta 2로 업데이트한 후 문제가 발생했습니다. 임베딩(Embeddings)이 작동하지 않고 원인을 파악하지 못하고 있습니다.

저는 Gemini Flash와 Flash Lite LLM을 사용 중이며, 이들은 완벽하게 작동하고 있고 AI 봇도 정상적으로 동작합니다. 그러나 무언가를 검색할 때 500 오류가 발생합니다.

임베딩 모델로 이동하여 gemini 임베딩에 대해 test를 실행하면 다음과 같은 오류가 나타납니다(로그에도 이 오류가 가득 차 있습니다).

 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" } ] } ] } }

3.6.0 beta 1까지는 완벽하게 작동했는데, beta 2로 업데이트한 후부터 이 오류가 발생하기 시작했습니다. LLM과 동일한 키를 이 임베딩에도 사용하고 있습니다. 새로운 키를 생성해 보거나 48시간을 기다려 보았지만, 어떤 시도도 문제를 해결하지 못했습니다.

갑작스럽게 작동이 멈춘 이유, LLM AI 봇은 작동하는데 이 임베딩만 작동하지 않는 이유, 그리고 어떻게 수정해야 하는지 조언을 주실 수 있을까요?

제 스스로 질문에 답변을 올리겠습니다. 문제는 빌드가 아니라 타이밍입니다. 10월에 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 임베딩을 생성할 때 여전히 embedding-001 대신 gemini-embedding-001을 사용하도록 discourse의 기본 gemini 구성을 업데이트해야 하지 않을까요?

…그리고 discourse가 새로운 gemini-embedding-001 모델을 처리하도록 설정되어 있지 않은 것 같습니다. _Run test_는 정상적으로 작동하지만, 포럼을 검색하려고 하면 이제 로그에 이러한 오류가 표시됩니다:

Message (2 copies reported)

Error ERROR:  expected 768 dimensions, not 3072
 querying embeddings for model 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 reported)

Failed to process hijacked response correctly : 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'

…그리고 새로운 모델을 생성하고 Embedding dimensions(임베딩 차원)을 기본값인 768 대신 3072로 변경하는 것이 작동하는 것 같습니다.

discourse의 gemini 임베딩은 기본 설정에 대한 전면적인 재검토가 필요할 수 있으며, 첫 번째 게시물에 'gemini 임베딩 설정 방법’에 대한 간단한 가이드를 추가하는 것도 좋은 아이디어일 수 있습니다.

Gemini 임베딩 설정에서 output_dimensionality가 전달되지 않나요?의 중복입니다.