Module: LlmCostTracker::Masking

Defined in:
lib/llm_cost_tracker/masking.rb

Constant Summary collapse

SENSITIVE_KEYS =
%i[
  provider_api_key_id provider_workspace_id provider_organization_id provider_project_id
].to_set.freeze
MASK_TAIL_LENGTH =
4

Class Method Summary collapse

Class Method Details

.format_attribution(attribution, separator: ", ") ⇒ Object



20
21
22
23
24
# File 'lib/llm_cost_tracker/masking.rb', line 20

def format_attribution(attribution, separator: ", ")
  return "" if attribution.nil? || attribution.empty?

  attribution.map { |key, value| "#{key}=#{mask_value(key, value)}" }.join(separator)
end

.mask_hash(hash) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/llm_cost_tracker/masking.rb', line 26

def mask_hash(hash)
  return hash unless hash.is_a?(Hash)

  hash.each_with_object({}) do |(key, value), masked|
    masked[key] = case value
                  when Hash then mask_hash(value)
                  when Array then value.map { |entry| entry.is_a?(Hash) ? mask_hash(entry) : entry }
                  else
                    mask_value(key, value)
                  end
  end
end

.mask_value(key, value) ⇒ Object



12
13
14
15
16
17
18
# File 'lib/llm_cost_tracker/masking.rb', line 12

def mask_value(key, value)
  string = value.to_s
  return string unless SENSITIVE_KEYS.include?(key.to_sym)
  return string if string.length <= MASK_TAIL_LENGTH

  "***#{string[-MASK_TAIL_LENGTH, MASK_TAIL_LENGTH]}"
end