Class: Observ::ModerationGuardrailJob
- Inherits:
-
ApplicationJob
- Object
- ActiveJob::Base
- ApplicationJob
- Observ::ModerationGuardrailJob
- Defined in:
- app/jobs/observ/moderation_guardrail_job.rb
Class Method Summary collapse
-
.enqueue_for_agent_types(agent_types, since: 1.hour.ago) ⇒ Object
Enqueue moderation for specific agent types.
-
.enqueue_for_scope(scope, sample_percentage: 100) ⇒ Object
Class method to enqueue moderation for traces matching criteria.
-
.enqueue_user_facing(since: 1.hour.ago) ⇒ Object
Enqueue moderation for user-facing sessions only.
Instance Method Summary collapse
-
#perform(trace_id: nil, session_id: nil, **options) ⇒ Object
Process a single trace or session.
Class Method Details
.enqueue_for_agent_types(agent_types, since: 1.hour.ago) ⇒ Object
Enqueue moderation for specific agent types
63 64 65 66 67 68 69 70 |
# File 'app/jobs/observ/moderation_guardrail_job.rb', line 63 def self.enqueue_for_agent_types(agent_types, since: 1.hour.ago) Observ::Session .where(created_at: since..) .where("metadata->>'agent_type' IN (?)", agent_types) .find_each do |session| perform_later(session_id: session.id) end end |
.enqueue_for_scope(scope, sample_percentage: 100) ⇒ Object
Class method to enqueue moderation for traces matching criteria
33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'app/jobs/observ/moderation_guardrail_job.rb', line 33 def self.enqueue_for_scope(scope, sample_percentage: 100) traces = scope.left_joins(:review_item) .where(observ_review_items: { id: nil }) if sample_percentage < 100 sample_size = (traces.count * sample_percentage / 100.0).ceil traces = traces.order("RANDOM()").limit(sample_size) end traces.find_each do |trace| perform_later(trace_id: trace.id) end end |
.enqueue_user_facing(since: 1.hour.ago) ⇒ Object
Enqueue moderation for user-facing sessions only
50 51 52 53 54 55 56 57 |
# File 'app/jobs/observ/moderation_guardrail_job.rb', line 50 def self.enqueue_user_facing(since: 1.hour.ago) Observ::Session .where(created_at: since..) .where("metadata->>'user_facing' = ?", "true") .find_each do |session| perform_later(session_id: session.id) end end |
Instance Method Details
#perform(trace_id: nil, session_id: nil, **options) ⇒ Object
Process a single trace or session
19 20 21 22 23 24 25 26 27 |
# File 'app/jobs/observ/moderation_guardrail_job.rb', line 19 def perform(trace_id: nil, session_id: nil, **) if trace_id moderate_trace(trace_id, ) elsif session_id moderate_session(session_id, ) else Rails.logger.warn "[ModerationGuardrailJob] No trace_id or session_id provided" end end |