From eeaf9c298241fa4290232cb6c761dfa868c9af8e Mon Sep 17 00:00:00 2001 From: Toshiaki Takeuchi Date: Sat, 13 Apr 2024 10:24:52 -0400 Subject: [PATCH 1/8] Updated supported models --- openAIChat.m | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/openAIChat.m b/openAIChat.m index aced1cb..c76f61d 100644 --- a/openAIChat.m +++ b/openAIChat.m @@ -114,10 +114,10 @@ arguments systemPrompt {llms.utils.mustBeTextOrEmpty} = [] nvp.Tools (1,:) {mustBeA(nvp.Tools, "openAIFunction")} = openAIFunction.empty - nvp.ModelName (1,1) {mustBeMember(nvp.ModelName,["gpt-4", "gpt-4-0613", "gpt-4-32k", ... - "gpt-3.5-turbo", "gpt-3.5-turbo-16k",... - "gpt-4-1106-preview","gpt-3.5-turbo-1106", ... - "gpt-4-vision-preview", "gpt-4-turbo-preview"])} = "gpt-3.5-turbo" + nvp.ModelName (1,1) {mustBeMember(nvp.ModelName,["gpt-4-turbo", ... + "gpt-4-turbo-2024-04-09","gpt-4","gpt-4-32k", ... + "gpt-3.5-turbo","gpt-3.5-turbo-0125", ... + "gpt-3.5-turbo-1106"])} = "gpt-3.5-turbo" nvp.Temperature {mustBeValidTemperature} = 1 nvp.TopProbabilityMass {mustBeValidTopP} = 1 nvp.StopSequences {mustBeValidStop} = {} From 9fe8a068aad723e09e7a82bb4deb3271d07502ee Mon Sep 17 00:00:00 2001 From: Toshiaki Takeuchi Date: Sat, 13 Apr 2024 10:29:05 -0400 Subject: [PATCH 2/8] Removed "gpt-4-32k" model --- openAIChat.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openAIChat.m b/openAIChat.m index c76f61d..cd02af9 100644 --- a/openAIChat.m +++ b/openAIChat.m @@ -115,7 +115,7 @@ systemPrompt {llms.utils.mustBeTextOrEmpty} = [] nvp.Tools (1,:) {mustBeA(nvp.Tools, "openAIFunction")} = openAIFunction.empty nvp.ModelName (1,1) {mustBeMember(nvp.ModelName,["gpt-4-turbo", ... - "gpt-4-turbo-2024-04-09","gpt-4","gpt-4-32k", ... + "gpt-4-turbo-2024-04-09", ... "gpt-3.5-turbo","gpt-3.5-turbo-0125", ... "gpt-3.5-turbo-1106"])} = "gpt-3.5-turbo" nvp.Temperature {mustBeValidTemperature} = 1 From 89e20a25309bb34ac68d505a6158f91222b790fa Mon Sep 17 00:00:00 2001 From: Toshiaki Takeuchi Date: Sat, 13 Apr 2024 10:32:34 -0400 Subject: [PATCH 3/8] Revert "Removed "gpt-4-32k" model" This reverts commit 9fe8a068aad723e09e7a82bb4deb3271d07502ee. --- openAIChat.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openAIChat.m b/openAIChat.m index cd02af9..c76f61d 100644 --- a/openAIChat.m +++ b/openAIChat.m @@ -115,7 +115,7 @@ systemPrompt {llms.utils.mustBeTextOrEmpty} = [] nvp.Tools (1,:) {mustBeA(nvp.Tools, "openAIFunction")} = openAIFunction.empty nvp.ModelName (1,1) {mustBeMember(nvp.ModelName,["gpt-4-turbo", ... - "gpt-4-turbo-2024-04-09", ... + "gpt-4-turbo-2024-04-09","gpt-4","gpt-4-32k", ... "gpt-3.5-turbo","gpt-3.5-turbo-0125", ... "gpt-3.5-turbo-1106"])} = "gpt-3.5-turbo" nvp.Temperature {mustBeValidTemperature} = 1 From 03cb8411c49709ab1f10fc15b98613d3f59aeb65 Mon Sep 17 00:00:00 2001 From: Toshiaki Takeuchi Date: Sat, 13 Apr 2024 10:38:25 -0400 Subject: [PATCH 4/8] Updated the supported models --- openAIChat.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openAIChat.m b/openAIChat.m index c76f61d..4f00020 100644 --- a/openAIChat.m +++ b/openAIChat.m @@ -115,7 +115,7 @@ systemPrompt {llms.utils.mustBeTextOrEmpty} = [] nvp.Tools (1,:) {mustBeA(nvp.Tools, "openAIFunction")} = openAIFunction.empty nvp.ModelName (1,1) {mustBeMember(nvp.ModelName,["gpt-4-turbo", ... - "gpt-4-turbo-2024-04-09","gpt-4","gpt-4-32k", ... + "gpt-4-turbo-2024-04-09","gpt-4","gpt-4-0613", ... "gpt-3.5-turbo","gpt-3.5-turbo-0125", ... "gpt-3.5-turbo-1106"])} = "gpt-3.5-turbo" nvp.Temperature {mustBeValidTemperature} = 1 From 9010081e71cedfe9c1a0c24df1f7ff6e5508a96c Mon Sep 17 00:00:00 2001 From: Toshiaki Takeuchi Date: Sat, 13 Apr 2024 18:32:23 -0400 Subject: [PATCH 5/8] Eliminated validation related to removed models --- openAIChat.m | 25 ++++--------------------- 1 file changed, 4 insertions(+), 21 deletions(-) diff --git a/openAIChat.m b/openAIChat.m index 4f00020..488c1f9 100644 --- a/openAIChat.m +++ b/openAIChat.m @@ -131,10 +131,6 @@ if isfield(nvp,"StreamFun") this.StreamFun = nvp.StreamFun; - if strcmp(nvp.ModelName,'gpt-4-vision-preview') - error("llms:invalidOptionForModel", ... - llms.utils.errorMessageCatalog.getMessage("llms:invalidOptionForModel", "StreamFun", nvp.ModelName)); - end else this.StreamFun = []; end @@ -146,10 +142,6 @@ else this.Tools = nvp.Tools; [this.FunctionsStruct, this.FunctionNames] = functionAsStruct(nvp.Tools); - if strcmp(nvp.ModelName,'gpt-4-vision-preview') - error("llms:invalidOptionForModel", ... - llms.utils.errorMessageCatalog.getMessage("llms:invalidOptionForModel", "Tools", nvp.ModelName)); - end end if ~isempty(systemPrompt) @@ -163,20 +155,15 @@ this.Temperature = nvp.Temperature; this.TopProbabilityMass = nvp.TopProbabilityMass; this.StopSequences = nvp.StopSequences; - if ~isempty(nvp.StopSequences) && strcmp(nvp.ModelName,'gpt-4-vision-preview') - error("llms:invalidOptionForModel", ... - llms.utils.errorMessageCatalog.getMessage("llms:invalidOptionForModel", "StopSequences", nvp.ModelName)); - end - % ResponseFormat is only supported in the latest models only if (nvp.ResponseFormat == "json") - if ismember(this.ModelName,["gpt-3.5-turbo-1106","gpt-4-1106-preview"]) - warning("llms:warningJsonInstruction", ... - llms.utils.errorMessageCatalog.getMessage("llms:warningJsonInstruction")) - else + if ismember(this.ModelName,["gpt-4","gpt-4-0613"]) error("llms:invalidOptionAndValueForModel", ... llms.utils.errorMessageCatalog.getMessage("llms:invalidOptionAndValueForModel", "ResponseFormat", "json", this.ModelName)); + else + warning("llms:warningJsonInstruction", ... + llms.utils.errorMessageCatalog.getMessage("llms:warningJsonInstruction")) end end @@ -222,10 +209,6 @@ end toolChoice = convertToolChoice(this, nvp.ToolChoice); - if ~isempty(nvp.ToolChoice) && strcmp(this.ModelName,'gpt-4-vision-preview') - error("llms:invalidOptionForModel", ... - llms.utils.errorMessageCatalog.getMessage("llms:invalidOptionForModel", "ToolChoice", this.ModelName)); - end if isstring(messages) && isscalar(messages) messagesStruct = {struct("role", "user", "content", messages)}; From 1e626d9a747698963901320e13f962fb1edd9f90 Mon Sep 17 00:00:00 2001 From: Toshiaki Takeuchi Date: Sat, 13 Apr 2024 18:37:07 -0400 Subject: [PATCH 6/8] Eliminated validation related to removed models --- +llms/+internal/callOpenAIChatAPI.m | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/+llms/+internal/callOpenAIChatAPI.m b/+llms/+internal/callOpenAIChatAPI.m index 3cd485c..8762cfb 100644 --- a/+llms/+internal/callOpenAIChatAPI.m +++ b/+llms/+internal/callOpenAIChatAPI.m @@ -119,18 +119,16 @@ parameters.stream = ~isempty(nvp.StreamFun); -if ~isempty(functions) && ~strcmp(nvp.ModelName,'gpt-4-vision-preview') +if ~isempty(functions) parameters.tools = functions; end -if ~isempty(nvp.ToolChoice) && ~strcmp(nvp.ModelName,'gpt-4-vision-preview') +if ~isempty(nvp.ToolChoice) parameters.tool_choice = nvp.ToolChoice; end -if ismember(nvp.ModelName,["gpt-3.5-turbo-1106","gpt-4-1106-preview"]) - if strcmp(nvp.ResponseFormat,"json") - parameters.response_format = struct('type','json_object'); - end +if strcmp(nvp.ResponseFormat,"json") + parameters.response_format = struct('type','json_object'); end if ~isempty(nvp.Seed) @@ -142,9 +140,6 @@ dict = mapNVPToParameters; nvpOptions = keys(dict); -if strcmp(nvp.ModelName,'gpt-4-vision-preview') - nvpOptions(ismember(nvpOptions,"StopSequences")) = []; -end for opt = nvpOptions.' if isfield(nvp, opt) From 4d54d08641aa3e843963471c9e18a1fdb6fb067b Mon Sep 17 00:00:00 2001 From: Toshiaki Takeuchi Date: Sat, 13 Apr 2024 19:03:34 -0400 Subject: [PATCH 7/8] Updated the Vision Example in README --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index b1fdcf9..a09c3f4 100644 --- a/README.md +++ b/README.md @@ -5,11 +5,11 @@ This repository contains example code to demonstrate how to connect MATLAB to th The functionality shown here serves as an interface to the ChatGPT and DALLĀ·E APIs. To start using the OpenAI APIs, you first need to obtain OpenAI API keys. You are responsible for any fees OpenAI may charge for the use of their APIs. You should be familiar with the limitations and risks associated with using this technology, and you agree that you shall be solely responsible for full compliance with any terms that may apply to your use of the OpenAI APIs. Some of the current LLMs supported are: -- gpt-3.5-turbo, gpt-3.5-turbo-1106 -- gpt-4, gpt-4-1106-preview -- gpt-4-vision-preview (a.k.a. GPT-4 Turbo with Vision) +- gpt-3.5-turbo, gpt-3.5-turbo-1106, gpt-3.5-turbo-0125 +- gpt-4-turbo, gpt-4-turbo-2024-04-09 (capable of Vision) +- gpt-4, gpt-4-0613 - dall-e-2, dall-e-3 - + For details on the specification of each model, check the official [OpenAI documentation](https://platform.openai.com/docs/models). ## Setup @@ -280,11 +280,11 @@ You can extract the arguments and write the data to a table, for example. You can use gpt-4-vision-preview to experiment with image understanding. ```matlab -chat = openAIChat("You are an AI assistant.", ModelName="gpt-4-vision-preview"); +chat = openAIChat("You are an AI assistant.", ModelName="gpt-4-turbo",StopSequences="stop"); image_path = "peppers.png"; messages = openAIMessages; messages = addUserMessageWithImages(messages,"What is in the image?",image_path); -[txt,response] = generate(chat,messages); +[txt,response] = generate(chat,messages,MaxNumTokens=4096); % Should output the description of the image ``` From d741c6a24cd0950dc937e1c028fac8e27c04989e Mon Sep 17 00:00:00 2001 From: Toshiaki Takeuchi Date: Sat, 13 Apr 2024 19:27:40 -0400 Subject: [PATCH 8/8] Updated examples --- examples/ExampleFunctionCalling.mlx | Bin 5103 -> 5252 bytes examples/ExampleGPT4Vision.mlx | Bin 1373482 -> 1373470 bytes examples/ExampleJSONMode.mlx | Bin 4865 -> 5048 bytes examples/ExampleParallelFunctionCalls.mlx | Bin 6807 -> 6796 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/ExampleFunctionCalling.mlx b/examples/ExampleFunctionCalling.mlx index a4ae7ab6f2619c58a19070fd35d705102984c70e..1d867bd1e405eaea47eafadbeaeb2162187bb4a0 100644 GIT binary patch delta 2381 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 delta 2208 zcmZ8ic{CL47am)-!F*%uGsco7kr~y{lqFgyvWv006+pzVd*U1u;DWJ7h=$0HW*++Qrw)#T9Y$RAGEH>Qz#HrjfrrkfhwDy- zjTq}>cO9CMc&7(JU`5^)EIA=|`E+pnmNO~s!5!ySMvL?o*Uz86u4X~yR#QD*c(~kE z58FiKQY@^zYTlM6N`;7Jj+Y#*Mj#18(n_~;z(V=_p8RdYTX+lFTEy$oM0BE!$c;#n zJZ`6*{^E50(@6VbgG;lF?vt>&mxO%PO$Wz=%zs$P_~L@17H!RZ6L_+%X)5kW!`rt@ zas7>RWz)*p+~wDi_Qj^V_V@jqG?ecf#d8zVNWsT=ot4hX%y=~co(~_Yd~6?;VS5c$ z{bV_(MyB^p3xBG)vXa2fIj^T@nin?>j1tsHdu@_=KlgzUGviZYb|=hUNfd^hL;3d9 zcCbo?I_)Hwsb8*VPmMm)+v(=TMfWo*lp=vw5L9b-Zv+U~5&t=SU=H4SwQOI4zigr7 zCw=~lEIo$o!&g4t?U&u^ILfJ3x`pMJ3|=BVPmR3Do=;gkV4hkvL zx`&n#uDZpl9I9=aS@fmYVN!A=^-vev7yA;J!o{N^8};9w4haNuLI*GfGv^e;P79QZy?T4c7MkO3f3l(x_U|0d1^rU`gGT`uWLf58f#a2$+6q9Z8{xVPR77uoV@S@oVm;nuZ0O0 z_b)dHE!6r{am-5 z2#Po$93s7OhZXf#Hp?p`C&psMaVK%YmT#ovYJWq|$L)bru>u2gEV6Y*Z75i^)uSt0 z5RWE*GPB$6d~6|wp2)FqpBui0DZ@eGm$#efN2h~qH%|yoTO-O2NG+d*Ok(4~m}GxJJ9eD_%}%OjE)`nde=j&UI)M1#1+EN2WmlDE?tQZ7r9a zrVY43;kvRlWByh>6gj|2+2#a+6imm)Eb;UHp>l}cnnK8yrkuu{^5%MqmJXw2 zEHJm})qn@ux4IYFV;9^Gi1`a&#@9uH&-zu4PDX zhG{f;R=l?P4KGUS{pud$dfo)a^9=Defj;d343$Un@>i9NSjo1O07#fPDX5Z1Jp{}z z+UU1X0bIn*Xfcgfm5=IMH%r)@N{j<0%Y@U-3~$?Ld0Gwn_s4}9TC()<{8>xky*{?p zE09`U?$ydv?t?tvK4@{6;Sz40cSB0oS#{%aF_;&x-71+{=A|vktqcqsRyMh(5#Xu=@M~dxPnQ2 zK=AUr@elrvG!v9{MMv`*v};e_8!fer+iv9eVDO;5%Oa0FM#jMcQEl6gimEZfoUPl+ z>&v^F7DRHCx4my1$9Zyd@~QGiNHGxQ);cpAiE^LDIiZ&yS*?RmH+T hX9>nxA;J!kkl%Iw|Joelf~YjnSxk0M_V>*S_#d_O;J*L> diff --git a/examples/ExampleGPT4Vision.mlx b/examples/ExampleGPT4Vision.mlx index a653dc2176dbbf56320540cf1cbe0b2d0571ec52..071ab5a822a0edb4e514fabb5377c67d55d5ba93 100644 GIT binary patch delta 13077 zcmY-0V{j%xyD;F`+SumCwl}tI+r|^ywr$%sHnwd$`Sv}Z&Y7xfs&QBU=<4d~nYpLp zTq);VscsDf#w7p~@rTn zdv2jEl}$yf#1fK19qHb?!W|_wBC?x;J88Z5o!qN!`NQ5636js3QBMp_(+UnzkJBcl zHUL7gJih-#3aJ00ZiUU#iRplpcgh^B-Sjv@tyWu^l!(0ycltP_72{;rSDa1`hLfU- zTAC^VhOn5Su{Tg?Tui`{O0)*V-1^6H@rL>E?jqOh%L>TT4b#n!=g( zZDzL+QuumG*#ET$>m7%gm{1>EgYz#&Fso}2)K@;M-y9+e>Lsl2VEOJ!9>Bh5XO$4} z6)#keh@Op(xspr1!gn_FZLj&uaiDIewfHP-7FGkMAq};c#mP?MZb}27M0B9Orr6np z+s=xSwd)C{4#Y>#=wpuEu(>CDc?3SJGmO6_?%P@(cSqKa_2@yDA&goyGzi~}J zx`CobEV(nVW_v->d+-9(FdWc$-p#%1_|`fDLtk<>Fb=ULJNidjuD3jHc;;we{VHv6 z7Qx);`aSA^Zl>YQrm&TfnKY#BECu72e@JH65wIp{)cHI%*`AH5O)hs*+OW^No{ZteX5;ffE6|q4p!eHXQeo!c$UF z!HnWk?U_3a7dU#0rF6Lmyfvf5<>2Dtw1SG2OBYr$?86r5+0vk}!3ee4w{)A4k@x>4 zxqxDW3RSHjLM{txg(I@AZ3Uw|LmpL&Umw(t0B5KJ1P4w=&7P<}bN zVrdktG3YT56{7{f5gw`^TJFH=BrlxtDYU9}9@t%XlM#-7=#N(u6t_uEvn{OS8r2ix z%+43+jtUelEGsD+?be-B&>yH62$}S~O4KAdimc>xTh#=L2XS$Zp3aH~lW?47zE3~K z^7bF-)PHzU;Y@g;oHB!nk-W-#IUo{;53W+U$rIjLZHEW^K&icMD&kAytghF947%L1 zU&&-?#PCrdjv>%0)MCxW#E~L-zjB%be_2kW*8hZoh*@<~xNVf!aMRMjc@{qr*PhK` zbsMCJfVD2tqOPg^z4YldVb}w|?pkZ4t@hQv8*nXWU>1r+Uc9V0>U6>sVUizf3P%-e ztM2Biu5AYNc3=j$HF7R|+~J|_)OdI>qw0ZtYe9RkCoStg@YnNVC*{`3ml-HR{}6xf z@2S&%YV^$!JyR8kqHQ9?>&|b@+myR@iQLFK&Tk_HgIol_k{(e6e8w_&oE?4IW&02= z2|ZZY8uYfx)xImoV<-o%DDGq;&4_eFXB;eHq`umTHQ zP+F59QGc}qbVlcCyS?~D3~V{soIotG^Wr zr%qZbaOY%Ssa-4JkV(-=jsV-(8(UB3smW|J(~1lLVh5^i|2o}*^qXmi7 zIDGKLWVSIBqcvs`h@S8@IJYb0ztX_TY;K)Q_D|$_dXVI_zheaBz8SY$-HH7jOTnZt zUS<1U^}FR%NVef-=Um90-l|h4%LSeY-Dt`MA2~y)D2A&zSEr0rF(tF0X&= zY?>khpm?TBDHa~=7rESsXfD3)9nUv)9fW?5E0=i)-z>}0G
azzFj2|dWQYwok6 zPyQnFr9^VTc6gGvQW_aPR1OlV5n;Xwowe7^y+zBNoJ==8FST5HESY?Q4RU9=6(7X(!N2(`HXVFyHNE$>~IBv!r6qv7Q zd>y8}8Z&L0`w&X{ke?YP*J{(K^Bg#cN2(1&=`)Pu4Kal;`3Vrnve#Be8%&y(d3Q=2(rkuD;TGgkt6|)jQOM!U)p04n{?Q@m^ z(iDr`>^kip5-^<4al!Eo0@!eP<1d7lztlhd+1W%jb?{#MZF|WhnED#gtC@p3W}8P;?^po-p&c(h-6T_!odJu&)hv>G#J5s*Ol_@7tIXEC|z5@ji*MfYU^09?!mq5GAL zHvKxsq6`8zcudvoCY#!4M#R?wgk zfMi1s`YCDDJWX{pB3mz3%>Pb|1C7@2VL`xp6C@R`xAEA8QGBR3h3pyqESTj+{^I

@{5z)f(WfR#GE&(OT*E>OW`xa1O5;40`Y?&A^Ol zJH#<{>48auJlq%wX-KQZq{IGalrWUmeDiO8RUwkvwe$t5yYE^zU~&;;G?SAnuyP|B z0OH1fyM7hOvuaM@DCP6vx$h~k7UNZ5pei6L!Z^Y*uV#ONXhY+*7vki4?vIoEr{^uL zQ#e+)mayfal@6>OQHu;We*u&{pHT@71q8)4Sc;wTMzQ?CeHyo-(5z<{DH><|icOU| zMQ>qByP&N{s7X%^fGF*e*j~=E<9x^?AtZ~z4lT%wUfQP?z>hWW_V(8)r`YhJdF`wq ztp+aJYHhF#s_dCl6zpRg|F`; zV1S4o_Hbej72b{_*fiVM8NF{7oD0>)&K!h`t`guB-^`NEdu0a(Y3FCNg<*(?zA^fw zBAoN*=KyOalS6Fk*jkc++Qrn`R!GLd;@S21jrER`@s{0S6z%ao*WN+XKG#YM86>-4 zgeP*_@BX3?5J-V}vYz-vlV3eexCyM0BPWzu$s*y^Uu+-lUFcU?UV>Ril2Pfdyw-jQ z`pHm~*j)h*l{fg?iUR!b?n`CrMtgg+2KA#&Ku)6DpY zyQhqTf&=MQT9hq9@&sA2q{m!pK3&IMBt-&z27V>P2!Hz#{`M6f4c{7CZnN7?>26G} zv8Y_J0g(N+qu!pl#*G;em!Osvbnq>d8theuPg$7yEjrSpG)Z63^KCn+MR4kG1rlUK zM@+#j4!wfBM)|Cj=CDKmG&m29#L-)ywd=pfoR;wu+LEU;$&&(snz3auyOw8r0(zCP_*OfI&h4~St3-< zeVN6{DTmcAk=c4WxTeub#8J?jBnsC)CXboFSpVAH9e+b{gm=#vB`h?}TDy~nX*kUY z$0E#lcg@d-rIH}Y$OuBgBsg`66N4f8yN{sn4syJG?O%AMZn_)HAgz|Fs>m7L~X$+G| z3hl5lh6#8$tC&!G?N`RdJ#c45Xfko6Tkh1lwq&!6&8EhAWA!w16QEzP-jY)2LpVZZ|5>e_eC7MaX(1a;C~gs%!N}?} zwsCoXRbmF!vlp#Oky^}%(*^vM6=^K*DIST+Ivud8+X_s2!Hhj~t0f0Q&}C1QDY}@I zrmQ2{O(=^MqJXK|3_ee-zccSx_6}#-s8W#>SbL?x6%PF_kO8Ie6`p@s0$9Ajk-F&# z;h}H{H%(h49>;NYyKQ>EfS))O{j!m#zv+sd%6j2Qb{g*IGje6lEjnadlKH(!C`7J~ zRjm2g`ezLkwOJJ*9Re@)47f9U(aoi~)YfL+*XwZY>Ox$LFWgM5}K zQT_77g)3`xV%9vHe)oHNaHS^5M0twh_aFWjh;^M(m-X6MFeI`=pShXRLiFYFQwY?cjoO-J8zN)Ht9oM(F!=mEgt8qz&gz4;M^SEIM;nN36 zT(`?A!e)#VCuK?@DVd=Z1L6*?U=1MAym&6bjNc&^f8K14Grk{qwfOpS9>iHJ~ zd&ijsTqfQe?~K=n)AkW~SGziqNw;y^J`p3I@Z|?Ys45p6?s^|`Atwr9p+~kIt0Dc- zIPzw~?Q+n3eluN&+S4(KU44D8X4RYE$fwcKC72kHofa1~B7hQ(?i60TVsc5NeMv9& z1*iy=u=5JxGpquyB!)?|M6hjHN32<-W&cA{dI_u$P;k*mZ?zz2I_@uO44{H*b=Tgw zw`CGKf;`y&ecMHgdfVEHJ9LvNy+$33folf;4B!l}vkbASGTTryff-$U3aUsnLGMDUfVgjb2}+2|R`$;TP4@0I^()kw3h4r0x3DR*N1* zNzGg!sz!W0WQ1|cJ$RdwvjV>Ua0d|II!NH@_;tyi48XYKXEA+?5j7FaJ$q0=7t@Np zH$l7gk?zvNeR2ZiJE(2;Ud10$w6U1ikF8J>#8QVOq&I7b_eX(wYUF&@cIs{v;b;{i zgJ+lX+3Q(rx4PUSh);h_jdbRhwazywqQ9ulZrG;qvLqGx@}7VhiOi_IU=Z1AzV8mm zuse6|7{K>9_Mupu3Ad1**qoLQF}K6^_xTWk!yQcBG0}2nADsUf6>KGp&~*O<5zS{L z$l~_O_6=-&O;WYXrJz}5k#JDf{y_v8&`nT%&TzX%5ElJz@<*=GJvb{<_y+^tqdkp2k%7QDPk$-Nj$`6 zkOAl#9?gmmm!+H5a`AA6a5UfS*X|o*{%t_(!A%Uv-wKbV!lA6Z_JVu)Y|^l&N$&n;W@rZpaw1dLVF*^<|9ci~HU%rIE* zbwE9tWtOk3*Q2OGunXUAV3uxyP%38MKt8i=BPlR+7Q8XL-q097-oja@P##m9{qF^D z26FN14@j_5+#;$1Qxh1*^E4rK(Hl)mF=HZ7bC#J9YN7`+-okT}gyKd~#?0;%glsl- zO!e!33ui&RhxQf+FKG^DsV7&s-t}6d9Uxwgwg3q%k$T#rT6F7vxVmk9s&zyB=cI)A zs-Gccmd+)Dwc=anweJnhyawulu>wn;=hcge2VS8m+<>yG8vXRmWe)YvYkk~}(#7%Wvst*4Th4>eJh zGNv&f=dOl-xQV_H^A^Id)ojaYc10;39}@Qpo7rS$10VKCQ{S7UZ4b;~RLS7Q9&B1| zSYT@Bp!xmI+6$K|%Y$u52+2zgAHX;f>9qce=WkkqBUwCZ5|&u7*k@PONne?rDTBM|aHt(EK2P3S$alHe1*_}G7LlM#iT6BR8l&!%b7h@G4c0eD|T+<^=` zQCqjgM8v2$)N_yGn+#~MYcWUUdAE>9;OU{U32$Qbm(DO0@G}C?2LL~(?N0MAe0Pt* zC};K#mB=J}6}UJ6>Lp;#gh~qqba!`B+cNJZGg!6^+YP!?4c} zw)~2kP^sn@8f9xEVuvIX=aDY+TFBb3Wk}K8!r*EvZ*)$NA+g0V8PQ z5H&F8&GhNK99WTocq}AD@_N{-B9Eu@DvOE!FnID+CSbLzl9C2_YKOY>NNJ`&=3Jdt z%wsBM%Rraa@IB$flolIIcKI)!S3zm}wBb`RmO0P_3st-sIvSS(R zH-GB5{!n%dC;U;Zj{P^*ADpAlw-%qT z5)2cD9w?;jt!vP!2+?yqail$tjZpC0z(7h^#YO=mS&!KQgK=gR-a|HrCbXcahnVjA zb55$FiYS|$h7t;?Y;}tT6`h_`Wt6uZ>l6Tni|(JV`;c8>OO*K>v^qXc;j731s=5MI zMAOQ`$e&N3lRJd7Dq#D=ajzG2(kle_Tv)J#9x)5}99#A5i57i&ej455JQ_$3bP_1A zY^>`shC;&U^;}_f(3#!N+>Wz1K79T9a~QIE`}h|S(Y^8VSL5cXSF)#&eewQWeGq_T zlxNWMln=7uqgYesveEF`$b!tt%tjRY4oE7FF#^VF=H~A4F6=S#wq=yGe5V5BTh+;# zP^*5LmK$cW8A>~~u@PsuZlfr!0w;IBmTj|B&8fFfcB4i8Rypn+_nWg@b!c>mZ6#NV z^_QRm6L7U%12tO3!U1eyWThq_&=la6-2=FvnG`fw5(NfGGpneVPa*MIYOw18>NIbLlc);#){ zN9MVD2xmpWF<0KPeC}Q2HEix+80GnR-zFnjP^!|C9*;GvujI!jTuGfD0tQ%C|M$_T z0_w)p&xgtBNEdV6%74_m09(c6=r~RRIOsGWX{hSSmn=M<{fj^cLG4OF#KSI?YoddJJM^J|}4*~Gc{92mQhK~9L zV$%=C*U(kyM1Lj}-x|m=6gy7RFoSc%Ife@#3={tA5YkkGg?5(Xr-&ks{5^iNqvj*; zW^|0s7<*QpokjP|}os4IDz0-{**zC8GDajXC7PmZ}_X03L!IHty_h zmz=Yfj@Tj$Z#ipr0v3?*e3ho1x8HOdcZXc%#koJk9&U^3(&CxZm|s#_Q5s)u5Ua+e z8a(5*T_1CO4%xEhr+@e4qEX9G6_t*GX<6h&+rtae~v`Q!l>r7u`Lf1&1*WZBZ+$ z5hffww`729Wd$I6dW~>U*HG2}5aR0HyVF6K$EUlNCY+}(9{HDCV^-C<1+-fw_PR(g zZ?cip)Fef&zu-HTk#Kd>h&i?gmd4=1sh>e~aXXM_Pd^pQ)H|-OMDpPsBKx$aU`B~$ zN!xhY)l)lGIKA%hYyPU3)!s^H)^R>yUohd2O(KI(nq_5yPYb5rOMAQ>uBJh-D3N7pZPBOU+qC85c-JnDk zn;p%dHvr_O%QUi({ELIen9@6JgS`28x3my4lyfVI|Al45t43Of6m2{9ihB<6>;NyW z051RhkSv72CEGBWiSKTlj*hq|#LBCk-nzOQlm@`WM06bC?y@|{OPYTh{L0{cf5)b| z3JYoy6`Yj}!@T+Y#hO}J%%J%voAZ&w$MEm552a>o`vkK-^#%*QWQOU2UeLKt>x^{I zec>aT&NZAo_YQyYS}U6yC>rnu&z6_!YX!=VLoPYH0i5oDo)jYnasR=ij~DAz z?)h+cq2015@n`@{XgyU4g>^bTgijC#r$bfW4*_IuAQy6DI1O}5G-1qG2?7IJ7~W4O zqrX=_cSfN_(?Kjpte6=z8;Px6$X0~=iVQF(vS)FhWy0DFAKhIurfKZAy0b%MAp&HS zBnbLxqdQNl_}kKQHWVe*dMmDXrMC@+<}ioImsv^cSIdWDs=KJ&m$4AJIKjv*y^j2$ zwr;TwA4!$rFCFkzX5xK?1li5Ut9D%(FCvz#NbfFE3kw-zNo3ACTq&{c?1YJZ9|VBb z#p$xF3!Pft$l+Zst3m#bI33O}k-0R6HKbdcX#DFD5wNtC`*c)cMOi-3Iiwb!PwP1k z+2b|L&NV$I8@YB!OsI~u@r=?I7+I|39yA|9Sb*A|S&w0#vR}sFR>&Z$ON4K~MQyDW(8*&IS6I$xaU5q|QV&@DwSacQ z69=J?6iRwiwDiak-u}j9$0chcF5zE`Zf%PnBEy3WBq+kPBHWv&2;Nup_sY^*6x=>R znkJjc?|p`MSR8!QtvS#7i)$<@qP`xEhC~4wZ0$MNVcSriQ)$c4*NKr1`H`OaVux}q zeg!8bOYC8H{$cK_ec04s^%9V-8&I{NaBXiRs57DO@QU2Rkg=L(fXizt2NifN{tzDd zE$kjk*T^!QzrWC8ihp* zp|em_q7iPoIUM&*QVvb`Pc{$AejTR@q)Z4BKq538!X^XDyjuBfZ)f94YbW|kOP2^2)|zsIo;oG)gd0f&WFso7hz~W#-JbTR!^Ch<>;)h=n%~4ovalT%hU0ev4Z=ZR*(Zi(0+X{ zKyrHL>7K87FYBi+6Q>jRj#cO|o=tNbJEYW70<1n$#;1<)>XZheYuo55gM$dk-%KXKyx~`VsPUvLIumIRV%(y=o!I$UlvZquwDw#(v zzOfY|q&%3Ie%9iC74RFYAde?MP~I4Y;a9!7Cqr)!+4_9yB3ehEJ$7%zzqyF5Z9AVU zs(n~~6e7`+XnVC~|98T!*=Q5|Ikepo?mvK=l%j01(TLbQ=r+y{fZmp=^$%Ednvm)! zFuc!QsRRTegHui|(>zVJk&kCDLI;>2%RIKuHVP(Gu$`yW4&v$Ny5x*~QEG_z+Sy}j zj1ID5f$2y-Oc8R0Ql?~99Jy<^S=W}$#ja+~AAdI&<6>d67YGzTJE8D_Krlwb8g6|n z{}oK}*yf(T^M9d?edPjX4q?zzAL-IBKX7Dqeqtoo*RPd85) zS8;RCc04W~#Vi;mJ3?~!PbH7H=IysX2Y5LRH|n0eaM)!Iw+uo8_+F9Um><}jJc1Hdow06p^(Fkj^^uh2iQPA zlmW68G8AKTj!6tSWVqZlA5}{f%aCAJI(J44!)9Gvyz-Uw%E%+Gt+87`H8_96fpn>n zxA^G67ugB|MJ?6DqiUU{8;RMAoEvO>jyWpduCwLTOGMZubG$p)7lh*-E-#>68h2&b z9=qBt(=I2H*-D=hV6j!NdC*lxo8lIebpfnQm5y0Ajoy-)jC<=6st+8}b)RRZAzVBV zE0z*Sl2>QsY~!uzhK=`+P5v*pmgT~IHl{Nxzx#~n{BV7*n&e29L){p6Hy*1_jVK=D z7r8{VRssfrPTSlRgWm=FF#RAGo*jngG|<8fJ_6oJk0UnqDbojdqkT{za@$73T3h!H zP-B1rw)Aj_-Vvo-WZHWAZ~!|84I>``4C7jF>|!#$bR&a5f9b+Tww6^?)`d*!Yy3qh z%~W&*_&Q~T>3_)BA6ufmY-h{EJ4ILCNu&y0hFi#;P1q79%WCUA+tIr4#3IMKSOat@ z7!_W{G(rMp)7p(!LyeeW04U4@n1u(FEb8)rfj%)!Y>##Yqve{gNUm*%2XkxsYGQbO zf&wLy47m;2g^-<|f;LnayU#PUI3d87pfuhUC7)$&mbsf;@jSEoHd*PhtelrYpmG(h zS1d9gR;DqU<33P@&v0?DFjfX9JQuV{`6a<+YbE8tkum5wGAzQ>o3}zPPyX+xEi(a!J;#W_}KqO9T_IN>yQb zvP&o+sKKeGCAWtj`Q=KK6SVR=xNa^0-P*GAR6+yre30x2@f4*ykDdCT9#|WZx%CPN z#O-E~XW4|gVZW_LYM~TgoKP9<%t|7TgR|)t9#7ERTC@1elHiGjE(f?Gzpw%YQ-tz& z(^k@#1R<64??cRVz@fkOiRn2of?)5g|8>A#gYBUP*Qyek13q2sm5gi90v$1(U5 zMt#Nr&Gt|crZ@dxWdY0)e{3ilNG}36X_3J*;2Dfa36;rKU(HN-wC5uEzpO;Fm2d(i zl(HtyP|hHLoDL-j9yInc*0xd0CpswwtK|1U26o-)w?(1O=iE%JNodt?m0jTe;DERE zJibR@b)X#eSX?A(V;b2vUuLZX(8_GJJFTUFvLNqbmca3k=2~Xm^RqHXSYr?#DekP* z0n)psY^Obl17cT+&)V|a#Rf`g35)`XjC{3!)UOsr8R(W%rg6CcUZ)pr!_+Q&~%kU@KDt?PzIwuZeD8%n;Zg?{49C}1qq4R+InZ*>Rj<*OqYn{Dk2^_bgj3T^VLl$dsOPfnC}?n=ir zvNI*-w~|9{+89s>8X6K+)OC1*M}P=G$*ICVdj_%FEX`Yz_US)@QN|^O&7iAKcwO9Cfly&&avDmhrV_7BK_)SZ=oq5MaCdPc-tj_K7Dzzwx7s&a9W=57KQ2 z9u|Mj1DVn-%=fCP%ZO-en_@q3LDIbG4S&-zCAz8e0)9^T!F4fv^_q~AFys0!U)?Py9%ew^rSR=ldZNoaU$ zRqQo-OZAuxu8762XeHYXUTkPIUERLj9BHF|wXSq6UEJ61@Tp|00Csv>WRC4FZfR++ zRdn2HU$Hg5M*$z}?;G7uZ?x$*URQOfS8q1b4JBhY;3oB|!=JQg4|c7{C#}WRla}3P zi(jorlP7v^wwxigTOa#+y+=<>E#n@Q98+JlI(_bJA6-?K3XBy z%jUStM;qPaHbphMfQpY}+I=5qUVv6c#}C2J{Z3C{@7n$cmz__Fw?*}1?Oy6luCW6E z=l8u>_C>3(uLs$cqBkVK`Qql7`Cx3l~l?IDulk?lm!75Fkiwdr#~wdpDEHmkTP|-mLS6X z%12hO1an6KepJ8j7p}V-*lz`wALwM@pY{%ZI{4e%IyNMJHHe>jrq^6Lgz?-9p-**; z{oKk)exk9m+>85zd!V1UbI>m(oj8IO$U}k)f!@FxK*&4L4=xuW|Fz;+Zkmh=vWvUMn}2@<=8|ABMWqPcURfEoFmhZ|76pL zKAc2m+s;FB>^PV7@fcwGE9h*c$@u41lC_VFL0VX@xkA8nLB`G(WF1bxEOEL!XM23c{YR7`XEE247!{&!QGv)0Tv~n$k_#yMog83yto7VK2n4ea*zhp2c8K{>AI2ZWgtxObwIcU~lN;k7q&7nTOU z7H(DkrVUo3?m7m@`!>NI2|$!7IEU44$&O38da2Pmq&KjT@Q{6$7&mHLj@PJB+^Pkzp|JQ;A0tAHfUmgE9fF>3A5mg){^(M9V29+R{;1Lxm q)$I2}KP@<^^^d6RAWe7wyYg~}ikOP}go*?)caQpSoc{&Z0-^i> delta 13085 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Ⓢb>xJCT$PoVv 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 delta 3511 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 A#sB~S diff --git a/examples/ExampleParallelFunctionCalls.mlx b/examples/ExampleParallelFunctionCalls.mlx index 11ab88cf52c9e078db796f3ab5f2c2f339e2d899..23c8736061e6fd83a632d023277734bb59b15b51 100644 GIT binary patch delta 4707 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 YUkwDO1BqfXQT`YA0MX+}1OK}I1OMLIP5=M^ delta 4703 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 z000{R000000003100000rV{{@xDy