Module: Riffer::Tracing::Capture

Extended by:
Capture
Included in:
Capture
Defined in:
lib/riffer/tracing/capture.rb

Overview

Serializes riffer messages into the GenAI semconv JSON message structure for opt-in span content capture. File parts become metadata-only stubs —bytes and URLs never reach a span attribute.

Instance Method Summary collapse

Instance Method Details

#input_messages(messages) ⇒ Object

– : (Array) -> String



14
15
16
# File 'lib/riffer/tracing/capture.rb', line 14

def input_messages(messages)
  JSON.generate(messages.filter_map { |message| convert_message(message) })
end

#output_messages(content:, tool_calls:, finish_reason:) ⇒ Object

– : (content: String?, tool_calls: Array, finish_reason: Symbol?) -> String



29
30
31
32
33
# File 'lib/riffer/tracing/capture.rb', line 29

def output_messages(content:, tool_calls:, finish_reason:)
  message = {role: "assistant", parts: assistant_parts(content, tool_calls)} #: Hash[Symbol, untyped]
  message[:finish_reason] = finish_reason if finish_reason
  JSON.generate([message])
end

#system_instructions(messages) ⇒ Object

– : (Array) -> String?



20
21
22
23
24
25
# File 'lib/riffer/tracing/capture.rb', line 20

def system_instructions(messages)
  parts = messages.grep(Riffer::Messages::System).map { |message| text_part(message.content) }
  return nil if parts.empty?

  JSON.generate(parts)
end