From d5daa9ef389f298e6113ca976a95871fe3ec2191 Mon Sep 17 00:00:00 2001 From: Dmitry Gruzd Date: Thu, 20 Apr 2023 12:56:20 +0200 Subject: [PATCH 1/4] Add the tanuki_bot migration/model Changelog: added EE: true --- .gitlab/ci/global.gitlab-ci.yml | 36 ++++++++++++------- Gemfile | 2 ++ Gemfile.checksum | 1 + Gemfile.lock | 3 ++ config/database.yml.decomposed-postgresql | 7 ++++ config/database.yml.postgresql | 7 ++++ ee/app/models/embedding/tanuki_bot.rb | 12 +++++++ ee/db/embedding/docs/tanuki_bot_mvc.yml | 10 ++++++ .../20230420103900_create_tanuki_bot_mvc.rb | 20 +++++++++++ .../schema_migrations/20230420103900 | 1 + ee/db/embedding/structure.sql | 30 ++++++++++++++++ ee/spec/factories/embedding/tanuki_bot.rb | 18 ++++++++++ ee/spec/models/embedding/tanuki_bot_spec.rb | 19 ++++++++++ scripts/prepare_build.sh | 9 +++++ 14 files changed, 163 insertions(+), 12 deletions(-) create mode 100644 ee/app/models/embedding/tanuki_bot.rb create mode 100644 ee/db/embedding/docs/tanuki_bot_mvc.yml create mode 100644 ee/db/embedding/migrate/20230420103900_create_tanuki_bot_mvc.rb create mode 100644 ee/db/embedding/schema_migrations/20230420103900 create mode 100644 ee/spec/factories/embedding/tanuki_bot.rb create mode 100644 ee/spec/models/embedding/tanuki_bot_spec.rb diff --git a/.gitlab/ci/global.gitlab-ci.yml b/.gitlab/ci/global.gitlab-ci.yml index 02e13be9a7eb81..23f4aef866c999 100644 --- a/.gitlab/ci/global.gitlab-ci.yml +++ b/.gitlab/ci/global.gitlab-ci.yml @@ -219,8 +219,9 @@ .use-pg12: services: - - name: postgres:12 + - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-12-pgvector-0.4.1 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + alias: postgres - name: redis:6.0-alpine variables: POSTGRES_HOST_AUTH_METHOD: trust @@ -228,8 +229,9 @@ .use-pg13: services: - - name: postgres:13 + - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-13-pgvector-0.4.1 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + alias: postgres - name: redis:6.2-alpine variables: POSTGRES_HOST_AUTH_METHOD: trust @@ -237,8 +239,9 @@ .use-pg14: services: - - name: postgres:14 + - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-14-pgvector-0.4.1 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + alias: postgres - name: redis:6.2-alpine variables: POSTGRES_HOST_AUTH_METHOD: trust @@ -246,8 +249,9 @@ .use-pg12-es7-ee: services: - - name: postgres:12 + - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-12-pgvector-0.4.1 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + alias: postgres - name: redis:6.0-alpine - name: elasticsearch:7.17.6 command: ["elasticsearch", "-E", "discovery.type=single-node", "-E", "xpack.security.enabled=false"] @@ -261,8 +265,9 @@ .use-pg13-es7-ee: services: - - name: postgres:13 + - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-13-pgvector-0.4.1 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + alias: postgres - name: redis:6.2-alpine - name: elasticsearch:7.17.6 command: ["elasticsearch", "-E", "discovery.type=single-node", "-E", "xpack.security.enabled=false"] @@ -276,8 +281,9 @@ .use-pg14-es7-ee: services: - - name: postgres:14 + - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-14-pgvector-0.4.1 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + alias: postgres - name: redis:6.2-alpine - name: elasticsearch:7.17.6 command: ["elasticsearch", "-E", "discovery.type=single-node", "-E", "xpack.security.enabled=false"] @@ -291,8 +297,9 @@ .use-pg13-es8-ee: services: - - name: postgres:13 + - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-13-pgvector-0.4.1 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + alias: postgres - name: redis:6.0-alpine - name: elasticsearch:8.6.2 - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.0 @@ -307,8 +314,9 @@ .use-pg14-es8-ee: services: - - name: postgres:14 + - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-14-pgvector-0.4.1 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + alias: postgres - name: redis:6.0-alpine - name: elasticsearch:8.6.2 - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.0 @@ -323,8 +331,9 @@ .use-pg13-opensearch1-ee: services: - - name: postgres:13 + - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-13-pgvector-0.4.1 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + alias: postgres - name: redis:6.0-alpine - name: opensearchproject/opensearch:1.3.5 alias: elasticsearch @@ -339,8 +348,9 @@ .use-pg13-opensearch2-ee: services: - - name: postgres:13 + - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-13-pgvector-0.4.1 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + alias: postgres - name: redis:6.0-alpine - name: opensearchproject/opensearch:2.2.1 alias: elasticsearch @@ -355,8 +365,9 @@ .use-pg14-opensearch1-ee: services: - - name: postgres:14 + - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-14-pgvector-0.4.1 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + alias: postgres - name: redis:6.0-alpine - name: opensearchproject/opensearch:1.3.5 alias: elasticsearch @@ -371,8 +382,9 @@ .use-pg14-opensearch2-ee: services: - - name: postgres:14 + - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-14-pgvector-0.4.1 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + alias: postgres - name: redis:6.0-alpine - name: opensearchproject/opensearch:2.2.1 alias: elasticsearch diff --git a/Gemfile b/Gemfile index df86744eee15e3..920b0f03f950c0 100644 --- a/Gemfile +++ b/Gemfile @@ -30,6 +30,8 @@ gem 'view_component', '~> 2.74.1' # Supported DBs gem 'pg', '~> 1.4.6' +gem 'neighbor', '~> 0.2.3' + gem 'rugged', '~> 1.5' gem 'grape-path-helpers', '~> 1.7.1' diff --git a/Gemfile.checksum b/Gemfile.checksum index 1458f2f442e2b2..4cb6689ab4c974 100644 --- a/Gemfile.checksum +++ b/Gemfile.checksum @@ -373,6 +373,7 @@ {"name":"mustermann","version":"1.1.1","platform":"ruby","checksum":"0a21cfe505869cce9ce17998db5260344e78df81ae857c07a62143fd30299531"}, {"name":"mustermann-grape","version":"1.0.1","platform":"ruby","checksum":"00ce12b3df66be33ec4304aa9108fb9e1a0689f2a136c96b51c104684f5c5436"}, {"name":"nap","version":"1.1.0","platform":"ruby","checksum":"949691660f9d041d75be611bb2a8d2fd559c467537deac241f4097d9b5eea576"}, +{"name":"neighbor","version":"0.2.3","platform":"ruby","checksum":"70887ac2110d0c7ab243ee988f64359b8bb94a63a0c78542bbeef4f33b1933e5"}, {"name":"nenv","version":"0.3.0","platform":"ruby","checksum":"d9de6d8fb7072228463bf61843159419c969edb34b3cef51832b516ae7972765"}, {"name":"net-http-persistent","version":"4.0.1","platform":"ruby","checksum":"2752f4cce05fd1c45e0537c6f3a98fa5a4899efd5f88e63c104ed5f05cbddef9"}, {"name":"net-imap","version":"0.3.4","platform":"ruby","checksum":"a82a59e2a429433dc54cae5a8b2979ffe49da8c66085740811bfa337dc3729b5"}, diff --git a/Gemfile.lock b/Gemfile.lock index 2eeadd20d999e2..b0e74a31b0508a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -985,6 +985,8 @@ GEM mustermann-grape (1.0.1) mustermann (>= 1.0.0) nap (1.1.0) + neighbor (0.2.3) + activerecord (>= 5.2) nenv (0.3.0) net-http-persistent (4.0.1) connection_pool (~> 2.2) @@ -1828,6 +1830,7 @@ DEPENDENCIES mini_magick (~> 4.10.1) minitest (~> 5.11.0) multi_json (~> 1.14.1) + neighbor (~> 0.2.3) net-ldap (~> 0.17.1) net-ntp net-protocol (~> 0.1.3) diff --git a/config/database.yml.decomposed-postgresql b/config/database.yml.decomposed-postgresql index 3348c8cb27785b..3b5d1ff2ed5623 100644 --- a/config/database.yml.decomposed-postgresql +++ b/config/database.yml.decomposed-postgresql @@ -103,3 +103,10 @@ test: &test username: postgres password: host: localhost + embedding: + adapter: postgresql + encoding: unicode + database: gitlabhq_embedding_test + username: postgres + password: + host: localhost diff --git a/config/database.yml.postgresql b/config/database.yml.postgresql index c1b1247b5b0866..6d39418485505b 100644 --- a/config/database.yml.postgresql +++ b/config/database.yml.postgresql @@ -124,3 +124,10 @@ test: &test username: postgres password: host: localhost + embedding: + adapter: postgresql + encoding: unicode + database: gitlabhq_embedding_test + username: postgres + password: + host: localhost diff --git a/ee/app/models/embedding/tanuki_bot.rb b/ee/app/models/embedding/tanuki_bot.rb new file mode 100644 index 00000000000000..d2dbd19ad20e02 --- /dev/null +++ b/ee/app/models/embedding/tanuki_bot.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +module Embedding + # This model should only store public content and embeddings + class TanukiBot < Embedding::ApplicationRecord + self.table_name = 'tanuki_bot_mvc' + + has_neighbors :embedding + + scope :neighbor_for, ->(embedding) { nearest_neighbors(:embedding, embedding, distance: 'inner_product') } + end +end diff --git a/ee/db/embedding/docs/tanuki_bot_mvc.yml b/ee/db/embedding/docs/tanuki_bot_mvc.yml new file mode 100644 index 00000000000000..df642456909424 --- /dev/null +++ b/ee/db/embedding/docs/tanuki_bot_mvc.yml @@ -0,0 +1,10 @@ +--- +table_name: tanuki_bot_mvc +classes: +- Embedding::TanukiBot +feature_categories: +- global_search +description: +introduced_by_url: +milestone: '16.0' +gitlab_schema: gitlab_embedding diff --git a/ee/db/embedding/migrate/20230420103900_create_tanuki_bot_mvc.rb b/ee/db/embedding/migrate/20230420103900_create_tanuki_bot_mvc.rb new file mode 100644 index 00000000000000..04bde97a5cf651 --- /dev/null +++ b/ee/db/embedding/migrate/20230420103900_create_tanuki_bot_mvc.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +class CreateTanukiBotMvc < Gitlab::Database::Migration[2.1] + enable_lock_retries! + + def up + create_table :tanuki_bot_mvc do |t| + t.timestamps_with_timezone null: false + t.vector :embedding, limit: 1536, null: false + t.text :url, null: false, limit: 2048 + t.text :content, null: false, limit: 32768 + t.jsonb :metadata, null: false + t.text :chroma_id, index: { unique: true }, limit: 512 + end + end + + def down + drop_table :tanuki_bot_mvc + end +end diff --git a/ee/db/embedding/schema_migrations/20230420103900 b/ee/db/embedding/schema_migrations/20230420103900 new file mode 100644 index 00000000000000..e32dfff70e405d --- /dev/null +++ b/ee/db/embedding/schema_migrations/20230420103900 @@ -0,0 +1 @@ +295782269f4738b6eb308f53144d7d4358affa39e7246a538d774200088a41d8 \ No newline at end of file diff --git a/ee/db/embedding/structure.sql b/ee/db/embedding/structure.sql index a115fbaf269a91..926f02505b9381 100644 --- a/ee/db/embedding/structure.sql +++ b/ee/db/embedding/structure.sql @@ -11,8 +11,38 @@ CREATE TABLE schema_migrations ( version character varying NOT NULL ); +CREATE TABLE tanuki_bot_mvc ( + id bigint NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL, + embedding vector(1536) NOT NULL, + url text NOT NULL, + content text NOT NULL, + metadata jsonb NOT NULL, + chroma_id text, + CONSTRAINT check_5df597f0fb CHECK ((char_length(url) <= 2048)), + CONSTRAINT check_67053ce605 CHECK ((char_length(content) <= 32768)), + CONSTRAINT check_e130e042d4 CHECK ((char_length(chroma_id) <= 512)) +); + +CREATE SEQUENCE tanuki_bot_mvc_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + +ALTER SEQUENCE tanuki_bot_mvc_id_seq OWNED BY tanuki_bot_mvc.id; + +ALTER TABLE ONLY tanuki_bot_mvc ALTER COLUMN id SET DEFAULT nextval('tanuki_bot_mvc_id_seq'::regclass); + ALTER TABLE ONLY ar_internal_metadata ADD CONSTRAINT ar_internal_metadata_pkey PRIMARY KEY (key); ALTER TABLE ONLY schema_migrations ADD CONSTRAINT schema_migrations_pkey PRIMARY KEY (version); + +ALTER TABLE ONLY tanuki_bot_mvc + ADD CONSTRAINT tanuki_bot_mvc_pkey PRIMARY KEY (id); + +CREATE UNIQUE INDEX index_tanuki_bot_mvc_on_chroma_id ON tanuki_bot_mvc USING btree (chroma_id); diff --git a/ee/spec/factories/embedding/tanuki_bot.rb b/ee/spec/factories/embedding/tanuki_bot.rb new file mode 100644 index 00000000000000..d573c23a59be3e --- /dev/null +++ b/ee/spec/factories/embedding/tanuki_bot.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +FactoryBot.define do + factory :tanuki_bot, class: 'Embedding::TanukiBot' do + url { 'http://example.com/path/to/a/doc' } + + metadata do + { + info: 'A description', + source: 'path/to/a/doc.md', + source_type: 'doc' + } + end + + content { 'Some text' } + embedding { Array.new(1536, 0.3) } + end +end diff --git a/ee/spec/models/embedding/tanuki_bot_spec.rb b/ee/spec/models/embedding/tanuki_bot_spec.rb new file mode 100644 index 00000000000000..6dd0f79562c578 --- /dev/null +++ b/ee/spec/models/embedding/tanuki_bot_spec.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Embedding::TanukiBot, type: :model, feature_category: :global_search do + describe 'scopes' do + describe '.neighbor_for' do + let_it_be(:records) { create_list(:tanuki_bot, 3) } + let_it_be(:question) { create(:tanuki_bot) } + + it 'calls nearest_neighbors for question' do + expect(described_class).to receive(:nearest_neighbors) + .with(:embedding, question.embedding, distance: 'inner_product').once + + described_class.neighbor_for(question.embedding) + end + end + end +end diff --git a/scripts/prepare_build.sh b/scripts/prepare_build.sh index ca3dd0eec5724f..924c430d054d3a 100644 --- a/scripts/prepare_build.sh +++ b/scripts/prepare_build.sh @@ -32,6 +32,15 @@ else sed -i '/geo:/,/^$/d' config/database.yml fi +# Set up Embedding database if the job name matches `rspec-ee` +# Since Embedding is an EE feature, we shouldn't set it up for non-EE tests. +if [[ "${CI_JOB_NAME}" =~ "rspec-ee" ]]; then + echoinfo "Embedding DB will be set up." +else + echoinfo "Embedding DB won't be set up." + sed -i '/embedding:/,/^$/d' config/database.yml +fi + # Set user to a non-superuser to ensure we test permissions sed -i 's/username: root/username: gitlab/g' config/database.yml -- GitLab From 828224581d736be790655782e3ea360682815ba1 Mon Sep 17 00:00:00 2001 From: maddievn Date: Tue, 25 Apr 2023 08:53:21 +0800 Subject: [PATCH 2/4] Add spec checking far neighbors --- ee/spec/models/embedding/tanuki_bot_spec.rb | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/ee/spec/models/embedding/tanuki_bot_spec.rb b/ee/spec/models/embedding/tanuki_bot_spec.rb index 6dd0f79562c578..cce3cd0735ed32 100644 --- a/ee/spec/models/embedding/tanuki_bot_spec.rb +++ b/ee/spec/models/embedding/tanuki_bot_spec.rb @@ -5,15 +5,25 @@ RSpec.describe Embedding::TanukiBot, type: :model, feature_category: :global_search do describe 'scopes' do describe '.neighbor_for' do - let_it_be(:records) { create_list(:tanuki_bot, 3) } - let_it_be(:question) { create(:tanuki_bot) } + let_it_be(:question) { build(:tanuki_bot) } it 'calls nearest_neighbors for question' do + create_list(:tanuki_bot, 2) + expect(described_class).to receive(:nearest_neighbors) .with(:embedding, question.embedding, distance: 'inner_product').once described_class.neighbor_for(question.embedding) end + + context 'with a far away embedding' do + let_it_be(:far_embedding) { create(:tanuki_bot, embedding: Array.new(1536, -0.999)) } + let_it_be(:close_embedding) { create(:tanuki_bot, embedding: Array.new(1536, 0.333)) } + + it 'does not return the far neighbor' do + expect(described_class.neighbor_for(question.embedding).limit(1)).to match_array(close_embedding) + end + end end end end -- GitLab From 9b3e790f55ea6de2b5bb34a1bf856cd5efe64bb3 Mon Sep 17 00:00:00 2001 From: maddievn Date: Tue, 25 Apr 2023 09:19:28 +0800 Subject: [PATCH 3/4] Rename to TanukiBotMvc --- .../embedding/{tanuki_bot.rb => tanuki_bot_mvc.rb} | 2 +- ee/spec/factories/embedding/tanuki_bot.rb | 2 +- .../{tanuki_bot_spec.rb => tanuki_bot_mvc_spec.rb} | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) rename ee/app/models/embedding/{tanuki_bot.rb => tanuki_bot_mvc.rb} (85%) rename ee/spec/models/embedding/{tanuki_bot_spec.rb => tanuki_bot_mvc_spec.rb} (61%) diff --git a/ee/app/models/embedding/tanuki_bot.rb b/ee/app/models/embedding/tanuki_bot_mvc.rb similarity index 85% rename from ee/app/models/embedding/tanuki_bot.rb rename to ee/app/models/embedding/tanuki_bot_mvc.rb index d2dbd19ad20e02..a5f0ebc3e25a33 100644 --- a/ee/app/models/embedding/tanuki_bot.rb +++ b/ee/app/models/embedding/tanuki_bot_mvc.rb @@ -2,7 +2,7 @@ module Embedding # This model should only store public content and embeddings - class TanukiBot < Embedding::ApplicationRecord + class TanukiBotMvc < Embedding::ApplicationRecord self.table_name = 'tanuki_bot_mvc' has_neighbors :embedding diff --git a/ee/spec/factories/embedding/tanuki_bot.rb b/ee/spec/factories/embedding/tanuki_bot.rb index d573c23a59be3e..0f3fe6a3d83e20 100644 --- a/ee/spec/factories/embedding/tanuki_bot.rb +++ b/ee/spec/factories/embedding/tanuki_bot.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :tanuki_bot, class: 'Embedding::TanukiBot' do + factory :tanuki_bot_mvc, class: 'Embedding::TanukiBotMvc' do url { 'http://example.com/path/to/a/doc' } metadata do diff --git a/ee/spec/models/embedding/tanuki_bot_spec.rb b/ee/spec/models/embedding/tanuki_bot_mvc_spec.rb similarity index 61% rename from ee/spec/models/embedding/tanuki_bot_spec.rb rename to ee/spec/models/embedding/tanuki_bot_mvc_spec.rb index cce3cd0735ed32..4c98913f45740e 100644 --- a/ee/spec/models/embedding/tanuki_bot_spec.rb +++ b/ee/spec/models/embedding/tanuki_bot_mvc_spec.rb @@ -2,13 +2,13 @@ require 'spec_helper' -RSpec.describe Embedding::TanukiBot, type: :model, feature_category: :global_search do +RSpec.describe Embedding::TanukiBotMvc, type: :model, feature_category: :global_search do describe 'scopes' do describe '.neighbor_for' do - let_it_be(:question) { build(:tanuki_bot) } + let_it_be(:question) { build(:tanuki_bot_mvc) } it 'calls nearest_neighbors for question' do - create_list(:tanuki_bot, 2) + create_list(:tanuki_bot_mvc, 2) expect(described_class).to receive(:nearest_neighbors) .with(:embedding, question.embedding, distance: 'inner_product').once @@ -17,8 +17,8 @@ end context 'with a far away embedding' do - let_it_be(:far_embedding) { create(:tanuki_bot, embedding: Array.new(1536, -0.999)) } - let_it_be(:close_embedding) { create(:tanuki_bot, embedding: Array.new(1536, 0.333)) } + let_it_be(:far_embedding) { create(:tanuki_bot_mvc, embedding: Array.new(1536, -0.999)) } + let_it_be(:close_embedding) { create(:tanuki_bot_mvc, embedding: Array.new(1536, 0.333)) } it 'does not return the far neighbor' do expect(described_class.neighbor_for(question.embedding).limit(1)).to match_array(close_embedding) -- GitLab From ddc3abd997c42f86495661eebf60eda6c8355771 Mon Sep 17 00:00:00 2001 From: maddievn Date: Tue, 25 Apr 2023 09:24:19 +0800 Subject: [PATCH 4/4] Update doc with new class name --- ee/db/embedding/docs/tanuki_bot_mvc.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ee/db/embedding/docs/tanuki_bot_mvc.yml b/ee/db/embedding/docs/tanuki_bot_mvc.yml index df642456909424..8519d27e3325cd 100644 --- a/ee/db/embedding/docs/tanuki_bot_mvc.yml +++ b/ee/db/embedding/docs/tanuki_bot_mvc.yml @@ -1,7 +1,7 @@ --- table_name: tanuki_bot_mvc classes: -- Embedding::TanukiBot +- Embedding::TanukiBotMvc feature_categories: - global_search description: -- GitLab