Skip to content

Commit 2b5461e

Browse files
committed
switch between content generation remotes based on ai source
1 parent 67fec27 commit 2b5461e

File tree

6 files changed

+49
-8
lines changed

6 files changed

+49
-8
lines changed

Modules/Sources/Yosemite/Actions/ProductAction.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
import Foundation
22
import Networking
33

4+
public enum AISource {
5+
case jetpack
6+
case merchant
7+
}
8+
49
public enum ItemIdentifierSearchResult {
510
case product(Product)
611
case variation(ProductVariation)
@@ -130,6 +135,7 @@ public enum ProductAction: Action {
130135
///
131136
case identifyLanguage(siteID: Int64,
132137
string: String,
138+
aiSource: AISource,
133139
feature: GenerativeContentRemoteFeature,
134140
completion: (Result<String, Error>) -> Void)
135141

Modules/Sources/Yosemite/Stores/ProductStore.swift

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,11 @@ public class ProductStore: Store {
122122
replaceProductLocally(product: product, onCompletion: onCompletion)
123123
case let .checkIfStoreHasProducts(siteID, status, onCompletion):
124124
checkIfStoreHasProducts(siteID: siteID, status: status, onCompletion: onCompletion)
125-
case let .identifyLanguage(siteID, string, feature, completion):
125+
case let .identifyLanguage(siteID, string, aiSource, feature, completion):
126126
identifyLanguage(siteID: siteID,
127-
string: string, feature: feature,
127+
string: string,
128+
aisource: aiSource,
129+
feature: feature,
128130
completion: completion)
129131
case let .generateProductDescription(siteID, name, features, language, completion):
130132
generateProductDescription(siteID: siteID, name: name, features: features, language: language, completion: completion)
@@ -586,15 +588,28 @@ private extension ProductStore {
586588

587589
func identifyLanguage(siteID: Int64,
588590
string: String,
591+
aisource: AISource,
589592
feature: GenerativeContentRemoteFeature,
590593
completion: @escaping (Result<String, Error>) -> Void) {
591594
Task { @MainActor in
592-
let result = await Result {
593-
try await generativeContentRemote.identifyLanguage(siteID: siteID,
594-
string: string,
595-
feature: feature)
595+
switch aisource {
596+
case .jetpack:
597+
let result = await Result {
598+
try await generativeContentRemote.identifyLanguage(siteID: siteID,
599+
string: string,
600+
feature: feature)
601+
}
602+
completion(result)
603+
case .merchant:
604+
let result = await Result {
605+
// Temporary. This will come from the KeyChain rather than the environment
606+
let key = ProcessInfo.processInfo.environment["openai-hack-key"] ?? "api key not found"
607+
return try await MerchantGenerativeContentRemote(apiKey: key).identifyLanguage(siteID: siteID,
608+
string: string,
609+
feature: feature)
610+
}
611+
completion(result)
596612
}
597-
completion(result)
598613
}
599614
}
600615

WooCommerce/Classes/ViewRelated/Products/AI/ProductDescriptionGenerationViewModel.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ final class ProductDescriptionGenerationViewModel: ObservableObject {
4949
/// Language used in product identified by AI
5050
///
5151
private var languageIdentifiedUsingAI: String?
52+
53+
private var aiSource: AISource {
54+
ServiceLocator.featureFlagService.isFeatureFlagEnabled(.allowMerchantAIAPIKey) ? .merchant : .jetpack
55+
}
5256

5357
init(siteID: Int64,
5458
name: String,
@@ -139,6 +143,7 @@ private extension ProductDescriptionGenerationViewModel {
139143
let language = try await withCheckedThrowingContinuation { continuation in
140144
stores.dispatch(ProductAction.identifyLanguage(siteID: siteID,
141145
string: name + " " + features,
146+
aiSource: aiSource,
142147
feature: .productDescription,
143148
completion: { result in
144149
continuation.resume(with: result)

WooCommerce/Classes/ViewRelated/Products/AI/ProductSharingMessageGenerationViewModel.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ final class ProductSharingMessageGenerationViewModel: ObservableObject {
5151
/// Language used in product identified by AI
5252
///
5353
private var languageIdentifiedUsingAI: String?
54+
55+
private var aiSource: AISource {
56+
ServiceLocator.featureFlagService.isFeatureFlagEnabled(.allowMerchantAIAPIKey) ? .merchant : .jetpack
57+
}
5458

5559
init(siteID: Int64,
5660
url: String,
@@ -152,6 +156,7 @@ private extension ProductSharingMessageGenerationViewModel {
152156
let language = try await withCheckedThrowingContinuation { continuation in
153157
stores.dispatch(ProductAction.identifyLanguage(siteID: siteID,
154158
string: productName + " " + productDescription,
159+
aiSource: aiSource,
155160
feature: .productSharing,
156161
completion: { result in
157162
continuation.resume(with: result)

WooCommerce/Classes/ViewRelated/Products/Add Product/AddProductWithAI/Preview/ProductDetailPreviewViewModel.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,10 @@ final class ProductDetailPreviewViewModel: ObservableObject {
153153
return productImageUploader.actionHandler(key: key, originalStatuses: [])
154154
}()
155155

156+
private var aiSource: AISource {
157+
ServiceLocator.featureFlagService.isFeatureFlagEnabled(.allowMerchantAIAPIKey) ? .merchant : .jetpack
158+
}
159+
156160
init(siteID: Int64,
157161
productFeatures: String,
158162
imageState: ImageState,
@@ -529,6 +533,7 @@ private extension ProductDetailPreviewViewModel {
529533
let language = try await withCheckedThrowingContinuation { continuation in
530534
stores.dispatch(ProductAction.identifyLanguage(siteID: siteID,
531535
string: productInfo,
536+
aiSource: aiSource,
532537
feature: .productCreation,
533538
completion: { result in
534539
continuation.resume(with: result)

WooCommerce/Classes/ViewRelated/Products/Add Product/AddProductWithAI/ProductCreationAIEligibilityChecker.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ final class ProductCreationAIEligibilityChecker: ProductCreationAIEligibilityChe
2020
return false
2121
}
2222

23-
return site.isWordPressComStore || site.isAIAssistantFeatureActive
23+
if ServiceLocator.featureFlagService.isFeatureFlagEnabled(.allowMerchantAIAPIKey) {
24+
// Temporary: Always allow for AI usage if the flag is enabled, bypassing eligibility criteria
25+
return true
26+
} else {
27+
return site.isWordPressComStore || site.isAIAssistantFeatureActive
28+
}
2429
}
2530
}

0 commit comments

Comments
 (0)