Skip to main content

CompletionRequestBuilder

Struct CompletionRequestBuilder 

Source
pub struct CompletionRequestBuilder<M>
where M: CompletionModel,
{ /* private fields */ }
Expand description

Builder struct for constructing a completion request.

Example usage:

use rig_core::{
    client::CompletionClient,
    providers::openai::{Client, self},
    completion::{CompletionModel, CompletionRequestBuilder},
};

let openai = Client::new("your-openai-api-key")?;
let model = openai.completion_model(openai::GPT_5_2);

// Create the completion request and execute it separately
let request = CompletionRequestBuilder::new(model.clone(), "Who are you?".to_string())
    .preamble("You are Marvin from the Hitchhiker's Guide to the Galaxy.".to_string())
    .temperature(0.5)
    .build();

let response = model.completion(request).await?;

Alternatively, you can execute the completion request directly from the builder:

use rig_core::{
    client::CompletionClient,
    providers::openai::{Client, self},
    completion::CompletionRequestBuilder,
};

let openai = Client::new("your-openai-api-key")?;
let model = openai.completion_model(openai::GPT_5_2);

// Create the completion request and execute it directly
let response = CompletionRequestBuilder::new(model, "Who are you?".to_string())
    .preamble("You are Marvin from the Hitchhiker's Guide to the Galaxy.".to_string())
    .temperature(0.5)
    .send()
    .await?;

Note: It is usually unnecessary to create a completion request builder directly. Instead, use the CompletionModel::completion_request method.

Implementations§

Source§

impl<M> CompletionRequestBuilder<M>
where M: CompletionModel,

Source

pub fn new(model: M, prompt: impl Into<Message>) -> CompletionRequestBuilder<M>

Source

pub fn preamble(self, preamble: String) -> CompletionRequestBuilder<M>

Sets the preamble for the completion request.

Source

pub fn model(self, model: impl Into<String>) -> CompletionRequestBuilder<M>

Overrides the model used for this request.

Source

pub fn model_opt(self, model: Option<String>) -> CompletionRequestBuilder<M>

Overrides the model used for this request.

Source

pub fn without_preamble(self) -> CompletionRequestBuilder<M>

Source

pub fn message(self, message: Message) -> CompletionRequestBuilder<M>

Adds a message to the chat history for the completion request.

Source

pub fn messages( self, messages: impl IntoIterator<Item = Message>, ) -> CompletionRequestBuilder<M>

Adds a list of messages to the chat history for the completion request.

Source

pub fn document(self, document: Document) -> CompletionRequestBuilder<M>

Adds a document to the completion request.

Source

pub fn documents( self, documents: impl IntoIterator<Item = Document>, ) -> CompletionRequestBuilder<M>

Adds a list of documents to the completion request.

Source

pub fn tool(self, tool: ToolDefinition) -> CompletionRequestBuilder<M>

Adds a tool to the completion request.

Source

pub fn tools(self, tools: Vec<ToolDefinition>) -> CompletionRequestBuilder<M>

Adds a list of tools to the completion request.

Source

pub fn provider_tool( self, tool: ProviderToolDefinition, ) -> CompletionRequestBuilder<M>

Adds a provider-hosted tool to the completion request.

Source

pub fn provider_tools( self, tools: Vec<ProviderToolDefinition>, ) -> CompletionRequestBuilder<M>

Adds provider-hosted tools to the completion request.

Source

pub fn additional_params( self, additional_params: Value, ) -> CompletionRequestBuilder<M>

Adds additional parameters to the completion request. This can be used to set additional provider-specific parameters. For example, Cohere’s completion models accept a connectors parameter that can be used to specify the data connectors used by Cohere when executing the completion (see examples/cohere_connectors.rs).

Source

pub fn additional_params_opt( self, additional_params: Option<Value>, ) -> CompletionRequestBuilder<M>

Sets the additional parameters for the completion request. This can be used to set additional provider-specific parameters. For example, Cohere’s completion models accept a connectors parameter that can be used to specify the data connectors used by Cohere when executing the completion (see examples/cohere_connectors.rs).

Source

pub fn temperature(self, temperature: f64) -> CompletionRequestBuilder<M>

Sets the temperature for the completion request.

Source

pub fn temperature_opt( self, temperature: Option<f64>, ) -> CompletionRequestBuilder<M>

Sets the temperature for the completion request.

Source

pub fn max_tokens(self, max_tokens: u64) -> CompletionRequestBuilder<M>

Sets the max tokens for the completion request. Note: This is required if using Anthropic

Source

pub fn max_tokens_opt( self, max_tokens: Option<u64>, ) -> CompletionRequestBuilder<M>

Sets the max tokens for the completion request. Note: This is required if using Anthropic

Source

pub fn tool_choice(self, tool_choice: ToolChoice) -> CompletionRequestBuilder<M>

Sets the thing.

Source

pub fn output_schema(self, schema: Schema) -> CompletionRequestBuilder<M>

Sets the output schema for structured output. When set, providers that support native structured outputs will constrain the model’s response to match this schema. NOTE: For direct type conversion, you may want to use Agent::prompt_typed() - using this method with Agent::prompt() will still output a String at the end, it’ll just be compatible with whatever type you want to use here. This method is primarily an escape hatch for agents being used as tools to still be able to leverage structured outputs.

Source

pub fn output_schema_opt( self, schema: Option<Schema>, ) -> CompletionRequestBuilder<M>

Sets the output schema for structured output from an optional value. NOTE: For direct type conversion, you may want to use Agent::prompt_typed() - using this method with Agent::prompt() will still output a String at the end, it’ll just be compatible with whatever type you want to use here. This method is primarily an escape hatch for agents being used as tools to still be able to leverage structured outputs.

Source

pub fn record_content_telemetry( self, enabled: bool, ) -> CompletionRequestBuilder<M>

Opt in or out of recording sensitive request, response, and tool content on GenAI telemetry spans for this request.

Defaults to false. Enabling this can expose prompts, retrieved context, tool results, model responses, and other sensitive or high-cardinality data through OpenTelemetry span attributes, which can increase observability backend storage and query costs. Only enable it when content telemetry is acceptable for this request. Structural metadata and token usage remain available when this is disabled.

This low-level builder only stores the opt-in on the built request. It does not guarantee portable input/output message fields for direct model calls; exact coverage is provider- and surface-dependent. Agent APIs own normalized input/output recording and provide the consistent surface.

Source

pub fn messages_for_telemetry(&self) -> Vec<Message>

Returns the normalized input messages used by runtime telemetry.

Source

pub fn build(self) -> CompletionRequest

Builds the completion request.

Source

pub async fn send( self, ) -> Result<CompletionResponse<<M as CompletionModel>::Response>, CompletionError>

Sends the completion request to the completion model provider and returns the completion response.

Source

pub async fn stream<'a>( self, ) -> Result<StreamingCompletionResponse<<M as CompletionModel>::StreamingResponse>, CompletionError>

Stream the completion request

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

Source§

impl<T> WasmCompatSync for T
where T: Sync,

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