Skip to content

Commit 880a15c

Browse files
updating API
1 parent 9864ee3 commit 880a15c

File tree

9 files changed

+385
-417
lines changed

9 files changed

+385
-417
lines changed

Examples/SwiftOpenAIExample/SwiftOpenAIExample/ImagesDemo/ImagesDemoView.swift

Lines changed: 296 additions & 296 deletions
Large diffs are not rendered by default.

Examples/SwiftOpenAIExample/SwiftOpenAIExample/ImagesDemo/ImagesProvider.swift

Lines changed: 63 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -2,99 +2,67 @@ import SwiftUI
22
import SwiftOpenAI
33

44
@Observable class ImagesProvider {
5-
6-
let service: OpenAIService
7-
8-
var images: [URL] = []
9-
var base64Images: [String] = [] // Store base64 encoded images
10-
11-
init(service: OpenAIService) {
12-
self.service = service
13-
}
14-
15-
// MARK: - New API Methods
16-
17-
func createImages(
18-
parameters: CreateImageParameters)
19-
async throws
20-
{
21-
let response = try await service.createImages(parameters: parameters)
22-
processImageData(response.data)
23-
}
24-
25-
func editImages(
26-
parameters: CreateImageEditParameters)
27-
async throws
28-
{
29-
let response = try await service.editImage(parameters: parameters)
30-
processImageData(response.data)
31-
}
32-
33-
func createImageVariations(
34-
parameters: CreateImageVariationParameters)
35-
async throws
36-
{
37-
let response = try await service.createImageVariations(parameters: parameters)
38-
processImageData(response.data)
39-
}
40-
41-
// Helper method to process the image data
42-
private func processImageData(_ imageDataArray: [CreateImageResponse]) {
43-
// Clear previous results
44-
self.images = []
45-
self.base64Images = []
46-
47-
// Process each image data item
48-
for imageData in imageDataArray {
49-
for data in imageData.data {
50-
// If there's a URL, add it
51-
if let urlString = data.url, let url = URL(string: urlString) {
52-
self.images.append(url)
53-
}
54-
55-
// If there's base64 data, add it
56-
if let base64Data = data.b64JSON {
57-
self.base64Images.append(base64Data)
58-
}
59-
}
60-
}
61-
}
62-
63-
// MARK: - Base64 Helper Methods
64-
65-
func getUIImagesFromBase64() -> [UIImage] {
66-
return base64Images.compactMap { base64String in
67-
guard let imageData = Data(base64Encoded: base64String) else { return nil }
68-
return UIImage(data: imageData)
69-
}
70-
}
71-
72-
// MARK: - Legacy API Methods
73-
74-
func legacyCreateImages(
75-
parameters: ImageCreateParameters)
76-
async throws
77-
{
78-
// let urls = try await service.legacyCreateImages(
79-
// parameters: parameters).data.compactMap { $0.url }
80-
// self.images = urls.compactMap { URL(string: $0) }
81-
}
82-
83-
func legacyEditImages(
84-
parameters: ImageEditParameters)
85-
async throws
86-
{
87-
// let urls = try await service.legacyEditImage(
88-
// parameters: parameters).data.compactMap { $0.url }
89-
// self.images = urls.compactMap { URL(string: $0) }
90-
}
91-
92-
func legacyCreateImageVariations(
93-
parameters: ImageVariationParameters)
94-
async throws
95-
{
96-
// let urls = try await service.legacyCreateImageVariations(
97-
// parameters: parameters).data.compactMap { $0.url }
98-
// self.images = urls.compactMap { URL(string: $0) }
99-
}
5+
6+
let service: OpenAIService
7+
8+
var images: [URL] = []
9+
var base64Images: [String] = [] // Store base64 encoded images
10+
11+
init(service: OpenAIService) {
12+
self.service = service
13+
}
14+
15+
// MARK: - New API Methods
16+
17+
func createImages(
18+
parameters: CreateImageParameters)
19+
async throws
20+
{
21+
let response = try await service.createImages(parameters: parameters)
22+
processImageData(response.data ?? [])
23+
}
24+
25+
func editImages(
26+
parameters: CreateImageEditParameters)
27+
async throws
28+
{
29+
let response = try await service.editImage(parameters: parameters)
30+
processImageData(response.data ?? [])
31+
}
32+
33+
func createImageVariations(
34+
parameters: CreateImageVariationParameters)
35+
async throws
36+
{
37+
let response = try await service.createImageVariations(parameters: parameters)
38+
processImageData(response.data ?? [])
39+
}
40+
41+
// Helper method to process the image data
42+
private func processImageData(_ imageDataArray: [CreateImageResponse.ImageData]) {
43+
// Clear previous results
44+
self.images = []
45+
self.base64Images = []
46+
47+
// Process each image data item
48+
for imageData in imageDataArray {
49+
if let urlString = imageData.url, let url = URL(string: urlString) {
50+
self.images.append(url)
51+
}
52+
53+
// If there's base64 data, add it
54+
if let base64Data = imageData.b64JSON {
55+
self.base64Images.append(base64Data)
56+
}
57+
}
58+
}
59+
60+
// MARK: - Base64 Helper Methods
61+
62+
func getUIImagesFromBase64() -> [UIImage] {
63+
return base64Images.compactMap { base64String in
64+
guard let imageData = Data(base64Encoded: base64String) else { return nil }
65+
return UIImage(data: imageData)
66+
}
67+
}
10068
}

Examples/SwiftOpenAIExample/SwiftOpenAIExample/SwiftOpenAIExample.entitlements

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
33
<plist version="1.0">
44
<dict>
5-
<key>com.apple.security.app-sandbox</key>
6-
<true/>
7-
<key>com.apple.security.files.user-selected.read-only</key>
8-
<true/>
5+
<key>com.apple.security.app-sandbox</key>
6+
<true/>
7+
<key>com.apple.security.files.user-selected.read-only</key>
8+
<true/>
99
</dict>
1010
</plist>

Sources/OpenAI/AIProxy/AIProxyService.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -255,26 +255,26 @@ struct AIProxyService: OpenAIService {
255255

256256
func createImages(
257257
parameters: CreateImageParameters)
258-
async throws -> OpenAIResponse<CreateImageResponse>
258+
async throws -> CreateImageResponse
259259
{
260260
let request = try await OpenAIAPI.images(.generations).request(aiproxyPartialKey: partialKey, clientID: clientID, organizationID: organizationID, openAIEnvironment: openAIEnvironment, method: .post, params: parameters)
261-
return try await fetch(debugEnabled: debugEnabled, type: OpenAIResponse<CreateImageResponse>.self, with: request)
261+
return try await fetch(debugEnabled: debugEnabled, type: CreateImageResponse.self, with: request)
262262
}
263263

264264
func editImage(
265265
parameters: CreateImageEditParameters)
266-
async throws -> OpenAIResponse<CreateImageResponse>
266+
async throws -> CreateImageResponse
267267
{
268268
let request = try await OpenAIAPI.images(.edits).multiPartRequest(aiproxyPartialKey: partialKey, openAIEnvironment: openAIEnvironment, clientID: clientID, organizationID: organizationID, method: .post, params: parameters)
269-
return try await fetch(debugEnabled: debugEnabled, type: OpenAIResponse<CreateImageResponse>.self, with: request)
269+
return try await fetch(debugEnabled: debugEnabled, type: CreateImageResponse.self, with: request)
270270
}
271271

272272
func createImageVariations(
273273
parameters: CreateImageVariationParameters)
274-
async throws -> OpenAIResponse<CreateImageResponse>
274+
async throws -> CreateImageResponse
275275
{
276276
let request = try await OpenAIAPI.images(.variations).multiPartRequest(aiproxyPartialKey: partialKey, openAIEnvironment: openAIEnvironment, clientID: clientID, organizationID: organizationID, method: .post, params: parameters)
277-
return try await fetch(debugEnabled: debugEnabled, type: OpenAIResponse<CreateImageResponse>.self, with: request)
277+
return try await fetch(debugEnabled: debugEnabled, type: CreateImageResponse.self, with: request)
278278
}
279279

280280
// MARK: Models

Sources/OpenAI/Azure/DefaultOpenAIAzureService.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,21 +139,21 @@ final public class DefaultOpenAIAzureService: OpenAIService {
139139

140140
public func createImages(
141141
parameters: CreateImageParameters)
142-
async throws -> OpenAIResponse<CreateImageResponse>
142+
async throws -> CreateImageResponse
143143
{
144144
fatalError("Currently, this API is not supported. We welcome and encourage contributions to our open-source project. Please consider opening an issue or submitting a pull request to add support for this feature.")
145145
}
146146

147147
public func editImage(
148148
parameters: CreateImageEditParameters)
149-
async throws -> OpenAIResponse<CreateImageResponse>
149+
async throws -> CreateImageResponse
150150
{
151151
fatalError("Currently, this API is not supported. We welcome and encourage contributions to our open-source project. Please consider opening an issue or submitting a pull request to add support for this feature.")
152152
}
153153

154154
public func createImageVariations(
155155
parameters: CreateImageVariationParameters)
156-
async throws -> OpenAIResponse<CreateImageResponse>
156+
async throws -> CreateImageResponse
157157
{
158158
fatalError("Currently, this API is not supported. We welcome and encourage contributions to our open-source project. Please consider opening an issue or submitting a pull request to add support for this feature.")
159159
}

Sources/OpenAI/LocalModelService/LocalModelService.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,21 +125,21 @@ struct LocalModelService: OpenAIService {
125125

126126
public func createImages(
127127
parameters: CreateImageParameters)
128-
async throws -> OpenAIResponse<CreateImageResponse>
128+
async throws -> CreateImageResponse
129129
{
130130
fatalError("Currently, this API is not supported. We welcome and encourage contributions to our open-source project. Please consider opening an issue or submitting a pull request to add support for this feature.")
131131
}
132132

133133
public func editImage(
134134
parameters: CreateImageEditParameters)
135-
async throws -> OpenAIResponse<CreateImageResponse>
135+
async throws -> CreateImageResponse
136136
{
137137
fatalError("Currently, this API is not supported. We welcome and encourage contributions to our open-source project. Please consider opening an issue or submitting a pull request to add support for this feature.")
138138
}
139139

140140
public func createImageVariations(
141141
parameters: CreateImageVariationParameters)
142-
async throws -> OpenAIResponse<CreateImageResponse>
142+
async throws -> CreateImageResponse
143143
{
144144
fatalError("Currently, this API is not supported. We welcome and encourage contributions to our open-source project. Please consider opening an issue or submitting a pull request to add support for this feature.")
145145
}

Sources/OpenAI/Public/ResponseModels/ImageGen/CreateImageResponse.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public struct CreateImageResponse: Decodable {
1616
public let created: TimeInterval?
1717

1818
/// The list of generated images
19-
public let data: [ImageData]
19+
public let data: [ImageData]?
2020

2121
/// Token usage info (only for gpt-image-1)
2222
public let usage: Usage?

Sources/OpenAI/Public/Service/DefaultOpenAIService.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -239,26 +239,26 @@ struct DefaultOpenAIService: OpenAIService {
239239

240240
func createImages(
241241
parameters: CreateImageParameters)
242-
async throws -> OpenAIResponse<CreateImageResponse>
242+
async throws -> CreateImageResponse
243243
{
244244
let request = try OpenAIAPI.images(.generations).request(apiKey: apiKey, openAIEnvironment: openAIEnvironment, organizationID: organizationID, method: .post, params: parameters, extraHeaders: extraHeaders)
245-
return try await fetch(debugEnabled: debugEnabled, type: OpenAIResponse<CreateImageResponse>.self, with: request)
245+
return try await fetch(debugEnabled: debugEnabled, type: CreateImageResponse.self, with: request)
246246
}
247247

248248
func editImage(
249249
parameters: CreateImageEditParameters)
250-
async throws -> OpenAIResponse<CreateImageResponse>
250+
async throws -> CreateImageResponse
251251
{
252252
let request = try OpenAIAPI.images(.edits).multiPartRequest(apiKey: apiKey, openAIEnvironment: openAIEnvironment, organizationID: organizationID, method: .post, params: parameters)
253-
return try await fetch(debugEnabled: debugEnabled, type: OpenAIResponse<CreateImageResponse>.self, with: request)
253+
return try await fetch(debugEnabled: debugEnabled, type: CreateImageResponse.self, with: request)
254254
}
255255

256256
func createImageVariations(
257257
parameters: CreateImageVariationParameters)
258-
async throws -> OpenAIResponse<CreateImageResponse>
258+
async throws -> CreateImageResponse
259259
{
260260
let request = try OpenAIAPI.images(.variations).multiPartRequest(apiKey: apiKey, openAIEnvironment: openAIEnvironment, organizationID: organizationID, method: .post, params: parameters)
261-
return try await fetch(debugEnabled: debugEnabled, type: OpenAIResponse<CreateImageResponse>.self, with: request)
261+
return try await fetch(debugEnabled: debugEnabled, type: CreateImageResponse.self, with: request)
262262
}
263263

264264
// MARK: Models

Sources/OpenAI/Public/Service/OpenAIService.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ public protocol OpenAIService {
300300
/// For more information, refer to [OpenAI's Image API documentation](https://platform.openai.com/docs/api-reference/images/create).
301301
func createImages(
302302
parameters: CreateImageParameters)
303-
async throws -> OpenAIResponse<CreateImageResponse>
303+
async throws -> CreateImageResponse
304304

305305
/// - Parameter parameters: Settings for the image edit request.
306306
/// - Returns: An `OpenAIResponse` containing edited image results.
@@ -309,7 +309,7 @@ public protocol OpenAIService {
309309
/// For more information, refer to [OpenAI's Image API documentation](https://platform.openai.com/docs/api-reference/images/createEdit).
310310
func editImage(
311311
parameters: CreateImageEditParameters)
312-
async throws -> OpenAIResponse<CreateImageResponse>
312+
async throws -> CreateImageResponse
313313

314314
/// - Parameter parameters: Settings for the image variation request.
315315
/// - Returns: An `OpenAIResponse` containing image variation results.
@@ -318,7 +318,7 @@ public protocol OpenAIService {
318318
/// For more information, refer to [OpenAI's Image API documentation](https://platform.openai.com/docs/api-reference/images/createVariation).
319319
func createImageVariations(
320320
parameters: CreateImageVariationParameters)
321-
async throws -> OpenAIResponse<CreateImageResponse>
321+
async throws -> CreateImageResponse
322322

323323
// MARK: Models
324324

0 commit comments

Comments
 (0)