pub struct ChatDecoder { /* private fields */ }Expand description
Decode native Ollama chat replies.
thinking and content each continue the block of the record before
while the kind stays the same, and each call is a whole block. The
reply ends at the record that says done; its done_reason is the
finish reason, tool_calls when a stop reply called a tool, and its
prompt_eval_count, prompt_eval_cached_count (the part of the prompt
read from the daemon’s cache) and eval_count are the usage.
A reply with no thinking whose content, after leading whitespace,
starts with <think> has that block split out as reasoning, by its tags
alone. Content is held only while its start could still become
<think>; content that cannot is text at once. Inside the block,
reasoning streams as it arrives, holding back only trailing whitespace
and a partial </think>. After </think> the rest is text. A block
that never closes is reasoning to the end of the reply.
Trait Implementations§
Source§impl Debug for ChatDecoder
impl Debug for ChatDecoder
Source§impl<'id> Decoder<'id, Completion> for ChatDecoder
impl<'id> Decoder<'id, Completion> for ChatDecoder
Source§fn decode(
&mut self,
ChatRecord: ChatRecord,
out: Out<'id, Completion>,
) -> Result<Flow, ProviderError>
fn decode( &mut self, ChatRecord: ChatRecord, out: Out<'id, Completion>, ) -> Result<Flow, ProviderError>
Fields are read leniently: one the record leaves out or sends with
another type is absent, so only error and done steer the reply.
Source§type Event = ChatRecord
type Event = ChatRecord
Source§fn classify(&self, frame: WireFrame) -> WireEvent<ChatRecord>
fn classify(&self, frame: WireFrame) -> WireEvent<ChatRecord>
crate::providers::internal::wire, so the
decode-then-validate policy is not re-derived per provider.Auto Trait Implementations§
impl Freeze for ChatDecoder
impl RefUnwindSafe for ChatDecoder
impl Send for ChatDecoder
impl Sync for ChatDecoder
impl Unpin for ChatDecoder
impl UnsafeUnpin for ChatDecoder
impl UnwindSafe for ChatDecoder
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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