Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue 29387 remove savepublish ia actionlet image #29499

Merged
merged 53 commits into from
Aug 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
cf827da
Revert "fix: #28563 removing template ajax (#28572)"
jdotcms May 15, 2024
fb39637
Merge branch 'master' of github.com:dotCMS/core
jdotcms Jun 11, 2024
af6fed1
Merge branch 'master' of github.com:dotCMS/core
jdotcms Jun 14, 2024
96dd743
Merge branch 'master' of github.com:dotCMS/core
jdotcms Jun 18, 2024
fb71cf9
Merge branch 'master' of github.com:dotCMS/core
jdotcms Jun 24, 2024
ae1d5e1
Merge branches 'master' and 'master' of github.com:dotCMS/core
jdotcms Jun 25, 2024
b523af6
Merge branch 'master' of github.com:dotCMS/core
jdotcms Jun 27, 2024
95de159
Merge branch 'master' of github.com:dotCMS/core
jdotcms Jun 27, 2024
679b600
Merge branch 'master' of github.com:dotCMS/core
jdotcms Jun 28, 2024
4bb207b
Merge branch 'master' of github.com:dotCMS/core
jdotcms Jul 2, 2024
320b4b1
Merge branches 'master' and 'master' of github.com:dotCMS/core
jdotcms Jul 2, 2024
ed6a751
Merge branches 'master' and 'master' of github.com:dotCMS/core
jdotcms Jul 3, 2024
02a6e96
Merge branch 'master' of github.com:dotCMS/core
jdotcms Jul 4, 2024
5479786
Merge branch 'master' of github.com:dotCMS/core
jdotcms Jul 5, 2024
0762192
Merge branch 'master' of github.com:dotCMS/core
jdotcms Jul 9, 2024
2a61c7f
Merge branch 'master' of github.com:dotCMS/core
jdotcms Jul 11, 2024
0afad59
Merge branch 'master' of github.com:dotCMS/core
jdotcms Jul 17, 2024
9c510e7
Merge branch 'master' of github.com:dotCMS/core
jdotcms Jul 18, 2024
24a5827
Merge branch 'master' of github.com:dotCMS/core
jdotcms Jul 19, 2024
7468cd7
Merge branch 'master' of github.com:dotCMS/core
jdotcms Jul 22, 2024
0388022
Merge branch 'master' of github.com:dotCMS/core
jdotcms Jul 29, 2024
df5c56d
#29381 adding OpenAIAutoTagActionlet non parallel
jdotcms Jul 29, 2024
c36af68
#29381 adding OpenAIAutoTagActionlet non parallel
jdotcms Jul 29, 2024
b9d2a39
#29381 removing the async calls on ia actionlets
jdotcms Jul 29, 2024
4b89b81
#29381 minor changes
jdotcms Jul 29, 2024
c1f7717
#29381 removing the OpenAIThreadPool dependency in favor of the DotCo…
jdotcms Jul 29, 2024
9460ca9
#29387 more refactoring
jdotcms Jul 30, 2024
a0d98fa
#29387 refactor and test for tag api test
jdotcms Jul 30, 2024
2e8942e
#29387 refactor and test for tag api test
jdotcms Jul 30, 2024
914ccd9
#29387 refactor and test for tag api test
jdotcms Jul 30, 2024
895b706
#29387 refactor: now the apis are part of the APILocator
jdotcms Jul 31, 2024
f7e0646
#29381 fixing issues and merging with master
jdotcms Jul 31, 2024
2fd3fc0
#29381 fixing issues and merging with master
jdotcms Aug 1, 2024
30077d0
#29387 adding refactors and testing
jdotcms Aug 1, 2024
217628a
#29387 adding refactors and testing
jdotcms Aug 1, 2024
2c84cfe
#29387 adding refactors and testing
jdotcms Aug 1, 2024
e004478
#29387 adding sonarq and feedback
jdotcms Aug 5, 2024
5890041
#29387 merge master done
jdotcms Aug 7, 2024
5d2c0de
#29387 merge master done
jdotcms Aug 7, 2024
023751b
#29387 removing the save publish from the image generator
jdotcms Aug 7, 2024
70a3e12
#29387 merge master done
jdotcms Aug 8, 2024
5e47e78
#29387 some progress
jdotcms Aug 8, 2024
116a0e7
#29387 replacing the new of the apis
jdotcms Aug 9, 2024
683a0da
Merge branch 'master' of github.com:dotCMS/core into issue-29387-remo…
jdotcms Aug 9, 2024
3cd5fdd
#29387 adding test changes
jdotcms Aug 9, 2024
13af489
#29387 adding test changes
jdotcms Aug 9, 2024
3002a00
#29387 fixing issues on it test
jdotcms Aug 10, 2024
a7bbf82
Merge branch 'master' into issue-29387-remove-savepublish-ia-actionle…
jdotcms Aug 13, 2024
5c1eb07
Merge branch 'master' into issue-29387-remove-savepublish-ia-actionle…
jdotcms Aug 19, 2024
f1c074d
Merge branch 'master' into issue-29387-remove-savepublish-ia-actionle…
jdotcms Aug 19, 2024
1a41b63
#29387 adding feedback
jdotcms Aug 19, 2024
2bb5c96
Merge branch 'master' into issue-29387-remove-savepublish-ia-actionle…
dsilvam Aug 20, 2024
0e39662
Fixing user resolving at AI image service
victoralfaro-dotcms Aug 20, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.dotcms.ai.service;
package com.dotcms.ai.api;

import com.dotmarketing.util.json.JSONObject;

public interface OpenAIChatService {
public interface ChatAPI {

/**
* Returns a JSONObject with the results of the text generation given the provided prompt
Expand Down
6 changes: 6 additions & 0 deletions dotCMS/src/main/java/com/dotcms/ai/api/ChatAPIProvider.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.dotcms.ai.api;

public interface ChatAPIProvider {

ChatAPI getChatAPI(Object... initArguments);
}
24 changes: 24 additions & 0 deletions dotCMS/src/main/java/com/dotcms/ai/api/DotAIAPI.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,31 @@
*/
public interface DotAIAPI {

/**
* Returns the completions API
* @param initArguments
* @return
*/
CompletionsAPI getCompletionsAPI(Object... initArguments);

/**
* Returns the embeddings API
* @param initArguments
* @return
*/
EmbeddingsAPI getEmbeddingsAPI(Object... initArguments);

/**
* Returns the chat API
* @param initArguments
* @return
*/
ChatAPI getChatAPI(Object... initArguments);

/**
* Returns the image API
* @param initArguments
* @return
*/
ImageAPI getImageAPI(Object... initArguments);
}
120 changes: 109 additions & 11 deletions dotCMS/src/main/java/com/dotcms/ai/api/DotAIAPIFacadeImpl.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
package com.dotcms.ai.api;

import com.dotcms.ai.app.AppConfig;
import com.dotcms.rest.api.v1.temp.TempFileAPI;
import com.dotmarketing.beans.Host;
import com.dotmarketing.business.APILocator;
import com.dotmarketing.portlets.contentlet.business.HostAPI;
import com.dotmarketing.util.Logger;
import com.liferay.portal.model.User;

import java.util.Map;
import java.util.Objects;
Expand All @@ -16,14 +20,20 @@
*/
public class DotAIAPIFacadeImpl implements DotAIAPI {

private static final AtomicReference<String> currentApiProviderName = new AtomicReference<>("default");

private static final String DEFAULT = "default";
private static final AtomicReference<String> currentApiProviderName = new AtomicReference<>(DEFAULT);
private static final Map<String, CompletionsAPIProvider> completionsProviderMap = new ConcurrentHashMap<>();
private static final Map<String, EmbeddingsAPIProvider> embeddingsProviderMap = new ConcurrentHashMap<>();
private static final Map<String, ChatAPIProvider> chatProviderMap = new ConcurrentHashMap<>();
private static final Map<String, ImageAPIProvider> imageProviderMap = new ConcurrentHashMap<>();

static {
try {
completionsProviderMap.put("default", new DefaultCompletionsAPIProvider());
embeddingsProviderMap.put("default", new DefaultEmbeddingsAPIProvider());
completionsProviderMap.put(DEFAULT, new DefaultCompletionsAPIProvider());
embeddingsProviderMap.put(DEFAULT, new DefaultEmbeddingsAPIProvider());
chatProviderMap.put(DEFAULT, new DefaultChatAPIProvider());
imageProviderMap.put(DEFAULT, new DefaultImageAPIProvider());
} catch (Exception e) {
Logger.error(DotAIAPI.class, e.getMessage(), e);
}
Expand All @@ -35,6 +45,47 @@ private static <T> T unwrap(final Class<T> clazz, final Object... initArguments)
&& clazz.isInstance(initArguments[0]) ? clazz.cast(initArguments[0]) : null;
}

/**
* Default provider for the ChatAPI
*/
public static class DefaultChatAPIProvider implements ChatAPIProvider {

@Override
public ChatAPI getChatAPI(final Object... initArguments) {
if (Objects.nonNull(initArguments) && initArguments.length > 0 && initArguments[0] instanceof AppConfig) {
return new OpenAIChatAPIImpl((AppConfig) initArguments[0]);
}

throw new IllegalArgumentException("To create a ChatAPI you need to provide an AppConfig");
}
}

/**
* Default provider for the ImageAPI
*/
public static class DefaultImageAPIProvider implements ImageAPIProvider {

@Override
public ImageAPI getImageAPI(final Object... initArguments) {
if (Objects.nonNull(initArguments) && initArguments.length >= 4
&& initArguments[0] instanceof AppConfig
&& (Objects.isNull(initArguments[1]) || initArguments[1] instanceof User)
) {

final AppConfig config = (AppConfig) initArguments[0];
final User user = (User) initArguments[1];
final HostAPI hostApi = APILocator.getHostAPI();
final TempFileAPI tempFileApi = APILocator.getTempFileAPI();
return new OpenAIImageAPIImpl(config, user, hostApi, tempFileApi);
}

throw new IllegalArgumentException("To create an Image you need to provide an AppConfig");
}
}

/**
* Default provider for the CompletionsAPI
*/
private static class DefaultCompletionsAPIProvider implements CompletionsAPIProvider {

@Override
Expand All @@ -47,6 +98,9 @@ private AppConfig unwrap(final Object... initArguments) {
}
}

/**
* Default provider for the EmbeddingsAPI
*/
public static class DefaultEmbeddingsAPIProvider implements EmbeddingsAPIProvider {

@Override
Expand All @@ -72,41 +126,85 @@ public static final void setCurrentApiProviderName(final String apiName) {
* @param completionsAPI
*/
public static final void setDefaultCompletionsAPIProvider(final CompletionsAPIProvider completionsAPI) {
completionsProviderMap.put("default", completionsAPI);
completionsProviderMap.put(DEFAULT, completionsAPI);
}

/**
* Adds the default embeddings API Provider.
* Set the default embeddings API Provider.
* @param embeddingsAPI
*/
public static final void setDefaultEmbeddingsAPIProvider(final EmbeddingsAPIProvider embeddingsAPI) {
embeddingsProviderMap.put("default", embeddingsAPI);
embeddingsProviderMap.put(DEFAULT, embeddingsAPI);
}

/**
* Set the default image API Provider.
* @param imageAPIProvider
*/
public static final void setDefaultImageAPIProvider(final ImageAPIProvider imageAPIProvider) {
imageProviderMap.put(DEFAULT, imageAPIProvider);
}

/**
* Set the default chat API Provider.
* @param chatAPIProviderq
*/
public static final void setDefaultChatAPIProvider(final ChatAPIProvider chatAPIProvider) {
chatProviderMap.put(DEFAULT, chatAPIProvider);
}

/**
* Adds the default completions API provider.
* Adds completions API provider.
* @param completionsAPI
*/
public static final void addCompletionsAPIImplementation(final String apiName, final CompletionsAPIProvider completionsAPI) {
completionsProviderMap.put(apiName, completionsAPI);
}

/**
* Sets the default embeddings API provider.
* Adds default embeddings API provider.
* @param embeddingsAPI
*/
public static final void addDefaultEmbeddingsAPIImplementation(final String apiName, final EmbeddingsAPIProvider embeddingsAPI) {
public static final void addEmbeddingsAPIImplementation(final String apiName, final EmbeddingsAPIProvider embeddingsAPI) {
embeddingsProviderMap.put(apiName, embeddingsAPI);
}

/**
* Adds default chat API provider.
* @param chatAPI
*/
public static final void addChatAPIImplementation(final String apiName, final ChatAPIProvider chatAPI) {
chatProviderMap.put(apiName, chatAPI);
}

/**
* Adds default image API provider.
* @param imageAPI
*/
public static final void addImageAPIImplementation(final String apiName, final ImageAPIProvider imageAPI) {
imageProviderMap.put(apiName, imageAPI);
}

@Override
public CompletionsAPI getCompletionsAPI(Object... initArguments) {
public CompletionsAPI getCompletionsAPI(final Object... initArguments) {

return completionsProviderMap.get(currentApiProviderName.get()).getCompletionsAPI(initArguments);
}

@Override
public EmbeddingsAPI getEmbeddingsAPI(Object... initArguments) {
public EmbeddingsAPI getEmbeddingsAPI(final Object... initArguments) {
return embeddingsProviderMap.get(currentApiProviderName.get()).getEmbeddingsAPI(initArguments);
}

@Override
public ChatAPI getChatAPI(final Object... initArguments) {

return chatProviderMap.get(currentApiProviderName.get()).getChatAPI(initArguments);
}

@Override
public ImageAPI getImageAPI(final Object... initArguments) {

return imageProviderMap.get(currentApiProviderName.get()).getImageAPI(initArguments);
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package com.dotcms.ai.service;
package com.dotcms.ai.api;

import com.dotcms.ai.model.AIImageRequestDTO;
import com.dotmarketing.util.json.JSONObject;

/**
* Service to interact with the OpenAI Image API
*/
public interface OpenAIImageService {
public interface ImageAPI {

/**
* Sends a text prompt to the OpenAI API.
Expand Down
11 changes: 11 additions & 0 deletions dotCMS/src/main/java/com/dotcms/ai/api/ImageAPIProvider.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.dotcms.ai.api;


/**
* This class is in charge of providing the {@link ImageAPI}.
* @author jsanca
*/
public interface ImageAPIProvider {

ImageAPI getImageAPI(Object... initArguments);
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.dotcms.ai.service;
package com.dotcms.ai.api;

import com.dotcms.ai.AiKeys;
import com.dotcms.ai.app.AppConfig;
Expand All @@ -12,11 +12,11 @@
import java.util.List;
import java.util.Map;

public class OpenAIChatServiceImpl implements OpenAIChatService {
public class OpenAIChatAPIImpl implements ChatAPI {

private final AppConfig config;

public OpenAIChatServiceImpl(final AppConfig appConfig) {
public OpenAIChatAPIImpl(final AppConfig appConfig) {
this.config = appConfig;
}

Expand Down Expand Up @@ -47,7 +47,7 @@ public JSONObject sendTextPrompt(final String textPrompt) {
}

@VisibleForTesting
String doRequest(final String urlIn, final JSONObject json) {
public String doRequest(final String urlIn, final JSONObject json) {
return OpenAIRequest.doRequest(urlIn, HttpMethod.POST, config, json);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.dotcms.ai.service;
package com.dotcms.ai.api;

import com.dotcms.ai.AiKeys;
import com.dotcms.ai.app.AppConfig;
Expand Down Expand Up @@ -29,7 +29,7 @@
import java.text.SimpleDateFormat;
import java.util.Date;

public class OpenAIImageServiceImpl implements OpenAIImageService {
public class OpenAIImageAPIImpl implements ImageAPI {

private static StopWordsUtil stopWordsUtil = StopWordsUtil.get();

Expand All @@ -38,10 +38,10 @@ public class OpenAIImageServiceImpl implements OpenAIImageService {
private final HostAPI hostApi;
private final TempFileAPI tempFileApi;

public OpenAIImageServiceImpl(final AppConfig config,
final User user,
final HostAPI hostApi,
final TempFileAPI tempFileApi) {
public OpenAIImageAPIImpl(final AppConfig config,
final User user,
final HostAPI hostApi,
final TempFileAPI tempFileApi) {
this.config = config;
this.user = user;
this.hostApi = hostApi;
Expand Down Expand Up @@ -173,22 +173,22 @@ private String generateFileName(final String originalPrompt) {
}

@VisibleForTesting
String doRequest(final String urlIn, final JSONObject json) {
public String doRequest(final String urlIn, final JSONObject json) {
return OpenAIRequest.doRequest(urlIn, HttpMethod.POST, config, json);
}

@VisibleForTesting
User getUser() {
public User getUser() {
return APILocator.systemUser();
}

@VisibleForTesting
AIImageRequestDTO.Builder getDtoBuilder() {
public AIImageRequestDTO.Builder getDtoBuilder() {
return new AIImageRequestDTO.Builder();
}

public static void setStopWordsUtil(final StopWordsUtil stopWordsUtil) {
OpenAIImageServiceImpl.stopWordsUtil = stopWordsUtil;
OpenAIImageAPIImpl.stopWordsUtil = stopWordsUtil;
}

}
6 changes: 3 additions & 3 deletions dotCMS/src/main/java/com/dotcms/ai/rest/ImageResource.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
import com.dotcms.ai.app.AppConfig;
import com.dotcms.ai.app.ConfigService;
import com.dotcms.ai.model.AIImageRequestDTO;
import com.dotcms.ai.service.OpenAIImageService;
import com.dotcms.ai.service.OpenAIImageServiceImpl;
import com.dotcms.ai.api.ImageAPI;
import com.dotcms.ai.api.OpenAIImageAPIImpl;
import com.dotcms.rest.WebResource;
import com.dotmarketing.business.APILocator;
import com.dotmarketing.business.web.WebAPILocator;
Expand Down Expand Up @@ -113,7 +113,7 @@ public Response handleImageRequest(@Context final HttpServletRequest request,
.build();
}

final OpenAIImageService service = new OpenAIImageServiceImpl(
final ImageAPI service = APILocator.getDotAIAPI().getImageAPI(
config,
user,
APILocator.getHostAPI(),
Expand Down
Loading