@@ -16,6 +16,7 @@ import FirebaseAppCheckInterop
1616import FirebaseAuthInterop
1717import FirebaseCore
1818import Foundation
19+ import os. log
1920
2021@available ( iOS 15 . 0 , macOS 11 . 0 , macCatalyst 15 . 0 , tvOS 15 . 0 , watchOS 8 . 0 , * )
2122struct GenerativeAIService {
@@ -60,9 +61,15 @@ struct GenerativeAIService {
6061
6162 // Verify the status code is 200
6263 guard response. statusCode == 200 else {
63- Logging . network. error ( " [FirebaseVertexAI] The server responded with an error: \( response) " )
64+ VertexLog . error (
65+ code: . loadRequestResponseError,
66+ " The server responded with an error: \( response) "
67+ )
6468 if let responseString = String ( data: data, encoding: . utf8) {
65- Logging . default. error ( " [FirebaseVertexAI] Response payload: \( responseString) " )
69+ VertexLog . error (
70+ code: . loadRequestResponseErrorPayload,
71+ " Response payload: \( responseString) "
72+ )
6673 }
6774
6875 throw parseError ( responseData: data)
@@ -108,14 +115,19 @@ struct GenerativeAIService {
108115
109116 // Verify the status code is 200
110117 guard response. statusCode == 200 else {
111- Logging . network
112- . error ( " [FirebaseVertexAI] The server responded with an error: \( response) " )
118+ VertexLog . error (
119+ code: . loadRequestStreamResponseError,
120+ " The server responded with an error: \( response) "
121+ )
113122 var responseBody = " "
114123 for try await line in stream. lines {
115124 responseBody += line + " \n "
116125 }
117126
118- Logging . default. error ( " [FirebaseVertexAI] Response payload: \( responseBody) " )
127+ VertexLog . error (
128+ code: . loadRequestStreamResponseErrorPayload,
129+ " Response payload: \( responseBody) "
130+ )
119131 continuation. finish ( throwing: parseError ( responseBody: responseBody) )
120132
121133 return
@@ -127,7 +139,7 @@ struct GenerativeAIService {
127139 let decoder = JSONDecoder ( )
128140 decoder. keyDecodingStrategy = . convertFromSnakeCase
129141 for try await line in stream. lines {
130- Logging . network . debug ( " [FirebaseVertexAI] Stream response: \( line) " )
142+ VertexLog . debug ( code : . loadRequestStreamResponseLine , " Stream response: \( line) " )
131143
132144 if line. hasPrefix ( " data: " ) {
133145 // We can assume 5 characters since it's utf-8 encoded, removing `data:`.
@@ -179,8 +191,10 @@ struct GenerativeAIService {
179191 let tokenResult = await appCheck. getToken ( forcingRefresh: false )
180192 urlRequest. setValue ( tokenResult. token, forHTTPHeaderField: " X-Firebase-AppCheck " )
181193 if let error = tokenResult. error {
182- Logging . default
183- . debug ( " [FirebaseVertexAI] Failed to fetch AppCheck token. Error: \( error) " )
194+ VertexLog . error (
195+ code: . appCheckTokenFetchFailed,
196+ " Failed to fetch AppCheck token. Error: \( error) "
197+ )
184198 }
185199 }
186200
@@ -202,10 +216,10 @@ struct GenerativeAIService {
202216 private func httpResponse( urlResponse: URLResponse) throws -> HTTPURLResponse {
203217 // Verify the status code is 200
204218 guard let response = urlResponse as? HTTPURLResponse else {
205- Logging . default
206- . error (
207- " [FirebaseVertexAI] Response wasn't an HTTP response, internal error \( urlResponse) "
208- )
219+ VertexLog . error (
220+ code : . generativeAIServiceNonHTTPResponse ,
221+ " Response wasn't an HTTP response, internal error \( urlResponse) "
222+ )
209223 throw NSError (
210224 domain: " com.google.generative-ai " ,
211225 code: - 1 ,
@@ -253,7 +267,7 @@ struct GenerativeAIService {
253267 // These errors do not produce specific GenerateContentError or CountTokensError cases.
254268 private func logRPCError( _ error: RPCError) {
255269 if error. isFirebaseMLServiceDisabledError ( ) {
256- Logging . default . error ( """
270+ VertexLog . error ( code : . firebaseMLAPIDisabled , """
257271 The Vertex AI for Firebase SDK requires the Firebase ML API `firebaseml.googleapis.com` to \
258272 be enabled for your project. Get started in the Firebase Console \
259273 (https://console.firebase.google.com/project/ \( projectID) /genai/vertex) or verify that the \
@@ -269,9 +283,12 @@ struct GenerativeAIService {
269283 return try JSONDecoder ( ) . decode ( type, from: data)
270284 } catch {
271285 if let json = String ( data: data, encoding: . utf8) {
272- Logging . network . error ( " [FirebaseVertexAI] JSON response: \( json) " )
286+ VertexLog . error ( code : . loadRequestParseResponseFailedJSON , " JSON response: \( json) " )
273287 }
274- Logging . default. error ( " [FirebaseVertexAI] Error decoding server JSON: \( error) " )
288+ VertexLog . error (
289+ code: . loadRequestParseResponseFailedJSONError,
290+ " Error decoding server JSON: \( error) "
291+ )
275292 throw error
276293 }
277294 }
@@ -297,9 +314,12 @@ struct GenerativeAIService {
297314 }
298315
299316 private func printCURLCommand( from request: URLRequest ) {
317+ guard VertexLog . additionalLoggingEnabled ( ) else {
318+ return
319+ }
300320 let command = cURLCommand ( from: request)
301- Logging . verbose . debug ( """
302- [FirebaseVertexAI] Creating request with the equivalent cURL command:
321+ os_log ( . debug, log : VertexLog . logObject , """
322+ \( VertexLog . service ) Creating request with the equivalent cURL command:
303323 ----- cURL command -----
304324 \( command, privacy: . private)
305325 ------------------------
0 commit comments