Skip to main content

Hanzo

Struct Hanzo 

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

The Hanzo struct handles sending requests to multiple engines. It is the core multi-threaded component of hanzo, and uses mpsc Sender and Receiver primitives to send and receive requests to the appropriate engine based on model ID.

§Lock Ordering Convention

This struct uses multiple RwLocks. To prevent deadlocks, locks must be acquired in this order:

  1. reloading_models
  2. engines
  3. unloaded_models
  4. default_engine_id
  5. model_aliases

Use scope-based lock management and explicit drop() calls.

Implementations§

Source§

impl Hanzo

Source

pub fn get_sender( &self, model_id: Option<&str>, ) -> Result<Sender<Request>, HanzoError>

Get sender for a specific model. If model_id is None, uses default engine. If the model is unloaded, it will be automatically reloaded before returning the sender.

Source

pub fn find_file(&self, id: &str) -> Option<Arc<File>>

Look up a file across all loaded engines. None if missing or expired.

Source

pub fn list_files(&self) -> Vec<Arc<File>>

Every non-expired file across all loaded engines, including session-less runs. Order unspecified.

Source

pub fn remove_file(&self, id: &str) -> bool

Returns whether the file existed.

Source

pub fn get_session_store( &self, model_id: Option<&str>, ) -> Result<Arc<Mutex<AgenticSessionStore>>, HanzoError>

Agentic session store for model_id (or the default model). Returns an Arc to lock for inspect/mutate.

Source

pub fn export_session( &self, model_id: Option<&str>, session_id: &str, ) -> Result<Option<SerializedSession>, HanzoError>

Export an agentic session by ID. Bundles the session’s files (full bodies). None if missing.

Source

pub fn import_session( &self, model_id: Option<&str>, session_id: String, session: SerializedSession, ) -> Result<(), HanzoError>

Replaces any existing session with the same ID. Restores its files into the file store.

Source

pub fn fork_session( &self, model_id: Option<&str>, src_session_id: &str, dest_session_id: String, num_turns: usize, ) -> Result<(), HanzoError>

Clone the first num_turns complete turns from src into dest. A turn ends at the first assistant message without tool_calls. Used for branching: the new session diverges cleanly from the truncated prefix, so the branch’s later edits don’t bleed back.

Source

pub fn delete_session( &self, model_id: Option<&str>, session_id: &str, ) -> Result<bool, HanzoError>

Delete an agentic session. Returns whether the session existed.

Source

pub fn list_session_ids( &self, model_id: Option<&str>, ) -> Result<Vec<String>, HanzoError>

All stored session IDs. SDK-only, not exposed via HTTP.

Source

pub fn get_id(&self) -> String

Source

pub fn get_creation_time(&self) -> u64

Source

pub fn register_model_alias( &self, alias: impl Into<String>, model_id: &str, ) -> Result<(), String>

Register an alternate model ID that resolves to an existing model.

Source

pub fn model_exists(&self, model_id: &str) -> Result<bool, HanzoError>

Check if a model is known (loaded, unloaded, or reloading), resolving aliases if needed.

Source

pub fn get_logger( &self, model_id: Option<&str>, ) -> Result<Arc<IntervalLogger>, HanzoError>

Get the interval logger for a specific model. If model_id is None, uses default engine.

Source

pub fn get_model_category( &self, model_id: Option<&str>, ) -> Result<ModelCategory, HanzoError>

Get model category for a specific model. If model_id is None, uses default engine.

Source

pub fn max_sequence_length( &self, model_id: Option<&str>, ) -> Result<Option<usize>, HanzoError>

Get the maximum supported sequence length for a model, if applicable.

Source

pub fn next_request_id(&self) -> usize

Source

pub async fn add_model( &self, model_id: String, pipeline: Arc<Mutex<dyn Pipeline>>, method: SchedulerConfig, config: AddModelConfig, ) -> Result<(), String>

Add a new model engine to the Hanzo instance

Source

pub fn remove_model(&self, model_id: &str) -> Result<(), String>

Remove a model engine from the Hanzo instance

Source

pub fn list_models(&self) -> Result<Vec<String>, String>

List all available model IDs

Source

pub fn get_default_model_id(&self) -> Result<Option<String>, String>

Get the current default model ID

Source

pub fn set_default_model_id(&self, model_id: &str) -> Result<(), String>

Set the default model ID

Source

pub fn send_request(&self, request: Request) -> Result<(), HanzoError>

Dispatch a request to the appropriate engine based on the model_id in the request

Source

pub fn maybe_log_request(this: Arc<Self>, repr: String)

Source

pub fn maybe_log_response<T: Serialize>(this: Arc<Self>, resp: &T)

Source

pub fn maybe_log_error(this: Arc<Self>, err: &dyn Error)

Source

pub fn get_tools_count(&self, model_id: Option<&str>) -> Result<usize, String>

Get the number of tools available for a specific model (including MCP tools)

Source

pub fn list_mcp_tools( &self, model_id: Option<&str>, ) -> Result<Vec<(String, Option<String>)>, String>

MCP-provided tools registered for model_id. Excludes built-ins (web search, code exec). Returns (name, description) per tool.

Source

pub fn has_mcp_client(&self, model_id: Option<&str>) -> Result<bool, String>

Check if MCP client is configured for a specific model

Source

pub fn config(&self, model_id: Option<&str>) -> Result<HanzoConfig, String>

Get config for a specific model

Source

pub fn unload_model(&self, model_id: &str) -> Result<(), HanzoError>

Unload a model from memory while preserving its configuration for later reload. The model can be reloaded automatically when a request is sent to it, or manually using reload_model().

Note: The model must have been added with a ModelLoaderConfig for auto-reload to work. Models added via HanzoBuilder without explicit loader config cannot be reloaded.

Source

pub async fn reload_model(&self, model_id: &str) -> Result<(), HanzoError>

Manually reload a previously unloaded model. This is also called automatically by get_sender() when a request targets an unloaded model.

Source

pub fn reload_model_blocking(&self, model_id: &str) -> Result<(), HanzoError>

Synchronous version of reload_model for use in non-async contexts.

This method handles different runtime contexts appropriately:

  • If called from a multi-threaded tokio runtime, uses block_in_place
  • If called from a single-threaded runtime, returns an error (use reload_model() instead)
  • If called outside any runtime, creates a temporary runtime
Source

pub fn list_unloaded_models(&self) -> Result<Vec<String>, HanzoError>

List all unloaded model IDs

Source

pub fn is_model_loaded(&self, model_id: &str) -> Result<bool, HanzoError>

Check if a model is currently loaded (as opposed to unloaded)

Source

pub fn get_model_status( &self, model_id: &str, ) -> Result<Option<ModelStatus>, HanzoError>

Get the status of a model, or None if not found

Source

pub fn list_models_with_status( &self, ) -> Result<Vec<(String, ModelStatus)>, HanzoError>

List all models with their status

Trait Implementations§

Source§

impl Drop for Hanzo

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more

Auto Trait Implementations§

§

impl !Freeze for Hanzo

§

impl RefUnwindSafe for Hanzo

§

impl Send for Hanzo

§

impl Sync for Hanzo

§

impl Unpin for Hanzo

§

impl UnsafeUnpin for Hanzo

§

impl UnwindSafe for Hanzo

Blanket Implementations§

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> AsAny for T
where T: Any,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Source§

fn type_name(&self) -> &'static str

Gets the type name of self
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<T> Downcast for T
where T: AsAny + ?Sized,

Source§

fn is<T>(&self) -> bool
where T: AsAny,

Returns true if the boxed type is the same as T. Read more
Source§

fn downcast_ref<T>(&self) -> Option<&T>
where T: AsAny,

Forward to the method defined on the type Any.
Source§

fn downcast_mut<T>(&mut self) -> Option<&mut T>
where T: AsAny,

Forward to the method defined on the type Any.
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, 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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<F, T> IntoSample<T> for F
where T: FromSample<F>,

Source§

fn into_sample(self) -> T

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: 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: 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> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
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> 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> ErasedDestructor for T
where T: 'static,