Class: LlmCostTracker::Parsers::Gemini
- Defined in:
- lib/llm_cost_tracker/parsers/gemini.rb
Constant Summary collapse
- HOSTS =
%w[generativelanguage.googleapis.com].freeze
- TRACKED_PATH_PATTERN =
%r{/models/[^/:]+:(?:generateContent|streamGenerateContent)\z}
Instance Method Summary collapse
Instance Method Details
#match?(url) ⇒ Boolean
13 14 15 16 17 18 |
# File 'lib/llm_cost_tracker/parsers/gemini.rb', line 13 def match?(url) uri = URI.parse(url.to_s) HOSTS.include?(uri.host.to_s.downcase) && uri.path.match?(TRACKED_PATH_PATTERN) rescue URI::InvalidURIError false end |
#parse(request_url, _request_body, response_status, response_body) ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/llm_cost_tracker/parsers/gemini.rb', line 20 def parse(request_url, _request_body, response_status, response_body) return nil unless response_status == 200 response = safe_json_parse(response_body) usage = response["usageMetadata"] return nil unless usage # Extract model from URL: /v1beta/models/gemini-2.5-flash:generateContent model = extract_model_from_url(request_url) ParsedUsage.build( provider: "gemini", model: model, input_tokens: usage["promptTokenCount"] || 0, output_tokens: output_tokens(usage), total_tokens: usage["totalTokenCount"] || 0, cached_input_tokens: usage["cachedContentTokenCount"] ) end |