pub struct ProviderId(/* private fields */);Expand description
Validated vendor and protocol-family pair from this build’s dialect tables,
a catalog-only provider the registry cannot configure, or a vendor
declared at run time (Self::declare). Construction and
deserialization reject unregistered pairs; only ProviderId::catalog,
ProviderId::declare and the model catalog produce a catalog-only or
declared id, which has no format and no preset. Equality and hashing use
the pair, not dialect options; display emits vendor/format, or the
vendor alone for a catalog-only or declared id.
Implementations§
Source§impl ProviderId
impl ProviderId
Sourcepub fn all() -> impl Iterator<Item = ProviderId>
pub fn all() -> impl Iterator<Item = ProviderId>
Every selection this build registers: one per OpenAI-shaped dialect, one per Messages-format dialect, and Gemini. Catalog-only providers are not selections.
Sourcepub fn new(vendor: &str, format: Format) -> Option<Self>
pub fn new(vendor: &str, format: Format) -> Option<Self>
The selection vendor names in format, or None when this build
registers no such pair.
Sourcepub fn catalog(vendor: &str) -> Option<Self>
pub fn catalog(vendor: &str) -> Option<Self>
The id the model catalog files vendor’s models under: its
primary selection, or a catalog-only id for a provider the registry
cannot configure (aws_bedrock, vertexai, gemini-grpc, candle,
voyageai). None for a vendor this build does not know.
A vendor registered in one family has that family as its primary.
The vendors registered in two declare theirs: Anthropic’s for
minimax, OpenAI’s for zai, moonshot and xiaomimimo. A model
reference that names no family is reached by its catalog row’s,
which is the primary unless the row says otherwise.
Sourcepub fn declare(vendor: &str) -> Result<Self, SelectionError>
pub fn declare(vendor: &str) -> Result<Self, SelectionError>
Declare vendor, a provider this build has no preset for, such as a
company gateway (corp) or a local server under a name of its own,
and return the id the catalog files its models under. From then on
Self::catalog finds it, so corp/big resolves, parses and reads
back like a built-in reference once the catalog lists the model
(Catalog::insert). The registry cannot configure it: whoever
declares it says how its models are reached, such as with
Connector::provide or by
building a ProviderConfig from a dialect of its own.
Declaring is idempotent and process-wide. A vendor this build already
knows comes back as Self::catalog gives it.
use rig_core::catalog::{Catalog, ModelSpec};
use rig_core::providers::registry::ProviderId;
let corp = ProviderId::declare("corp")?;
let mut catalog = Catalog::builtin().clone();
catalog.insert(ModelSpec::new(corp, "big").with_tools(true));
assert_eq!(catalog.resolve("corp/big").map_err(|e| e.to_string())?.spec.provider, corp);
assert_eq!(ProviderId::declare("anthropic")?, ProviderId::catalog("anthropic").ok_or("known")?);§Errors
SelectionError::Malformed for an empty name, or one with a /
or whitespace, which a vendor/model reference could not spell.
Sourcepub fn vendor(&self) -> &'static str
pub fn vendor(&self) -> &'static str
The vendor, spelled as the provider’s own descriptor name.
Sourcepub fn format(&self) -> Option<Format>
pub fn format(&self) -> Option<Format>
The protocol family, or None for a catalog-only or declared
provider.
Sourcepub fn is_registered(&self) -> bool
pub fn is_registered(&self) -> bool
Whether the registry can configure this provider. A catalog-only provider is served by its companion crate instead, and a declared one by whoever declared it.
Sourcepub fn is_declared(&self) -> bool
pub fn is_declared(&self) -> bool
Whether this is a vendor declared at run time (Self::declare).
Sourcepub fn vendor_selections(vendor: &str) -> impl Iterator<Item = ProviderId> + '_
pub fn vendor_selections(vendor: &str) -> impl Iterator<Item = ProviderId> + '_
Every selection registered for vendor, in registration order.
Sourcepub fn resolve(selection: &str) -> Result<Self, SelectionError>
pub fn resolve(selection: &str) -> Result<Self, SelectionError>
Resolve vendor or vendor/format.
A bare vendor is accepted only when this build registers exactly one family for it; otherwise the error names the qualified alternatives, each of which this resolver accepts. A catalog-only provider is not a selection, so it does not resolve.
Sourcepub fn config(&self, api_key: impl Into<Secret>) -> Option<ProviderConfig>
pub fn config(&self, api_key: impl Into<Secret>) -> Option<ProviderConfig>
Build this selection’s preset with api_key, or None for a
catalog-only or declared provider. Copilot requires an exchanged
session token, not a GitHub OAuth token.
Sourcepub fn api_key_envs(&self) -> Vec<&'static str>
pub fn api_key_envs(&self) -> Vec<&'static str>
The environment variables tried for the key, in order: the
dialect’s own, then its alternative credential’s (Azure’s
AZURE_TOKEN). An empty value counts as unset. Empty for a
catalog-only provider, whose companion crate reads its own
credentials, and for a declared one.
Sourcepub fn requires_credential(&self) -> bool
pub fn requires_credential(&self) -> bool
Whether this selection needs a credential at all. false for a
declared provider: whoever reaches it holds what it needs.
A local llama-server authenticates optionally, so naming its
variable is a hint rather than a requirement.
Trait Implementations§
Source§impl Clone for ProviderId
impl Clone for ProviderId
impl Copy for ProviderId
Source§impl Debug for ProviderId
impl Debug for ProviderId
Source§impl<'de> Deserialize<'de> for ProviderId
Reads a selection as ProviderId::resolve does, and a catalog-only or
declared provider by its vendor name, so a catalog id reads back. A
declared vendor reads back only once this process declared it.
impl<'de> Deserialize<'de> for ProviderId
Reads a selection as ProviderId::resolve does, and a catalog-only or
declared provider by its vendor name, so a catalog id reads back. A
declared vendor reads back only once this process declared it.
Source§fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error>
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error>
Source§impl Display for ProviderId
impl Display for ProviderId
impl Eq for ProviderId
Source§impl Hash for ProviderId
impl Hash for ProviderId
Source§impl PartialEq for ProviderId
Identity is the (vendor, format) pair, never the dialect’s payload: two
ids that name the same selection are the same id.
impl PartialEq for ProviderId
Identity is the (vendor, format) pair, never the dialect’s payload: two
ids that name the same selection are the same id.
Auto Trait Implementations§
impl Freeze for ProviderId
impl RefUnwindSafe for ProviderId
impl Send for ProviderId
impl Sync for ProviderId
impl Unpin for ProviderId
impl UnsafeUnpin for ProviderId
impl UnwindSafe for ProviderId
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.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 moreSource§impl<T> IntoToolOutput for Twhere
T: Serialize + 'static,
impl<T> IntoToolOutput for Twhere
T: Serialize + 'static,
Source§fn into_tool_output(self) -> Result<ToolOutput, ToolExecutionError>
fn into_tool_output(self) -> Result<ToolOutput, ToolExecutionError>
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> ToStringFallible for Twhere
T: Display,
impl<T> ToStringFallible for Twhere
T: Display,
Source§fn try_to_string(&self) -> Result<String, TryReserveError>
fn try_to_string(&self) -> Result<String, TryReserveError>
ToString::to_string, but without panic on OOM.