18
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
|
# File 'lib/glancer/async_runner.rb', line 18
def self.run(message_id, question)
message = Glancer::Message.find(message_id)
chat = message.chat
message.update!(status: :processing)
result = Glancer::Workflow.run(chat.id, question)
cfg = Glancer.configuration
used_model = "#{cfg.resolved_chat_provider}/#{cfg.resolved_chat_model}"
message.update!(
content: result[:content].to_s,
code: result[:code],
code_type: result[:code_type] || "sql",
successful: result[:successful],
llm_model: used_model,
enriched_question: result[:enriched_question],
status: :complete
)
message.code_versions.create!(code: message.code, source: :generated) if message.code.present?
chat.update!(title: Glancer::Workflow::LLM.generate_title(question)) if chat.messages.where(role: :user).count == 1
rescue StandardError => e
Glancer::Utils::Logger.error("AsyncRunner", "Failed for message #{message_id}: #{e.message}")
begin
message&.update!(content: e.message, successful: false, status: :failed)
rescue StandardError => update_error
Glancer::Utils::Logger.error("AsyncRunner", "Could not mark message as failed: #{update_error.message}")
end
end
|