IterativeProblemSolver

Struct IterativeProblemSolver 

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

An agent that iteratively attempts to solve a problem using available tools.

The solver uses a chat-based approach to break down and solve complex problems. It will continue attempting to solve the problem until it either succeeds, fails explicitly, or reaches the maximum number of iterations.

§Examples

use mojentic::agents::IterativeProblemSolver;
use mojentic::llm::{LlmBroker, LlmGateway};
use mojentic::llm::gateways::OllamaGateway;
use mojentic::llm::tools::simple_date_tool::SimpleDateTool;
use std::sync::Arc;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let gateway = Arc::new(OllamaGateway::default());
    let broker = LlmBroker::new("qwen3:32b", gateway, None);

    let tools: Vec<Box<dyn LlmTool>> = vec![Box::new(SimpleDateTool)];

    let solver = IterativeProblemSolver::builder(broker)
        .tools(tools)
        .max_iterations(5)
        .build();

    let result = solver.solve("What's the date next Friday?").await?;
    println!("Result: {}", result);

    Ok(())
}

Implementations§

Source§

impl IterativeProblemSolver

Source

pub fn new(broker: LlmBroker) -> Self

Create a new problem solver with default settings.

§Arguments
  • broker - The LLM broker to use for generating responses
§Examples
use mojentic::agents::IterativeProblemSolver;
use mojentic::llm::LlmBroker;

let solver = IterativeProblemSolver::new(broker);
Source

pub fn builder(broker: LlmBroker) -> IterativeProblemSolverBuilder

Create a problem solver builder for custom configuration.

§Arguments
  • broker - The LLM broker to use for generating responses
§Examples
use mojentic::agents::IterativeProblemSolver;

let solver = IterativeProblemSolver::builder(broker)
    .max_iterations(10)
    .system_prompt("You are a specialized problem solver.")
    .tools(vec![Box::new(SimpleDateTool)])
    .build();
Source

pub async fn solve(&mut self, problem: &str) -> Result<String>

Execute the problem-solving process.

This method runs the iterative problem-solving process, continuing until one of these conditions is met:

  • The task is completed successfully (response contains “DONE”)
  • The task fails explicitly (response contains “FAIL”)
  • The maximum number of iterations is reached

After completion, the agent requests a summary of the final result.

§Arguments
  • problem - The problem or request to be solved
§Returns

A summary of the final result, excluding the process details

§Examples
let result = solver.solve("Calculate the date 7 days from now").await?;
println!("Solution: {}", result);

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.

§

impl<T> Instrument for T

§

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

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

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.

§

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

§

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
§

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

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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