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
- .format_attribution(attribution, separator: ", ") ⇒ Object
- .mask_hash(hash) ⇒ Object
- .mask_value(key, value) ⇒ Object
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 |