From c945677ea8654f2fe75cc4b14c28ffc3b2cf39b2 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Fri, 23 Jan 2026 13:28:06 -0800 Subject: [PATCH] BUMP pyproject --- ...tellm_proxy_extras-0.4.26-py3-none-any.whl | Bin 0 -> 49777 bytes .../dist/litellm_proxy_extras-0.4.26.tar.gz | Bin 0 -> 22962 bytes litellm-proxy-extras/pyproject.toml | 4 +- poetry.lock | 599 ++++++++++++++++-- pyproject.toml | 2 +- requirements.txt | 2 +- 6 files changed, 547 insertions(+), 60 deletions(-) create mode 100644 litellm-proxy-extras/dist/litellm_proxy_extras-0.4.26-py3-none-any.whl create mode 100644 litellm-proxy-extras/dist/litellm_proxy_extras-0.4.26.tar.gz diff --git a/litellm-proxy-extras/dist/litellm_proxy_extras-0.4.26-py3-none-any.whl b/litellm-proxy-extras/dist/litellm_proxy_extras-0.4.26-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..64cf55598b36cccf4acaaa26505fc768215f5267 GIT binary patch literal 49777 zcmcG$1yq%5*EUL*NDC+_-7FeJL{dOHrCGqDJEWzhk?v5CZjeyAyOBna5|C~LWo2*r;;tVxGbI!EO9=ykVcTXtqMnw{3&feFLauGUz zQ+5z@hO7sBzP96~jm&{2Muci&!&InOC{@pl8HL(9?`N*0{4EAP*nNHc-l*7qp;2C> z+#=ll*Y}tl+a@MP!!DkY1-eLE)zB}k9wfy{e)+Du8f_%|Xf>Z_KuPzo27K-?b~M{> zRnM~ldtDuY&yflzkzin+al*ie{Wo=5ni|`I9ZapQ>{;1C>|7uYc5XIqb~ZK+U45`U z#KP1H!ut0=VX?QhSkaiXp5eyw9MpZdoP`mAj(9vSKwqWktgd>$^sx&YvG=nQay~Aa14z|um_b-h z$hx~~)O%-{bCYri&eNxaEkl&MCCt*Mu4dB4#Ye+-QWQy|I)M~zaUWA&85*oOWt@_J z^(q?w@^vTVY;!*amuV8`DR%gsy;C+grDKB9pzXtHjhfY?{@DQn8dN05-6~;>)g(cyhhqJsMrGaScjdk*iY!g>U}ZV&HHNG zG`URG&J}C-;|TR;hiz{9%$!PkeD_~t`I-&47MFx1 zZ4?Tf-WU%BajhqlXfM zH3{*fZ@gimA9zw6%#V%VqVtrg%b`AjQ|&VMBj!PR8gUO9J_G@^54|(ECkM?9w`Tp3 z5zK@h(TLB})pC+(vxzh*#A+^EIxn*LQm%Y7@)j?NIS50?K{(iBTDf|7zcP#8a_@fW zl$en?k@bjcBlSR@+q=F{QV%J-MK1)Gv+bH@8o&9i9YH*$rWeLvzPv3p6wZ3#lj*lH zdLH`NkI%tmP?DZ}Ozfj2Bp{OEd54goLaXOP-O9W1^*^>gJh`_-NkW_)AzBDz zBQdz+ESIiSovJFM>9`ZC{qswL0?U1GQu1}{0ZM3V z+z@|_QhQrRibCQAFWFeg`2B20#LOKnesk>gvPGiS{G`YcgT&y&+KiTC%-p2Hb$jhY znjQHJHQz0Z%8wfk*4^>ESB1M}o?X8r35Eq)}4F5AqqJ1`15%yJ9B{ z-WzLWN-ymMuHsta&D*Qd`-3==IJk9w;SN#zJ2_-8 zXBn~uvyNG$K=z0op6QC@&7UNJJnSyim6|de>!hS!C9hqQ(pSd5G1vV-@^IWxZ|0&Y zwI^MQX%X0-1UE>{B)v}VfORiKuTGJ}4{V>t&p^zM`JljK}-@|-jg4BHP4#|fg!R8#?(U()rAFm<<_!3Q? zAm>JxRu5Era5)vOcP5_F^w|_LhP)e@)aW9^-yd`7sAkSq3=m4-AgP_oS?Q-5-JjG7 z?GMUg27f=+q*lj$s%_r2j1$8gE2~^+VMMv!!tm}0SyDs9U%CzH;rsH+FP3;UE-&~r zQsrZb@8XbDwo~!QF$A@D9P~b$AB@}0wd}1vR1vn{+RiLBIeA-m$4ujFo6b;)#LZDL zgQ~ihswm`PUdq-;-n+*pPaa2v3bJzRzQG7@$*G-#jSWq$*eW>wDgZIlKvpc%NcA^} zE;Kdjx;uXONatz!)eR)URk6Tm0HBCu1Q-~Ff0H_S*gzn5U9h2{t|8de!bR879%85K z0M@s-kw#OMG|hcMgdQhq2j`nU^Oa9lRYMqS0W_ ztiIKzRLsFOVyn}d9P6O;(hg-}$?u?w=q=UZ5(Y4J?Jq`EWk|lyt+`8lCwFk*GpoNF zTE>fdJOi~EIff`^zK<#pj&M+*`YqVoY z(tQPCf^>fRL6<*{M3=FP7?t-3WuYQoA8lJk;GRw(OG&{IUy;rWtei_>Cxjn#LbjaI zHayMf-xip@D_7I`p&qrQ9+aLXFXi|(1(wtIZ0hcRzo%u6a=1kIu1!gVDK)A4D>=W9 z@EhVL#>X%@g6AF6k2S`}ZID&8Qtmp*<27CCH#cy!hgIAi!;eE*HHn)IX4|($3|**g2n)6~3PPUbqtoM!6PS6Bm(&Eqy22P%NTbkN8)=-q+A74J zK3>j3W2d$u4S$(I+k`(8a~`76z2a`vbak<$5WhXK>f$)KXy& zUI65a0jyW<_Hy!pcsY4NT)I{eCtU+OYb#wdYyE$+TgM0?b3YK4|IXPx5f+BEyw0={ z2Yid@!nU%pXp?@hW^K;{%*&Jhs%;7;eyjxWmviStCU_USA}439hQtqaDBc@z-i@K! z>za*y#G``n~^fi3$`-UH3EVH z#PENt=y#9+8yo+VuERoqS zFxeD|0nc!J+kPU2KHJwbr57GMwt6wbpTB&rG~NyO2stNQpJ*W@m4{U+eMLnqM56}j zIDQNF(QB-rrZWz4{mGp^>q19jF~{QdlIG?F%QYB(P1%$T+N;9R~DuI*jml8PG zetC{1*a~b6$ZZ5j|4)*pMzUE0zT)q66&#%-N}=?O1~+thk$3E)1V|l;XqnqDSBCn> zPBN0eH$$Yxa~=2ec{kU1s)z=+8P^ZzJ<-bcuZbg=sgM~&zGwAG8=1T9Tiwei5`RcB zMDlCpZ5E;?3qa)tTxhF zeCSH}(wwwI{v(f`W-lee&_r`=KsTW3Ikk=yhA{KlOX0J3%A-UpX8JP2C1Rlgrv+{{ z6P_PE;jb$?v-PQq1)yMO;3(f-(d-~zHXbexT?Yu*Qr8kvSyb}!n4RbI^iS53(ugqRgG)WQT8CKYv_`MKI%cf$KPTWs7?O@!&m z)3rX*I3=Z3w&3EkP9Pw?CX!pa_pHi;-l#u0?sPm#sc8ME5Pxxpoz>>2Fzy{X1lPXj z^H*2hH_eEbFtz3tAXN)+Y;P|e7aJEFHz&_8Gco`hm_PvM0UPQ%*#X=D5QNPkR`!1a zvAqoh@G!vVtn9%Czbo2nqKEaBVYHBA!3?FA)PQE%=1>vCx?^cv`w-Ttqj09>i7(u~ zZ!esCO*p=_Tax-3sZK{_53l%)lbnr9e6t>dzHzSSsKMqwHC@qH&bQy0-Ma}Fqdf|V zHIhQ)ATC_K6{5gAq{F`O8H)2NO>yh z*pssFGZ!p!fa`v&#CH_pDdQohO+0!^>OF{+Uf|2+UM?Kq^;ur-b&eL5*b~7VRd~&F zF#piq*W73kJ7H9_MXy5NEt1_WX=n1I33t)nNj^*}tan!!DDDpAj{`kG*LLpr1HiWmDkEg)`t4VT-#VFQN$aLb~lm86V*^1d=5P%*ty^_MpLAbw;welV~&4z zD(t6JJzTQ*eR`8MbWYSe(^N?ivO~ zPDigSn&QWnAXb=Nd4$PKi&LXY@;w~vb9)2zto%1dwr+bLBp{KVoGfM2ly}^QPHLcHb@{V`#L_;q|5)}I6 zV-$nk_i=M#-VseCB8~9cad%;Ms+UCa*!adSP$O`#7YS{OqdxD%TKy3p$$yNrIc-n< zauhbtG@CM``wX{E8o5_P*p{Nr$#RZ|8~k|ihwNu+*5D`}%S*xdA=0)Z@Km3hQAp0{ z9njq*U3(Wn42BXyRHeBonlsx+hc?kztdmH#oC>>JtE~ssyCng#{rYPa=%2RBSXuI1 z$3zhJqtFiEK8e!J)sa(azHaT`Ki{zTkEcNmBJ}Kifc--}P27egdaZppj{3#?TG!A) zN9Z>iRN<7_%=u+f<^aSOdf>fTQ(qOooe%gM&}k(9YTh$hF40j#j1sX0?Js z5GZ;zwS!nftQ@YJ&**0r8~PsB-M;6NMGJPQ`~vf}$jA zM+b<#?q8tmCB)9u$kgB$S@}EiUzdTp>sM++90F2XcLPCg!EoDW<%iN@^jV@L4+$Rx zVwbQkYBm(ZuVkw%auqzpCnNs=!R*bWKPXN4kp1jadt490N?rjXU%*^s=T|Q>B6}9H zde+Li5-`vGKCAvGe_k z=k~w_0r^_j)bP4k+P%L}Ak2_}uC3v^eq$3omu-akontgBq4kH}BV)C6!KXWm8#B7v zzR7p)q_T1l1>l80EpCRvR|2ERISq$z{TfqjRsVz`qml zZs)-+ct@Nn_e;8&!Oxs>v!3VD(THfY(+>_1uS@9md=GXXkZc|ZVyd^6kORcV$HDnW z!oN`9ONfDkwVkd#@By*EF06lKzga5?%WuauSd5k^N$HIMeKDF9HGh|#sjP5i9L0v9 z1@%yM$>MwOp%3blqwYy_>P4y%GA8h5=U*tg@r;vvjm(?9(a7XcOy6&9A%9Y{XaT8| z+3MJ!p?be?XrwcGBGJK*megoU*E3m(<@79fO01s4awgIC!SR=`4kUFp-z@{4Z6BMVm`FQD}W6D}7=9emhJbXIF5Glquf*;3I{ii{?c-#!}(w1NStskBpA<|2d zp`0OI*K!Htlmb-CSAdppohGHD%pre&geD-QnFn9f^Kwrj*up^-XkcGm|cvJ)XmL_IkOv0xFN1$;0MGMo&&& z^St}WMlD$m=mu8GQOrK;Y zS&ZKCtfyaHeB+lq_aL89)J$x!s(h9p3LEv99U(nYk%L<`QadN{OyYU8ab+Je4#HE) zxKKV~GC@y|(GbP0%DKdhT!$VekBCzWvd1O!I>H+cC(p(uZGT*xj}J~K#j11a?S~Cm zu?iK*KA#(V3l}6B@M;UhN0j2a?#%qNDRV=H@Hzckj7Ss+RTPCi zwIA8nsQ%k$O_MeQ`mTuHI8L+1VPrBIeO?-UG|Cj=Z+7Ly69VtFSz2e!Dh9-V*esRR zMr;%)Yv&iMI`)BZc-7cqa}(*8 z-)YDJ?BMvzqJPy>K(q9QJwu^FAH5_qnxu4(w)k2-ttk(Mjp|-lOmonf z-Eaq7Y+Q47{K7I7bw~Q;s}rhk{6a9I>YIdu42LL?JyJqcQ}idX`1Esl*zp@3r}U$f zF;5;_scI%!EABc@j8EfN)$19!cj+TxgApdd1R@EA(J{<*#-iwc!i+N=cb67J#RBS> z3^Uz2`>^rh1y(-^E@)s(O^}AAN+jr@aAt4BQogwBVQ>bg;i>~tA=&@YyZx%DzIw3L zGzDYZ&UbG9V{(>W)$W_x+8Yc)$U~!J=-nFu=hl#siw(ra$ec>{(3nlyws>;Bf@ zKidI|lnek5e}hI0J4bX|l^d|}Z%YVgm1Slb=o<_fl!nbfqek=;WXg}>jKSK7;Vk-C zbHfrcUf{@m2SoS*1f*ND?*M!R#9#+30m{A`JA&;D?Etn7Fy;Sb-#sFQplR?mz+#f| z(T|OW^Jj4rt?O?t(tgN^U|x?9qaANK-uWhahq=OAD=OebCXH2+e5-CtV7huiGM`Tb zqiZ}0K2~KXtFP~1>Sb|-3U3&me_&JTTBo}e!!y`3QlXVrmMpC~oUo$HD``Rv;anMW ze$8|`ix91%c;EchQ!b&=x${$4V+%pNz)*s&a_vJbU3R_J^cVElBZ}t5Lt44?UuQp^ zqcXDlm=>drNz-Y?7);AuiGXv&Iu2oVPGK|571)BvP$iA_GHidk;p;N&Y1meh4vr+!z{&sGDp`tINKHMrP;FAfk;hW>@%to6+R4EIl(Em9n| z0=&xO8>5wTi)h;MY8u0sUlE?#^9;6ZAx#4AY*98_PeF?uS%g*mIKRwy?p6|3L7S848*gMK2l|LKe8u|be-O2v;{L+j}7kDs!A^&%9BUN4;BI5LmYW?}7ktP%I!CntdD zlC(8&=`~`;S+WM+JR@&hwsh7zxCgOEoA_t74Ck+zP_UDmIMTfAOB)OvUl|b=zMm%J2sPcsF+jH-XI=K8t&2ftuf2|-?Q1r^R{T=1y86>6E6m5Q$kO!CwyLXQE%2pRg zsK^f$Bj zhjiy+2Ve*nC&zCna;?IE;^039`#-4UMl!gCz$bD&QZg*463jjQOwdRM&!}=EyRpB` zxX3uwCy&%9e2=yG02_y-U}14%m2d+$V}THFneaY|IRp{A`af&tz_EOV96(ZO;6887 zuyX^WI?%|?p=$uPHvk&~+0W6?7~%jRQ?Qls&1{$Y=I?Bm9gXqWTgjC5wY-Mn#)2rh zR+)kyIYwQ*pl@5V(8Nwk3M(zTQ1~U*3FX;w)CjT7%8<`eq_AF(+0|f)F8`b&{@!R*#?q7EwsIsz|Wgi!!I4 zaXmKi5DmSuP_dF(m7~N-;~A5P+@XgkIw&lAk}p3l-*M5pna-FOBS@j3bPWFA=mn^$ z*|~Vxe_O&ewEhp7AWNwiT5#5#Gy2J4P|2^A(RM0mR+bYR-j9lwU(Dj(qnu=?^3-iF zJ0LHTRPtu2t>7q_8#eT*LyJLrr+WVdX=ibhM2%8#q>R$tm>>Hj%GtQA-bdN~Q(a{d zd@o06mVZPGOkyV6tA^+1Y3-p*_u47 zV!+c=bb9bcjw~dnHLEU?PNq7WhqnDotToR|&OyjU*4LpZqa5kr1Ypxe!2Oxr){D6T zMud}#9mIXprlGwv3u|k8h}GXY=vObv%--7SI)jk>oIsx4pp3runqhd8$U1cO>ZWwiILH4HEY$g41Hf zy_1E~rvc*NBd)4X#~~w5(+`Fu*0340q@QHC7OW7{tJCM%zH~#ru3Rzl1!YA*sZb*3 z)=(KxE;}0s@OcC0|DTikZK9)0-*ag>nY~{@61G6;Mrecr{}Fv^f2@f>EOQo?8+h-? z(oO^lSM`B&YuL&IEm{D3`CXMmi%(N4BWqm)YYRt9z)JpGIer^i95GO2nHhZZ6>dl| zyXn0KiC7ma$*dep=X4t}veRg?Ix)tqbds5;ULaE>a>GH2 zFM%8@N6D|N^x;d?+mZFOcsAh&r1Q}b7~fpJrNR|vpUc~W5p+rOBqFNOTAV)BDl*d~+{I$^`M z=1My_{a?1wJ)hWE0c-a!Dz^6V`#cFRZ?K)TR4xZiz@2#j z_a}Ahy90XOK;q}Y%m+uA2POQ3vd&xRAU6>1baHM_0s4=1{2XzJAMU?j6q}Opr8uEjIP@aLDnt%i`__Qlp(w)<0OP1_ zLrC)qCjFs*J}2yUs!NjhcM?+{ViUaK=Sfq?1oQVB8HTGZhqW79jx=84dMow$wAzih zKknx$yLVEDC2W?emQS`55<8b-L=&yRg)kfFj|IXI@~PoL|L*Co`sF>LaNe}W_fI?A z8k2`*D&6PjcdiE_(!l$bI)Hv4z|p(Co_GPraQ^KUU^}qoFXG`Edb_SYl8{<7 zFAzG+$t$t7Z314EEs8uJRkff8qJfxZS7Zgq)pL;hgh9lQ`&)Y6R+Bg@y+sUjGZf|F zdt|!gxJ<3{PHz8T;(@e^(A46>gVUiXj7Wn|^h0|lx#v~%c3C>tW!v5p&RYazY6EOQ z^0u<^g4luaX$}q$bZFhu<{xV$X!Y4jj_0-WGdLgzAql8Hrw;GVhIaSiPDj_Y3#pGt z#Wf%A#2ZOYy-QqZKiQ*CS4VOoyTIyd{NTNUg!nLGk^!MOTtq(KM#Xb`5rj>QgS52R z`5OLf+SB-@Dk;lXgG+6nDsA~0W~%ImPa4h_c3;H1)~@o_ryA>%*2&6QrjUu(GL_OO zD0geS-fO}j^HV|i$c4o9k&%n&iNQf5xRnOP>L?>FA;ZH_b4uF4r!0=&LcD;A8KD*R zo~hoLNi(BI3AZ6GSGCtTg!~BOgmEM*HF-0u;S#Ysy(|9vs~h2+kz{xV22kQKaG)Xn z?;HQ$WBoS)JuiqG#0PY;IDw`WGz0=wiz)awFZGLM{S^m)h53I#bzu>5z?2eR+s>=t zhbUFZcj{GLZH}hyW#G%Kf1%Q@nDO!qwtX)6itA-OKH63-!an;!a_A1_Xs3d#>zXa0 zcrKG)~y9 z5h>-G{6Hltn~?WR>}#)(9P!nYFAFx7`(K&JX!&4;ifzT~eQDJpuSja-m%AXRj$sr=C<=SL)yPzu&FMQz zWfM2*2;aGP#iYR9ujXsMnBITM2qx_O=4@Z#@^D~Fr)5MI;S}MzA#Vut`4I_H;sy&Mmwe-7Rm#QCm z2d|K~c=A}>2QkliDPqDDmUyR+wVV`9v6{?Bb6XN1HY+38YB+aLNB~blVd7UZxJ-p! zrA(&^!rJ&!*#~p2Yxj<&U7KG_#kzRlb1%eUN*(U%N=DFEuF`Dtz5jyW0MYaHVjrOO z6QvJYia2RRiz=%!88Sjv_4=9qj+a{{tWH0EAK{aS#L4mv-pmaZ?_MsT9U8zwWr06$ zWud?z1{)tI4>0cOXa%)UL*2h^_@%7jvOhOF2Q<)j zdVS-wU{Ei>A#FXxbLTjH3(wY-FNLNf%u-bshmu-F$s8q@lQW|fWKKjvsQ0c7`{VSW z>Vfs_2HQnzhPwL1S$xDHr==F{e=%7b(A?WyIQxzcE?oTk_7X zwHJ(xfi?e0HPd9sfd7(B?cd182gD@K-O$rAL3DrwhHY}1dC;M^oTxI%Wxd2l{yuH;x zx4_BkhZM+~4yyOQryd2u6vEKg>3O-UI>wcW7G!LilJ!4c4xhi5RUA?ek5@Dxdfm{|vdYRmY?*^zHFj94INP2Q zoj_qf`|P0$+b2)d)1^)MwG)HBXIl@hW!T%Kcq#LC8_6}-<8=GO6dzV@1ho8kjQyl? z^{S;FLGq(AT&LEYanX$2_X~Dx+82dGII1Qudj)oVj0f+C_=N=}`4;uKnhug0p|$Od zw#NM2a*>g@b~~ZFht;?{d>Lo$g&?}%NwQ7dZdmNFI>_)~)1( zeon928EG_wbHY;tMW{7Gl`b@-Xhik%HICvf)PUh8dOLQiqR52pVUk&D)c2Vc6(VkC z#FAXbU9eNCc5lnmQezV7Q%DAPCQthDKxo*oo@;mr9B%Dn_Yjwn5n|6Zr9OT%el+u` zF|Xqpmy9_Q|Mbg@U9DxaS|b%F>q{Tz4Ze#^_Ls-lzeYpJ1lrUHCiiGnrTjjOB{6cU znc1Ea=Q{@6Mb%3xfaAhNyV~hOC)-YL(FqA%r>xth6s`7Xr+P(2^--GqQ;&x>4PC4= zGapLjQb26X%u5-G{?9$m!H*rlEjb7@^Vp!e1z;$&8S;B> z(!kov2eQ6N(&1|U@2Jb zXk5U$fOMB%cXT@|Z0>{m<|e`QIC8?my>JF7k{3`U__k&W4J1%Q{Y{$uMV0*T3gu6m z>>tz`rZ5Pd!EE?e;_R%LkVE1mWr?I7J=tyuG?~U7y2gU-OMxAaM9XLN?M=1rXRjWA ziO-HW8o-d9(%zD%K~+V-(*eO@7a(;K^2}Bp&&66>2@;>Tyvej&Z}6q^A@ufCP!WII zCGOpIY0^PTuNBZdZI7}r%GUY>ddNz^@jU!$g17kaMvYiUyE3f@ z=-U`Lx7|npqBjS?gaG}#zsV|7gTFHF^&rmNQ-<*rgoijZr#9=rb_O?^$<@Uu+^<;Y z*QOjMc2O&la%OmcEf6Oq9aAzeb^U9u9(=nSo)Q04IT4lCl>&K@Le=AGBr->FvJ=R3 zTM3S=zpF_y+_W-hxrnQvXZ1DE0A%!!WYvul&FVh7EHt=4;Q~~=+ldAE1rG-o$8QGi z&t?qJOM)VzKhw#;_~Ebq@%1aag=9C{OV`H;GR9g)#ulSarQd4(^C*EbynTN?02x;Q z#k4IO8#EsQ^bM!35D+u1?SRQidthtfp8{r5Dg>4X&yw83B(D~H{^63E%TIGW@-<5lD|;Q1^bT`2J0z; zq{XOtbjcYVKalgZU2dZ??^WKP#OvpmRZsQ$w5^ANneHu#NP%yhLE4<<1+!q-@1U=+yN3tGyjZ|wTsLfyBzjSmdy(L;z$+yXtiJRd#OF2r@Ax3rS(DjOg9U@xWf=) z_s2fV7W8kH92*wn@MoOaks{bmHPubjPR)6(?~p!>N`72;FUj`O8hPnlThF1}dK2^I zQuQo{mhwd%0Z?ezJbM6SmhodM- zMF?>BI_Xgq)Q|7~Sm)%RGepo=a7vrX%z0~DAT(YUh9y^RvhyjTVAvXL>9Y+|PC$11c865432Cd+v4|HZ-PWdE^~EqWi1 zrAB;J$cu;e5{OI2>ZbV}%8tS9r^|o0brwFFR6o}!Ae2$iQGjg3_gSR6G zS5f6V$Rl$(U_~NxjxZ<2-Ul$e+H4hOzR)tHwcZ{=Xn249c(9ky;O9D&3 z>ZrP0D>3fLr}3V)9_!?zvHKv!=IV)W^TLgV#MeIRtI%)@?cv-$9S9jwWJMO*TJp4R#QI<<9?aoASZm){oEcTsoRhxgyQID0VY4?Y1m z9t#BBTbG^eAWk-RPF{d!f~H330?)6F+22D)|KwH5+E7gOYj0MgG_$l*Ks`AOWX?|n z_COn$wNeyh=YlTIYD~nLD&Qf=Y=5Nf?&hnwU(UXJ=k3pD2uUmYe+AwE#L44e=1b6{ zuYPWPhMKUb6T_k+8^a<;l6(AO0~+;dmPAK2`CvtritL5Q1NW5pTL>QVH|2S-%kqix zgymx&CuS+mh9a}GjwFaF^ohp(^dm0U)FOYe*cow05N05lGc5lqnZiF*>>Uke#PTDJ z2!chealg3JsY8q4)w?3HhAUveq)mMBW_ZG^;Im7vL@s$snjg4SNswd z!dy;mo`bjxYK)@xwMKOr4tR)i0TpX=vp3?ZNR4}+ad6dxGm%cOH!juVDb z5r>C02UfK0oVdn)S6b!UkXX0x42+&uq)aF-oPM)AJwxd{_U}Fp!y`7=vd^|0 zuL~$4t|Lwm<&)sY0d+3$?Zw3}GKD=Jc^7gxcijUG&cES7<)dccHnJsKJFCEXLd8#IBwA-Q5 z3)}G@9w#Ouh{4<6Z#XmhN$0a{W^P>eC7oH46R4!snfTkS->R> zuDXl3%#RRzS6d2|vB4-ybl0kAop$z)?qO$OOLmv?;~kkcuzLnuB~cy43Sv3u2|;tU zAVAxq^-I@VJM?>sNQi^FmA#Wt{Ttzuwhedi?3fj^87KGAE{rF=5S|N@UQgNX5HyH6 zprTsffPr%>unL`(fi}Q@SH#fW11PrB2NraHZ4Ck(-v8QB{r@l>^t=CU+uJ9JSfKd7 z`^LKtO1r=ylug(!ItHq$JOfKND;z_(oRsu{Z2xlwV01PNr7Sz`W0n{nh~wi8SdMY# z2lE*)ga#m_zW5iCvV*ulpx=q~HxU2rEB`gBrYh@NCxeLHzbUo#A5=y)yUTQZ(s8A?!^=N-n=oiSsD^3;(_NC1y)UTXTqEFEmdi#+zADs$3Eg45a z7lZY<;#DT_B0Xv!Q7uHCESU(@GM#7%Bqj_$PA-|b!hRK(O=WapX{Jy3{xqf8e)Da5 z8*-d}MRFFgjj8q4le?5DPu}wHdvVj?Y8s!jse>sOAhN22$jh%1hc{)AzqN}^C%0c% zc7U{t*uU9_jcCS|s1YsIOIeut6jXLty?Dnt-gETmj&`|}YhFN{Q*`^+L5upLWBmTk zC#2oV;Rb`n4ztNpGj1g&)+~lQ?(?qcV})mRjn|z<*!a0J)P$gu2+)VNZs{~YAr5pj z*>&xKeFsZ0uy|)>a2<&uHVZ*{V8o&NoYR^UgrY)pzdUkU8`{?*2nq^c(!X#Z9T)D~ zeUVj&n`G9TiSo_PL>o?Mp;UY4cExEipP6h*LVF53+GjJ2j4|XAUyz+?QW`Q#cXR_$ z&SsUN5&%^(Yn{WBs15pvg_h$#)5Mlvw0Gc$wio)+*{J*{dU7`IGC~x@vXH`w> zX<&)=o0@1{jMR5!Q|lQeufiUD;d?D(`T0!I#JOs;1H{IVgvHnK3PZ}q14ab@0~g04pK%f0U>V(ZkUZxB_>+ciH(UEB?P z$DPXRR8;2}8uStL?WGmYGprvnmIssHt0&s?`jDsT#9s%4I%D9(h#RP}?wA@(7uy=} zinV6KDBxfv4oucXe$pCv(^WAWnZA3-&JZ@>NUVSMCM(B$Ak@EL(CXO^%N?SgI^&3y zuy6LgLz?*-1`k@n+H}@|!uCoBt@uvo?{VYj&YRI=>zTA2I)``2Naq_%j(Njsh-%C< z>+yJgma$MpUL{Qrf!D_iNN^K%_ zg_%X|g<||abr_IbsOOsNqy#ZZzM+0c_s!-_PsU}C9v#%kb|otUnD2SVnmKZux26RXxam(5{smix64laV^qDQ zo>Ada?EHe$KXGEpTD!U?zQ^8pU$%Q( zT1@9pwi!WqM7*jjd66Zu>w$#<(<%)I$WanN0e#z18R(o08z(0h7wE6R;%H+CcDV6I zPL@KM6@c|;&w^>=s1!LIHw|+chaUtsMfMo-b;K58Jv~)GRk=KYW6p}Os9avz{xUaZ z-H6;cjKdY5Bh3Fw7&WIUsFSXy@2wFN-ue`tKgm573zD@r=E%|svxu^~e4@6VZ$jrh zDn6DuKIHdC3P==UXPeIN7&FPY^G+VoAI*oYzSE*=nR&>7M7oa4$BsetS)-68nap;$ zu`R=SB1{{(E>ZZ7N^I_Phvr^hYR^PPox@7fTGt>Q&K|7{hp&8Ll-ApOdwh=aOP;I3 z$83*LOnW4qC%^0z_nvoBy~8GG%#Ur&(=@Dh{3*B84dy1b6%1EQiy&X*abnr1*ha>X z#EPQwB}i(1`Q>V0N`QCZ2BA$OkC_g|LD|5$<<1s22xz=O%WSSceLjc-7*IS|*U|3( zM>eu;Br5bGO2}#1@;4hZ9p4d(;hVVId**J%SzVttbqnq?`W1)-04#2r( zoeY%{`fdalum%k+D}N8X1E0Tx|DT5KKW^(W_x$hoG2|A^rrSPKMLtpwK%oqT7uIB` zuSaWWuXb&PDVHHw=TUmbWczxk3p`1RZvAod(B@~yjz@4r!QFA%$=CuNyh5u~;T>UBOdNdNvUQV_ zLypSnmy4eC_)-Rb^L&@5`>9O$T~d&8oQK4B&6nykW6h^D{YbK#Y{%O&Leu+D{C-G3 z_4C`H20uj2gA>LTZ}=*ze;*V>ZxE=yts0y zZhiuu3#?0p68%WX)+pUGh6h}M%`VbW%EyNAVXV6rp9{IaT~4Z%5&0LF%M_CztrH-( zI=H*}x*znHnWy?hnyQvP8| zmJP*EEO^MS`W;rJKvVMybbwt?oW-mW|L&3MB5Xx%Su#2YC0B2+NOH=`)B8onSLagp z`~-dOqFcnZqmXT{5Dj~NOtcxn>tPn(6hG%B-~vPc&JB0~t`Y=1<_UF!U;FgH-u2(L zq4ghsfC8ZFsO}aFJ*K2gAL4UHdfrbpbiC*1em{QDdwD4;yrP%4cDFT?lr++DEsOF| zD{V}V_6aFSHprC=^l^18`ou*L&jRLeQ4C=pWsk;v&VFzpykDVo&{cWohD*rY_sDnv zxI_tXZrL}2y2S6m_KQUV5UZ&LFgNZ5yoh6J=zLv7%LpMkI5yxVtBc@xSMN5ihkJUv zhBhiu_wYEKXJWQtaHT?KRCnk3{e2UhP54dE8(a>8;acMy-bb3R4bh`L-t~riImY5q z`*{G1*N>`J#B$t_+cElOT$srQUT%?T!IXYtO3Of0U?Ck~YJfMeekXR_zrgk{^!>jO_b;Oan2Nux z^7*-Ob8JK|EZgfCK;5Cij`adddew8XZs zm6c1pLN?Sqe9MML`7(N`t;KlJ=3L`Jp?xW-&8F+=Tl0^NxT7r;Y`O$@XD)}T7cM%& zC59fS^-Iwo9Bedk=`7MqFeUc%oz1V@=wjmesa3=SmiQeg#lg2$12E(ObdUd(;x^V6 zrUrin<6qB#{rZk6@W#cjJ@V_K&nfpp7a8ilF&65WP`fT7(MA)}FYvZIV%^K9z-85o zjK}fK#k!Im`9M!E#ykig={}V@x3?M2K}ZdgJ%9!9zp(;7}H}8IYUr{flybHlZwWBZ2?s`be`xXv7u(xdH>O9%@hRM8!V;&Lj zhxoIRHKu!00`D99&yC@H?IM3#W{{D+)Ar&V0!^pr360Y~b8MUv)}Gg}?Gr9~fYWxd zfe^FpG?FK+$MH1BDHdy#ihvCfqP$k8IvzCtq)YgoVkd+yb~<~*LjhLu7=?daOg-Ph z-hZ@gFkJKW%R%oK91gNXG>C`i1f_v@y~35=P_RYFrk8z-=w!zDBdx(lQe<{V{T;m+ z1sw-9TNPyslMwwSjn)g&d>?Elfj-)`P-*$A{$S+s1$&+5j;=Kp?=c5$%9+!NR3&kB zjMTiujYw;*b2!cQ*?UQbXp7p-SKT<~GczXP+cXpCi`i&taY(2MZlqYt>;YP@^cp_* zwDQFca$mXsAaNRtDY+h%Pwt{tJ^-wN5I7vSu!_GY1c9hzV9w%TZE3+s*TdQ?Ey=7{ zsv^(O#mXYdD#gswr|=&Ss~C+7jMfnVuQ><6z)<|R|LS*{&SGO{YHtbN5-_)(6^}~i zXv|>KrJ9qnJKipBVlJiattuZDf7KLa?}QR6WIp+TZ8ZYDJF*brY)9?QtBUUX0)>;_ zz^j`S1qHPQ1>ffc5;qMsi;_O#98jo1XkR6xDDZq%Ny`(z5Rv|#zl9%W=1HHu3;B%a zljez{qGKtiOPogXg#WQXQoWlS`&{D1lSC%vya!V%{p2k)*70_48n-|5C|MjW2RT>u z;Qv32ol}!&!Ip&Ewr!oZZQHhO+qP}nwr%%m+qUQ2$2$=dF~6Ydp?1ZtT=`{IBFhbH zZTxXaq!Q%Dbd83bCAIA^5meh z4;GFxdl&4p1KU|zH`CqywXAyRhvm`&oOq~Q4&p<&L5|1!(Q`cjjX$Q=qqJtVL-|VC zw{o9GN91*VF>!%SLYGTx+{x`MUBZQ5dXKrmM(>!t@z-hNymA(UgLX0gdEyE*Niq4M zlH0DnvbrU$xs|&Gtsg`Bn6y&2F<*}4pdTseRxIpNE=-~4Bts|o&bQT!x)NJCLVwRr zP{CKmBqZKLG_IUBtx{!yJ5bounO)vMjz#IufgVw|sH477)jctQ`&^O=) za$r8EXw@T5N}qRd*9g!p(m;aP+3dWE@taH{iiIEeatUTJt%vJF`qPu!3zK?s29g19 zoz!97Xb$)mls%`iIg2LKQmGY#^5P^MowsxQ6_HA=9hsXL0Q!EC#gA00lP2ysNt9M& zuXMRd^5j^-2|1J$m^z%b_0+ao7VSF0g^J(A`qWz^FhnmgE)8k^c>U9+dzk?)^-a=Q zG3%%LXscRfn$c!Me+&%d-d-X{_d~Av(_FLv5~-USo62J#ho_$xLuszjM(3zve7!p& z=gP8s8!4(&E}Bvw6$rn@WqHavKOs8yxCi7k*hG4E$$2UAh+wh*jP+N>2+Q94I6pLf zfUu0t?kbD{t3;iWOby9&OieKm1tjxFcv9#7vGTef%`&46^qP5O7VvJ^x4Dg&222`O z)xAC9xU%X2$=wn1V1CUIjKzxFlpja$wRB9b#wT z!2CSlBx%8iW$F(&L0=qn?^{o<9^Xyf;3EWLXoDtjR>TwE%;qi~QL!^yRX; z0%`_W;=VfoM9w{zC$lZQyfh!Zqpz)Qby&127BL)s%e3OLY~Y3!?3HZfQ90Ey(vH z%uwvMHJsu%X5lcd##UYg8n?Ddy_Sb%yE?rksC5-h6c565{hur<^*<-t8V_uW*)xf3 zOsw704k81A6vAuc@8HQl1>L>_Y3aBUY)*SnQ*} z?`9Y>zs_uQfK1a#>G3F0w-rhwkjf90UeRj~_Kg!e2@Ppa<_{Z5iKTzJfyE4hBZr-i?a!pLZ8wlTV z4Dog?Q0*Nq2ya2mafQkp3YdV-iMj*4uzyA$Bq&T0tk88xS;P%-a%ZZ6C7L~YiuP*n znMaoy*UO|2ZdA*FuiEL0SxznSmahYdW;yVZWctzN^&xtee;#l>F#Xc{W<5})KcIwj zlGVaH_6s5z?Ac(R%=6)n1BSFHw;BaWAOw9j)R zyaW-sIda?I+C8?0@hQC0Gi(GFFuZR7vr6~Y`9Dr5I!%%Cr)VER7bP6nzdy2-ft+Cc zrL8D>lfL;=aEr zRmDRB=DAn;_W8NB=-?j{!8&hM_|Y%yZPW^LdwlEN1+{gbEZS?b&Gm^m&`=zu9_Ya_ ziz>n`<{i|WS@(t)Anr#?>E99rJG_j6+t8dS>_X8;FW7*MQL7nkWV}M9X&Gvybe^&h6e|+4PBK=LP52lv=^@>*H$-3g*_>>oJ?Yi zJM7`5J~zST6GZFEk0HMF>+c(@5cE%9FAFW^xop(@E{-64m9tT2XoO*qej&wx4@eQl zQ?+FMAA3vQ+_B1|_add7ydY%m#8?t0!kn04&~7J2$8pnkF~vm6~ypP`eb zK6NwpJETTkWZ>`h6-%&-L-1)jxb#7`M&O`6e8xnNPLjKvRg^4YVKwIJd1TKb*%Qs3 z+}75{C1BLT_!285*Y(D){4vy4&_7riYjdegb6s7jPJe@F|YT@R%um4~K@iv2!>S^gqtl~uG5Ntc#=)~%7W z)F?F4mf>O<{t&V;_6~wH#V)H`jm0BUh@_}^p*zOvgV1kK8yhNvL>a>41JVQEbj1_BzPrmaiDnpokhbyNp;|0`^9 z*7!&BZV%O-1Aq$)5%_;g{O$3@!8g^(sMVX{FN2E!I#I^gd}wxcNND426|V-I861)r z#`X=~g_eB8@&Gfv6~@R7N_M%tNc7LV3C=JfJ1I(!xDh++O4?ZJRqfolM&VD!#TaG9 z>fbXdA;HcQULt${iP1*8Z;)bLJx^!NMU|o^>nkHp`UuB#yECe-l|h6d+(s2mU9$}n z{mvo!k^t>~!4@foB%@CZ>^;SZXFbmb00;@K;}~2`H8k{^6#VjXJQH__SL>kDRlz-n z;<#1KulAe9{|k;2Wuy{h_jKubICt}P7^FX zRoD7cpaDeHQQd{W49fw|uj&WK2@A=pz9drelzRR~F>V?0MADC$X#*sj<;>r#MiG+m zEcuX>ekc75fyefu#MRm#-5jnMZ;?G6uzy$xw(6MI8N^?(aI*o4M-K}0%6rd1kfJ(|`4-~-vZP&0A1yb`E+yh8Hz2fg5tOOU}_N6n<&nRu_}A!pp(TtK$v6%~18JkEyZ zl#}%85}GKQXEl46pGzpMJ6(Nh-MnVRl62*BuZ7V0ZFOcrl;O6xI+h-?JE9SbHu~)f zdu=MT>!+2YaIS4kS*Gkuf+49W+XTgQkihTJn-mdyI~r)F|fl>;Tv&O<6V;QhmX+fdz=%4z=x$5ro}F6tgf z<`GggyxN=sW~W9Iqj|2ruGEY3hZoXvs}~I%QfMC)4~A|X##j*9ET4voi?Wgo&JN#M z{2nFpPNe%}oTrT|&9Z13_EqGku|B>T@c!?|Ck0Dx*@yNRg}U8l2+NvjR}EMzwu;@M zL+XPNbSV*g%qbhr3bBJ~Ri)`&9u>{ZTP3#STrE@RAU#p5Ma511jc8mVc6|LA0GUG! zDloe;v&%`yG{Z-i%=CJ#_?k|2@h{D1 zw44CU^n9-09l1rCQM+8X4RI$S6ctVXHa&XU@Z8_;6}cf;5rhPqBI|Gr)*KCeW&&Gb zFW}fq#uUc{ry50E!>mnA0T_a!44kOc-vly<|Hz+?Bft0VK5i@W0mTcD%u^My?o0=u2wpWWZA9`Emiv*EDp^())O zGL(}y8ngt!KNzanRE&1<8p^G7v+~i0E&->L#p}TgBWL){&K>t&pc9O1oW%9U17;kGg_lA0sN3+0`vV|+;6t=-~VTxrBY3|NJ6d+%8)eJVcT^cL9* z)quBOiF{2dd>oM8;M@?XddVI5?ium$e<*c&CDZ6MI)%5s#}&!0arkmE+3y59$nV(4tSPkfCP4xhimA}}Y*cSP#vW0qc#sSY=` z>I{#o)ZYU~A`NcDQvZ~0@=52*8=t{FfIQ~BB9jw~u;`6Us5v|wMuJN(PW zek&}F(B6_uhe0o$m%(WC16f!B^G#vZE15~7wK+OyAdS)H&P~3TEp1$z-1kAYX ztmfKtuDFo_2d)w9!o@jQdzTFj=SbFGZf)%ag+o=$)n*XBvsu576`T(f@kbGbsWgn# zGM9314sv1JZ_|>f=0m4TI|VU0sWf2jT;fQFD2}>!143|ch4DlPZg2^@P38r^3;&(m zA|dkAVX-XLI?N%8@`(Cf5L!L1jmD-cdAQ5%SmMAE?Dp~stX{OQ%@SL?C_*pT!=>^$ z%jrT&3J6l`Jxy;%8BNneoGOlNV5WP}w6YzJI0($1f@3z0!hR&8Q)v_2A5FaZV9e9I z$fO~)9qO&^-iw8qre+HT3j@K&!f;SJK)k~CG;s%n*VZ5=Zy;W^gRoSn%j~qgo?tdF zcI*T+o+jbR5S^4urKQeU7GW8yB?%R{J$*ldBX9I7)f&UJ|T}k{6 zEBupm0^5NM*;t>)Ad7744ZU5JgWjizQkNs*Te$ncNb}RlB#snxFmR5TzUP|XW$M3g z+On&(nM~K>9m_beK-M1g@Y2`AaUVPU1m~iGaC0QO8-^JFq@{{?NpR*moxxjt~lgOdm41#e>>v;}| z{>8-`f-=U5b8G6Mh5i5*?4<_s>J5(W`HBC~c%8YjrTx#wmH+oM{|7jq{BQnx=`JYe z_x{_Fv7f}+UCT;kMjT$K@g?fzBw)`w^mkwdb=OpB<>PxY5iYK1OpM4rn3ONrj#(*1 z`Rf(f-jj*a+=C*ka}1czG6NhQFRRtaOPxoLQGC0kli%pe1$FSkS_XoBJ2b*epV~heQsNpg43op zC^~k^@?ryHz_$B7tC|SkKkPcny{0?_b%G;ZFvbrvK#Fh=w{9IR9T0@IQKZI9X~T4U z;Bn#lGjJ+ILkkwK{=MOlR08o}`ho8FPnLm$=U|oRCGM2AVAl-smsBNNw z%@ok(hIw#;C><&GehHv$q7Hbbv4mTjdt0jR5sLi&UP6yP!mDz2t|50ATFh(K^^4B! zDWdJ12_CS+-kLr9YapYY?h3G);~8<2)^DrGk`~Gehv-E80Li@;8gPLi(r|ho)2sIZ zCf}JZi}O`ft@}2@%)g&<0I6G$HwZM&NV)qVj488euV4889y5T0?uJYv{WAq?{);aD zzqEfB=YMIJ|5`0qaCGc8$M3iM3nSG)@^=v;NwELOcM(JvdrDXdmi&Limmz!5L&AswVR( z14R^!lQ!wA&J}2`B^`Cw)DdH7z)l+pO%B~)2W zQWQp)Gp@(%5bXdd4bIV3Q+5Kq0QWjHOf(TiYXBFB+~&M~9B{LHJbsL9Ozj;!JdK=} z{9X5gZ-<7v)pU3Ceke+>OIYxL19!rxT?_L?5nX$t*Q@KU@a?6sADa*vu>=JtkcG!E z!_jq-LA`gxtAJ8u;v|l`<}`-cuy3fTjmox`><>t#;QJ6@6?=_$0>n`@=m6~r7fkkU z>?kz}$`sbe6=mB;A|W?ZNjHf$@_V?b4gf9=b5R9VNChkJc8B3S1Q9#2g1fO#I3cJ_ z#y#N|0VrN3XbLwPlqtfd?PjSePT-dTaq0UfohLy?`X(;GpA&&<)#tEA zjX>dc(Z=~_?;X5dh}G$=Uaiy)I|a79wZUUIM9NhE!E$qe@H#B>P?ScxCHJjP1eh>d z#}Ll*ZrXT4|U#xA#w_Bp_`;;FyfiaxL{FHO~zRoz$B zs9SZG(IN;01`n)6hq4PEp795@Ng526QP{B$nZx#BqmC~+!CXX z=OcwZfZeG-Za+ei_oXu0%_7 zg6@=`#1uGp|BbuO?t<) zjxJm}jx*B3sg7obo^JT{N;rW7VCtP)h9osjL5@rU7V>8%D}{kncze#Dlh|XRg^#LC zTr{1i7O)ESHU{KN&2RT`1-%dV@`KtxD9`D2wKfWL4mxOD$+gs$PxVuPyazf5I13LslV_otKujloDjpdR@6i*BaF%+DLnmU9V;8 zOe{&-8rE@==uXkW^YKF3cdj*}J?X`7$a143F;m&v9oN~m7lx7kg`r(!GL&$~hLv0e zammOCeR;oMxrZOKlMBkD)yoJ#>ooSsVfxB9(MTpk>5X5Q#5HM#%*e;_QS4!5BJr2eLLc&wwtDi4UXoA$Sgrv z7V^h;n3Go&U%`Y&Nv6Mv7Y4aP6S4`a75>>Jg&wDF+}s&^>=5p;3uJCCDn5A3YhdHqzVIgK%_*|x4AAH?UvBhnOkR2A%QpY30$=RF*B3S$ytZBD&Lt*+^Bh_7x#~^MN#Thkm$)2zNt}N6)djT=WS+Or=b9?AGAzk+GFV=bf2(7XCERNK?aS4w`g-s+|NKAX@+p^U6#9sm zUSI5Jv#!r8&`ry|O}^ezLvh-9F?$8lTs2Y^zW5vsXpgjIuf}pTD8vxB17@{|vU{hJkla|fihDeVLvYW3T$hm5BSl?3u7$zilFH15IPO!-(9-fyokP;%m{`J= z?5>coLPg(;nd;Woh;t!hKm~BUI%yUCod{Bx_mmo_SlRMV!d0!%0F;TiLBRRbAH6Ozjft)YCp3ABm`1_=2v$|0 z6_fXI6pWrjp;lHpTTJb#6oBOQK?Jbpa!^uf5~AvoZ02i`*t|xs_j%N)+IA#K>JNBX zz5d{Z-;c%2vK#mgatOGgCglb#f=WfdWHDLiIh$Wm7qz-8&C&QS2~C=FyNLO{hhK{Kfu$aKDRJhc_1I=k5LTc8$K&)v7*AWu@s}_H&`k zjJjxKIcOO(y(9PT$5>m6Tk=F}ZFgP33;ck5G2gG#!4q2yoixo*@XJx>6b&Q~mzB+@ z`^GKfqzl1`Z9DvYTq^A$UU0m7$AgM(&Uo!&f29kf(Ky(b7y@z#La?pM1{#Cm64f@7 zIl$Rm+OtPr1^Y35%4hF_4wkQn^-($RDN_hv$xO9vxJL%s={~beppq=D;F?&=d__rc zV2_UIaHSwV+)$K0UIvp~`R=4qdqXFBxULhQT3=~Mo6b2#sxFNIRMn9vP~KBwixWFY z7F%#Y7TXKcG9Z&Yjr^)4E%wP|%fgv@8sIWC?Dg+vSp#g*bxnbY`w*`}@D%#IRd8Oh ztk#Y?S{0o^brD;75Qm@Ff??w?Y{#>ilAN47r!4J+-1_G8aVK;JA$7xe@ijG>4ivX>c<(pS z_&X7>!XIa4-)HyvzLnv|W*<5oJ>(6O5lYz9*c3hzumtZD=Zc+TQ8!PbtEL$Y2^>X0 zQqVzt7IyIcy8BC#O3R$)ps8aq-^jh(2nqT7JcC8fjMZx8iM9vxW7D)c5ff^i=mN^L z-pk;vv*ZTsIKjlrOuI@00dBYzXl^|^KAml;>u@(hW`YaN798a}VItTPf;v`?aLKgN zg8kqs4Bu54r%)Pbw`@mie}x@ZPAErI8s)ix11kRYmegLhbJ&jq4K3YR3e+K~FeQ9wt_%!@xV69=wi_0I_Z@fXGCVX$46%OAwN7 z<*M9cGK%ZawCjXso_WMGTW60#lEzM|tmrkYqU(M~~viD#&S%JtuML7WpQ&iBGo`GE+{aAQa(PP7w?mXru; zx*~?XKdP~+2B5o)U1Tibvcz|wRVOuN3vB0P_8<0CPqje3R_oh~p03M~YIzygaxWNe zquf>PXJuRLsl5KRQE)!o1b7bn)<;V1FXQGtg<_tsDtxQm*|$3g^UKlri1>4rh7xfM8Z@dwj68!;7ALGrn;AP~Y@q{VWIrB9usA13Nlc|16~+2Fp{-DFR)rbHP(&H2f!yKjOe@7qSEYpZj( zu0_8THhDJ_keu3b@?RXhEuYdFt{coWHt~ojw{l2_e41xTRogbsLS8cBv^t2%F522S=Z9|RdWZQH!;G9i`d}et$n0CsB(S_F09D7%y z`Q!Tq42K+UdLh0?JS;w@e9?=KP}@hctDzv?PL4V&SFg_Q=xK?(H{#1CeA6H1!nk!t z{SL)o7rRS&(8b}SChNVsjCvL7(qMsiZYliEdIbq@#Y`LB2e-2n5Wk;{cgdGW7!YoF z0mfwAy{yrKNn7vb#p8_B{*8LHV45N2e%sYhDp)3-pA8HX#%&+|qE>apjcr&`A#NL} zgS2|Rj>h^|9GG*tgH;~GH%6o9eG1R8OI~LRJo!}dds;t58?_NPUp%@}&53`Eip{Wh zCVaN514P;A=IkDgkl`OnjfnyZUX6wV{=TQ-fvL0Tp(>2A^trHbg<&h0yu>j-*|`yV zr-{3_0M$}#MamijxLKZN<^}UHD$x^T;jzubTaaSuxKi=Oev(+R|Es)vIlBjlZ8H`P z8aBYYKPx$O1{~WND97>y78FCu**{}%z>e#!Vu5Qr{6Yhb_t~g_L>py!%EH`1+fG|F zw3zR=3ob2ZkTjw_*LLo1F+uB>_%=oXCb?hv!;iK|-in+H;G%JwKA&@ARHivWFQa(M zlSF96x+=Lp0>P=hGAUWS0c6f^BikV8&$oQ!z8T`+HK;@)7FNJhS{N)6CKnjS+XE=} z$`j}V6l=Tb*H+iJG*|a}@At9Q{91jD5d%;mh3}U!avut`BM`kQ8@02EKFup(AX%r+ z+wB~2=!P7=y(Z)e)D9kE`syeW;ih5U$FSl@%q!bFYVd)X{mp~(eR^!!wp3zOSan&i zXvw#eLYm8rIKu_mxTi?{1E*>wMpQc*BwP6#v$ne$pb^s7@aN-hj=17J{EOrPa}e3Z zV(aAV^&nU;c>%;vieB2h1^1HgC9()fZa42l0gw=!hQYj&>JB|!;So>ctEH8BBQ_SM z9=kY(9mgf;zGA+|F#_CTCc+m#T40nsy$$3ZrQSq|@d= zI?Ue%#9t$!rprpNT_?% z9!+6_Mn%(IpuFR6)?4{)k(*h|$y$@FV{$&)es4@SQ&ZFFCf5joB%<&GYEGJ{S^UEv zE@UXCa+Cf})d-i9UYR>y_WcdJop3o1&wg60l3**Q^pp}9Wki;0;}|^EQGs#<$Hs|A zCH7lucItX-C`va{IzOWH6)-A77i&mW6gI<{?BhoMYle66RLmpt$HS&5BUURx6Kyd3 zc@7RP1L$s>Vxhe3HsyT#TX^!XYXDuG(l1!Ql>kV55&Bqy7=5Gx=D;;X9ASQ5YhCEu zV@aatQioMp3esmR$AUH3k`#OA)@->1Vr#DC$b1s_Zj z%lbQHXBWKEpJ zI4xI|CX24oxJz~`QAzN1S&e*O=gqw6qBOQM6STk=)`IV0LsIK!rnI!)qpsD`fXGcw3L_`{PlIK5>(_sGq=QB{EAL}0f_K5IV z6<+0d;YH`O>+7!_Utl_$`6meQU6vZ`fqC=70Y9K6!7>W(T^Lk!#G*e7*{HWpAaV1@?rM+d(Dy}Nqi6Mpc2baT|dlg;}7-rYZ#;9vRizoHLm2_X?#B@q)PDZ5R2 znBGe@1df`ZEVxY@wh;v^gIJsK*-kuMEn8;xRKh=(54U1}J(w}(^AYfOgNmIl0~>n4 zHwD+R|J4=l_c&smtz~Gw>axjunA@yvxc%ld%=LG{S#E-FgI`qwv0uv+@!))la=}=n z8_0GIVAkcC&SR8a>TjP<9zN;!6v%^==E&QseAL|!7>({SZ`IEcnmb#0PN)CG(k3*B zLo;L*ExuJR;sO83K3mwD{aLW@hshKRhHesoUror_lje~ztrQ_$$(wXusa?V^wl?-i z2@>k0_-m29lFh@*%UCI13N>oTm7VRe3I3+c*S|)m*Eb-@W#%t6>Ua$|>P14@+T-f! z7RaVn5JVQZdamHxQ@52BOQ2r`n47n|0Ys4jZURY7Y*qDBYBJ#nLWryTe?k_Qz@W6e+51x|GE)6}f z6fTMU&=|H_JY`?KgSTd7bHG_}?H~GMh&}M_?n*B7TRw$s=T1j@&=id-?}I4-8vM15 zd5(Wl=?_7B%@DiC9dm4?`k_Xa9#9)m@19V7$DJ_)-cqO(P~!iPv3U@Ijv8Z;Zj$C)mC;qIEC}DMU?@INdd%p%C%M`r4B8lWu6qS6jHKL1yWvGychM(w}Q zfC+K{0P6qur==(&B&R5xqPdY;sJ_(mn_Gy_U&%48{e@0ZgbY=F1{)r6IW4%3*+6V~%RXvwJmz3{EVBBXx~meR^JAl7fTf!HOnhs0JToeO@e7fO z{_>uaaM~H89-5eq;Mj3@*;6M1*|B{zwIniV=ShQSdiHxjcZ+2vfKWO>=T@S&F+m5z z5+z~McHNfiWU<XG}PX9u}D`v>3V=J-_3MjgML}fO?tu#*TAvKD}CTP;nXes&QjYv zSj!j<+8==lz|4gT35$WEe}){96Q;V)XW3URSv5&UGzGO-AHq+j-LWzrZWsG1b?E4p z-x{>Ajb9TvoO6Cyh$&!9$M|cfPd$kMBdJ-jt7)51vdZJs8?>+2>a7J+bpe8J%)Oj4 zMC)?Ex(s=Ta%7%9bHcC{`SZ7f35b+zupbaiJg}JhZP(T~rRDO&#A2huOvk|4`_`;~ zr_cm^z>T76M=!4;QzODhDyUj}noazC+fH(RJfmHmA-c*rn%sHw5oUgxIT^&gaCm?z zDkA4EAc$+oU2l+MZ3C+8t%mc=Zl~fjbtHv}vzg}y9^G*w!CG8_RsH1PJZ4COQh`1N zusKp2<*sb?upG{K?iO8QJ#}81PejQ8b}z9}*y38$fc6_&m<^qqCr0Amm1)??^-sGLF5iC*?_J@Q=<9Q`V1FozIQOYY#W>O-R){z zCT?k4B^AlnDm!WGp0?pTjk|MBGZQL7%P1TcW2?*@#wY+JKRfW0pE*-=rhDG7B=<6G zTJY#00=CZrogY)Svz)b*wK4x$BGYcd#mSXhGax!QmkSCEbWCH4s_`qLSXM~g;#}R= zXeJ~i@6F=55EG`$K;#9l@Lq^rPc1oOI^@b(w$JF=O?zM;E%F4fV`O#`37Vi;CtV?qdafYC3iKbDNQ0LwE z@9|7zTrx~hFgS7-M?ixA0Kh0OV(L%RLG`>BgTm8iz}99=_lCSV=F9R*q54l^6m)Dj z{2FqfXh%>zG9|S?OePed7+@6gEdsBm!eN(+syeCny&g(xZhCJUXO7%;M%NZ_F|Agx z$i(v12XIxD&4g<2IOdQ2p6T%Ny=dXnc+u;i&&g!y4pmZ?0NfG;1;YLTw?wm)s@SU~n-SQBPv`4N$hVR<;RTAquV2-hDV-qX0zM~07PE=)t|5wKptVBj?Ryh14Nx7(*?Ypsa{ z9tsvnttxGtR*u*^QN|!Oj$Y_wRD<}EsqG>*$5vGF^O)d!{6*&0l$2m44E_gp(zREW zzN2Rwr3K>Nhy}z66m8VQN~PQ|VxydS8nI1(Da?r?rN^TtaqXk(8ihuu%{?hm&=88i zFhb&wg8`L$Q(Quve{3A1yFCLg>YF&4s68txaUaM8c_J zW=B-QiJ@JHbGJ$zr`E?vr5Rpp#7nN!=jxhXW7Z0BQ(4p}g%Pt%n4BYCgm zvA^>}d?GKVhPw?v}2qnC!p7psLH8k!VK8lsJt{b=DOG?HOqSXjH zE5j}dZtB=MW%SQEcSg5^NnSZs=F3;e9KnJ<|A?F6R5mZR@Ti-$pueGBCAeaBS5`fr z)W1B!8GGUzwShmE`@< zzTBF;2-@1aT`vwNquV*YRGXA66h+!7rHzdqdCGAw8FH6%80J?q1`T;J^1|%hJ>$!G zdQN22j$bNTQdnLGt?R;1v2~?#RUP2#{S@#8+gu8 zvqfE!d_TsIK>ejUu-1U~j&rVdp?N*Y272?500&&5I?mkM5-t#EMVvlz7H5wvydp1N zmi=OE)4?dAoH{t2qZ6N9e9PU!ozQlE{9t^#h*xNB*C|N1*C3>l?d|;T`Rg!gz`FV> zEIiL3XxMZ4)%Y-2_T#><;ov^jk?bloDtz*j{em^ZDsXx;tJX@_qy*}zleA<)Fl}#o z@D^AJY#IS(cX;_o<7z-Iha?jp{e64^4?SIr;yAErt$P82SCUc}f7CRV3>c$u($zvO=&ZJ|@2J$Kz6Y%81LGP?+YKm$MW#3?Kxx#d#Fvb1 z58aR$_J@Zrz3SRhjBm_^fR3XT;fh+vg^KJ7{L~U8xW>tGIPE)oh;Yma)(G51&W7;P zGYIG@g{V3XND3<8(@nhOuB5_&v+}wR{%(W&Vd-r53O8~~`8DXS31?D~mfvpbb@t}1 znSW_%!~z?^Ji^c!2))WK);@MinzqcA+Dql!Glar*a1WiaE6p{^x*o^}AqaLVi;^2~ z1Xl`!e+X(wk6rE#>CERm+|r&E37l`wbMGF_UzcC?7b#dh{RBcsHk}^(RnJW=?W2^< z9i0{???MPXP;wM+c51@(q&|JwD`uRXm*Rp~wUqDYqj9}DHna<1KGtlx?6$J_nYSi| zy@st~a}OFi&MGjk{rq>*=X9oH6Tj|^~oxUq)T^wM9&6D{?*FGgy zE<9(>^Da)=alqD6N{c>gkz?<2j{4*M;NsFnS7D)Oa!0!d1LNtu(?c5h_wWvMP+g-h zmm9)A=q9BpEnmbUlbanLC?Ld34*{Wyak=U%7${!!2De=|oWU_Al>~adr1qpiG9Gu7 z-AW2ZU3~TX`yccW#4Soc3Bd-z`jfE}5FzBIZ^J1_7_UG@b6@t98VqQSMqLX`A{%ya zZzAEUJs;{T$)f-U`I>_17%qGtWrco-}`;^dyH`P-yOnf?x-KmJs)O#wjVaR%8j9w7^i?6n z+zqu%@;dc^*8@$_Axsz3)Me_Xvxp+&!hogY%ACP_>i7c{l(P&+7IGMtS^@9w;~6PF zeId@@8}tUMg?)crH9zj79GbL!yJ&sXgGnXQn)W6cAIimfM(5mQ=x^1hu4iGpR)nV1 z^I86+Fj1hE4i3o!Fv%6-FH|_q)#{RrUn33fZc$(wS=(O-j*-!(CWueDM3ftp(WX{d z)n@sh=Fb|ES;#_#cw=fYywm!BPlf^z#2OyF>FP-LHK5=O_jqvTW1z3OyZb$9dM~Dg z8L6%A!%!&qtj?22W6Kkl-$y48Z{)?Ac>7Fkq9{YO+R9OJ4@cIgp2QI$PI30wWw+R3 zdd6(lL~pbeo!rjc6Id})LdBCj)3)ie9B;Hc|0bgxBHA$7%J&^A^y%P6arrRax{9N0 zm-?&=3yS~sfi@OM>~{KlE>SDcn!<#`YfH)OS32 z8lBoEX?8BDPSZR!fJ_JESlb?EE&F>tQ;gY6xCuUm(N=sOXKP@`k@^2PR zTUb8Y*q)GF?BAz%KEBY8C!&0n)bHM@SK-S(e)UX;)iYtx>QTci!{<{_MU0V~=2o4M zE>5&`%CWd~U63P+@L?BKIeU6Vc2qGrZ&KhN)ndDxZMJm+Zb37|) z+a96F%T!4H!lTD@dF!23-GdKtCJPp}6EjJcb2h~yA;~j!NUq$KJbD7%b=CTHCgW4PsA|0D6;Kx9mlK0v-pKQn0Uymz+ z9H}j+_66)lA1~_`em@z=F%@r`)R*uaXxp}^;gpMR2MoyfgVSBoJYvVh+B6C-DcE6_ z9dKvT>#Ux4<@}!>mXKO&S{e~rJMZr67mws%1^#HkgRb$jgX(s)7x5EkD*8~P-os_{ zm#UD9@8b)1zsdLa;g>-|s~nm&{eJ&XYv&sxMIDFnQ`D@`EYLE$?Ig`q)V=+8du8Hj zB6@~e+J#Be?%v+HcDL*8AM})h=|yf@QIKY-FU%n^D#4IMsH7}>A<2PgB9a&wbQD+= zM?v;{=g_x!|%O@8}JR(fV~;|V*IUqYe=E)M6^qp){3p; zKK=ngD$7H4b<3Qla5VJQXuoW0rQ{47_#6a%D-r;l0~xNlWLGN9!sGY{2!D2MZUT+( zA7e4)9aTf$g?fo4n;-aoUeorqIu>@i0hM?>FuhgcrT#|W{t z5^Q5zQXu2?6p}fLpLc)@Qac;h2X0ET)nbO?yyY=*vfg3wzCQOxjW$Bqt;6_ym|@HdNlyP&!a z`#MJ*M?=3gQEVXKk2W@igBk@bY2C^0I0CSSC3*1@MDIIz@?|J~jlIX^;Obps2Nb^- zAwB|f$1MC%7PvHRYc`b!Q6q!U<($n3u|tWov2>2|>N05-MaJzdJW@RW3c76o4@=g% z?EQlKyrSL%oDX0F;P(w0$Y!Yo1NkT4i>=>6{v@WaH7@xp_=3JrKGKM6LVF;W*ktA? zj=Mvk_=kUY|BX2dq53FxLcBSfp--IbK^X{pPC}A5UA2ogdSVrk$A#pLN8P8m4$b--W>HignmTlAf|(}8TtXF zHaQ;$T#IeJ7C>-NKeyL3@VXkCgCSeknK=f-rUw1a{9I2L?;gkIUS3NcZoz}QbB>-W z^bqzpA-gSXkBt)8P|`VX&7APwKB(72J>h(O91T5=j4V+F9Cd5r0AaB!zez*%G^Thn zBF$Xt$W+ktuV)2K9(<-xkVj7)rUGEo*i&E@ay+u_UL)89Vi(?9Z%SRT_wDCBRn zV|LR8k55a%^_=xSGajcPmf)O6Se3zi|hbH=4R;M&k>e| zoCN)To0Ln+1hdXa8^w8OvN^ORtFf#Jg~)(;o&YOGBVbIm zq5Ip-B}cErz!_9wh0D#G^M!7rNN0}(g5b8=05r*ft?#>12gyF{)FYkE&@U|z%SHgU zZVZNS{ZD5bQ+X<8U0fuyxB@r3#Bh{rzNT>8yz|A_IY)6VG=HeV6ti%s56pPn_6Xr%Z@>dzz{k_GctvFKd+ky2Uc$0I7yB;|=u$@Mw-QR$CaF4p&ef#mv}s;Km5;aQ^W^JA8-m9fa} zaP*vG7I(p`Ytbpl;t!qkSm;#N3`N?DnVTN6Sn^kA$8E*1B}c~Q#CKXNZ4phs~( z98aYDJg{C|n;Kz7+zST>DK8Uo`$%}6q!=MC&T%;7vRJcB~bs|Faj=q3U806u&MT@=7wp{$z13V7OUH||9 literal 0 HcmV?d00001 diff --git a/litellm-proxy-extras/dist/litellm_proxy_extras-0.4.26.tar.gz b/litellm-proxy-extras/dist/litellm_proxy_extras-0.4.26.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..8b0e817d97892418e62bd62709497f333d451114 GIT binary patch literal 22962 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 E0DqDkN&o-= literal 0 HcmV?d00001 diff --git a/litellm-proxy-extras/pyproject.toml b/litellm-proxy-extras/pyproject.toml index eddb563d55..862ebaffe2 100644 --- a/litellm-proxy-extras/pyproject.toml +++ b/litellm-proxy-extras/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm-proxy-extras" -version = "0.4.25" +version = "0.4.26" description = "Additional files for the LiteLLM Proxy. Reduces the size of the main litellm package." authors = ["BerriAI"] readme = "README.md" @@ -22,7 +22,7 @@ requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "0.4.25" +version = "0.4.26" version_files = [ "pyproject.toml:version", "../requirements.txt:litellm-proxy-extras==", diff --git a/poetry.lock b/poetry.lock index c5f5a87894..e5c304ea77 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.2.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.2.0 and should not be changed by hand. [[package]] name = "a2a-sdk" @@ -275,7 +275,7 @@ files = [ {file = "annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320"}, {file = "annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4"}, ] -markers = {main = "python_version >= \"3.10\" and (extra == \"mlflow\" or extra == \"proxy\") or extra == \"proxy\""} +markers = {main = "(extra == \"mlflow\" or extra == \"proxy\") and python_version >= \"3.10\" or extra == \"proxy\""} [[package]] name = "annotated-types" @@ -343,7 +343,7 @@ zookeeper = ["kazoo"] name = "async-timeout" version = "5.0.1" description = "Timeout context manager for asyncio programs" -optional = true +optional = false python-versions = ">=3.8" groups = ["main"] markers = "python_full_version < \"3.11.3\" and (extra == \"extra-proxy\" or extra == \"proxy\" or python_version < \"3.11\")" @@ -557,48 +557,48 @@ files = [ [[package]] name = "boto3" -version = "1.36.0" +version = "1.40.76" description = "The AWS SDK for Python" optional = true -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] markers = "extra == \"proxy\"" files = [ - {file = "boto3-1.36.0-py3-none-any.whl", hash = "sha256:d0ca7a58ce25701a52232cc8df9d87854824f1f2964b929305722ebc7959d5a9"}, - {file = "boto3-1.36.0.tar.gz", hash = "sha256:159898f51c2997a12541c0e02d6e5a8fe2993ddb307b9478fd9a339f98b57e00"}, + {file = "boto3-1.40.76-py3-none-any.whl", hash = "sha256:8df6df755727be40ad9e309cfda07f9a12c147e17b639430c55d4e4feee8a167"}, + {file = "boto3-1.40.76.tar.gz", hash = "sha256:16f4cf97f8dd8e0aae015f4dc66219bd7716a91a40d1e2daa0dafa241a4761c5"}, ] [package.dependencies] -botocore = ">=1.36.0,<1.37.0" +botocore = ">=1.40.76,<1.41.0" jmespath = ">=0.7.1,<2.0.0" -s3transfer = ">=0.11.0,<0.12.0" +s3transfer = ">=0.14.0,<0.15.0" [package.extras] crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.36.26" +version = "1.40.76" description = "Low-level, data-driven core of boto 3." optional = true -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] markers = "extra == \"proxy\"" files = [ - {file = "botocore-1.36.26-py3-none-any.whl", hash = "sha256:4e3f19913887a58502e71ef8d696fe7eaa54de7813ff73390cd5883f837dfa6e"}, - {file = "botocore-1.36.26.tar.gz", hash = "sha256:4a63bcef7ecf6146fd3a61dc4f9b33b7473b49bdaf1770e9aaca6eee0c9eab62"}, + {file = "botocore-1.40.76-py3-none-any.whl", hash = "sha256:fe425d386e48ac64c81cbb4a7181688d813df2e2b4c78b95ebe833c9e868c6f4"}, + {file = "botocore-1.40.76.tar.gz", hash = "sha256:2b16024d68b29b973005adfb5039adfe9099ebe772d40a90ca89f2e165c495dc"}, ] [package.dependencies] jmespath = ">=0.7.1,<2.0.0" python-dateutil = ">=2.1,<3.0.0" urllib3 = [ - {version = ">=1.25.4,<2.2.0 || >2.2.0,<3", markers = "python_version >= \"3.10\""}, {version = ">=1.25.4,<1.27", markers = "python_version < \"3.10\""}, + {version = ">=1.25.4,<2.2.0 || >2.2.0,<3", markers = "python_version >= \"3.10\""}, ] [package.extras] -crt = ["awscrt (==0.23.8)"] +crt = ["awscrt (==0.28.4)"] [[package]] name = "cachetools" @@ -607,7 +607,7 @@ description = "Extensible memoizing collections and decorators" optional = true python-versions = ">=3.9" groups = ["main"] -markers = "python_version >= \"3.10\" and (extra == \"mlflow\" or extra == \"extra-proxy\") or extra == \"extra-proxy\"" +markers = "(extra == \"extra-proxy\" or extra == \"google\" or extra == \"mlflow\") and python_version >= \"3.10\" or extra == \"google\" or extra == \"extra-proxy\"" files = [ {file = "cachetools-6.2.2-py3-none-any.whl", hash = "sha256:6c09c98183bf58560c97b2abfcedcbaf6a896a490f534b031b661d3723b45ace"}, {file = "cachetools-6.2.2.tar.gz", hash = "sha256:8e6d266b25e539df852251cfd6f990b4bc3a141db73b939058d809ebd2590fc6"}, @@ -1393,6 +1393,24 @@ docs = ["myst-parser (==0.18.0)", "sphinx (==5.1.1)"] ssh = ["paramiko (>=2.4.3)"] websockets = ["websocket-client (>=1.3.0)"] +[[package]] +name = "docstring-parser" +version = "0.17.0" +description = "Parse Python docstrings in reST, Google and Numpydoc format" +optional = true +python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"google\"" +files = [ + {file = "docstring_parser-0.17.0-py3-none-any.whl", hash = "sha256:cf2569abd23dce8099b300f9b4fa8191e9582dda731fd533daf54c4551658708"}, + {file = "docstring_parser-0.17.0.tar.gz", hash = "sha256:583de4a309722b3315439bb31d64ba3eebada841f2e2cee23b99df001434c912"}, +] + +[package.extras] +dev = ["pre-commit (>=2.16.0) ; python_version >= \"3.9\"", "pydoctor (>=25.4.0)", "pytest"] +docs = ["pydoctor (>=25.4.0)"] +test = ["pytest"] + [[package]] name = "docutils" version = "0.21.2" @@ -1453,7 +1471,7 @@ files = [ {file = "fastapi-0.121.3-py3-none-any.whl", hash = "sha256:0c78fc87587fcd910ca1bbf5bc8ba37b80e119b388a7206b39f0ecc95ebf53e9"}, {file = "fastapi-0.121.3.tar.gz", hash = "sha256:0055bc24fe53e56a40e9e0ad1ae2baa81622c406e548e501e717634e2dfbc40b"}, ] -markers = {main = "python_version >= \"3.10\" and (extra == \"mlflow\" or extra == \"proxy\") or extra == \"proxy\""} +markers = {main = "(extra == \"mlflow\" or extra == \"proxy\") and python_version >= \"3.10\" or extra == \"proxy\""} [package.dependencies] annotated-doc = ">=0.0.2" @@ -1982,7 +2000,7 @@ description = "Google API client core library" optional = true python-versions = ">=3.7" groups = ["main"] -markers = "python_version >= \"3.14\" and extra == \"extra-proxy\"" +markers = "python_version >= \"3.14\" and (extra == \"extra-proxy\" or extra == \"google\")" files = [ {file = "google_api_core-2.25.2-py3-none-any.whl", hash = "sha256:e9a8f62d363dc8424a8497f4c2a47d6bcda6c16514c935629c257ab5d10210e7"}, {file = "google_api_core-2.25.2.tar.gz", hash = "sha256:1c63aa6af0d0d5e37966f157a77f9396d820fba59f9e43e9415bc3dc5baff300"}, @@ -2010,7 +2028,7 @@ description = "Google API client core library" optional = true python-versions = ">=3.7" groups = ["main"] -markers = "extra == \"extra-proxy\" and python_version < \"3.14\"" +markers = "python_version == \"3.9\" and (extra == \"google\" or extra == \"extra-proxy\") or python_version < \"3.14\" and (extra == \"extra-proxy\" or extra == \"google\")" files = [ {file = "google_api_core-2.28.1-py3-none-any.whl", hash = "sha256:4021b0f8ceb77a6fb4de6fde4502cecab45062e66ff4f2895169e0b35bc9466c"}, {file = "google_api_core-2.28.1.tar.gz", hash = "sha256:2b405df02d68e68ce0fbc138559e6036559e685159d148ae5861013dc201baf8"}, @@ -2020,12 +2038,12 @@ files = [ google-auth = ">=2.14.1,<3.0.0" googleapis-common-protos = ">=1.56.2,<2.0.0" grpcio = [ + {version = ">=1.33.2,<2.0.0", optional = true, markers = "extra == \"grpc\""}, {version = ">=1.49.1,<2.0.0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, - {version = ">=1.33.2,<2.0.0", optional = true, markers = "python_version < \"3.11\" and extra == \"grpc\""}, ] grpcio-status = [ - {version = ">=1.49.1,<2.0.0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, {version = ">=1.33.2,<2.0.0", optional = true, markers = "extra == \"grpc\""}, + {version = ">=1.49.1,<2.0.0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, ] proto-plus = [ {version = ">=1.22.3,<2.0.0"}, @@ -2047,7 +2065,7 @@ description = "Google Authentication Library" optional = true python-versions = ">=3.7" groups = ["main"] -markers = "python_version >= \"3.10\" and (extra == \"mlflow\" or extra == \"extra-proxy\") or extra == \"extra-proxy\"" +markers = "(extra == \"extra-proxy\" or extra == \"google\" or extra == \"mlflow\") and python_version >= \"3.10\" or extra == \"google\" or extra == \"extra-proxy\"" files = [ {file = "google_auth-2.43.0-py2.py3-none-any.whl", hash = "sha256:af628ba6fa493f75c7e9dbe9373d148ca9f4399b5ea29976519e0a3848eddd16"}, {file = "google_auth-2.43.0.tar.gz", hash = "sha256:88228eee5fc21b62a1b5fe773ca15e67778cb07dc8363adcb4a8827b52d81483"}, @@ -2056,6 +2074,7 @@ files = [ [package.dependencies] cachetools = ">=2.0.0,<7.0" pyasn1-modules = ">=0.2.1" +requests = {version = ">=2.20.0,<3.0.0", optional = true, markers = "extra == \"requests\""} rsa = ">=3.1.4,<5" [package.extras] @@ -2068,6 +2087,120 @@ requests = ["requests (>=2.20.0,<3.0.0)"] testing = ["aiohttp (<3.10.0)", "aiohttp (>=3.6.2,<4.0.0)", "aioresponses", "cryptography (<39.0.0) ; python_version < \"3.8\"", "cryptography (<39.0.0) ; python_version < \"3.8\"", "cryptography (>=38.0.3)", "cryptography (>=38.0.3)", "flask", "freezegun", "grpcio", "mock", "oauth2client", "packaging", "pyjwt (>=2.0)", "pyopenssl (<24.3.0)", "pyopenssl (>=20.0.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-localserver", "pyu2f (>=0.1.5)", "requests (>=2.20.0,<3.0.0)", "responses", "urllib3"] urllib3 = ["packaging", "urllib3"] +[[package]] +name = "google-cloud-aiplatform" +version = "1.130.0" +description = "Vertex AI API client library" +optional = true +python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"google\"" +files = [ + {file = "google_cloud_aiplatform-1.130.0-py2.py3-none-any.whl", hash = "sha256:f578ccee55655dd9e2300cfcafb178e47c3dfdcf746ad465234b875d3e955929"}, + {file = "google_cloud_aiplatform-1.130.0.tar.gz", hash = "sha256:f66aeb23f0a6848fc2d5bbdf1b5777c3cf8e06056f73ef815317abf89d5a0262"}, +] + +[package.dependencies] +docstring_parser = "<1" +google-api-core = {version = ">=1.34.1,<2.0.dev0 || >=2.8.dev0,<3.0.0", extras = ["grpc"]} +google-auth = ">=2.14.1,<3.0.0" +google-cloud-bigquery = ">=1.15.0,<3.20.0 || >3.20.0,<4.0.0" +google-cloud-resource-manager = ">=1.3.3,<3.0.0" +google-cloud-storage = [ + {version = ">=1.32.0,<4.0.0", markers = "python_version < \"3.13\""}, + {version = ">=2.10.0,<4.0.0", markers = "python_version >= \"3.13\""}, +] +google-genai = ">=1.37.0,<2.0.0" +packaging = ">=14.3" +proto-plus = ">=1.22.3,<2.0.0" +protobuf = ">=3.20.2,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<7.0.0" +pydantic = "<3" +shapely = "<3.0.0" +typing_extensions = "*" + +[package.extras] +adk = ["google-adk (>=1.0.0,<2.0.0)", "opentelemetry-instrumentation-google-genai (>=0.3b0,<1.0.0)"] +ag2 = ["ag2[gemini]", "openinference-instrumentation-autogen (>=0.1.6,<0.2)"] +ag2-testing = ["absl-py", "ag2[gemini]", "cloudpickle (>=3.0,<4.0)", "google-cloud-trace (<2)", "openinference-instrumentation-autogen (>=0.1.6,<0.2)", "opentelemetry-exporter-gcp-logging (>=1.11.0a0,<2.0.0)", "opentelemetry-exporter-gcp-trace (<2)", "opentelemetry-exporter-otlp-proto-http (<2)", "opentelemetry-sdk (<2)", "pydantic (>=2.11.1,<3)", "pytest-xdist", "typing_extensions"] +agent-engines = ["cloudpickle (>=3.0,<4.0)", "google-cloud-logging (<4)", "google-cloud-trace (<2)", "opentelemetry-exporter-gcp-logging (>=1.11.0a0,<2.0.0)", "opentelemetry-exporter-gcp-trace (<2)", "opentelemetry-exporter-otlp-proto-http (<2)", "opentelemetry-sdk (<2)", "packaging (>=24.0)", "pydantic (>=2.11.1,<3)", "typing_extensions"] +autologging = ["mlflow (>=1.27.0) ; python_version >= \"3.13\"", "mlflow (>=1.27.0,<=2.16.0) ; python_version < \"3.13\""] +cloud-profiler = ["tensorboard-plugin-profile (>=2.4.0,<2.18.0)", "werkzeug (>=2.0.0,<4.0.0)"] +datasets = ["pyarrow (>=10.0.1) ; python_version == \"3.11\"", "pyarrow (>=14.0.0) ; python_version >= \"3.12\"", "pyarrow (>=3.0.0,<8.0.0) ; python_version < \"3.11\""] +endpoint = ["requests (>=2.28.1)", "requests-toolbelt (<=1.0.0)"] +evaluation = ["jsonschema", "litellm (>=1.72.4,!=1.77.2,!=1.77.3,!=1.77.4)", "pandas (>=1.0.0)", "pyyaml", "ruamel.yaml", "scikit-learn (<1.6.0) ; python_version <= \"3.10\"", "scikit-learn ; python_version > \"3.10\"", "tqdm (>=4.23.0)"] +full = ["docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0) ; python_version < \"3.13\"", "fastapi (>=0.71.0,<=0.114.0)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-vizier (>=0.1.6)", "httpx (>=0.23.0,<=0.28.1)", "immutabledict", "jsonschema", "lit-nlp (==0.4.0) ; python_version < \"3.14\"", "litellm (>=1.72.4,!=1.77.2,!=1.77.3,!=1.77.4)", "mlflow (>=1.27.0) ; python_version >= \"3.13\"", "mlflow (>=1.27.0,<=2.16.0) ; python_version < \"3.13\"", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pyarrow (>=10.0.1) ; python_version == \"3.11\"", "pyarrow (>=14.0.0) ; python_version >= \"3.12\"", "pyarrow (>=3.0.0,<8.0.0) ; python_version < \"3.11\"", "pyarrow (>=6.0.1)", "pyyaml", "pyyaml (>=5.3.1,<7)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<2.10.dev0 || ==2.33.* || >=2.42.dev0,<=2.42.0) ; python_version < \"3.11\"", "ray[default] (>=2.5,<=2.47.1) ; python_version == \"3.11\"", "requests (>=2.28.1)", "requests-toolbelt (<=1.0.0)", "ruamel.yaml", "scikit-learn (<1.6.0) ; python_version <= \"3.10\"", "scikit-learn ; python_version > \"3.10\"", "starlette (>=0.17.1)", "tensorboard-plugin-profile (>=2.4.0,<2.18.0)", "tensorflow (>=2.3.0,<3.0.0) ; python_version < \"3.13\"", "tensorflow (>=2.3.0,<3.0.0) ; python_version < \"3.13\"", "tqdm (>=4.23.0)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)", "werkzeug (>=2.0.0,<4.0.0)"] +langchain = ["langchain (>=0.3,<0.4)", "langchain-core (>=0.3,<0.4)", "langchain-google-vertexai (>=2.0.22,<3)", "langgraph (>=0.2.45,<0.4)", "openinference-instrumentation-langchain (>=0.1.19,<0.2)"] +langchain-testing = ["absl-py", "cloudpickle (>=3.0,<4.0)", "google-cloud-trace (<2)", "langchain (>=0.3,<0.4)", "langchain-core (>=0.3,<0.4)", "langchain-google-vertexai (>=2.0.22,<3)", "langgraph (>=0.2.45,<0.4)", "openinference-instrumentation-langchain (>=0.1.19,<0.2)", "opentelemetry-exporter-gcp-logging (>=1.11.0a0,<2.0.0)", "opentelemetry-exporter-gcp-trace (<2)", "opentelemetry-exporter-otlp-proto-http (<2)", "opentelemetry-sdk (<2)", "pydantic (>=2.11.1,<3)", "pytest-xdist", "typing_extensions"] +lit = ["explainable-ai-sdk (>=1.0.0) ; python_version < \"3.13\"", "lit-nlp (==0.4.0) ; python_version < \"3.14\"", "pandas (>=1.0.0)", "tensorflow (>=2.3.0,<3.0.0) ; python_version < \"3.13\""] +llama-index = ["llama-index", "llama-index-llms-google-genai", "openinference-instrumentation-llama-index (>=3.0,<4.0)"] +llama-index-testing = ["absl-py", "cloudpickle (>=3.0,<4.0)", "google-cloud-trace (<2)", "llama-index", "llama-index-llms-google-genai", "openinference-instrumentation-llama-index (>=3.0,<4.0)", "opentelemetry-exporter-gcp-logging (>=1.11.0a0,<2.0.0)", "opentelemetry-exporter-gcp-trace (<2)", "opentelemetry-exporter-otlp-proto-http (<2)", "opentelemetry-sdk (<2)", "pydantic (>=2.11.1,<3)", "pytest-xdist", "typing_extensions"] +metadata = ["numpy (>=1.15.0)", "pandas (>=1.0.0)"] +pipelines = ["pyyaml (>=5.3.1,<7)"] +prediction = ["docker (>=5.0.3)", "fastapi (>=0.71.0,<=0.114.0)", "httpx (>=0.23.0,<=0.28.1)", "starlette (>=0.17.1)", "uvicorn[standard] (>=0.16.0)"] +private-endpoints = ["requests (>=2.28.1)", "urllib3 (>=1.21.1,<1.27)"] +ray = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "immutabledict", "pandas (>=1.0.0)", "pyarrow (>=6.0.1)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<2.10.dev0 || ==2.33.* || >=2.42.dev0,<=2.42.0) ; python_version < \"3.11\"", "ray[default] (>=2.5,<=2.47.1) ; python_version == \"3.11\""] +ray-testing = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "immutabledict", "pandas (>=1.0.0)", "pyarrow (>=6.0.1)", "pytest-xdist", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<2.10.dev0 || ==2.33.* || >=2.42.dev0,<=2.42.0) ; python_version < \"3.11\"", "ray[default] (>=2.5,<=2.47.1) ; python_version == \"3.11\"", "ray[train]", "scikit-learn (<1.6.0)", "tensorflow ; python_version < \"3.13\"", "torch (>=2.0.0,<2.1.0)", "xgboost", "xgboost_ray"] +reasoningengine = ["cloudpickle (>=3.0,<4.0)", "google-cloud-trace (<2)", "opentelemetry-exporter-gcp-logging (>=1.11.0a0,<2.0.0)", "opentelemetry-exporter-gcp-trace (<2)", "opentelemetry-exporter-otlp-proto-http (<2)", "opentelemetry-sdk (<2)", "pydantic (>=2.11.1,<3)", "typing_extensions"] +tensorboard = ["tensorboard-plugin-profile (>=2.4.0,<2.18.0)", "werkzeug (>=2.0.0,<4.0.0)"] +testing = ["Pillow", "aiohttp", "bigframes ; python_version >= \"3.10\" and python_version < \"3.14\"", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0) ; python_version < \"3.13\"", "fastapi (>=0.71.0,<=0.114.0)", "google-api-core (>=2.11,<3.0.0)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-vizier (>=0.1.6)", "google-vizier (>=0.1.6)", "grpcio-testing", "grpcio-tools (>=1.63.0) ; python_version >= \"3.13\"", "httpx (>=0.23.0,<=0.28.1)", "immutabledict", "immutabledict", "ipython", "jsonschema", "kfp (>=2.6.0,<3.0.0) ; python_version < \"3.13\"", "lit-nlp (==0.4.0) ; python_version < \"3.14\"", "litellm (>=1.72.4,!=1.77.2,!=1.77.3,!=1.77.4)", "mlflow (>=1.27.0) ; python_version >= \"3.13\"", "mlflow (>=1.27.0,<=2.16.0) ; python_version < \"3.13\"", "mock", "nltk", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "protobuf (<=5.29.4)", "pyarrow (>=10.0.1) ; python_version == \"3.11\"", "pyarrow (>=14.0.0) ; python_version >= \"3.12\"", "pyarrow (>=3.0.0,<8.0.0) ; python_version < \"3.11\"", "pyarrow (>=6.0.1)", "pytest-asyncio", "pytest-cov", "pytest-xdist", "pyyaml", "pyyaml (>=5.3.1,<7)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<2.10.dev0 || ==2.33.* || >=2.42.dev0,<=2.42.0) ; python_version < \"3.11\"", "ray[default] (>=2.5,<=2.47.1) ; python_version == \"3.11\"", "requests (>=2.28.1)", "requests-toolbelt (<=1.0.0)", "requests-toolbelt (<=1.0.0)", "ruamel.yaml", "scikit-learn (<1.6.0) ; python_version <= \"3.10\"", "scikit-learn (<1.6.0) ; python_version <= \"3.10\"", "scikit-learn ; python_version > \"3.10\"", "scikit-learn ; python_version > \"3.10\"", "sentencepiece (>=0.2.0)", "starlette (>=0.17.1)", "tensorboard-plugin-profile (>=2.4.0,<2.18.0)", "tensorboard-plugin-profile (>=2.4.0,<2.18.0)", "tensorflow (==2.14.1) ; python_version <= \"3.11\"", "tensorflow (==2.19.0) ; python_version > \"3.11\" and python_version < \"3.13\"", "tensorflow (>=2.3.0,<3.0.0) ; python_version < \"3.13\"", "tensorflow (>=2.3.0,<3.0.0) ; python_version < \"3.13\"", "torch (>=2.0.0,<2.1.0) ; python_version <= \"3.11\"", "torch (>=2.2.0) ; python_version > \"3.11\" and python_version < \"3.13\"", "tqdm (>=4.23.0)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)", "werkzeug (>=2.0.0,<4.0.0)", "werkzeug (>=2.0.0,<4.0.0)", "xgboost"] +tokenization = ["sentencepiece (>=0.2.0)"] +vizier = ["google-vizier (>=0.1.6)"] +xai = ["tensorflow (>=2.3.0,<3.0.0) ; python_version < \"3.13\""] + +[[package]] +name = "google-cloud-bigquery" +version = "3.40.0" +description = "Google BigQuery API client library" +optional = true +python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"google\"" +files = [ + {file = "google_cloud_bigquery-3.40.0-py3-none-any.whl", hash = "sha256:0469bcf9e3dad3cab65b67cce98180c8c0aacf3253d47f0f8e976f299b49b5ab"}, + {file = "google_cloud_bigquery-3.40.0.tar.gz", hash = "sha256:b3ccb11caf0029f15b29569518f667553fe08f6f1459b959020c83fbbd8f2e68"}, +] + +[package.dependencies] +google-api-core = {version = ">=2.11.1,<3.0.0", extras = ["grpc"]} +google-auth = ">=2.14.1,<3.0.0" +google-cloud-core = ">=2.4.1,<3.0.0" +google-resumable-media = ">=2.0.0,<3.0.0" +packaging = ">=24.2.0" +python-dateutil = ">=2.8.2,<3.0.0" +requests = ">=2.21.0,<3.0.0" + +[package.extras] +all = ["google-cloud-bigquery[bigquery-v2,bqstorage,geopandas,ipython,ipywidgets,matplotlib,opentelemetry,pandas,tqdm]"] +bigquery-v2 = ["proto-plus (>=1.22.3,<2.0.0)", "protobuf (>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<7.0.0)"] +bqstorage = ["google-cloud-bigquery-storage (>=2.18.0,<3.0.0)", "grpcio (>=1.47.0,<2.0.0)", "grpcio (>=1.49.1,<2.0.0) ; python_version >= \"3.11\"", "grpcio (>=1.75.1,<2.0.0) ; python_version >= \"3.14\"", "pyarrow (>=4.0.0)"] +geopandas = ["Shapely (>=1.8.4,<3.0.0)", "geopandas (>=0.9.0,<2.0.0)"] +ipython = ["bigquery-magics (>=0.6.0)", "ipython (>=7.23.1)"] +ipywidgets = ["ipykernel (>=6.2.0)", "ipywidgets (>=7.7.1)"] +matplotlib = ["matplotlib (>=3.10.3) ; python_version >= \"3.10\"", "matplotlib (>=3.7.1,<=3.9.2) ; python_version == \"3.9\""] +opentelemetry = ["opentelemetry-api (>=1.1.0)", "opentelemetry-instrumentation (>=0.20b0)", "opentelemetry-sdk (>=1.1.0)"] +pandas = ["db-dtypes (>=1.0.4,<2.0.0)", "grpcio (>=1.47.0,<2.0.0)", "grpcio (>=1.49.1,<2.0.0) ; python_version >= \"3.11\"", "grpcio (>=1.75.1,<2.0.0) ; python_version >= \"3.14\"", "pandas (>=1.3.0)", "pandas-gbq (>=0.26.1)", "pyarrow (>=3.0.0)"] +tqdm = ["tqdm (>=4.23.4,<5.0.0)"] + +[[package]] +name = "google-cloud-core" +version = "2.5.0" +description = "Google Cloud API client core library" +optional = true +python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"google\"" +files = [ + {file = "google_cloud_core-2.5.0-py3-none-any.whl", hash = "sha256:67d977b41ae6c7211ee830c7912e41003ea8194bff15ae7d72fd6f51e57acabc"}, + {file = "google_cloud_core-2.5.0.tar.gz", hash = "sha256:7c1b7ef5c92311717bd05301aa1a91ffbc565673d3b0b4163a52d8413a186963"}, +] + +[package.dependencies] +google-api-core = ">=1.31.6,<2.0.dev0 || >2.3.0,<3.0.0" +google-auth = ">=1.25.0,<3.0.0" + +[package.extras] +grpc = ["grpcio (>=1.38.0,<2.0.0) ; python_version < \"3.14\"", "grpcio (>=1.75.1,<2.0.0) ; python_version >= \"3.14\"", "grpcio-status (>=1.38.0,<2.0.0)"] + [[package]] name = "google-cloud-iam" version = "2.20.0" @@ -2115,6 +2248,204 @@ grpc-google-iam-v1 = ">=0.12.4,<1.0.0dev" proto-plus = ">=1.22.3,<2.0.0dev" protobuf = ">=3.20.2,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<6.0.0dev" +[[package]] +name = "google-cloud-resource-manager" +version = "1.16.0" +description = "Google Cloud Resource Manager API client library" +optional = true +python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"google\"" +files = [ + {file = "google_cloud_resource_manager-1.16.0-py3-none-any.whl", hash = "sha256:fb9a2ad2b5053c508e1c407ac31abfd1a22e91c32876c1892830724195819a28"}, + {file = "google_cloud_resource_manager-1.16.0.tar.gz", hash = "sha256:cc938f87cc36c2672f062b1e541650629e0d954c405a4dac35ceedee70c267c3"}, +] + +[package.dependencies] +google-api-core = {version = ">=1.34.1,<2.0.dev0 || >=2.11.dev0,<3.0.0", extras = ["grpc"]} +google-auth = ">=2.14.1,<2.24.0 || >2.24.0,<2.25.0 || >2.25.0,<3.0.0" +grpc-google-iam-v1 = ">=0.14.0,<1.0.0" +grpcio = [ + {version = ">=1.33.2,<2.0.0"}, + {version = ">=1.75.1,<2.0.0", markers = "python_version >= \"3.14\""}, +] +proto-plus = [ + {version = ">=1.22.3,<2.0.0"}, + {version = ">=1.25.0,<2.0.0", markers = "python_version >= \"3.13\""}, +] +protobuf = ">=3.20.2,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<7.0.0" + +[[package]] +name = "google-cloud-storage" +version = "3.4.1" +description = "Google Cloud Storage API client library" +optional = true +python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"google\" and python_version >= \"3.14\"" +files = [ + {file = "google_cloud_storage-3.4.1-py3-none-any.whl", hash = "sha256:972764cc0392aa097be8f49a5354e22eb47c3f62370067fb1571ffff4a1c1189"}, + {file = "google_cloud_storage-3.4.1.tar.gz", hash = "sha256:6f041a297e23a4b485fad8c305a7a6e6831855c208bcbe74d00332a909f82268"}, +] + +[package.dependencies] +google-api-core = ">=2.15.0,<3.0.0" +google-auth = ">=2.26.1,<3.0.0" +google-cloud-core = ">=2.4.2,<3.0.0" +google-crc32c = ">=1.1.3,<2.0.0" +google-resumable-media = ">=2.7.2,<3.0.0" +requests = ">=2.22.0,<3.0.0" + +[package.extras] +protobuf = ["protobuf (>=3.20.2,<7.0.0)"] +tracing = ["opentelemetry-api (>=1.1.0,<2.0.0)"] + +[[package]] +name = "google-cloud-storage" +version = "3.8.0" +description = "Google Cloud Storage API client library" +optional = true +python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"google\" and python_version < \"3.14\"" +files = [ + {file = "google_cloud_storage-3.8.0-py3-none-any.whl", hash = "sha256:78cfeae7cac2ca9441d0d0271c2eb4ebfa21aa4c6944dd0ccac0389e81d955a7"}, + {file = "google_cloud_storage-3.8.0.tar.gz", hash = "sha256:cc67952dce84ebc9d44970e24647a58260630b7b64d72360cedaf422d6727f28"}, +] + +[package.dependencies] +google-api-core = ">=2.27.0,<3.0.0" +google-auth = ">=2.26.1,<3.0.0" +google-cloud-core = ">=2.4.2,<3.0.0" +google-crc32c = ">=1.1.3,<2.0.0" +google-resumable-media = ">=2.7.2,<3.0.0" +requests = ">=2.22.0,<3.0.0" + +[package.extras] +grpc = ["google-api-core[grpc] (>=2.27.0,<3.0.0)", "grpc-google-iam-v1 (>=0.14.0,<1.0.0)", "grpcio (>=1.33.2,<2.0.0) ; python_version < \"3.14\"", "grpcio (>=1.75.1,<2.0.0) ; python_version >= \"3.14\"", "grpcio-status (>=1.76.0,<2.0.0)", "proto-plus (>=1.22.3,<2.0.0) ; python_version < \"3.13\"", "proto-plus (>=1.25.0,<2.0.0) ; python_version >= \"3.13\"", "protobuf (>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<7.0.0)"] +protobuf = ["protobuf (>=3.20.2,<7.0.0)"] +tracing = ["opentelemetry-api (>=1.1.0,<2.0.0)"] + +[[package]] +name = "google-crc32c" +version = "1.8.0" +description = "A python wrapper of the C library 'Google CRC32C'" +optional = true +python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"google\"" +files = [ + {file = "google_crc32c-1.8.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:0470b8c3d73b5f4e3300165498e4cf25221c7eb37f1159e221d1825b6df8a7ff"}, + {file = "google_crc32c-1.8.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:119fcd90c57c89f30040b47c211acee231b25a45d225e3225294386f5d258288"}, + {file = "google_crc32c-1.8.0-cp310-cp310-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6f35aaffc8ccd81ba3162443fabb920e65b1f20ab1952a31b13173a67811467d"}, + {file = "google_crc32c-1.8.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:864abafe7d6e2c4c66395c1eb0fe12dc891879769b52a3d56499612ca93b6092"}, + {file = "google_crc32c-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:db3fe8eaf0612fc8b20fa21a5f25bd785bc3cd5be69f8f3412b0ac2ffd49e733"}, + {file = "google_crc32c-1.8.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:014a7e68d623e9a4222d663931febc3033c5c7c9730785727de2a81f87d5bab8"}, + {file = "google_crc32c-1.8.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:86cfc00fe45a0ac7359e5214a1704e51a99e757d0272554874f419f79838c5f7"}, + {file = "google_crc32c-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:19b40d637a54cb71e0829179f6cb41835f0fbd9e8eb60552152a8b52c36cbe15"}, + {file = "google_crc32c-1.8.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:17446feb05abddc187e5441a45971b8394ea4c1b6efd88ab0af393fd9e0a156a"}, + {file = "google_crc32c-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:71734788a88f551fbd6a97be9668a0020698e07b2bf5b3aa26a36c10cdfb27b2"}, + {file = "google_crc32c-1.8.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:4b8286b659c1335172e39563ab0a768b8015e88e08329fa5321f774275fc3113"}, + {file = "google_crc32c-1.8.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:2a3dc3318507de089c5384cc74d54318401410f82aa65b2d9cdde9d297aca7cb"}, + {file = "google_crc32c-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:14f87e04d613dfa218d6135e81b78272c3b904e2a7053b841481b38a7d901411"}, + {file = "google_crc32c-1.8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cb5c869c2923d56cb0c8e6bcdd73c009c36ae39b652dbe46a05eb4ef0ad01454"}, + {file = "google_crc32c-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:3cc0c8912038065eafa603b238abf252e204accab2a704c63b9e14837a854962"}, + {file = "google_crc32c-1.8.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:3ebb04528e83b2634857f43f9bb8ef5b2bbe7f10f140daeb01b58f972d04736b"}, + {file = "google_crc32c-1.8.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:450dc98429d3e33ed2926fc99ee81001928d63460f8538f21a5d6060912a8e27"}, + {file = "google_crc32c-1.8.0-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3b9776774b24ba76831609ffbabce8cdf6fa2bd5e9df37b594221c7e333a81fa"}, + {file = "google_crc32c-1.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:89c17d53d75562edfff86679244830599ee0a48efc216200691de8b02ab6b2b8"}, + {file = "google_crc32c-1.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:57a50a9035b75643996fbf224d6661e386c7162d1dfdab9bc4ca790947d1007f"}, + {file = "google_crc32c-1.8.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:e6584b12cb06796d285d09e33f63309a09368b9d806a551d8036a4207ea43697"}, + {file = "google_crc32c-1.8.0-cp314-cp314-macosx_12_0_x86_64.whl", hash = "sha256:f4b51844ef67d6cf2e9425983274da75f18b1597bb2c998e1c0a0e8d46f8f651"}, + {file = "google_crc32c-1.8.0-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b0d1a7afc6e8e4635564ba8aa5c0548e3173e41b6384d7711a9123165f582de2"}, + {file = "google_crc32c-1.8.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8b3f68782f3cbd1bce027e48768293072813469af6a61a86f6bb4977a4380f21"}, + {file = "google_crc32c-1.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:d511b3153e7011a27ab6ee6bb3a5404a55b994dc1a7322c0b87b29606d9790e2"}, + {file = "google_crc32c-1.8.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:ba6aba18daf4d36ad4412feede6221414692f44d17e5428bdd81ad3fc1eee5dc"}, + {file = "google_crc32c-1.8.0-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:87b0072c4ecc9505cfa16ee734b00cd7721d20a0f595be4d40d3d21b41f65ae2"}, + {file = "google_crc32c-1.8.0-cp39-cp39-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3d488e98b18809f5e322978d4506373599c0c13e6c5ad13e53bb44758e18d215"}, + {file = "google_crc32c-1.8.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:01f126a5cfddc378290de52095e2c7052be2ba7656a9f0caf4bcd1bfb1833f8a"}, + {file = "google_crc32c-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:61f58b28e0b21fcb249a8247ad0db2e64114e201e2e9b4200af020f3b6242c9f"}, + {file = "google_crc32c-1.8.0-pp311-pypy311_pp73-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:87fa445064e7db928226b2e6f0d5304ab4cd0339e664a4e9a25029f384d9bb93"}, + {file = "google_crc32c-1.8.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f639065ea2042d5c034bf258a9f085eaa7af0cd250667c0635a3118e8f92c69c"}, + {file = "google_crc32c-1.8.0.tar.gz", hash = "sha256:a428e25fb7691024de47fecfbff7ff957214da51eddded0da0ae0e0f03a2cf79"}, +] + +[[package]] +name = "google-genai" +version = "1.47.0" +description = "GenAI Python SDK" +optional = true +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version == \"3.9\" and extra == \"google\"" +files = [ + {file = "google_genai-1.47.0-py3-none-any.whl", hash = "sha256:e3851237556cbdec96007d8028b4b1f2425cdc5c099a8dc36b72a57e42821b60"}, + {file = "google_genai-1.47.0.tar.gz", hash = "sha256:ecece00d0a04e6739ea76cc8dad82ec9593d9380aaabef078990e60574e5bf59"}, +] + +[package.dependencies] +anyio = ">=4.8.0,<5.0.0" +google-auth = ">=2.14.1,<3.0.0" +httpx = ">=0.28.1,<1.0.0" +pydantic = ">=2.9.0,<3.0.0" +requests = ">=2.28.1,<3.0.0" +tenacity = ">=8.2.3,<9.2.0" +typing-extensions = ">=4.11.0,<5.0.0" +websockets = ">=13.0.0,<15.1.0" + +[package.extras] +aiohttp = ["aiohttp (<4.0.0)"] +local-tokenizer = ["protobuf", "sentencepiece (>=0.2.0)"] + +[[package]] +name = "google-genai" +version = "1.55.0" +description = "GenAI Python SDK" +optional = true +python-versions = ">=3.10" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"google\"" +files = [ + {file = "google_genai-1.55.0-py3-none-any.whl", hash = "sha256:98c422762b5ff6e16b8d9a1e4938e8e0ad910392a5422e47f5301498d7f373a1"}, + {file = "google_genai-1.55.0.tar.gz", hash = "sha256:ae9f1318fedb05c7c1b671a4148724751201e8908a87568364a309804064d986"}, +] + +[package.dependencies] +anyio = ">=4.8.0,<5.0.0" +distro = ">=1.7.0,<2" +google-auth = {version = ">=2.14.1,<3.0.0", extras = ["requests"]} +httpx = ">=0.28.1,<1.0.0" +pydantic = ">=2.9.0,<3.0.0" +requests = ">=2.28.1,<3.0.0" +sniffio = "*" +tenacity = ">=8.2.3,<9.2.0" +typing-extensions = ">=4.11.0,<5.0.0" +websockets = ">=13.0.0,<15.1.0" + +[package.extras] +aiohttp = ["aiohttp (<3.13.3)"] +local-tokenizer = ["protobuf", "sentencepiece (>=0.2.0)"] + +[[package]] +name = "google-resumable-media" +version = "2.8.0" +description = "Utilities for Google Media Downloads and Resumable Uploads" +optional = true +python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"google\"" +files = [ + {file = "google_resumable_media-2.8.0-py3-none-any.whl", hash = "sha256:dd14a116af303845a8d932ddae161a26e86cc229645bc98b39f026f9b1717582"}, + {file = "google_resumable_media-2.8.0.tar.gz", hash = "sha256:f1157ed8b46994d60a1bc432544db62352043113684d4e030ee02e77ebe9a1ae"}, +] + +[package.dependencies] +google-crc32c = ">=1.0.0,<2.0.0" + +[package.extras] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0)", "google-auth (>=1.22.0,<2.0.0)"] +requests = ["requests (>=2.18.0,<3.0.0)"] + [[package]] name = "googleapis-common-protos" version = "1.72.0" @@ -2126,7 +2457,7 @@ files = [ {file = "googleapis_common_protos-1.72.0-py3-none-any.whl", hash = "sha256:4299c5a82d5ae1a9702ada957347726b167f9f8d1fc352477702a1e851ff4038"}, {file = "googleapis_common_protos-1.72.0.tar.gz", hash = "sha256:e55a601c1b32b52d7a3e65f43563e2aa61bcd737998ee672ac9b951cd49319f5"}, ] -markers = {main = "extra == \"extra-proxy\""} +markers = {main = "extra == \"extra-proxy\" or extra == \"google\""} [package.dependencies] grpcio = {version = ">=1.44.0,<2.0.0", optional = true, markers = "extra == \"grpc\""} @@ -2194,7 +2525,7 @@ description = "Lightweight in-process concurrent programming" optional = true python-versions = ">=3.9" groups = ["main"] -markers = "python_version >= \"3.10\" and extra == \"mlflow\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")" +markers = "python_version >= \"3.10\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\") and extra == \"mlflow\"" files = [ {file = "greenlet-3.2.4-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:8c68325b0d0acf8d91dde4e6f930967dd52a5302cd4062932a6b2e7c2969f47c"}, {file = "greenlet-3.2.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:94385f101946790ae13da500603491f04a76b6e4c059dab271b3ce2e283b2590"}, @@ -2275,7 +2606,7 @@ description = "IAM API client library" optional = true python-versions = ">=3.7" groups = ["main"] -markers = "extra == \"extra-proxy\"" +markers = "extra == \"extra-proxy\" or extra == \"google\"" files = [ {file = "grpc_google_iam_v1-0.14.3-py3-none-any.whl", hash = "sha256:7a7f697e017a067206a3dfef44e4c634a34d3dee135fe7d7a4613fe3e59217e6"}, {file = "grpc_google_iam_v1-0.14.3.tar.gz", hash = "sha256:879ac4ef33136c5491a6300e27575a9ec760f6cdf9a2518798c1b8977a5dc389"}, @@ -2356,7 +2687,7 @@ files = [ {file = "grpcio-1.76.0-cp39-cp39-win_amd64.whl", hash = "sha256:acab0277c40eff7143c2323190ea57b9ee5fd353d8190ee9652369fae735668a"}, {file = "grpcio-1.76.0.tar.gz", hash = "sha256:7be78388d6da1a25c0d5ec506523db58b18be22d9c37d8d3a32c08be4987bd73"}, ] -markers = {main = "extra == \"extra-proxy\" or extra == \"grpc\""} +markers = {main = "extra == \"extra-proxy\" or extra == \"google\" or extra == \"grpc\""} [package.dependencies] typing-extensions = ">=4.12,<5.0" @@ -2371,7 +2702,7 @@ description = "Status proto mapping for gRPC" optional = true python-versions = ">=3.6" groups = ["main"] -markers = "extra == \"extra-proxy\"" +markers = "extra == \"extra-proxy\" or extra == \"google\"" files = [ {file = "grpcio-status-1.62.3.tar.gz", hash = "sha256:289bdd7b2459794a12cf95dc0cb727bd4a1742c37bd823f760236c937e53a485"}, {file = "grpcio_status-1.62.3-py3-none-any.whl", hash = "sha256:f9049b762ba8de6b1086789d8315846e094edac2c50beaf462338b301a8fd4b8"}, @@ -2389,7 +2720,7 @@ description = "WSGI HTTP Server for UNIX" optional = true python-versions = ">=3.7" groups = ["main"] -markers = "extra == \"proxy\" or (extra == \"proxy\" or extra == \"mlflow\") and platform_system != \"Windows\" and python_version >= \"3.10\"" +markers = "(python_version < \"3.14\" or extra == \"mlflow\" or extra == \"proxy\") and (platform_system != \"Windows\" or extra == \"proxy\") and (python_version >= \"3.10\" or extra == \"proxy\") and (extra == \"proxy\" or extra == \"mlflow\")" files = [ {file = "gunicorn-23.0.0-py3-none-any.whl", hash = "sha256:ec400d38950de4dfd418cff8328b2c8faed0edb0d517d3394e457c317908ca4d"}, {file = "gunicorn-23.0.0.tar.gz", hash = "sha256:f014447a0101dc57e294f6c18ca6b40227a4c90e9bdb586042628030cba004ec"}, @@ -3095,15 +3426,15 @@ files = [ [[package]] name = "litellm-proxy-extras" -version = "0.4.23" +version = "0.4.26" description = "Additional files for the LiteLLM Proxy. Reduces the size of the main litellm package." optional = true python-versions = "!=2.7.*,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*,>=3.8" groups = ["main"] markers = "extra == \"proxy\"" files = [ - {file = "litellm_proxy_extras-0.4.23-py3-none-any.whl", hash = "sha256:dfda21203dde9fd97cf364396a9b5be0cfdf00fa9846439ee33ce11b7a52f9ce"}, - {file = "litellm_proxy_extras-0.4.23.tar.gz", hash = "sha256:8e3f95576dc2a296e7f73d8c87e73628bd899b4644c45863960fe3c3762d8f64"}, + {file = "litellm_proxy_extras-0.4.26-py3-none-any.whl", hash = "sha256:6b8720c7ae0b51637a3155b6cb02783c316443fe002641061ed9162d2667aee4"}, + {file = "litellm_proxy_extras-0.4.26.tar.gz", hash = "sha256:cb9544703580172fc6436670e1a693a46ccb34a9057548c94f43e97b7b032754"}, ] [[package]] @@ -3446,8 +3777,8 @@ files = [ [package.dependencies] numpy = [ - {version = ">=1.23.3", markers = "python_version >= \"3.11\""}, {version = ">1.20"}, + {version = ">=1.23.3", markers = "python_version >= \"3.11\""}, {version = ">=1.21.2", markers = "python_version >= \"3.10\""}, {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, ] @@ -3860,7 +4191,7 @@ description = "Fundamental package for array computing in Python" optional = true python-versions = ">=3.9" groups = ["main"] -markers = "(python_version >= \"3.10\" or extra == \"extra-proxy\" or extra == \"semantic-router\") and python_version < \"3.12\" and (extra == \"extra-proxy\" or extra == \"semantic-router\" or extra == \"mlflow\")" +markers = "python_version < \"3.12\" and (python_version >= \"3.10\" or extra == \"extra-proxy\" or extra == \"semantic-router\" or extra == \"google\") and (extra == \"extra-proxy\" or extra == \"semantic-router\" or extra == \"google\" or extra == \"mlflow\")" files = [ {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, @@ -3907,7 +4238,7 @@ description = "Fundamental package for array computing in Python" optional = true python-versions = ">=3.11" groups = ["main"] -markers = "python_version >= \"3.12\" and (extra == \"extra-proxy\" or extra == \"semantic-router\" or extra == \"mlflow\") and (python_version < \"3.14\" or extra == \"mlflow\")" +markers = "python_version >= \"3.12\" and (extra == \"extra-proxy\" or extra == \"google\" or extra == \"semantic-router\" or extra == \"mlflow\") and (python_version < \"3.14\" or extra == \"mlflow\" or extra == \"google\")" files = [ {file = "numpy-2.3.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:de5672f4a7b200c15a4127042170a694d4df43c992948f5e1af57f0174beed10"}, {file = "numpy-2.3.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:acfd89508504a19ed06ef963ad544ec6664518c863436306153e13e94605c218"}, @@ -4838,7 +5169,7 @@ description = "Beautiful, Pythonic protocol buffers" optional = true python-versions = ">=3.7" groups = ["main"] -markers = "extra == \"extra-proxy\"" +markers = "extra == \"google\" or extra == \"extra-proxy\"" files = [ {file = "proto_plus-1.26.1-py3-none-any.whl", hash = "sha256:13285478c2dcf2abb829db158e1047e2f1e8d63a077d94263c2b88b043c75a66"}, {file = "proto_plus-1.26.1.tar.gz", hash = "sha256:21a515a4c4c0088a773899e23c7bbade3d18f9c66c73edd4c7ee3816bc96a012"}, @@ -4870,7 +5201,7 @@ files = [ {file = "protobuf-5.29.5-py3-none-any.whl", hash = "sha256:6cf42630262c59b2d8de33954443d94b746c952b01434fc58a417fdbd2e84bd5"}, {file = "protobuf-5.29.5.tar.gz", hash = "sha256:bc1463bafd4b0929216c35f437a8e28731a2b7fe3d98bb77a600efced5a15c84"}, ] -markers = {main = "python_version >= \"3.10\" and (extra == \"mlflow\" or extra == \"extra-proxy\") or extra == \"extra-proxy\""} +markers = {main = "(extra == \"extra-proxy\" or extra == \"google\" or extra == \"mlflow\") and python_version >= \"3.10\" or extra == \"google\" or extra == \"extra-proxy\""} [[package]] name = "pyarrow" @@ -4940,7 +5271,7 @@ description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs optional = true python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.10\" and (extra == \"mlflow\" or extra == \"extra-proxy\") or extra == \"extra-proxy\"" +markers = "(extra == \"extra-proxy\" or extra == \"google\" or extra == \"mlflow\") and python_version >= \"3.10\" or extra == \"google\" or extra == \"extra-proxy\"" files = [ {file = "pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629"}, {file = "pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034"}, @@ -4953,7 +5284,7 @@ description = "A collection of ASN.1-based protocols modules" optional = true python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.10\" and (extra == \"mlflow\" or extra == \"extra-proxy\") or extra == \"extra-proxy\"" +markers = "(extra == \"extra-proxy\" or extra == \"google\" or extra == \"mlflow\") and python_version >= \"3.10\" or extra == \"google\" or extra == \"extra-proxy\"" files = [ {file = "pyasn1_modules-0.4.2-py3-none-any.whl", hash = "sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a"}, {file = "pyasn1_modules-0.4.2.tar.gz", hash = "sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6"}, @@ -4985,7 +5316,7 @@ files = [ {file = "pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934"}, {file = "pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2"}, ] -markers = {main = "(platform_python_implementation != \"PyPy\" or extra == \"proxy\") and implementation_name != \"PyPy\"", dev = "platform_python_implementation != \"PyPy\" and implementation_name != \"PyPy\"", proxy-dev = "platform_python_implementation != \"PyPy\" and implementation_name != \"PyPy\""} +markers = {main = "implementation_name != \"PyPy\" and (platform_python_implementation != \"PyPy\" or extra == \"proxy\")", dev = "platform_python_implementation != \"PyPy\" and implementation_name != \"PyPy\"", proxy-dev = "implementation_name != \"PyPy\" and platform_python_implementation != \"PyPy\""} [[package]] name = "pydantic" @@ -5362,7 +5693,7 @@ description = "Extensions to the standard Python datetime module" optional = true python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" groups = ["main"] -markers = "python_version >= \"3.10\" and (extra == \"mlflow\" or extra == \"proxy\") or extra == \"proxy\"" +markers = "(extra == \"mlflow\" or extra == \"proxy\" or extra == \"google\") and python_version >= \"3.10\" or extra == \"proxy\" or extra == \"google\"" files = [ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, @@ -5422,7 +5753,7 @@ description = "World timezone definitions, modern and historical" optional = true python-versions = "*" groups = ["main"] -markers = "python_version >= \"3.10\" and (extra == \"mlflow\" or extra == \"proxy\") or extra == \"proxy\"" +markers = "(extra == \"mlflow\" or extra == \"proxy\") and python_version >= \"3.10\" or extra == \"proxy\"" files = [ {file = "pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00"}, {file = "pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3"}, @@ -5435,7 +5766,7 @@ description = "Python for Window Extensions" optional = true python-versions = "*" groups = ["main"] -markers = "python_version >= \"3.10\" and (extra == \"proxy\" or extra == \"mlflow\") and sys_platform == \"win32\"" +markers = "python_version >= \"3.10\" and sys_platform == \"win32\" and (extra == \"proxy\" or extra == \"mlflow\")" files = [ {file = "pywin32-311-cp310-cp310-win32.whl", hash = "sha256:d03ff496d2a0cd4a5893504789d4a15399133fe82517455e78bad62efbb7f0a3"}, {file = "pywin32-311-cp310-cp310-win_amd64.whl", hash = "sha256:797c2772017851984b97180b0bebe4b620bb86328e8a884bb626156295a63b3b"}, @@ -6241,7 +6572,7 @@ description = "Pure-Python RSA implementation" optional = true python-versions = "<4,>=3.6" groups = ["main"] -markers = "python_version >= \"3.10\" and (extra == \"mlflow\" or extra == \"extra-proxy\") or extra == \"extra-proxy\"" +markers = "(extra == \"extra-proxy\" or extra == \"google\" or extra == \"mlflow\") and python_version >= \"3.10\" or extra == \"google\" or extra == \"extra-proxy\"" files = [ {file = "rsa-4.9.1-py3-none-any.whl", hash = "sha256:68635866661c6836b8d39430f97a996acbd61bfa49406748ea243539fe239762"}, {file = "rsa-4.9.1.tar.gz", hash = "sha256:e7bdbfdb5497da4c07dfd35530e1a902659db6ff241e39d9953cad06ebd0ae75"}, @@ -6279,22 +6610,22 @@ files = [ [[package]] name = "s3transfer" -version = "0.11.3" +version = "0.14.0" description = "An Amazon S3 Transfer Manager" optional = true -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] markers = "extra == \"proxy\"" files = [ - {file = "s3transfer-0.11.3-py3-none-any.whl", hash = "sha256:ca855bdeb885174b5ffa95b9913622459d4ad8e331fc98eb01e6d5eb6a30655d"}, - {file = "s3transfer-0.11.3.tar.gz", hash = "sha256:edae4977e3a122445660c7c114bba949f9d191bae3b34a096f18a1c8c354527a"}, + {file = "s3transfer-0.14.0-py3-none-any.whl", hash = "sha256:ea3b790c7077558ed1f02a3072fb3cb992bbbd253392f4b6e9e8976941c7d456"}, + {file = "s3transfer-0.14.0.tar.gz", hash = "sha256:eff12264e7c8b4985074ccce27a3b38a485bb7f7422cc8046fee9be4983e4125"}, ] [package.dependencies] -botocore = ">=1.36.0,<2.0a.0" +botocore = ">=1.37.4,<2.0a.0" [package.extras] -crt = ["botocore[crt] (>=1.36.0,<2.0a.0)"] +crt = ["botocore[crt] (>=1.37.4,<2.0a.0)"] [[package]] name = "scikit-learn" @@ -6542,6 +6873,141 @@ postgres = ["psycopg[binary] (>=3.1.0,<4)"] qdrant = ["qdrant-client (>=1.11.1,<2)"] vision = ["pillow (>=10.2.0,<11.0.0) ; python_version < \"3.13\"", "torch (>=2.6.0) ; python_version < \"3.13\"", "torchvision (>=0.17.0) ; python_version < \"3.13\"", "transformers (>=4.36.2) ; python_version < \"3.13\""] +[[package]] +name = "shapely" +version = "2.0.7" +description = "Manipulation and analysis of geometric objects" +optional = true +python-versions = ">=3.7" +groups = ["main"] +markers = "python_version == \"3.9\" and extra == \"google\"" +files = [ + {file = "shapely-2.0.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:33fb10e50b16113714ae40adccf7670379e9ccf5b7a41d0002046ba2b8f0f691"}, + {file = "shapely-2.0.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f44eda8bd7a4bccb0f281264b34bf3518d8c4c9a8ffe69a1a05dabf6e8461147"}, + {file = "shapely-2.0.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf6c50cd879831955ac47af9c907ce0310245f9d162e298703f82e1785e38c98"}, + {file = "shapely-2.0.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04a65d882456e13c8b417562c36324c0cd1e5915f3c18ad516bb32ee3f5fc895"}, + {file = "shapely-2.0.7-cp310-cp310-win32.whl", hash = "sha256:7e97104d28e60b69f9b6a957c4d3a2a893b27525bc1fc96b47b3ccef46726bf2"}, + {file = "shapely-2.0.7-cp310-cp310-win_amd64.whl", hash = "sha256:35524cc8d40ee4752520819f9894b9f28ba339a42d4922e92c99b148bed3be39"}, + {file = "shapely-2.0.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5cf23400cb25deccf48c56a7cdda8197ae66c0e9097fcdd122ac2007e320bc34"}, + {file = "shapely-2.0.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8f1da01c04527f7da59ee3755d8ee112cd8967c15fab9e43bba936b81e2a013"}, + {file = "shapely-2.0.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f623b64bb219d62014781120f47499a7adc30cf7787e24b659e56651ceebcb0"}, + {file = "shapely-2.0.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e6d95703efaa64aaabf278ced641b888fc23d9c6dd71f8215091afd8a26a66e3"}, + {file = "shapely-2.0.7-cp311-cp311-win32.whl", hash = "sha256:2f6e4759cf680a0f00a54234902415f2fa5fe02f6b05546c662654001f0793a2"}, + {file = "shapely-2.0.7-cp311-cp311-win_amd64.whl", hash = "sha256:b52f3ab845d32dfd20afba86675c91919a622f4627182daec64974db9b0b4608"}, + {file = "shapely-2.0.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4c2b9859424facbafa54f4a19b625a752ff958ab49e01bc695f254f7db1835fa"}, + {file = "shapely-2.0.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5aed1c6764f51011d69a679fdf6b57e691371ae49ebe28c3edb5486537ffbd51"}, + {file = "shapely-2.0.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:73c9ae8cf443187d784d57202199bf9fd2d4bb7d5521fe8926ba40db1bc33e8e"}, + {file = "shapely-2.0.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9469f49ff873ef566864cb3516091881f217b5d231c8164f7883990eec88b73"}, + {file = "shapely-2.0.7-cp312-cp312-win32.whl", hash = "sha256:6bca5095e86be9d4ef3cb52d56bdd66df63ff111d580855cb8546f06c3c907cd"}, + {file = "shapely-2.0.7-cp312-cp312-win_amd64.whl", hash = "sha256:f86e2c0259fe598c4532acfcf638c1f520fa77c1275912bbc958faecbf00b108"}, + {file = "shapely-2.0.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a0c09e3e02f948631c7763b4fd3dd175bc45303a0ae04b000856dedebefe13cb"}, + {file = "shapely-2.0.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:06ff6020949b44baa8fc2e5e57e0f3d09486cd5c33b47d669f847c54136e7027"}, + {file = "shapely-2.0.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d6dbf096f961ca6bec5640e22e65ccdec11e676344e8157fe7d636e7904fd36"}, + {file = "shapely-2.0.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:adeddfb1e22c20548e840403e5e0b3d9dc3daf66f05fa59f1fcf5b5f664f0e98"}, + {file = "shapely-2.0.7-cp313-cp313-win32.whl", hash = "sha256:a7f04691ce1c7ed974c2f8b34a1fe4c3c5dfe33128eae886aa32d730f1ec1913"}, + {file = "shapely-2.0.7-cp313-cp313-win_amd64.whl", hash = "sha256:aaaf5f7e6cc234c1793f2a2760da464b604584fb58c6b6d7d94144fd2692d67e"}, + {file = "shapely-2.0.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:19cbc8808efe87a71150e785b71d8a0e614751464e21fb679d97e274eca7bd43"}, + {file = "shapely-2.0.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc19b78cc966db195024d8011649b4e22812f805dd49264323980715ab80accc"}, + {file = "shapely-2.0.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd37d65519b3f8ed8976fa4302a2827cbb96e0a461a2e504db583b08a22f0b98"}, + {file = "shapely-2.0.7-cp37-cp37m-win32.whl", hash = "sha256:25085a30a2462cee4e850a6e3fb37431cbbe4ad51cbcc163af0cea1eaa9eb96d"}, + {file = "shapely-2.0.7-cp37-cp37m-win_amd64.whl", hash = "sha256:1a2e03277128e62f9a49a58eb7eb813fa9b343925fca5e7d631d50f4c0e8e0b8"}, + {file = "shapely-2.0.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e1c4f1071fe9c09af077a69b6c75f17feb473caeea0c3579b3e94834efcbdc36"}, + {file = "shapely-2.0.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3697bd078b4459f5a1781015854ef5ea5d824dbf95282d0b60bfad6ff83ec8dc"}, + {file = "shapely-2.0.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e9fed9a7d6451979d914cb6ebbb218b4b4e77c0d50da23e23d8327948662611"}, + {file = "shapely-2.0.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2934834c7f417aeb7cba3b0d9b4441a76ebcecf9ea6e80b455c33c7c62d96a24"}, + {file = "shapely-2.0.7-cp38-cp38-win32.whl", hash = "sha256:2e4a1749ad64bc6e7668c8f2f9479029f079991f4ae3cb9e6b25440e35a4b532"}, + {file = "shapely-2.0.7-cp38-cp38-win_amd64.whl", hash = "sha256:8ae5cb6b645ac3fba34ad84b32fbdccb2ab321facb461954925bde807a0d3b74"}, + {file = "shapely-2.0.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4abeb44b3b946236e4e1a1b3d2a0987fb4d8a63bfb3fdefb8a19d142b72001e5"}, + {file = "shapely-2.0.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cd0e75d9124b73e06a42bf1615ad3d7d805f66871aa94538c3a9b7871d620013"}, + {file = "shapely-2.0.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7977d8a39c4cf0e06247cd2dca695ad4e020b81981d4c82152c996346cf1094b"}, + {file = "shapely-2.0.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0145387565fcf8f7c028b073c802956431308da933ef41d08b1693de49990d27"}, + {file = "shapely-2.0.7-cp39-cp39-win32.whl", hash = "sha256:98697c842d5c221408ba8aa573d4f49caef4831e9bc6b6e785ce38aca42d1999"}, + {file = "shapely-2.0.7-cp39-cp39-win_amd64.whl", hash = "sha256:a3fb7fbae257e1b042f440289ee7235d03f433ea880e73e687f108d044b24db5"}, + {file = "shapely-2.0.7.tar.gz", hash = "sha256:28fe2997aab9a9dc026dc6a355d04e85841546b2a5d232ed953e3321ab958ee5"}, +] + +[package.dependencies] +numpy = ">=1.14,<3" + +[package.extras] +docs = ["matplotlib", "numpydoc (==1.1.*)", "sphinx", "sphinx-book-theme", "sphinx-remove-toctrees"] +test = ["pytest", "pytest-cov"] + +[[package]] +name = "shapely" +version = "2.1.2" +description = "Manipulation and analysis of geometric objects" +optional = true +python-versions = ">=3.10" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"google\"" +files = [ + {file = "shapely-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7ae48c236c0324b4e139bea88a306a04ca630f49be66741b340729d380d8f52f"}, + {file = "shapely-2.1.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eba6710407f1daa8e7602c347dfc94adc02205ec27ed956346190d66579eb9ea"}, + {file = "shapely-2.1.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ef4a456cc8b7b3d50ccec29642aa4aeda959e9da2fe9540a92754770d5f0cf1f"}, + {file = "shapely-2.1.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e38a190442aacc67ff9f75ce60aec04893041f16f97d242209106d502486a142"}, + {file = "shapely-2.1.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:40d784101f5d06a1fd30b55fc11ea58a61be23f930d934d86f19a180909908a4"}, + {file = "shapely-2.1.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f6f6cd5819c50d9bcf921882784586aab34a4bd53e7553e175dece6db513a6f0"}, + {file = "shapely-2.1.2-cp310-cp310-win32.whl", hash = "sha256:fe9627c39c59e553c90f5bc3128252cb85dc3b3be8189710666d2f8bc3a5503e"}, + {file = "shapely-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:1d0bfb4b8f661b3b4ec3565fa36c340bfb1cda82087199711f86a88647d26b2f"}, + {file = "shapely-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:91121757b0a36c9aac3427a651a7e6567110a4a67c97edf04f8d55d4765f6618"}, + {file = "shapely-2.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:16a9c722ba774cf50b5d4541242b4cce05aafd44a015290c82ba8a16931ff63d"}, + {file = "shapely-2.1.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cc4f7397459b12c0b196c9efe1f9d7e92463cbba142632b4cc6d8bbbbd3e2b09"}, + {file = "shapely-2.1.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:136ab87b17e733e22f0961504d05e77e7be8c9b5a8184f685b4a91a84efe3c26"}, + {file = "shapely-2.1.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:16c5d0fc45d3aa0a69074979f4f1928ca2734fb2e0dde8af9611e134e46774e7"}, + {file = "shapely-2.1.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6ddc759f72b5b2b0f54a7e7cde44acef680a55019eb52ac63a7af2cf17cb9cd2"}, + {file = "shapely-2.1.2-cp311-cp311-win32.whl", hash = "sha256:2fa78b49485391224755a856ed3b3bd91c8455f6121fee0db0e71cefb07d0ef6"}, + {file = "shapely-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:c64d5c97b2f47e3cd9b712eaced3b061f2b71234b3fc263e0fcf7d889c6559dc"}, + {file = "shapely-2.1.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fe2533caae6a91a543dec62e8360fe86ffcdc42a7c55f9dfd0128a977a896b94"}, + {file = "shapely-2.1.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ba4d1333cc0bc94381d6d4308d2e4e008e0bd128bdcff5573199742ee3634359"}, + {file = "shapely-2.1.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0bd308103340030feef6c111d3eb98d50dc13feea33affc8a6f9fa549e9458a3"}, + {file = "shapely-2.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1e7d4d7ad262a48bb44277ca12c7c78cb1b0f56b32c10734ec9a1d30c0b0c54b"}, + {file = "shapely-2.1.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e9eddfe513096a71896441a7c37db72da0687b34752c4e193577a145c71736fc"}, + {file = "shapely-2.1.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:980c777c612514c0cf99bc8a9de6d286f5e186dcaf9091252fcd444e5638193d"}, + {file = "shapely-2.1.2-cp312-cp312-win32.whl", hash = "sha256:9111274b88e4d7b54a95218e243282709b330ef52b7b86bc6aaf4f805306f454"}, + {file = "shapely-2.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:743044b4cfb34f9a67205cee9279feaf60ba7d02e69febc2afc609047cb49179"}, + {file = "shapely-2.1.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b510dda1a3672d6879beb319bc7c5fd302c6c354584690973c838f46ec3e0fa8"}, + {file = "shapely-2.1.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8cff473e81017594d20ec55d86b54bc635544897e13a7cfc12e36909c5309a2a"}, + {file = "shapely-2.1.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fe7b77dc63d707c09726b7908f575fc04ff1d1ad0f3fb92aec212396bc6cfe5e"}, + {file = "shapely-2.1.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7ed1a5bbfb386ee8332713bf7508bc24e32d24b74fc9a7b9f8529a55db9f4ee6"}, + {file = "shapely-2.1.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a84e0582858d841d54355246ddfcbd1fce3179f185da7470f41ce39d001ee1af"}, + {file = "shapely-2.1.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dc3487447a43d42adcdf52d7ac73804f2312cbfa5d433a7d2c506dcab0033dfd"}, + {file = "shapely-2.1.2-cp313-cp313-win32.whl", hash = "sha256:9c3a3c648aedc9f99c09263b39f2d8252f199cb3ac154fadc173283d7d111350"}, + {file = "shapely-2.1.2-cp313-cp313-win_amd64.whl", hash = "sha256:ca2591bff6645c216695bdf1614fca9c82ea1144d4a7591a466fef64f28f0715"}, + {file = "shapely-2.1.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2d93d23bdd2ed9dc157b46bc2f19b7da143ca8714464249bef6771c679d5ff40"}, + {file = "shapely-2.1.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:01d0d304b25634d60bd7cf291828119ab55a3bab87dc4af1e44b07fb225f188b"}, + {file = "shapely-2.1.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8d8382dd120d64b03698b7298b89611a6ea6f55ada9d39942838b79c9bc89801"}, + {file = "shapely-2.1.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:19efa3611eef966e776183e338b2d7ea43569ae99ab34f8d17c2c054d3205cc0"}, + {file = "shapely-2.1.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:346ec0c1a0fcd32f57f00e4134d1200e14bf3f5ae12af87ba83ca275c502498c"}, + {file = "shapely-2.1.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6305993a35989391bd3476ee538a5c9a845861462327efe00dd11a5c8c709a99"}, + {file = "shapely-2.1.2-cp313-cp313t-win32.whl", hash = "sha256:c8876673449f3401f278c86eb33224c5764582f72b653a415d0e6672fde887bf"}, + {file = "shapely-2.1.2-cp313-cp313t-win_amd64.whl", hash = "sha256:4a44bc62a10d84c11a7a3d7c1c4fe857f7477c3506e24c9062da0db0ae0c449c"}, + {file = "shapely-2.1.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:9a522f460d28e2bf4e12396240a5fc1518788b2fcd73535166d748399ef0c223"}, + {file = "shapely-2.1.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1ff629e00818033b8d71139565527ced7d776c269a49bd78c9df84e8f852190c"}, + {file = "shapely-2.1.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f67b34271dedc3c653eba4e3d7111aa421d5be9b4c4c7d38d30907f796cb30df"}, + {file = "shapely-2.1.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:21952dc00df38a2c28375659b07a3979d22641aeb104751e769c3ee825aadecf"}, + {file = "shapely-2.1.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1f2f33f486777456586948e333a56ae21f35ae273be99255a191f5c1fa302eb4"}, + {file = "shapely-2.1.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:cf831a13e0d5a7eb519e96f58ec26e049b1fad411fc6fc23b162a7ce04d9cffc"}, + {file = "shapely-2.1.2-cp314-cp314-win32.whl", hash = "sha256:61edcd8d0d17dd99075d320a1dd39c0cb9616f7572f10ef91b4b5b00c4aeb566"}, + {file = "shapely-2.1.2-cp314-cp314-win_amd64.whl", hash = "sha256:a444e7afccdb0999e203b976adb37ea633725333e5b119ad40b1ca291ecf311c"}, + {file = "shapely-2.1.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:5ebe3f84c6112ad3d4632b1fd2290665aa75d4cef5f6c5d77c4c95b324527c6a"}, + {file = "shapely-2.1.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5860eb9f00a1d49ebb14e881f5caf6c2cf472c7fd38bd7f253bbd34f934eb076"}, + {file = "shapely-2.1.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b705c99c76695702656327b819c9660768ec33f5ce01fa32b2af62b56ba400a1"}, + {file = "shapely-2.1.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a1fd0ea855b2cf7c9cddaf25543e914dd75af9de08785f20ca3085f2c9ca60b0"}, + {file = "shapely-2.1.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:df90e2db118c3671a0754f38e36802db75fe0920d211a27481daf50a711fdf26"}, + {file = "shapely-2.1.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:361b6d45030b4ac64ddd0a26046906c8202eb60d0f9f53085f5179f1d23021a0"}, + {file = "shapely-2.1.2-cp314-cp314t-win32.whl", hash = "sha256:b54df60f1fbdecc8ebc2c5b11870461a6417b3d617f555e5033f1505d36e5735"}, + {file = "shapely-2.1.2-cp314-cp314t-win_amd64.whl", hash = "sha256:0036ac886e0923417932c2e6369b6c52e38e0ff5d9120b90eef5cd9a5fc5cae9"}, + {file = "shapely-2.1.2.tar.gz", hash = "sha256:2ed4ecb28320a433db18a5bf029986aa8afcfd740745e78847e330d5d94922a9"}, +] + +[package.dependencies] +numpy = ">=1.21" + +[package.extras] +docs = ["matplotlib", "numpydoc (==1.1.*)", "sphinx", "sphinx-book-theme", "sphinx-remove-toctrees"] +test = ["pytest", "pytest-cov", "scipy-doctest"] + [[package]] name = "shellingham" version = "1.5.4" @@ -6561,7 +7027,7 @@ description = "Python 2 and 3 compatibility utilities" optional = true python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" groups = ["main"] -markers = "python_version >= \"3.10\" and (extra == \"mlflow\" or extra == \"proxy\") or extra == \"proxy\"" +markers = "(extra == \"mlflow\" or extra == \"proxy\" or extra == \"google\") and python_version >= \"3.10\" or extra == \"proxy\" or extra == \"google\"" files = [ {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, @@ -6984,6 +7450,26 @@ examples = ["aiosqlite (>=0.21.0)", "fastapi (>=0.115.12)", "sqlalchemy[asyncio] granian = ["granian (>=2.3.1)"] uvicorn = ["uvicorn (>=0.34.0)"] +[[package]] +name = "starlette" +version = "0.49.3" +description = "The little ASGI library that shines." +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "starlette-0.49.3-py3-none-any.whl", hash = "sha256:b579b99715fdc2980cf88c8ec96d3bf1ce16f5a8051a7c2b84ef9b1cdecaea2f"}, + {file = "starlette-0.49.3.tar.gz", hash = "sha256:1c14546f299b5901a1ea0e34410575bc33bbd741377a10484a54445588d00284"}, +] +markers = {main = "python_version == \"3.9\" and extra == \"proxy\"", dev = "python_version == \"3.9\""} + +[package.dependencies] +anyio = ">=3.6.2,<5" +typing-extensions = {version = ">=4.10.0", markers = "python_version < \"3.13\""} + +[package.extras] +full = ["httpx (>=0.27.0,<0.29.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.18)", "pyyaml"] + [[package]] name = "starlette" version = "0.50.0" @@ -7044,7 +7530,7 @@ description = "Retry code until it succeeds" optional = true python-versions = ">=3.9" groups = ["main"] -markers = "extra == \"extra-proxy\" and python_version < \"3.14\"" +markers = "(extra == \"extra-proxy\" or extra == \"google\") and (python_version < \"3.14\" or extra == \"google\")" files = [ {file = "tenacity-9.1.2-py3-none-any.whl", hash = "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138"}, {file = "tenacity-9.1.2.tar.gz", hash = "sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb"}, @@ -7522,7 +8008,7 @@ description = "The lightning-fast ASGI server." optional = true python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.10\" and (extra == \"mlflow\" or extra == \"proxy\") or extra == \"proxy\"" +markers = "(extra == \"mlflow\" or extra == \"proxy\") and python_version >= \"3.10\" or extra == \"proxy\"" files = [ {file = "uvicorn-0.31.1-py3-none-any.whl", hash = "sha256:adc42d9cac80cf3e51af97c1851648066841e7cfb6993a4ca8de29ac1548ed41"}, {file = "uvicorn-0.31.1.tar.gz", hash = "sha256:f5167919867b161b7bcaf32646c6a94cdbd4c3aa2eb5c17d36bb9aa5cfd8c493"}, @@ -7543,7 +8029,7 @@ description = "Fast implementation of asyncio event loop on top of libuv" optional = true python-versions = ">=3.8.0" groups = ["main"] -markers = "sys_platform != \"win32\" and extra == \"proxy\"" +markers = "extra == \"proxy\" and sys_platform != \"win32\"" files = [ {file = "uvloop-0.21.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ec7e6b09a6fdded42403182ab6b832b71f4edaf7f37a9a0e371a01db5f0cb45f"}, {file = "uvloop-0.21.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:196274f2adb9689a289ad7d65700d37df0c0930fd8e4e743fa4834e850d7719d"}, @@ -7596,7 +8082,7 @@ description = "Waitress WSGI server" optional = true python-versions = ">=3.9.0" groups = ["main"] -markers = "python_version >= \"3.10\" and extra == \"mlflow\" and platform_system == \"Windows\"" +markers = "python_version >= \"3.10\" and platform_system == \"Windows\" and extra == \"mlflow\"" files = [ {file = "waitress-3.0.2-py3-none-any.whl", hash = "sha256:c56d67fd6e87c2ee598b76abdd4e96cfad1f24cacdea5078d382b1f9d7b5ed2e"}, {file = "waitress-3.0.2.tar.gz", hash = "sha256:682aaaf2af0c44ada4abfb70ded36393f0e307f4ab9456a215ce0020baefc31f"}, @@ -7613,7 +8099,7 @@ description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" optional = true python-versions = ">=3.9" groups = ["main"] -markers = "extra == \"proxy\"" +markers = "extra == \"google\" or extra == \"proxy\"" files = [ {file = "websockets-15.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d63efaa0cd96cf0c5fe4d581521d9fa87744540d4bc999ae6e08595a1014b45b"}, {file = "websockets-15.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac60e3b188ec7574cb761b08d50fcedf9d77f1530352db4eef1707fe9dee7205"}, @@ -7996,6 +8482,7 @@ type = ["pytest-mypy"] [extras] caching = ["diskcache"] extra-proxy = ["a2a-sdk", "azure-identity", "azure-keyvault-secrets", "google-cloud-iam", "google-cloud-kms", "prisma", "redisvl", "resend"] +google = ["google-cloud-aiplatform"] grpc = ["grpcio", "grpcio"] mlflow = ["mlflow"] proxy = ["PyJWT", "apscheduler", "azure-identity", "azure-storage-blob", "backoff", "boto3", "cryptography", "fastapi", "fastapi-sso", "gunicorn", "litellm-enterprise", "litellm-proxy-extras", "mcp", "orjson", "polars", "pynacl", "python-multipart", "pyyaml", "rich", "rq", "soundfile", "uvicorn", "uvloop", "websockets"] @@ -8005,4 +8492,4 @@ utils = ["numpydoc"] [metadata] lock-version = "2.1" python-versions = ">=3.9,<4.0" -content-hash = "f6a98e687d478db6e30274a4cf70391960775cbf648da0783558444da3a662ea" +content-hash = "ee8411854731cb6cc038a6135d7589a81789a269e718a226101953ba24fb2033" diff --git a/pyproject.toml b/pyproject.toml index 1e2dfe43d8..862611879a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -61,7 +61,7 @@ boto3 = { version = "1.40.76", optional = true } redisvl = {version = "^0.4.1", optional = true, markers = "python_version >= '3.9' and python_version < '3.14'"} mcp = {version = ">=1.25.0,<2.0.0", optional = true, python = ">=3.10"} a2a-sdk = {version = "^0.3.22", optional = true, python = ">=3.10"} -litellm-proxy-extras = {version = "0.4.25", optional = true} +litellm-proxy-extras = {version = "0.4.26", optional = true} rich = {version = "13.7.1", optional = true} litellm-enterprise = {version = "0.1.27", optional = true} diskcache = {version = "^5.6.1", optional = true} diff --git a/requirements.txt b/requirements.txt index 7f662d9ef8..9e32cd7950 100644 --- a/requirements.txt +++ b/requirements.txt @@ -50,7 +50,7 @@ sentry_sdk==2.21.0 # for sentry error handling detect-secrets==1.5.0 # Enterprise - secret detection / masking in LLM requests cryptography==44.0.1 tzdata==2025.1 # IANA time zone database -litellm-proxy-extras==0.4.25 # for proxy extras - e.g. prisma migrations +litellm-proxy-extras==0.4.26 # for proxy extras - e.g. prisma migrations llm-sandbox==0.3.31 # for skill execution in sandbox ### LITELLM PACKAGE DEPENDENCIES python-dotenv==1.0.1 # for env