Creates a new instance of the CerebrasLLM class
The Cerebras API key to use for authentication
Protected_Protected property to store additional provider-specific settings
ProtectedthinkingState tracking for streaming thinking extraction Providers should initialize this if they support thinking models
Get the current additional settings
ProtectedapiOnly sub-classes can access the API key
Read only getter method to get the Cerebras client instance
Use Client.
Read only getter method to get the Cerebras client instance
Whether this LLM provider supports assistant prefill (pre-seeding the start of the model's response). Providers that support prefill should override this to return true. This is used as a code-level default when database metadata (AIModelType/AIModel/AIModelVendor.SupportsPrefill) is null. Database values of true/false override this getter.
Cerebras supports streaming
Cerebras exposes OpenAI-compatible function calling, including parallel calls and a strict (constrained-decoding) mode, so the shared OpenAI-shaped mapping applies unchanged.
This matters more than the model count suggests: GPT-OSS-120B on Cerebras is the single most-deployed model across MJ's shipped agents, and until this override it was the one configuration native tool calling could not reach — the capability gate resolved to the envelope no matter what metadata said.
Two Cerebras-specific caveats, both handled by callers rather than here. Its catalog rotates aggressively, so a model that supports tools today may not be served tomorrow — verify at integration time. And it has a documented tool-hallucination quirk: it can emit a call to a tool that was never declared. extractOpenAICompatibleToolCalls surfaces such a call rather than dropping it, which is deliberate — the agent loop must be able to see a bad call and reject it by name, not receive silence.
ProtectedaddAdd thinking content to a chat completion message
OptionalthinkingContent: stringProtectedapplySets response_format, unless tools are going out on the same request.
Cerebras rejects the two together outright — 400 "tools" is incompatible with "response_format" — in every forcing mode, measured across the whole provider matrix.
No request
carrying both succeeds on this vendor, so the choice is not between two working requests but
between one working request and a guaranteed failure.
Tools win. A tool declaration is a decision channel the caller is relying on; JSON mode is a formatting constraint the prompt itself already states in every MJ prompt that sets it, and a model that ignores it produces output the envelope parser tolerates. Dropping it is loud rather than silent, because a caller who set it deliberately should be able to find out why their request did not carry it.
ProtectedapplyAdds the native tool-calling fields when the caller declared tools.
parallel_tool_calls is forwarded only when the caller set it explicitly. Cerebras supports
parallel calls at the API level but per-model, and sending the flag unasked would impose a
default the caller never chose on a catalog that rotates.
ProtectedBuildThe result of a cancelled request, the same for every driver: a failed result with no choices,
statusText 'cancelled', and an errorInfo that says Cancelled (Fatal, never failed over) —
or, when the signal was aborted by a timeout, a retriable NetworkError.
Optionaloptions: { error?: unknown; message?: string; signal?: AbortSignal }Optionalerror?: unknownThe error the abort raised, kept on exception.
Optionalmessage?: stringThe message to report; defaults to one naming the signal's reason.
Optionalsignal?: AbortSignalThe request's abort signal, read for why it was aborted.
Process a chat completion request. If streaming is enabled and supported, this will route to the streaming implementation.
Process multiple chat completion requests in parallel. This is useful for:
Array of chat completion parameter objects
Optionalcallbacks: ParallelChatCompletionsCallbacksOptional callbacks for progress and individual completions
Promise resolving to an array of ChatResults in the same order as the input params
Classifies text into categories using Cerebras LLM capabilities
Parameters for classification
A classification result
Clear all additional settings This is useful for resetting the state of the provider or when switching between different configurations.
ProtectedconvertBuilds the Cerebras message array from MJ messages.
Shared by the streaming and non-streaming paths so a tool conversation cannot round-trip
correctly on one and silently break on the other. Two things it must do that a naive
.map() cannot: a tool-role turn expands into N provider messages (one per result),
and an assistant turn has to carry its tool_calls forward or the results answering them
are orphaned and the request is rejected.
ProtectedcreateCreate a streaming request for Cerebras
ProtectedextractExtract thinking content from non-streaming content This method handles case-insensitive extraction of thinking blocks
ProtectedfinalizeCreate the final response from streaming results for Cerebras
ProtectedflushReturns (and clears) any user-visible content the thinking-tag stripper is still holding back at
the end of a stream. Mid-stream, processStreamChunkWithThinking holds back a trailing
fragment that could be the start of a <think>/</think> tag so a split tag never leaks as
partial text; once the stream ends, such a fragment is real content and must be emitted (bug A5).
Only flushes when NOT inside a thinking block: an unterminated <think> block's buffered text is
reasoning, not answer, and is left held back (never surfaced as visible content). Returns ''
when thinking extraction isn't active (no state) or there's nothing to flush.
Returns the native file input capabilities of this LLM driver, or null if the driver does not support file attachments. Subclasses that accept files (PDFs, images, etc.) should override this method.
ProtectedgetGet the thinking tag format for this provider Providers can override this to customize the thinking tag format
ProtectedhandleTemplate method for handling streaming chat completion This implements the common pattern across providers while delegating provider-specific logic to abstract methods.
ProtectedinitializeInitialize thinking stream state for streaming extraction
ProtectedIsWhether a request ended because it was aborted: its signal is aborted, the error is an abort by
name (AbortError, APIUserAbortError, RequestAbortedError), or IsProviderAbortError
recognizes it.
Optionalsignal: AbortSignalProtectedIsRecognizes an abort error the shared names miss. A driver whose SDK raises its own class for an aborted request overrides this. Default: false.
ProtectedisWhether a message is framework-authored volatile state for this request only: the loop agent's trailing runtime-state fragment (date/time, scratchpad, payload, a relocated specialization), which is rebuilt every iteration and must never sit inside a provider's cached prefix.
The base test is the VolatileStateMessageMetadata.volatileState flag the agent layer
sets. A driver may override to recognise the message by other means (Anthropic also accepts
the fragment's tag literal for callers that pass plain text), but should call super first.
ProtectednonImplementation for non-streaming chat completion
ProtectedprocessProcess streaming chunk with thinking extraction This method handles case-insensitive extraction across chunk boundaries
ProtectedprocessProcess a streaming chunk from Cerebras
ProtectedresetHook invoked at the start AND end (in finally) of every streaming chat
completion to reset per-request streaming state. Default is a no-op;
providers that maintain instance-level streaming state (e.g., Anthropic /
OpenAI thinking-block accumulators) MUST override this. See audit R2-C5
for context — without this, state from a prior request bleeds into the
next one and accumulated buffers grow unbounded across the singleton's
lifetime.
ProtectedresetReset thinking stream state
Set additional provider-specific settings Subclasses should override this method to validate required settings
Provider-specific settings
ProtectedsetSet the reasoning_effort parameter for Cerebras models Currently only supported for OpenAI GPT OSS models
ProtectedsplitSplits an outgoing request around its trailing volatile-state message, so a driver can place
its cache boundary on the last message of head and send tail uncached. Returns null when the
request has no trailing volatile state, in which case the driver formats the whole list as usual.
Neither array is a copy of the input's messages; only the list is new.
Summarizes text using Cerebras LLM capabilities
Parameters for the summarization
A summary result
ProtectedsupportsCheck if the provider supports thinking models
Cerebras supports thinking models with
ProtectedtrailingIndex of the trailing volatile-state message in an outgoing request, or -1 when there is none. The fragment is the LAST message, or the one before it when an assistant prefill has been appended after it. -1 is also returned when nothing precedes the fragment, because then there is no stable history for a provider to cache ahead of it.
Cerebras implementation of the BaseLLM class