From 7072e20a4697f6c68b4677a4937c7f6564f89cf1 Mon Sep 17 00:00:00 2001 From: Pratyush Shukla Date: Fri, 6 Dec 2024 10:14:00 +0530 Subject: [PATCH] [Docs] OpenAI Integration docs for the website (#549) * minor fix in anthropic doc * add openai docs in integrations section * divert step for installation with tooltip * additional step for installing cohere sdk * change `params` to `logs` in `ActionEvent` * fix incorrect version mention * add section for `ollama` installation` * arrange integrations alphabetically and add `openai.mdx` * remove Python * modify link to openai.com * cleaner sections * add openai branding images * add sync example notebook * minor fix * minor correction in description * add async example notebook * something * updated examples `README.md` * add a `README.md` (kinda) to the `openai_examples` directory * minor correction * replace link --------- Co-authored-by: reibs --- docs/images/external/openai/openai-lockup.png | Bin 0 -> 43790 bytes .../external/openai/openai-logomark.png | Bin 0 -> 19878 bytes .../external/openai/openai-white-lockup.png | Bin 0 -> 47056 bytes .../external/openai/openai-white-logomark.png | Bin 0 -> 21382 bytes docs/mint.json | 9 +- docs/v1/integrations/anthropic.mdx | 17 +- docs/v1/integrations/cohere.mdx | 13 + docs/v1/integrations/ollama.mdx | 10 + docs/v1/integrations/openai.mdx | 195 +++++++++++++++ examples/README.md | 17 +- examples/openai-gpt.ipynb | 2 +- examples/openai_examples/README.md | 21 ++ .../openai_example_async.ipynb | 235 ++++++++++++++++++ .../openai_examples/openai_example_sync.ipynb | 207 +++++++++++++++ 14 files changed, 714 insertions(+), 12 deletions(-) create mode 100644 docs/images/external/openai/openai-lockup.png create mode 100644 docs/images/external/openai/openai-logomark.png create mode 100644 docs/images/external/openai/openai-white-lockup.png create mode 100644 docs/images/external/openai/openai-white-logomark.png create mode 100644 docs/v1/integrations/openai.mdx create mode 100644 examples/openai_examples/README.md create mode 100644 examples/openai_examples/openai_example_async.ipynb create mode 100644 examples/openai_examples/openai_example_sync.ipynb diff --git a/docs/images/external/openai/openai-lockup.png b/docs/images/external/openai/openai-lockup.png new file mode 100644 index 0000000000000000000000000000000000000000..17f72fc48a063032471307b8dccf02e1e6d0b8bc GIT binary patch literal 43790 zcmY(r2|U!__dhP}6eWqWyj5h#T9&aEQH-%B*~^l3Y-4B8B3T;m7zQ(lFl5WVj4j(V zWEUFC$i&cO-;L$}@=l-c?>~=6j~=~V_jT^M=bn3(=Q+0sJ)Qe!nJzOiFfg3ed~nZz zf#Fml0|VouQzw8Yyg@|~z+b1`ADF-y7?>{{{5isqjO7F#9)TO&S7j*d;+_Tmam@ZM z^ezKKaSZd$)8h;bA3tc`yZg}Z$nRZzvaL~qj8m{t$mxQMS>*{LMGQTrHtFRj%#XaT zC}$`rmni&)F;~5E!1QQK!st1(7qyI5=0`Fs%3Uz~p5*g)xObj}`}>ipTru#E`R=9O zSevhsd)FFIWe-ih9N8Rk-k)Df^Pg+*Pb0fgxmzVgC z1n5QH%~lKYqOZ7Bh9EY&omU`(s&UIJLn^yUe?~FH>px+fOJb4an{3`G&dEIKt1j5V zzvoXM@@>6wIK=!7e$%l*zFXa9_7OcIiKUW1x^*Inv! zBdL@FwP>96fvD{KS#v9Q;@F=t6R+448>c$MH*Y#i61jP8h-8GB`W{UESI~Hx#~EDd#-OJ*ggjh4Ju9;fIl0GWrh<%!-LC zYT8E*pH{u!I%gcdDGIx270oeZ!W^1?_<{j@clOb;Vx*So+r0cRVCVk)?#mKRVN)js zosHvI|59E&mbE!SQ`^B-MBZp=W`Y)42eBLuU%b;c5zS?+@9=kQEy3%}CH==z0p|8R z5r4T}3`r{SDRM~Pyo(ht{Lu6F@oQQ2rxAW3=J(T2ACfymeVPBk-4x`0&bwv9Br5js zaVRprDVF-*DrDZ&ObRnW4_~~8bZ30J$1R&`FKYUigUhmflk%{OVsCsVr_W&y2Qol~ zQv?e89u>cEkPSu_gAX6~uv6SyvL^kbI}ha*`Vn#PXo@1(HhnnePJAk^;Oep75cAey z?!#v}s1W|~XYcDP#w%Iw?arKtXYUND5l30>1DWLa|K zmw!XcKmJz_jU=yzC&ar7*j?{ppCNd@5ocL~9DX6Z)W8T6zUJW*zS(ec+n{E7hp#eZ z*YGdB`~L4L+EPy~4Og|Bx*y8SU0>s8Pb`S`02{+ddCamjJE!|+cxcpS_nj+R`b2Mb zv_vWhiTLw)qKQ4R=Y@Ew;4rQ+FcQULY05{xqs%*`^Jdf z`|riFs(#8lFJme6U76tO-7T8){%^4a*`19d`h?89cF}Gv-8Up~ZUKSD8P*fTmkA4p zUr)>c)Z;+T9z^!kUxjaerd6t-hbGzPnV?$Q;hT%=MJlIs%eg1}g`^HuKX@#Rb1pjqYkPXV(fVZe5Sm;dPF<6*$vO zI=t5Z8^$0n%>$_6KF2~dMy>X%sh_0j=T_{RuXx&BX7abJm^jd%H8S+P14W(~zc>^= ztns;#1{f;Do3#ExU;nPE2%AGWh3aVQn=e;PhQioSjS^7h!iMyvrWj+B52%I*uWu04M5Q~%HDqsY zor*F}n?v)(}(bBfTYMBht#5 z6-UHGYR@xiXq_j9SB9uiV=OeC%11S}c7yA7O;n3H{)pucMazTOa1xo9PYmpGZYK$3 z$5VbjB#c`ueHp3@3F&W4qf0KC4T@=sm-v)|T5lZ+^Y)}LOdvNV>31-fg_)CtdO9)3 z!`Q3j?N#wV145mYbj^q}HmyeN2?Gw1su$A#n&$Vy-TjaHwjM{&Km)G8i(-vg_vKxF z8ISox0b$3ejv~aJfhwfyDbeJTU|&&gn@Pnb_~5)CAK>;5exY&6B|gU;K)E}^LJicR zbZ?B>Xl8+pE>_uj~9ked_s}hReHylMA zcM^rJ-Jb5r1JxwG@g;Z<7Rvsag+Z}tr7Zq>u(nIHP=zCHn4KDfQ8QOJKGe_9K)NDK z;5FanEN9~Vr?(BgZk^wVqRluRE@M&0a9gLTL9ylJQ(Iu_uaOqg6(~}> zg+dW7RQU7h9fFLbNCdrpbL$-6G2U$MTY!hHcbs~B$-8Yu==R~^mA{o$^lDpd(cKQ! z2PMf5s*icZmHV;&q41uWj4Q~T!&_hRON?RhNU1==dmoM7lRXsKdk;)md=A3c<>-cS z+mG4@W`rsSg~E)#?#iJD6|C{Xg>hr!CgN=v+guCOyyy?z&^Gg|f|lPS))%VMz`N{5 z5fv2qnxw-8pB>IDuswL^*8p->ZHT9sMqlXupF;p3vdiM#<6ljsPjiM}BfVYt@W0QV=at2~ z?804+y2)hiQq114$%bz#9|6aPsRmA2M5yXI? zrK1^;UqYDQgVB~Rhi-2o8rXr{?SLI@Ipp|g66=8kZTNYw$eP3)x~tGQk<;xQY`Jb) z`8v;yK(_-hxQdlId-6F?toXjotA4ijLNo-$g}i~uZV@Fs~2Hy;^Ei#!Y&sxI+pSM{52 z#7>>#qdIEBNcxdy+U2lCD+Cr!Zews7U>#N5LJ}Su5d3|Ny$phbW7h(*7JttAm?+#m z)cD#Vz`eNMoR)}$4l?FELUtxhQq^j;F+9=pUrm@}>SHKBi#;xenf>9pQOO)vU^~+x z@d7-@gDEFK2Ul>>oWIK7zxR^WzPfZ)Xh!_PZ-eyz8x80l!`Lg!_?GpR8F`QBs;+=SA&$)tAm`$@ z)^U~L|MQ>XfckFMGSwxQ`rsUY$mL5HmU8F{u~emjobBTO=s%cN63ccNqRn23|AR3FE8*{B{)e& zBu#f$Rn}=B{`EoPO($K?bg_#)MJ|E=D)pJ%=x+`J#r_veWz}!IA+%ULjgXY{PL%RV zCk`EQ^}1A3L9-KF_K{sfF~&nKCISXH9;f!IFhTesFX`sEx3<$p4&MZsAiNjI1R?CB zuO=-D4SoK1qT>ykyP zknDW22{YjljJOS*`78tD3Dk|C{TaeACKB7UW#A^6Q)m?rr82HT@Z! zH2ccX(EPrA>N{<&4;bS8Lqf?9V-a@7{brPG9@Llm+ybeGi1OfB|F;^WuHOCKg)j41|M9yuH^f!im5!YghR8;eRP0b z)}-6W4+GlefFaob44b$*y=wJvIY9eIU%MQd>PV}~1d@`+Y4fL$b*fiafUbd zBU1L5@XCi?$^D`4n3l%Eu|nUu)IbsukjBo zyNr@pJGK063m7MvRdh9O;m|ZHlDNYJ+?dAx>9UWjj~%8)=H(w}aM$YR57sfGw&9z~ zdHzu1b-19pTiFVg3kOGH041tSQHdi>Ifu5s>ZHws`Afz>Q0*R@S7AIC zr0;>(P!Dcp!C)i{ z^8gH8(UmLPD)VPLiBBN5ZQTf{-0MEB33cGuJHL@)q0;VL@o}W>1oUso{5d6|&vx(o zMaTAp@DgWn+jRbfMfUCzpA!R|Z zx0ilyu%y$c&Z?mQoAJzp=fq~s89qX6dE+ZWQmK#VmXKo0-Z?9E>o+p-^e%6b@`6fd z0579r3u=vIT=BC_L1<`#?8EMQB&Wr7EV*SskBw!5G&dd}&)s1i^$e;OJ0cbu(m>n0jh+f!7+` z0)#3263D(>stIW&a8R|Gd~`KKu>nQJ>$-*r3xQJwoZk_3P14}z3V>O8&tn%iAsBQS z;~J}sBrW26qaa@vD_`+^1yJ!7iloOyF{j9|C3qY6o{Mq|l(fz3d}{3V z6Qz@`eS_6z8SLSpGcVVLgmXm-KMWsuN~dy7GujzkG?|flaFPf%lfvd-xp}U2@vub} zq26f^InwBP{DmL%PFu?23gDY!6-P`Z?d$dfTnlBjeiTTe02+ERw6gLF_g{%esl@<| zwgVb1QDxrmSI-Hv8)toKTiU3iP-zTq23>Cxx~O=#X)pgk9($8=Oh)YBq#%uX`oM@y z7-W}~r@AAnSg-^!Sjv@{h&=a4h7ZqL3Kuq)J{VBE{hvT?*LHi8>Iq?RIQpC4j%?2F$qYbEBkj#t)|(@2f9mAlw`_qptd=I#k{HrGWTqD96@WItZXTJp0k>2-LNuKMb3;3lN;ncm?^S+Eg_>B&yZr&1uq5t@=?JDg3(PMKua1yDBpRG!4qN^ z;S*(mnZWvKn}@}LPUkK34<6}-2caat_U`?b)YlNwlxpsWI=X#rm1zWjbu2ms#mXGU z{zyA5Ga4iM4f=UM2{3;L649}iZ|QcVJ(*F`SX6`|Zb-Lyw}F&jz(FaYrqw4p5E$@yNkl3s93} ziIZ{_%O%0_6@|wqOMuW#5ZIQ*$1?R~@#)6d-+hByi-}cC_l@NF%VaJ;d9?{f1g2Kh z$3Qf|DwX=_OgNdW0_SG$P#e(3Fm*}$CNE$2AH)QE=~$N|rlRnCo89Mr*rfks?i;Qpya#z*Bi$maU}FywZhjtD0w`w_pq!VM z(`Gx+Caj#7GUY{Q`@P>gw|cr`BXzkDxLc1v+QiSJh_L+4h}YC1dG;^gZ}kmlS%pXJ6YeUz=O z|HLkU@!*E`EVk+a^X2u%s?TjB{oU^p4%e@_mOnlKT41UDWTy&KDn`# zoRRNg!aO|;sI=mNN}oK?0o&pV_XVO6X?sVPYwE}ZP49y}IGAl&Fjli5*^nyz6Iy(B z(SFL#Y=}+Y#$5e~Fu)xJ@H7ic<*kD5=0Ffgvf&dU#}Bs)7voApSk-xinsDKC!3m zRSEfoaa?5xl&8IUXeFQLZC72OU!3>Q@`~Rnm(R*`qYA%Y*?Sod(rP5V%4{)f)lUv; z9;H{i-sk~1f)aL`{|821Y+ zY-SQTBxOo@h=XV%E}pufrA9#OCx#rG;RkfR;N!(=Ut? zcxqVq7XItDov2i9?q- zCP>a_&o{bm6trGctlv$1DC9?*AZ(a>k~&;x{=tG&MHoKbD3qN))B)~EE4g!fGW#I7 z-_GKk+-x`fgsj)ACNXPU+UBdT<0Y?;2;KZ4HP3|A8j3~a5V6urRnS1z$5Y*Ss9Big zhfT3H%vFBP{ptLnO;Aq};0j!i0KsA?uOg7Lc%H^E80A$rX8!ism$wn1UuJ#Px%%)PJKh!WFLLP8P`(u!6=!>UZrt_4FC z@r$b;uYWfKt-i1!X}mj#-R7hQ>0Z-cuH5-z6W_U*zJiaB$l1YJaWV5OtJ#VRu16`PXQJ6aU>cf$^48)(>pEX}Zz|1^xT-Aw zG{Qs9{1JFwOV#ALA!0h82h#4kt{*#VIQY{5l=J-+WEi(c*9Y?{Gp+t`z4t}%j{gl| z>dULD07Itwk&s$K>R>6uw~qylnb)~+t9f3cTXHq(?qGU8VM2xp>m+3-S|}pv#D-|E z!H|cs9e~hFMM8N|t>K;pzKYEvQ$a%1uvYK^wI_;Qv+>d|z<1)EgeAUbk|j?IyxUjz z68+)1ZlXX%JysQMSL<8Jw}4FRxs>?anys7oBtsuqh`TeA9c}U8)Pg}*)Ux93gXsI0 zbgSuJ^^7%R{Ku?DTdjtb$_*0*jh%CH4F)}{(7~nyZ4h+kZse#`&6caOIO)1{z>l3`*A{ArD0s))Nk{@j;m=;p z@_H*2CNR>tHCM`!z)5_F2B3+1n#o^(@Mq`4R*J6v@Y13WxUrPkMcRTD2iU1+0Wxbz z6pOV{WoEq;$fd-uvqh&U==^IQ>(5tAOE_d^lMT@Zc4kboTF+Yq6$fS6#>&ERYpfXG7SD);~Yhba2i$((ipX6=A0 zZw=XYFr1oA{s?sWC)+E4O@ZD_$o#^t^R(SGa}yraMp#w*^~myP_MP2!rHKy=x<*|e zJe5HQHIIo{Wmfd^%{xY7Mo&sKt>S~p_g3sNU@+60)iv-8Iw0eZ3S0>phO zcis;E`Y!>ab866b?*exDARe)&apj+IXnIE$icS*G9SMIP5bxY0*jNn9H~^DEI}$S* zfArSuI)2^lkIHz3 z5}RBMg4<0R6fuYQkb~!Zrw5ME#uZ`3Q2p5x1-qe33PMVa4#5xWsdaNZ5(C%oHmS$9H?tt6Ktuh1H6k zS?UOi)&o?@<2cFQu7-mvMbYnWtFi$bVwhOsYMIGv*BQV!kq_RtDmws$gyNEE`!zT8E#KmS=Uj%+65m#tODS2G+GvZ4nM9WzNwO{QO4m zvCy)?a?-dM5 z$@;4SW#j8Rz;0IjZ#P}wfQ`G{6=l=r<{vmUkCJ@W#iQWbXLY0x0nMf3zn|!`*BYa$ zb?VPUM;t5ytPBUcX@W3Bw{+_PJmps#d&6Z`X_&6E^9>Mr_kSYKl}}XE#Q;V13-68j z>_mq_l3C(pyRqG!Wzqd$qN&i5`fp_L8xRe;O^-G%ug`Q1VaDDEMOU$~dJh$6j$$e# zOXlhm^3#lG@2$f|OZh&GR$e@)DlKyM^DDE8E-HNv!)5@d3WKlf$nZ7!V!^nYeVxnF zmM2gOCr(!j!j{8{h*)10Tj)CC;t)Puh&4~vB<_)6TXCl4{sp-h&;7(Ewb6@8t{*=A zEKaBuzP)wd?+r*}3Rusg9NeK5UHti&*d+UL!2+@A_$~oR=(u8sDd(d1c8M)iK7Lbx zwK6L6n+@Q8rG{NbwcN=CU$m;&*zxSfs58MX-^o;dLayKJ(te9Eb z)cloIpOyVl&hM!5=6ew_eP|1vTb@rM0G5F&yD}oC)5M?%o?hbl zGM~qeHb00P=BXV$$zU0D<9D7?K*)h(5Um&M{R~P%tmg%|9@iv%o$XMjm49Rp#d`j1 z6myRKfs<>H}b!$D~Rv^t_3cEzlOH;qY+ys*L<51i1(-LL8D z$*1l#x6gkHk>yab^eQx5peo_`Mz9NTJj+5UxWz4(=BJ{ulh7d`hXdLyL=l$KEzoT( zEp(=NXW9n4Ts??ZZN5?*GFydYEHc&hXb83%ZCL`$S0f(C?eT?v7aNZ6IiV|%6d<=3 z`}vqhJG%_6H^MV%7n%TIo90tjNrsc}e;*UKxF-hod_oMc5D$56)r5eW#1Js6k{OPg zW7p4s!|e5ISH;M-bLJV&nmh^l8#K4(5p72}N(7J*b;ZuX$mCk;QEX>1leVeZCo}8w z9HugM&`I=UEEw^fZ<3O4;py~XTolM7NQ)|8QQqeLMkJkwL#cNjJ!vY2_C8vH0W^;u z2jH(~qD&S|7}QF@0Z6;^jeQ}y!0?}A_FmD9aU3GeK-Hb?z4TOoArnb!GB~dOcj^2o z@#0Kne13#Tt3PWgk<^*_Ev27Ho3qo~FRqXHtAED92rp2N^YuS~y*Kl^`-`T|k+VXk z6v`f*vG)Y1diLo!5|q(bz(*9vu|SN1*=zeT`u55&E_ftAOmP1cYjLNkLy4vtd!j@v zG`h_{&a+ND1(MM7LV&g*-89*&7T@bF&wg+q?YsMm0DSSme!KjV;GJ7qO~1)!TT%5E zxbf~_9hC|&nd*~L+?h+S3f4kN9u>Xu1(Goh7>{Y`dmvPDAChdaU|)Tjo4`I)3Lwj6 zE|>~rCH!7B4x|Hw9TQ#Hig9PY%l&f;{y=xZTCN9=pB=EPg9yQh^iKlrY078w4<7bLpbv9M%hZpJrRD1jT@!3`8m*|5*k{Jq4tO8YFF zub5VJZYwRfk5#DyViKy?ZfM`$^`sA7^SYi^T3C1V#`*wbTmnf$wD)^m9Dh-rqAf~lT(2^!nK8?z6Y4CL`})* zA1kZ0wY6>iLH~d~<@C$CAc>^D!H8{GD5=wg8Dh%Evtplh^j`Iecvn99sv|M^6R3f5 z>RS&%%5HAJ5J`vn<$xBwYPf0*=8dzSxL*n=QD`CbzWe3f6$nhAg)F5?exwiWZEvh% zFn$)0x98uR08@O=W(pF0l}cG`^?TfeCHA8cgZFf1e@R+P*#q%zws{EJ-3pUWRhxB^Ixbg!=||Tklc;ku=&Nxm zeXYQ*J~21k7Q45(bap>KpE>%I-~@tC=XddOK{!b>XzptDX=&ktcCD)jO#MxhI4_^) zMeS7|mQ6S@D-u}}xn8S)`HY9MdyauDaO+Qx*-2_H?K&apH-V#{Q?JvIkRQjhm(Pxl z{-m?7zs-v{c4=c6*uxrhbkFi>Qy>n48lJ!cS~HfMWqc@Z1jmrU^bN=;F|Hcw$MatZ^^wM|VOa#bq)`SnKJ}4v7p4_Q^|z zH|2rj6a7qwOj9M-QOI+*+5~%2ncqxI@)|x__9s2@L?2(eQUP?1)CTrCvWrh1gmDtF3E8(52gECv#8k3F z;9keWVNx40hkqYuzoNX4uhw+=`c0Ndz`k4N%TtTYnoe%d4X)Ng`R{#gw- znclk0o3~dLofGLIgwM)0{qjHx_k`PUJNRU6w??c*ThGXA`KA0ir9) zYu;z=rnY@%l0yjaCI1|#mpEvwGNDmq%5+=3tv*|)_dj(zrgVu1)hpYfv_EoQW)>av zjeBB-*YrtWdzkSCn_NT5wc6`7fzH)dZKr}RpRR^~w-f#8!4r}Q9V`YD=D$iD-4ibaAikYWW?xh;Vkmt5cfrQDJa79N76O zQN}x_&o5`$-H6R2YxpT&S8mYyNInmA@BDloHUy9~MUbFR2N%3N&00(xRyVXevCz>t z5>KHhmnH|U>Hl^CqJ|lh?$#3>{J~$Eqd%RHz!lYAeE5U^;H><^b($(^#}fum*< z!hV-0ePw89Z*ODd@njNHmt%Y0%Jxgez1n((aAvB^s!e-<=;lm$L&%r4r`5YAg-7?> z`HGka6}T)+Zlv@T5xlN}hQbirR=4Qa8}*ek8*O!VHPWuI;2u5eckB0s6oZ^M!VSLY zvE6KVW%|2BdC~Qj&y5%1B-^@hbl^`h)?3H7B|ME^5I7Pg3zvTzwjHbglGwg7uk3DV zIC#%sYwO3H6qQYs3MxZ%la zGys_033Sl*PqxsZQ}g)S;TT_Z@gZC7VLJq+ef+Y-lK!tp&pH;Gy?-HQXtN5W>7e5$ z>G^46;P@*rN7g;>Q7@~?pB^?Ea&<7^up0Wk0r2N{l`-8pTYFX{S>?*GROt38PANqQkW9dqix(i3~amnVN&z1-{>0t|D>qGvZM9m1AbQ#M@EDOgG74< z|D_LSj@xVwP^Gyc;8at&`52x$4#|pDo>AFCgYeh~H8iK5CaTXzp#?3BpH&77KFHXC zDf8Y-k#{Yzgj0KxX=UE|V;g??pRwf~ga^*KvL2%EMYBF-hQVpY#YB&2cOE>;HK3YG zSph)%$oQ~wlFA*;Y-1qw{(m_9TFklKQxzH3e;GQ9+ua0H1Va>4RdRN^@n>tv-oKQQ zx)*Ec?%HsY{9eq(p;<$bw0*TnVYIY;ZA+h8*9YkPvvBr!#p|wDKaa)&3(es(y0^0E^(zhN#Z>6>oGP!FxLqLbHb1I+{;5k>nbV&qG4SL>1*UqJLDo=sW5Y`bSc~;~_ z!|nb)s@00OuJ!Cwj|;6^1H|f}T6oX}s$XXz(0}Glrp%AFOH=&WRgp9XpfTKj zj@n~G5hfVYpEcXG%0ycqFa@zXiY#2Wn2`P94FD4OG$db^gLN7gmNy5SMfsCo07 zr{YkmHumU31$2zCm}||%O-4zkaaGRhLelmT6k#fb=hv(U&jQqZ9J_`fR0r);Mf#Rs zw!jroW|TeRR+6mYp1v}M^AXc6J02F*}4mL}xT(9_E)XxKG4wcdEcgphUPZO&Mv(hBc5+)OKQ* z3O_>>FTqW-K82JyyMcrgo4?F6LE2Y#Wthxk9NTL+A1RMOC%i1h&xsI5xx3QyRlo$t zZ)4tS=>z?vZ~qxNCT62WzE;uDxwQMQQYB}RygfCm)4u>zY z8R0y;H|hNKk*aYC)f+3yR?igeo<2Q|)iJT%7Nc-21vLFKVNbv|vuir&s6BtolPyPZ zjH2&*K>fYXCNff`ac*>OEB}T4``gCjD;AU=r^k(-EI<8K!MdpIE3RP`4#zD25&%${ z?>v+J(MdwI&kc+VG9;Z>0ySuN-mEBMY%z)!5r!)U`ubWsmgey)X&^Q|?(n8qd8odF z>ezJEep(;Om?sTUkL_4lbx!NA!|eaN7f%CF)em(=jXysO%n=ye04wRfVeRE_IEWs| zdwjEi7+b#h(d#x>x)lC~eBz=QCfb**pl_4e%h^)-D1|8Th=rU)wH^Wf{RXW9t`g;mkY6?W4nAcdO?cBJjpf&kt?!j!&_aB>u&%% zm#7U90$i+r3T?O7mdW%q(RM5lq}cGL78 zIQ7bp-f^QRQdzF_e1)0NZ#38w>S|Uc9D!Lo?sLJZq=VG?6C-pxcZ|)i^t{5^8OtVt zXc_Cmu+B@0T{L_G4k$>rO)mn_rw*q)Ygyj)^^0*Hr|0+4m7O)p^2d>GIt}aKIyBcy zMm4`o-;0S~b4PTK%qw=}$$U~WVOeVBSJnx+rkxE4*2q6}?{?etz(;oM?31RE=tt%y z_cqwXY|zD#yKjlJh9K?|=jyYDmfkO3DcJF3Vw(%Q=P)IOF`RE(!P*}CMVkJ+`1;+` zgp!CQIbEaijg47yDMQS1A!8h?VI?9IOjGmIe6vxOSEAU6;`yHS>1TND<)_OVBMl2g z_FHYvWk0`3RXR3Wq9xNbE6GXziH5{t+jQm=GpoU9f&eMm=&ioRX5r{z?8F{ zCJXzKT)(8$dszwJ=zds4m(43=^^}Px%i@y-VTs(`yO0+V@1V1lXI()5fPf0hj<@~q z*zylV<5{y$pIp>l<53T<*1u1iDl4Y!c)uIEmKUe?dNKGP*-wKIDKpp(}eGs-M^s1#)IIWpm;-^b+NQ&f323XD7HD zo7bEb9d6rA!ObFIGoxc;_x-5iglHt8$l(nBo#qOyOuB_c zn1|%3RSPcMLiWlFtYuusbvlKD-b4P}7MYhCt?&gxwHlzk-O;CRe zAdnt01oMK?eSZwtMj*jUKSPj;J%Vs-`&owj{bW?#v&PqOoBNtV35cffsq5nC_h(9i z=H1mXph(uhPr#)a-sz6jyq|hL)zN&w`DbGLara=`pZ*g3d<Nwm%{rlV=N++T$>v{@g zNY{deBx^6qS@NYjty7XCYC~j*g`lY-N>7j`_w78yj5U-Zox z=RmCgkZnbGhN+4bmHYbvBU4It7IM-uII$^Ca(1^(p&-2xgNXI`ebgJY(fDp2am~Wb z^byelXssiFmrB&gw3D?@*q31x34mDwZ=bjDRm9jmSbxQv!mzz}9LV5aS`PcKe+7h|P zVkc6^A3ialLrEF(12CfLV*~57n%^aR)d3^BfD9GuB3uQ_zuN(wT%G0?8N;OQq~f2zAT4|`Kg-CJ>wc+j9e@d>Wa00*Y3_r7{z0Q!mv6SjnyN91 zq^}OJac@yGJdS5h&v7~Ce|``KD-havVKGr8qi<`F2XZ!e+{>$54$P?!H7UAg$l1!i z;l1~fx>1VwMT|gx5;R(-U>Fv%8js1nwm2x-k{shJY!Q!VJYE4s?(~QRS8tQP1xa70 zshSejoo^@)pjZ<{X3H6RF!T$=#sw4}=bwdDe!nO6QO59k7`V{FtBLEKD~C<8P5$Mg zud{S{z5ZvdC1T~e`z}Jy1N{u26Hx)Xsglz{cSY7s2q9%y39{YX&0d?n5DXBX9=NuE zuklC~NEIu^!w>V$r}kIqJ?7xAa?^TI;8;j4dHS5V>RG_d{J5>fpM;d7Bu>(KO{#I- z&+8Q)$D2FAEYvjosA-gK#)WUDC*uU}oNaH0g1!g=aLwvd^xDR(hYJwt6o(q8!L}8r zbv{2nH~y?k4tuifNhal?>QR!Rj{aa+$cxB;;Z)FuFhuRl=uB4o8y)5!0m zZtI$DPZU`S9!quYYLA#Z^vjTbS+%nhLv(cCosPDNZ0hapoHcukVS@xayy}e2x`kwv z@e7x|n7HHntNd6MYL{QRtLC4fz~Z6U_51s^oq{y$DD`hOH%+>Wcw?$@B!YbtCjL^L zzWgc93+fOJuDDyRFD{g6neDD%uFiIEX`95zZaB_ZnUJx~IjLDzkY8i&vZ~a+cZ1wN z^i8k4TX7DBi{SNC>fQ?2dY77s;vpfc%#_*(ht$6Wj^BhjlF_KGZ` z-|e|Mu1H{(q%LPql|UdEA9)YWtt5K`+$(78`k$ zjFL2}oxMLM9=21R^iwa-keGHwXd3fiicr`~!|iXX z_i6eybHN-FZx5^sob7(o6&;{`6jv#!r8<%8V-n?24+XO7DDkWh5h>5S0RwYCP+@x9 z9suqbi$uEf4BIB^wWBmZ(U)gUk136`eaW*KvE4OKKQR@&i*PXy9aoC7U(pXrsxMzw zR%%Mb#_}Z{-BEWwF4*W1pHUE-FBZl|U(}mg8F@A*)~jl_qz0g|V4v-QXPOO!Q9LSq zE3Z-H1AC*W{u5P9LUg}3xN`x(Q*UOBxu&xXN*Q`?W0O}ke1ptFIi-^J!! z%EHQ=#lK-JlBj<7m7lDt$eUyF&zs}VxblgoMvQN^DDMnveL9`_|#Z|pW zW$eWEnm%xmkBn2IM=#Bj;ZH9pMxF=vG#Dfr)m%aSToJ=|#Fksvd!c7UXRUaDLS*Ag zgl>hI-sG|Ytkm@$AIy3A6DazI5YIm|hT!1)!~aOMDxD6vy0s%`IGEuJTxroib6iPe z!_z{0dmu1&f27Ru)lwC_cBA=V1@-Y9c3D6l4Ns_;oo0jPK6LQj{t6II4zkEA`QAz@ zsgQZ5{UQ2;p1CTk1{jHBP)fQcxpvO?_(V^v!2?14W4pp(r@EH*4o<_|G>hf4Gvlli z()$2taETZd0jlobS-z~@9%3?JfWXy&R+PGeF`eeJSvp!qdxdB`cb}p|;BVeRn zhnyf8BPrlrkuV@*elI=+E_E4x+(fT^ql(9wmbfz2(6@?e1LO2GllOcry?blu#NGJr zJS>%bY(^hUkmb6ur1S#19X#&f|KW-Mv+uZl-+ifI=PMH-&IOIOk?24_G|;!gn@TgP z$CT(*cW&$TMS*B6@4HLHdTyqlz~{4WW{upBvEZvP8IhQ8exNb?q=dE14V4k4UkH(i z#p{F9Ui*F@J+T2thi*yJlsrS|-N;^#^}?RamY_GRrQ>PrskIj08CGo+ebtKEFK0y9C_48ey4S}1jKgrX= zFa(+!>Dd*(5~Pzt=o)){Zs@h~lJ~Z6N=5wz;JV~U&r9I)CA0sS18yWE@4-Rxpzec~^OZb-iXYtoK&qg4-`pOt027$i z+rwg_J<@`$qW`@KT%90CoFhagr1tyc0SItZ>AGuQ3>b!3k2&kyGk1U*(GL1@C9j?& z8JfODT#7PRB0Z~{jZd@6<}(}|i^Bu{>gCkAknZH)ehI;~Uq~5?=$=x%K0_Vd_&wjg zwiShe{L}R|kzO|0U{Xisu<6R$t)%HMmc5 zMq3sd;YSinIWVhbEKBF662*uau!+s~>I&OB)_oB-zLy)@Gx&zFJw>C+(s!tCH{?4G zQ4DZBY#p&(-0&8R5LwU{Kf2Qj{Z-JS&$S*5KyGvl0J({+aE*(e>T6hL^N$PYBHOgB z$RVAJp=N|G`lKMTV7wE!&>ZCAH=T83%FlInC(xzL;9h^9J;@Zfec(F|+C|b7eS-Mr z6?M(XV*psTD^QyqJu;iIAtngOneG6zXtr#FLWz`0?;u9xRwwhFNZi?&Ubc8V6fkXt0444H?z#wMYX#Jdk7@mB2JEt`{G&4e$B=>WQ-t1J zjZPhzj16{y*LTm!M;F#+4tnzPDY#}#R-UNy{+gs#!VITmmM$Qhz#Jtl13!#>>e1=wcXtAvfQ}77)v!vp zWo8XK!P7QjP31BGTJN!T&{4fZy|QQ0d5gS%gMqT8w3}QaHednV@)y_z8kqaL&9^)i zx#IhAAe&8ro)`g}O^ImhkT(tXqQbwHzz86c1rSAS!-ll|?_=KtDL&~t^XK^NmGQA=J7g8-e4 zaoypZLd|u3749uVQ?`vMo)2p;eb~vQicVyCam)|dDFUvjO5ETfMgPgNw>vXzL+U!QA9 z*Y|UbO=PK8;8|RBYU8ufUEmPkUk`xQk(t0HIJzw$@}r*)CNoLBontgzrvE6>zJW_X zp9SXg!U>}|DYb3+&g!RDG|M*XT?22@ZHk2L9zais{jp}hG>+_yC&ed)4LENGhk1|J zwMOmS*q1<9BUjk7%1D(;n>xc4%pf2h(4sRZ+eM6O+es{r2%&GKy+B7S(^30^+#||I z&AEYU+kq(kcSgE-&Zr^EKLlp-ZXC8aadknX1Mw=d$=4Paw_u_vpnq+(G9g!KWkz(E zY(&Rf`>|m{euU$1(sseh3lCGyktoWexN4Hz+E{=@aNM>GhgGY=@8M$1qN%s;;MsGh z$wvdVT>Xu?+%cF+VJlN-w#>zCO^Z#f6}jb(nB$|H3#9V^U(=O@9#$7%H}sYhAnDw_ zhncYIe5L$dt+}E(cDmY)Zx9ecE~FRqlojo+$hsKGx(m9JkJF_H=IRq9j>GK&qk!GT z39FzdCH+4$_IV&-7SSb1pJ-CHmhitbR!XtpX6J>PP#v)%Y4@3Yw4ziE+UoR`g>EH? zsXve8o&J~aNtUl#m#f+~wfGv^>J_&=Qj$Ab)kc=^(aY3$%I~vgq8-+wzt92#?!V&a z{+QDOafL8TqV!sZ+k>HZuDqnPc=7Ehk66Vg=`Iuz{-*0(gvyR6~P0jl?A z9)iN+w&SNa*)79JLE^Fw`O$)YEW#_MA=HJWYw>i|M|kZP-d9;GU;O07iISJehq`@I z*}pBWoz2UT`ct@bPl7pJR%ynO;((Tc?_T>yHfzikDMBg}W~D)48>+ogsIplxKOe0| zsmmW@Z&dZlMN!n^ItsPYJSQxw8+u$wYv^Bps(uUpDcJj4i*DXj00nZ|xq35D{L$X} zTh9b}6}vk-ASyA>7MDBiVxV@lvwN-9T{`}87280cx^wGvxRHf+ikgpqEnC`SL+4g! z`(EPCt=>6m0;S*kmL(Ieh zIt4DBIQYrQfXlgS^UgEx!H2b}#&Am6SrFm|z^%2sONZWP-Ke$)E)t;89h%mikU0RSw;}Q?2f@O)$p{!&7XO#%lcR)0q=si(>kJ4h6jDk2eHu z_GCAVi8aP7(X~86-grM|)n@4X#E!**DCYv%bQxC^6}7h^IHQ#vX96FdA~n8>k1g8w zI_!As3t%Ajy)nnUB59|uIAJ%~H14;$8DXV7a`!rCPMLX_6xwlxuPV4~ib;ja26wzY zoNfKAGVVyL!ZaXu1D2-bN;!7eW!0JOOvy%5^$~dax+Y6P`Xr)T_~$PL2xJf73=+0nS2QI{wbA2C3_8ZJ;q9_*av4N0 z>FGt_PerhuLI}aHn0cZaMFdZ#I=a&G1Un+P>QUu~QL|3yR3z)tk(HL@B;F6hKp~|n zqeIQ7g+RJ7z>3(p(Hu}aJ@LoyC%-Tm2r;Oqx2sQN3D2fzRVKukNAt3^MM+$HP#Leu z&kkEixT4wjb;Zo2AsZ#u|I|lVuyB4m2YYzv#4u}|Q+8Ney0>cZ)wTOjfHgc1&+cFGb&Dij63BqSIVa*0GrWxn^K5gR7DS3zs7Ms_K%QagI7eOvUf^ zc&FbgRal*9eCsIQMsbE*X?C`Ws24FF0nnw#i`cP9mVx>&7_3o22V7izIGBX0BDZT-@JUAAw7t z(h6Gwb-j20BDH2btZ;$Mwhy=!6gb^=D(+0Y}Dq8D5@TI6;MyHe{Df3DsG#~_R95cTOaraqXfMop$ z?UuxBt2K*ct?qpy_2RfzYtpwZFtsu4yH}M~Z_JLn!tf&YxMTF?c^9?0ZM#pNpXEo8 zm->?y$3bI?NZoXLU?#C~xr*GT__}8cbC(CYcXxS-4jAc5|2s|EXLFvb}?4m%a7f8n)2Y362<@tmD@@AR&HeZi7j$~ z%2-(Ines4WfEB2z@lw}+lmKvFvTKu%g8P+b0ZRsg2K5M#=WJGsH+=l6JCN;Tbk@{d zMv30X?!A04GuWbPbaS~Wzeu)1!Sumen6}xG=3S$7)q!HEuEIUgj*#QFiU>XvsLCsh zJ;nL>_?o3KY@k6sH4JP8kIY4g%ovkx@iW6EgBZ_Xa!;MqY92gR-Z8Ri=W4tAAYRzx z-hd;^d%TADQ*A#wj0B$CfmU@B@lHZF^H>yn$L5!qm}%Qn)pH5z7c`k>kP4;nNv&Hv z)_xzs`mNnZ&&~e_VFXu$F;VRA`OwxR0=}h*%oWmR+il4IkN0YC3EXJc?QR%LQLU4= zD`n1L+u<%#3Wh;8U)*gOO~ZZIcd}XF!j{S~OG5zElDpb*+eqJ!xb$xuw+(K^Zprj@ zs7#Q3kK53ZtB#=U_Fu`cwX>0tgUM-pdJxmEk^To7y| zmCAr1-FVi$%W(t+9q+M~RI16_9%)M8@isR9{$h`#?C-j@+Ndet+1VB#*A%L!-{U9Y zchy=n@bxoADR{?_v9+wdr={i*%k;^W8bPgcJ7V0lsp^0*^8!@kB=lS6ZscuxAg^pB z5gP5=D|toEOxAi7+WoK;20aqgg0tT2dBFk0KKRw_YBBXRiIBF4wvrflVsAl_N6E## z!nPZBXj58gw+X7~VU10xt4}@s)oPfiewP0a+NVFLO3_-AJvAPQDK+BPUvem(iFs~- zNmu>${vLdccoR+!f*#P`gv{af35IZR~qIzoh)lJ>(yVzfu{$ zJzg06WGt&b!+MJA@%2GlrOOHd1GfE}0zp@q!bS6(RV(v!M<1-@!1<`vD!YXEa zqQ8c=hUH90cEH`fnB#F{LPmj}qY`^OzoI``eF+}63Ug4#(Mr35 z9b+Dr2Jczz{h-#Ld`zMavz7YQ61>lMBq+2zxUDyl!4CK*JTPjnO0=~i`NB^r_vJiS z+*#K#l}&49`Ap4dv?LAtlw_$C8oqEWdDqVY?;0sCU+Ds#%!R5x%cJ|sba2-~ljT07iIN{$bxJjL*O+E2USC`IjlKvAVQ!vjFBCB) ztQ*&W7#=!*_{!_U7gRBG;x=K+KIBgH0IK%`Z{^oN))yX+#W~qX-yq=e^w3DHtw)a! ziq#f_&$`|^PN?-F6}%O?l~sH;!b*Lj0*A(mMgBQ_^fP(9k``JH;D`im^d4|59mZ#n z4EmsT6{402xoc3QyXBAd=OC(1rBhY@iSkIf-`+fPl}UwKrbCX9SwatG)LL7HFZCIk z8#(LWirZEUQfBw5jqEeK!1kOx_C_{TrsF(rg6-gp^yX)(X!J0TffsY=)~v6sx5E(k za>R*RpjIq95AaQTi_=ICqJhlwM|<}XE=#>|)zz{C^5eS9dYjd|7ka)LQzWv~OCrhM z-_X`i97$W8A8rav#l+P+Z&!cG8J!4g@lM=42>-EGcERm006i*R)UmMC&nvY#JmW-6 z3hai&~GqdkrLgs!XT3f(uOETQGBt~&@9q4ccI zi>hJ2trZuyQgHN1W?e?P+ca1-Z^VJS4y8vuQ(`+XgokyFqE z$OhII5UyrMs{IXNJ>3~Qv>o%^$eeu%ln6IKiBKKgoI2h!EYCn&>yVnBhtVQ!p{co*N$7*K`GT*i$R~2%07xlv5v(>m8?~6J~0g@~i zcKE8-X=d7o@nV#U16KuG-+w_u|MWQWUrv`eQN_roS6H>Sw1Nir8Sh9KOcQdw6_7BvMbv`! z=Y++Pahg6O`xp31Z|B=4o$}(2;hpsRaB$)4Z9Jt-Hz<<(d?bsy&UCY;NKTcYIXf{z zC9@;elFSkAVq_RthecZ(lMw2eeMmYdfq;vcnW5!vzh;>xY%T85ZsEbfAW_^3cic+f zRo%iA&oqIjhf^GX?pz+pRUYI*1HrBbi#0`8ysEhDo`X!cS=@m^@uIQO+>8AI^VS<| zj@#BT(>@n4=CrPdKF195Fk>IbM-1~bewDdgk2`$GCgw7oHru6I$7*xG8N12>T6Lu- zf_a#X>y0Y;oe_I)MZq4p2Yae8Tg=W)J&tE~<4Dn_n(V=>@bBAFeP*pUG9L$IhW%t9 zwejE%uNn-v1}Upuux@pd6e90nX2F*L2>NLFnZ==nX_5xMnkCE$jiaXbwFh~M$1oFM zvP%CO5?XdR8UHSjm3!CKKjJKXm^}z6;Q?PRpa=>$>Un^pMLc83%J5a@Bp&oGdrILs z;DLz51}^X2H$Lc;+SR`|-T3mtbOOFx1$~e$1vih4oP(5>PRz-lsFD!E$}Tx?xM+pQ z`+w>PX3tcYOfpiQ7OEb#H{~`)iNb=8!-^387clFju27S@Hb!kyVhjT}5Sf7Ni-8_$ z$d$^*n7y}BUEi{pz}~38H<8l91(yMsk0OOF39yFT-3revrLQ~dq;TzKk1&OPD0$UW zS4Tq;Ymg~Gf+6l9DsaG?A@|2aRY|qbk@XevU^m(dlcU@9VuPT6bW;qHsO07VftH!yzQnQ%j z1#EKEy4ljT*X&w-ULX2`uZM$dDW4k-0l{mLrtj0KV$HXvy>+}@xGPr^Rm+*!VU!JD zit)1)ZQ4&xfIS5nP3YZocjhGf&-XO=Y>2*c%~aM96ydE^GgM)T<{cdXCO4C_?Kv&b zq%@#)`@H7c;Smn?!v9R)av|cWj^d#}WNOkD7(zhY_F|o@cO?b_$=XFy`V9w8hD+iC z{KKS_ihENL;D74XWr>brtE6KrX_J=7D!WLD+416GR|Dx6Z&e@Z>%ZCXs26Uz-O;>= zF2!kRTvt*+riS?F$aU35n}323COBoHy^3)jB#U-IINF=8fV=dy>j(yWY9#b?K2 zj|Yo++O9-^BIEO*r#5<8(Xs-6sC?3Pi!1064Mmh#0>2;LwqCJkrHr%XS&OHFI7z!w zN<*pkRQH9B_>%*e-uA{It^;!#Z-~&6iY&9pdv^5TXiW3rDbr%Qk%oP;+FxaC&dCNe zLSLtH!kd4*Q+@T+F>c$2IIDI>{WTq=sd&4?3lREmAMsbbxOK~h2vX^h=F5+?736&jAIa>=sJ4p+QW-Pc>_i1Ih~xfZJS01$`$ zVrmDVae%$ei%;5+JM!hQ{w)f`95QQYPQZ7wH41?u&$xk(ntteK2lIzi^-?h`9};m~ znXlpteuAqa$UjU|M4Y&vf0OkKNWzY^&8W~W4rjI}YAiT~7EeoHR&+OA+JUA2=rs@e z8EWkv060PB$>3@$(|!FvMVA-*5UjR$+&5X}hrz0cRunxGo~*}*pow_?;=Q_al5r`a zAB51d{|p1+pD$4@1k|jII4M_!6;?b}IGgAUp8T~*h+C1DZ5`^wrrKW!m5t~avS3e2 z*STK5_%EhXZK@|O>@@=c;K$uWDzIGJNv>n;WsHq@LDt6e2*rg7o|ZzYYm)g~=tLKN zI3Vg4>>0J5e@_q4+DH6$Jg%u{T7*P+4OY#e&#gk>JS~k`&ezUO`rB&sC{s+wc|I96 z!L}!(!(PABt$BRtrg;VeR0@ZGW>_6+z6GGGy|p91uh+7GY{7l6oUPxb-3fo0K>Z7; z^88xWA;b%_$p)yUaL^<}XtqCNbQ3wlfl$T?8BeCwpM{);oFh$M*hGTllj$^-h+)@9 ze;$FTN~=;=zy^L$Y}h3q4m2k@|K^nQ0^u=vyb0$og=735lXq?cvyxjdl{VtWqlTR# zCd`5vRm-1csae*mlm|3sMl~8V`=Wg_NKm0;brVhVIf?B(n7a(Rw6imU0c+5HGE~?1_m7@H)2y^&~ZXIFsKx1)&t>xzGP5k4f0Z7Ykfs=iRAtVsNPxgaTc2^`O zvBb)KAB~Npp8-W@4+AGKOeD=CNhn=y!*^)i_b!q zH2VKvW3cPI0e-lL|4j{9Xl0vxSe(et^UxJTExe*R1s&k^wpA^|j^ePAW=bS|xCncqTmY`)pHC$88{@ zHH2hW>vP$=1xd-Dqk4040aI#$mH2WujOwerYqMs)f^>ZSh7AopM6*no8mqnNFGH~FGozzKd4vF?OG!-e@2$=! zw^{y3KMztaR67iH9N~dVm2uh8CJ2Asc~Ea{>+i7tU*9B-^(_N8!MgK?|0!?vRW2Op z5x90pKhTlZ3sT-t8!iK{Q{BG}&Uyh*y)|PJFH_nxGYv*Jr*d)U9q>%I{~ZU+G&2Ff z`Bl)rHhPxNt@AV(=ZuBhr~jVO1~n%DcZGzd?si%Mv;3k2Zx8YaBP4Zv1f*@Vd#<^k zeoCR4zjaB0WCTT7cwBh;I{hNumDmVw`Lls0e@1_1bT!Rv5=DzFF5%7&ixU3=@^bc( z2~FN6mIk7k1vaP`TLKq&IXg<@Q7{bQ6cs$OUG=tW z<2@o!OE7zY$yP-B%|P2d!FaI<9M!r=CC8alCA+Kr*;D^gX!u+|QAL|4`B$pPu>0VD zThL($;FblQNeVoout(5}?k*qW+5~OjLjd-%%Y|=mlCW9k+o}v`j>?R=a)yKVYHJh1n?AWNN3d!4F_TD6XoOUyp;i{JbUdUby*`6?#KAs z7ayCsQ)-_+Nr3bUN{{ z-xY8VZNEf+Ll1Re($dU*7OfOC_@_=@n5sNag-T>GCBf3px%NjW;StgAodTzat#V7r z&40C`fo(=gMCH(=Hc~;I8`S|E2QbDk9HzYMNRpC}nTH@E^nZO}at|NXrxnmdQ zeToh9h(F*vS`8eskR4}|Fz$@mdBh`18wfuTod!+$=mwz5@+dy6!3#_I=ef|qq>j&` zx;8Hd!HzR64{6@LMJg{J20_c%?OL@7(B|VZI=gfV%+Fww5?ln*_CK=OT$7xH@Ts}j zX}oJU8$=z2D-4V2%Q8u?A>D|C<4!KrB=lr)VahT%=}>1Tw`U4c)m`1TW*UG%6K^Ri zV#6Uxe39H#E`)ri%sS9FGKdAKAREF}-7$J+bi6s7W73FNJpBUULTuOByCG!rt2CDm zwzO5&mBiQ!9&7cC0kVGCHP9fzpk5J3NNI0N=Fg~Q=CU)~J6bNX5WEWFNq=QiU}&5w zdZ1;{i*;vGmjaOwq%-H9nopHgooWTiD`6%|g(aDHdeAEOPN}Zf+?qzg#A2O`x2){_ z*l7zoh!bCW4f%^4-3?f__j7>&WhQ0cCZopKxWBSo4o+Uf+w#bwX5# z^HQ{dst2No?xuIDH&<)$WosX5fF!cd>U!nOrVoEqFZ~UO`g}1&Jn1e=6U`qZGi`z3 z{X2+NrV&d)&~r>&0U7^+1RBUID#aii7#MY;e7Gw9V&C`1YZu(~NZZt_3d4^E%Q0dn zxTm>x_tJFX3r)0(Wlk=wvqu~V7f9e0&8iu8)0WW2w1(*PiEu#dNrwH7eKd(^6ke+;D!4Aau@QP#)d_=fpmOppqNDA9CDi7U|EJ*@MqMGHu z6rU7!%(f!cB}jy7(amA#^KS9e6}K`8hkJrO25xN$fbA(-pupMx)E6++6X$a44%^C= z8@c-Y#=(&>x1ikI820%Ua7p;eh^>o4U>-zd3CU|hOUkrb z(?w;L)rt5jE*DYuZG?%&Lw2D;bJ8@sC92ks88Z1wqL7(E@Ftq-{OQ6!MNhA)+)2Cl z^I;k{@^+=0*a06}a5Coo2#Uh~=cRvLlnig(1lwd(W}jM+@{!VtxwgTON|6g4yxDJJ zFj%)e&E1t!q9IEZTZ!@qF(|kJoURQ&XnG`S)&Dd|S^plcu?nW&f{Do}$1GQ_Fl^YI z=A;o7?x`{l>&~-HfSn0(RN$ZMs?_Ky7;f&_e!$(5 z2=)YwtRYbohzD)@C7Nc?;KRhC2$6~qT}yHOqP2Yi&{a|Oh)vSvC0ZZEg9#RAd|0b$ z)41VFnQxVkR5mSe8}@$>5~dTO4tr5tgujhll_?L~`gTY6;S?w>#Ou4%<2K^G%Ljs; zneVBtp(;2WqQw_aWcmQVjAhZ$UcFG+H$4$}mRCfaF9YBn?HD}eS7M8XFPJxo8e73? z-2YoiR!>1C^^(o4K{S+y_#IWdJ$iHw(y1tPVOV!OOCm_D`)7vZ>G3;dyny@}P#<~@Tt1{q`4+mc8b)qX3F;ny&w z5g&iy9A~x;IdlS|j2j};#KyjnMtf7jNumU($2cQ=freDi$vhZa^uLmVqvuRaiP(#9 zge$QDDaBG+2%#y-Ibb`|vsUC4Vl4?(=FP-XMLtBLEpK+q5v&>VmMW;5g)5(Y0YJc~$0>3wUTaF?Y8AOscD{Ss`%rL> zJMz{rT~QcTxOZALos5Z;zmjqMz69ZSe3%44(*Ej}bEoj43k|P9I2;+eF0zM9g#t}N zfy?X@+;(5bU^T#%gu-f70zS2&0OT@yi(mN*3!rq&L-Kf(KO{ycs#+@#;j2jTb6$lr z&O~dh6k@o^y;jF{rQfz2TPv6i4^Q_^F^|~dgm56P-GZjwCsA3YzHN;^^?^Oc=BEh! z(~5&}G`!#V$87wgfi=QBc>cZqR9W~^|Hzwv=atr!%w94uiX%t6B^4c~`JWeG$Xl%7 z^5u2O+o^EI9RmWsOw5L47e?DnmR3D?jw+g$xlsc}Ox%7bks*Yh+Y1IdzDe5?3U<4!WueLyEdHE(&(;du{BP}e=|k5_zOpo15RfVpp*V3C zE{wdPBZ<%%0P%|Fz1rP%_dNn@1a2Q$(qvx8y#BS#EEr|WNwuF{5|>#gF_x6uGAjC9 zTuuMloq7N;?l-eN(QMN(FzE#E^T_zxbrQi@2@P@7vf zR67(iLsW-LGy?XzgL&>wub535ORyd$AX=sKqjp)p3`LBSRSyA^ar^n#OOQ3PejrCI zc8J^QsW?k~U#)M2-YGO)mV4Q->@=jW+C~z6+K;fo=2XBbyy#7 zTX(`wu^kawF7bFdo8ry>iRE}8+Z*|h^fZ|iu%&2-}V8e$kxOeuimdfw~ef_ z?cq9#6l5E=T$#Dwo}EM$T^hT*ykHFE_?oaz&!1GRamn_qRXKn{^3Xr{aMyG^+kAj; zX0^dIuRK|rAA@V=IKyVzx>a8L^aMMPh2_z3!@qS%6nI?Gj0EB&?;Lyd(pqEO_f+&X z2QAPGf{N<1H-J7Yx?f8Y|LVo-3w;y){ulE2#|o6{#^YGpyIazJ@U{G0xX7UDCcLO6 zm5=)TZQ%S~Dth>bMnF5(ku;K`2y!sFJ+jBe`Xevh528HPa~8I1W>3+X)x(M+?-OGz z^m(-xQ1+cMdM%?8N8ydUid?h4BeXo3H@-A3E}9n&D_uP3jy+430RNrvK)JNqV%?8C z8M~F<51c(#Q+ZE^ORI$sL}zt^XP0lJQLn#jp02;4B8OtY)(7C#OUNc1V=+5;2aNj@ zj|<|jifSz!i`Ui{vNdzc8ls{G32!-$zwa*h%WZ!(dfWDf7*iPQ@VX9PN2N1fz;-h7 znydXDp=h#7;u3#_dNsQ=?6K1t%$|^F9;=>k#XKkk>Z*t{tm0QfYeUKkn z7R7VUik*1k3oitC#QM|~ToqQ(kjOstdZZU)B{fFfqFqbgtSNKDrtnFyYN$?-M9qN+ zBr?piPii~_4xHJtbZAjd4`&logxgn(KLt~JG9R&RlqWY zKb&@^6ouNkXr;{NPapU)&H4&Wl)Xz@<4Wf-hOv=%_MwP-fqOP>Lg+;Em%6K&Y*vEK z#GI1W<&hJ$0sp{{)nISEUEs>pI2t)&Q)sgewA!8qUAAQR9;jg)XCTN zIP51W__3jW0|Dv2fD=u#9$dlGwBHt&LR61mT-m)r+&Gr$Gb7%pdcS8=5Li-Ow$^)J z(bD}<(~fs%rJT3xp(_K#b8Z_~HAK7Sh!d5-?U=l3rs;cS27MogPSF!~hJR~{DpA>( z9?U}v;SDO8c5h^#+1v77@_2|#sa-*AOhw#@uH_XvNC#&(EW=I22~}0CMTho>B^eyK z)Tg3rg-oGdhMUOIlIs z_=U8UL6ZjFm16&9<*{^V8~*wOSJA2Wl&#n-|PBotnc&Ct~!3orFvP z6UO)z=H;UlfH$SsFp&Y*Gh04wY&l=Ozu_^-vmoZqJ6!KcXQoyRS!2>X~c* zJu%D%x>=Jh3PZ@=b3h|e#F`%*a3RbLcB|!zG+j=RR{P?}RbxJHY)Xq_ZKpKna~(ub z>x6c}W>F0YaSC}3fG!~o*Z(|aa*%N)>P4=si8qAzy)^P)ms~x9p!x3GTjdG2WJ-=P zA;xj6ICmob-7vo=2^E%Y)Qe@D*OS}hMOYuzRL(C?Gm*r_v!|-!i}E+(8f@>n1zy=s zF&d}kAXjY{R9_?oMa0q`2I$=!2%r=@oSdwV0j6=wkkG<&iX1{_BlmIk^>2&eSus*^ zJgx$7_|1CRa_X;tHae4f{lP3dV;9{E@9EnmRNCVkUYCgt+1fb)5GMaSQ1W4A%EcyT zE_b97_no`rVZZk;YcEff^~?NHFbpT2B@3ZS@V;3BIFHaLOG2%J0R=+6h03z4v#SCP zKZSNuvZ8PeYyxo4N7Z^9PeX~`c4_D_>9($(gGwcdsklnQA32jmp;i8)@wkYC?8U|! zL2b`lyu!cLoUhNREy=CTTd+8!sT!{S9TX4~2HFVn^BIiTg7ytq4X062YjtjK|AEx~ zob`Y{zpvvZEP5F42R*7*EYUe72G7!3TZ&pykMfKi4iDWEB3$xqt;NX1J4{IBzXqi4 zExQ!&LHzNqS7c0(hvQLM8aB(N*1*=Zj3~sEhb^#c)|D#LT6ug!y&q=v=JozTDR2`-?(fOR1uT+z&O+wEiGvvEJwY;FK%W>&tIO_d({m zddF<&j)H&ZpqAjkzH~j;PWFTZ7y+;~=()pY-2Bs>@vA#UCL~bKf*oy;!lp|p4EYH< zc7H3-ruJg=vqPRqHvI478K?T0ZT4z4L#{Fkx5kp>AgeqRzQ&oTTV55Yxx$b2oK)BP zvexjH>fUWO-obSfOq-W&3BUcy=y~3fjMsA7PyzG*vl-MPu$enMDL4g>*A8<<bM_Eb&XBpc+SG$Wn$jeuH;(+rB;F%ptO+ zZ<_|!2P}!HGq^|@H&Y!|Bn+36B(@f)F{^?07*E4!?=T=o1`iC53X9;@b&AjDk z)YDfMD)XZRDr^~woj$_$-tP|%Go8dWr_S+KhUw_R{UE3@D8e_zrDav5@KuOv>6v`I z>aDlV0rakf2y$TLB9xg%{+;2YT!XI#|D2Zx$3HXjN55S|V7iehd-&VED`M?wjDCYc zITr`|diXfAZhpm`=>tX)>-^7s(q-<4v4xfig#Z;5Hm8Z6rk64uD$B_|URPvF#C|39 z9%mYVQ!FDnimA=g54hxY;ePTf6j@=`Yzw;EunurR@+WMbCy?2h24#rFOyrRqJu?v zexhA=Z`QeT$t}h5%SO<|V+vX}z_64=uoq*F6F@+(fMb7)I()W6ZSUQ|&95YnT%qY( z^&xKxvf8}D)ZVa@`X#aEtcu+8iLTDAF%wP#bt9e$!9umB1!<#jOo9Z7?s10+l4AIC zh$GmJ=i<5c*D_v9G}cB5RMFE%Vi-{izk0stp;}1f08+q#$MLsNLtbo9kjqMz?u?j) z0EL2pJ+2qrv3dLOHV?mn4Q-3zjLis}D#`@#-DbVwbX0S%x>maj#I`TSX<4{@7n=U{ zukXI_c-Hon4=}w&+7A3+CE!h~CMr0$N;iKAtW-m9dVP$|D39nlNp2iPaUwjcAERiv z>y&H!iAZ`@+9_0$YogHfNa6VBnsB-4XWh_VN)d1JyG9Sm5lES(FB|x)Jt~pSZ$2t| zeS-cc+2lW1LcgITI&Y}-rM0lKy{bGTo>F6}o)gbx%#>i%z!suPho(>UKxcNejTrSB znMf4dowX`{)4Cy4@}_m9pY?u4T}W#vTmZ^Yj?q!8bh0sS4vOVv$d5Tw1m0P{D%jJE zM&6oe3nR`DS*BhZH@`82JJ12s6D4yrkFXQVMv>AmE>LRweLL%D*>?0m0`xd*|Zw_-n7ll2l$5k zOZI{dTrtXFjk?d!naHG#oBSwCb!rREB;9ekU39zaNc%GVxa!g-`8~I>7p75Ha#m75 zo9s7>G9NK;zJPQYQaMM~)zx#cpDXtHISLj*^mO5c7AJOZ5Jma--d9x9EbCwSHim%d?fF|~HQYsu!EEB!<75d;@G zyAb5t=Xggzqn=+g7_u-SR^XQR`uHdUoS-gJMQ}Hn_d3GVd0uSUi&<$9bhF7ZW=le5 z=71R)f3X5o1A3HtL1UKrxe?faG%7jNwTPHJcxT?L%xJ^xcX>|(i`FOa5MXp9zH<=u zZY#eo>@aj?Hc`+q7JbvP=&2w_&j;#qN*8bKgT_ut1`|3S8xCM8; zq^AAz#=(XBG^U`ABi3S)SDnE-bD5`tT>1K z;zMd0DV&$)?8!@u zMz5Kg0rB3RJ9~eS94w9a;?OhmWwB2hf?=*Mh-e#K8_$YW=M^YBUahZ7Vj@;?E`8L~ zBYV$Ch9tD^+(zh5F@!DRs$0DxS9(etZ3T09_$n;prkDhiM+}PFWX3NgFEM`?R>K`E z_4Zd(DtU-DKbZGbz<2=p+d{crpPBzR20~twJ*k_#iVZH0g5+=aKb(Nx{0gFnNyvm^3~9sw{C)e)k6A@ zZ-fIO)Cd?5>kspoV*bC8RPTcw@`59E*#J=D{Dt0V1!v%`YZ2W^k!sC-n=h1@C#lFK zS<4bj%)v^s;qY%hR5A`x-0F93zjAbU&?6zDN8Q%C00etmKU8YwCyn>6ODeKN3y5c6 z->Nk?L?cr|G$<{uZnjs5_ajeg^jIfmOl6MA`B3#*>3Mf7;8v&Ow?++!N3Xw>hD>Bt zqnGf-bhK>*cc3OGR|!+)e9sju&|3@QjJcNo8=so15A2LE+bpwTqlKI}!G`Byqj6AK zV3!P?t$hF5KqQ!RZr=%~>bFESzZ{vfESzI1vG5 zD!d-3gGWmuaTem~Su0R_u!_-nHwW8+|9fsyz=CPBEWwo4&3}EwlFg{?gg6kM9?x4` zKSoA_lLOr;*4sQ_F~ck_h;?{qp0l+R+OEt54zU0KIKXw_04dMVHh31vHEET>QvbJpe*7*2r*Jhxf3c5{%^f+~@_z`M7x- zv|8`&4`t;E);hdCx)C@m2t|+7AN|966Mo83-m)#$H5M9Fe(Ps-^k_rNF}CnA4j|VH zE*TZ{Ml@c{gd2?^sz`c=|8Asm84p+8XZ>#;AICaUTgzh9Vrm|R*>#Wfu6?h>n)`2K z!*y^T=k4=)X1+z{ge-q@@Q@WpTV*v>#Pqp#!UZREq~S&m_Y*K?P>Dw^c#!XN$u zLmq6nv)h(8F)t~`c*YIBdag@{|3o2W zIw{Y0uE;wiZLl7Y7l9cM9}e;cPK(oO^0($*qEek--LVJJU8tIW*J4`CB1g+Nz&XZACDqQ8o| zviO=xQsxt=nvjoGiTBpQA1UJSTunu5N21rt{i)n{kjN!+DrIde%327-@Z>0Zwas`L zH@Eg0J3I=i^!j&VWa+c|gDE!V(_2(vf9#!dIn+?|QSdUWxeHsT_^%!6(dVp~BEf;h z4`HOeuA-uqBWVb*oLx!en(g_%*@A@HM&^ih6A+y50i8;E>6I;;<|l!-*>c)mtvjzi z+&K(0oQgTY@s`vyn)KsW^Qd7@Fooyy#dWv-4u6Qh7YwI&9)s*5cHV5oay8anB-p%2 zA`$BS+!Kz^{_v*}H?ZR1-;+Hn_c*B4CbM#MPAeD!+ z;iXmw+7qm8^9?WESjl>MtY3eJkK8aXVv7LZKs8E|E^YSC9w>bJ->Ouukp-5{x^)>g zA)yI8M|>k6cLDTBu-q#Mbk{%ht?Fc=5(>M1-5P7*e>jM2zOKgXov>M_6Qbi^UVoyC zDrM#DZ>w!r2;}A6%M)7Fdf6&SFKWZUDfY`9yyx;!qw2<}hFxul#6`lqMnWkxNdD{+ zp>sR-fT%brn``EhDD~2gp4IUtu9;;YWNtYT)nJ@%9u6rWpl|6jG8IF+1J(aQFCq>g zEMIo*5j$5M96z?Ydf{&8GfvhrDH=um`OjLJSHO@q738sgL(5Fdk84U3o|}3uy|=Fp zybeGK<*2~7$rjh5`ZbF$?A9oNXI@=(G`7PMU=M4^e@k62B0r_*s z3Lp__`t0MLfOBtts4?eMT%DoV-0-Ez_ZSp3S|3K9sN-ygEWt-L-%=IPF>dyK7203; z_3ECxSI&Uhg|LC3ve6)4=ubb{kud(mr{N#Mg#Vl&WVUUW^0(v@GjG@UQXz!15k^A4=H1Ph zV+ZdXJztAXl{3B-3``iv9`x7Qt&-Rv&m(qQv1dX2UHNjo^GGWLP0E!Kn5n+#VsyPB zz(5@MF8x7{v-Er}l&!IVS@7(g3;}loj`mAe+es4B6~c}wiI?Ac z^RTzZO-KmSI4h*8<280{2wIt_--7{0w3D?eud^N^938JrKOfcOb#Y&%7EEfqN0#V{ zfIgH6K1Okl%&f=Vya=-;FYt>Tcq%kMp&ChVZ~VNWRsfX(rpYpU#v{Rlexp=o=N8nz z?&h{-h)Pv|ZP3k_GV?n6y`qnIuC1jrVREUvO67V>!&w}yNqY&jBWzoa!2B!a-+8h^ z8Eyt#Ne<+dwinbI&rfM%;TEy2DbM&(&7F4x>ObJm5+Bi%BKVxKFLnC@W@?;S%c23r zD|9AvvN+6e29|JqMsV1YW12mHP6iI@rlf4&ws4_1D#~Z~=07mloLY z^!C~S!H%Ix3+WjtxBjgeAi7@Es5pN@xyU&H$MEcrO;u?jAAP&Nx07)e+LUJaWgJQhI`&5P}n4$LRdV z;3Die4v^ENIzMmZ#Y{BKyig_9+k2lEj;0!cxIO@CbWk(dv%})Q;-m;!gn=H1fJ>w5 zHjbuekKw#R`tJ+`(|^BfXl`+2inu=fl zJTPufRadJ-kN?`-998!=Gq$`56A=|(z9EohG7^SXMl-LW*hi*C`KB2{yF%RU>3_G; zvmUnTYEfrqv@5zNNaU14X-3)+4y#*_fw|;s%*?aw&~@ zmIKaB3HTVI>0qVO#I+p%&MFbyj6=xHmrr=aB|(u(SXoUaEgExkE)RQxwC=b(aUbh= zOHrl%0XkvvP_C;MDhCagBFUAu-rivbQvsb{j8WFFDm0gUI%Z=G*mH`%#KSl-q8SaG zS`^Yx%k>sMIS-orWdAmIYzQ^EN>S~MqU^4`aX##p1^rafe;u<&I6>9omIJE{k0I-&DQ4nZPpLU>>ZKlX zajRta1dT&_+u#~=LWH&v^lYZ%Z^_U3j7@p^CGT`&=GhJBI-XZNj6IB+AGP6m+plXs zjZit{+4GKOtA8m7J#seB85QFKdzVuym7DwPc^?2X9V!mCEKy+yosu^)6r6#xbxeq( zb$t6^M>3Z~i~HcPe$|b2WGn~voHx~wb`Hso=5fek3N|cx7YFK@`Xu>YiC;t$xZA5j z)cJo|w-JZ0Xw53+Kv7Vxa@9FL@zl9tbvZ5bK+heuRCXToz(OVy=}ylc+Qtf1mx*mp z^C`MMtGfRhXFRG}Ub7i!P-?yeWmgag?)0NC-1%=n++s!57D4zXL!FS3l8?ep@ZN%^ zm>SNl8`&`C`F2?Wsy?=f_=WgeobMCq4+d@(M>V z*<`%}1LNseo=TXhLkNFsC6Ee1*O)nRZ5UC1=$6K8?7d-Rcgwv=)PO+zsA8P0VVj22 z(o;DfYuhH``Nqw>cKV0kCNgVaHz`7PuWL?+e!KRb=UB&#CAG{l8+L=wUl^*L}fhoZ+pSrwOfo?j0{pk|_ zKH*MMh>qpCmjzZmN4$#37B)SucZg>zp#{Y+sM$*xNu!d^A+MU#9XFDRn`UnP%82Ro zGEt}PCU@~AA zFX_58dV{U)ROhF;ZWU`+5Z+!eA~>}nJuyVh6p>;6^+&0>h|CHZF}EWyG<~|8l~qW8 zIfqs(6WelaM35Kp#|jFx4cB93Qj)q#Lw=!OCpt@`ecBogYdI!@v@@cQ5F;fhZh{@X zj~9n~QdCwbE}>t~op|SuRCi8YR3)O@2**lP%*% zjJiU_9HUm{6!~J~=`|7Y6=pqVS%5O3*h}nM4!=@CL^subpspKB%0}J>y3rWvnXX1# zrR2CVNc%ca@)@1amA^E?b;LoKGU<76sr&uLs(x~C3HoZ*Z{SB#C(bPFbt`egyL@ZFIjRq+7W`V1^*k1qAOCjvXq+2Q-v-+B<$7nIxk@<8CM z#qrC4j{>Qr`#C>HUR{7SuoEt!1NT61`^U2qMU;R&5< z7`mont!)+OIm%a5dBUJ??SzTmJ4CP?Q#GSg4waVUI)Mk{>-qc8k56c>8B^jr_ZOVDXLhYE z@k?iNRCq3w|G)%I%O31|*=|vDJsM_R6>o4ZEr|PRFQJEctyP-T+bI33e5W`<_63)1 z)5}ELk*Wta3+b=YWB5ior2dBlT$71$pH!yVmIwycgEN)WrdWWCFkt$DzfPVrTEAZQ z40~P7}ZYJ z$K1hdB}-tbdp+>|^PS?4;^^{MPLxxFEW1;lex)n%)<#$B@yH$9>53|F3jyM*1NJ|5XKfb;lEN@~I`AH;8rR(Djt$@%GZ z8m$*pi5S_GvYe`|vN-e!GyI`U4lOka#e5^DKkG4X|JUlQrxV z?8z4y46KbFtLflf6fk=(s!8NiTf=isYr0T#UazvRZJniD&lh!ya;YSzVeF>h4=}aS zZ^J#7AN!tkjq|1saWJ;lF|{3Qe52`{0`x0KMiiVweXKRN{Beu$)hKFlaewJeT%F5z z3E_-;5vrWQrxfJrZ^=pvVN~VGO^?%bxe?Qm@9Srg>X|m}NKFPD@g<1zhHS5Bw?w&K zUFUk|fsYKufc&^B$@ME5_)wpc>YRnE*5Wem+v8#QQ(NtQ-hzpaFiU4y$!~sw$okLK zv2()_*0$@hyy3QAJVy+)S%B<6RZKa1A$+!8p_u`YQb7-w?% zC#jiia^q!uOZi5^w598J^Zu;mxpj3zqieyARn%f)uynNlw&Uyd*umumC9*5Aq12X%9T!f<1OMeP&q1STZbF%uqQ3JC6n}Nm%gJ~^vl?5C9F)|xi6XRFTOx|wP z{`!`)i!$7ZIhj4LuxN$gkionvJ&ll|=jxBr#?-gAFf}JS(dB;6(-X{Q23^0q0?T0u z#+-{12y>#|W2n~r=lWs)_Lc7UM)zDX*H){Uu(J&457 zN{P(S)B5lFv#I)RudlZIT%Wh5>{wN~9&j38T_lPk>km|1*(R6Y6-U#loVLt6YUACCFn9xZ4*LVbzkK-5P&u z6sr$c<;f6&ho>#pZnc(?Ll}&+QLO`tQcCJuOTTfy>C=tWeLiO9e0#0T`U1~~WFhgV zqwNz@RqAM73wSv5JK1YAO5kUoH^bEiwSFNbM5Qx2~wJl0XH1YuPay zk1=I+CS%USrVeB4bDZ26&y6su_o zKv6re6%Rq$awPLfUDj#)rawn+4g^EMe`^Nv*#yv;TM`h2e|4_G)xz#5A4O$_>@vF-N^CQcNs< zKK5;Yq;mlQ@=dx_Rb5XjUAF+Yq;~R4gW{u&85t40gY`WlRFMv!Ebo7>k(siQ6wFft z1MZ>JJ1GaC`9gecLy6^1Hb^Lrpl^N8p4b-I{!P*Aes5d3y}oiPxlI^wM`fy?-4Q7F zlKy6tQ`s&ygz^lm$`yYEToswHLGosrEjtM)Zq0kN0zsL6g+-2~M}JVypzYe}U8EARR{yCW!mTYUvN*f=fy_gN z%dq`HKLCUNRqc!DMG?xU^hCpgfknBg3WCp8_T#|=kkv;Mk;%PrK(1~9yom{Lg=@A= zmp&ni`mIXAmB1*ALstZUfwoL#He*?omySv$9&X^0N_=7K0N1-Tq|L*Y?q6)t6nH_z z1aS*BolgASTJgZeG^-hJp|oB4n=nAW_rMYlf8ZK!{O9yich2bS^4LAv{0R}#Rcl%~ z{<~xUNyyDo1{25XqNe@~n)6=`vbcgRrb&71eYph%^Wu2370Bg7(JQcGgXTQ)7JNMs zJ9HSqKay2=sf5N5SAZc+stB_wMGdD+hz*win9lVK1Q%&kOZu=yV8$luH6FmSqQjb2FqOq=6-{+v+!XpEK-znNF*L^8tbA(2CkGO zd{7y7mQ9#Yk0AuqmTT`aS`3TPCfKS7b$(hRZu;2OnCkf_BA@Tn{bM$wx=@ZJkzEf! z*{_q~tx|jRE$0l-*gR$=^*ER}*M9hK;JvZ6FSnU2Zoq>WmyF`P({fH~LeSHyly!+_ z7v3F$s(7quNz}JK=)CZ3&D2?|v(|u_e`xfN@uq*a#FClL`ZSP<@a1W?dK*HIrb@Z| zPF`Y&zc;7wKkx&KOj#q%hoYo9r3=G z6q?~kRhWB=oRcxv;G*`3`*C`k_=qUfVJ5Sg%vvNH3oOd>(~FjWLZm5f>K_6x&}>NU zK8Cge#6hVJx$W-S41P9L<@6kt{wqIOu9M*jZTmPy1Dv(pl^PX)&~=6-yvv1SAR2= z#nU#rSQL6;@wbY&(wV07sM$NYqSY2RzYPF~>fc4F4S@!T&I8aG9v{}pT39~~(_v}a zV{bO>%3~C-ac? zfpCd1E$GhD(Bf4IRR!j!DBwEsEj{kB|65qQASc@eMY}1|hSV$-*Y}YH9@q zUwDAvR2BpCU%R#m*UTy;+Gs2LYV^B2A&zu6o3PjJ)w(9L`EtKjcfP@Gv8bORFg7RO z4?wFOKULapk)(}js|2SNj3j<2zaXpsit$m%2LoG4jO*N!lulER77>TLyH4MleJ_-( zI~z5`Me9qNTv6?F2VM1wM%_)&;YorZ(x6G*G)w;6zAnCLC2(0yqS~U<*^AHE!q2Gf zZT*+~_+M(B=GJ-3J7=eGpR*WGUZXHIOm(Oum1MsyZHENs9}WBCPd8sTFR-vKCBp97P- z-?lN1c(~6l!M4Cf@eoL?BT8&gIR|zJr`d#*Tc{jNzz(>~X6`LDzA7>&CR@*&S&$F`t6+aG1kO<*TTFaOW!g*4u>;J%{9`d?LKo zSDW)Z0Y$76da$Z{L~&7U0OjE`cXGJ#i(BWqq^ybrKEnNk6%kyCDCB@HVyve1pYLt) znJ1Cw;zfD}APT-T<|yM?jh-6iUSASOZy%c+Y(=*mLHPqT^yMXQCDnqAnh?}EqsV7X zP^bue^j(qf+0)FrcsN2<<$RijuA_7yDrXeK2Suos_u%$Nf&}-gTE1YL$HRHKS4llr zZnjo3J}s`D<%}Wpt_A{Rn9E>ZvygEkx4mNYZ<&MWLE#Ux4ftd;M?2SAisIY9G&O`Z zvtQ|3H)7hsVDgjU{Vdrdy&@fLkO7?J0g-Ywm+Q#qKN9T{yqyGdq@)LR^yl7y$-cFk zF+aVxpJX~l8;m_a&kW^@Gm91#b`(sbG`!@ov-dVbaB*b#(E#t55VGVJzp%r zqhLNDzIFP*NEZmUIweHv<~u%p5Ink1Sx2xq)-B>pVtkGe&a4T2>uVK8mtRK=>t)(L z#N|3u3nZo=KUkge9@0Ke{@_VXPcdxz90Bh&V;A9Lh9<5e9C9`CC1q3Z$<2+L^8>Wl z>u=_pX6$4{hB5`B4Z6tUPNGe&D3VWR%-sZQLL$6FM`avFXx9cfbkmjrz1 zC&Q?;cxFwjg=hWZdUH+K22FHwaf3NY`-Jnj&hAhZdq@ZPze9Ot+--W_kO!Fs4K_)I zzUzc3`8@?K;vv(lB1>*Ejc!{(Fme95G)dFMZTh$VSYw#jW<+1*!qs(}p3vp@!l#oL zRvF4z6%yeE1!y+rgq7-8x+oMevI)*c3rjnhilGWsnWr`bkA20sb;PmsnZ>g0`Z|Bf z3sMh4ha`fZeF)o9qSH6w_Kp8+3MGfQdJKM69oZEIK=aF%o3vglUoeB2m@1>ZJ$U43 zqUiEL?J5W&yuybK>`CK@w6%bW2cnaD;^Rlwo|euSSe9hjC{Yxy#9&fTJD&HwNkKas z=h)WCN@Plj#z$%Z^E)u`Xk-Bjv9_A=V6A$^!)>lXVn>Bm!}$YT;8b)XU$etjN^T^p zQ|nOx!G32t5ajZKPldEN2gfxz|9MP+^q%2lbNtWasN1}ci+8t92vT}k|0OUiRyW{l ze!*u`@h{<6-<6Xf8A@?)c27#wUMrA|@$ku)1#Tuw!UJcp2B-!6Xu~^KR6eIBS#GYV ziVf=4!_6kKR6UD#Usl`nxTXp>i`jaKofYoaPz#zz{x0rW{j>gd$(^HnP5L<5HjzGg zfE;39lD;bzT|eMG+q0_S4XBS;-m}1>J|Av`LS^wy+%-BwKNEvYPAFC)PA?qXE}{S< z5DCjrWex8(afp^fSjm3cBAQRIy-**3Nmw=axWf%atd{p}t4>*hPxrGYXKbmUSrfk$6d;j1MQB%uGXa2d<(9<}?x&vzq^Lo!NzH(}nF$%W_ zW=ytubTzo1&0#>$g*!{jV0n-_QlP?aanmA^Rnc#C#Cu!4aB!dWyaF2&z$x_vLeKGD z*PZps?Jm~R=VPin%U+1|kjYn0>KCl#6v}C@@YBVvax%ds6K=>snlCj&bkaR$r_Fjb z+1>#`WRIPmv99Gqwzz(z&0Kb}@>YrLj$RIm!U0>)v_G(97o2%yZ<2DEzBPK&324o` zr9Nvpb>Kr0RiZi;ebi`$0oTMAu5Oihyx?H{zYKfXeYuOQJ#h;^O6ab=)_P{|2c-1o zUoCDG`SI^dx)YOnYQex}M?br#6oP}G3!kyunH*Ps%Do>qZL@>Dhjl0*;>J#K@jP)~ z+|Meo#PCu{2QwGpP$QG}8URwVs-twDLPe9#Ej+ z$TNi$3KICi4Z!t59xO(1?;j-hy4}JP{k|qdH)m& znTYEd$SSn~Gw{mN0bb^>w_pn||Fe7c1DopCb<992nRqH8-e^o-i-Rw9JfJ$}^U1vi zBC2N{1Gs~qwb=i2YDIwbFA5K{RV-#L@x_2P=lL^E?^W17$DhC&7rl^I;=6!J2$q>c z3+%Nq(a7`kdcKLXiFk8$^Tz7pQle{k7)(>M9Z2r@W?XpaDh*uUu^D!re*m1665CNe zQk(GbwxO=Cb`~bP0bxKp5gaBCTC-K^ywBCQ%bYeg5YeK8W{Bi9aUoASqa8l$6W24( zFTeo~n%77A_Gz>G%@n+@rEV%GHotoL)9;w3NwYX>4jMhhl0}4&xMM0&e9k)+7(;9H zalR{pI${gtePN?;ww-V;I6NNc6ltL;;p2xqn{S4)e{ z4_Z#Od#B3)zOFiZhKBV8k#c7izfZglB5Jgp)1}r05l#F1 z{u^SGdh&bds^^tbh*XsY0ccK!by+x@{ETlVe>zL=LCOkC;p)Oym#D;z$_K?tc4{p6 zWB`9hcGdE}hg73D9zwQQg!-*9Xt%#ORW*~Z3HNF+8KihzamHqdO~yVMK`ygpn6MEV z|A}Dleb(}7V;8@UEB)D+X0gdOhCpB$?zn)xJ|faU1gwCW)#1xejtYUxS}K!>E3Doh z?ercXV6GU<`;>GOrwI>Z5##M2vrsvZhPQAFY)j>xL8p(gSa|+x9b4agxQh)s_jrfC zRMC1kong=V2gLzjD}~1Y6ZWlpwj# zf{ywiqR&pr&4Br3qP3e~{-?(N8Cp%2`2VkF#CDKa z`0g*Me+M#`_rE?XF|ckt+T+z0cmZgbd&O|Zks?&-HRkNe+M1w?lj}puSLD(RJ)>A? zff5NoCI?#v3Q%@cHBeK*w_WnDC%r#Sn*x_~SxrR@e*-cdE_`2%^`X9w-EaWN>+S#f z6#mUohuheKg;hxC1rML>%Wh|{;khMMaKhay5!|puLU*yy?39tChh}4hRXNR z8pD-xc9H(uh|MK_3XPC%=y`8{z|`wFU$ey0Q-8}G;`5K~*V}JbT6Ps|DD3jtb~j3+ zU$R6Xl&NLgqvSp$eo;p6i7s}U@A)wSj;mWwN^-w6H*2yc zS)m60w}Su}`RcqlAO_3ypEpWqH}PKOy8owk2D@&70Sn1D^dpZdnBnWQLRN#<80X_P zMYf*PR2s>_((Ec5>cG0JIksLViuhxnOjy%*c)fML?Qbhu{nxznJD+rQj4l^xIo$m} DfaeNo literal 0 HcmV?d00001 diff --git a/docs/images/external/openai/openai-logomark.png b/docs/images/external/openai/openai-logomark.png new file mode 100644 index 0000000000000000000000000000000000000000..7d42028730f5a63844e37c7d79c62230b2f7f8be GIT binary patch literal 19878 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
+ + + + + + +## Full Examples + + + ```python sync + from openai import OpenAI + import agentops + + agentops.init() + client = OpenAI() + + response = client.chat.completions.create(( + model="gpt-4o-mini", + messages=[{ + "role": "user", + "content": "Write a haiku about AI and humans working together" + }] + ) + + print(response.choices[0].message.content) + agentops.end_session('Success') + ``` + + ```python async + from openai import AsyncOpenAI + import agentops + import asyncio + + async def main(): + agentops.init() + client = AsyncOpenAI() + + response = await client.chat.completions.create( + model="gpt-4o-mini", + messages=[{ + "role": "user", + "content": "Write a haiku about AI and humans working together" + }] + ) + + print(response.choices[0].message.content) + agentops.end_session('Success') + + asyncio.run(main()) + ``` + + + +### Streaming examples + + + ```python sync + from openai import OpenAI + import agentops + + agentops.init() + client = OpenAI() + + stream = client.chat.completions.create( + model="gpt-4o-mini", + stream=True, + messages=[{ + "role": "user", + "content": "Write a haiku about AI and humans working together" + }], + ) + + for chunk in stream: + print(chunk.choices[0].delta.content or "", end="") + + agentops.end_session('Success') + ``` + + ```python async + from openai import AsyncOpenAI + import agentops + import asyncio + + async def main(): + agentops.init() + client = AsyncOpenAI() + + stream = await client.chat.completions.create( + model="gpt-4o-mini", + stream=True, + messages=[{ + "role": "user", + "content": "Write a haiku about AI and humans working together" + }], + ) + + async for chunk in stream: + print(chunk.choices[0].delta.content or "", end="") + + agentops.end_session('Success') + + asyncio.run(main()) + ``` + + + + + + + + + diff --git a/examples/README.md b/examples/README.md index 34270b96..03c7f452 100644 --- a/examples/README.md +++ b/examples/README.md @@ -21,8 +21,15 @@ At a high level, AgentOps gives you the ability to monitor LLM calls, costs, lat - [Multi-Agent](./multi_agent_example.ipynb) ## Integrations -- [Using Langchain](./langchain_examples.ipynb) -- [Crew.ai](https://github.com/joaomdmoura/crewAI-examples/tree/main/markdown_validator) - - Crew is a framework for developing agents, a number of their example projects use AgentOps -- [Cohere](./cohere_example.ipynb) -- [Anthropic](./anthropic_example.ipynb) \ No newline at end of file +- [AI21](./ai21_examples/ai21_examples.ipynb) +- [Anthropic](./anthropic_examples/)- +- [Autogen](./autogen_examples/) +- [Cohere](./cohere_examples/cohere_example.ipynb) +- [Crew.ai](./crew_examples/) +- [Groq](./multi_agent_groq_example.ipynb) +- [Langchain](./langchain_examples/langchain_examples.ipynb) +- [LiteLLM](./litlelm_examples/litlelm_example.ipynb) +- [Mistral](./mistral_examples/mistral_example.ipynb) +- [MultiOn](./multion_examples/) +- [Ollama](./ollama_examples/ollama_examples.ipynb) +- [OpenAI](./openai_examples/) diff --git a/examples/openai-gpt.ipynb b/examples/openai-gpt.ipynb index f5ecaf07..43bc65af 100644 --- a/examples/openai-gpt.ipynb +++ b/examples/openai-gpt.ipynb @@ -254,7 +254,7 @@ " agentops.record(\n", " ActionEvent(\n", " action_type=\"Agent says hello\",\n", - " params=str(message),\n", + " logs=str(message),\n", " returns=str(response.choices[0].message.content),\n", " )\n", " )" diff --git a/examples/openai_examples/README.md b/examples/openai_examples/README.md new file mode 100644 index 00000000..6416b46b --- /dev/null +++ b/examples/openai_examples/README.md @@ -0,0 +1,21 @@ +# OpenAI integration with AgentOps + +AgentOps supports observability for OpenAI's API for both version 0.0.x and version 1.x. + +To learn more about OpenAI visit [here!](https://www.openai.com) and their documentation [here](https://platform.openai.com/docs/introduction). + +## Getting Started + +### Prerequisites +* An AgentOps account with an API key +* An OpenAI API key + +Refer to the [AgentOps documentation](https://docs.agentops.ai/getting-started/api-key) for more information on how to get an API key. + +### Documentation +The documentation for the OpenAI integration can be found [here](https://docs.agentops.ai/integrations/openai). + +The example notebooks are present in the [openai_examples](./openai_examples/) directory. + +### License +This project is released under the MIT License. \ No newline at end of file diff --git a/examples/openai_examples/openai_example_async.ipynb b/examples/openai_examples/openai_example_async.ipynb new file mode 100644 index 00000000..2576ea70 --- /dev/null +++ b/examples/openai_examples/openai_example_async.ipynb @@ -0,0 +1,235 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# OpenAI Async Example\n", + "\n", + "We are going to create a simple chatbot that creates stories based on a user provided image. The chatbot will use the gpt-4o-mini LLM to generate the story using a user prompt and its vision model to understand the image.\n", + "\n", + "We will track the chatbot with AgentOps and see how it performs!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First let's install the required packages" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%pip install -U openai\n", + "%pip install -U agentops" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then import them" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from openai import AsyncOpenAI\n", + "import agentops\n", + "import os\n", + "from dotenv import load_dotenv" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we'll grab our API keys. You can use dotenv like below or however else you like to load environment variables" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "load_dotenv()\n", + "OPENAI_API_KEY = os.getenv(\"OPENAI_API_KEY\") or \"\"\n", + "AGENTOPS_API_KEY = os.getenv(\"AGENTOPS_API_KEY\") or \"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next we initialize the AgentOps client." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "agentops.init(AGENTOPS_API_KEY, default_tags=[\"openai-async-example\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And we are all set! Note the seesion url above. We will use it to track the chatbot.\n", + "\n", + "Let's create a simple chatbot that generates stories given an image and a user prompt." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "client = AsyncOpenAI(api_key=OPENAI_API_KEY)\n", + "\n", + "system_prompt = \"\"\"\n", + "You are a master storyteller, with the ability to create vivid and engaging stories.\n", + "You have experience in writing for children and adults alike.\n", + "You are given a prompt and you need to generate a story based on the prompt.\n", + "\"\"\"\n", + "\n", + "user_prompt = [\n", + " {\n", + " \"type\": \"text\",\n", + " \"text\": \"Write a mystery thriller story based on your understanding of the provided image.\"},\n", + " {\n", + " \"type\": \"image_url\",\n", + " \"image_url\": {\"url\": f\"https://www.cosy.sbg.ac.at/~pmeerw/Watermarking/lena_color.gif\"},\n", + " },\n", + "]\n", + "\n", + "messages = [\n", + " {\"role\": \"system\", \"content\": system_prompt},\n", + " {\"role\": \"user\", \"content\": user_prompt},\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "async def main():\n", + " response = await client.chat.completions.create(\n", + " model=\"gpt-4o-mini\",\n", + " messages=messages,\n", + " )\n", + "\n", + " print(response.choices[0].message.content)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "await main()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The response is a string that contains the story. We can track this with AgentOps by navigating to the session url and viewing the run." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Streaming Version\n", + "We will demonstrate the streaming version of the API." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "async def main_stream():\n", + " stream = await client.chat.completions.create(\n", + " model=\"gpt-4o-mini\",\n", + " messages=messages,\n", + " stream=True,\n", + " )\n", + "\n", + " async for chunk in stream:\n", + " print(chunk.choices[0].delta.content or \"\", end=\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "await main_stream()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that the response is a generator that yields chunks of the story. We can track this with AgentOps by navigating to the session url and viewing the run." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "agentops.end_session(end_state=\"Success\", end_state_reason=\"The story was generated successfully.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We end the session with a success state and a success reason. This is useful if you want to track the success or failure of the chatbot. In that case you can set the end state to failure and provide a reason. By default the session will have an indeterminate end state.\n", + "\n", + "All done!" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "ops", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.15" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/openai_examples/openai_example_sync.ipynb b/examples/openai_examples/openai_example_sync.ipynb new file mode 100644 index 00000000..4cb1a3b1 --- /dev/null +++ b/examples/openai_examples/openai_example_sync.ipynb @@ -0,0 +1,207 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# OpenAI Sync Example\n", + "\n", + "We are going to create a simple chatbot that creates stories based on a prompt. The chatbot will use the gpt-4o-mini LLM to generate the story using a user prompt.\n", + "\n", + "We will track the chatbot with AgentOps and see how it performs!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First let's install the required packages" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%pip install -U openai\n", + "%pip install -U agentops" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then import them" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from openai import OpenAI\n", + "import agentops\n", + "import os\n", + "from dotenv import load_dotenv" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we'll grab our API keys. You can use dotenv like below or however else you like to load environment variables" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "load_dotenv()\n", + "OPENAI_API_KEY = os.getenv(\"OPENAI_API_KEY\") or \"\"\n", + "AGENTOPS_API_KEY = os.getenv(\"AGENTOPS_API_KEY\") or \"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next we initialize the AgentOps client." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "agentops.init(AGENTOPS_API_KEY, default_tags=[\"openai-sync-example\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And we are all set! Note the seesion url above. We will use it to track the chatbot.\n", + "\n", + "Let's create a simple chatbot that generates stories." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "client = OpenAI(api_key=OPENAI_API_KEY)\n", + "\n", + "system_prompt = \"\"\"\n", + "You are a master storyteller, with the ability to create vivid and engaging stories.\n", + "You have experience in writing for children and adults alike.\n", + "You are given a prompt and you need to generate a story based on the prompt.\n", + "\"\"\"\n", + "\n", + "user_prompt = \"Write a story about a cyber-warrior trapped in the imperial time period.\"\n", + "\n", + "messages = [\n", + " {\"role\": \"system\", \"content\": system_prompt},\n", + " {\"role\": \"user\", \"content\": user_prompt},\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "response = client.chat.completions.create(\n", + " model=\"gpt-4o-mini\",\n", + " messages=messages,\n", + ")\n", + "\n", + "print(response.choices[0].message.content)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The response is a string that contains the story. We can track this with AgentOps by navigating to the session url and viewing the run." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Streaming Version\n", + "We will demonstrate the streaming version of the API." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "stream = client.chat.completions.create(\n", + " model=\"gpt-4o-mini\",\n", + " messages=messages,\n", + " stream=True,\n", + ")\n", + "\n", + "for chunk in stream:\n", + " print(chunk.choices[0].delta.content or \"\", end=\"\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that the response is a generator that yields chunks of the story. We can track this with AgentOps by navigating to the session url and viewing the run." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "agentops.end_session(end_state=\"Success\", end_state_reason=\"The story was generated successfully.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We end the session with a success state and a success reason. This is useful if you want to track the success or failure of the chatbot. In that case you can set the end state to failure and provide a reason. By default the session will have an indeterminate end state.\n", + "\n", + "All done!" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "ops", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.15" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}

6)9_^pgmzanS&)byt0uS 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 V3I45{GrUJX^>hp`muVp){~u-4q6Gi| literal 0 HcmV?d00001 diff --git a/docs/images/external/openai/openai-white-logomark.png b/docs/images/external/openai/openai-white-logomark.png new file mode 100644 index 0000000000000000000000000000000000000000..97e73e006bd677459efd18dce7e993e2cc358b3e GIT binary patch literal 21382 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 WI9;DcjR7{3$Ki~#ZG*KB@&5o|y1sS* literal 0 HcmV?d00001 diff --git a/docs/mint.json b/docs/mint.json index 45e61b45..c534fc6a 100644 --- a/docs/mint.json +++ b/docs/mint.json @@ -87,14 +87,15 @@ { "group": "Integrations", "pages": [ - "v1/integrations/crewai", + "v1/integrations/anthropic", "v1/integrations/autogen", - "v1/integrations/langchain", "v1/integrations/cohere", - "v1/integrations/anthropic", - "v1/integrations/ollama", + "v1/integrations/crewai", + "v1/integrations/langchain", "v1/integrations/litellm", "v1/integrations/multion", + "v1/integrations/ollama", + "v1/integrations/openai", "v1/integrations/rest" ] }, diff --git a/docs/v1/integrations/anthropic.mdx b/docs/v1/integrations/anthropic.mdx index 779d80d6..6b135159 100644 --- a/docs/v1/integrations/anthropic.mdx +++ b/docs/v1/integrations/anthropic.mdx @@ -18,10 +18,23 @@ This is a living integration. Should you need any added functionality, message u ```bash pip - pip install agentops anthropic + pip install agentops ``` ```bash poetry - poetry add agentops anthropic + poetry add agentops + ``` + + + + + `anthropic>=0.32.0` is currently supported with additional support for the Computer Use tool. + + + ```bash pip + pip install anthropic + ``` + ```bash poetry + poetry add anthropic ``` diff --git a/docs/v1/integrations/cohere.mdx b/docs/v1/integrations/cohere.mdx index d8fd30ed..587adab6 100644 --- a/docs/v1/integrations/cohere.mdx +++ b/docs/v1/integrations/cohere.mdx @@ -25,6 +25,19 @@ This is a living integration. Should you need any added functionality, message u poetry add agentops ``` + + + + `cohere>=5.4.0` is currently supported. + + + ```bash pip + pip install cohere + ``` + ```bash poetry + poetry add cohere + ``` + diff --git a/docs/v1/integrations/ollama.mdx b/docs/v1/integrations/ollama.mdx index 31e6512d..04d84932 100644 --- a/docs/v1/integrations/ollama.mdx +++ b/docs/v1/integrations/ollama.mdx @@ -25,6 +25,16 @@ This is a living integration. Should you need any added functionality, message u ``` + + + ```bash pip + pip install ollama + ``` + ```bash poetry + poetry add ollama + ``` + + diff --git a/docs/v1/integrations/openai.mdx b/docs/v1/integrations/openai.mdx new file mode 100644 index 00000000..0ac716e6 --- /dev/null +++ b/docs/v1/integrations/openai.mdx @@ -0,0 +1,195 @@ +--- +title: OpenAI +description: "AgentOps provides first class support for OpenAI's GPT family of models" +--- + +import CodeTooltip from '/snippets/add-code-tooltip.mdx' +import EnvTooltip from '/snippets/add-env-tooltip.mdx' + + +This is a living integration. Should you need any added functionality, message us on [Discord](https://discord.gg/UgJyyxx7uc)! + + + + First class support for GPT family of models + + + + + + ```bash pip + pip install agentops + ``` + ```bash poetry + poetry add agentops + ``` + + + + + `openai<1.0.0` has limited support while `openai>=1.0.0` is continuously supported. + + + ```bash pip + pip install openai + ``` + ```bash poetry + poetry add openai + ``` + + + To install `openai<1.0.0`, use the following: + + ```bash pip + pip install "openai<1.0.0" + ``` + ```bash poetry + poetry add "openai<1.0.0" + ``` + + + + + + + ```python python + import agentops + from openai import OpenAI + + agentops.init() + client = OpenAI() + ... + # End of program (e.g. main.py) + agentops.end_session("Success") # Success|Fail|Indeterminate + ``` + + + + + + ```python .env + AGENTOPS_API_KEY= + OPENAI_API_KEY= + ``` + + Read more about environment variables in [Advanced Configuration](/v1/usage/advanced-configuration) + + + + Execute your program and visit [app.agentops.ai/drilldown](https://app.agentops.ai/drilldown) to observe your Agent! 🕵️ + + After your run, AgentOps prints a clickable url to console linking directly to your session in the Dashboard + +