From 874ce850156d7443e005941da474b3ee2cac711e Mon Sep 17 00:00:00 2001 From: Andrew Heard Date: Wed, 25 Sep 2024 18:03:38 -0400 Subject: [PATCH] [Vertex AI] Switch to `firebasevertexai.googleapis.com` API --- FirebaseVertexAI/Sources/Constants.swift | 5 +- FirebaseVertexAI/Sources/Errors.swift | 16 ------ .../Sources/GenerativeAIRequest.swift | 4 +- .../Sources/GenerativeAIService.swift | 12 ----- .../Tests/Unit/GenerativeModelTests.swift | 50 ------------------- 5 files changed, 2 insertions(+), 85 deletions(-) diff --git a/FirebaseVertexAI/Sources/Constants.swift b/FirebaseVertexAI/Sources/Constants.swift index e3f2d45d6df..ac38d01f08b 100644 --- a/FirebaseVertexAI/Sources/Constants.swift +++ b/FirebaseVertexAI/Sources/Constants.swift @@ -21,8 +21,5 @@ import Foundation /// Constants associated with the Vertex AI for Firebase SDK. enum Constants { /// The Vertex AI backend endpoint URL. - /// - /// TODO(andrewheard): Update to "https://firebasevertexai.googleapis.com" after the Vertex AI in - /// Firebase API launch. - static let baseURL = "https://firebaseml.googleapis.com" + static let baseURL = "https://firebasevertexai.googleapis.com" } diff --git a/FirebaseVertexAI/Sources/Errors.swift b/FirebaseVertexAI/Sources/Errors.swift index 57fbe826580..770dc3b12d3 100644 --- a/FirebaseVertexAI/Sources/Errors.swift +++ b/FirebaseVertexAI/Sources/Errors.swift @@ -31,11 +31,6 @@ struct RPCError: Error { self.details = details } - // TODO(andrewheard): Remove this method after the Vertex AI in Firebase API launch. - func isFirebaseMLServiceDisabledError() -> Bool { - return details.contains { $0.isFirebaseMLServiceDisabledErrorDetails() } - } - func isVertexAIInFirebaseServiceDisabledError() -> Bool { return details.contains { $0.isVertexAIInFirebaseServiceDisabledErrorDetails() } } @@ -95,17 +90,6 @@ struct ErrorDetails { return isErrorInfo() && reason == "SERVICE_DISABLED" && domain == "googleapis.com" } - // TODO(andrewheard): Remove this method after the Vertex AI in Firebase API launch. - func isFirebaseMLServiceDisabledErrorDetails() -> Bool { - guard isServiceDisabledError() else { - return false - } - guard let metadata, metadata["service"] == "firebaseml.googleapis.com" else { - return false - } - return true - } - func isVertexAIInFirebaseServiceDisabledErrorDetails() -> Bool { guard isServiceDisabledError() else { return false diff --git a/FirebaseVertexAI/Sources/GenerativeAIRequest.swift b/FirebaseVertexAI/Sources/GenerativeAIRequest.swift index 327b7d4f1b4..afa04dc6a51 100644 --- a/FirebaseVertexAI/Sources/GenerativeAIRequest.swift +++ b/FirebaseVertexAI/Sources/GenerativeAIRequest.swift @@ -31,9 +31,7 @@ public struct RequestOptions { let timeout: TimeInterval? /// The API version to use in requests to the backend. - /// - /// TODO(andrewheard): Update to "v1beta" after the Vertex AI in Firebase API launch. - let apiVersion = "v2beta" + let apiVersion = "v1beta" /// Initializes a request options object. /// diff --git a/FirebaseVertexAI/Sources/GenerativeAIService.swift b/FirebaseVertexAI/Sources/GenerativeAIService.swift index 02995926abb..f3d80ef17cf 100644 --- a/FirebaseVertexAI/Sources/GenerativeAIService.swift +++ b/FirebaseVertexAI/Sources/GenerativeAIService.swift @@ -266,18 +266,6 @@ struct GenerativeAIService { // Log specific RPC errors that cannot be mitigated or handled by user code. // These errors do not produce specific GenerateContentError or CountTokensError cases. private func logRPCError(_ error: RPCError) { - // TODO(andrewheard): Remove this check after the Vertex AI in Firebase API launch. - if error.isFirebaseMLServiceDisabledError() { - VertexLog.error(code: .vertexAIInFirebaseAPIDisabled, """ - The Vertex AI for Firebase SDK requires the Firebase ML API `firebaseml.googleapis.com` to \ - be enabled for your project. Get started in the Firebase Console \ - (https://console.firebase.google.com/project/\(projectID)/genai/vertex) or verify that the \ - API is enabled in the Google Cloud Console \ - (https://console.developers.google.com/apis/api/firebaseml.googleapis.com/overview?project=\ - \(projectID)). - """) - } - if error.isVertexAIInFirebaseServiceDisabledError() { VertexLog.error(code: .vertexAIInFirebaseAPIDisabled, """ The Vertex AI for Firebase SDK requires the Firebase Vertex AI API \ diff --git a/FirebaseVertexAI/Tests/Unit/GenerativeModelTests.swift b/FirebaseVertexAI/Tests/Unit/GenerativeModelTests.swift index e7bd91dcff1..6700b1ec113 100644 --- a/FirebaseVertexAI/Tests/Unit/GenerativeModelTests.swift +++ b/FirebaseVertexAI/Tests/Unit/GenerativeModelTests.swift @@ -453,30 +453,6 @@ final class GenerativeModelTests: XCTestCase { } } - // TODO(andrewheard): Remove this test case after the Vertex AI in Firebase API launch. - func testGenerateContent_failure_firebaseMLAPINotEnabled() async throws { - let expectedStatusCode = 403 - MockURLProtocol - .requestHandler = try httpRequestHandler( - forResource: "unary-failure-firebaseml-api-not-enabled", - withExtension: "json", - statusCode: expectedStatusCode - ) - - do { - _ = try await model.generateContent(testPrompt) - XCTFail("Should throw GenerateContentError.internalError; no error thrown.") - } catch let GenerateContentError.internalError(error as RPCError) { - XCTAssertEqual(error.httpResponseCode, expectedStatusCode) - XCTAssertEqual(error.status, .permissionDenied) - XCTAssertTrue(error.message.starts(with: "Firebase ML API has not been used in project")) - XCTAssertTrue(error.isFirebaseMLServiceDisabledError()) - return - } catch { - XCTFail("Should throw GenerateContentError.internalError(RPCError); error thrown: \(error)") - } - } - func testGenerateContent_failure_firebaseVertexAIAPINotEnabled() async throws { let expectedStatusCode = 403 MockURLProtocol @@ -799,32 +775,6 @@ final class GenerativeModelTests: XCTestCase { XCTFail("Should have caught an error.") } - // TODO(andrewheard): Remove this test case after the Vertex AI in Firebase API launch. - func testGenerateContentStream_failure_firebaseMLAPINotEnabled() async throws { - let expectedStatusCode = 403 - MockURLProtocol - .requestHandler = try httpRequestHandler( - forResource: "unary-failure-firebaseml-api-not-enabled", - withExtension: "json", - statusCode: expectedStatusCode - ) - - do { - let stream = try model.generateContentStream(testPrompt) - for try await _ in stream { - XCTFail("No content is there, this shouldn't happen.") - } - } catch let GenerateContentError.internalError(error as RPCError) { - XCTAssertEqual(error.httpResponseCode, expectedStatusCode) - XCTAssertEqual(error.status, .permissionDenied) - XCTAssertTrue(error.message.starts(with: "Firebase ML API has not been used in project")) - XCTAssertTrue(error.isFirebaseMLServiceDisabledError()) - return - } - - XCTFail("Should have caught an error.") - } - func testGenerateContentStream_failure_vertexAIInFirebaseAPINotEnabled() async throws { let expectedStatusCode = 403 MockURLProtocol