-
Notifications
You must be signed in to change notification settings - Fork 376
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'MacPaw:main' into new-content-format
- Loading branch information
Showing
20 changed files
with
605 additions
and
20 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
## Contribution Guidelines | ||
Make your Pull Requests clear and obvious to anyone viewing them. | ||
Set `main` as your target branch. | ||
|
||
#### Use [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) principles in naming PRs and branches: | ||
|
||
- `Feat: ...` for new features and new functionality implementations. | ||
- `Bug: ...` for bug fixes. | ||
- `Fix: ...` for minor issues fixing, like typos or inaccuracies in code. | ||
- `Chore: ...` for boring stuff like code polishing, refactoring, deprecation fixing etc. | ||
|
||
PR naming example: `Feat: Add Threads API handling` or `Bug: Fix message result duplication` | ||
|
||
Branch naming example: `feat/add-threads-API-handling` or `bug/fix-message-result-duplication` | ||
|
||
#### Write description to pull requests in following format: | ||
- What | ||
|
||
... | ||
- Why | ||
|
||
... | ||
- Affected Areas | ||
|
||
... | ||
- More Info | ||
|
||
... | ||
|
||
We'll appreciate you including tests to your code if it is needed and possible. ❤️ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
// | ||
// ImageStore.swift | ||
// DemoChat | ||
// | ||
// Created by Aled Samuel on 24/04/2023. | ||
// | ||
|
||
import Foundation | ||
import OpenAI | ||
|
||
public final class ImageStore: ObservableObject { | ||
public var openAIClient: OpenAIProtocol | ||
|
||
@Published var images: [ImagesResult.URLResult] = [] | ||
|
||
public init( | ||
openAIClient: OpenAIProtocol | ||
) { | ||
self.openAIClient = openAIClient | ||
} | ||
|
||
@MainActor | ||
func images(query: ImagesQuery) async { | ||
images.removeAll() | ||
do { | ||
let response = try await openAIClient.images(query: query) | ||
images = response.data | ||
} catch { | ||
// TODO: Better error handling | ||
print(error.localizedDescription) | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
// | ||
// ImageCreationView.swift | ||
// DemoChat | ||
// | ||
// Created by Aled Samuel on 24/04/2023. | ||
// | ||
|
||
import SwiftUI | ||
import OpenAI | ||
|
||
public struct ImageCreationView: View { | ||
@ObservedObject var store: ImageStore | ||
|
||
@State private var prompt: String = "" | ||
@State private var n: Int = 1 | ||
@State private var size: String | ||
|
||
private var sizes = ["256x256", "512x512", "1024x1024"] | ||
|
||
public init(store: ImageStore) { | ||
self.store = store | ||
size = sizes[0] | ||
} | ||
|
||
public var body: some View { | ||
List { | ||
Section { | ||
HStack { | ||
Text("Prompt") | ||
Spacer() | ||
TextEditor(text: $prompt) | ||
.multilineTextAlignment(.trailing) | ||
} | ||
HStack { | ||
Stepper("Amount: \(n)", value: $n, in: 1...10) | ||
} | ||
HStack { | ||
Picker("Size", selection: $size) { | ||
ForEach(sizes, id: \.self) { | ||
Text($0) | ||
} | ||
} | ||
} | ||
} | ||
Section { | ||
HStack { | ||
Button("Create Image" + (n == 1 ? "" : "s")) { | ||
Task { | ||
let query = ImagesQuery(prompt: prompt, n: n, size: size) | ||
await store.images(query: query) | ||
} | ||
} | ||
.foregroundColor(.accentColor) | ||
Spacer() | ||
} | ||
} | ||
if !$store.images.isEmpty { | ||
Section("Images") { | ||
ForEach($store.images, id: \.self) { image in | ||
let urlString = image.wrappedValue.url ?? "" | ||
if let imageURL = URL(string: urlString), UIApplication.shared.canOpenURL(imageURL) { | ||
LinkPreview(previewURL: imageURL) | ||
.aspectRatio(contentMode: .fit) | ||
} else { | ||
Text(urlString) | ||
.foregroundStyle(.secondary) | ||
} | ||
} | ||
} | ||
} | ||
} | ||
.listStyle(.insetGrouped) | ||
.navigationTitle("Create Image") | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
// | ||
// ImageView.swift | ||
// DemoChat | ||
// | ||
// Created by Aled Samuel on 24/04/2023. | ||
// | ||
|
||
import SwiftUI | ||
|
||
public struct ImageView: View { | ||
@ObservedObject var store: ImageStore | ||
|
||
public init(store: ImageStore) { | ||
self.store = store | ||
} | ||
|
||
public var body: some View { | ||
NavigationStack { | ||
List { | ||
NavigationLink("Create Image", destination: ImageCreationView(store: store)) | ||
NavigationLink("Create Image Edit", destination: ImageEditView(store: store)) | ||
.disabled(true) | ||
NavigationLink("Create Image Variation", destination: ImageVariationView(store: store)) | ||
.disabled(true) | ||
|
||
} | ||
.listStyle(.insetGrouped) | ||
.navigationTitle("Image") | ||
} | ||
} | ||
} | ||
|
||
public struct ImageEditView: View { | ||
@ObservedObject var store: ImageStore | ||
|
||
public init(store: ImageStore) { | ||
self.store = store | ||
} | ||
|
||
public var body: some View { | ||
List { | ||
|
||
} | ||
.listStyle(.insetGrouped) | ||
.navigationTitle("Create Image Edit") | ||
} | ||
} | ||
|
||
public struct ImageVariationView: View { | ||
@ObservedObject var store: ImageStore | ||
|
||
public init(store: ImageStore) { | ||
self.store = store | ||
} | ||
|
||
public var body: some View { | ||
List { | ||
|
||
} | ||
.listStyle(.insetGrouped) | ||
.navigationTitle("Create Image Variation") | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
// | ||
// LinkPreview.swift | ||
// DemoChat | ||
// | ||
// Created by Aled Samuel on 25/04/2023. | ||
// | ||
|
||
import SwiftUI | ||
import LinkPresentation | ||
|
||
struct LinkPreview: UIViewRepresentable { | ||
typealias UIViewType = LPLinkView | ||
|
||
var previewURL: URL | ||
|
||
func makeUIView(context: Context) -> LPLinkView { | ||
LPLinkView(url: previewURL) | ||
} | ||
|
||
func updateUIView(_ uiView: UIViewType, context: Context) { | ||
LPMetadataProvider().startFetchingMetadata(for: previewURL) { metadata, error in | ||
if let error = error { | ||
print(error.localizedDescription) | ||
return | ||
} | ||
guard let metadata = metadata else { | ||
print("Metadata missing for \(previewURL.absoluteString)") | ||
return | ||
} | ||
uiView.metadata = metadata | ||
} | ||
} | ||
} |
Oops, something went wrong.