From 6d152fbbaeffaab8e1494e47da24865a3a596f14 Mon Sep 17 00:00:00 2001 From: Reid Chatham Date: Wed, 6 Dec 2023 21:09:07 -0800 Subject: [PATCH 01/10] simplify request call --- Sources/OpenAI/OpenAI.swift | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/Sources/OpenAI/OpenAI.swift b/Sources/OpenAI/OpenAI.swift index 3dcad3c9..a145b363 100644 --- a/Sources/OpenAI/OpenAI.swift +++ b/Sources/OpenAI/OpenAI.swift @@ -127,27 +127,20 @@ extension OpenAI { timeoutInterval: configuration.timeoutInterval) let task = session.dataTask(with: request) { data, _, error in if let error = error { - completion(.failure(error)) - return + return completion(.failure(error)) } guard let data = data else { - completion(.failure(OpenAIError.emptyData)) - return + return completion(.failure(OpenAIError.emptyData)) } - var apiError: Error? = nil do { - let decoded = try JSONDecoder().decode(ResultType.self, from: data) + let decoder = JSONDecoder() + let decoded = try decoder.decode(ResultType.self, from: data) completion(.success(decoded)) } catch { - apiError = error - } - - if let apiError = apiError { - do { - let decoded = try JSONDecoder().decode(APIErrorResponse.self, from: data) + if let decoded = try? decoder.decode(APIErrorResponse.self, from: data) completion(.failure(decoded)) - } catch { + } else { completion(.failure(apiError)) } } From aa76f1dcf5939b167f454bce57079b6cd639a194 Mon Sep 17 00:00:00 2001 From: Reid Chatham Date: Wed, 6 Dec 2023 21:11:16 -0800 Subject: [PATCH 02/10] fix errors --- Sources/OpenAI/OpenAI.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/OpenAI/OpenAI.swift b/Sources/OpenAI/OpenAI.swift index a145b363..79472426 100644 --- a/Sources/OpenAI/OpenAI.swift +++ b/Sources/OpenAI/OpenAI.swift @@ -138,10 +138,10 @@ extension OpenAI { let decoded = try decoder.decode(ResultType.self, from: data) completion(.success(decoded)) } catch { - if let decoded = try? decoder.decode(APIErrorResponse.self, from: data) + if let decoded = try? decoder.decode(APIErrorResponse.self, from: data) { completion(.failure(decoded)) } else { - completion(.failure(apiError)) + completion(.failure(error)) } } } From 6a487b72a498af5228bc6548830054fa5d008214 Mon Sep 17 00:00:00 2001 From: Reid Chatham Date: Wed, 6 Dec 2023 21:17:58 -0800 Subject: [PATCH 03/10] remove dead code from performSpeechRequest --- Sources/OpenAI/OpenAI.swift | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/Sources/OpenAI/OpenAI.swift b/Sources/OpenAI/OpenAI.swift index 79472426..4f433cca 100644 --- a/Sources/OpenAI/OpenAI.swift +++ b/Sources/OpenAI/OpenAI.swift @@ -182,25 +182,13 @@ extension OpenAI { let task = session.dataTask(with: request) { data, _, error in if let error = error { - completion(.failure(error)) - return + return completion(.failure(error)) } guard let data = data else { - completion(.failure(OpenAIError.emptyData)) - return + return completion(.failure(OpenAIError.emptyData)) } completion(.success(AudioSpeechResult(audioData: data))) - let apiError: Error? = nil - - if let apiError = apiError { - do { - let decoded = try JSONDecoder().decode(APIErrorResponse.self, from: data) - completion(.failure(decoded)) - } catch { - completion(.failure(apiError)) - } - } } task.resume() } catch { From a1dee0382e41da31cf33333555128652e15a2d57 Mon Sep 17 00:00:00 2001 From: Reid Chatham Date: Wed, 6 Dec 2023 21:22:26 -0800 Subject: [PATCH 04/10] add OpenAIError - failedToDecodeData --- Sources/OpenAI/Public/Errors/APIError.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Sources/OpenAI/Public/Errors/APIError.swift b/Sources/OpenAI/Public/Errors/APIError.swift index 2856fb83..258a7e56 100644 --- a/Sources/OpenAI/Public/Errors/APIError.swift +++ b/Sources/OpenAI/Public/Errors/APIError.swift @@ -9,6 +9,7 @@ import Foundation public enum OpenAIError: Error { case emptyData + case failedToDecodeData } public struct APIError: Error, Decodable, Equatable { From 4d275c444b1dec57308668335766e576089344dd Mon Sep 17 00:00:00 2001 From: Reid Chatham Date: Wed, 6 Dec 2023 21:25:30 -0800 Subject: [PATCH 05/10] return OpenAIError.failedToDecodeData from performRequest on failed json decode --- Sources/OpenAI/OpenAI.swift | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/Sources/OpenAI/OpenAI.swift b/Sources/OpenAI/OpenAI.swift index 4f433cca..fa8d6dac 100644 --- a/Sources/OpenAI/OpenAI.swift +++ b/Sources/OpenAI/OpenAI.swift @@ -133,16 +133,13 @@ extension OpenAI { return completion(.failure(OpenAIError.emptyData)) } - do { - let decoder = JSONDecoder() - let decoded = try decoder.decode(ResultType.self, from: data) + let decoder = JSONDecoder() + if let decoded = try? decoder.decode(ResultType.self, from: data) { completion(.success(decoded)) - } catch { - if let decoded = try? decoder.decode(APIErrorResponse.self, from: data) { - completion(.failure(decoded)) - } else { - completion(.failure(error)) - } + } else if let decoded = try? decoder.decode(APIErrorResponse.self, from: data) { + completion(.failure(decoded)) + } else { + completion(.failure(OpenAIError.failedToDecodeData)) } } task.resume() From b55ea5642f09d8c4c99db994fcba6a61ef0f9b62 Mon Sep 17 00:00:00 2001 From: Reid Chatham Date: Wed, 6 Dec 2023 21:45:23 -0800 Subject: [PATCH 06/10] simplify processJSON in StreamingSession --- Sources/OpenAI/Private/StreamingSession.swift | 21 ++++++------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/Sources/OpenAI/Private/StreamingSession.swift b/Sources/OpenAI/Private/StreamingSession.swift index a69e46cf..98cbf269 100644 --- a/Sources/OpenAI/Private/StreamingSession.swift +++ b/Sources/OpenAI/Private/StreamingSession.swift @@ -72,29 +72,20 @@ extension StreamingSession { return } guard let jsonData = jsonContent.data(using: .utf8) else { - onProcessingError?(self, StreamingError.unknownContent) - return + return onProcessingError?(self, StreamingError.unknownContent) } - var apiError: Error? = nil do { let decoder = JSONDecoder() let object = try decoder.decode(ResultType.self, from: jsonData) onReceiveContent?(self, object) } catch { - apiError = error - } - - if let apiError = apiError { - do { - let decoded = try JSONDecoder().decode(APIErrorResponse.self, from: jsonData) + if let decoded = try decoder.decode(APIErrorResponse.self, from: jsonData) { onProcessingError?(self, decoded) - } catch { - if index == jsonObjects.count - 1 { - previousChunkBuffer = "data: \(jsonContent)" // Chunk ends in a partial JSON - } else { - onProcessingError?(self, apiError) - } + } else if index == jsonObjects.count - 1 { + previousChunkBuffer = "data: \(jsonContent)" // Chunk ends in a partial JSON + } else { + onProcessingError?(self, error) } } } From 3240f00c11eb6c4cfa5dbf538113720e240b8608 Mon Sep 17 00:00:00 2001 From: Reid Chatham Date: Sun, 10 Dec 2023 09:06:13 -0800 Subject: [PATCH 07/10] revert to previously existing behavior --- Sources/OpenAI/OpenAI.swift | 12 +++++------- Sources/OpenAI/Public/Errors/APIError.swift | 1 - 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/Sources/OpenAI/OpenAI.swift b/Sources/OpenAI/OpenAI.swift index fa8d6dac..fa981ea4 100644 --- a/Sources/OpenAI/OpenAI.swift +++ b/Sources/OpenAI/OpenAI.swift @@ -132,14 +132,12 @@ extension OpenAI { guard let data = data else { return completion(.failure(OpenAIError.emptyData)) } - + let decoder = JSONDecoder() - if let decoded = try? decoder.decode(ResultType.self, from: data) { - completion(.success(decoded)) - } else if let decoded = try? decoder.decode(APIErrorResponse.self, from: data) { - completion(.failure(decoded)) - } else { - completion(.failure(OpenAIError.failedToDecodeData)) + do { + completion(.success(try decoder.decode(ResultType.self, from: data))) + } catch { + completion(.failure((try? decoder.decode(APIErrorResponse.self, from: data)) ?? error)) } } task.resume() diff --git a/Sources/OpenAI/Public/Errors/APIError.swift b/Sources/OpenAI/Public/Errors/APIError.swift index 258a7e56..2856fb83 100644 --- a/Sources/OpenAI/Public/Errors/APIError.swift +++ b/Sources/OpenAI/Public/Errors/APIError.swift @@ -9,7 +9,6 @@ import Foundation public enum OpenAIError: Error { case emptyData - case failedToDecodeData } public struct APIError: Error, Decodable, Equatable { From b943ab0a52d05cd28a3e2491f2ea058ff919d455 Mon Sep 17 00:00:00 2001 From: Reid Chatham Date: Wed, 27 Dec 2023 11:12:42 -0800 Subject: [PATCH 08/10] respond to pr comments --- Sources/OpenAI/Private/StreamingSession.swift | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Sources/OpenAI/Private/StreamingSession.swift b/Sources/OpenAI/Private/StreamingSession.swift index 98cbf269..0d1ced6d 100644 --- a/Sources/OpenAI/Private/StreamingSession.swift +++ b/Sources/OpenAI/Private/StreamingSession.swift @@ -72,20 +72,21 @@ extension StreamingSession { return } guard let jsonData = jsonContent.data(using: .utf8) else { - return onProcessingError?(self, StreamingError.unknownContent) + onProcessingError?(self, StreamingError.unknownContent) + return } - + + let decoder = JSONDecoder() do { - let decoder = JSONDecoder() let object = try decoder.decode(ResultType.self, from: jsonData) onReceiveContent?(self, object) } catch { - if let decoded = try decoder.decode(APIErrorResponse.self, from: jsonData) { + if let decoded = try? decoder.decode(APIErrorResponse.self, from: jsonData) { onProcessingError?(self, decoded) } else if index == jsonObjects.count - 1 { previousChunkBuffer = "data: \(jsonContent)" // Chunk ends in a partial JSON } else { - onProcessingError?(self, error) + onProcessingError?(self, error) } } } From f17565ea7331a7eaa5590d352d852bbef011a9ca Mon Sep 17 00:00:00 2001 From: Reid Chatham Date: Wed, 27 Dec 2023 11:14:50 -0800 Subject: [PATCH 09/10] remove whitespace --- Sources/OpenAI/OpenAI.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/Sources/OpenAI/OpenAI.swift b/Sources/OpenAI/OpenAI.swift index fa981ea4..cfb1e9d1 100644 --- a/Sources/OpenAI/OpenAI.swift +++ b/Sources/OpenAI/OpenAI.swift @@ -132,7 +132,6 @@ extension OpenAI { guard let data = data else { return completion(.failure(OpenAIError.emptyData)) } - let decoder = JSONDecoder() do { completion(.success(try decoder.decode(ResultType.self, from: data))) From 21e3e5882f7b4d869b743d062dec6088919adad9 Mon Sep 17 00:00:00 2001 From: Reid Chatham Date: Wed, 27 Dec 2023 11:18:28 -0800 Subject: [PATCH 10/10] remove whitespace --- Sources/OpenAI/Private/StreamingSession.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/Sources/OpenAI/Private/StreamingSession.swift b/Sources/OpenAI/Private/StreamingSession.swift index 0d1ced6d..b986dc7e 100644 --- a/Sources/OpenAI/Private/StreamingSession.swift +++ b/Sources/OpenAI/Private/StreamingSession.swift @@ -75,7 +75,6 @@ extension StreamingSession { onProcessingError?(self, StreamingError.unknownContent) return } - let decoder = JSONDecoder() do { let object = try decoder.decode(ResultType.self, from: jsonData)