Class: Langfuse::Generation

Inherits:
Object
  • Object
show all
Extended by:
SpanWrappers
Includes:
PartialUpdates
Defined in:
lib/langfuse/generation.rb

Constant Summary

Constants included from SpanWrappers

SpanWrappers::TYPES

Constants included from PartialUpdates

PartialUpdates::UPDATE_IDENTITY_FIELDS

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from SpanWrappers

define_span_wrappers

Constructor Details

#initialize(client:, trace_id:, id: nil, name: nil, start_time: nil, end_time: nil, completion_start_time: nil, model: nil, model_parameters: nil, input: nil, output: nil, usage: nil, usage_details: nil, cost_details: nil, prompt: nil, metadata: nil, level: nil, status_message: nil, parent_observation_id: nil, version: nil, as_type: nil, **kwargs) ⇒ Generation

Returns a new instance of Generation.



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
# File 'lib/langfuse/generation.rb', line 12

def initialize(client:, trace_id:, id: nil, name: nil, start_time: nil, end_time: nil,
               completion_start_time: nil, model: nil, model_parameters: nil, input: nil,
               output: nil, usage: nil, usage_details: nil, cost_details: nil, prompt: nil,
               metadata: nil, level: nil, status_message: nil,
               parent_observation_id: nil, version: nil, as_type: nil, **kwargs)
  @client = client
  @id = id || Utils.generate_id
  @trace_id = trace_id
  @name = name
  @start_time = start_time
  @end_time = end_time
  @completion_start_time = completion_start_time
  @model = model
  @model_parameters = model_parameters || {}
  @input = input
  @output = output
  @usage = usage || {}
  @usage_details = usage_details || {}
  @cost_details = cost_details || {}
  @prompt_name, @prompt_version = extract_prompt_info(prompt)
  @metadata =  || {}
  @level = level
  @status_message = status_message
  @parent_observation_id = parent_observation_id
  @version = version
  @as_type = validate_as_type(as_type)
  @kwargs = kwargs

  # Create the generation
  create_generation
end

Instance Attribute Details

#as_type ⇒ Object (readonly)

Returns the value of attribute as_type.



7
8
9
# File 'lib/langfuse/generation.rb', line 7

def as_type
  @as_type
end

#client ⇒ Object (readonly)

Returns the value of attribute client.



7
8
9
# File 'lib/langfuse/generation.rb', line 7

def client
  @client
end

#completion_start_time ⇒ Object (readonly)

Returns the value of attribute completion_start_time.



7
8
9
# File 'lib/langfuse/generation.rb', line 7

def completion_start_time
  @completion_start_time
end

#cost_details ⇒ Object (readonly)

Returns the value of attribute cost_details.



7
8
9
# File 'lib/langfuse/generation.rb', line 7

def cost_details
  @cost_details
end

#end_time ⇒ Object (readonly)

Returns the value of attribute end_time.



7
8
9
# File 'lib/langfuse/generation.rb', line 7

def end_time
  @end_time
end

#id ⇒ Object (readonly)

Returns the value of attribute id.



7
8
9
# File 'lib/langfuse/generation.rb', line 7

def id
  @id
end

#input ⇒ Object (readonly)

Returns the value of attribute input.



7
8
9
# File 'lib/langfuse/generation.rb', line 7

def input
  @input
end

#level ⇒ Object (readonly)

Returns the value of attribute level.



7
8
9
# File 'lib/langfuse/generation.rb', line 7

def level
  @level
end

#metadata ⇒ Object (readonly)

Returns the value of attribute metadata.



7
8
9
# File 'lib/langfuse/generation.rb', line 7

def 
  @metadata
end

#model ⇒ Object (readonly)

Returns the value of attribute model.



7
8
9
# File 'lib/langfuse/generation.rb', line 7

def model
  @model
end

#model_parameters ⇒ Object (readonly)

Returns the value of attribute model_parameters.



7
8
9
# File 'lib/langfuse/generation.rb', line 7

def model_parameters
  @model_parameters
end

#name ⇒ Object (readonly)

Returns the value of attribute name.



7
8
9
# File 'lib/langfuse/generation.rb', line 7

def name
  @name
end

#output ⇒ Object (readonly)

Returns the value of attribute output.



7
8
9
# File 'lib/langfuse/generation.rb', line 7

def output
  @output
end

#parent_observation_id ⇒ Object (readonly)

Returns the value of attribute parent_observation_id.



7
8
9
# File 'lib/langfuse/generation.rb', line 7

def parent_observation_id
  @parent_observation_id
end

#prompt_name ⇒ Object (readonly)

Returns the value of attribute prompt_name.



7
8
9
# File 'lib/langfuse/generation.rb', line 7

def prompt_name
  @prompt_name
end

#prompt_version ⇒ Object (readonly)

Returns the value of attribute prompt_version.



7
8
9
# File 'lib/langfuse/generation.rb', line 7

def prompt_version
  @prompt_version
end

#start_time ⇒ Object (readonly)

Returns the value of attribute start_time.



7
8
9
# File 'lib/langfuse/generation.rb', line 7

def start_time
  @start_time
end

#status_message ⇒ Object (readonly)

Returns the value of attribute status_message.



7
8
9
# File 'lib/langfuse/generation.rb', line 7

def status_message
  @status_message
end

#trace_id ⇒ Object (readonly)

Returns the value of attribute trace_id.



7
8
9
# File 'lib/langfuse/generation.rb', line 7

def trace_id
  @trace_id
end

#usage ⇒ Object (readonly)

Returns the value of attribute usage.



7
8
9
# File 'lib/langfuse/generation.rb', line 7

def usage
  @usage
end

#usage_details ⇒ Object (readonly)

Returns the value of attribute usage_details.



7
8
9
# File 'lib/langfuse/generation.rb', line 7

def usage_details
  @usage_details
end

#version ⇒ Object (readonly)

Returns the value of attribute version.



7
8
9
# File 'lib/langfuse/generation.rb', line 7

def version
  @version
end

Instance Method Details

#embedding(name: nil, start_time: nil, end_time: nil, input: nil, output: nil, model: nil, usage: nil, metadata: nil, level: nil, status_message: nil, version: nil, **kwargs) ⇒ Object

Create a child embedding observation



167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
# File 'lib/langfuse/generation.rb', line 167

def embedding(name: nil, start_time: nil, end_time: nil, input: nil, output: nil,
              model: nil, usage: nil, metadata: nil, level: nil, status_message: nil,
              version: nil, **kwargs)
   = ( || {}).merge(
    { model: model, usage: usage }.compact
  )
  span(
    name: name,
    start_time: start_time,
    end_time: end_time,
    input: input,
    output: output,
    metadata: .empty? ? nil : ,
    level: level,
    status_message: status_message,
    version: version,
    as_type: ObservationType::EMBEDDING,
    **kwargs
  )
end

#end(output: nil, end_time: nil, usage: nil, usage_details: nil, cost_details: nil, **kwargs) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/langfuse/generation.rb', line 77

def end(output: nil, end_time: nil, usage: nil, usage_details: nil, cost_details: nil, **kwargs)
  @end_time = end_time || Utils.current_timestamp
  @output = output unless output.nil?
  @usage.merge!(usage) if usage
  @usage_details.merge!(usage_details) if usage_details
  @cost_details.merge!(cost_details) if cost_details
  @kwargs.merge!(kwargs)

  track_changes(
    { end_time: @end_time, output: output, usage: usage,
      usage_details: usage_details, cost_details: cost_details },
    kwargs.keys
  )
  update_generation
  self
end

#event(name:, start_time: nil, input: nil, output: nil, metadata: nil, level: nil, status_message: nil, version: nil, **kwargs) ⇒ Object

Create a child event



143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
# File 'lib/langfuse/generation.rb', line 143

def event(name:, start_time: nil, input: nil, output: nil, metadata: nil,
          level: nil, status_message: nil, version: nil, **kwargs)
  @client.event(
    trace_id: @trace_id,
    name: name,
    start_time: start_time,
    input: input,
    output: output,
    metadata: ,
    level: level,
    status_message: status_message,
    parent_observation_id: @id,
    version: version,
    **kwargs
  )
end

#generation(name: nil, start_time: nil, end_time: nil, completion_start_time: nil, model: nil, model_parameters: nil, input: nil, output: nil, usage: nil, usage_details: nil, cost_details: nil, prompt: nil, metadata: nil, level: nil, status_message: nil, version: nil, **kwargs) ⇒ Object

Create a child generation



115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# File 'lib/langfuse/generation.rb', line 115

def generation(name: nil, start_time: nil, end_time: nil, completion_start_time: nil,
               model: nil, model_parameters: nil, input: nil, output: nil, usage: nil,
               usage_details: nil, cost_details: nil, prompt: nil,
               metadata: nil, level: nil, status_message: nil, version: nil, **kwargs)
  @client.generation(
    trace_id: @trace_id,
    name: name,
    start_time: start_time,
    end_time: end_time,
    completion_start_time: completion_start_time,
    model: model,
    model_parameters: model_parameters,
    input: input,
    output: output,
    usage: usage,
    usage_details: usage_details,
    cost_details: cost_details,
    prompt: prompt,
    metadata: ,
    level: level,
    status_message: status_message,
    parent_observation_id: @id,
    version: version,
    **kwargs
  )
end

#get_url ⇒ Object



200
201
202
# File 'lib/langfuse/generation.rb', line 200

def get_url
  "#{@client.host}/trace/#{@trace_id}?observation=#{@id}"
end

#score(name:, value:, data_type: nil, comment: nil, **kwargs) ⇒ Object



188
189
190
191
192
193
194
195
196
197
198
# File 'lib/langfuse/generation.rb', line 188

def score(name:, value:, data_type: nil, comment: nil, **kwargs)
  @client.score(
    trace_id: @trace_id,
    observation_id: @id,
    name: name,
    value: value,
    data_type: data_type,
    comment: comment,
    **kwargs
  )
end

#span(name: nil, start_time: nil, end_time: nil, input: nil, output: nil, metadata: nil, level: nil, status_message: nil, version: nil, as_type: nil, **kwargs) ⇒ Object

Create a child span



95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/langfuse/generation.rb', line 95

def span(name: nil, start_time: nil, end_time: nil, input: nil, output: nil,
         metadata: nil, level: nil, status_message: nil, version: nil, as_type: nil, **kwargs)
  @client.span(
    trace_id: @trace_id,
    name: name,
    start_time: start_time,
    end_time: end_time,
    input: input,
    output: output,
    metadata: ,
    level: level,
    status_message: status_message,
    parent_observation_id: @id,
    version: version,
    as_type: as_type,
    **kwargs
  )
end

#to_dict ⇒ Object



204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
# File 'lib/langfuse/generation.rb', line 204

def to_dict
  data = {
    id: @id,
    trace_id: @trace_id,
    name: @name,
    start_time: @start_time,
    end_time: @end_time,
    completion_start_time: @completion_start_time,
    model: @model,
    model_parameters: @model_parameters,
    input: @input,
    output: @output,
    usage: @usage,
    metadata: @metadata,
    level: @level,
    status_message: @status_message,
    parent_observation_id: @parent_observation_id,
    version: @version
  }
  data[:usage_details] = @usage_details unless @usage_details.nil? || @usage_details.empty?
  data[:cost_details] = @cost_details unless @cost_details.nil? || @cost_details.empty?
  data[:prompt_name] = @prompt_name if @prompt_name
  data[:prompt_version] = @prompt_version if @prompt_version
  data[:type] = @as_type if @as_type
  data.merge(@kwargs).compact
end

#update(name: nil, end_time: nil, completion_start_time: nil, model: nil, model_parameters: nil, input: nil, output: nil, usage: nil, usage_details: nil, cost_details: nil, prompt: nil, metadata: nil, level: nil, status_message: nil, version: nil, **kwargs) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/langfuse/generation.rb', line 44

def update(name: nil, end_time: nil, completion_start_time: nil, model: nil,
           model_parameters: nil, input: nil, output: nil, usage: nil,
           usage_details: nil, cost_details: nil, prompt: nil, metadata: nil,
           level: nil, status_message: nil, version: nil, **kwargs)
  @name = name unless name.nil?
  @end_time = end_time unless end_time.nil?
  @completion_start_time = completion_start_time unless completion_start_time.nil?
  @model = model unless model.nil?
  @model_parameters.merge!(model_parameters) if model_parameters
  @input = input unless input.nil?
  @output = output unless output.nil?
  @usage.merge!(usage) if usage
  @usage_details.merge!(usage_details) if usage_details
  @cost_details.merge!(cost_details) if cost_details
  @prompt_name, @prompt_version = extract_prompt_info(prompt) if prompt
  @metadata.merge!() if 
  @level = level unless level.nil?
  @status_message = status_message unless status_message.nil?
  @version = version unless version.nil?
  @kwargs.merge!(kwargs)

  changes = { name: name, end_time: end_time, completion_start_time: completion_start_time,
              model: model, model_parameters: model_parameters, input: input, output: output,
              usage: usage, usage_details: usage_details, cost_details: cost_details,
              metadata: , level: level, status_message: status_message,
              version: version }
  changes.merge!(prompt_name: @prompt_name, prompt_version: @prompt_version) if prompt

  track_changes(changes, kwargs.keys)
  update_generation
  self
end