Skip to content

Commit 17ec791

Browse files
committed
[Vertex AI] Swift Testing testGenerateContentStream integration test
1 parent b01a8f2 commit 17ec791

File tree

2 files changed

+45
-39
lines changed

2 files changed

+45
-39
lines changed

FirebaseVertexAI/Tests/TestApp/Tests/Integration/GenerateContentIntegrationTests.swift

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,4 +115,49 @@ struct GenerateContentIntegrationTests {
115115
#expect(candidatesTokensDetails.modality == .text)
116116
#expect(candidatesTokensDetails.tokenCount == usageMetadata.candidatesTokenCount)
117117
}
118+
119+
@Test(arguments: InstanceConfig.allConfigs)
120+
func testGenerateContentStream(_ config: InstanceConfig) async throws {
121+
let expectedText = """
122+
1. Mercury
123+
2. Venus
124+
3. Earth
125+
4. Mars
126+
5. Jupiter
127+
6. Saturn
128+
7. Uranus
129+
8. Neptune
130+
"""
131+
let prompt = """
132+
What are the names of the planets in the solar system, ordered from closest to furthest from
133+
the sun? Answer with a Markdown numbered list of the names and no other text.
134+
"""
135+
let model = VertexAI.componentInstance(config).generativeModel(
136+
modelName: ModelNames.gemini2FlashLite,
137+
generationConfig: generationConfig,
138+
safetySettings: safetySettings
139+
)
140+
let chat = model.startChat()
141+
142+
let stream = try chat.sendMessageStream(prompt)
143+
var textValues = [String]()
144+
for try await value in stream {
145+
try textValues.append(#require(value.text))
146+
}
147+
148+
let userHistory = try #require(chat.history.first)
149+
#expect(userHistory.role == "user")
150+
#expect(userHistory.parts.count == 1)
151+
let promptTextPart = try #require(userHistory.parts.first as? TextPart)
152+
#expect(promptTextPart.text == prompt)
153+
let modelHistory = try #require(chat.history.last)
154+
#expect(modelHistory.role == "model")
155+
#expect(modelHistory.parts.count == 1)
156+
let modelTextPart = try #require(modelHistory.parts.first as? TextPart)
157+
let modelText = modelTextPart.text.trimmingCharacters(in: .whitespacesAndNewlines)
158+
#expect(modelText == expectedText)
159+
#expect(textValues.count > 1)
160+
let text = textValues.joined().trimmingCharacters(in: .whitespacesAndNewlines)
161+
#expect(text == expectedText)
162+
}
118163
}

FirebaseVertexAI/Tests/TestApp/Tests/Integration/IntegrationTests.swift

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -69,45 +69,6 @@ final class IntegrationTests: XCTestCase {
6969

7070
// MARK: - Generate Content
7171

72-
func testGenerateContentStream() async throws {
73-
let expectedText = """
74-
1. Mercury
75-
2. Venus
76-
3. Earth
77-
4. Mars
78-
5. Jupiter
79-
6. Saturn
80-
7. Uranus
81-
8. Neptune
82-
"""
83-
let prompt = """
84-
What are the names of the planets in the solar system, ordered from closest to furthest from
85-
the sun? Answer with a Markdown numbered list of the names and no other text.
86-
"""
87-
let chat = model.startChat()
88-
89-
let stream = try chat.sendMessageStream(prompt)
90-
var textValues = [String]()
91-
for try await value in stream {
92-
try textValues.append(XCTUnwrap(value.text))
93-
}
94-
95-
let userHistory = try XCTUnwrap(chat.history.first)
96-
XCTAssertEqual(userHistory.role, "user")
97-
XCTAssertEqual(userHistory.parts.count, 1)
98-
let promptTextPart = try XCTUnwrap(userHistory.parts.first as? TextPart)
99-
XCTAssertEqual(promptTextPart.text, prompt)
100-
let modelHistory = try XCTUnwrap(chat.history.last)
101-
XCTAssertEqual(modelHistory.role, "model")
102-
XCTAssertEqual(modelHistory.parts.count, 1)
103-
let modelTextPart = try XCTUnwrap(modelHistory.parts.first as? TextPart)
104-
let modelText = modelTextPart.text.trimmingCharacters(in: .whitespacesAndNewlines)
105-
XCTAssertEqual(modelText, expectedText)
106-
XCTAssertGreaterThan(textValues.count, 1)
107-
let text = textValues.joined().trimmingCharacters(in: .whitespacesAndNewlines)
108-
XCTAssertEqual(text, expectedText)
109-
}
110-
11172
func testGenerateContent_appCheckNotConfigured_shouldFail() async throws {
11273
let app = try FirebaseApp.defaultNamedCopy(name: FirebaseAppNames.appCheckNotConfigured)
11374
addTeardownBlock { await app.delete() }

0 commit comments

Comments
 (0)