pub struct ToolContext { /* private fields */ }Expand description
The context of one tool call.
A tool receives it by value in Tool::call and may
move it wherever the work happens. It is deliberately not Clone: one
owner reports in sequence, which is what lets it guarantee that progress
increases report by report.
Implementations§
Source§impl ToolContext
impl ToolContext
Sourcepub const fn new() -> Self
pub const fn new() -> Self
A context whose caller does not listen for progress.
Reports are still validated, so a tool that misreports fails the same way whether or not anyone is listening, but they are delivered nowhere.
Sourcepub fn with_progress(sink: impl ProgressSink) -> Self
pub fn with_progress(sink: impl ProgressSink) -> Self
A context that delivers its tool’s progress reports to sink.
Sourcepub const fn is_listening(&self) -> bool
pub const fn is_listening(&self) -> bool
Whether the caller listens for progress.
A tool whose work can outlast its caller’s idle limit decides from this whether reporting progress keeps the call alive: without a listener, reports go nowhere and the caller sees nothing until the call returns.
Sourcepub async fn report_progress(
&mut self,
progress: Progress,
) -> Result<(), ProgressError>
pub async fn report_progress( &mut self, progress: Progress, ) -> Result<(), ProgressError>
Reports how far the call has got.
Delivered to the caller when it listens for progress, and a no-op when it does not. Awaiting the returned future may wait for the caller to take earlier reports.
§Errors
Returns ProgressError::NotFinite when progress or total is NaN
or infinite, and ProgressError::NotIncreasing when progress does
not exceed the previous report’s. A rejected report is not delivered
and does not count as the previous report.