Skip to main content

ThinkLoop

Struct ThinkLoop 

Source
pub struct ThinkLoop {
    pub goal: String,
    pub max_iterations: usize,
    pub convergence_threshold: f64,
    pub k_proportional: f64,
    pub k_integral: f64,
    pub stall_patience: usize,
    pub promotion_threshold: f64,
    pub hot: HotStore,
    pub cold: ColdStore,
}
Expand description

The closed-loop controller that drives the agent’s reasoning process.

Build via ThinkLoop::new or ThinkLoop::builder, then call .run(&mut oracle).await to obtain a ThinkResult.

§Examples

use lmm_agent::cognition::r#loop::ThinkLoop;
use lmm_agent::cognition::search::SearchOracle;

#[tokio::main]
async fn main() {
    let mut oracle = SearchOracle::new(3);
    let mut lp = ThinkLoop::new("Rust memory safety", 5, 0.3, 1.0, 0.05);
    let result = lp.run(&mut oracle).await;
    println!("converged={} steps={} error={:.3}", result.converged, result.steps, result.final_error);
}

Fields§

§goal: String

Natural-language goal (setpoint).

§max_iterations: usize

Maximum number of feedback iterations.

§convergence_threshold: f64

Jaccard-error threshold below which convergence is declared.

§k_proportional: f64

Proportional gain constant (Kp).

§k_integral: f64

Integral gain constant (Ki) - stored for documentation; applied in CognitionSignal.

§stall_patience: usize

Consecutive reward-declining steps before stall detection triggers.

§promotion_threshold: f64

Reward score threshold for promoting hot entries to cold store.

§hot: HotStore

Short-term memory for the current run.

§cold: ColdStore

Long-term memory archive.

Implementations§

Source§

impl ThinkLoop

Source

pub fn new( goal: impl Into<String>, max_iterations: usize, convergence_threshold: f64, k_proportional: f64, k_integral: f64, ) -> Self

Constructs a ThinkLoop with the given parameters.

§Arguments
  • goal - natural-language goal / setpoint.
  • max_iterations - iteration cap (≥ 1).
  • convergence_threshold - Jaccard error threshold ∈ [0, 1].
  • k_proportional - proportional gain Kp.
  • k_integral - integral gain Ki.
Source

pub fn builder(goal: impl Into<String>) -> ThinkLoopBuilder

Returns a builder for ergonomic construction.

Source

pub fn stall_patience(self, n: usize) -> Self

Sets the stall patience.

Source

pub fn promotion_threshold(self, t: f64) -> Self

Sets the hot→cold promotion reward threshold.

Source

pub async fn run(&mut self, oracle: &mut SearchOracle) -> ThinkResult

Runs the closed-loop think cycle and returns a ThinkResult.

§Examples
#[tokio::main]
async fn main() {
    use lmm_agent::cognition::r#loop::ThinkLoop;
    use lmm_agent::cognition::search::SearchOracle;

    let mut oracle = SearchOracle::new(5);
    let mut lp = ThinkLoop::new("Rust memory model", 10, 0.25, 1.0, 0.05);
    let r = lp.run(&mut oracle).await;
    assert!(r.steps > 0);
}

Trait Implementations§

Source§

impl Debug for ThinkLoop

Source§

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

Formats the value using the given formatter. Read more

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<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, 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<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