aws_sdk_bedrockruntime/operation/invoke_model_with_bidirectional_stream/
builders.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2pub use crate::operation::invoke_model_with_bidirectional_stream::_invoke_model_with_bidirectional_stream_output::InvokeModelWithBidirectionalStreamOutputBuilder;
3
4pub use crate::operation::invoke_model_with_bidirectional_stream::_invoke_model_with_bidirectional_stream_input::InvokeModelWithBidirectionalStreamInputBuilder;
5
6impl crate::operation::invoke_model_with_bidirectional_stream::builders::InvokeModelWithBidirectionalStreamInputBuilder {
7    /// Sends a request with this input using the given client.
8    pub async fn send_with(
9        self,
10        client: &crate::Client,
11    ) -> ::std::result::Result<
12        crate::operation::invoke_model_with_bidirectional_stream::InvokeModelWithBidirectionalStreamOutput,
13        ::aws_smithy_runtime_api::client::result::SdkError<
14            crate::operation::invoke_model_with_bidirectional_stream::InvokeModelWithBidirectionalStreamError,
15            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
16        >,
17    > {
18        let mut fluent_builder = client.invoke_model_with_bidirectional_stream();
19        fluent_builder.inner = self;
20        fluent_builder.send().await
21    }
22}
23/// Fluent builder constructing a request to `InvokeModelWithBidirectionalStream`.
24///
25/// <p>Invoke the specified Amazon Bedrock model to run inference using the bidirectional stream. The response is returned in a stream that remains open for 8 minutes. A single session can contain multiple prompts and responses from the model. The prompts to the model are provided as audio files and the model's responses are spoken back to the user and transcribed.</p>
26/// <p>It is possible for users to interrupt the model's response with a new prompt, which will halt the response speech. The model will retain contextual awareness of the conversation while pivoting to respond to the new prompt.</p>
27#[derive(::std::fmt::Debug)]
28pub struct InvokeModelWithBidirectionalStreamFluentBuilder {
29    handle: ::std::sync::Arc<crate::client::Handle>,
30    inner: crate::operation::invoke_model_with_bidirectional_stream::builders::InvokeModelWithBidirectionalStreamInputBuilder,
31    config_override: ::std::option::Option<crate::config::Builder>,
32}
33impl
34    crate::client::customize::internal::CustomizableSend<
35        crate::operation::invoke_model_with_bidirectional_stream::InvokeModelWithBidirectionalStreamOutput,
36        crate::operation::invoke_model_with_bidirectional_stream::InvokeModelWithBidirectionalStreamError,
37    > for InvokeModelWithBidirectionalStreamFluentBuilder
38{
39    fn send(
40        self,
41        config_override: crate::config::Builder,
42    ) -> crate::client::customize::internal::BoxFuture<
43        crate::client::customize::internal::SendResult<
44            crate::operation::invoke_model_with_bidirectional_stream::InvokeModelWithBidirectionalStreamOutput,
45            crate::operation::invoke_model_with_bidirectional_stream::InvokeModelWithBidirectionalStreamError,
46        >,
47    > {
48        ::std::boxed::Box::pin(async move { self.config_override(config_override).send().await })
49    }
50}
51impl InvokeModelWithBidirectionalStreamFluentBuilder {
52    /// Creates a new `InvokeModelWithBidirectionalStreamFluentBuilder`.
53    pub(crate) fn new(handle: ::std::sync::Arc<crate::client::Handle>) -> Self {
54        Self {
55            handle,
56            inner: ::std::default::Default::default(),
57            config_override: ::std::option::Option::None,
58        }
59    }
60    /// Access the InvokeModelWithBidirectionalStream as a reference.
61    pub fn as_input(&self) -> &crate::operation::invoke_model_with_bidirectional_stream::builders::InvokeModelWithBidirectionalStreamInputBuilder {
62        &self.inner
63    }
64    /// Sends the request and returns the response.
65    ///
66    /// If an error occurs, an `SdkError` will be returned with additional details that
67    /// can be matched against.
68    ///
69    /// By default, any retryable failures will be retried twice. Retry behavior
70    /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
71    /// set when configuring the client.
72    pub async fn send(
73        self,
74    ) -> ::std::result::Result<
75        crate::operation::invoke_model_with_bidirectional_stream::InvokeModelWithBidirectionalStreamOutput,
76        ::aws_smithy_runtime_api::client::result::SdkError<
77            crate::operation::invoke_model_with_bidirectional_stream::InvokeModelWithBidirectionalStreamError,
78            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
79        >,
80    > {
81        let input = self
82            .inner
83            .build()
84            .map_err(::aws_smithy_runtime_api::client::result::SdkError::construction_failure)?;
85        let runtime_plugins = crate::operation::invoke_model_with_bidirectional_stream::InvokeModelWithBidirectionalStream::operation_runtime_plugins(
86            self.handle.runtime_plugins.clone(),
87            &self.handle.conf,
88            self.config_override,
89        );
90        let mut output =
91            crate::operation::invoke_model_with_bidirectional_stream::InvokeModelWithBidirectionalStream::orchestrate(&runtime_plugins, input)
92                .await?;
93
94        // Converts any error encountered beyond this point into an `SdkError` response error
95        // with an `HttpResponse`. However, since we have already exited the `orchestrate`
96        // function, the original `HttpResponse` is no longer available and cannot be restored.
97        // This means that header information from the original response has been lost.
98        //
99        // Note that the response body would have been consumed by the deserializer
100        // regardless, even if the initial message was hypothetically processed during
101        // the orchestrator's deserialization phase but later resulted in an error.
102        fn response_error(
103            err: impl ::std::convert::Into<::aws_smithy_runtime_api::box_error::BoxError>,
104        ) -> ::aws_smithy_runtime_api::client::result::SdkError<
105            crate::operation::invoke_model_with_bidirectional_stream::InvokeModelWithBidirectionalStreamError,
106            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
107        > {
108            ::aws_smithy_runtime_api::client::result::SdkError::response_error(
109                err,
110                ::aws_smithy_runtime_api::client::orchestrator::HttpResponse::new(
111                    ::aws_smithy_runtime_api::http::StatusCode::try_from(200).expect("valid successful code"),
112                    ::aws_smithy_types::body::SdkBody::empty(),
113                ),
114            )
115        }
116
117        let message = output.body.try_recv_initial_response().await.map_err(response_error)?;
118
119        match message {
120            ::std::option::Option::Some(_message) => ::std::result::Result::Ok(output),
121            ::std::option::Option::None => ::std::result::Result::Ok(output),
122        }
123    }
124
125    /// Consumes this builder, creating a customizable operation that can be modified before being sent.
126    pub fn customize(
127        self,
128    ) -> crate::client::customize::CustomizableOperation<
129        crate::operation::invoke_model_with_bidirectional_stream::InvokeModelWithBidirectionalStreamOutput,
130        crate::operation::invoke_model_with_bidirectional_stream::InvokeModelWithBidirectionalStreamError,
131        Self,
132    > {
133        crate::client::customize::CustomizableOperation::new(self)
134    }
135    pub(crate) fn config_override(mut self, config_override: impl ::std::convert::Into<crate::config::Builder>) -> Self {
136        self.set_config_override(::std::option::Option::Some(config_override.into()));
137        self
138    }
139
140    pub(crate) fn set_config_override(&mut self, config_override: ::std::option::Option<crate::config::Builder>) -> &mut Self {
141        self.config_override = config_override;
142        self
143    }
144    /// <p>The model ID or ARN of the model ID to use. Currently, only <code>amazon.nova-sonic-v1:0</code> is supported.</p>
145    pub fn model_id(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
146        self.inner = self.inner.model_id(input.into());
147        self
148    }
149    /// <p>The model ID or ARN of the model ID to use. Currently, only <code>amazon.nova-sonic-v1:0</code> is supported.</p>
150    pub fn set_model_id(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
151        self.inner = self.inner.set_model_id(input);
152        self
153    }
154    /// <p>The model ID or ARN of the model ID to use. Currently, only <code>amazon.nova-sonic-v1:0</code> is supported.</p>
155    pub fn get_model_id(&self) -> &::std::option::Option<::std::string::String> {
156        self.inner.get_model_id()
157    }
158    /// <p>The prompt and inference parameters in the format specified in the <code>BidirectionalInputPayloadPart</code> in the header. You must provide the body in JSON format. To see the format and content of the request and response bodies for different models, refer to <a href="https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html">Inference parameters</a>. For more information, see <a href="https://docs.aws.amazon.com/bedrock/latest/userguide/api-methods-run.html">Run inference</a> in the Bedrock User Guide.</p>
159    pub fn body(
160        mut self,
161        input: ::aws_smithy_http::event_stream::EventStreamSender<
162            crate::types::InvokeModelWithBidirectionalStreamInput,
163            crate::types::error::InvokeModelWithBidirectionalStreamInputError,
164        >,
165    ) -> Self {
166        self.inner = self.inner.body(input);
167        self
168    }
169    /// <p>The prompt and inference parameters in the format specified in the <code>BidirectionalInputPayloadPart</code> in the header. You must provide the body in JSON format. To see the format and content of the request and response bodies for different models, refer to <a href="https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html">Inference parameters</a>. For more information, see <a href="https://docs.aws.amazon.com/bedrock/latest/userguide/api-methods-run.html">Run inference</a> in the Bedrock User Guide.</p>
170    pub fn set_body(
171        mut self,
172        input: ::std::option::Option<
173            ::aws_smithy_http::event_stream::EventStreamSender<
174                crate::types::InvokeModelWithBidirectionalStreamInput,
175                crate::types::error::InvokeModelWithBidirectionalStreamInputError,
176            >,
177        >,
178    ) -> Self {
179        self.inner = self.inner.set_body(input);
180        self
181    }
182    /// <p>The prompt and inference parameters in the format specified in the <code>BidirectionalInputPayloadPart</code> in the header. You must provide the body in JSON format. To see the format and content of the request and response bodies for different models, refer to <a href="https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html">Inference parameters</a>. For more information, see <a href="https://docs.aws.amazon.com/bedrock/latest/userguide/api-methods-run.html">Run inference</a> in the Bedrock User Guide.</p>
183    pub fn get_body(
184        &self,
185    ) -> &::std::option::Option<
186        ::aws_smithy_http::event_stream::EventStreamSender<
187            crate::types::InvokeModelWithBidirectionalStreamInput,
188            crate::types::error::InvokeModelWithBidirectionalStreamInputError,
189        >,
190    > {
191        self.inner.get_body()
192    }
193}