Skip to content

Commit 12bf874

Browse files
andrewheardG.Dev.Ssomsak
authored and
G.Dev.Ssomsak
committed
Add default RequestOptions.timeout of 300 seconds (google-gemini#170)
1 parent f7ab48c commit 12bf874

File tree

2 files changed

+54
-9
lines changed

2 files changed

+54
-9
lines changed

Sources/GoogleAI/GenerativeAIRequest.swift

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,20 +26,18 @@ protocol GenerativeAIRequest: Encodable {
2626
/// Configuration parameters for sending requests to the backend.
2727
@available(iOS 15.0, macOS 11.0, macCatalyst 15.0, *)
2828
public struct RequestOptions {
29-
/// The request’s timeout interval in seconds; if not specified uses the default value for a
30-
/// `URLRequest`.
31-
let timeout: TimeInterval?
29+
/// The request’s timeout interval in seconds.
30+
let timeout: TimeInterval
3231

3332
/// The API version to use in requests to the backend.
3433
let apiVersion: String
3534

3635
/// Initializes a request options object.
3736
///
3837
/// - Parameters:
39-
/// - timeout The request’s timeout interval in seconds; if not specified uses the default value
40-
/// for a `URLRequest`.
41-
/// - apiVersion The API version to use in requests to the backend; defaults to "v1beta".
42-
public init(timeout: TimeInterval? = nil, apiVersion: String = "v1beta") {
38+
/// - timeout: The request’s timeout interval in seconds; defaults to 300 seconds (5 minutes).
39+
/// - apiVersion: The API version to use in requests to the backend; defaults to "v1beta".
40+
public init(timeout: TimeInterval = 300.0, apiVersion: String = "v1beta") {
4341
self.timeout = timeout
4442
self.apiVersion = apiVersion
4543
}

Tests/GoogleAITests/GenerativeModelTests.swift

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -611,6 +611,20 @@ final class GenerativeModelTests: XCTestCase {
611611
XCTAssertEqual(response.candidates.count, 1)
612612
}
613613

614+
func testGenerateContent_requestOptions_defaultTimeout() async throws {
615+
let expectedTimeout = 300.0 // Default in timeout in RequestOptions()
616+
MockURLProtocol
617+
.requestHandler = try httpRequestHandler(
618+
forResource: "unary-success-basic-reply-short",
619+
withExtension: "json",
620+
timeout: expectedTimeout
621+
)
622+
623+
let response = try await model.generateContent(testPrompt)
624+
625+
XCTAssertEqual(response.candidates.count, 1)
626+
}
627+
614628
// MARK: - Generate Content (Streaming)
615629

616630
func testGenerateContentStream_failureInvalidAPIKey() async throws {
@@ -967,6 +981,25 @@ final class GenerativeModelTests: XCTestCase {
967981
XCTAssertEqual(responses, 1)
968982
}
969983

984+
func testGenerateContentStream_requestOptions_defaultTimeout() async throws {
985+
let expectedTimeout = 300.0 // Default in timeout in RequestOptions()
986+
MockURLProtocol
987+
.requestHandler = try httpRequestHandler(
988+
forResource: "streaming-success-basic-reply-short",
989+
withExtension: "txt",
990+
timeout: expectedTimeout
991+
)
992+
993+
var responses = 0
994+
let stream = model.generateContentStream(testPrompt)
995+
for try await content in stream {
996+
XCTAssertNotNil(content.text)
997+
responses += 1
998+
}
999+
1000+
XCTAssertEqual(responses, 1)
1001+
}
1002+
9701003
// MARK: - Count Tokens
9711004

9721005
func testCountTokens_succeeds() async throws {
@@ -1019,6 +1052,20 @@ final class GenerativeModelTests: XCTestCase {
10191052
XCTAssertEqual(response.totalTokens, 6)
10201053
}
10211054

1055+
func testCountTokens_requestOptions_defaultTimeout() async throws {
1056+
let expectedTimeout = 300.0
1057+
MockURLProtocol
1058+
.requestHandler = try httpRequestHandler(
1059+
forResource: "success-total-tokens",
1060+
withExtension: "json",
1061+
timeout: expectedTimeout
1062+
)
1063+
1064+
let response = try await model.countTokens(testPrompt)
1065+
1066+
XCTAssertEqual(response.totalTokens, 6)
1067+
}
1068+
10221069
// MARK: - Model Resource Name
10231070

10241071
func testModelResourceName_noPrefix() async throws {
@@ -1067,8 +1114,8 @@ final class GenerativeModelTests: XCTestCase {
10671114
private func httpRequestHandler(forResource name: String,
10681115
withExtension ext: String,
10691116
statusCode: Int = 200,
1070-
timeout: TimeInterval = URLRequest
1071-
.defaultTimeoutInterval()) throws -> ((URLRequest) throws -> (
1117+
timeout: TimeInterval = RequestOptions()
1118+
.timeout) throws -> ((URLRequest) throws -> (
10721119
URLResponse,
10731120
AsyncLineSequence<URL.AsyncBytes>?
10741121
)) {

0 commit comments

Comments
 (0)