Class: Layered::Assistant::Messages::ResponseJob

Inherits:
ApplicationJob
  • Object
show all
Defined in:
app/jobs/layered/assistant/messages/response_job.rb

Instance Method Summary collapse

Instance Method Details

#perform(message_id) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'app/jobs/layered/assistant/messages/response_job.rb', line 7

def perform(message_id)
  message = Message.includes(model: :provider, conversation: [:assistant, :messages]).find(message_id)

  unless message.model&.provider
    message.update(content: "No provider is configured for this model.")
    message.broadcast_updated
    message.broadcast_response_complete
    return
  end

  provider = message.model.provider
  chunk_service = ChunkService.new(message, provider: provider)

  stream_proc = proc do |chunk, _bytesize|
    chunk_service.call(chunk)
  end

  begin
    chunk_service.mark_started!
    ClientService.new.call(message: message, stream_proc: stream_proc)
  rescue => e
    Rails.logger.error("Response generation failed: #{e.message}")
    existing = message.reload.content
    error_note = "Something went wrong while generating a response."
    message.update(content: existing.present? ? "#{existing}\n\n---\n\n#{error_note}" : error_note)
    message.broadcast_updated
  end

  message.broadcast_response_complete unless message.reload.stopped?
end