Skip to content

Commit c86d61b

Browse files
committed
update converse stream example
1 parent 5b83f64 commit c86d61b

File tree

1 file changed

+34
-27
lines changed

1 file changed

+34
-27
lines changed

README.md

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -125,38 +125,45 @@ The stream will contain `ConverseStreamElement` object that can either be `conte
125125
To 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

Comments
 (0)