From 534a4f830012cba96b07eb56bafff9f99e6221e5 Mon Sep 17 00:00:00 2001 From: namankhurpia Date: Sun, 26 Nov 2023 00:34:04 -0500 Subject: [PATCH] concurrent API calls for Moderation API --- .DS_Store | Bin 6148 -> 6148 bytes src/.DS_Store | Bin 6148 -> 6148 bytes src/main/.DS_Store | Bin 6148 -> 6148 bytes src/main/java/.DS_Store | Bin 6148 -> 6148 bytes src/main/java/io/.DS_Store | Bin 6148 -> 6148 bytes src/main/java/io/github/.DS_Store | Bin 6148 -> 6148 bytes .../java/io/github/namankhurpia/.DS_Store | Bin 0 -> 6148 bytes .../namankhurpia/Interfaces/EndPoints.java | 2 +- .../Interfaces/MultipleCallInterface.java | 2 +- .../java/io/github/namankhurpia/Main.java | 30 ++++++- .../MultipleCalls/ConcurrentCalls.java | 48 ---------- .../Pojo/MyModels/ModerationRequestList.java | 79 ++++++++++++++++- .../io/github/namankhurpia/Service/.DS_Store | Bin 0 -> 6148 bytes .../MultipleCalls/ConcurrentCalls.java | 82 ++++++++++++++++++ 14 files changed, 189 insertions(+), 54 deletions(-) create mode 100644 src/main/java/io/github/namankhurpia/.DS_Store delete mode 100644 src/main/java/io/github/namankhurpia/MultipleCalls/ConcurrentCalls.java create mode 100644 src/main/java/io/github/namankhurpia/Service/.DS_Store create mode 100644 src/main/java/io/github/namankhurpia/Service/MultipleCalls/ConcurrentCalls.java diff --git a/.DS_Store b/.DS_Store index 7253de7104adba5b9998a4fae9004d4ac251b377..d1e7801422e20a60c828fcb8625c8d39316262f4 100644 GIT binary patch delta 51 zcmZoMXffCj#lpt0k%581XmSFJBC9-@)y6W3-Ne9LN5R;1vOH@MYcEK2^EB2xApkJw B3yuH) delta 47 xcmZoMXffCj#lprY%fP^(H#vbtk+mDlYGau+S&z+qay+XM>rar#=4q^XLI4UH3x5Cr diff --git a/src/.DS_Store b/src/.DS_Store index d373455b30001fe0516877fbe5d4b22ef4827cf9..f5f860c5791f61294690fd236c8eed22153db5e2 100644 GIT binary patch delta 20 bcmZoMXffDufQ8+}z+6Yc*mU!87F%HeL`Vh! delta 16 XcmZoMXffDufMxOpR?p3xtiOc-IIad< diff --git a/src/main/.DS_Store b/src/main/.DS_Store index df2077fa787a9b198a370c07da936879892ec214..ea5c3f3c1e635f2c0d3402a7dd00aecd671f3833 100644 GIT binary patch delta 24 fcmZoMXffDufQ8+}z+6Yc*mUx1R)@{(tbc_7VY~;# delta 16 XcmZoMXffDufMxO%R`<>9tbc_7IX(t% diff --git a/src/main/java/.DS_Store b/src/main/java/.DS_Store index e81965f6a9bfb701a4962fc5ecfe554a15463811..d40d3438806d86d88b415c1fb02ca2f63dd075f9 100644 GIT binary patch delta 20 bcmZoMXffEZgNfb5z+6Yc*mU!LCRb4aL!brs delta 20 bcmZoMXffEZgNfbL&{Rjk*lhEDCRb4aL#YM$ diff --git a/src/main/java/io/.DS_Store b/src/main/java/io/.DS_Store index d3bfe44a637f2cb70f0489fbc1a4f991d85b4182..ad8d828c4574c9d3b7cd7f9a5693c443b81f97ea 100644 GIT binary patch delta 20 bcmZoMXffDuf{ES4z+6Yc*mU!GCR0%WM6d=2 delta 20 bcmZoMXffDuf{ESK&{Rjk*lhE8CR0%WM7ahC diff --git a/src/main/java/io/github/.DS_Store b/src/main/java/io/github/.DS_Store index 656c980a4ddbbe356fce30de379e829d3b7d94e4..be7a6a7ee31115bfb9855828da062efb8e40eb25 100644 GIT binary patch delta 20 bcmZoMXffFEfQjA2z+6Yc*mU!ACRtGcMo0!9 delta 20 bcmZoMXffFEfQjAI&{Rjk*lhE2CRtGcMo|VJ diff --git a/src/main/java/io/github/namankhurpia/.DS_Store b/src/main/java/io/github/namankhurpia/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..cb3a004f1466f82dc3b0a77e09ee89f63dfd21c3 GIT binary patch literal 6148 zcmeHKO>fgc5S>j7v0EYKK&4)gEcF_dKntkq#SQ792L!?h4uFE)7;rJ(D0UL0D3Z_c zW4Q85`d>J~o88U9E+BD1DB6)`-+s(nXI|u84-tvMYY|$Czh)rlpZz)pTqRtVw8XS)vAuCwsY-z$L+Y=?(6WqT!dv*&Wb@aeaWL| zQfBeGAH~npWHIXAd?@oWO7mo@2?k<;y{Rch& z;NH=y=P!@$_Iv)}!Tr_Bb9eS`A3q&^$Uf%sGcte)oW#m*7+eGE*3e)cPV-FWoco%! zj<&e@3Yh=g-QN6EZH86>tH56>z~_SxXABHh8r9K(MwI|S2h+;XS0DdCpC^EU!Ac`$ zU_w)Ynkr0*Ax!NcG#%@KiLW$jItle;>|>rROobv$=^=a-P9o4~TdROopsqk$54(K- zpZ>o7uaoS^Dqt1ZCd;H75JwL`~);emdgMD literal 0 HcmV?d00001 diff --git a/src/main/java/io/github/namankhurpia/Interfaces/EndPoints.java b/src/main/java/io/github/namankhurpia/Interfaces/EndPoints.java index f77ecc3..d28b00a 100644 --- a/src/main/java/io/github/namankhurpia/Interfaces/EndPoints.java +++ b/src/main/java/io/github/namankhurpia/Interfaces/EndPoints.java @@ -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 = ""; } diff --git a/src/main/java/io/github/namankhurpia/Interfaces/MultipleCallInterface.java b/src/main/java/io/github/namankhurpia/Interfaces/MultipleCallInterface.java index 58bc523..6b8bd0d 100644 --- a/src/main/java/io/github/namankhurpia/Interfaces/MultipleCallInterface.java +++ b/src/main/java/io/github/namankhurpia/Interfaces/MultipleCallInterface.java @@ -5,6 +5,6 @@ public interface MultipleCallInterface { - ModerationResponseList CallMultipleModerationAPI(ModerationRequestList requestList); + ModerationResponseList CallMultipleModerationAPI(String key,ModerationRequestList requestList); } diff --git a/src/main/java/io/github/namankhurpia/Main.java b/src/main/java/io/github/namankhurpia/Main.java index a30903b..1c8a354 100644 --- a/src/main/java/io/github/namankhurpia/Main.java +++ b/src/main/java/io/github/namankhurpia/Main.java @@ -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; @@ -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()); + 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); + + } } \ No newline at end of file diff --git a/src/main/java/io/github/namankhurpia/MultipleCalls/ConcurrentCalls.java b/src/main/java/io/github/namankhurpia/MultipleCalls/ConcurrentCalls.java deleted file mode 100644 index 0d7941d..0000000 --- a/src/main/java/io/github/namankhurpia/MultipleCalls/ConcurrentCalls.java +++ /dev/null @@ -1,48 +0,0 @@ -package io.github.namankhurpia.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.util.ArrayList; -import java.util.List; -import java.util.concurrent.CompletableFuture; - -import static io.github.namankhurpia.Interfaces.EndPoints.OPENAI_KEY; - -public class ConcurrentCalls implements MultipleCallInterface { - - ModerationResponseList responseList; - - @Override - public ModerationResponseList CallMultipleModerationAPI(ModerationRequestList requestList) { - - int n = requestList.getRequestList().size(); - if(n<=0) - { - throw new InvalidSizeException("Moderation Request List must have atleast 1 instance",new Throwable()); - } - - List> futures = new ArrayList<>(); - AsyncModerationAPIServiceImpl AsyncObj = new AsyncModerationAPIServiceImpl(new AsyncDAOImpl()); - - for(int i=0;i resultFuture = CompletableFuture.supplyAsync(() ->{ - return AsyncObj.getASyncmoderation(OPENAI_KEY,requestList.getRequestList().get(i)); - - }); - futures.add(resultFuture); - } - - - - return null; - - } -} diff --git a/src/main/java/io/github/namankhurpia/Pojo/MyModels/ModerationRequestList.java b/src/main/java/io/github/namankhurpia/Pojo/MyModels/ModerationRequestList.java index c73c93c..830a9ac 100644 --- a/src/main/java/io/github/namankhurpia/Pojo/MyModels/ModerationRequestList.java +++ b/src/main/java/io/github/namankhurpia/Pojo/MyModels/ModerationRequestList.java @@ -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 requestList; - ModerationRequestList() + public ModerationRequestList(ArrayList 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(); } + + + + + + + + } diff --git a/src/main/java/io/github/namankhurpia/Service/.DS_Store b/src/main/java/io/github/namankhurpia/Service/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..1ee1d284201f78af17c2be97c9286769fedf7eaf GIT binary patch literal 6148 zcmeHKL2DC16n@jDc4H~zpwLTU&}*pCR;75^ruC46Ag<^^CGKVyUER)v>?T1%V9)K3 z@#-(}@96htCeRoaMG&#`!kh2y%)GZV-!kuIh)8tD>20DG5d~1j##J=m5gunf>qmQXakvY{9^bKJ3 z=#++3&>p>`m?jkW3Oz^)ogf}3lOyQf7bCEUb}wXxKa2eFo5+U7J&mfk8kgO8^n#zBYF#7? zJ5HYE*|gufcC1wu=PDZ+hdj+N<>m8SrFz=cW0jW1H?jjkGidf(JG0qA=YCu6-#whS z}F|A0v$h=0j9WLM;#!tAJL?cyb^#-#R5f+{v zF9!qey9ZmBW4nHro&nFmZ!p05K|&crhqXnMI?$La0I-2>Be1#rvyXHbI;<^X1R|^} z(7FnD#SqpV{nE_~9o81DI|+CB5bn*w-B5&iJK{?-okVESx1Isdz%m2t_OZqF|KX4C z|I1GP$ur;?_^%icjg#o4i!Hg@y0SU0wG#Ro%EI$%i^c_wE62v*QoI8-f-%VkFmza3 SL=VLO5im6P#xw9&8TbkUl8VUy literal 0 HcmV?d00001 diff --git a/src/main/java/io/github/namankhurpia/Service/MultipleCalls/ConcurrentCalls.java b/src/main/java/io/github/namankhurpia/Service/MultipleCalls/ConcurrentCalls.java new file mode 100644 index 0000000..93375bc --- /dev/null +++ b/src/main/java/io/github/namankhurpia/Service/MultipleCalls/ConcurrentCalls.java @@ -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> futures = new ArrayList<>(); + AsyncModerationAPIServiceImpl AsyncObj = new AsyncModerationAPIServiceImpl(new AsyncDAOImpl()); + + for(int i=0;i 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 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 results = new ArrayList<>(); + for (CompletableFuture 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; + } +}