Class: HTM::Jobs::GenerateEmbeddingJob
- Inherits:
-
Object
- Object
- HTM::Jobs::GenerateEmbeddingJob
- Defined in:
- lib/htm/jobs/generate_embedding_job.rb
Overview
Background job to generate and store vector embeddings for nodes
This job is enqueued after a node is saved to avoid blocking the main request path. It generates embeddings asynchronously and updates the node record with the embedding vector.
Class Method Summary collapse
-
.perform(node_id:) ⇒ Object
Generate embedding for a node.
Class Method Details
.perform(node_id:) ⇒ Object
Generate embedding for a node
Uses the configured embedding generator (HTM.embed) which delegates to the application-provided or default RubyLLM implementation.
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/htm/jobs/generate_embedding_job.rb', line 25 def self.perform(node_id:) node = HTM::Models::Node.find_by(id: node_id) unless node HTM.logger.warn "GenerateEmbeddingJob: Node #{node_id} not found" return end # Skip if already has embedding if node..present? HTM.logger.debug "GenerateEmbeddingJob: Node #{node_id} already has embedding, skipping" return end begin HTM.logger.debug "GenerateEmbeddingJob: Generating embedding for node #{node_id}" # Generate and process embedding using EmbeddingService result = HTM::EmbeddingService.generate(node.content) # Update node with processed embedding node.update!( embedding: result[:storage_embedding], embedding_dimension: result[:dimension] ) HTM.logger.info "GenerateEmbeddingJob: Successfully generated embedding for node #{node_id} (#{result[:dimension]} dimensions)" rescue HTM::EmbeddingError => e # Log embedding-specific errors HTM.logger.error "GenerateEmbeddingJob: Embedding generation failed for node #{node_id}: #{e.}" rescue StandardError => e # Log unexpected errors HTM.logger.error "GenerateEmbeddingJob: Unexpected error for node #{node_id}: #{e.class.name} - #{e.}" HTM.logger.debug e.backtrace.first(5).join("\n") end end |