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

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

Constant Summary collapse

DATA_RESIDENCY_MODEL_PATTERN =
/\Agpt-5\.(?:4|5)(?:-(?:mini|nano|pro|codex(?:-mini|-max)?))?(?:-\d{4}-\d{2}-\d{2})?\z/
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)


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

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

.chat_completions_search?(model) ⇒ Boolean

Returns:

  • (Boolean)


37
38
39
# File 'lib/llm_cost_tracker/providers/openai/model_families.rb', line 37

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

.data_residency?(model) ⇒ Boolean

Returns:

  • (Boolean)


25
26
27
# File 'lib/llm_cost_tracker/providers/openai/model_families.rb', line 25

def data_residency?(model)
  model.to_s.match?(DATA_RESIDENCY_MODEL_PATTERN)
end

.image_output?(model) ⇒ Boolean

Returns:

  • (Boolean)


29
30
31
# File 'lib/llm_cost_tracker/providers/openai/model_families.rb', line 29

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

.reasoning?(model) ⇒ Boolean

Returns:

  • (Boolean)


41
42
43
44
45
46
47
# File 'lib/llm_cost_tracker/providers/openai/model_families.rb', line 41

def 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