Skip to main content

Teacher

Struct Teacher 

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

A source of proposals.

Constructing one is where credentials are checked, so a missing configuration fails before any work is queued rather than part-way through a corpus.

Implementations§

Source§

impl Teacher

Source

pub fn fixed(proposal: Proposal) -> Teacher

A teacher that returns a fixed proposal. Useful for tests, for replaying a recorded proposal, and for feeding in candidates from a source of your own.

Source

pub fn local( base_url: impl Into<String>, model: impl Into<String>, ) -> Result<Teacher, LearnError>

A teacher backed by a local model behind an OpenAI-compatible endpoint.

This is the preferred route. It needs no credentials, sends nothing off the machine, and costs nothing, which removes every objection to learn except quality. Works with llama.cpp, vLLM, LM Studio, Ollama — anything speaking /v1/chat/completions.

The model must support tool calling. learn asks for a structured ontology, and a model without tool calling replies in prose or with nothing — measured on a local ollama, qwen2.5:0.5b returns tool_calls: null for every request, while qwen3.5:0.8b, granite3-moe:3b and functiongemma work.

Beyond that, a small model is a reasonable choice because of the gate. Proposals are judged by the same deterministic MECE test as local discovery, so a weak model produces rejected candidates rather than a polluted vocabulary. The failure mode of choosing badly is wasted effort, not a wrong answer: on an eight-document corpus qwen3.5:0.8b proposed a category that appears nowhere in the text and one that restated an existing category, and the gate refused both.

use steeldb::learn::Teacher;
// a function-calling model small enough to run on a laptop
let teacher = Teacher::local("http://localhost:11434/v1", "qwen3.5:0.8b")?;
Source

pub fn ollama(model: impl Into<String>) -> Result<Teacher, LearnError>

A teacher backed by a model served by Ollama on the default port.

Shorthand for Teacher::local against http://localhost:11434/v1.

Source

pub fn bedrock(model_id: impl Into<String>) -> Result<Teacher, LearnError>

A teacher backed by Amazon Bedrock.

Requires AWS credentials resolvable by the standard chain (environment, profile, or instance role) and AWS_REGION. Checked here so the failure is immediate and names what is missing.

This costs money per call. The amount is small for vocabulary proposal — one request over a sample of documents — but it is a real charge and worth saying out loud.

Source

pub async fn propose_categories( &self, db: &SteelDb, ) -> Result<Proposal, LearnError>

Ask for categories the local discovery may have missed.

Returns a Proposal; nothing changes until you SteelDb::adopt it.

Source

pub async fn curate(&self, raw: &RawSpec) -> Result<Proposal, LearnError>

Curate a raw spec into canonical facet types. The judgment half of neural discovery.

The tagger and the transport solver do the mechanical work: they find typed spans and group them. What comes out is a list of raw entity-value clusters, and a cluster label is a VALUE. The reference’s own committed spec has raw clusters named missile, bo, guidance control, ph, ge; its finished ontology reads weapon-platform, control-system, with those terms demoted to examples. The step between the two is this one, and skipping it puts ph in the index as a retrieval dimension.

Three things are asked of the model, following the reference’s curator exactly:

  • merge synonymous or overlapping clusters into one facet TYPE — a short lowercase slug naming a kind of thing, not one of its values;
  • drop clusters that are boilerplate, noise, or too generic to be a facet;
  • name each surviving facet, listing the raw cluster terms it absorbs as its examples.

This is judgment, not arithmetic, which is why it is a model call and not a formula — and why what comes back is a Proposal that still faces the MECE gate in SteelDb::adopt before anything is indexed.

Auto Trait Implementations§

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> 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> ErasedDestructor for T
where T: 'static,

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<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

Source§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
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: 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, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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<S, T> Upcast<T> for S
where T: UpcastFrom<S> + ?Sized, S: ?Sized,

Source§

fn upcast(&self) -> &T
where Self: ErasableGeneric, T: Sized + ErasableGeneric<Repr = Self::Repr>,

Perform a zero-cost type-safe upcast to a wider ref type within the Wasm bindgen generics type system. Read more
Source§

fn upcast_into(self) -> T
where Self: Sized + ErasableGeneric, T: Sized + ErasableGeneric<Repr = Self::Repr>,

Perform a zero-cost type-safe upcast to a wider type within the Wasm bindgen generics type system. Read more
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