discourse-ai/spec/lib/modules/embeddings/jobs/generate_embeddings_spec.rb

44 lines
1.3 KiB
Ruby

# frozen_string_literal: true
RSpec.describe Jobs::GenerateEmbeddings do
subject(:job) { described_class.new }
fab!(:vector_def) { Fabricate(:embedding_definition) }
describe "#execute" do
before do
SiteSetting.ai_embeddings_selected_model = vector_def.id
SiteSetting.ai_embeddings_enabled = true
end
fab!(:topic)
fab!(:post) { Fabricate(:post, post_number: 1, topic: topic) }
let(:topics_schema) { DiscourseAi::Embeddings::Schema.for(Topic) }
let(:posts_schema) { DiscourseAi::Embeddings::Schema.for(Post) }
it "works for topics" do
expected_embedding = [0.0038493] * vector_def.dimensions
text = vector_def.prepare_target_text(topic)
EmbeddingsGenerationStubs.hugging_face_service(text, expected_embedding)
job.execute(target_id: topic.id, target_type: "Topic")
expect(topics_schema.find_by_embedding(expected_embedding).topic_id).to eq(topic.id)
end
it "works for posts" do
expected_embedding = [0.0038493] * vector_def.dimensions
text = vector_def.prepare_target_text(post)
EmbeddingsGenerationStubs.hugging_face_service(text, expected_embedding)
job.execute(target_id: post.id, target_type: "Post")
expect(posts_schema.find_by_embedding(expected_embedding).post_id).to eq(post.id)
end
end
end