Skip to content
This repository was archived by the owner on Jul 22, 2025. It is now read-only.

Commit 8bf3502

Browse files
authored
FEATURE: track duration of AI calls (#1082)
* FEATURE: track duration of AI calls * annotate
1 parent faa8e6e commit 8bf3502

File tree

4 files changed

+12
-0
lines changed

4 files changed

+12
-0
lines changed

app/models/ai_api_audit_log.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ def prev_log_id
4646
# language_model :string(255)
4747
# feature_context :jsonb
4848
# cached_tokens :integer
49+
# duration_msecs :integer
4950
#
5051
# Indexes
5152
#
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# frozen_string_literal: true
2+
class AddDurationToAiApiLog < ActiveRecord::Migration[7.2]
3+
def change
4+
add_column :ai_api_audit_logs, :duration_msecs, :integer
5+
end
6+
end

lib/completions/endpoints/base.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ def perform_completion!(
6666
&blk
6767
)
6868
LlmQuota.check_quotas!(@llm_model, user)
69+
start_time = Time.now
6970

7071
@partial_tool_calls = partial_tool_calls
7172
model_params = normalize_model_params(model_params)
@@ -212,6 +213,9 @@ def perform_completion!(
212213
log.raw_response_payload = response_raw
213214
final_log_update(log)
214215
log.response_tokens = tokenizer.size(partials_raw) if log.response_tokens.blank?
216+
log.created_at = start_time
217+
log.updated_at = Time.now
218+
log.duration_msecs = (Time.now - start_time) * 1000
215219
log.save!
216220
LlmQuota.log_usage(@llm_model, user, log.request_tokens, log.response_tokens)
217221
if Rails.env.development?

spec/lib/completions/endpoints/open_ai_spec.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,7 @@ def request_body(prompt, stream: false, tool_call: false)
319319
log = AiApiAuditLog.order(:id).last
320320
expect(log.request_tokens).to eq(55)
321321
expect(log.response_tokens).to eq(13)
322+
expect(log.duration_msecs).not_to be_nil
322323

323324
expected =
324325
DiscourseAi::Completions::ToolCall.new(

0 commit comments

Comments
 (0)