Module: Raif::ModelManifest::RegistryData
- Defined in:
- lib/raif/model_manifest/registry_data.rb
Overview
Builds the runtime registry data structures from manifest entries. Consumed by Raif.default_llms and friends (lib/raif/default_models.rb) and by specs.
Class Method Summary collapse
- .config_for(entry) ⇒ Object
-
.display_name_for(entry) ⇒ Object
The manifest stores open_ai display_name without a "(Responses API)" suffix; append it for responses endpoint entries so the two keys for one model are distinguishable wherever names are shown.
- .embedding_configs(manifest) ⇒ Object
- .llm_configs(manifest) ⇒ Object
- .provider_settings_for(entry) ⇒ Object
- .streaming_unsupported_keys(manifest) ⇒ Object
Class Method Details
.config_for(entry) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/raif/model_manifest/registry_data.rb', line 18 def self.config_for(entry) config = { key: entry.key, api_name: entry.api_name, display_name: display_name_for(entry), input_token_cost: entry.pricing.fetch(:input_per_million).to_f / 1_000_000, output_token_cost: entry.pricing.fetch(:output_per_million).to_f / 1_000_000 } config[:max_completion_tokens] = entry.max_completion_tokens if entry.max_completion_tokens settings = provider_settings_for(entry) config[:model_provider_settings] = settings if settings.any? tools = entry.capabilities.fetch(:provider_managed_tools, []) if tools.any? # PROVIDER_MANAGED_TOOL_CLASSES stays string-keyed like the other # lookup maps in ModelManifest; tool symbols convert at the # lookup rather than the constant changing shape. config[:supported_provider_managed_tools] = tools.map { |t| PROVIDER_MANAGED_TOOL_CLASSES.fetch(t.to_s).constantize } end config[:supports_native_tool_use] = false unless entry.capabilities.fetch(:native_tool_use) config[:lifecycle] = entry.lifecycle pricing = { input_per_million: entry.pricing.fetch(:input_per_million), output_per_million: entry.pricing.fetch(:output_per_million), note: entry.pricing[:note], valid_until: entry.pricing[:valid_until] } pricing[:cache_read_per_million] = entry.pricing[:cache_read_per_million] if entry.pricing.key?(:cache_read_per_million) config[:pricing] = pricing.freeze config[:capabilities] = entry.capabilities if entry.deprecated? config[:deprecated] = true config[:retirement_date] = entry.lifecycle[:retirement_date] config[:replacement_key] = entry.lifecycle[:replacement_key] config[:migration_note] = entry.lifecycle[:migration_note] end config end |
.display_name_for(entry) ⇒ Object
The manifest stores open_ai display_name without a "(Responses API)" suffix; append it for responses endpoint entries so the two keys for one model are distinguishable wherever names are shown.
86 87 88 89 90 |
# File 'lib/raif/model_manifest/registry_data.rb', line 86 def self.display_name_for(entry) return entry.display_name unless entry.endpoint == "responses" "#{entry.display_name} (Responses API)" end |
.embedding_configs(manifest) ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/raif/model_manifest/registry_data.rb', line 92 def self.(manifest) manifest..reject(&:retired?).group_by(&:adapter_class_name).transform_values do |entries| entries.map do |entry| { key: entry.key, api_name: entry.api_name, display_name: entry.display_name, input_token_cost: entry.input_per_million.to_f / 1_000_000, default_output_vector_size: entry.default_output_vector_size, lifecycle: entry.lifecycle, pricing: { input_per_million: entry.input_per_million }.freeze } end end end |
.llm_configs(manifest) ⇒ Object
10 11 12 13 14 15 16 |
# File 'lib/raif/model_manifest/registry_data.rb', line 10 def self.llm_configs(manifest) grouped = manifest.llm_entries.reject(&:retired?).group_by(&:adapter_class_name) ADAPTER_ORDER.each_with_object({}) do |adapter, out| entries = grouped[adapter] or next out[adapter] = entries.map { |entry| config_for(entry) } end end |
.provider_settings_for(entry) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/raif/model_manifest/registry_data.rb', line 62 def self.provider_settings_for(entry) caps = entry.capabilities defaults = ADAPTER_DEFAULTS.fetch(entry.adapter_class_name) settings = {} temperature = caps.fetch(:temperature) settings[:supports_temperature] = temperature if temperature != defaults.fetch("temperature") structured_outputs = caps.fetch(:structured_outputs) settings[:supports_structured_outputs] = structured_outputs if structured_outputs != defaults.fetch("structured_outputs") batch_inference = caps.fetch(:batch_inference) settings[:supports_batch_inference] = batch_inference if batch_inference != defaults.fetch("batch_inference") TOOL_CHOICE_CAPABILITY_KEYS.each do |capability| settings[:"supports_#{capability}"] = false unless caps.fetch(capability) end settings end |
.streaming_unsupported_keys(manifest) ⇒ Object
108 109 110 |
# File 'lib/raif/model_manifest/registry_data.rb', line 108 def self.streaming_unsupported_keys(manifest) manifest.llm_entries.reject(&:retired?).reject { |e| e.capabilities.fetch(:streaming) }.map { |e| e.key.to_s } end |