@@ -125,38 +125,45 @@ The stream will contain `ConverseStreamElement` object that can either be `conte
125125To create the next builder, with the same model and inference parameters, use the full message from the ` .messageComplete ` .
126126
127127``` swift
128- let model: BedrockModel = .nova_lite
128+ let model: BedrockModel = .nova_lite
129129
130- guard model.hasConverseModality () else {
131- throw MyError.incorrectModality (" \( model.name ) does not support converse" )
132- }
133- guard model.hasConverseModality (.reasoning ) else {
134- throw MyError.incorrectModality (" \( model.name ) does not support reasoning" )
135- }
130+ guard model.hasConverseModality () else {
131+ throw MyError.incorrectModality (" \( model.name ) does not support converse" )
132+ }
136133
137- var builder = try ConverseRequestBuilder (from : builder, with : reply)
138- .withPrompt (" Tell me more about the birds in Paris" )
134+ // create a request
135+ let builder = try ConverseRequestBuilder (with : model)
136+ .withPrompt (" Tell me about rainbows" )
139137
140- let stream = try await bedrock.converseStream (with : builder)
138+ // send the request
139+ let reply = try await bedrock.converseStream (with : builder)
141140
142- for try await element in stream {
143- switch element {
144- case .contentSegment (let contentSegment):
145- switch contentSegment {
146- case .text (_ , let text):
147- print (text, terminator : " " )
148- default :
149- break
150- }
151- case .contentBlockComplete :
152- print (" \n\n " )
153- case .messageComplete (let message):
154- assistantMessage = message
155- }
156- }
141+ // consume the stream of elements
142+ for try await element in reply.stream {
157143
158- builder = try ConverseRequestBuilder (from : builder, with : assistantMessage)
159- .withPrompt (" And what about the rats?" )
144+ switch element {
145+ case .messageStart (let role):
146+ logger.info (" Message started with role: \( role ) " )
147+
148+ case .text (_ , let text):
149+ print (text, terminator : " " )
150+
151+ case .reasoning (let index, let reasoning):
152+ logger.info (" Reasoning delta: \( reasoning ) " , metadata : [" index" : " \( index ) " ])
153+
154+ case .toolUse (let index, let toolUse):
155+ logger.info (
156+ " Tool use: \( toolUse.name ) with id: \( toolUse.id ) and input: \( toolUse.input ) " ,
157+ metadata : [" index" : " \( index ) " ]
158+ )
159+
160+ case .messageComplete (_ ):
161+ print (" \n " )
162+
163+ case .metaData (let metaData):
164+ logger.info (" Metadata: \( metaData ) " )
165+ }
166+ }
160167```
161168
162169### Vision
0 commit comments