Skip to content

Commit

Permalink
concurrent API calls for Moderation API
Browse files Browse the repository at this point in the history
  • Loading branch information
namankhurpia committed Nov 26, 2023
1 parent 15f35a4 commit 534a4f8
Show file tree
Hide file tree
Showing 14 changed files with 189 additions and 54 deletions.
Binary file modified .DS_Store
Binary file not shown.
Binary file modified src/.DS_Store
Binary file not shown.
Binary file modified src/main/.DS_Store
Binary file not shown.
Binary file modified src/main/java/.DS_Store
Binary file not shown.
Binary file modified src/main/java/io/.DS_Store
Binary file not shown.
Binary file modified src/main/java/io/github/.DS_Store
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
public interface EndPoints {

static final String BASE_URL = "https://api.openai.com/";
static final String OPENAI_KEY = "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";
static final String OPENAI_KEY = "";
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@

public interface MultipleCallInterface {

ModerationResponseList CallMultipleModerationAPI(ModerationRequestList requestList);
ModerationResponseList CallMultipleModerationAPI(String key,ModerationRequestList requestList);

}
30 changes: 28 additions & 2 deletions src/main/java/io/github/namankhurpia/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,14 @@
import io.github.namankhurpia.DAO.DAOImpl;
import io.github.namankhurpia.Pojo.Moderations.ModerationAPIRequest;
import io.github.namankhurpia.Pojo.Moderations.ModerationAPIResponse;
import io.github.namankhurpia.Pojo.MyModels.ModerationRequestList;
import io.github.namankhurpia.Pojo.MyModels.ModerationResponseList;
import io.github.namankhurpia.Service.AsyncModerationAPIServiceImpl;
import io.github.namankhurpia.Service.ModerationAPIServiceImpl;
import io.github.namankhurpia.Service.MultipleCalls.ConcurrentCalls;

import java.io.IOException;
import java.util.ArrayList;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

Expand All @@ -26,10 +30,32 @@ public static void main(String[] args) throws IOException, ExecutionException, I
request.setInput("kill me now");
request.setModel("text-moderation-latest");

ModerationAPIRequest request2 = new ModerationAPIRequest();
request2.setInput("hurray me now");
request2.setModel("text-moderation-latest");

ModerationAPIRequest request3 = new ModerationAPIRequest();
request3.setInput("SEX me now");
request3.setModel("text-moderation-latest");

ModerationAPIRequest request4 = new ModerationAPIRequest();
request4.setInput("KILL me now");
request4.setModel("text-moderation-latest");

ModerationRequestList requestList = new ModerationRequestList(new ArrayList<ModerationAPIRequest>());
requestList.add(request);
requestList.add(request2);
requestList.add(request3);
requestList.add(request4);

AsyncModerationAPIServiceImpl obj2 = new AsyncModerationAPIServiceImpl(new AsyncDAOImpl());
ModerationAPIResponse res = obj2.getASyncmoderation(OPENAI_KEY,request);
System.out.println(res);

//ModerationAPIResponse res = obj2.getASyncmoderation(OPENAI_KEY,request);

ConcurrentCalls concurrentCalls = new ConcurrentCalls();
concurrentCalls.CallMultipleModerationAPI(OPENAI_KEY,requestList);



}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,90 @@
import lombok.Data;

import java.util.ArrayList;
import java.util.Collection;

/**
* contains all functionality of an arraylist
*/
@Data
public class ModerationRequestList {

//Min Size = 1;
/**
* Min Size = 1;
*/

ArrayList<ModerationAPIRequest> requestList;

ModerationRequestList()
public ModerationRequestList(ArrayList<ModerationAPIRequest> requestList)
{
this.requestList = requestList;
}

public void add(ModerationAPIRequest obj)
{
requestList.add(obj);
}

public void remove(int index)
{
requestList.remove(index);
}

public void remove(ModerationAPIRequest obj)
{
requestList.remove(obj);
}

public int size()
{
return requestList.size();
}

public void add(int index, ModerationAPIRequest element)
{
requestList.add(index, element);
}

public void addAll(Collection collection)
{
requestList.addAll(collection);
}

public void addAll(int index,Collection collection)
{
requestList.addAll(index,collection);
}

public void clear()
{
requestList.clear();
}

public boolean contains(ModerationAPIRequest request)
{
return requestList.contains(request);
}

public ModerationAPIRequest get(int index)
{
return requestList.get(index);
}

public int indexOf(ModerationAPIRequest obj)
{
return requestList.indexOf(obj);
}

public boolean isEmpty()
{
return requestList.isEmpty();
}








}
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package io.github.namankhurpia.Service.MultipleCalls;

import io.github.namankhurpia.DAO.AsyncDAOImpl;
import io.github.namankhurpia.Exception.InvalidSizeException;
import io.github.namankhurpia.Interfaces.MultipleCallInterface;
import io.github.namankhurpia.Pojo.Moderations.ModerationAPIRequest;
import io.github.namankhurpia.Pojo.Moderations.ModerationAPIResponse;
import io.github.namankhurpia.Pojo.MyModels.ModerationRequestList;
import io.github.namankhurpia.Pojo.MyModels.ModerationResponseList;
import io.github.namankhurpia.Service.AsyncModerationAPIServiceImpl;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

import static io.github.namankhurpia.Interfaces.EndPoints.OPENAI_KEY;

public class ConcurrentCalls implements MultipleCallInterface {

ModerationResponseList responseList;


@Override
public ModerationResponseList CallMultipleModerationAPI(String key, ModerationRequestList requestList) {
int n = requestList.getRequestList().size();
if(n<=0)
{
throw new InvalidSizeException("Moderation Request List must have atleast 1 instance",new Throwable());
}

List<CompletableFuture<ModerationAPIResponse>> futures = new ArrayList<>();
AsyncModerationAPIServiceImpl AsyncObj = new AsyncModerationAPIServiceImpl(new AsyncDAOImpl());

for(int i=0;i<n;i++)
{
int index = i;
CompletableFuture<ModerationAPIResponse> resultFuture = CompletableFuture.supplyAsync(() ->{
try {
return AsyncObj.getASyncmoderation(OPENAI_KEY,requestList.getRequestList().get(index));
} catch (IOException e) {
throw new RuntimeException(e);
} catch (ExecutionException e) {
throw new RuntimeException(e);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}



});

futures.add(resultFuture);
}

CompletableFuture<Void> allOf = CompletableFuture.allOf(
futures.toArray(new CompletableFuture[0]));



try {
allOf.get(); // Wait for all CompletableFuture instances to complete
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}

// Process the results
List<ModerationAPIResponse> results = new ArrayList<>();
for (CompletableFuture<ModerationAPIResponse> future : futures) {
try {
results.add(future.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}

// Handle the combined result or individual results as needed
System.out.println("Combined Result: " + results);
return null;
}
}

0 comments on commit 534a4f8

Please sign in to comment.