pub struct GenerateRequest<C = GenerationContinuation> { /* private fields */ }Expand description
Validated model-bound generation request.
Requests borrow no provider resources and carry no model selector. The selected Model owns exact identity and continuation type; use the same type across all messages in this request.
§Examples
use providers_kit::generation::{GenerateRequest, Message};
let request = GenerateRequest::<()>::new(vec![Message::user_text("Hello")?])?;
assert_eq!(request.messages().len(), 1);
Implementations§
Source§impl<C> GenerateRequest<C>
impl<C> GenerateRequest<C>
Sourcepub fn new(messages: Vec<Message<C>>) -> Result<Self, KitError>
pub fn new(messages: Vec<Message<C>>) -> Result<Self, KitError>
Creates and validates a request containing at least one ordinary message.
§Errors
Returns an input error when messages are empty, contain only instructions, place instructions after ordinary messages, or violate a message role/content invariant.
§Examples
use providers_kit::generation::{GenerateRequest, Message};
let request = GenerateRequest::<()>::new(vec![Message::user_text("Hello")?])?;
assert_eq!(request.messages().len(), 1);
Sourcepub fn with_tools(self, tools: Vec<ProviderToolSpec>) -> Result<Self, KitError>
pub fn with_tools(self, tools: Vec<ProviderToolSpec>) -> Result<Self, KitError>
Replaces model-visible tool declarations.
§Errors
Returns an input error for duplicate function declarations or a tool selection inconsistent with the inventory. Hosted-tool and model compatibility are checked by the selected model.
§Examples
use providers_kit::generation::{ProviderFunctionTool, JsonSchema};
let tool = ProviderFunctionTool::new("lookup", Some("Find a record".into()), JsonSchema::new(serde_json::json!({"type":"object"}))?)?;
use providers_kit::generation::{GenerateRequest, Message, ProviderToolSpec};
let request = GenerateRequest::<()>::new(vec![Message::user_text("Look up a record")?])?
.with_tools(vec![ProviderToolSpec::Function(tool)])?;
assert_eq!(request.tools().len(), 1);
Sourcepub fn with_response_format(self, value: ResponseFormat) -> Self
pub fn with_response_format(self, value: ResponseFormat) -> Self
Replaces structured-output configuration.
§Examples
use providers_kit::generation::{GenerateRequest, Message};
let request = GenerateRequest::<()>::new(vec![Message::user_text("Hello")?])?;
use providers_kit::generation::ResponseFormat;
let request = request.with_response_format(ResponseFormat::JsonObject);
assert!(matches!(request.response_format(), Some(ResponseFormat::JsonObject)));
Sourcepub fn with_reasoning(self, value: ReasoningConfig) -> Self
pub fn with_reasoning(self, value: ReasoningConfig) -> Self
Replaces reasoning configuration.
§Examples
use providers_kit::generation::{GenerateRequest, Message};
let request = GenerateRequest::<()>::new(vec![Message::user_text("Hello")?])?;
use providers_kit::generation::{ReasoningConfig, ReasoningEffort};
let request = request.with_reasoning(ReasoningConfig { effort: Some(ReasoningEffort::Low), ..Default::default() });
assert_eq!(request.reasoning().unwrap().effort, Some(ReasoningEffort::Low));
Sourcepub fn with_generation(self, value: GenerationConfig) -> Result<Self, KitError>
pub fn with_generation(self, value: GenerationConfig) -> Result<Self, KitError>
Replaces generation controls after validating tool references.
§Errors
Returns an input error when the generation/tool-choice settings do not match the declared tools, including an undeclared selected function or required choice without tools.
§Examples
use providers_kit::generation::{GenerateRequest, Message};
let request = GenerateRequest::<()>::new(vec![Message::user_text("Hello")?])?;
use providers_kit::generation::GenerationConfig;
let request = request.with_generation(GenerationConfig::default().with_seed(42))?;
assert_eq!(request.generation().seed(), Some(42));
Sourcepub fn messages(&self) -> &[Message<C>]
pub fn messages(&self) -> &[Message<C>]
Returns validated messages in request order.
§Examples
use providers_kit::generation::{GenerateRequest, Message};
let request = GenerateRequest::<()>::new(vec![Message::user_text("Hello")?])?;
assert_eq!(request.messages().len(), 1);
Sourcepub fn tools(&self) -> &[ProviderToolSpec]
pub fn tools(&self) -> &[ProviderToolSpec]
Returns declared client and hosted tools.
§Examples
use providers_kit::generation::{GenerateRequest, Message};
let request = GenerateRequest::<()>::new(vec![Message::user_text("Hello")?])?;
assert!(request.tools().is_empty());
Sourcepub const fn response_format(&self) -> Option<&ResponseFormat>
pub const fn response_format(&self) -> Option<&ResponseFormat>
Returns the requested structured-output format.
§Examples
use providers_kit::generation::{GenerateRequest, Message};
let request = GenerateRequest::<()>::new(vec![Message::user_text("Hello")?])?;
assert!(request.response_format().is_none());
Sourcepub const fn reasoning(&self) -> Option<&ReasoningConfig>
pub const fn reasoning(&self) -> Option<&ReasoningConfig>
Returns the requested reasoning controls.
§Examples
use providers_kit::generation::{GenerateRequest, Message};
let request = GenerateRequest::<()>::new(vec![Message::user_text("Hello")?])?;
assert!(request.reasoning().is_none());
Sourcepub const fn generation(&self) -> &GenerationConfig
pub const fn generation(&self) -> &GenerationConfig
Returns sampling and tool-choice controls.
§Examples
use providers_kit::generation::{GenerateRequest, Message};
let request = GenerateRequest::<()>::new(vec![Message::user_text("Hello")?])?;
assert_eq!(request.generation().seed(), None);
Sourcepub fn try_map_continuation<D>(
self,
map: impl FnMut(C) -> Result<D, KitError>,
) -> Result<GenerateRequest<D>, KitError>
pub fn try_map_continuation<D>( self, map: impl FnMut(C) -> Result<D, KitError>, ) -> Result<GenerateRequest<D>, KitError>
Maps only opaque continuation values while preserving validated request data.
This is value conversion for caller-owned concrete composition. It does not inspect a supplied continuation or authorize dropping its replay information.
§Errors
Returns the first callback error unchanged. Messages without continuation do not invoke the callback.
§Examples
use providers_kit::generation::{GenerateRequest, Message};
let assistant = Message::assistant_text("continue")?.with_continuation(7_u32)?;
let request = GenerateRequest::new(vec![assistant])?;
let mapped = request.try_map_continuation(|value| Ok(value.to_string()))?;
assert_eq!(mapped.messages()[0].continuation().map(String::as_str), Some("7"));