Class: Legion::Data::Models::LLM::SecurityEvent

Inherits:
Object
  • Object
show all
Includes:
ModelHelpers
Defined in:
lib/legion/data/models/llm/security_event.rb

Class Method Summary collapse

Methods included from ModelHelpers

#before_create

Class Method Details

.lineage_for_conversation(conversation_or_id) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/legion/data/models/llm/security_event.rb', line 20

def lineage_for_conversation(conversation_or_id)
  conversation_id = conversation_or_id.respond_to?(:id) ? conversation_or_id.id : conversation_or_id
  requests = MessageInferenceRequest.where(conversation_id: conversation_id).order(:id).all
  request_ids = requests.map(&:id)
  responses = MessageInferenceResponse.where(message_inference_request_id: request_ids).order(:id).all
  response_ids = responses.map(&:id)
  tool_calls = ToolCall.where(message_inference_response_id: response_ids).order(:tool_call_index, :id).all
  tool_call_ids = tool_calls.map(&:id)

  {
    conversation:            Conversation[conversation_id],
    messages:                Message.where(conversation_id: conversation_id).order(:seq, :id).all,
    requests:                requests,
    route_attempts:          RouteAttempt.where(message_inference_request_id: request_ids).order(:message_inference_request_id, :attempt_no,
                                                                                                 :id).all,
    responses:               responses,
    request_payload_hashes:  requests.filter_map(&:request_content_hash),
    response_payload_hashes: responses.filter_map(&:response_content_hash),
    policy_evaluations:      policy_evaluations_for(conversation_id, request_ids, response_ids),
    security_events:         security_events_for(conversation_id, request_ids, response_ids, tool_call_ids),
    tool_calls:              tool_calls,
    tool_call_attempts:      ToolCallAttempt.where(tool_call_id: tool_call_ids).order(:tool_call_id, :attempt_no, :id).all
  }
end