Class: Assistant::TechnicalSupport::ResponseGroundingWorker

Inherits:
Object
  • Object
show all
Includes:
Sidekiq::Job
Defined in:
app/workers/assistant/technical_support/response_grounding_worker.rb

Overview

Grades one prepared Technical Support response outside the user-visible
Sunny worker. A completed assessment makes retries idempotent no-ops.

Constant Summary collapse

OUTSIDE_FUNNEL_REASON =

Constant.

'conversation_outside_technical_support_funnel'

Instance Method Summary collapse

Instance Method Details

#perform(conversation_id, assistant_message_id) ⇒ void

This method returns an undefined value.

Evaluates a pending evidence snapshot stored on an assistant message.

Parameters:

  • conversation_id (Integer)

    persisted Sunny conversation ID

  • assistant_message_id (Integer)

    prepared final response ID



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
# File 'app/workers/assistant/technical_support/response_grounding_worker.rb', line 24

def perform(conversation_id, assistant_message_id)
  conversation = AssistantConversation.find_by(id: conversation_id)
  return unless conversation

  message = conversation.assistant_messages.find_by(id: assistant_message_id, role: 'assistant')
  return unless message
  return terminalize_outside_funnel(message) unless ResponseGroundingAssessmentBuilder.applies_to?(conversation)

  lease = ResponseGroundingAssessmentLease.call(assistant_message: message)
  return unless lease.claimed?

  pending = lease.assessment
  lease_token = lease.lease_token
  answer = message.content.to_s
  current_answer_sha256 = Digest::SHA256.hexdigest(answer)
  return record_changed_answer(message, pending, current_answer_sha256, lease_token) \
    unless pending['answer_sha256'] == current_answer_sha256

  ResponseGroundingGate.call(
    conversation:,
    user_message_id: pending['user_message_id'],
    assistant_message_id: message.id,
    answer:,
    lease_token:,
    evidence: ResponseGroundingEvidence::Result.from_h(pending['evidence'])
  )
end