Class: Langfuse::Chain

Inherits:
BaseObservation show all
Defined in:
lib/langfuse/observations.rb

Overview

Observation for tracking structured multi-step workflows and process chains.

Examples:

Block-based API

Langfuse.observe("rag-pipeline", as_type: :chain) do |chain|
  chain.input = { query: "What is Ruby?" }
  # Step 1: Retrieve documents
  chain.start_observation("retrieve", { query: chain.input[:query] }, as_type: :retriever) do |ret|
    docs = vector_db.search(chain.input[:query])
    ret.update(output: docs)
  end
  # Step 2: Generate response
  chain.start_observation("generate", { model: "gpt-4" }, as_type: :generation) do |gen|
    response = llm.generate(docs)
    gen.update(output: response)
  end
  chain.update(output: { answer: "Ruby is a programming language..." })
end

Stateful API

chain = Langfuse.start_observation("multi-step-process", {
  input: { data: "input_data" }
}, as_type: :chain)
# Chain steps here
chain.update(output: { result: "processed_data" })
chain.end

Instance Attribute Summary

Attributes inherited from BaseObservation

#otel_span, #otel_tracer, #type

Instance Method Summary collapse

Methods inherited from BaseObservation

#current_span, #end, #event, #id, #input=, #level=, #metadata=, #output=, #score_trace, #start_observation, #trace_id, #trace_url, #update_trace

Constructor Details

#initialize(otel_span, otel_tracer, attributes: nil) ⇒ Chain

Returns a new instance of Chain.

Parameters:

  • otel_span (OpenTelemetry::SDK::Trace::Span)

    The underlying OTel span

  • otel_tracer (OpenTelemetry::SDK::Trace::Tracer)

    The OTel tracer

  • attributes (Hash, Types::SpanAttributes, nil) (defaults to: nil)

    Optional initial attributes



504
505
506
# File 'lib/langfuse/observations.rb', line 504

def initialize(otel_span, otel_tracer, attributes: nil)
  super(otel_span, otel_tracer, attributes: attributes, type: OBSERVATION_TYPES[:chain])
end

Instance Method Details

#update(attrs) ⇒ self

Parameters:

Returns:

  • (self)


510
511
512
513
# File 'lib/langfuse/observations.rb', line 510

def update(attrs)
  update_observation_attributes(attrs)
  self
end