Skip to main content

ModelHandle

Struct ModelHandle 

Source
pub struct ModelHandle { /* private fields */ }
Expand description

A cloneable, opaque handle to live completion-model behavior.

The handle is the boundary between typed provider authoring and Rig’s concrete high-level agent facade. It is intentionally not serializable: captured clients, credentials, and transports are live process state. Applications that need persistent model selection should serialize a separate identifier and resolve it to a handle at runtime.

Cloning is cheap and shares the retained model through an Arc. Replacing a handle on one cloned agent has value semantics and does not mutate other agent clones; each in-flight attempt owns its own handle clone, so in-flight work never rebinds. The erased model is retained in a shared Arc, so each completion/stream attempt runs against the same instance: no per-call clone of the model itself, and interior-mutable model state (counters, rotating endpoints, local caches) persists across attempts.

The absence of serde implementations is intentional:

use rig_agent::ModelHandle;

fn requires_serialize<T: serde::Serialize>() {}
requires_serialize::<ModelHandle>();
use rig_agent::ModelHandle;

fn requires_deserialize<T: for<'de> serde::Deserialize<'de>>() {}
requires_deserialize::<ModelHandle>();

Implementations§

Source§

impl ModelHandle

Source

pub fn new<M>(model: M) -> Self
where M: CompletionModel + 'static,

Erase a typed completion model into a runtime model handle.

Source

pub fn named<M>(label: impl Into<String>, model: M) -> Self
where M: CompletionModel + 'static,

Erase a typed completion model and attach a diagnostic label.

Labels are for logs and routing diagnostics only. They are not stable provider identities and are not serialized.

Source

pub fn label(&self) -> Option<&str>

Returns the optional diagnostic label attached to this handle.

Trait Implementations§

Source§

impl Clone for ModelHandle

Source§

fn clone(&self) -> ModelHandle

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl CompletionModel for ModelHandle

A handle behaves exactly like the model it erased, with capabilities served from the snapshot captured at erasure time.

It deliberately adds no request validation of its own. Both agent surfaces reach a model through CompletionRequestBuilderrunner.rs’s blocking turn calls builder.send(), the streaming turn calls builder.stream() — and the builder already runs CompletionRequest::validate_message_content. Repeating it here would scan the whole history a second time on every model call and buy nothing.

Source§

fn completion( &self, request: CompletionRequest, ) -> impl Future<Output = Result<CompletionResponse, CompletionError>> + WasmCompatSend

Generates a completion response for the given completion request.
Source§

fn stream( &self, request: CompletionRequest, ) -> impl Future<Output = Result<StreamingCompletionResponse, CompletionError>> + WasmCompatSend

Streams a completion response for the given completion request.
Source§

fn capabilities(&self) -> ProviderCapabilities

Provider behavior a runtime should account for when preparing requests. Read more
Source§

fn completion_request( &self, prompt: impl Into<Message>, ) -> CompletionRequestBuilder<Self>
where Self: Sized + Clone,

Generates a completion request builder for the given prompt.
Source§

impl Debug for ModelHandle

Source§

fn fmt(&self, formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<M> AgentModelExt for M
where M: CompletionModel,

Source§

fn into_agent_builder(self) -> AgentBuilder
where Self: 'static,

Convert this model into a classic agent builder.
Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneDebuggableStorage for T

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> CloneableStorage for T
where T: Any + Send + Sync + Clone,

Source§

impl<T> DebuggableStorage for T
where T: Any + Send + Sync + Debug,

Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WasmCompatSend for T
where T: Send,

Source§

impl<T> WasmCompatSync for T
where T: Sync,

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more