Skip to main content

Context

Struct Context 

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

Manages the conversation state sent to an LLM provider.

A Context bundles together three things:

  1. Messages – the conversation history as a Vec<ChatMessage>
  2. Tools – the tools available to the model as a Vec<ToolDefinition>
  3. Configuration – optional ReasoningEffort and prompt cache key

Pass a Context to StreamingModelProvider::stream_response to generate a response.

§Construction

use llm::{Context, ChatMessage, ContentBlock, ToolDefinition, types::IsoString};

let context = Context::new(
    vec![
        ChatMessage::System {
            content: "You are a helpful assistant.".into(),
            timestamp: IsoString::now(),
        },
        ChatMessage::User {
            content: vec![ContentBlock::text("What is Rust?")],
            timestamp: IsoString::now(),
        },
    ],
    vec![], // no tools
);

§Managing messages

§Conversation compaction

Long conversations can be compacted to stay within context limits:

§Token estimation

estimated_token_count provides a rough pre-flight estimate using a ~4 bytes/token heuristic. This is intentionally approximate – use it to detect obvious overflow before calling the provider, not for precise accounting.

§Encrypted reasoning

filter_encrypted_reasoning creates a copy where encrypted reasoning content is kept only for messages from a matching model. This is necessary because encrypted reasoning tokens are model-specific and cannot be replayed to a different model.

Implementations§

Source§

impl Context

Source

pub fn new(messages: Vec<ChatMessage>, tools: Vec<ToolDefinition>) -> Self

Source

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

Source

pub fn set_prompt_cache_key(&mut self, key: Option<String>)

Source

pub fn reasoning_effort(&self) -> Option<ReasoningEffort>

Source

pub fn set_reasoning_effort(&mut self, effort: Option<ReasoningEffort>)

Source

pub fn model_settings(&self) -> &ModelSettings

Source

pub fn set_model_settings(&mut self, settings: ModelSettings)

Source

pub fn add_message(&mut self, message: ChatMessage)

Source

pub fn set_tools(&mut self, tools: Vec<ToolDefinition>)

Source

pub fn set_system_content(&mut self, content: String)

Source

pub fn messages(&self) -> &Vec<ChatMessage>

Source

pub fn tools(&self) -> &Vec<ToolDefinition>

Source

pub fn message_count(&self) -> usize

Returns the number of messages in the context

Source

pub fn estimated_token_count(&self) -> u32

Estimate total token count using the ~4 bytes/token heuristic. Includes messages and tool definitions. Used for pre-flight overflow detection.

Source

pub fn push_assistant_turn( &mut self, content: &str, reasoning: AssistantReasoning, completed_tools: Vec<Result<ToolCallResult, ToolCallError>>, )

Build an assistant turn and its tool call results and append them to messages.

Source

pub fn filter_encrypted_reasoning(&self, model: Option<&LlmModel>) -> Self

Return a copy with encrypted reasoning projected onto model.

Encrypted content is opaque to every model but the one that produced it, so it survives only when its source model matches. Passing None — the model is not in the catalog, so nothing can be claimed to match — drops all of it.

Source

pub fn clear_conversation(&mut self)

Clear all non-system messages, retaining only system prompts.

Source

pub fn replace_conversation(&mut self, messages: Vec<ChatMessage>)

Replace all non-system messages while preserving the system prompt and runtime state.

Source

pub fn messages_for_summary(&self) -> Vec<&ChatMessage>

Get all non-system messages for summarization

Source

pub fn with_compacted_summary(&self, summary: &str) -> Context

Create a new context with all messages replaced by a summary. Preserves the system prompt and tools.

Trait Implementations§

Source§

impl Clone for Context

Source§

fn clone(&self) -> Context

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 Debug for Context

Source§

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

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Context

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for Context

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. 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<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> 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> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

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, 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> MaybeSend for T
where T: Send,

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