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
37
38
39
40
41
42
43
44
|
# File 'app/jobs/action_agent/agent_execution_job.rb', line 7
def perform(run_id)
run = AgentRun.find(run_id)
return if run.cancelled? || run.complete?
run.update!(status: :running, started_at: Time.current)
run.add_log("Starting execution", level: :info)
begin
agent_record = run.agent
result = execute_agent(agent_record, run)
run.update!(
output: result[:output],
output_metadata: result[:metadata],
status: :complete,
completed_at: Time.current,
duration_ms: ((Time.current - run.started_at) * 1000).to_i,
input_tokens: result.dig(:usage, :input_tokens),
output_tokens: result.dig(:usage, :output_tokens),
total_tokens: result.dig(:usage, :total_tokens)
)
run.add_log("Execution completed successfully", level: :info)
rescue => e
run.update!(
status: :failed,
completed_at: Time.current,
error_message: e.message,
error_backtrace: e.backtrace&.first(10)&.join("\n")
)
run.add_log("Execution failed: #{e.message}", level: :error)
raise
ensure
run.broadcast_update
end
end
|