pub struct ModelRegistry { /* private fields */ }Expand description
Indexed view over a ModelConfiguration with identifier-normalised
lookup.
ModelRegistry owns the merged catalog and two auxiliary indices —
by API identifier and by provider — populated at construction time.
Construct one with ModelRegistry::load, which performs the layered
YAML load described on ModelConfiguration. Most callers use the
process-wide singleton returned by get_model_registry rather than
loading their own instance.
Implementations§
Source§impl ModelRegistry
impl ModelRegistry
Sourcepub fn load() -> Result<Self>
pub fn load() -> Result<Self>
Loads the model registry, layering an optional user-side catalog over the embedded one.
Lookup order (highest precedence wins):
OMNI_DEV_MODELS_YAML— explicit override path; short-circuits 2 & 3../.omni-dev/models.yaml— project-local catalog (if present).~/.omni-dev/models.yaml— user-level catalog (if present).- Embedded
src/templates/models.yaml— always present, lowest layer.
Missing user-side files fall through silently. Malformed user-side files log an error and are skipped. A malformed embedded catalog is a hard failure (compile-time invariant).
Sourcepub fn load_layered_from_paths(
project_path: Option<&Path>,
user_path: Option<&Path>,
override_path: Option<&Path>,
) -> Result<Self>
pub fn load_layered_from_paths( project_path: Option<&Path>, user_path: Option<&Path>, override_path: Option<&Path>, ) -> Result<Self>
Loads the registry with explicit paths for the user-side layers.
Exposed primarily for testing — the public entry point is load().
Sourcepub fn config(&self) -> &ModelConfiguration
pub fn config(&self) -> &ModelConfiguration
Returns the merged model configuration.
Sourcepub fn get_model_spec(&self, api_identifier: &str) -> Option<&ModelSpec>
pub fn get_model_spec(&self, api_identifier: &str) -> Option<&ModelSpec>
Returns the model specification for the given API identifier.
Sourcepub fn get_max_output_tokens(&self, api_identifier: &str) -> usize
pub fn get_max_output_tokens(&self, api_identifier: &str) -> usize
Returns the max output tokens for a model, with fallback to provider defaults.
Sourcepub fn get_input_context(&self, api_identifier: &str) -> usize
pub fn get_input_context(&self, api_identifier: &str) -> usize
Returns the input context limit for a model, with fallback to provider defaults.
Sourcepub fn supports_structured_output(&self, api_identifier: &str) -> bool
pub fn supports_structured_output(&self, api_identifier: &str) -> bool
Returns whether the model supports structured JSON-schema output
(output_config.format).
Backs the schema-capability gate for the direct Anthropic and Bedrock
backends (#1119). Resolves through the same identifier normalization as
the other lookups, so Bedrock/region-prefixed forms map to the same
ModelSpec. Any model not present in the catalog — or present but not
flagged — returns false, keeping it on the YAML path rather than
risking a 400 from an unsupported output_config.
Sourcepub fn is_legacy_model(&self, api_identifier: &str) -> bool
pub fn is_legacy_model(&self, api_identifier: &str) -> bool
Checks if a model is legacy.
Sourcepub fn get_all_models(&self) -> &[ModelSpec]
pub fn get_all_models(&self) -> &[ModelSpec]
Returns all available models.
Sourcepub fn get_models_by_provider(&self, provider: &str) -> Vec<&ModelSpec>
pub fn get_models_by_provider(&self, provider: &str) -> Vec<&ModelSpec>
Returns models filtered by provider.
Sourcepub fn is_known_model(&self, identifier: &str) -> bool
pub fn is_known_model(&self, identifier: &str) -> bool
Reports whether identifier names a model this registry knows.
Goes through ModelRegistry::get_model_spec, so Bedrock-style
identifiers (us.anthropic.…-v1:0) are normalised before lookup and
user-supplied models.yaml entries count as known.
Sourcepub fn known_identifiers(&self, provider: &str) -> Vec<&str>
pub fn known_identifiers(&self, provider: &str) -> Vec<&str>
Returns the non-legacy API identifiers for a provider, sorted.
Intended for error messages that need to show the user what they could have typed. Legacy models are omitted: they still resolve, but should not be suggested.
Sourcepub fn get_models_by_provider_and_tier(
&self,
provider: &str,
tier: &str,
) -> Vec<&ModelSpec>
pub fn get_models_by_provider_and_tier( &self, provider: &str, tier: &str, ) -> Vec<&ModelSpec>
Returns models filtered by provider and tier.
Sourcepub fn get_default_model(&self, provider: &str) -> Option<&str>
pub fn get_default_model(&self, provider: &str) -> Option<&str>
Returns the default model identifier for a provider, as defined in models.yaml.
Sourcepub fn get_provider_config(&self, provider: &str) -> Option<&ProviderConfig>
pub fn get_provider_config(&self, provider: &str) -> Option<&ProviderConfig>
Returns the provider configuration.
Sourcepub fn get_tier_info(&self, provider: &str, tier: &str) -> Option<&TierInfo>
pub fn get_tier_info(&self, provider: &str, tier: &str) -> Option<&TierInfo>
Returns tier information for a provider.
Sourcepub fn get_beta_headers(&self, api_identifier: &str) -> &[BetaHeader]
pub fn get_beta_headers(&self, api_identifier: &str) -> &[BetaHeader]
Returns the beta headers for a model.
Sourcepub fn get_max_output_tokens_with_beta(
&self,
api_identifier: &str,
beta_value: &str,
) -> usize
pub fn get_max_output_tokens_with_beta( &self, api_identifier: &str, beta_value: &str, ) -> usize
Returns the max output tokens for a model with a specific beta header active.
Sourcepub fn get_input_context_with_beta(
&self,
api_identifier: &str,
beta_value: &str,
) -> usize
pub fn get_input_context_with_beta( &self, api_identifier: &str, beta_value: &str, ) -> usize
Returns the input context for a model with a specific beta header active.
Sourcepub fn get_model_family(&self, api_identifier: &str) -> ModelFamily
pub fn get_model_family(&self, api_identifier: &str) -> ModelFamily
Classifies a raw model identifier into its ModelFamily.
Resolves through Self::get_model_spec first, so Bedrock/region-
prefixed and versioned identifiers normalize the same way every other
lookup on this registry does; the family word (Fable/Opus/Sonnet/
Haiku) is then matched, case-insensitively, against the resolved
spec’s human-readable ModelSpec::model name. A registry miss
falls back to matching directly against the raw identifier, so a
brand-new model not yet in the catalog still classifies correctly as
long as its id contains the family word. No match on either ⇒
ModelFamily::Unknown.
Auto Trait Implementations§
impl Freeze for ModelRegistry
impl RefUnwindSafe for ModelRegistry
impl Send for ModelRegistry
impl Sync for ModelRegistry
impl Unpin for ModelRegistry
impl UnsafeUnpin for ModelRegistry
impl UnwindSafe for ModelRegistry
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more