Class: Observ::Generation

Inherits:
Observation show all
Defined in:
app/models/observ/generation.rb

Instance Method Summary collapse

Methods inherited from Observation

#duration_ms

Instance Method Details

#finalize(output:, usage: {}, cost_usd: 0.0, status_message: nil, finish_reason: nil, completion_start_time: nil, provider_metadata: {}, messages: nil, raw_response: nil) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'app/models/observ/generation.rb', line 20

def finalize(output:, usage: {}, cost_usd: 0.0, status_message: nil, finish_reason: nil,
             completion_start_time: nil, provider_metadata: {}, messages: nil, raw_response: nil)
  merged_usage = (self.usage || {}).merge(usage.stringify_keys)
   = (self. || {}).merge(.stringify_keys)

  update!(
    output: output.is_a?(String) ? output : output.to_json,
    usage: merged_usage,
    cost_usd: cost_usd,
    finish_reason: finish_reason,
    completion_start_time: completion_start_time,
    provider_metadata: ,
    messages: messages || self.messages,
    raw_response: raw_response,
    end_time: Time.current,
    status_message: status_message
  )
end

#input_tokensObject



48
49
50
# File 'app/models/observ/generation.rb', line 48

def input_tokens
  usage&.dig("input_tokens") || 0
end

#output_tokensObject



52
53
54
# File 'app/models/observ/generation.rb', line 52

def output_tokens
  usage&.dig("output_tokens") || 0
end

#set_input(input, messages: nil) ⇒ Object



5
6
7
8
9
10
# File 'app/models/observ/generation.rb', line 5

def set_input(input, messages: nil)
  update!(
    input: input.is_a?(String) ? input : input.to_json,
    messages: messages || self.messages
  )
end

#set_messages(messages) ⇒ Object



12
13
14
# File 'app/models/observ/generation.rb', line 12

def set_messages(messages)
  update!(messages: messages)
end

#set_tools(tools, tool_choice: nil) ⇒ Object



16
17
18
# File 'app/models/observ/generation.rb', line 16

def set_tools(tools, tool_choice: nil)
  update!(tools: tools, tool_choice: tool_choice)
end

#time_to_first_token_msObject



39
40
41
42
# File 'app/models/observ/generation.rb', line 39

def time_to_first_token_ms
  return nil unless completion_start_time && start_time
  ((completion_start_time - start_time) * 1000).round(2)
end

#total_tokensObject



44
45
46
# File 'app/models/observ/generation.rb', line 44

def total_tokens
  usage&.dig("total_tokens") || 0
end