Class: Leva::PromptOptimizationJob
- Inherits:
-
ApplicationJob
- Object
- ActiveJob::Base
- ApplicationJob
- Leva::PromptOptimizationJob
- Defined in:
- app/jobs/leva/prompt_optimization_job.rb
Overview
Background job for running prompt optimization with progress tracking.
This job executes the optimization process asynchronously, updating the OptimizationRun record with progress for live UI updates.
Instance Method Summary collapse
-
#perform(optimization_run_id:) ⇒ Leva::Prompt
Performs the prompt optimization and creates a new Prompt.
Instance Method Details
#perform(optimization_run_id:) ⇒ Leva::Prompt
Performs the prompt optimization and creates a new Prompt.
19 20 21 22 23 24 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 'app/jobs/leva/prompt_optimization_job.rb', line 19 def perform(optimization_run_id:) @run = OptimizationRun.find(optimization_run_id) @run.start! dataset = @run.dataset optimizer = PromptOptimizer.new( dataset: dataset, mode: @run.mode.to_sym, model: @run.model, optimizer: @run.optimizer.to_sym, progress_callback: method(:update_progress) ) result = optimizer.optimize ActiveRecord::Base.transaction do prompt = Prompt.create!( name: @run.prompt_name, system_prompt: result[:system_prompt], user_prompt: result[:user_prompt], metadata: result[:metadata] ) @run.complete!(prompt) prompt end rescue ActiveRecord::RecordNotFound => e Rails.logger.error "[Leva::PromptOptimizationJob] OptimizationRun not found: #{e.}" raise rescue Leva::DspyConfigurationError => e Rails.logger.error "[Leva::PromptOptimizationJob] Configuration error: #{e.}" @run&.fail!("Configuration error - please check server logs for details") raise rescue Leva::InsufficientDataError, Leva::OptimizationError => e @run&.fail!(e) Rails.logger.error "[Leva::PromptOptimizationJob] Optimization failed: #{e.}" raise rescue StandardError => e Rails.logger.error "[Leva::PromptOptimizationJob] Unexpected error: #{e.}" Rails.logger.error e.backtrace.first(10).join("\n") @run&.fail!(e..truncate(500)) raise end |