¿La configuración de incrustación de Gemini no pasa la dimensionalidad de salida?

Recibí un aviso de Google de que su modelo embedding-001 será obsoleto este mes y que debo cambiar a gemini-embedding-001 en su lugar, lo cual he hecho. Sin embargo, ahora tengo una gran cantidad de estos errores en mi registro de Discourse:

Error ERROR: se esperaban 768 dimensiones, no 3072 al consultar incrustaciones para el modelo Gemini embedding

Backtrace

activesupport-8.0.3/lib/active_support/broadcast_logger.rb:218:in `block in dispatch'
activesupport-8.0.3/lib/active_support/broadcast_logger.rb:217:in `map'
activesupport-8.0.3/lib/active_support/broadcast_logger.rb:217:in `dispatch'
activesupport-8.0.3/lib/active_support/broadcast_logger.rb:129:in `error'
/var/www/discourse/plugins/discourse-ai/lib/embeddings/schema.rb:279:in `rescue in symmetric_similarity_search'
/var/www/discourse/plugins/discourse-ai/lib/embeddings/schema.rb:195:in `symmetric_similarity_search'
/var/www/discourse/plugins/discourse-ai/lib/embeddings/semantic_related.rb:24:in `block in related_topic_ids_for'
/var/www/discourse/lib/cache.rb:93:in `fetch'
/var/www/discourse/plugins/discourse-ai/lib/embeddings/semantic_related.rb:21:in `related_topic_ids_for'
/var/www/discourse/plugins/discourse-ai/lib/embeddings/semantic_topic_query.rb:17:in `block in list_semantic_related_topics'
/var/www/discourse/lib/topic_query.rb:532:in `create_list'
/var/www/discourse/plugins/discourse-ai/lib/embeddings/semantic_topic_query.rb:16:in `list_semantic_related_topics'
/var/www/discourse/plugins/discourse-ai/lib/embeddings/entry_point.rb:23:in `block in inject_into'
/var/www/discourse/lib/plugin/instance.rb:435:in `public_send'
/var/www/discourse/lib/plugin/instance.rb:435:in `block (2 levels) in add_to_class'
/var/www/discourse/plugins/discourse-ai/lib/embeddings/entry_point.rb:11:in `block in inject_into'
/var/www/discourse/lib/discourse_plugin_registry.rb:299:in `apply_modifier'
/var/www/discourse/lib/topic_view.rb:726:in `suggested_topics'
/var/www/discourse/app/serializers/suggested_topics_mixin.rb:15:in `include_suggested_topics?'
active_model_serializers-0.8.4/lib/active_model/serializer.rb:375:in `include?'
(eval at active_model_serializers-0.8.4/lib/active_model/serializer.rb:467):7:in `_fast_attributes'
active_model_serializers-0.8.4/lib/active_model/serializer.rb:456:in `attributes'
active_model_serializers-0.8.4/lib/active_model/serializer.rb:480:in `_serializable_hash'
active_model_serializers-0.8.4/lib/active_model/serializer.rb:359:in `serializable_hash'
active_model_serializers-0.8.4/lib/active_model/serializer.rb:347:in `as_json'
activesupport-8.0.3/lib/active_support/json/encoding.rb:41:in `encode'
activesupport-8.0.3/lib/active_support/json/encoding.rb:41:in `encode'
activesupport-8.0.3/lib/active_support/core_ext/object/json.rb:42:in `to_json'
active_model_serializers-0.8.4/lib/active_model/serializer.rb:331:in `to_json'
multi_json-1.17.0/lib/multi_json/adapters/oj.rb:59:in `dump'
multi_json-1.17.0/lib/multi_json/adapters/oj.rb:59:in `dump'
multi_json-1.17.0/lib/multi_json/adapter.rb:26:in `dump'
multi_json-1.17.0/lib/multi_json.rb:128:in `dump'
/var/www/discourse/app/controllers/application_controller.rb:511:in `render_json_dump'
/var/www/discourse/app/controllers/topics_controller.rb:274:in `posts'
actionpack-8.0.3/lib/action_controller/metal/basic_implicit_render.rb:8:in `send_action'
actionpack-8.0.3/lib/abstract_controller/base.rb:215:in `process_action'
actionpack-8.0.3/lib/action_controller/metal/rendering.rb:193:in `process_action'
actionpack-8.0.3/lib/abstract_controller/callbacks.rb:261:in `block in process_action'
activesupport-8.0.3/lib/active_support/callbacks.rb:120:in `block in run_callbacks'
/var/www/discourse/app/controllers/application_controller.rb:432:in `block in with_resolved_locale'
i18n-1.14.7/lib/i18n.rb:353:in `with_locale'
/var/www/discourse/app/controllers/application_controller.rb:432:in `with_resolved_locale'
activesupport-8.0.3/lib/active_support/callbacks.rb:129:in `block in run_callbacks'
activesupport-8.0.3/lib/active_support/callbacks.rb:140:in `run_callbacks'
actionpack-8.0.3/lib/abstract_controller/callbacks.rb:260:in `process_action'
actionpack-8.0.3/lib/action_controller/metal/rescue.rb:27:in `process_action'
actionpack-8.0.3/lib/action_controller/metal/instrumentation.rb:76:in `block in process_action'
activesupport-8.0.3/lib/active_support/notifications.rb:210:in `block in instrument'
activesupport-8.0.3/lib/active_support/notifications/instrumenter.rb:58:in `instrument'
activesupport-8.0.3/lib/active_support/notifications.rb:210:in `instrument'
actionpack-8.0.3/lib/action_controller/metal/instrumentation.rb:75:in `process_action'
actionpack-8.0.3/lib/action_controller/metal/params_wrapper.rb:259:in `process_action'
activerecord-8.0.3/lib/active_record/railties/controller_runtime.rb:39:in `process_action'
actionpack-8.0.3/lib/abstract_controller/base.rb:152:in `process'
actionview-8.0.3/lib/action_view/rendering.rb:40:in `process'
rack-mini-profiler-4.0.1/lib/mini_profiler/profiling_methods.rb:90:in `block in profile_method'
actionpack-8.0.3/lib/action_controller/metal.rb:252:in `dispatch'
actionpack-8.0.3/lib/action_controller/metal.rb:335:in `dispatch'
actionpack-8.0.3/lib/action_dispatch/routing/route_set.rb:67:in `dispatch'
actionpack-8.0.3/lib/action_dispatch/routing/route_set.rb:50:in `serve'
actionpack-8.0.3/lib/action_dispatch/journey/router.rb:53:in `block in serve'
actionpack-8.0.3/lib/action_dispatch/journey/router.rb:133:in `block in find_routes'
actionpack-8.0.3/lib/action_dispatch/journey/router.rb:126:in `each'
actionpack-8.0.3/lib/action_dispatch/journey/router.rb:126:in `find_routes'
actionpack-8.0.3/lib/action_dispatch/journey/router.rb:34:in `serve'
actionpack-8.0.3/lib/action_dispatch/routing/route_set.rb:908:in `call'
/var/www/discourse/lib/middleware/omniauth_bypass_middleware.rb:35:in `call'
/var/www/discourse/lib/middleware/crawler_hooks.rb:11:in `call'
rack-2.2.18/lib/rack/tempfile_reaper.rb:15:in `call'
rack-2.2.18/lib/rack/conditional_get.rb:27:in `call'
rack-2.2.18/lib/rack/head.rb:12:in `call'
actionpack-8.0.3/lib/action_dispatch/http/permissions_policy.rb:38:in `call'
/var/www/discourse/lib/content_security_policy/middleware.rb:12:in `call'
/var/www/discourse/lib/middleware/anonymous_cache.rb:415:in `call'
/var/www/discourse/lib/middleware/csp_script_nonce_injector.rb:12:in `call'
/var/www/discourse/config/initializers/008-rack-cors.rb:14:in `call'
rack-2.2.18/lib/rack/session/abstract/id.rb:266:in `context'
rack-2.2.18/lib/rack/session/abstract/id.rb:260:in `call'
actionpack-8.0.3/lib/action_dispatch/middleware/cookies.rb:706:in `call'
actionpack-8.0.3/lib/action_dispatch/middleware/callbacks.rb:31:in `block in call'
activesupport-8.0.3/lib/active_support/callbacks.rb:100:in `run_callbacks'
actionpack-8.0.3/lib/action_dispatch/middleware/callbacks.rb:30:in `call'
actionpack-8.0.3/lib/action_dispatch/middleware/debug_exceptions.rb:31:in `call'
actionpack-8.0.3/lib/action_dispatch/middleware/show_exceptions.rb:32:in `call'
logster-2.20.1/lib/logster/middleware/reporter.rb:40:in `call'
/var/www/discourse/lib/middleware/default_headers.rb:13:in `call'
railties-8.0.3/lib/rails/rack/logger.rb:41:in `call_app'
railties-8.0.3/lib/rails/rack/logger.rb:29:in `call'
/var/www/discourse/config/initializers/100-quiet_logger.rb:20:in `call'
/var/www/discourse/config/initializers/100-silence_logger.rb:29:in `call'
actionpack-8.0.3/lib/action_dispatch/middleware/request_id.rb:34:in `call'
/var/www/discourse/lib/middleware/enforce_hostname.rb:23:in `call'
rack-2.2.18/lib/rack/method_override.rb:24:in `call'
actionpack-8.0.3/lib/action_dispatch/middleware/executor.rb:16:in `call'
rack-2.2.18/lib/rack/sendfile.rb:110:in `call'
rack-mini-profiler-4.0.1/lib/mini_profiler.rb:191:in `call'
/var/www/discourse/lib/middleware/processing_request.rb:12:in `call'
message_bus-4.4.1/lib/message_bus/rack/middleware.rb:60:in `call'
/var/www/discourse/lib/middleware/request_tracker.rb:410:in `call'
actionpack-8.0.3/lib/action_dispatch/middleware/remote_ip.rb:96:in `call'
railties-8.0.3/lib/rails/engine.rb:535:in `call'
railties-8.0.3/lib/rails/railtie.rb:226:in `public_send'
railties-8.0.3/lib/rails/railtie.rb:226:in `method_missing'
rack-2.2.18/lib/rack/urlmap.rb:74:in `block in call'
rack-2.2.18/lib/rack/urlmap.rb:58:in `each'
rack-2.2.18/lib/rack/urlmap.rb:58:in `call'
unicorn-6.1.0/lib/unicorn/http_server.rb:634:in `process_client'
unicorn-6.1.0/lib/unicorn/http_server.rb:739:in `worker_loop'
unicorn-6.1.0/lib/unicorn/http_server.rb:547:in `spawn_missing_workers'
unicorn-6.1.0/lib/unicorn/http_server.rb:143:in `start'
unicorn-6.1.0/bin/unicorn:128:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/bin/unicorn:25:in `load'
/var/www/discourse/vendor/bundle/ruby/3.3.0/bin/unicorn:25:in `<main>'

Env

HTTP HOSTS: discourse.spacecityweather.com```

Parece que el modelo gemini-embedding-001 devuelve vectores de 3072 dimensiones a menos que reciba un parámetro output_dimensionality en la carga útil JSON de la solicitud, y aunque se especifica “768” en la configuración de incrustaciones de Discourse, o bien el parámetro no se envía o no se reconoce.

Podría cambiar de proveedor, pero tengo créditos de Google Cloud que preferiría usar, por lo que preferiría seguir con Gemini para las incrustaciones.

¿Cuál es la solución aquí? ¿Necesito esperar un parche de Discourse o puedo configurar una nueva configuración de incrustaciones con Gemini que use vectores de 3072 dimensiones?

1 me gusta

¡Esto!

Dado que utilizamos Binary and Scalar Embedding Quantization for Significantly Faster & Cheaper Retrieval para nuestra indexación vectorial, el uso de vectores con grandes dimensiones es compatible y bienvenido.
Siempre debes configurar los Embeddings con su dimensionalidad nativa, a menos que marques la opción matryoshka_dimensions.

4 Me gusta

¡Entendido! Usaré embeddings de 3072 dimensiones y dejaré de preocuparme.

Después de haber creado una nueva configuración de embeddings y probado, ¿necesito ir a la consola de Rails y eliminar mis embeddings existentes y regenerarlos, o simplemente debo dejar Discourse en paz y dejar que haga lo suyo?

2 Me gusta

Después de que elimines la configuración de incrustaciones antigua, eventualmente limpiaremos la base de datos en una tarea en segundo plano.

3 Me gusta

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.