From 3071a851ddc083aaabe81d1c04466e77f9640e11 Mon Sep 17 00:00:00 2001 From: "B.T. Franklin" Date: Thu, 27 Jul 2023 19:51:30 -0700 Subject: [PATCH] Moved the request code out of the main connection implementation and into extensions. --- Sources/CleverBird/OpenAIAPIConnection.swift | 31 +------------------ ...nnection+createChatCompletionRequest.swift | 15 +++++++++ ...+createChatCompletionAsyncByteStream.swift | 22 +++++++++++++ 3 files changed, 38 insertions(+), 30 deletions(-) create mode 100644 Sources/CleverBird/chat/OpenAIAPIConnection+createChatCompletionRequest.swift create mode 100644 Sources/CleverBird/chat/streaming/OpenAIAPIConnection+createChatCompletionAsyncByteStream.swift diff --git a/Sources/CleverBird/OpenAIAPIConnection.swift b/Sources/CleverBird/OpenAIAPIConnection.swift index bbb6ad3..51f966a 100644 --- a/Sources/CleverBird/OpenAIAPIConnection.swift +++ b/Sources/CleverBird/OpenAIAPIConnection.swift @@ -5,14 +5,10 @@ import Get public class OpenAIAPIConnection { - private let chatCompletionPath = "/v1/chat/completions" - private let embeddingsPath = "/v1/embeddings" - let apiKey: String let organization: String? let client: APIClient - - private let requestHeaders: [String:String] + let requestHeaders: [String:String] public init(apiKey: String, organization: String? = nil) { self.apiKey = apiKey @@ -38,29 +34,4 @@ public class OpenAIAPIConnection { } self.requestHeaders = requestHeaders } - - func createChatCompletionRequest(for body: Encodable) async throws -> Request { - Request( - path: self.chatCompletionPath, - method: .post, - body: body, - headers: self.requestHeaders) - } - - func createChatCompletionAsyncByteStream(for body: Encodable) async throws -> URLSession.AsyncBytes { - - let request = try await createChatCompletionRequest(for: body) - let urlRequest = try await client.makeURLRequest(for: request) - let (asyncByteStream, response) = try await client.session.bytes(for: urlRequest) - - guard let response = response as? HTTPURLResponse else { - throw CleverBirdError.responseParsingFailed(message: "Expected response of type HTTPURLResponse, but received: \(response)") - } - - guard (200...299).contains(response.statusCode) else { - throw CleverBirdError.requestFailed(message: "Response status code: \(response.statusCode)") - } - - return asyncByteStream - } } diff --git a/Sources/CleverBird/chat/OpenAIAPIConnection+createChatCompletionRequest.swift b/Sources/CleverBird/chat/OpenAIAPIConnection+createChatCompletionRequest.swift new file mode 100644 index 0000000..42b39c1 --- /dev/null +++ b/Sources/CleverBird/chat/OpenAIAPIConnection+createChatCompletionRequest.swift @@ -0,0 +1,15 @@ +// Created by B.T. Franklin on 7/27/23 + +import Get + +private let chatCompletionPath = "/v1/chat/completions" + +extension OpenAIAPIConnection { + func createChatCompletionRequest(for body: Encodable) async throws -> Request { + Request( + path: chatCompletionPath, + method: .post, + body: body, + headers: self.requestHeaders) + } +} diff --git a/Sources/CleverBird/chat/streaming/OpenAIAPIConnection+createChatCompletionAsyncByteStream.swift b/Sources/CleverBird/chat/streaming/OpenAIAPIConnection+createChatCompletionAsyncByteStream.swift new file mode 100644 index 0000000..367565c --- /dev/null +++ b/Sources/CleverBird/chat/streaming/OpenAIAPIConnection+createChatCompletionAsyncByteStream.swift @@ -0,0 +1,22 @@ +// Created by B.T. Franklin on 7/27/23 + +import Foundation + +extension OpenAIAPIConnection { + func createChatCompletionAsyncByteStream(for body: Encodable) async throws -> URLSession.AsyncBytes { + + let request = try await createChatCompletionRequest(for: body) + let urlRequest = try await client.makeURLRequest(for: request) + let (asyncByteStream, response) = try await client.session.bytes(for: urlRequest) + + guard let response = response as? HTTPURLResponse else { + throw CleverBirdError.responseParsingFailed(message: "Expected response of type HTTPURLResponse, but received: \(response)") + } + + guard (200...299).contains(response.statusCode) else { + throw CleverBirdError.requestFailed(message: "Response status code: \(response.statusCode)") + } + + return asyncByteStream + } +}