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
|