Class: Observ::Session
Instance Method Summary
collapse
Methods included from Reviewable
#enqueue_for_review!, #in_review_queue?, #pending_review?, #review_status, #reviewed?
Methods included from Scoreable
#manual_score, #score_for, #score_summary, #scored?
Instance Method Details
#average_llm_latency_ms ⇒ Object
44
45
46
47
48
49
50
51
52
53
54
|
# File 'app/models/observ/session.rb', line 44
def average_llm_latency_ms
generations = Observ::Generation.joins(trace: :observ_session)
.where(observ_sessions: { id: id })
.where.not(end_time: nil)
return 0 if generations.empty?
total_duration = generations.sum do |g|
((g.end_time - g.start_time) * 1000).round(2)
end
(total_duration / generations.count).round(0)
end
|
#chat ⇒ Object
131
132
133
|
# File 'app/models/observ/session.rb', line 131
def chat
@chat ||= ::Chat.find_by(observability_session_id: session_id) if defined?(::Chat)
end
|
#create_trace(name: nil, input: nil, metadata: {}, tags: []) ⇒ Object
22
23
24
25
26
27
28
29
30
31
32
|
# File 'app/models/observ/session.rb', line 22
def create_trace(name: nil, input: nil, metadata: {}, tags: [])
traces.create!(
trace_id: SecureRandom.uuid,
name: name || "chat_exchange",
input: input.is_a?(String) ? input : input.to_json,
metadata: metadata,
tags: tags,
user_id: user_id,
start_time: Time.current
)
end
|
#duration_s ⇒ Object
39
40
41
42
|
# File 'app/models/observ/session.rb', line 39
def duration_s
return nil unless end_time
(end_time - start_time).round(1)
end
|
#finalize ⇒ Object
34
35
36
37
|
# File 'app/models/observ/session.rb', line 34
def finalize
update!(end_time: Time.current)
update_aggregated_metrics
end
|
#instrument_chat(chat_instance, context: {}) ⇒ Object
97
98
99
100
101
102
103
104
105
|
# File 'app/models/observ/session.rb', line 97
def instrument_chat(chat_instance, context: {})
instrumenter = Observ::ChatInstrumenter.new(
self,
chat_instance,
context: context
)
instrumenter.instrument!
instrumenter
end
|
#instrument_embedding(context: {}) ⇒ Object
107
108
109
110
111
|
# File 'app/models/observ/session.rb', line 107
def instrument_embedding(context: {})
instrumenter = Observ::EmbeddingInstrumenter.new(self, context: context)
instrumenter.instrument!
instrumenter
end
|
#instrument_image_generation(context: {}) ⇒ Object
113
114
115
116
117
|
# File 'app/models/observ/session.rb', line 113
def instrument_image_generation(context: {})
instrumenter = Observ::ImageGenerationInstrumenter.new(self, context: context)
instrumenter.instrument!
instrumenter
end
|
#instrument_moderation(context: {}) ⇒ Object
125
126
127
128
129
|
# File 'app/models/observ/session.rb', line 125
def instrument_moderation(context: {})
instrumenter = Observ::ModerationInstrumenter.new(self, context: context)
instrumenter.instrument!
instrumenter
end
|
#instrument_transcription(context: {}) ⇒ Object
119
120
121
122
123
|
# File 'app/models/observ/session.rb', line 119
def instrument_transcription(context: {})
instrumenter = Observ::TranscriptionInstrumenter.new(self, context: context)
instrumenter.instrument!
instrumenter
end
|
#session_metrics ⇒ Object
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
# File 'app/models/observ/session.rb', line 56
def session_metrics
if end_time.nil?
{
session_id: session_id,
total_traces: traces.count,
total_llm_calls: generation_count,
total_tokens: traces.sum(:total_tokens),
total_cost: traces.sum(:total_cost).to_f,
total_llm_duration_ms: calculate_total_llm_duration,
average_llm_latency_ms: average_llm_latency_ms,
duration_s: duration_s
}
else
{
session_id: session_id,
total_traces: total_traces_count,
total_llm_calls: total_llm_calls_count,
total_tokens: total_tokens,
total_cost: total_cost.to_f,
total_llm_duration_ms: total_llm_duration_ms,
average_llm_latency_ms: average_llm_latency_ms,
duration_s: duration_s
}
end
end
|
#update_aggregated_metrics ⇒ Object
82
83
84
85
86
87
88
89
90
|
# File 'app/models/observ/session.rb', line 82
def update_aggregated_metrics
update_columns(
total_traces_count: traces.count,
total_llm_calls_count: generation_count,
total_tokens: traces.sum(:total_tokens),
total_cost: traces.sum(:total_cost),
total_llm_duration_ms: calculate_total_llm_duration
)
end
|
92
93
94
95
|
# File 'app/models/observ/session.rb', line 92
def update_metadata(new_metadata)
self.metadata = (self.metadata || {}).merge(new_metadata)
save
end
|