Module: PromptCanary::Deployment
- Included in:
- PromptCanary
- Defined in:
- lib/prompt_canary/deployment.rb
Overview
rubocop:disable Metrics/ModuleLength
Instance Method Summary collapse
- #demote(prompt_class, version_name, reason: nil, triggered_by: "manual", triggering_metric: nil, triggering_value: nil, triggering_threshold: nil) ⇒ Object
- #promote(prompt_class, version_name, reason: nil) ⇒ Object
- #restore(prompt_class, version_name) ⇒ Object
- #set_canary(prompt_class, version_name, percent) ⇒ Object
Instance Method Details
#demote(prompt_class, version_name, reason: nil, triggered_by: "manual", triggering_metric: nil, triggering_value: nil, triggering_threshold: nil) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/prompt_canary/deployment.rb', line 49 def demote(prompt_class, version_name, reason: nil, triggered_by: "manual", triggering_metric: nil, triggering_value: nil, triggering_threshold: nil) assert_can_demote_primary!(prompt_class, version_name) if ar_storage? require "prompt_canary/storage/active_record_adapter" prev_percent = effective_canary_percent(prompt_class, version_name) override = RolloutOverride.find_or_initialize_by(prompt: prompt_class.name, version: version_name) override.created_at ||= Time.now override.update!(rollout_override: 0) record_event( prompt: prompt_class.name, version: version_name, event: "demoted", previous_percent: prev_percent, new_percent: 0, new_status: "demoted", reason: reason, triggered_by: triggered_by, triggering_metric: triggering_metric&.to_s, triggering_value: triggering_value, triggering_threshold: triggering_threshold ) else version = prompt_class.versions.find { |v| v.name == version_name } version&.demote! end publish("prompt_canary.demoted", prompt: prompt_class.name, version: version_name, reason: reason) end |
#promote(prompt_class, version_name, reason: nil) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/prompt_canary/deployment.rb', line 29 def promote(prompt_class, version_name, reason: nil) assert_version_registered!(prompt_class, version_name) if ar_storage? require "prompt_canary/storage/active_record_adapter" prev_primary = effective_primary_name(prompt_class) prev_status = current_version_status(prompt_class, version_name) override = PrimaryOverride.find_or_initialize_by(prompt: prompt_class.name) override.created_at ||= Time.now override.update!(version: version_name) record_event(prompt: prompt_class.name, version: version_name, event: "promoted", previous_status: prev_status, new_status: "primary", reason: reason, triggered_by: "manual") record_superseded_event(prompt_class, prev_primary, version_name) else prompt_class.promote_to_primary!(version_name) end publish("prompt_canary.promoted", prompt: prompt_class.name, version: version_name, reason: reason) end |
#restore(prompt_class, version_name) ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/prompt_canary/deployment.rb', line 74 def restore(prompt_class, version_name) if ar_storage? require "prompt_canary/storage/active_record_adapter" RolloutOverride.where(prompt: prompt_class.name, version: version_name).delete_all record_event(prompt: prompt_class.name, version: version_name, event: "restored", previous_status: "demoted", new_status: "candidate", triggered_by: "manual") else version = prompt_class.versions.find { |v| v.name == version_name } version&.restore! end publish("prompt_canary.restored", prompt: prompt_class.name, version: version_name) end |
#set_canary(prompt_class, version_name, percent) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/prompt_canary/deployment.rb', line 6 def set_canary(prompt_class, version_name, percent) assert_valid_canary_percent!(percent) assert_version_registered!(prompt_class, version_name) if ar_storage? require "prompt_canary/storage/active_record_adapter" if RolloutOverride.where(prompt: prompt_class.name, version: version_name, rollout_override: 0).exists? raise DemotedVersionError, "#{version_name.inspect} is demoted — call restore before adjusting traffic" end prev_percent = effective_canary_percent(prompt_class, version_name) override = RolloutOverride.find_or_initialize_by(prompt: prompt_class.name, version: version_name) override.created_at ||= Time.now override.update!(rollout_override: percent) record_event(prompt: prompt_class.name, version: version_name, event: "canary_set", previous_percent: prev_percent, new_percent: percent, triggered_by: "manual") else version = prompt_class.versions.find { |v| v.name == version_name } version.set_rollout!(percent) end end |