Module: LlmCostTracker::Providers::Openai::ModelFamilies

Defined in:
lib/llm_cost_tracker/providers/openai/model_families.rb

Constant Summary collapse

IMAGE_OUTPUT_MODEL_PATTERN =
/\Agpt-image-/i
CHARACTER_BILLED_TTS_MODEL_PATTERN =
/\Atts-1(-hd)?\z/
REASONING_MODEL_PATTERNS =
[
  /\Agpt-5(\b|[\d.-])/i,
  /\Ao\d+(\b|[\d.-])/i
].freeze
NON_REASONING_GPT5_PATTERN =
/\Agpt-5(?:\.\d+)?-chat\b/i
CHAT_COMPLETIONS_SEARCH_MODEL_PATTERN =
/-search-(?:preview|api)\b/i

Class Method Summary collapse

Class Method Details

.character_billed_tts?(model) ⇒ Boolean

Returns:

  • (Boolean)


23
24
25
# File 'lib/llm_cost_tracker/providers/openai/model_families.rb', line 23

def self.character_billed_tts?(model)
  model.to_s.match?(CHARACTER_BILLED_TTS_MODEL_PATTERN)
end

.chat_completions_search?(model) ⇒ Boolean

Returns:

  • (Boolean)


27
28
29
# File 'lib/llm_cost_tracker/providers/openai/model_families.rb', line 27

def self.chat_completions_search?(model)
  model.to_s.match?(CHAT_COMPLETIONS_SEARCH_MODEL_PATTERN)
end

.image_output?(model) ⇒ Boolean

Returns:

  • (Boolean)


19
20
21
# File 'lib/llm_cost_tracker/providers/openai/model_families.rb', line 19

def self.image_output?(model)
  model.to_s.match?(IMAGE_OUTPUT_MODEL_PATTERN)
end

.reasoning?(model) ⇒ Boolean

Returns:

  • (Boolean)


31
32
33
34
35
36
37
# File 'lib/llm_cost_tracker/providers/openai/model_families.rb', line 31

def self.reasoning?(model)
  name = model.to_s
  return false if name.empty?
  return false if NON_REASONING_GPT5_PATTERN.match?(name)

  REASONING_MODEL_PATTERNS.any? { |pattern| pattern.match?(name) }
end