Class: Langfuse::Generation

Inherits:
Object
  • Object
show all
Defined in:
lib/langfuse/generation.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

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.



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

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_typeObject (readonly)

Returns the value of attribute as_type.



5
6
7
# File 'lib/langfuse/generation.rb', line 5

def as_type
  @as_type
end

#clientObject (readonly)

Returns the value of attribute client.



5
6
7
# File 'lib/langfuse/generation.rb', line 5

def client
  @client
end

#completion_start_timeObject (readonly)

Returns the value of attribute completion_start_time.



5
6
7
# File 'lib/langfuse/generation.rb', line 5

def completion_start_time
  @completion_start_time
end

#cost_detailsObject (readonly)

Returns the value of attribute cost_details.



5
6
7
# File 'lib/langfuse/generation.rb', line 5

def cost_details
  @cost_details
end

#end_timeObject (readonly)

Returns the value of attribute end_time.



5
6
7
# File 'lib/langfuse/generation.rb', line 5

def end_time
  @end_time
end

#idObject (readonly)

Returns the value of attribute id.



5
6
7
# File 'lib/langfuse/generation.rb', line 5

def id
  @id
end

#inputObject (readonly)

Returns the value of attribute input.



5
6
7
# File 'lib/langfuse/generation.rb', line 5

def input
  @input
end

#levelObject (readonly)

Returns the value of attribute level.



5
6
7
# File 'lib/langfuse/generation.rb', line 5

def level
  @level
end

#metadataObject (readonly)

Returns the value of attribute metadata.



5
6
7
# File 'lib/langfuse/generation.rb', line 5

def 
  @metadata
end

#modelObject (readonly)

Returns the value of attribute model.



5
6
7
# File 'lib/langfuse/generation.rb', line 5

def model
  @model
end

#model_parametersObject (readonly)

Returns the value of attribute model_parameters.



5
6
7
# File 'lib/langfuse/generation.rb', line 5

def model_parameters
  @model_parameters
end

#nameObject (readonly)

Returns the value of attribute name.



5
6
7
# File 'lib/langfuse/generation.rb', line 5

def name
  @name
end

#outputObject (readonly)

Returns the value of attribute output.



5
6
7
# File 'lib/langfuse/generation.rb', line 5

def output
  @output
end

#parent_observation_idObject (readonly)

Returns the value of attribute parent_observation_id.



5
6
7
# File 'lib/langfuse/generation.rb', line 5

def parent_observation_id
  @parent_observation_id
end

#prompt_nameObject (readonly)

Returns the value of attribute prompt_name.



5
6
7
# File 'lib/langfuse/generation.rb', line 5

def prompt_name
  @prompt_name
end

#prompt_versionObject (readonly)

Returns the value of attribute prompt_version.



5
6
7
# File 'lib/langfuse/generation.rb', line 5

def prompt_version
  @prompt_version
end

#start_timeObject (readonly)

Returns the value of attribute start_time.



5
6
7
# File 'lib/langfuse/generation.rb', line 5

def start_time
  @start_time
end

#status_messageObject (readonly)

Returns the value of attribute status_message.



5
6
7
# File 'lib/langfuse/generation.rb', line 5

def status_message
  @status_message
end

#trace_idObject (readonly)

Returns the value of attribute trace_id.



5
6
7
# File 'lib/langfuse/generation.rb', line 5

def trace_id
  @trace_id
end

#usageObject (readonly)

Returns the value of attribute usage.



5
6
7
# File 'lib/langfuse/generation.rb', line 5

def usage
  @usage
end

#usage_detailsObject (readonly)

Returns the value of attribute usage_details.



5
6
7
# File 'lib/langfuse/generation.rb', line 5

def usage_details
  @usage_details
end

#versionObject (readonly)

Returns the value of attribute version.



5
6
7
# File 'lib/langfuse/generation.rb', line 5

def version
  @version
end

Instance Method Details

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

Create a child agent observation



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

def agent(name: nil, start_time: nil, end_time: nil, input: nil, output: nil,
          metadata: nil, level: nil, status_message: nil, version: nil, **kwargs)
  span(
    name: name,
    start_time: start_time,
    end_time: end_time,
    input: input,
    output: output,
    metadata: ,
    level: level,
    status_message: status_message,
    version: version,
    as_type: ObservationType::AGENT,
    **kwargs
  )
end

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

Create a child chain observation



180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
# File 'lib/langfuse/generation.rb', line 180

def chain(name: nil, start_time: nil, end_time: nil, input: nil, output: nil,
          metadata: nil, level: nil, status_message: nil, version: nil, **kwargs)
  span(
    name: name,
    start_time: start_time,
    end_time: end_time,
    input: input,
    output: output,
    metadata: ,
    level: level,
    status_message: status_message,
    version: version,
    as_type: ObservationType::CHAIN,
    **kwargs
  )
end

#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



216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
# File 'lib/langfuse/generation.rb', line 216

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



67
68
69
70
71
72
73
74
75
76
77
# File 'lib/langfuse/generation.rb', line 67

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 if output
  @usage.merge!(usage) if usage
  @usage_details.merge!(usage_details) if usage_details
  @cost_details.merge!(cost_details) if cost_details
  @kwargs.merge!(kwargs)

  update_generation
  self
end

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

Create a child evaluator observation



238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
# File 'lib/langfuse/generation.rb', line 238

def evaluator(name: nil, start_time: nil, end_time: nil, input: nil, output: nil,
              metadata: nil, level: nil, status_message: nil, version: nil, **kwargs)
  span(
    name: name,
    start_time: start_time,
    end_time: end_time,
    input: input,
    output: output,
    metadata: ,
    level: level,
    status_message: status_message,
    version: version,
    as_type: ObservationType::EVALUATOR,
    **kwargs
  )
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



124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# File 'lib/langfuse/generation.rb', line 124

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, metadata: nil, level: nil, status_message: nil, version: nil, **kwargs) ⇒ Object

Create a child generation



100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/langfuse/generation.rb', line 100

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,
               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,
    metadata: ,
    level: level,
    status_message: status_message,
    parent_observation_id: @id,
    version: version,
    **kwargs
  )
end

#get_urlObject



285
286
287
# File 'lib/langfuse/generation.rb', line 285

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

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

Create a child guardrail observation



256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
# File 'lib/langfuse/generation.rb', line 256

def guardrail(name: nil, start_time: nil, end_time: nil, input: nil, output: nil,
              metadata: nil, level: nil, status_message: nil, version: nil, **kwargs)
  span(
    name: name,
    start_time: start_time,
    end_time: end_time,
    input: input,
    output: output,
    metadata: ,
    level: level,
    status_message: status_message,
    version: version,
    as_type: ObservationType::GUARDRAIL,
    **kwargs
  )
end

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

Create a child retriever observation



198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
# File 'lib/langfuse/generation.rb', line 198

def retriever(name: nil, start_time: nil, end_time: nil, input: nil, output: nil,
              metadata: nil, level: nil, status_message: nil, version: nil, **kwargs)
  span(
    name: name,
    start_time: start_time,
    end_time: end_time,
    input: input,
    output: output,
    metadata: ,
    level: level,
    status_message: status_message,
    version: version,
    as_type: ObservationType::RETRIEVER,
    **kwargs
  )
end

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



273
274
275
276
277
278
279
280
281
282
283
# File 'lib/langfuse/generation.rb', line 273

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



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/langfuse/generation.rb', line 80

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_dictObject



289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
# File 'lib/langfuse/generation.rb', line 289

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

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

Create a child tool observation



162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
# File 'lib/langfuse/generation.rb', line 162

def tool(name: nil, start_time: nil, end_time: nil, input: nil, output: nil,
         metadata: nil, level: nil, status_message: nil, version: nil, **kwargs)
  span(
    name: name,
    start_time: start_time,
    end_time: end_time,
    input: input,
    output: output,
    metadata: ,
    level: level,
    status_message: status_message,
    version: version,
    as_type: ObservationType::TOOL,
    **kwargs
  )
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



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/langfuse/generation.rb', line 42

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 if name
  @end_time = end_time if end_time
  @completion_start_time = completion_start_time if completion_start_time
  @model = model if model
  @model_parameters.merge!(model_parameters) if model_parameters
  @input = input if input
  @output = output if output
  @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 if level
  @status_message = status_message if status_message
  @version = version if version
  @kwargs.merge!(kwargs)

  update_generation
  self
end