Skip to main content

ReasoningContentPart

Struct ReasoningContentPart 

Source
pub struct ReasoningContentPart {
    pub provider: String,
    pub item_id: Option<String>,
    pub signature: Option<String>,
    pub encrypted: Option<String>,
    pub text: Option<ReasoningText>,
    pub tokens: Option<u32>,
    pub bound_tool_call_id: Option<String>,
}
Expand description

One provider-issued reasoning artifact, ordered in Message.content alongside text and tool calls.

Ordering is the point. Providers interleave reasoning with text and tool calls, and every current provider requires its artifacts replayed in the position it issued them: Anthropic verifies each thinking block against its own signature, OpenAI keys reasoning items by the item_id it issued and expects them adjacent to the item they precede, and Gemini binds a thoughtSignature to a specific function call. A flattened per-message field cannot express any of that, so this is a content part.

signature and encrypted are opaque provider artifacts. They are carried verbatim and never interpreted, never rendered, and never published on an API surface — see ReasoningContentPart::to_public.

Fields§

§provider: String

Provider that produced this artifact (e.g. anthropic, openai). Replay is only valid against the provider that issued it.

§item_id: Option<String>

Provider-assigned identifier, carried verbatim (e.g. OpenAI rs_…).

§signature: Option<String>

Provider signature over this specific block (Anthropic thinking signature, Gemini thoughtSignature). Opaque.

§encrypted: Option<String>

Provider-encrypted reasoning context (OpenAI encrypted_content). Opaque.

§text: Option<ReasoningText>

Readable reasoning, when the provider exposes any.

§tokens: Option<u32>

Reasoning tokens attributed to this artifact, when reported.

§bound_tool_call_id: Option<String>

Id of the tool call this artifact is bound to, when the provider scopes it that way (Gemini attaches a thought signature to one function call).

Implementations§

Source§

impl ReasoningContentPart

Source

pub fn opaque(provider: impl Into<String>) -> Self

A reasoning part carrying only opaque replay state.

Source

pub fn with_item_id(self, item_id: impl Into<String>) -> Self

Source

pub fn with_signature(self, signature: impl Into<String>) -> Self

Source

pub fn with_encrypted(self, encrypted: impl Into<String>) -> Self

Source

pub fn with_text(self, text: ReasoningText) -> Self

Source

pub fn with_tokens(self, tokens: u32) -> Self

Source

pub fn with_bound_tool_call_id(self, tool_call_id: impl Into<String>) -> Self

Source

pub fn display_text(&self) -> Option<String>

Text safe to render on a reasoning channel, if any.

Source

pub fn has_replay_state(&self) -> bool

Whether this part carries provider state that must be replayed.

Source

pub fn to_public(&self) -> Self

Projection safe to publish on an API surface: opaque provider artifacts removed, readable reasoning kept.

signature and encrypted are replay state, not content. Publishing them leaks provider-internal material through an API and invites clients to round-trip values they cannot validate.

Trait Implementations§

Source§

impl Clone for ReasoningContentPart

Source§

fn clone(&self) -> ReasoningContentPart

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 ReasoningContentPart

Source§

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

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

impl<'de> Deserialize<'de> for ReasoningContentPart

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 PartialEq for ReasoningContentPart

Source§

fn eq(&self, other: &ReasoningContentPart) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Serialize for ReasoningContentPart

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

impl StructuralPartialEq for ReasoningContentPart

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

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