Module: Legion::LLM::Pipeline::AuditPublisher

Extended by:
Legion::Logging::Helper
Defined in:
lib/legion/llm/pipeline/audit_publisher.rb

Class Method Summary collapse

Class Method Details

.build_event(request:, response:) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/legion/llm/pipeline/audit_publisher.rb', line 12

def build_event(request:, response:)
  {
    request_id:       response.request_id,
    conversation_id:  response.conversation_id,
    caller:           response.caller,
    routing:          response.routing,
    tokens:           response.tokens,
    cost:             response.cost,
    enrichments:      response.enrichments,
    audit:            response.audit,
    timeline:         response.timeline,
    timestamps:       response.timestamps,
    classification:   response.classification,
    tracing:          response.tracing,
    messages:         request.messages,
    response_content: response.message[:content],
    tools_used:       response.tools,
    timestamp:        Time.now,
    request_type:     request.respond_to?(:request_type) ? request.request_type : 'chat',
    tier:             response.routing.is_a?(Hash) ? response.routing[:tier] : nil,
    message_context:  build_message_context(request: request, response: response)
  }
end

.build_message_context(response:) ⇒ Object



45
46
47
48
49
50
# File 'lib/legion/llm/pipeline/audit_publisher.rb', line 45

def build_message_context(response:, **)
  {
    request_id:      response.request_id,
    conversation_id: response.conversation_id
  }.compact
end

.publish(request:, response:) ⇒ Object



36
37
38
39
40
41
42
43
# File 'lib/legion/llm/pipeline/audit_publisher.rb', line 36

def publish(request:, response:)
  event = build_event(request: request, response: response)
  Legion::LLM::Audit.emit_prompt(event)
  event
rescue StandardError => e
  handle_exception(e, level: :warn)
  nil
end