From 426afa45711c5735e6ca2ccdf508ba4b57ee6b06 Mon Sep 17 00:00:00 2001 From: whylabs Date: Tue, 24 Oct 2023 00:11:46 +0000 Subject: [PATCH] Update from https://github.com/whylabs-ai/whylogs-container-python/commit/c4419dfca2367590ceb18757609011e811442ab4 --- .doctrees/environment.pickle | Bin 1033366 -> 1067781 bytes ...hylogs_container.whylabs.container.doctree | Bin 195041 -> 221384 bytes genindex.html | 8 +- objects.inv | Bin 2489 -> 2495 bytes openapi.json | 2 +- searchindex.js | 2 +- whylogs-container-python.html | 100 +++++++++++--- whylogs_container.whylabs.container.html | 122 ++++++++++++++++-- whylogs_container.whylabs.html | 3 +- 9 files changed, 201 insertions(+), 36 deletions(-) diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle index 9fa045f8015ac5dddcb82837e44fb5ed2fff2cd8..82f8539b96ec3a20e998f2ecd6846401e82251b5 100644 GIT binary patch delta 110213 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 k@{gR{lR4jpL?*uCuV~$b36^m)!MM7P`yL{eD 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 avJ?Vwqwx;18HbE6%G9tO0}dHg9sdKQqIK8+ delta 89049 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 bG?9(*1^5BJi{2XJ$qm*a2aJ)-M*98_g-qN6 delta 19920 zcmcJ1d3aSt(l=c~I$WHc6Kx7A52ZSsHl4D57CbCFiL=glu-e5bv zh#-ilo+R=QnyCoqB}-Upx1V?y<#I5IDGOURl+wy2u-4m(@l!mv_Fax!ia4O{n&SdbfVt zd7Zt3=+L2qB^iRdZEC5lWrGY*w$ z9VmK;AZiGbW7mo_*|SQd%Y+osiTGQJV}+NH??($S`NudEUWKFVyhDUKM;H?CGJ@QO z-{ia~5hi;^ieRzY9LdL#JH3Z^k_U2p7d6=wfac@iGsSC4w|7jAQ1LNS%SV&M7U`X& z1g9xwYLeP16DNyOg|AFW7KJ>td?H!&mrG+sfryruvP7VZR_WZpuuP2;QDUef*cd0C z6@M^^(-b!4s$uD6bQ;2{#u1B6GTqWu+~9=ziS`6rodi7S%Zh*pecL2XV@HZM)iBlu z)#QubY@GPoBny>+X<~r*seMByDF%zcmZCHfDuA|b=y;k6_KZufVLT#`Z@!!pEm;%NF(gnLf)@6e$b2r&BN92izRNt{cSnlsg92zbjr-l@< zTow-z5$M{)VPY`NS{i=WDAAYbij$%}YiRU)p78Q}1HU$u$CNK-7E|{sX`duAJ*zD8#${&teuynv2;fH>J%y?# z8SEqMXr!ZN%5Cyb`C_kW@WKKyRa`V|72n97h2mdgzI?wQ&NXBG(lT2%Tx7y8%G{px zEs$o0_=QaNlV=8qo;aJSS)%_7#(n?{Ogk;Fn2ON7W*)Hop~TM2z+{7~U5 zCNQ-zWC>Hd4rw2TL(Wq|aL5v?kZ5!Uscek)m?Cr?%@DoSRWvH<<9IaBSG>&Z2F)Q? z8noEoadBdIaZCxNg=CCwFr0H`Fopix5GuWFwg~Ap!HOaUCDEOm<<4p`wY|^~R}NEX z0=1gH$#tb6-#Bun_Y@FPy8r+9 z_Iza#IxaK2H-k^qdQ@gr303)>u19Tqj+#;A%h%##mp0iTt3ZJcPcw7lUb# ztf|7#>LI^afN_R%do0lm#>DN6uO5MH=v5q8kFVVVIlf*Fu*BCuxnr8}bQ>9H82aHf z;pIOHzZ!;i!)M*lE2#V=k>Pp8B9)@-T}Y%%ok34*>Wo0cR9W+`h?VE2i^0Bkn}n4n zVP&9P76)Z5o9_~@3wR( zf*? zC24J%Y%GcFO8YKp~zXrXeE4R@~ zPR8zNFY+}D4Ws&w5{I#OAxcv2|J;R7vI*ZRD%}J%13JiY%X#4&8g!?IAV+I2Uy{T| z1+=G$w$QK!>D1I{0If6_>B8sq%O9wf!pJZhfTv-V3!y%*Zct)XdzvSx!Bmu$*h)?9 zlz7F3Pc4MEsfFuAQ(e~Llq)5-e0@X9Pp&PzW^nH7YX&1oh&j)#i_jd++E zzng+gn-&y|A&j0MY%c$pAB+} z3o=V9aeLitTKX041(2RY)pkRe^3XoTj=RW7w_;~My=SmwUvkdZY3jqhh4)WjzTsasBr`~#iaLmC(Zm}bTnoLI}SP6_EpR0y3 zs{h|J)Of2TivLBHp{gtd9Q78fVW{xF#Sm&vJZcD3Sz&`>{~chcV7=R5XCJpRw*{M{ z7J^e20#aCN&th!&-Rk~gh;yb84=J{z2;-E=ek-#%NZ4gDF`bDO0mcH0Cpjs!xOm=V z-$*gsq+qD0sDZJ}x_MkPmS3esq6%&pICbT39^6m{>%G=0gWJ~sM%#8v8%IKCsL}d| za3pjOu|~pQp2ky>BVn@dMiJouMwl}a_NOSNa!^-G+hkx{nBJRXR@6OQ`PzRo5a%su7|1WyrZnyp|8B_VPq0q4U<>z zgF2a?3qxel5z$rtYl~PW`ZA%a(XXOVeK+DiKqejpANl8(p{M-lS>Y!lnGoZ!r!YmiG6L9+F82!PB1E;V}E0C_1u%*F#&CcvsV0LBkcW$`R(%fzp|C~A2SUKB{M z$pdomScEK*7&@zA=>WO06PDXL^#%)dYZr(TFHn=NgHH8|g=&Lc3>0rGs_!mCGAY7k z2rBu)pM@sAP<^cAXS$LXsVx)mYr&5Y;gp9BzAuU)&?8(PA1EG%ZsBAFgoZmVO-sga zygDE;TsGY=GK}6lXKxn~0i(iY!2+1CDk@~*+UPTe1Li1F9EOa8hH&}C=O{?;z2EF5 zqo65V9xO$q*eYZ(ta@vgD3;q=@pz1F+8WNlOOJzu)A#uCk5&vVH3vn1u3fP|a*r4V zAG1y4<=^&*DmWRgfX7ZTSXiOn2VN6Fus%Ybeoff@pF(m2 zo@q`Sh9V>sPKH{fQ8;-KTU0pNK~Ee`b|5tsR%q?<*Tq@W>eKttzPAjk;c!IDoCBgz z;P%)sxlNh;l`^>v<#Z8!SMJpP6#fPzRz)8I_ViEL?nL-+`o5UJMi*hpUC zC6T(b-G!VMip#hg-=dxO31(eVUDl-@$2iG*ULcgVXE-7c|EZt3opq@u6v!X^}=~p2il1<{5foG|!l5s;qUzl0!Ia z{g26Z!DPD-Nm*-l%U$n@8UdZ7C~GCkFFw_CR_7?rS+*#NXJ-3kkMqJ)Mt&fc$;?l1 z+3|srEy^@DG)f&Pbvz~p$|sS6vXr%-vy|hQSRsbdD0+q%9OaUw@}uN~$Hkqv_L%^K zWgzbV^s^gm%7p1r919jZ^_(81lGIvmQb}r6l!}$uhp{pqWpq3#=8D~>*Z|m}%Wb8$ zO#I4nk2>Wd0VNi3M#-guUL}ZAiuAIR^b`(5vk0Qq3{@1+Gn!{8_2Mj&gTKa;$}tO| z!VshKj2aoz6)}#=d1h#|$}@WJ1hcp16C9`{+9l5*i*97#r{XSH#C;hsKbnDqmAX>% zqj}j#B?)`8{~LzDwrH8S2-D`Xs`qu(`)sr_=v|#x@BPHtOUvS)(ay9fo|TCgg}39v zqCgy(M-nk?K90l|^@vdx>Aitw?}F1J8De6b7U8QTloc*_?gMwor)j7kO<3j=FRowA z#g!IEld(-38H39r1)n*~(Ss4KLWw}FuMSbpEH^GjWw~iFoaNxI7}=CA2E)`C&Tw;L zIK#16&TuJF>Qus`7rex)qHD7*6(w=bTYxI)O`~Ht=XE@X0d6!7KsoQkIdMCzi{aqb z6eBUX@#>lg&m%t-DO+L~zrQGiw#0D0gCjBIsk$K2#5LC$CQ`0LP6|Rzq=3qGn`0QK z)iGue>dfere<+Wi6Mi{u+BuTvIR;<%7u;b6{Z8|0tLM(ES0Vo&NMV4unM5lP*CKEf zq}EzSqagJIwx}R=g`PM_T|sKfg@_0pGCcP$@sx?kyst6b_lRXgy2Z+Qfhyi~myKVG zPV&`n#83!{l}%}oiPsjWx=V=VsTCBfpvjHBH8eqrbG*sPE4IiYw#wN_^Lufu3i~%h z9K{mi-C|9|17jKSPO&E9Hbh*$e-SJ0^|A7siz3MXDI_-#4J1~DsC%qJ)ZHSDs|#$= zs|$Kk)df;3L}g+G43_;biR}bwa3sXYE0@GXcuPTg7&V$*ORofm(uD0U$9ymDgiq0Q znr&?gn6H%WZ44MFzs}t?jva#B469$9MRvHemvBvqyEU#Tm#Y^i5+5pD z_nWxJcVD;VD&8)^f8{3$;;J7-C`^cxjvvJU|A}!-SL7yII9fwb%9r26)Cu^EoWaeNi; z$iy!AW+(p`ZXNmc%$srYqhEvu=i?~EX297vl^8DTPC6S$Yf7%{0;$-yZa56bL!)3X zaCs}QGFH!cbq0gw2KG{AjxAh^rzv{gAYvOPY;W~Kez*%Mje>W3h?jSl2J>tyGoKMG zH25%O9`6Mzub|?*^Ff1FxWOp#gkq%kP0-AvMv1KkBew8>FLMJ8D4OL)56Bg7DmGU3 zP&^k3*oC9?muCV*4?yv_RrZ$No#9TrY{E$J80Ymdelo{6ug2&kkM~waiSudt@ zKec5-%|OPY$te^Gcx%6zo0OtY>x$~suUn{D(RZmyS5&9^#6rc2{!>x$CK$)jeTK7M zPve#e&cSkdoDnQj<6oia-=?`I;3A}F&g1l81k7zjpjPvPan3yMnV|A`p9Gc1{S#Ck z@14MTJT!sxIE&>x{z{yg$BzIqbLvjTQFYl}6F7Ab^@eTGH9=nThWlV#0_Uhv2`w-9 zK$w78$VM@=D1q>W+60b*MW_iLqslRZaW*YQl1OnEUv3Ga(Oq-5VHV|X0NUIvp`}qLm6KexEp6gmB&|iDL06!bSzZnF;K+VF`xYa0iWe zzS|e@8d0LW*cZZZFX43AOed_vWkD=tdJeY;qxkEE^eX=Lq9=~Oy%JUYMPE?S5E%eZ zkuSK6x)cBf5R=FbiAZe0qM@6B+(hM&%tSVRWFk8xGf~wEe@MJFmdHuQMxYM5u^EYM zY)GPMY-gUBSVDal0KRT*+QLM+!VW?Hi(E|3AOUKYhM^TyD1}*MlFbiei?Vq&J+aNJ ztv0_B49}T1uL*&%@T{_VQ({ZMQ0OV-dr1_z=w$e1W%ZlN>X&t^PyP<8k&~?6TPzIl zuSRkMj5uOdVECbV=u0WLV!m~3lJwzWwu zSa5tJ;JGAq_WY8GfOyWd2sS6RV9ha9;1L^PD|hw~0iK&tiax|)ylqG2#^yvAC{8d9 z;opvgOOC`O_%HF50+nxsoJ(@q$Dc`(>B&$A9gixF`4|e+o)9tD8Ckd@K?S*9Y7(H`#q6fqE zhlxPBek0Br8)hWPb`@8)5#>2pR%*y2p~J> zr%!NPUHXn>&QJGb!)DllQfX^BBnO7W56K)8FD19UpM%Z@_Y?)XTMEZS-xLPjEk&Iv z9?1iL2um>mni5DVxF#vXI!aP*vS|XucwQnk)U>pvFh<`dn@b~%fx$z?-eVg|?rbR0 zH8xWTYi@%e%pChuWWwzb?tcK8 zj2Uzv2~abr9BrfEQErh*NPK`T3W;O%#7G=dNYGVscN<=oUI9Li{7g5`jWi{dM!3Q` zhgO*x|vl94m|m^P4p$Gt_S?=!^0 zH>fw$6MJJblKbGiM9gSjt{IQ@qk&o4o$xq>rpgaqf@o+(#qgyO3`}*58)(A!nu71B zf)BqTe6TOIW&Z?75pw-33?F<3yU(f3Ssks>lb|15QfOJb8LjsYLNornBDex~c)YK% zrK!zAZ*HS~oh^;?Xec$PTS`b%bQp#RG^zrkWPSujn{LlTIy{gny`qFKB&Mld4ia*~ z|0~0-SNv8j$Two9614Mv7-PzqmZn@}A!iru!Ew<=iQkj8ZCYa*qD;>eeph#_tez7Y z)oiSvvqYm@winsRWqU0kvCGzy2zJ>c^u#WE1a)_D+1>TvAeUk3A0uNLV7}ope8oxV z*)*%mo>!>7;zSKw$ZcEF=)LbgIdVR%5FaqFa^4mkT3?w*(`c&u$&`B`R(!@ZbcAlD zaL#sXJ0p6Pn4+Ww(I0d~E#!>o(`YMA`qQLBo8~_VK{%Zzmn?)}&!g0)5Zr`hgy1HN zri5VcNMd0Gqv(kdjFJV5aH*;}-=zQ@GjmpTX`O5u4_Weq7a^fHeQhr9G`haIm>f14 zBLzZyU?=QzW6GKh5Yly#!5ArDdIko`o_iokKD`*qO%L2Ii|@VB1Gf$0c{`Cix&Ffz z@<84o9>Ru0$b;{|5}^@^UIFEy`nne?2FZfm;1{g4RKId^Hn+HYFXW3_bG- z?rK2nvWzQ;P))*YRAv(Xeq!UUE{#*xi4GkmlvmW*@%L%-sw=AM?f6`5FR7@v*Hu(j zE{M0^VJ|JNim12GuBe)2FRrqe71u4W&o5qJubyq6TU^ypj8yj0>ZdMNBsyR+c zSmA$^a%s!{As;suSzHFAgZhrBcIc2q7i&0#oA$(RDUJ0x%vkyeoBkJrW)w34Z zi|gzo%{Qm^lCsj`hPpBoR$Ol{$3Bu;S23&1UN(DnS!q3~Q(ReBZJ$?GJG;7eE@@I% zR*U_`4fWM?i|Z>&Nz>S_^UEtr%XO;8xpns0#kKbOYUHb~u0>1gtL=A}mCZBsMiKXv z)!Oj@zZ46uc>4`lX$^IVO?9ndmz}MyR#vke^$X^ebtMV}>7KHxin6NGvRHdb147-1 zD3@0^RL&xRi%aVjm?dR)v~*Uy{=>j2PyIe0on88;|E-rA$>Fzl6MKopyZQ+m{$D-S z`1@V;|HV_2aDx6$SDBt-9B%ZLGn&o7NKgd{o>|T%H!a=K`lo1*Y-&-ZV+F0_EZ+uN zxE%HGp(l>|_oQ>)?D93%l6X}rYmlSn$$a_TB9%V5N}RnIHW|Si92g~Ttau(t=Ynxl zIv0%ijRN<>=`EN#^91}QovTBShjCP0qrGxzBgU~K>0B4OcA!1RbdYCF`XhP$GM!(Og$+~v5nzgge7WvIZ2gd7-8aHP{CqjhYGjIv}k#5l%=jW$DL ze1&Qi*Kl97G-cIT|=F!0>l<_$o!0!7Y{&|5YI55 zs$=Hku)0$=Wzem)Z2YYRiKP<8+G#ol&*6ze<+MW?DoLJHT$m&eDFx0_gHix#*hQDA z>9GO1kJO_sK4xtWOb?hHBi zO$hYdL~Y7R^+-lesrnHZ{Z>__6RfIhUZNu-7S}GhM;y^ zggKe)qXpEb>IiHhAC+ddT>TrJ^Q`4A<)cy@Rrk@FOtr20uXk}}t!El?l$FBisNF2 z*g_5(lO@;mven9jiBKr>K7^I{iv$v&JT(S~*FCi$OM10IKK{0ky2(k_PIl7HHh4{J zPy)C@d@@UU>IKDxtLaIl$t%>rn&5BHYo5a?@*cI&4_bOyw{vf2DOaJWH+g0~#~-+03_D4S2-4OiloSFaX`fF!1bzS-)v zaeg+3W}|nsvzJ~QPtUg2n#jc$HE~q0@(7`bQ7L*;17r@1kk6Og*6 zi7d)Qbd5e2tsvuE^p)FxfGjwG3Py^FGW!Zdnzp>EZ27wy;#J+2FLYb<-iyv&vgLX^ zTafG0Sv;Ju49tONc$Nx0t7uZRX@NO7HCJWHr@n;#o(rf=P3@6LMuBIfW$tj`i6s`E z*Kzd3^Exia2t0DxIXGob>XrY1bLONTE{hM{5Ojv-@SL7PeK=p2=R8ykqK*Z z)Wm+8zUm=pjZ)}EmO&v1e-=6OFi!0Q++vMDujZ&}je1nwhJX$^*I#z1QLFrRlXP*Sb`Yi81p2PsbC!uQK#n>*wwYr>Hf-=hk>H^tdY))eMh ztwAncES7ftY6b{%hIwB~VjYwhNR!Ka?qcFLM?$_dw|*?3_Xm7;S`3nioVN3@I3 zIz&UaY1hc$LwW0_*g`#bQIi5|IZ_c=%Pk5rSl#jsusrCA!ScwrfOWsHtuVn#16!>D z7T(Fk8__qU%mMivUItNT3g93ps-qfOaByY12uCHtlf&fS%QP zMqPPB{jBQwRW9clBZyEz8ic$AX%IE3-4&|OkUmRtc>ZmrCx&#Z2`Sz0^>L5XI^%gJ zz9*jPBf?r9bGLyIdzJD#dkb&aoiE?+VmpZc^J)EwuC^v><9*m8-E8ad_J|1~oXw}R z$y)hqFWX@0=V==uelWp1>(uWu>4#~MC!MvO!Sj+$-{2jzGZ#d%e5Jds5IhSMau!-f z?z4P;9g^o~OX>b2jnJkg6`-v@=F30#u=V%6Ol=CN(>hS6sYwCFir}87fLIu)LV9AL z3JcWSL&NFF{X|dO8Zx}t%XR_(gb*sIrVUIkpz`ZKcnC;sG)*R>41Iu#08JZO+SGTj4yBkT1keqX+IGrl?8H{pDoa{g4z_I z6Ho!1c^(s7>?I-i7m!|qNZ-zd2B_}z#Gtwt8ldv*bBokI$d`-!ZRhX@3B~`$1;caB zr%*cj+IE3Yq2tnLen^y9*izEZmTZH&3tME6?Mqwdd=i;cD3^uUGBW>(M+MqB`gjR_ ztGz%UUPREHKGNwU6+aqQcd06#TSf;`b#(Nq==#J`exS2Ev9=2_WL9!yj? z%8*doMA%g**N56ZhTVm-I@{J)J{o2Vao>e<%L7+$a~$8ht)+B;Z3+fqz5k}z zC*0QN#oGPd2Q~SQJ`9>`5sJnhX*5o117kaew^g(|#L%WQB`az?=Dxob7#1Hzb z3)+le{Gi|VYVINULBDO&F4OPF=$AX%VEoa9Mn6!|_R|ObWJ61*d;0Wi0__+2psUZ? zYPwBJmwUBNbPKdwY$JZ|r^mzeu^cZ8Xmq(s8-}-QG`g>&h2R|wjV`lj>*<3ocxb-( zK2W3E4cZ3!pcmfSxA?AAqu09HY;p>{#8gh9GaZgM2tbDpQR)D^V|ge36JT;_wyldB zMI(8922P@l*|u(kU%zNuOCz5K;i7FQ(Rw3=MlbHPJ@i5EceJPRjeHiqR~?0X{h<2?Kq|J!w^PaoWhJr wwZ&1~ty~u7+6LoFkPqeBuJ(DLd3^Kg?(>Rk>&j;8ufXe??`oF!71>7o9|Ub`JOBUy diff --git a/genindex.html b/genindex.html index b059b6e..6c3b420 100644 --- a/genindex.html +++ b/genindex.html @@ -454,14 +454,16 @@

L

  • log_dict_to_data_frame() (in module whylogs_container.whylabs.actor.profile_actor_messages)
  • log_dict_to_embedding_matrix() (in module whylogs_container.whylabs.actor.profile_actor_messages) -
  • -
  • log_docs() (in module whylogs_container.whylabs.container.routes)
  • log_embedding_request (whylogs_container.whylabs.actor.profile_actor_messages.PubSubEmbeddingDict attribute) +
  • +
  • log_embeddings() (in module whylogs_container.whylabs.container.routes) +
  • +
  • log_embeddings_json() (in module whylogs_container.whylabs.container.routes)
    • -
    • log_embeddings() (in module whylogs_container.whylabs.container.routes) +
    • log_json() (in module whylogs_container.whylabs.container.routes)
    • log_pubsub() (in module whylogs_container.whylabs.container.routes)
    • diff --git a/objects.inv b/objects.inv index b69ebf40b23820bfd05d9322471a079ba4a178c7..d9ef5ca9398272c16b8e43b6a4cb0fe931d2aff1 100644 GIT binary patch delta 2385 zcmV-X39k0J6TcIXhksqomZQ26-p^AwC)u`6?)L8JZug8&`p2=|Gnu>5kwLae10wpF zZfBL($m``vA`oD(@egjKV&h|Dq3=_vN~)3y@xIwcY%Q?Q5=p{@@=?0|J!XN5=;*Jb z_x*p-M#j;f&Hp!l8Qpw2ETLo=ov9=%a$!v<3WdbB>O^ZQaeoxPQ5;Gdiwt6=5?_Wa z8U1z=UTPH)<%}PwgUHCnV~71gO=Dgc2!D0&Sw^YEMQgB-g#$JMmquh$cP@C^nb+ zXWjSUvR}2)lz$*xtth97#2X?u)KW7H7UKcsIABz0xR}V^lvIW>?NL%$b!eeKzH*YN zi15(Zsvi*{KF4yuT6CXPtVO}YrINJg%D?qlxvzMxC)p3&*HoIoBDB-s0A-_Oz}~I4=PqJ`KAGOJsC+^a zE^%c_Cx?bgn*W+tu)Rz0I9wjX26RPK)M$9`x}wc^73yfk z{#e*R(tnN3f7u%vkHfhbDK9|xGy5!uPcRk%U8*%W3w^(i8GI=~8PIr1gCGmLhDFBi z6ng<5rbB5Gf@?{tmQg4+L*OCQ5*U7`AYeo|d3S2LO+#=pPgRiUo=9@98)|>DI>bai zi&UJ5^MSV|{6K$k4xY_SHvQKlxQ}c-E=_Aj|9_=)#O%7?k5I_FLA!{Pz;$07Bea{O zhQcUY>d+xcoB|Mn)0UwqNu5WmLzgg(C@>8$g?Q0UlQ#hvz#71%I^Zw>6+j-)DnU8c zrQ=k(bQkuR7y{q|;YLXZK?0Y19gs{!$`S$0LbBYWEyWTPLphM9YBoja1w>?;n~LiR zZGRsdW%ttr$W&@PIE#Sv6UenV07vx@3{(tAhjcW8ry*&aQck4e@TyVXhT$gtsanp} z(zTxMP*H98hHE>jEl~k65NauW9;W$b3^T518q!VzP+LwDg3_ELth5&G?*%*D8*gCv?~uH*yF!%QI0Hgnfp&ht-vjH6f=C+TH@d}D z1J4g&S7PdKt8nc^hz1JXl^5qksGHgZKKl zz(2nIeDrST_}*K1^YH@TdH3VzyYUbxy-pury!!z%nmjMYv+v#`2&Ku~yL}wvVQA5V zH+jVKg*RKgPVtY);@ivXBBS;&`3gbj@$qRV7zhGS-aqhc{P)-Ke1UJh#oaeNpZqZf zXY%^+pcUoz=VCmE;PNsZKYx1@>`f>5Z{weU3|?kmz30gv-eU6d3_+tDM*t;JQqZEn z6K7*a{^V;B?yx);;qn!kPa$7&tV5qMfBj^gB%mMJTAX&t8J3JiZ=tl^>iT+@^(L2K zZ4Yi(^{P$*U-PVl4I0-xMq`7=70*iaK;xJc2kpc+ZRZu+_biFVKT05rH`ihjS?SEYh~mckV~@4Z4^l``2c1Ggh-Ynr6X z!L2nva?vTxpdSiO2bl(B_pIrD;jhb-zLovX(58Ry92Eak7=JZ&gzOk@cN~jTK=-{`>~m@d>tpK{@)wE1pxRhS{FwKIcOhJX^@>WnwrhJ{t>gy(WY)*AkOAZ9b~$9 zW2YpcenHVvg;9{@vUOS>Z6k3#dPI`-o7Sn~{|@IrTIOMnZ-3L}2;VyAloBo|-jX=V zQ$35!ey0?QD~5$T^q5LghGGsaqJ%{zNkH-Z@>7k>`QW6twzrcg7yK#btV0fmZB|#T zPW4CWdvy(}s}33D`9Czkx(E;bVMqmq!jv2cohweyvC3y)N{p&m2q&b=l8kLq$|Vj1d}ufM#?}Kj1~vN&`$NbDCs9OELhR zIZ6dgI1BnA=aLLSHpiI2iAH0z(dS+>6_`tb57CH`A$ZRX9bXg3|v1oTs*o DRx6gA delta 2379 zcmV-R3AFaV6S)(Rhku>Pa^t!chWGsxN+nyPa<_L!+j6%m9u!ILPTvg*A|Z)ol3*~j zt*r7IdA<820S8c|L=BV)9Bxz+1>*m3cn)Tg@0)GJ)&l!1kt9qgAEn#hV-~20j{ZJ+ z-~ShFWE}mq`2Xf_qnj^>DU=MOGnr&bF3br(aF zqu)-7T$H=qrW7xU^fxrHqJSk8(uQI3j8XQ1nr3 zo`pkK-~rk84813?Ve0d-k{uySamF5HstZhFQW9S>et%)EdD^adyHY@&(K#OKEixVR zM=57M6{6^x=B1)?!vfoKvHl?IqKdbxsJ+&{h|rw|2PzvS1NLsUJa-Wj^r^Ty7M)K> z!X>Uk>10)MrBKSL(A{03M_e(n8m|o{G|hj_E7{&Hcw8I6v^Vq#x)n&c(Bq$!7oci0&g>k4f6lfd=0I0m$9 zq=rJ2O?BuYNt^-z!FkJ2oTSbX>!C}SMidwW%pqQMr^%ZDRA3EZ;|@3sKn;)&XqBKG z>(p^7U3M4tND2UOgYd#h2LXZ2S_dSFNLeC)DJ08#w8kt!S(O8Ms-`K2UO*tzJXBma zXn*_KC_A4fK%r9O;4A|2PoS>FfjFuU!9dM`^pK85@EDTDDdj{e4(}S~Gz{11Pt|g+ zmahGDr;2LTH(c3KZHfwrK&Ykgd6?#lF(4S#_zcDy8uF+yr3&jHO)yYTX`;Zp48Ulq zA&jab3s3`qOt>`(%EMqyNHtn3C;cHtD1XyJ8^9}P1m!tLsI(XDuLV0?8*d?mbfTg7 z&Y)c8&{H7%BcPJF*K_m_F8{Oin zfafc)D>e1ERk(Iy#6k+)nFDu~v^9&iOCqgCxx`TvW10jh3lr(W%7+~K^6F|zkYz*z z5P~WJPPI|q8SgL$(l3eG0&W^kpML~2@hLP;xhh!(9q6csC zi02D$ws@W5ACtwmm)Avx_AvPhf%EwIv@;9@z?1hcJRAS>bv$3-TW@jq4bLZkjKN7> zA0D)$-2PmQ=MXF})A6%6!GGR#g8wo82}tlV`|3SU{_qx)muCnJQ;z^z!XRi<;EA(3 zBfs;t9PY4uFT&+BGM`euFE;+-JvFI(7wo6@~@3LNGBi44~ zhSgrxDdB7Gm9T+v&22O`IIg%?q6dtp+KnPk+`tHSzpbuM@ormudVf%M9c{2dX4Jdi zhSZ}tKtMG%1-rS{4N0`SzXzbe9k=NBt9{j0@XsP#vGU%l(1wzzSYow0{wTzBI(JIt^KQaq z#axOqUpSO&4ksLm?tdPN;#AOmVawG<-Oc&fx|RGzqA;kIHy!Ajz4ztb8CMprKON7e zT)EKaq-HI(P?&@=+ikQiAKc@hd`P81_O#EmSTgHhF2!o|oqsc>gbRwdB#!b8m*xI? zrwHYdg2J78OeHY`B8L%SWKpqHuXuj=sRna?h|pWv+ab)fJLQ~p*hyiV>WVp{{*b;` z$Dl6NAwj+ihXzk8ib~J*?&n$^Vc&Z0;0Fl3M4n2iVf4>;EA$@?^^Fk1*_VVpB)kH-j(9gRSMNw z$c#-BO+S2^+Ap{1t2r*Xkwp)>#Vc109JIZa?2HN(N!O}#noQ2Vj^ZBw(h2H;ENftZ9;OTOJ7+{H{~d zXms=2$bTHo(~TzC*Dt$d0rRs&wG=;S_l%?{7YtW%ZiB(L}MgKOfE9yaDiJ{`D6Cj!wKq@SIBd x*1n6hb`NM6oqf;XS=|dSP5TP!=%R;1oMqTsX}t)fC4NVjujQ6V{|BthhlY4~o0|Xt diff --git a/openapi.json b/openapi.json index d1072a1..80678a5 100644 --- a/openapi.json +++ b/openapi.json @@ -1 +1 @@ -{"openapi":"3.0.2","info":{"title":"FastAPI","version":"0.1.0"},"paths":{"/log":{"post":{"summary":"Log","operationId":"log_log_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/log-embeddings":{"post":{"summary":"Log Embeddings","operationId":"log_embeddings_log_embeddings_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/log-pubsub":{"post":{"summary":"Log Pubsub","operationId":"log_pubsub_log_pubsub_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/log-pubsub-embeddings":{"post":{"summary":"Log Pubsub Embeddings","operationId":"log_pubsub_embeddings_log_pubsub_embeddings_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/log_docs":{"post":{"summary":"Log Docs","description":"This endpoint is a bit silly. I can't find an easy way of manually controlling endpoint docs in the generated swagger\nand I can't declare /log's body as LogRequest because that has the side effect of also performing serde automatically,\nwhich performs far too poorly to keep in the server process. This endpoint is just for swagger docs on the body type\nfor convenience, but it shouldn't actually be used.","operationId":"log_docs_log_docs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/chat/completions":{"post":{"summary":"Openai Proxy","operationId":"openai_proxy_v1_chat_completions_post","parameters":[{"required":false,"schema":{"title":"Whylabs Dataset Id","type":"string"},"name":"whylabs_dataset_id","in":"query"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/validations":{"post":{"summary":"Openai Validation","operationId":"openai_validation_v1_validations_post","parameters":[{"required":true,"schema":{"title":"Whylabs Dataset Id","type":"string"},"name":"whylabs_dataset_id","in":"query"},{"required":false,"schema":{"title":"Prompt Id","type":"string"},"name":"prompt_id","in":"query"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Openai Validation V1 Validations Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/publish":{"post":{"summary":"Publish Profiles","operationId":"publish_profiles_publish_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"post":{"summary":"Health","operationId":"health_health_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/logDebugInfo":{"post":{"summary":"Log Debug Info","operationId":"log_debug_info_logDebugInfo_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"title":"HTTPValidationError","type":"object","properties":{"detail":{"title":"Detail","type":"array","items":{"$ref":"#/components/schemas/ValidationError"}}}},"LogMultiple":{"title":"LogMultiple","required":["columns","data"],"type":"object","properties":{"columns":{"title":"Columns","type":"array","items":{"type":"string"}},"data":{"title":"Data","type":"array","items":{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"number"}},{"type":"array","items":{"type":"integer"}},{"type":"array","items":{"type":"string"}}]}}}}},"LogRequest":{"title":"LogRequest","required":["multiple"],"type":"object","properties":{"dataset_id":{"title":"Dataset Id","type":"string"},"timestamp":{"title":"Timestamp","type":"integer"},"multiple":{"$ref":"#/components/schemas/LogMultiple"}}},"ValidationError":{"title":"ValidationError","required":["loc","msg","type"],"type":"object","properties":{"loc":{"title":"Location","type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"}]}},"msg":{"title":"Message","type":"string"},"type":{"title":"Error Type","type":"string"}}}}}} \ No newline at end of file +{"openapi":"3.0.2","info":{"title":"FastAPI","version":"0.1.0"},"paths":{"/log":{"post":{"summary":"Log","description":"Profile tabular data. The Swagger UI isn't able to call this currently.\n\n## Sample curl request:\n\n```bash\ncurl -X 'POST' -H \"X-API-Key: \" -H \"Content-Type: application/json\" 'http://localhost:8000/log' --data-raw '{\n \"datasetId\": \"model-62\",\n \"multiple\": {\n \"columns\": [ \"age\", \"workclass\", \"fnlwgt\", \"education\" ],\n \"data\": [\n [ 25, \"Private\", 226802, \"11th\" ]\n ]\n }\n}'\n```\n\n## Sample Python request:\n```python\nimport requests\n\n# Define your API key\napi_key = \"\"\n\n# API endpoint\nurl = 'http://localhost:8000/log'\n\n# Sample data\ndata = {\n \"datasetId\": \"model-62\",\n \"multiple\": {\n \"columns\": [\"age\", \"workclass\", \"fnlwgt\", \"education\"],\n \"data\": [\n [25, \"Private\", 226802, \"11th\"]\n ]\n }\n}\n\n# Make the POST request\nheaders = {\"X-API-Key\": api_key}\nresponse = requests.post(url, json=data, headers=headers)\n```","operationId":"log_log_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/log/json":{"post":{"summary":"Log Json","description":"Use this endpoint for manually testing and experimenting. It shouldn't be used in production\nbecause it has a steep performance penalty compared to the normal /log endpoint.","operationId":"log_json_log_json_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/log-embeddings":{"post":{"summary":"Log Embeddings","description":"This endpoint requires a custom configuration to set up before hand. See https://docs.whylabs.ai/docs/integrations-whylogs-container/ \nfor setting up embeddings support.\n\nLog embeddings data. The Swagger UI isn't able to call this currently.\n\n## Sample curl request:\n\n```bash\ncurl -X 'POST' -H \"X-API-Key: \" -H \"Content-Type: application/json\" 'http://localhost:8000/log-embeddings' --data-raw '{\n \"datasetId\": \"model-62\",\n \"timestamp\": 1634235000,\n \"embeddings\": {\n \"embeddings\": [[0.12, 0.45, 0.33, 0.92]]\n }\n}'\n```\n\n## Sample Python request:\n```python\nimport requests\n\n# Define your API key\napi_key = \"\"\n\n# API endpoint\nurl = 'http://localhost:8000/log-embeddings'\n\n# Sample data\ndata = {\n \"datasetId\": \"model-62\",\n \"timestamp\": 1634235000, # an example timestamp\n \"embeddings\": {\n \"embeddings\": [[0.12, 0.45, 0.33, 0.92]]\n }\n}\n\n# Make the POST request\nheaders = {\"X-API-Key\": api_key, \"Content-Type\": \"application/json\"}\nresponse = requests.post(url, json=data, headers=headers)\n```","operationId":"log_embeddings_log_embeddings_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/log-embeddings/json":{"post":{"summary":"Log Embeddings Json","description":"Use this endpoint for manually testing and experimenting. It shouldn't be used in production\nbecause it has a steep performance penalty compared to the normal /log-embeddings endpoint.","operationId":"log_embeddings_json_log_embeddings_json_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogEmbeddingRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/log-pubsub":{"post":{"summary":"Log Pubsub","operationId":"log_pubsub_log_pubsub_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/log-pubsub-embeddings":{"post":{"summary":"Log Pubsub Embeddings","operationId":"log_pubsub_embeddings_log_pubsub_embeddings_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/chat/completions":{"post":{"summary":"Openai Proxy","operationId":"openai_proxy_v1_chat_completions_post","parameters":[{"required":false,"schema":{"title":"Whylabs Dataset Id","type":"string"},"name":"whylabs_dataset_id","in":"query"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/validations":{"post":{"summary":"Openai Validation","operationId":"openai_validation_v1_validations_post","parameters":[{"required":true,"schema":{"title":"Whylabs Dataset Id","type":"string"},"name":"whylabs_dataset_id","in":"query"},{"required":false,"schema":{"title":"Prompt Id","type":"string"},"name":"prompt_id","in":"query"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Openai Validation V1 Validations Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/publish":{"post":{"summary":"Publish Profiles","operationId":"publish_profiles_publish_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"post":{"summary":"Health","operationId":"health_health_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/logDebugInfo":{"post":{"summary":"Log Debug Info","operationId":"log_debug_info_logDebugInfo_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"title":"HTTPValidationError","type":"object","properties":{"detail":{"title":"Detail","type":"array","items":{"$ref":"#/components/schemas/ValidationError"}}}},"LogEmbeddingRequest":{"title":"LogEmbeddingRequest","required":["timestamp","embeddings"],"type":"object","properties":{"dataset_id":{"title":"Dataset Id","type":"string"},"timestamp":{"title":"Timestamp","type":"integer"},"embeddings":{"title":"Embeddings","type":"object","additionalProperties":{"anyOf":[{"type":"array","items":{"type":"array","items":{"type":"number"}}},{"type":"array","items":{"type":"array","items":{"type":"integer"}}},{"type":"array","items":{"type":"array","items":{"type":"string"}}}]}}}},"LogMultiple":{"title":"LogMultiple","required":["columns","data"],"type":"object","properties":{"columns":{"title":"Columns","type":"array","items":{"type":"string"}},"data":{"title":"Data","type":"array","items":{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"number"}},{"type":"array","items":{"type":"integer"}},{"type":"array","items":{"type":"string"}}]}}}}},"LogRequest":{"title":"LogRequest","required":["multiple"],"type":"object","properties":{"dataset_id":{"title":"Dataset Id","type":"string"},"timestamp":{"title":"Timestamp","type":"integer"},"multiple":{"$ref":"#/components/schemas/LogMultiple"}}},"ValidationError":{"title":"ValidationError","required":["loc","msg","type"],"type":"object","properties":{"loc":{"title":"Location","type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"}]}},"msg":{"title":"Message","type":"string"},"type":{"title":"Error Type","type":"string"}}}}}} \ No newline at end of file diff --git a/searchindex.js b/searchindex.js index 4471715..8938a66 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["index", "modules", "whylogs_container", "whylogs_container.util", "whylogs_container.whylabs", "whylogs_container.whylabs.actor", "whylogs_container.whylabs.container", "whylogs_container.whylabs.llm_validation"], "filenames": ["index.rst", "modules.rst", "whylogs_container.rst", "whylogs_container.util.rst", "whylogs_container.whylabs.rst", "whylogs_container.whylabs.actor.rst", "whylogs_container.whylabs.container.rst", "whylogs_container.whylabs.llm_validation.rst"], "titles": ["Welcome to whylogs-container-python\u2019s documentation!", "whylogs_container", "whylogs_container package", "whylogs_container.util package", "whylogs_container.whylabs package", "whylogs_container.whylabs.actor package", "whylogs_container.whylabs.container package", "whylogs_container.whylabs.llm_validation package"], "terms": {"index": 0, "modul": [0, 1], "search": 0, "page": [0, 6], "packag": 1, "subpackag": 1, "util": [1, 2], "submodul": [1, 2, 4], "list_util": [1, 2], "list_util_test": [1, 2], "signal_util": [1, 2], "string_util": [1, 2], "string_util_test": [1, 2], "time": [1, 2, 6], "time_test": [1, 2], "content": 1, "whylab": [1, 2], "get_like_item": [2, 3], "type_batched_item": [2, 3], "test_get_like_items_empti": [2, 3], "test_get_like_items_hp": [2, 3], "test_get_like_items_single_item": [2, 3], "test_get_like_items_single_typ": [2, 3], "test_get_like_items_until_empti": [2, 3], "test_it": [2, 3], "suspended_sign": [2, 3], "encode_str": [2, 3], "test_different_hash": [2, 3], "test_order_doesnt_matt": [2, 3], "timegranular": [2, 3], "d": [2, 3, 6], "h": [2, 3, 6], "current_time_m": [2, 3], "truncate_time_m": [2, 3], "test_truncate_dai": [2, 3], "test_truncate_hour": [2, 3], "actor": [2, 4, 6], "preset_schema": [2, 4], "profile_actor": [2, 4], "profile_actor_messag": [2, 4], "contain": [2, 4, 5], "auth": [2, 4], "config": [2, 4, 5], "config_test": [2, 4], "request": [2, 4, 5, 7], "rout": [2, 4], "startup": [2, 4], "llm_valid": [2, 4], "metadata": [2, 4], "schema_build": [2, 4], "signal": [2, 3, 4], "valid": [2, 4, 5], "validation_workflow": [2, 4], "item": 3, "list": [3, 5, 6], "ani": [3, 6, 7], "tupl": [3, 5], "type": [3, 5, 6], "gener": [3, 5, 6, 7], "none": [3, 5, 6, 7], "suspend": 3, "handl": [3, 6], "execut": 3, "col_nam": 3, "str": [3, 5, 6, 7], "int": [3, 5, 6, 7], "encod": 3, "string": 3, "number": [3, 6], "hash": 3, "each": [3, 5, 6], "one": 3, "ad": 3, "them": [3, 5], "togeth": 3, "thi": [3, 5, 6], "i": [3, 5, 6], "us": [3, 5, 6], "group": [3, 5], "kei": [3, 6], "base": [3, 5, 6, 7], "don": [3, 6], "t": [3, 6, 7], "care": 3, "about": 3, "order": 3, "have": [3, 5, 6], "reason": [3, 5], "low": 3, "collis": 3, "rate": 3, "without": 3, "sort": 3, "everyth": [3, 5], "class": [3, 5, 6, 7], "valu": [3, 4, 6, 7], "enum": [3, 6], "an": [3, 6], "enumer": 3, "dai": [3, 6], "hour": [3, 6], "granular": 3, "process_batch": [4, 5], "process_messag": [4, 5], "run": [4, 5], "send": [4, 5, 6], "shutdown": [4, 5, 6], "closemessag": [4, 5], "start_actor": [4, 5], "presetschema": [4, 5], "get_default_schema": [4, 5], "profileactor": [4, 5], "process_close_messag": [4, 5], "process_debug_messag": [4, 5], "process_log_dict": [4, 5], "process_log_embeddings_dict": [4, 5], "process_log_embeddings_messag": [4, 5], "process_openai_messag": [4, 5], "process_publish_messag": [4, 5], "process_pubsub": [4, 5], "process_pubsub_embed": [4, 5], "process_raw_log_dict": [4, 5], "datadict": [4, 5], "column": [4, 5, 6], "data": [4, 5, 6], "debugmessag": [4, 5], "logembeddingrequestdict": [4, 5], "datasetid": [4, 5, 6], "embed": [4, 5, 6], "timestamp": [4, 5, 6, 7], "logrequestdict": [4, 5], "multipl": [4, 5, 6], "openaimessag": [4, 5, 7], "dataset_id": [4, 5, 6], "get_user_prompt": [4, 5], "prompt_id": [4, 5, 6, 7], "request_tim": [4, 5], "respons": [4, 5, 7], "to_log_request_dict": [4, 5], "to_openai_dict": [4, 5], "openaipromptdict": [4, 5], "role": [4, 5, 6], "openairequestdict": [4, 5, 7], "messag": [4, 5, 6], "model": [4, 5], "temperatur": [4, 5, 6], "whylabs_dataset_id": [4, 5, 6], "pubsubdict": [4, 5], "log_request": [4, 5], "subscript": [4, 5, 6], "pubsubembeddingdict": [4, 5], "log_embedding_request": [4, 5], "pubsubmessag": [4, 5, 6], "attribut": [4, 5, 6], "message_id": [4, 5, 6], "publish_tim": [4, 5, 6], "publishmessag": [4, 5], "rawlogembeddingsmessag": [4, 5], "to_log_embeddings_request_dict": [4, 5], "rawlogmessag": [4, 5], "rawpubsubembeddingmessag": [4, 5], "to_pubsub_embedding_messag": [4, 5], "rawpubsubmessag": [4, 5], "to_pubsub_messag": [4, 5], "determine_dataset_timestamp": [4, 5], "get_column": [4, 5], "log_dict_to_data_fram": [4, 5], "log_dict_to_embedding_matrix": [4, 5], "reduce_embeddings_request": [4, 5], "reduce_log_request": [4, 5], "api_key_auth": [4, 6], "containerconfig": [4, 5, 6], "assert_llm_endpoint": [4, 6], "auth_dis": [4, 6], "container_password": [4, 6], "default_dataset_cad": [4, 6], "default_openai_api_kei": [4, 6], "default_openai_organ": [4, 6], "default_whylabs_upload_cad": [4, 6], "default_whylabs_upload_interv": [4, 6], "disable_container_password": [4, 6], "fail_startup_without_config": [4, 6], "llm_contain": [4, 6], "whylabs_api_kei": [4, 6], "whylabs_org_id": [4, 6], "envvarnam": [4, 6], "default_whylabs_dataset_cad": [4, 6], "max_request_batch_s": [4, 6], "max_request_buffer_byt": [4, 6], "openai_api_kei": [4, 6], "openai_organ": [4, 6], "get_dataset_opt": [4, 6], "test_indexing_into_toolkit": [4, 6], "logembeddingrequest": [4, 6], "logmultipl": [4, 6], "logrequest": [4, 6], "openairequest": [4, 6], "prompt": [4, 6, 7], "messageid": [4, 6], "publishtim": [4, 6], "pubsubrequest": [4, 6], "health": [4, 6], "log": [4, 5, 6], "log_debug_info": [4, 6], "log_doc": [4, 6], "log_embed": [4, 6], "log_pubsub": [4, 6], "log_pubsub_embed": [4, 6], "openai_proxi": [4, 6], "openai_valid": [4, 6], "publish_profil": [4, 6], "init_log": [4, 6], "update_pid": [4, 6], "build_act": [4, 7], "build_langkit_valid": [4, 7], "build_langkit_validators_dictionari": [4, 7], "parse_yaml_to_dict": [4, 7], "validate_yaml": [4, 7], "configurationmetadata": [4, 7], "config_error": [4, 7], "validationmetadata": [4, 7], "failed_metr": [4, 7], "is_valid": [4, 7], "validator_nam": [4, 7], "build_patterns_valid": [4, 7], "build_threshold_valid": [4, 7], "get_validators_udf_schema": [4, 7], "validationerror": [4, 7], "failur": [4, 7], "result": [4, 5, 7], "success": [4, 7], "validate_input": [4, 7], "make_openai_request": [4, 7], "basethresholdvalidatorbuild": [4, 7], "inputoutputvalidatorbuild": [4, 7], "build": [4, 6, 7], "regexvalidatorbuild": [4, 7], "sentimentvalidatorbuild": [4, 7], "textstatvalidatorbuild": [4, 7], "themesvalidatorbuild": [4, 7], "toxicityvalidatorbuild": [4, 7], "validatorbuild": [4, 7], "queue": [5, 6], "max_messages_to_process": 5, "50000": 5, "process": [5, 6], "abc": [5, 7], "messagetyp": 5, "abstract": [5, 7], "batch": [5, 6], "batch_typ": 5, "method": 5, "sub": 5, "can": [5, 6], "overridden": 5, "object": [5, 6, 7], "llm_dataset_id": 5, "datasetopt": [5, 6], "faster_fifo": 5, "env_var": 5, "writer": 5, "whylog": [5, 6], "api": [5, 6], "dataset_options_fn": 5, "callabl": 5, "whylabs_toolkit": 5, "config_typ": 5, "union": 5, "These": 5, "ar": [5, 6], "core": 5, "you": [5, 6], "thei": [5, 6], "either": 5, "subclass": 5, "typeddict": 5, "wrapper": 5, "around": 5, "serial": 5, "byte": 5, "version": 5, "those": 5, "dict": [5, 6, 7], "here": 5, "becaus": [5, 6], "we": 5, "orjson": 5, "deseri": 5, "perform": [5, 6], "librari": 5, "prefer": 5, "output": 5, "dictionari": 5, "The": [5, 6], "dataclass": 5, "helper": 5, "extract": 5, "It": [5, 6], "": [5, 6], "import": 5, "rais": 5, "except": [5, 7], "doe": 5, "lot": [5, 6], "larg": 5, "would": [5, 6], "lose": 5, "entir": 5, "instead": 5, "return": 5, "error": 5, "some": 5, "issu": 5, "float": [5, 6, 7], "bool": [5, 6, 7], "cadenc": [5, 6], "datasetcad": [5, 6], "datafram": 5, "ndarrai": 5, "acc": 5, "cur": 5, "reduc": 5, "assum": 5, "ha": [5, 6], "same": 5, "That": 5, "assumpt": 5, "should": 5, "enforc": 5, "befor": [5, 6], "set": [5, 6], "api_kei": 6, "depend": 6, "oauth2passwordbear": 6, "datasetuploadcadencegranular": 6, "all": 6, "environ": 6, "variabl": 6, "name": 6, "applic": 6, "true": 6, "re": 6, "llm": 6, "openapi": 6, "monitor": 6, "password": 6, "look": 6, "header": 6, "curl": 6, "format": 6, "author": 6, "bearer": 6, "my_password": 6, "daili": 6, "default": 6, "hourli": 6, "whenev": 6, "specifi": 6, "dataset": 6, "schema": [6, 7], "determin": 6, "how": 6, "bucket": 6, "profil": 6, "pool": 6, "minut": 6, "m": 6, "often": 6, "upload": 6, "interv": 6, "mani": 6, "unit": 6, "If": 6, "Then": 6, "omit": 6, "fail": 6, "start": 6, "custom": 6, "configur": 6, "found": 6, "safeguard": 6, "want": 6, "make": 6, "sure": 6, "up": 6, "correctli": 6, "python": 6, "env": 6, "var": 6, "identifi": 6, "deploy": 6, "fals": [6, 7], "imag": 6, "50_000": 6, "maximum": 6, "per": 6, "place": 6, "onto": 6, "after": 6, "come": 6, "from": 6, "rest": 6, "server": 6, "read": 6, "bulk": 6, "larger": 6, "longer": 6, "take": 6, "mostli": 6, "transpar": 6, "caller": 6, "end": 6, "matter": 6, "when": 6, "so": 6, "throughput": 6, "too": 6, "high": 6, "keep": 6, "In": 6, "case": 6, "requestor": 6, "wait": 6, "which": 6, "could": 6, "potenti": 6, "consid": 6, "lower": 6, "see": 6, "out": 6, "tp": 6, "rel": 6, "our": 6, "doc": 6, "load": 6, "test": 6, "1_000_000_000": 6, "1gb": 6, "size": 6, "buffer": 6, "put": 6, "increas": 6, "give": 6, "more": 6, "good": 6, "idea": 6, "timeout": 6, "spikei": 6, "traffic": 6, "pattern": 6, "memori": 6, "host": 6, "noth": 6, "better": 6, "do": 6, "openai": 6, "onli": 6, "appli": 6, "organ": 6, "id": 6, "basemodel": 6, "0": [6, 7], "user": 6, "async": 6, "_raw_request": 6, "bodi": 6, "endpoint": 6, "bit": 6, "silli": 6, "find": 6, "easi": 6, "wai": 6, "manual": 6, "control": 6, "swagger": 6, "declar": 6, "side": 6, "effect": 6, "also": 6, "serd": 6, "automat": 6, "far": 6, "poorli": 6, "just": 6, "conveni": 6, "shouldn": 6, "actual": 6, "act": 6, "rule_typ": 7, "rule": 7, "parsed_data": 7, "conditionvalid": 7, "file_path": 7, "yaml_data": 7, "metric_nam": 7, "threshold": 7, "8": 7, "identity_column": 7, "udfschema": 7, "valueerror": 7, "arg": 7, "kwarg": 7, "protocol": 7, "input_text": 7, "input_typ": 7, "liter": 7, "datasetschema": 7, "openai_request_bodi": 7, "openai_messag": 7, "metric": 7}, "objects": {"": [[2, 0, 0, "-", "whylogs_container"]], "whylogs_container": [[3, 0, 0, "-", "util"], [4, 0, 0, "-", "whylabs"]], "whylogs_container.util": [[3, 0, 0, "-", "list_util"], [3, 0, 0, "-", "list_util_test"], [3, 0, 0, "-", "signal_util"], [3, 0, 0, "-", "string_util"], [3, 0, 0, "-", "string_util_test"], [3, 0, 0, "-", "time"], [3, 0, 0, "-", "time_test"]], "whylogs_container.util.list_util": [[3, 1, 1, "", "get_like_items"], [3, 1, 1, "", "type_batched_items"]], "whylogs_container.util.list_util_test": [[3, 1, 1, "", "test_get_like_items_empty"], [3, 1, 1, "", "test_get_like_items_hp"], [3, 1, 1, "", "test_get_like_items_single_item"], [3, 1, 1, "", "test_get_like_items_single_type"], [3, 1, 1, "", "test_get_like_items_until_empty"], [3, 1, 1, "", "test_iter"]], "whylogs_container.util.signal_util": [[3, 1, 1, "", "suspended_signals"]], "whylogs_container.util.string_util": [[3, 1, 1, "", "encode_strings"]], "whylogs_container.util.string_util_test": [[3, 1, 1, "", "test_different_hashes"], [3, 1, 1, "", "test_order_doesnt_matter"]], "whylogs_container.util.time": [[3, 2, 1, "", "TimeGranularity"], [3, 1, 1, "", "current_time_ms"], [3, 1, 1, "", "truncate_time_ms"]], "whylogs_container.util.time.TimeGranularity": [[3, 3, 1, "", "D"], [3, 3, 1, "", "H"]], "whylogs_container.util.time_test": [[3, 1, 1, "", "test_truncate_day"], [3, 1, 1, "", "test_truncate_hour"]], "whylogs_container.whylabs": [[5, 0, 0, "-", "actor"], [6, 0, 0, "-", "container"], [7, 0, 0, "-", "llm_validation"]], "whylogs_container.whylabs.actor": [[5, 0, 0, "-", "actor"], [5, 0, 0, "-", "preset_schema"], [5, 0, 0, "-", "profile_actor"], [5, 0, 0, "-", "profile_actor_messages"]], "whylogs_container.whylabs.actor.actor": [[5, 2, 1, "", "Actor"], [5, 2, 1, "", "CloseMessage"], [5, 1, 1, "", "start_actor"]], "whylogs_container.whylabs.actor.actor.Actor": [[5, 4, 1, "", "process_batch"], [5, 4, 1, "", "process_messages"], [5, 4, 1, "", "run"], [5, 4, 1, "", "send"], [5, 4, 1, "", "shutdown"]], "whylogs_container.whylabs.actor.preset_schema": [[5, 2, 1, "", "PresetSchema"]], "whylogs_container.whylabs.actor.preset_schema.PresetSchema": [[5, 4, 1, "", "get_default_schema"]], "whylogs_container.whylabs.actor.profile_actor": [[5, 2, 1, "", "ProfileActor"]], "whylogs_container.whylabs.actor.profile_actor.ProfileActor": [[5, 4, 1, "", "process_batch"], [5, 4, 1, "", "process_close_message"], [5, 4, 1, "", "process_debug_message"], [5, 4, 1, "", "process_log_dicts"], [5, 4, 1, "", "process_log_embeddings_dicts"], [5, 4, 1, "", "process_log_embeddings_messages"], [5, 4, 1, "", "process_openai_message"], [5, 4, 1, "", "process_publish_message"], [5, 4, 1, "", "process_pubsub"], [5, 4, 1, "", "process_pubsub_embedding"], [5, 4, 1, "", "process_raw_log_dicts"]], "whylogs_container.whylabs.actor.profile_actor_messages": [[5, 2, 1, "", "DataDict"], [5, 2, 1, "", "DebugMessage"], [5, 2, 1, "", "LogEmbeddingRequestDict"], [5, 2, 1, "", "LogRequestDict"], [5, 2, 1, "", "OpenAIMessage"], [5, 2, 1, "", "OpenAIPromptDict"], [5, 2, 1, "", "OpenAIRequestDict"], [5, 2, 1, "", "PubSubDict"], [5, 2, 1, "", "PubSubEmbeddingDict"], [5, 2, 1, "", "PubSubMessage"], [5, 2, 1, "", "PublishMessage"], [5, 2, 1, "", "RawLogEmbeddingsMessage"], [5, 2, 1, "", "RawLogMessage"], [5, 2, 1, "", "RawPubSubEmbeddingMessage"], [5, 2, 1, "", "RawPubSubMessage"], [5, 1, 1, "", "determine_dataset_timestamp"], [5, 1, 1, "", "get_columns"], [5, 1, 1, "", "log_dict_to_data_frame"], [5, 1, 1, "", "log_dict_to_embedding_matrix"], [5, 1, 1, "", "reduce_embeddings_request"], [5, 1, 1, "", "reduce_log_requests"]], "whylogs_container.whylabs.actor.profile_actor_messages.DataDict": [[5, 3, 1, "", "columns"], [5, 3, 1, "", "data"]], "whylogs_container.whylabs.actor.profile_actor_messages.LogEmbeddingRequestDict": [[5, 3, 1, "", "datasetId"], [5, 3, 1, "", "embeddings"], [5, 3, 1, "", "timestamp"]], "whylogs_container.whylabs.actor.profile_actor_messages.LogRequestDict": [[5, 3, 1, "", "datasetId"], [5, 3, 1, "", "multiple"], [5, 3, 1, "", "timestamp"]], "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIMessage": [[5, 3, 1, "", "dataset_id"], [5, 4, 1, "", "get_user_prompt"], [5, 3, 1, "", "prompt_id"], [5, 3, 1, "", "request"], [5, 3, 1, "", "request_time"], [5, 3, 1, "", "response"], [5, 4, 1, "", "to_log_request_dict"], [5, 4, 1, "", "to_openai_dict"]], "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIPromptDict": [[5, 3, 1, "", "content"], [5, 3, 1, "", "role"]], "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIRequestDict": [[5, 3, 1, "", "messages"], [5, 3, 1, "", "model"], [5, 3, 1, "", "temperature"], [5, 3, 1, "", "whylabs_dataset_id"]], "whylogs_container.whylabs.actor.profile_actor_messages.PubSubDict": [[5, 3, 1, "", "log_request"], [5, 3, 1, "", "message"], [5, 3, 1, "", "subscription"]], "whylogs_container.whylabs.actor.profile_actor_messages.PubSubEmbeddingDict": [[5, 3, 1, "", "log_embedding_request"], [5, 3, 1, "", "message"], [5, 3, 1, "", "subscription"]], "whylogs_container.whylabs.actor.profile_actor_messages.PubSubMessage": [[5, 3, 1, "", "attributes"], [5, 3, 1, "", "data"], [5, 3, 1, "", "message_id"], [5, 3, 1, "", "publish_time"]], "whylogs_container.whylabs.actor.profile_actor_messages.RawLogEmbeddingsMessage": [[5, 3, 1, "", "request"], [5, 3, 1, "", "request_time"], [5, 4, 1, "", "to_log_embeddings_request_dict"]], "whylogs_container.whylabs.actor.profile_actor_messages.RawLogMessage": [[5, 3, 1, "", "request"], [5, 3, 1, "", "request_time"], [5, 4, 1, "", "to_log_request_dict"]], "whylogs_container.whylabs.actor.profile_actor_messages.RawPubSubEmbeddingMessage": [[5, 3, 1, "", "request"], [5, 3, 1, "", "request_time"], [5, 4, 1, "", "to_pubsub_embedding_message"]], "whylogs_container.whylabs.actor.profile_actor_messages.RawPubSubMessage": [[5, 3, 1, "", "request"], [5, 3, 1, "", "request_time"], [5, 4, 1, "", "to_pubsub_message"]], "whylogs_container.whylabs.container": [[6, 0, 0, "-", "auth"], [6, 0, 0, "-", "config"], [6, 0, 0, "-", "config_test"], [6, 0, 0, "-", "requests"], [6, 0, 0, "-", "routes"], [6, 0, 0, "-", "startup"]], "whylogs_container.whylabs.container.auth": [[6, 2, 1, "", "Auth"]], "whylogs_container.whylabs.container.auth.Auth": [[6, 4, 1, "", "api_key_auth"]], "whylogs_container.whylabs.container.config": [[6, 2, 1, "", "ContainerConfig"], [6, 2, 1, "", "EnvVarNames"], [6, 1, 1, "", "get_dataset_options"]], "whylogs_container.whylabs.container.config.ContainerConfig": [[6, 4, 1, "", "assert_llm_endpoint"], [6, 4, 1, "", "auth_disabled"], [6, 3, 1, "", "container_password"], [6, 3, 1, "", "default_dataset_cadence"], [6, 3, 1, "", "default_openai_api_key"], [6, 3, 1, "", "default_openai_organization"], [6, 3, 1, "", "default_whylabs_upload_cadence"], [6, 3, 1, "", "default_whylabs_upload_interval"], [6, 3, 1, "", "disable_container_password"], [6, 3, 1, "", "fail_startup_without_config"], [6, 3, 1, "", "llm_container"], [6, 3, 1, "", "whylabs_api_key"], [6, 3, 1, "", "whylabs_org_id"]], "whylogs_container.whylabs.container.config.EnvVarNames": [[6, 3, 1, "", "CONTAINER_PASSWORD"], [6, 3, 1, "", "DEFAULT_WHYLABS_DATASET_CADENCE"], [6, 3, 1, "", "DEFAULT_WHYLABS_UPLOAD_CADENCE"], [6, 3, 1, "", "DEFAULT_WHYLABS_UPLOAD_INTERVAL"], [6, 3, 1, "", "DISABLE_CONTAINER_PASSWORD"], [6, 3, 1, "", "FAIL_STARTUP_WITHOUT_CONFIG"], [6, 3, 1, "", "LLM_CONTAINER"], [6, 3, 1, "", "MAX_REQUEST_BATCH_SIZE"], [6, 3, 1, "", "MAX_REQUEST_BUFFER_BYTES"], [6, 3, 1, "", "OPENAI_API_KEY"], [6, 3, 1, "", "OPENAI_ORGANIZATION"], [6, 3, 1, "", "WHYLABS_API_KEY"], [6, 3, 1, "", "WHYLABS_ORG_ID"]], "whylogs_container.whylabs.container.config_test": [[6, 1, 1, "", "test_indexing_into_toolkit"]], "whylogs_container.whylabs.container.requests": [[6, 2, 1, "", "LogEmbeddingRequest"], [6, 2, 1, "", "LogMultiple"], [6, 2, 1, "", "LogRequest"], [6, 2, 1, "", "OpenAIRequest"], [6, 2, 1, "", "PubSubMessage"], [6, 2, 1, "", "PubSubRequest"]], "whylogs_container.whylabs.container.requests.LogEmbeddingRequest": [[6, 3, 1, "", "datasetId"], [6, 3, 1, "", "embeddings"], [6, 3, 1, "", "timestamp"]], "whylogs_container.whylabs.container.requests.LogMultiple": [[6, 3, 1, "", "columns"], [6, 3, 1, "", "data"]], "whylogs_container.whylabs.container.requests.LogRequest": [[6, 3, 1, "", "datasetId"], [6, 3, 1, "", "multiple"], [6, 3, 1, "", "timestamp"]], "whylogs_container.whylabs.container.requests.OpenAIRequest": [[6, 3, 1, "", "prompt"], [6, 3, 1, "", "role"], [6, 3, 1, "", "temperature"]], "whylogs_container.whylabs.container.requests.PubSubMessage": [[6, 3, 1, "", "attributes"], [6, 3, 1, "", "data"], [6, 3, 1, "", "messageId"], [6, 3, 1, "", "publishTime"]], "whylogs_container.whylabs.container.requests.PubSubRequest": [[6, 3, 1, "", "message"], [6, 3, 1, "", "subscription"]], "whylogs_container.whylabs.container.routes": [[6, 1, 1, "", "health"], [6, 1, 1, "", "log"], [6, 1, 1, "", "log_debug_info"], [6, 1, 1, "", "log_docs"], [6, 1, 1, "", "log_embeddings"], [6, 1, 1, "", "log_pubsub"], [6, 1, 1, "", "log_pubsub_embeddings"], [6, 1, 1, "", "openai_proxy"], [6, 1, 1, "", "openai_validation"], [6, 1, 1, "", "publish_profiles"], [6, 1, 1, "", "shutdown"]], "whylogs_container.whylabs.container.startup": [[6, 1, 1, "", "init_logging"], [6, 1, 1, "", "update_pid"]], "whylogs_container.whylabs.llm_validation": [[7, 0, 0, "-", "config"], [7, 0, 0, "-", "metadata"], [7, 0, 0, "-", "schema_builder"], [7, 0, 0, "-", "signals"], [7, 0, 0, "-", "validate"], [7, 0, 0, "-", "validation_workflow"], [7, 0, 0, "-", "validators"]], "whylogs_container.whylabs.llm_validation.config": [[7, 1, 1, "", "build_actions"], [7, 1, 1, "", "build_langkit_validator"], [7, 1, 1, "", "build_langkit_validators_dictionary"], [7, 1, 1, "", "parse_yaml_to_dict"], [7, 1, 1, "", "validate_yaml"]], "whylogs_container.whylabs.llm_validation.metadata": [[7, 2, 1, "", "ConfigurationMetadata"], [7, 2, 1, "", "ValidationMetadata"]], "whylogs_container.whylabs.llm_validation.metadata.ConfigurationMetadata": [[7, 3, 1, "", "config_error"], [7, 3, 1, "", "timestamp"]], "whylogs_container.whylabs.llm_validation.metadata.ValidationMetadata": [[7, 3, 1, "", "failed_metric"], [7, 3, 1, "", "is_valid"], [7, 3, 1, "", "prompt_id"], [7, 3, 1, "", "timestamp"], [7, 3, 1, "", "validator_name"], [7, 3, 1, "", "value"]], "whylogs_container.whylabs.llm_validation.schema_builder": [[7, 1, 1, "", "build_patterns_validator"], [7, 1, 1, "", "build_threshold_validator"], [7, 1, 1, "", "get_validators_udf_schema"]], "whylogs_container.whylabs.llm_validation.signals": [[7, 5, 1, "", "ValidationError"]], "whylogs_container.whylabs.llm_validation.validate": [[7, 2, 1, "", "Failure"], [7, 2, 1, "", "Result"], [7, 2, 1, "", "Success"], [7, 1, 1, "", "validate_input"]], "whylogs_container.whylabs.llm_validation.validation_workflow": [[7, 1, 1, "", "make_openai_request"], [7, 1, 1, "", "validation_workflow"]], "whylogs_container.whylabs.llm_validation.validators": [[7, 2, 1, "", "BaseThresholdValidatorBuilder"], [7, 2, 1, "", "InputOutputValidatorBuilder"], [7, 2, 1, "", "RegexValidatorBuilder"], [7, 2, 1, "", "SentimentValidatorBuilder"], [7, 2, 1, "", "TextStatValidatorBuilder"], [7, 2, 1, "", "ThemesValidatorBuilder"], [7, 2, 1, "", "ToxicityValidatorBuilder"], [7, 2, 1, "", "ValidatorBuilder"]], "whylogs_container.whylabs.llm_validation.validators.BaseThresholdValidatorBuilder": [[7, 4, 1, "", "build_threshold_validator"]], "whylogs_container.whylabs.llm_validation.validators.InputOutputValidatorBuilder": [[7, 4, 1, "", "build"]], "whylogs_container.whylabs.llm_validation.validators.RegexValidatorBuilder": [[7, 4, 1, "", "build"]], "whylogs_container.whylabs.llm_validation.validators.SentimentValidatorBuilder": [[7, 4, 1, "", "build"]], "whylogs_container.whylabs.llm_validation.validators.TextStatValidatorBuilder": [[7, 4, 1, "", "build"]], "whylogs_container.whylabs.llm_validation.validators.ThemesValidatorBuilder": [[7, 4, 1, "", "build"]], "whylogs_container.whylabs.llm_validation.validators.ToxicityValidatorBuilder": [[7, 4, 1, "", "build"]], "whylogs_container.whylabs.llm_validation.validators.ValidatorBuilder": [[7, 4, 1, "", "build"]]}, "objtypes": {"0": "py:module", "1": "py:function", "2": "py:class", "3": "py:attribute", "4": "py:method", "5": "py:exception"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"], "2": ["py", "class", "Python class"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "method", "Python method"], "5": ["py", "exception", "Python exception"]}, "titleterms": {"welcom": 0, "whylog": 0, "contain": [0, 6], "python": 0, "": 0, "document": 0, "indic": 0, "tabl": 0, "whylogs_contain": [1, 2, 3, 4, 5, 6, 7], "packag": [2, 3, 4, 5, 6, 7], "subpackag": [2, 4], "modul": [2, 3, 4, 5, 6, 7], "content": [2, 3, 4, 5, 6, 7], "util": 3, "submodul": [3, 5, 6, 7], "list_util": 3, "list_util_test": 3, "signal_util": 3, "string_util": 3, "string_util_test": 3, "time": 3, "time_test": 3, "whylab": [4, 5, 6, 7], "actor": 5, "preset_schema": 5, "profile_actor": 5, "profile_actor_messag": 5, "auth": 6, "config": [6, 7], "requir": 6, "option": 6, "config_test": 6, "request": 6, "rout": 6, "startup": 6, "llm_valid": 7, "metadata": 7, "schema_build": 7, "signal": 7, "valid": 7, "validation_workflow": 7}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 58}, "alltitles": {"Welcome to whylogs-container-python\u2019s documentation!": [[0, "welcome-to-whylogs-container-python-s-documentation"]], "Indices and tables": [[0, "indices-and-tables"]], "whylogs_container": [[1, "whylogs-container"]], "whylogs_container package": [[2, "whylogs-container-package"]], "Subpackages": [[2, "subpackages"], [4, "subpackages"]], "Module contents": [[2, "module-whylogs_container"], [3, "module-whylogs_container.util"], [4, "module-whylogs_container.whylabs"], [5, "module-whylogs_container.whylabs.actor"], [6, "module-whylogs_container.whylabs.container"], [7, "module-whylogs_container.whylabs.llm_validation"]], "whylogs_container.util package": [[3, "whylogs-container-util-package"]], "Submodules": [[3, "submodules"], [5, "submodules"], [6, "submodules"], [7, "submodules"]], "whylogs_container.util.list_util module": [[3, "module-whylogs_container.util.list_util"]], "whylogs_container.util.list_util_test module": [[3, "module-whylogs_container.util.list_util_test"]], "whylogs_container.util.signal_util module": [[3, "module-whylogs_container.util.signal_util"]], "whylogs_container.util.string_util module": [[3, "module-whylogs_container.util.string_util"]], "whylogs_container.util.string_util_test module": [[3, "module-whylogs_container.util.string_util_test"]], "whylogs_container.util.time module": [[3, "module-whylogs_container.util.time"]], "whylogs_container.util.time_test module": [[3, "module-whylogs_container.util.time_test"]], "whylogs_container.whylabs package": [[4, "whylogs-container-whylabs-package"]], "whylogs_container.whylabs.actor package": [[5, "whylogs-container-whylabs-actor-package"]], "whylogs_container.whylabs.actor.actor module": [[5, "module-whylogs_container.whylabs.actor.actor"]], "whylogs_container.whylabs.actor.preset_schema module": [[5, "module-whylogs_container.whylabs.actor.preset_schema"]], "whylogs_container.whylabs.actor.profile_actor module": [[5, "module-whylogs_container.whylabs.actor.profile_actor"]], "whylogs_container.whylabs.actor.profile_actor_messages module": [[5, "module-whylogs_container.whylabs.actor.profile_actor_messages"]], "whylogs_container.whylabs.container package": [[6, "whylogs-container-whylabs-container-package"]], "whylogs_container.whylabs.container.auth module": [[6, "module-whylogs_container.whylabs.container.auth"]], "whylogs_container.whylabs.container.config module": [[6, "module-whylogs_container.whylabs.container.config"]], "Required": [[6, "required"]], "Optional": [[6, "optional"]], "whylogs_container.whylabs.container.config_test module": [[6, "module-whylogs_container.whylabs.container.config_test"]], "whylogs_container.whylabs.container.requests module": [[6, "module-whylogs_container.whylabs.container.requests"]], "whylogs_container.whylabs.container.routes module": [[6, "module-whylogs_container.whylabs.container.routes"]], "whylogs_container.whylabs.container.startup module": [[6, "module-whylogs_container.whylabs.container.startup"]], "whylogs_container.whylabs.llm_validation package": [[7, "whylogs-container-whylabs-llm-validation-package"]], "whylogs_container.whylabs.llm_validation.config module": [[7, "module-whylogs_container.whylabs.llm_validation.config"]], "whylogs_container.whylabs.llm_validation.metadata module": [[7, "module-whylogs_container.whylabs.llm_validation.metadata"]], "whylogs_container.whylabs.llm_validation.schema_builder module": [[7, "module-whylogs_container.whylabs.llm_validation.schema_builder"]], "whylogs_container.whylabs.llm_validation.signals module": [[7, "module-whylogs_container.whylabs.llm_validation.signals"]], "whylogs_container.whylabs.llm_validation.validate module": [[7, "module-whylogs_container.whylabs.llm_validation.validate"]], "whylogs_container.whylabs.llm_validation.validation_workflow module": [[7, "module-whylogs_container.whylabs.llm_validation.validation_workflow"]], "whylogs_container.whylabs.llm_validation.validators module": [[7, "module-whylogs_container.whylabs.llm_validation.validators"]]}, "indexentries": {"module": [[2, "module-whylogs_container"], [3, "module-whylogs_container.util"], [3, "module-whylogs_container.util.list_util"], [3, "module-whylogs_container.util.list_util_test"], [3, "module-whylogs_container.util.signal_util"], [3, "module-whylogs_container.util.string_util"], [3, "module-whylogs_container.util.string_util_test"], [3, "module-whylogs_container.util.time"], [3, "module-whylogs_container.util.time_test"], [4, "module-whylogs_container.whylabs"], [5, "module-whylogs_container.whylabs.actor"], [5, "module-whylogs_container.whylabs.actor.actor"], [5, "module-whylogs_container.whylabs.actor.preset_schema"], [5, "module-whylogs_container.whylabs.actor.profile_actor"], [5, "module-whylogs_container.whylabs.actor.profile_actor_messages"], [6, "module-whylogs_container.whylabs.container"], [6, "module-whylogs_container.whylabs.container.auth"], [6, "module-whylogs_container.whylabs.container.config"], [6, "module-whylogs_container.whylabs.container.config_test"], [6, "module-whylogs_container.whylabs.container.requests"], [6, "module-whylogs_container.whylabs.container.routes"], [6, "module-whylogs_container.whylabs.container.startup"], [7, "module-whylogs_container.whylabs.llm_validation"], [7, "module-whylogs_container.whylabs.llm_validation.config"], [7, "module-whylogs_container.whylabs.llm_validation.metadata"], [7, "module-whylogs_container.whylabs.llm_validation.schema_builder"], [7, "module-whylogs_container.whylabs.llm_validation.signals"], [7, "module-whylogs_container.whylabs.llm_validation.validate"], [7, "module-whylogs_container.whylabs.llm_validation.validation_workflow"], [7, "module-whylogs_container.whylabs.llm_validation.validators"]], "whylogs_container": [[2, "module-whylogs_container"]], "d (whylogs_container.util.time.timegranularity attribute)": [[3, "whylogs_container.util.time.TimeGranularity.D"]], "h (whylogs_container.util.time.timegranularity attribute)": [[3, "whylogs_container.util.time.TimeGranularity.H"]], "timegranularity (class in whylogs_container.util.time)": [[3, "whylogs_container.util.time.TimeGranularity"]], "current_time_ms() (in module whylogs_container.util.time)": [[3, "whylogs_container.util.time.current_time_ms"]], "encode_strings() (in module whylogs_container.util.string_util)": [[3, "whylogs_container.util.string_util.encode_strings"]], "get_like_items() (in module whylogs_container.util.list_util)": [[3, "whylogs_container.util.list_util.get_like_items"]], "suspended_signals() (in module whylogs_container.util.signal_util)": [[3, "whylogs_container.util.signal_util.suspended_signals"]], "test_different_hashes() (in module whylogs_container.util.string_util_test)": [[3, "whylogs_container.util.string_util_test.test_different_hashes"]], "test_get_like_items_empty() (in module whylogs_container.util.list_util_test)": [[3, "whylogs_container.util.list_util_test.test_get_like_items_empty"]], "test_get_like_items_hp() (in module whylogs_container.util.list_util_test)": [[3, "whylogs_container.util.list_util_test.test_get_like_items_hp"]], "test_get_like_items_single_item() (in module whylogs_container.util.list_util_test)": [[3, "whylogs_container.util.list_util_test.test_get_like_items_single_item"]], "test_get_like_items_single_type() (in module whylogs_container.util.list_util_test)": [[3, "whylogs_container.util.list_util_test.test_get_like_items_single_type"]], "test_get_like_items_until_empty() (in module whylogs_container.util.list_util_test)": [[3, "whylogs_container.util.list_util_test.test_get_like_items_until_empty"]], "test_iter() (in module whylogs_container.util.list_util_test)": [[3, "whylogs_container.util.list_util_test.test_iter"]], "test_order_doesnt_matter() (in module whylogs_container.util.string_util_test)": [[3, "whylogs_container.util.string_util_test.test_order_doesnt_matter"]], "test_truncate_day() (in module whylogs_container.util.time_test)": [[3, "whylogs_container.util.time_test.test_truncate_day"]], "test_truncate_hour() (in module whylogs_container.util.time_test)": [[3, "whylogs_container.util.time_test.test_truncate_hour"]], "truncate_time_ms() (in module whylogs_container.util.time)": [[3, "whylogs_container.util.time.truncate_time_ms"]], "type_batched_items() (in module whylogs_container.util.list_util)": [[3, "whylogs_container.util.list_util.type_batched_items"]], "whylogs_container.util": [[3, "module-whylogs_container.util"]], "whylogs_container.util.list_util": [[3, "module-whylogs_container.util.list_util"]], "whylogs_container.util.list_util_test": [[3, "module-whylogs_container.util.list_util_test"]], "whylogs_container.util.signal_util": [[3, "module-whylogs_container.util.signal_util"]], "whylogs_container.util.string_util": [[3, "module-whylogs_container.util.string_util"]], "whylogs_container.util.string_util_test": [[3, "module-whylogs_container.util.string_util_test"]], "whylogs_container.util.time": [[3, "module-whylogs_container.util.time"]], "whylogs_container.util.time_test": [[3, "module-whylogs_container.util.time_test"]], "whylogs_container.whylabs": [[4, "module-whylogs_container.whylabs"]], "actor (class in whylogs_container.whylabs.actor.actor)": [[5, "whylogs_container.whylabs.actor.actor.Actor"]], "closemessage (class in whylogs_container.whylabs.actor.actor)": [[5, "whylogs_container.whylabs.actor.actor.CloseMessage"]], "datadict (class in whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.DataDict"]], "debugmessage (class in whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.DebugMessage"]], "logembeddingrequestdict (class in whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.LogEmbeddingRequestDict"]], "logrequestdict (class in whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.LogRequestDict"]], "openaimessage (class in whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIMessage"]], "openaipromptdict (class in whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIPromptDict"]], "openairequestdict (class in whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIRequestDict"]], "presetschema (class in whylogs_container.whylabs.actor.preset_schema)": [[5, "whylogs_container.whylabs.actor.preset_schema.PresetSchema"]], "profileactor (class in whylogs_container.whylabs.actor.profile_actor)": [[5, "whylogs_container.whylabs.actor.profile_actor.ProfileActor"]], "pubsubdict (class in whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.PubSubDict"]], "pubsubembeddingdict (class in whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.PubSubEmbeddingDict"]], "pubsubmessage (class in whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.PubSubMessage"]], "publishmessage (class in whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.PublishMessage"]], "rawlogembeddingsmessage (class in whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawLogEmbeddingsMessage"]], "rawlogmessage (class in whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawLogMessage"]], "rawpubsubembeddingmessage (class in whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawPubSubEmbeddingMessage"]], "rawpubsubmessage (class in whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawPubSubMessage"]], "attributes (whylogs_container.whylabs.actor.profile_actor_messages.pubsubmessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.PubSubMessage.attributes"]], "columns (whylogs_container.whylabs.actor.profile_actor_messages.datadict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.DataDict.columns"]], "content (whylogs_container.whylabs.actor.profile_actor_messages.openaipromptdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIPromptDict.content"]], "data (whylogs_container.whylabs.actor.profile_actor_messages.datadict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.DataDict.data"]], "data (whylogs_container.whylabs.actor.profile_actor_messages.pubsubmessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.PubSubMessage.data"]], "datasetid (whylogs_container.whylabs.actor.profile_actor_messages.logembeddingrequestdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.LogEmbeddingRequestDict.datasetId"]], "datasetid (whylogs_container.whylabs.actor.profile_actor_messages.logrequestdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.LogRequestDict.datasetId"]], "dataset_id (whylogs_container.whylabs.actor.profile_actor_messages.openaimessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIMessage.dataset_id"]], "determine_dataset_timestamp() (in module whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.determine_dataset_timestamp"]], "embeddings (whylogs_container.whylabs.actor.profile_actor_messages.logembeddingrequestdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.LogEmbeddingRequestDict.embeddings"]], "get_columns() (in module whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.get_columns"]], "get_default_schema() (whylogs_container.whylabs.actor.preset_schema.presetschema method)": [[5, "whylogs_container.whylabs.actor.preset_schema.PresetSchema.get_default_schema"]], "get_user_prompt() (whylogs_container.whylabs.actor.profile_actor_messages.openaimessage method)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIMessage.get_user_prompt"]], "log_dict_to_data_frame() (in module whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.log_dict_to_data_frame"]], "log_dict_to_embedding_matrix() (in module whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.log_dict_to_embedding_matrix"]], "log_embedding_request (whylogs_container.whylabs.actor.profile_actor_messages.pubsubembeddingdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.PubSubEmbeddingDict.log_embedding_request"]], "log_request (whylogs_container.whylabs.actor.profile_actor_messages.pubsubdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.PubSubDict.log_request"]], "message (whylogs_container.whylabs.actor.profile_actor_messages.pubsubdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.PubSubDict.message"]], "message (whylogs_container.whylabs.actor.profile_actor_messages.pubsubembeddingdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.PubSubEmbeddingDict.message"]], "message_id (whylogs_container.whylabs.actor.profile_actor_messages.pubsubmessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.PubSubMessage.message_id"]], "messages (whylogs_container.whylabs.actor.profile_actor_messages.openairequestdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIRequestDict.messages"]], "model (whylogs_container.whylabs.actor.profile_actor_messages.openairequestdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIRequestDict.model"]], "multiple (whylogs_container.whylabs.actor.profile_actor_messages.logrequestdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.LogRequestDict.multiple"]], "process_batch() (whylogs_container.whylabs.actor.actor.actor method)": [[5, "whylogs_container.whylabs.actor.actor.Actor.process_batch"]], "process_batch() (whylogs_container.whylabs.actor.profile_actor.profileactor method)": [[5, "whylogs_container.whylabs.actor.profile_actor.ProfileActor.process_batch"]], "process_close_message() (whylogs_container.whylabs.actor.profile_actor.profileactor method)": [[5, "whylogs_container.whylabs.actor.profile_actor.ProfileActor.process_close_message"]], "process_debug_message() (whylogs_container.whylabs.actor.profile_actor.profileactor method)": [[5, "whylogs_container.whylabs.actor.profile_actor.ProfileActor.process_debug_message"]], "process_log_dicts() (whylogs_container.whylabs.actor.profile_actor.profileactor method)": [[5, "whylogs_container.whylabs.actor.profile_actor.ProfileActor.process_log_dicts"]], "process_log_embeddings_dicts() (whylogs_container.whylabs.actor.profile_actor.profileactor method)": [[5, "whylogs_container.whylabs.actor.profile_actor.ProfileActor.process_log_embeddings_dicts"]], "process_log_embeddings_messages() (whylogs_container.whylabs.actor.profile_actor.profileactor method)": [[5, "whylogs_container.whylabs.actor.profile_actor.ProfileActor.process_log_embeddings_messages"]], "process_messages() (whylogs_container.whylabs.actor.actor.actor method)": [[5, "whylogs_container.whylabs.actor.actor.Actor.process_messages"]], "process_openai_message() (whylogs_container.whylabs.actor.profile_actor.profileactor method)": [[5, "whylogs_container.whylabs.actor.profile_actor.ProfileActor.process_openai_message"]], "process_publish_message() (whylogs_container.whylabs.actor.profile_actor.profileactor method)": [[5, "whylogs_container.whylabs.actor.profile_actor.ProfileActor.process_publish_message"]], "process_pubsub() (whylogs_container.whylabs.actor.profile_actor.profileactor method)": [[5, "whylogs_container.whylabs.actor.profile_actor.ProfileActor.process_pubsub"]], "process_pubsub_embedding() (whylogs_container.whylabs.actor.profile_actor.profileactor method)": [[5, "whylogs_container.whylabs.actor.profile_actor.ProfileActor.process_pubsub_embedding"]], "process_raw_log_dicts() (whylogs_container.whylabs.actor.profile_actor.profileactor method)": [[5, "whylogs_container.whylabs.actor.profile_actor.ProfileActor.process_raw_log_dicts"]], "prompt_id (whylogs_container.whylabs.actor.profile_actor_messages.openaimessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIMessage.prompt_id"]], "publish_time (whylogs_container.whylabs.actor.profile_actor_messages.pubsubmessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.PubSubMessage.publish_time"]], "reduce_embeddings_request() (in module whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.reduce_embeddings_request"]], "reduce_log_requests() (in module whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.reduce_log_requests"]], "request (whylogs_container.whylabs.actor.profile_actor_messages.openaimessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIMessage.request"]], "request (whylogs_container.whylabs.actor.profile_actor_messages.rawlogembeddingsmessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawLogEmbeddingsMessage.request"]], "request (whylogs_container.whylabs.actor.profile_actor_messages.rawlogmessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawLogMessage.request"]], "request (whylogs_container.whylabs.actor.profile_actor_messages.rawpubsubembeddingmessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawPubSubEmbeddingMessage.request"]], "request (whylogs_container.whylabs.actor.profile_actor_messages.rawpubsubmessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawPubSubMessage.request"]], "request_time (whylogs_container.whylabs.actor.profile_actor_messages.openaimessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIMessage.request_time"]], "request_time (whylogs_container.whylabs.actor.profile_actor_messages.rawlogembeddingsmessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawLogEmbeddingsMessage.request_time"]], "request_time (whylogs_container.whylabs.actor.profile_actor_messages.rawlogmessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawLogMessage.request_time"]], "request_time (whylogs_container.whylabs.actor.profile_actor_messages.rawpubsubembeddingmessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawPubSubEmbeddingMessage.request_time"]], "request_time (whylogs_container.whylabs.actor.profile_actor_messages.rawpubsubmessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawPubSubMessage.request_time"]], "response (whylogs_container.whylabs.actor.profile_actor_messages.openaimessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIMessage.response"]], "role (whylogs_container.whylabs.actor.profile_actor_messages.openaipromptdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIPromptDict.role"]], "run() (whylogs_container.whylabs.actor.actor.actor method)": [[5, "whylogs_container.whylabs.actor.actor.Actor.run"]], "send() (whylogs_container.whylabs.actor.actor.actor method)": [[5, "whylogs_container.whylabs.actor.actor.Actor.send"]], "shutdown() (whylogs_container.whylabs.actor.actor.actor method)": [[5, "whylogs_container.whylabs.actor.actor.Actor.shutdown"]], "start_actor() (in module whylogs_container.whylabs.actor.actor)": [[5, "whylogs_container.whylabs.actor.actor.start_actor"]], "subscription (whylogs_container.whylabs.actor.profile_actor_messages.pubsubdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.PubSubDict.subscription"]], "subscription (whylogs_container.whylabs.actor.profile_actor_messages.pubsubembeddingdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.PubSubEmbeddingDict.subscription"]], "temperature (whylogs_container.whylabs.actor.profile_actor_messages.openairequestdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIRequestDict.temperature"]], "timestamp (whylogs_container.whylabs.actor.profile_actor_messages.logembeddingrequestdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.LogEmbeddingRequestDict.timestamp"]], "timestamp (whylogs_container.whylabs.actor.profile_actor_messages.logrequestdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.LogRequestDict.timestamp"]], "to_log_embeddings_request_dict() (whylogs_container.whylabs.actor.profile_actor_messages.rawlogembeddingsmessage method)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawLogEmbeddingsMessage.to_log_embeddings_request_dict"]], "to_log_request_dict() (whylogs_container.whylabs.actor.profile_actor_messages.openaimessage method)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIMessage.to_log_request_dict"]], "to_log_request_dict() (whylogs_container.whylabs.actor.profile_actor_messages.rawlogmessage method)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawLogMessage.to_log_request_dict"]], "to_openai_dict() (whylogs_container.whylabs.actor.profile_actor_messages.openaimessage method)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIMessage.to_openai_dict"]], "to_pubsub_embedding_message() (whylogs_container.whylabs.actor.profile_actor_messages.rawpubsubembeddingmessage method)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawPubSubEmbeddingMessage.to_pubsub_embedding_message"]], "to_pubsub_message() (whylogs_container.whylabs.actor.profile_actor_messages.rawpubsubmessage method)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawPubSubMessage.to_pubsub_message"]], "whylabs_dataset_id (whylogs_container.whylabs.actor.profile_actor_messages.openairequestdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIRequestDict.whylabs_dataset_id"]], "whylogs_container.whylabs.actor": [[5, "module-whylogs_container.whylabs.actor"]], "whylogs_container.whylabs.actor.actor": [[5, "module-whylogs_container.whylabs.actor.actor"]], "whylogs_container.whylabs.actor.preset_schema": [[5, "module-whylogs_container.whylabs.actor.preset_schema"]], "whylogs_container.whylabs.actor.profile_actor": [[5, "module-whylogs_container.whylabs.actor.profile_actor"]], "whylogs_container.whylabs.actor.profile_actor_messages": [[5, "module-whylogs_container.whylabs.actor.profile_actor_messages"]], "auth (class in whylogs_container.whylabs.container.auth)": [[6, "whylogs_container.whylabs.container.auth.Auth"]], "container_password (whylogs_container.whylabs.container.config.envvarnames attribute)": [[6, "whylogs_container.whylabs.container.config.EnvVarNames.CONTAINER_PASSWORD"]], "containerconfig (class in whylogs_container.whylabs.container.config)": [[6, "whylogs_container.whylabs.container.config.ContainerConfig"]], "default_whylabs_dataset_cadence (whylogs_container.whylabs.container.config.envvarnames attribute)": [[6, "whylogs_container.whylabs.container.config.EnvVarNames.DEFAULT_WHYLABS_DATASET_CADENCE"]], "default_whylabs_upload_cadence (whylogs_container.whylabs.container.config.envvarnames attribute)": [[6, "whylogs_container.whylabs.container.config.EnvVarNames.DEFAULT_WHYLABS_UPLOAD_CADENCE"]], "default_whylabs_upload_interval (whylogs_container.whylabs.container.config.envvarnames attribute)": [[6, "whylogs_container.whylabs.container.config.EnvVarNames.DEFAULT_WHYLABS_UPLOAD_INTERVAL"]], "disable_container_password (whylogs_container.whylabs.container.config.envvarnames attribute)": [[6, "whylogs_container.whylabs.container.config.EnvVarNames.DISABLE_CONTAINER_PASSWORD"]], "envvarnames (class in whylogs_container.whylabs.container.config)": [[6, "whylogs_container.whylabs.container.config.EnvVarNames"]], "fail_startup_without_config (whylogs_container.whylabs.container.config.envvarnames attribute)": [[6, "whylogs_container.whylabs.container.config.EnvVarNames.FAIL_STARTUP_WITHOUT_CONFIG"]], "llm_container (whylogs_container.whylabs.container.config.envvarnames attribute)": [[6, "whylogs_container.whylabs.container.config.EnvVarNames.LLM_CONTAINER"]], "logembeddingrequest (class in whylogs_container.whylabs.container.requests)": [[6, "whylogs_container.whylabs.container.requests.LogEmbeddingRequest"]], "logmultiple (class in whylogs_container.whylabs.container.requests)": [[6, "whylogs_container.whylabs.container.requests.LogMultiple"]], "logrequest (class in whylogs_container.whylabs.container.requests)": [[6, "whylogs_container.whylabs.container.requests.LogRequest"]], "max_request_batch_size (whylogs_container.whylabs.container.config.envvarnames attribute)": [[6, "whylogs_container.whylabs.container.config.EnvVarNames.MAX_REQUEST_BATCH_SIZE"]], "max_request_buffer_bytes (whylogs_container.whylabs.container.config.envvarnames attribute)": [[6, "whylogs_container.whylabs.container.config.EnvVarNames.MAX_REQUEST_BUFFER_BYTES"]], "openai_api_key (whylogs_container.whylabs.container.config.envvarnames attribute)": [[6, "whylogs_container.whylabs.container.config.EnvVarNames.OPENAI_API_KEY"]], "openai_organization (whylogs_container.whylabs.container.config.envvarnames attribute)": [[6, "whylogs_container.whylabs.container.config.EnvVarNames.OPENAI_ORGANIZATION"]], "openairequest (class in whylogs_container.whylabs.container.requests)": [[6, "whylogs_container.whylabs.container.requests.OpenAIRequest"]], "pubsubmessage (class in whylogs_container.whylabs.container.requests)": [[6, "whylogs_container.whylabs.container.requests.PubSubMessage"]], "pubsubrequest (class in whylogs_container.whylabs.container.requests)": [[6, "whylogs_container.whylabs.container.requests.PubSubRequest"]], "whylabs_api_key (whylogs_container.whylabs.container.config.envvarnames attribute)": [[6, "whylogs_container.whylabs.container.config.EnvVarNames.WHYLABS_API_KEY"]], "whylabs_org_id (whylogs_container.whylabs.container.config.envvarnames attribute)": [[6, "whylogs_container.whylabs.container.config.EnvVarNames.WHYLABS_ORG_ID"]], "api_key_auth() (whylogs_container.whylabs.container.auth.auth method)": [[6, "whylogs_container.whylabs.container.auth.Auth.api_key_auth"]], "assert_llm_endpoint() (whylogs_container.whylabs.container.config.containerconfig method)": [[6, "whylogs_container.whylabs.container.config.ContainerConfig.assert_llm_endpoint"]], "attributes (whylogs_container.whylabs.container.requests.pubsubmessage attribute)": [[6, "whylogs_container.whylabs.container.requests.PubSubMessage.attributes"]], "auth_disabled() (whylogs_container.whylabs.container.config.containerconfig method)": [[6, "whylogs_container.whylabs.container.config.ContainerConfig.auth_disabled"]], "columns (whylogs_container.whylabs.container.requests.logmultiple attribute)": [[6, "whylogs_container.whylabs.container.requests.LogMultiple.columns"]], "container_password (whylogs_container.whylabs.container.config.containerconfig attribute)": [[6, "whylogs_container.whylabs.container.config.ContainerConfig.container_password"]], "data (whylogs_container.whylabs.container.requests.logmultiple attribute)": [[6, "whylogs_container.whylabs.container.requests.LogMultiple.data"]], "data (whylogs_container.whylabs.container.requests.pubsubmessage attribute)": [[6, "whylogs_container.whylabs.container.requests.PubSubMessage.data"]], "datasetid (whylogs_container.whylabs.container.requests.logembeddingrequest attribute)": [[6, "whylogs_container.whylabs.container.requests.LogEmbeddingRequest.datasetId"]], "datasetid (whylogs_container.whylabs.container.requests.logrequest attribute)": [[6, "whylogs_container.whylabs.container.requests.LogRequest.datasetId"]], "default_dataset_cadence (whylogs_container.whylabs.container.config.containerconfig attribute)": [[6, "whylogs_container.whylabs.container.config.ContainerConfig.default_dataset_cadence"]], "default_openai_api_key (whylogs_container.whylabs.container.config.containerconfig attribute)": [[6, "whylogs_container.whylabs.container.config.ContainerConfig.default_openai_api_key"]], "default_openai_organization (whylogs_container.whylabs.container.config.containerconfig attribute)": [[6, "whylogs_container.whylabs.container.config.ContainerConfig.default_openai_organization"]], "default_whylabs_upload_cadence (whylogs_container.whylabs.container.config.containerconfig attribute)": [[6, "whylogs_container.whylabs.container.config.ContainerConfig.default_whylabs_upload_cadence"]], "default_whylabs_upload_interval (whylogs_container.whylabs.container.config.containerconfig attribute)": [[6, "whylogs_container.whylabs.container.config.ContainerConfig.default_whylabs_upload_interval"]], "disable_container_password (whylogs_container.whylabs.container.config.containerconfig attribute)": [[6, "whylogs_container.whylabs.container.config.ContainerConfig.disable_container_password"]], "embeddings (whylogs_container.whylabs.container.requests.logembeddingrequest attribute)": [[6, "whylogs_container.whylabs.container.requests.LogEmbeddingRequest.embeddings"]], "fail_startup_without_config (whylogs_container.whylabs.container.config.containerconfig attribute)": [[6, "whylogs_container.whylabs.container.config.ContainerConfig.fail_startup_without_config"]], "get_dataset_options() (in module whylogs_container.whylabs.container.config)": [[6, "whylogs_container.whylabs.container.config.get_dataset_options"]], "health() (in module whylogs_container.whylabs.container.routes)": [[6, "whylogs_container.whylabs.container.routes.health"]], "init_logging() (in module whylogs_container.whylabs.container.startup)": [[6, "whylogs_container.whylabs.container.startup.init_logging"]], "llm_container (whylogs_container.whylabs.container.config.containerconfig attribute)": [[6, "whylogs_container.whylabs.container.config.ContainerConfig.llm_container"]], "log() (in module whylogs_container.whylabs.container.routes)": [[6, "whylogs_container.whylabs.container.routes.log"]], "log_debug_info() (in module whylogs_container.whylabs.container.routes)": [[6, "whylogs_container.whylabs.container.routes.log_debug_info"]], "log_docs() (in module whylogs_container.whylabs.container.routes)": [[6, "whylogs_container.whylabs.container.routes.log_docs"]], "log_embeddings() (in module whylogs_container.whylabs.container.routes)": [[6, "whylogs_container.whylabs.container.routes.log_embeddings"]], "log_pubsub() (in module whylogs_container.whylabs.container.routes)": [[6, "whylogs_container.whylabs.container.routes.log_pubsub"]], "log_pubsub_embeddings() (in module whylogs_container.whylabs.container.routes)": [[6, "whylogs_container.whylabs.container.routes.log_pubsub_embeddings"]], "message (whylogs_container.whylabs.container.requests.pubsubrequest attribute)": [[6, "whylogs_container.whylabs.container.requests.PubSubRequest.message"]], "messageid (whylogs_container.whylabs.container.requests.pubsubmessage attribute)": [[6, "whylogs_container.whylabs.container.requests.PubSubMessage.messageId"]], "multiple (whylogs_container.whylabs.container.requests.logrequest attribute)": [[6, "whylogs_container.whylabs.container.requests.LogRequest.multiple"]], "openai_proxy() (in module whylogs_container.whylabs.container.routes)": [[6, "whylogs_container.whylabs.container.routes.openai_proxy"]], "openai_validation() (in module whylogs_container.whylabs.container.routes)": [[6, "whylogs_container.whylabs.container.routes.openai_validation"]], "prompt (whylogs_container.whylabs.container.requests.openairequest attribute)": [[6, "whylogs_container.whylabs.container.requests.OpenAIRequest.prompt"]], "publishtime (whylogs_container.whylabs.container.requests.pubsubmessage attribute)": [[6, "whylogs_container.whylabs.container.requests.PubSubMessage.publishTime"]], "publish_profiles() (in module whylogs_container.whylabs.container.routes)": [[6, "whylogs_container.whylabs.container.routes.publish_profiles"]], "role (whylogs_container.whylabs.container.requests.openairequest attribute)": [[6, "whylogs_container.whylabs.container.requests.OpenAIRequest.role"]], "shutdown() (in module whylogs_container.whylabs.container.routes)": [[6, "whylogs_container.whylabs.container.routes.shutdown"]], "subscription (whylogs_container.whylabs.container.requests.pubsubrequest attribute)": [[6, "whylogs_container.whylabs.container.requests.PubSubRequest.subscription"]], "temperature (whylogs_container.whylabs.container.requests.openairequest attribute)": [[6, "whylogs_container.whylabs.container.requests.OpenAIRequest.temperature"]], "test_indexing_into_toolkit() (in module whylogs_container.whylabs.container.config_test)": [[6, "whylogs_container.whylabs.container.config_test.test_indexing_into_toolkit"]], "timestamp (whylogs_container.whylabs.container.requests.logembeddingrequest attribute)": [[6, "whylogs_container.whylabs.container.requests.LogEmbeddingRequest.timestamp"]], "timestamp (whylogs_container.whylabs.container.requests.logrequest attribute)": [[6, "whylogs_container.whylabs.container.requests.LogRequest.timestamp"]], "update_pid() (in module whylogs_container.whylabs.container.startup)": [[6, "whylogs_container.whylabs.container.startup.update_pid"]], "whylabs_api_key (whylogs_container.whylabs.container.config.containerconfig attribute)": [[6, "whylogs_container.whylabs.container.config.ContainerConfig.whylabs_api_key"]], "whylabs_org_id (whylogs_container.whylabs.container.config.containerconfig attribute)": [[6, "whylogs_container.whylabs.container.config.ContainerConfig.whylabs_org_id"]], "whylogs_container.whylabs.container": [[6, "module-whylogs_container.whylabs.container"]], "whylogs_container.whylabs.container.auth": [[6, "module-whylogs_container.whylabs.container.auth"]], "whylogs_container.whylabs.container.config": [[6, "module-whylogs_container.whylabs.container.config"]], "whylogs_container.whylabs.container.config_test": [[6, "module-whylogs_container.whylabs.container.config_test"]], "whylogs_container.whylabs.container.requests": [[6, "module-whylogs_container.whylabs.container.requests"]], "whylogs_container.whylabs.container.routes": [[6, "module-whylogs_container.whylabs.container.routes"]], "whylogs_container.whylabs.container.startup": [[6, "module-whylogs_container.whylabs.container.startup"]], "basethresholdvalidatorbuilder (class in whylogs_container.whylabs.llm_validation.validators)": [[7, "whylogs_container.whylabs.llm_validation.validators.BaseThresholdValidatorBuilder"]], "configurationmetadata (class in whylogs_container.whylabs.llm_validation.metadata)": [[7, "whylogs_container.whylabs.llm_validation.metadata.ConfigurationMetadata"]], "failure (class in whylogs_container.whylabs.llm_validation.validate)": [[7, "whylogs_container.whylabs.llm_validation.validate.Failure"]], "inputoutputvalidatorbuilder (class in whylogs_container.whylabs.llm_validation.validators)": [[7, "whylogs_container.whylabs.llm_validation.validators.InputOutputValidatorBuilder"]], "regexvalidatorbuilder (class in whylogs_container.whylabs.llm_validation.validators)": [[7, "whylogs_container.whylabs.llm_validation.validators.RegexValidatorBuilder"]], "result (class in whylogs_container.whylabs.llm_validation.validate)": [[7, "whylogs_container.whylabs.llm_validation.validate.Result"]], "sentimentvalidatorbuilder (class in whylogs_container.whylabs.llm_validation.validators)": [[7, "whylogs_container.whylabs.llm_validation.validators.SentimentValidatorBuilder"]], "success (class in whylogs_container.whylabs.llm_validation.validate)": [[7, "whylogs_container.whylabs.llm_validation.validate.Success"]], "textstatvalidatorbuilder (class in whylogs_container.whylabs.llm_validation.validators)": [[7, "whylogs_container.whylabs.llm_validation.validators.TextStatValidatorBuilder"]], "themesvalidatorbuilder (class in whylogs_container.whylabs.llm_validation.validators)": [[7, "whylogs_container.whylabs.llm_validation.validators.ThemesValidatorBuilder"]], "toxicityvalidatorbuilder (class in whylogs_container.whylabs.llm_validation.validators)": [[7, "whylogs_container.whylabs.llm_validation.validators.ToxicityValidatorBuilder"]], "validationerror": [[7, "whylogs_container.whylabs.llm_validation.signals.ValidationError"]], "validationmetadata (class in whylogs_container.whylabs.llm_validation.metadata)": [[7, "whylogs_container.whylabs.llm_validation.metadata.ValidationMetadata"]], "validatorbuilder (class in whylogs_container.whylabs.llm_validation.validators)": [[7, "whylogs_container.whylabs.llm_validation.validators.ValidatorBuilder"]], "build() (whylogs_container.whylabs.llm_validation.validators.inputoutputvalidatorbuilder method)": [[7, "whylogs_container.whylabs.llm_validation.validators.InputOutputValidatorBuilder.build"]], "build() (whylogs_container.whylabs.llm_validation.validators.regexvalidatorbuilder method)": [[7, "whylogs_container.whylabs.llm_validation.validators.RegexValidatorBuilder.build"]], "build() (whylogs_container.whylabs.llm_validation.validators.sentimentvalidatorbuilder method)": [[7, "whylogs_container.whylabs.llm_validation.validators.SentimentValidatorBuilder.build"]], "build() (whylogs_container.whylabs.llm_validation.validators.textstatvalidatorbuilder method)": [[7, "whylogs_container.whylabs.llm_validation.validators.TextStatValidatorBuilder.build"]], "build() (whylogs_container.whylabs.llm_validation.validators.themesvalidatorbuilder method)": [[7, "whylogs_container.whylabs.llm_validation.validators.ThemesValidatorBuilder.build"]], "build() (whylogs_container.whylabs.llm_validation.validators.toxicityvalidatorbuilder method)": [[7, "whylogs_container.whylabs.llm_validation.validators.ToxicityValidatorBuilder.build"]], "build() (whylogs_container.whylabs.llm_validation.validators.validatorbuilder method)": [[7, "whylogs_container.whylabs.llm_validation.validators.ValidatorBuilder.build"]], "build_actions() (in module whylogs_container.whylabs.llm_validation.config)": [[7, "whylogs_container.whylabs.llm_validation.config.build_actions"]], "build_langkit_validator() (in module whylogs_container.whylabs.llm_validation.config)": [[7, "whylogs_container.whylabs.llm_validation.config.build_langkit_validator"]], "build_langkit_validators_dictionary() (in module whylogs_container.whylabs.llm_validation.config)": [[7, "whylogs_container.whylabs.llm_validation.config.build_langkit_validators_dictionary"]], "build_patterns_validator() (in module whylogs_container.whylabs.llm_validation.schema_builder)": [[7, "whylogs_container.whylabs.llm_validation.schema_builder.build_patterns_validator"]], "build_threshold_validator() (in module whylogs_container.whylabs.llm_validation.schema_builder)": [[7, "whylogs_container.whylabs.llm_validation.schema_builder.build_threshold_validator"]], "build_threshold_validator() (whylogs_container.whylabs.llm_validation.validators.basethresholdvalidatorbuilder method)": [[7, "whylogs_container.whylabs.llm_validation.validators.BaseThresholdValidatorBuilder.build_threshold_validator"]], "config_error (whylogs_container.whylabs.llm_validation.metadata.configurationmetadata attribute)": [[7, "whylogs_container.whylabs.llm_validation.metadata.ConfigurationMetadata.config_error"]], "failed_metric (whylogs_container.whylabs.llm_validation.metadata.validationmetadata attribute)": [[7, "whylogs_container.whylabs.llm_validation.metadata.ValidationMetadata.failed_metric"]], "get_validators_udf_schema() (in module whylogs_container.whylabs.llm_validation.schema_builder)": [[7, "whylogs_container.whylabs.llm_validation.schema_builder.get_validators_udf_schema"]], "is_valid (whylogs_container.whylabs.llm_validation.metadata.validationmetadata attribute)": [[7, "whylogs_container.whylabs.llm_validation.metadata.ValidationMetadata.is_valid"]], "make_openai_request() (in module whylogs_container.whylabs.llm_validation.validation_workflow)": [[7, "whylogs_container.whylabs.llm_validation.validation_workflow.make_openai_request"]], "parse_yaml_to_dict() (in module whylogs_container.whylabs.llm_validation.config)": [[7, "whylogs_container.whylabs.llm_validation.config.parse_yaml_to_dict"]], "prompt_id (whylogs_container.whylabs.llm_validation.metadata.validationmetadata attribute)": [[7, "whylogs_container.whylabs.llm_validation.metadata.ValidationMetadata.prompt_id"]], "timestamp (whylogs_container.whylabs.llm_validation.metadata.configurationmetadata attribute)": [[7, "whylogs_container.whylabs.llm_validation.metadata.ConfigurationMetadata.timestamp"]], "timestamp (whylogs_container.whylabs.llm_validation.metadata.validationmetadata attribute)": [[7, "whylogs_container.whylabs.llm_validation.metadata.ValidationMetadata.timestamp"]], "validate_input() (in module whylogs_container.whylabs.llm_validation.validate)": [[7, "whylogs_container.whylabs.llm_validation.validate.validate_input"]], "validate_yaml() (in module whylogs_container.whylabs.llm_validation.config)": [[7, "whylogs_container.whylabs.llm_validation.config.validate_yaml"]], "validation_workflow() (in module whylogs_container.whylabs.llm_validation.validation_workflow)": [[7, "whylogs_container.whylabs.llm_validation.validation_workflow.validation_workflow"]], "validator_name (whylogs_container.whylabs.llm_validation.metadata.validationmetadata attribute)": [[7, "whylogs_container.whylabs.llm_validation.metadata.ValidationMetadata.validator_name"]], "value (whylogs_container.whylabs.llm_validation.metadata.validationmetadata attribute)": [[7, "whylogs_container.whylabs.llm_validation.metadata.ValidationMetadata.value"]], "whylogs_container.whylabs.llm_validation": [[7, "module-whylogs_container.whylabs.llm_validation"]], "whylogs_container.whylabs.llm_validation.config": [[7, "module-whylogs_container.whylabs.llm_validation.config"]], "whylogs_container.whylabs.llm_validation.metadata": [[7, "module-whylogs_container.whylabs.llm_validation.metadata"]], "whylogs_container.whylabs.llm_validation.schema_builder": [[7, "module-whylogs_container.whylabs.llm_validation.schema_builder"]], "whylogs_container.whylabs.llm_validation.signals": [[7, "module-whylogs_container.whylabs.llm_validation.signals"]], "whylogs_container.whylabs.llm_validation.validate": [[7, "module-whylogs_container.whylabs.llm_validation.validate"]], "whylogs_container.whylabs.llm_validation.validation_workflow": [[7, "module-whylogs_container.whylabs.llm_validation.validation_workflow"]], "whylogs_container.whylabs.llm_validation.validators": [[7, "module-whylogs_container.whylabs.llm_validation.validators"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["index", "modules", "whylogs_container", "whylogs_container.util", "whylogs_container.whylabs", "whylogs_container.whylabs.actor", "whylogs_container.whylabs.container", "whylogs_container.whylabs.llm_validation"], "filenames": ["index.rst", "modules.rst", "whylogs_container.rst", "whylogs_container.util.rst", "whylogs_container.whylabs.rst", "whylogs_container.whylabs.actor.rst", "whylogs_container.whylabs.container.rst", "whylogs_container.whylabs.llm_validation.rst"], "titles": ["Welcome to whylogs-container-python\u2019s documentation!", "whylogs_container", "whylogs_container package", "whylogs_container.util package", "whylogs_container.whylabs package", "whylogs_container.whylabs.actor package", "whylogs_container.whylabs.container package", "whylogs_container.whylabs.llm_validation package"], "terms": {"index": 0, "modul": [0, 1], "search": 0, "page": [0, 6], "packag": 1, "subpackag": 1, "util": [1, 2], "submodul": [1, 2, 4], "list_util": [1, 2], "list_util_test": [1, 2], "signal_util": [1, 2], "string_util": [1, 2], "string_util_test": [1, 2], "time": [1, 2, 6], "time_test": [1, 2], "content": 1, "whylab": [1, 2], "get_like_item": [2, 3], "type_batched_item": [2, 3], "test_get_like_items_empti": [2, 3], "test_get_like_items_hp": [2, 3], "test_get_like_items_single_item": [2, 3], "test_get_like_items_single_typ": [2, 3], "test_get_like_items_until_empti": [2, 3], "test_it": [2, 3], "suspended_sign": [2, 3], "encode_str": [2, 3], "test_different_hash": [2, 3], "test_order_doesnt_matt": [2, 3], "timegranular": [2, 3], "d": [2, 3, 6], "h": [2, 3, 6], "current_time_m": [2, 3], "truncate_time_m": [2, 3], "test_truncate_dai": [2, 3], "test_truncate_hour": [2, 3], "actor": [2, 4, 6], "preset_schema": [2, 4], "profile_actor": [2, 4], "profile_actor_messag": [2, 4], "contain": [2, 4, 5], "auth": [2, 4], "config": [2, 4, 5], "config_test": [2, 4], "request": [2, 4, 5, 7], "rout": [2, 4], "startup": [2, 4], "llm_valid": [2, 4], "metadata": [2, 4], "schema_build": [2, 4], "signal": [2, 3, 4], "valid": [2, 4, 5], "validation_workflow": [2, 4], "item": 3, "list": [3, 5, 6], "ani": [3, 6, 7], "tupl": [3, 5], "type": [3, 5, 6], "gener": [3, 5, 7], "none": [3, 5, 6, 7], "suspend": 3, "handl": [3, 6], "execut": 3, "col_nam": 3, "str": [3, 5, 6, 7], "int": [3, 5, 6, 7], "encod": 3, "string": 3, "number": [3, 6], "hash": 3, "each": [3, 5, 6], "one": 3, "ad": 3, "them": [3, 5], "togeth": 3, "thi": [3, 5, 6], "i": [3, 5, 6], "us": [3, 5, 6], "group": [3, 5], "kei": [3, 6], "base": [3, 5, 6, 7], "don": [3, 6], "t": [3, 6, 7], "care": 3, "about": 3, "order": 3, "have": [3, 5, 6], "reason": [3, 5], "low": 3, "collis": 3, "rate": 3, "without": 3, "sort": 3, "everyth": [3, 5], "class": [3, 5, 6, 7], "valu": [3, 4, 6, 7], "enum": [3, 6], "an": [3, 6], "enumer": 3, "dai": [3, 6], "hour": [3, 6], "granular": 3, "process_batch": [4, 5], "process_messag": [4, 5], "run": [4, 5], "send": [4, 5, 6], "shutdown": [4, 5, 6], "closemessag": [4, 5], "start_actor": [4, 5], "presetschema": [4, 5], "get_default_schema": [4, 5], "profileactor": [4, 5], "process_close_messag": [4, 5], "process_debug_messag": [4, 5], "process_log_dict": [4, 5], "process_log_embeddings_dict": [4, 5], "process_log_embeddings_messag": [4, 5], "process_openai_messag": [4, 5], "process_publish_messag": [4, 5], "process_pubsub": [4, 5], "process_pubsub_embed": [4, 5], "process_raw_log_dict": [4, 5], "datadict": [4, 5], "column": [4, 5, 6], "data": [4, 5, 6], "debugmessag": [4, 5], "logembeddingrequestdict": [4, 5], "datasetid": [4, 5, 6], "embed": [4, 5, 6], "timestamp": [4, 5, 6, 7], "logrequestdict": [4, 5], "multipl": [4, 5, 6], "openaimessag": [4, 5, 7], "dataset_id": [4, 5, 6], "get_user_prompt": [4, 5], "prompt_id": [4, 5, 6, 7], "request_tim": [4, 5], "respons": [4, 5, 6, 7], "to_log_request_dict": [4, 5], "to_openai_dict": [4, 5], "openaipromptdict": [4, 5], "role": [4, 5, 6], "openairequestdict": [4, 5, 7], "messag": [4, 5, 6], "model": [4, 5, 6], "temperatur": [4, 5, 6], "whylabs_dataset_id": [4, 5, 6], "pubsubdict": [4, 5], "log_request": [4, 5], "subscript": [4, 5, 6], "pubsubembeddingdict": [4, 5], "log_embedding_request": [4, 5], "pubsubmessag": [4, 5, 6], "attribut": [4, 5, 6], "message_id": [4, 5, 6], "publish_tim": [4, 5, 6], "publishmessag": [4, 5], "rawlogembeddingsmessag": [4, 5], "to_log_embeddings_request_dict": [4, 5], "rawlogmessag": [4, 5], "rawpubsubembeddingmessag": [4, 5], "to_pubsub_embedding_messag": [4, 5], "rawpubsubmessag": [4, 5], "to_pubsub_messag": [4, 5], "determine_dataset_timestamp": [4, 5], "get_column": [4, 5], "log_dict_to_data_fram": [4, 5], "log_dict_to_embedding_matrix": [4, 5], "reduce_embeddings_request": [4, 5], "reduce_log_request": [4, 5], "api_key_auth": [4, 6], "containerconfig": [4, 5, 6], "assert_llm_endpoint": [4, 6], "auth_dis": [4, 6], "container_password": [4, 6], "default_dataset_cad": [4, 6], "default_openai_api_kei": [4, 6], "default_openai_organ": [4, 6], "default_whylabs_upload_cad": [4, 6], "default_whylabs_upload_interv": [4, 6], "disable_container_password": [4, 6], "fail_startup_without_config": [4, 6], "llm_contain": [4, 6], "whylabs_api_kei": [4, 6], "whylabs_org_id": [4, 6], "envvarnam": [4, 6], "default_whylabs_dataset_cad": [4, 6], "max_request_batch_s": [4, 6], "max_request_buffer_byt": [4, 6], "openai_api_kei": [4, 6], "openai_organ": [4, 6], "get_dataset_opt": [4, 6], "test_indexing_into_toolkit": [4, 6], "logembeddingrequest": [4, 6], "logmultipl": [4, 6], "logrequest": [4, 6], "openairequest": [4, 6], "prompt": [4, 6, 7], "messageid": [4, 6], "publishtim": [4, 6], "pubsubrequest": [4, 6], "health": [4, 6], "log": [4, 5, 6], "log_debug_info": [4, 6], "log_embed": [4, 6], "log_embeddings_json": [4, 6], "log_json": [4, 6], "log_pubsub": [4, 6], "log_pubsub_embed": [4, 6], "openai_proxi": [4, 6], "openai_valid": [4, 6], "publish_profil": [4, 6], "init_log": [4, 6], "update_pid": [4, 6], "build_act": [4, 7], "build_langkit_valid": [4, 7], "build_langkit_validators_dictionari": [4, 7], "parse_yaml_to_dict": [4, 7], "validate_yaml": [4, 7], "configurationmetadata": [4, 7], "config_error": [4, 7], "validationmetadata": [4, 7], "failed_metr": [4, 7], "is_valid": [4, 7], "validator_nam": [4, 7], "build_patterns_valid": [4, 7], "build_threshold_valid": [4, 7], "get_validators_udf_schema": [4, 7], "validationerror": [4, 7], "failur": [4, 7], "result": [4, 5, 7], "success": [4, 7], "validate_input": [4, 7], "make_openai_request": [4, 7], "basethresholdvalidatorbuild": [4, 7], "inputoutputvalidatorbuild": [4, 7], "build": [4, 6, 7], "regexvalidatorbuild": [4, 7], "sentimentvalidatorbuild": [4, 7], "textstatvalidatorbuild": [4, 7], "themesvalidatorbuild": [4, 7], "toxicityvalidatorbuild": [4, 7], "validatorbuild": [4, 7], "queue": [5, 6], "max_messages_to_process": 5, "50000": 5, "process": [5, 6], "abc": [5, 7], "messagetyp": 5, "abstract": [5, 7], "batch": [5, 6], "batch_typ": 5, "method": 5, "sub": 5, "can": [5, 6], "overridden": 5, "object": [5, 6, 7], "llm_dataset_id": 5, "datasetopt": [5, 6], "faster_fifo": 5, "env_var": 5, "writer": 5, "whylog": [5, 6], "api": [5, 6], "dataset_options_fn": 5, "callabl": 5, "whylabs_toolkit": 5, "config_typ": 5, "union": 5, "These": 5, "ar": [5, 6], "core": 5, "you": [5, 6], "thei": [5, 6], "either": 5, "subclass": 5, "typeddict": 5, "wrapper": 5, "around": 5, "serial": 5, "byte": 5, "version": 5, "those": 5, "dict": [5, 6, 7], "here": 5, "becaus": [5, 6], "we": 5, "orjson": 5, "deseri": 5, "perform": [5, 6], "librari": 5, "prefer": 5, "output": 5, "dictionari": 5, "The": [5, 6], "dataclass": 5, "helper": 5, "extract": 5, "It": [5, 6], "": [5, 6], "import": [5, 6], "rais": 5, "except": [5, 7], "doe": 5, "lot": [5, 6], "larg": 5, "would": [5, 6], "lose": 5, "entir": 5, "instead": 5, "return": 5, "error": 5, "some": 5, "issu": 5, "float": [5, 6, 7], "bool": [5, 6, 7], "cadenc": [5, 6], "datasetcad": [5, 6], "datafram": 5, "ndarrai": 5, "acc": 5, "cur": 5, "reduc": 5, "assum": 5, "ha": [5, 6], "same": 5, "That": 5, "assumpt": 5, "should": 5, "enforc": 5, "befor": [5, 6], "set": [5, 6], "api_kei": 6, "depend": 6, "apikeyhead": 6, "datasetuploadcadencegranular": 6, "all": 6, "environ": 6, "variabl": 6, "name": 6, "applic": 6, "true": 6, "re": 6, "llm": 6, "openapi": 6, "monitor": 6, "password": 6, "look": 6, "header": 6, "curl": 6, "format": 6, "author": 6, "bearer": 6, "my_password": 6, "daili": 6, "default": 6, "hourli": 6, "whenev": 6, "specifi": 6, "dataset": 6, "schema": [6, 7], "determin": 6, "how": 6, "bucket": 6, "profil": 6, "pool": 6, "minut": 6, "m": 6, "often": 6, "upload": 6, "interv": 6, "mani": 6, "unit": 6, "If": 6, "Then": 6, "omit": 6, "fail": 6, "start": 6, "custom": 6, "configur": 6, "found": 6, "safeguard": 6, "want": 6, "make": 6, "sure": 6, "up": 6, "correctli": 6, "python": 6, "env": 6, "var": 6, "identifi": 6, "deploy": 6, "fals": [6, 7], "imag": 6, "50_000": 6, "maximum": 6, "per": 6, "place": 6, "onto": 6, "after": 6, "come": 6, "from": 6, "rest": 6, "server": 6, "read": 6, "bulk": 6, "larger": 6, "longer": 6, "take": 6, "mostli": 6, "transpar": 6, "caller": 6, "end": 6, "matter": 6, "when": 6, "so": 6, "throughput": 6, "too": 6, "high": 6, "keep": 6, "In": 6, "case": 6, "requestor": 6, "wait": 6, "which": 6, "could": 6, "potenti": 6, "consid": 6, "lower": 6, "see": 6, "out": 6, "tp": 6, "rel": 6, "our": 6, "doc": 6, "load": 6, "test": 6, "1_000_000_000": 6, "1gb": 6, "size": 6, "buffer": 6, "put": 6, "increas": 6, "give": 6, "more": 6, "good": 6, "idea": 6, "timeout": 6, "spikei": 6, "traffic": 6, "pattern": 6, "memori": 6, "host": 6, "noth": 6, "better": 6, "do": 6, "openai": 6, "onli": 6, "appli": 6, "organ": 6, "id": 6, "basemodel": 6, "0": [6, 7], "user": 6, "async": 6, "_raw_request": 6, "tabular": 6, "swagger": 6, "ui": 6, "isn": 6, "abl": 6, "call": 6, "current": 6, "sampl": 6, "bash": 6, "x": 6, "post": 6, "json": 6, "http": 6, "localhost": 6, "8000": 6, "raw": 6, "62": 6, "ag": 6, "workclass": 6, "fnlwgt": 6, "educ": 6, "25": 6, "privat": 6, "226802": 6, "11th": 6, "defin": 6, "your": 6, "endpoint": 6, "url": 6, "hand": 6, "ai": 6, "integr": 6, "support": 6, "1634235000": 6, "12": 6, "45": 6, "33": 6, "92": 6, "exampl": 6, "bodi": 6, "manual": 6, "experi": 6, "shouldn": 6, "product": 6, "steep": 6, "penalti": 6, "compar": 6, "normal": 6, "act": 6, "rule_typ": 7, "rule": 7, "parsed_data": 7, "conditionvalid": 7, "file_path": 7, "yaml_data": 7, "metric_nam": 7, "threshold": 7, "8": 7, "identity_column": 7, "udfschema": 7, "valueerror": 7, "arg": 7, "kwarg": 7, "protocol": 7, "input_text": 7, "input_typ": 7, "liter": 7, "datasetschema": 7, "openai_request_bodi": 7, "openai_messag": 7, "metric": 7}, "objects": {"": [[2, 0, 0, "-", "whylogs_container"]], "whylogs_container": [[3, 0, 0, "-", "util"], [4, 0, 0, "-", "whylabs"]], "whylogs_container.util": [[3, 0, 0, "-", "list_util"], [3, 0, 0, "-", "list_util_test"], [3, 0, 0, "-", "signal_util"], [3, 0, 0, "-", "string_util"], [3, 0, 0, "-", "string_util_test"], [3, 0, 0, "-", "time"], [3, 0, 0, "-", "time_test"]], "whylogs_container.util.list_util": [[3, 1, 1, "", "get_like_items"], [3, 1, 1, "", "type_batched_items"]], "whylogs_container.util.list_util_test": [[3, 1, 1, "", "test_get_like_items_empty"], [3, 1, 1, "", "test_get_like_items_hp"], [3, 1, 1, "", "test_get_like_items_single_item"], [3, 1, 1, "", "test_get_like_items_single_type"], [3, 1, 1, "", "test_get_like_items_until_empty"], [3, 1, 1, "", "test_iter"]], "whylogs_container.util.signal_util": [[3, 1, 1, "", "suspended_signals"]], "whylogs_container.util.string_util": [[3, 1, 1, "", "encode_strings"]], "whylogs_container.util.string_util_test": [[3, 1, 1, "", "test_different_hashes"], [3, 1, 1, "", "test_order_doesnt_matter"]], "whylogs_container.util.time": [[3, 2, 1, "", "TimeGranularity"], [3, 1, 1, "", "current_time_ms"], [3, 1, 1, "", "truncate_time_ms"]], "whylogs_container.util.time.TimeGranularity": [[3, 3, 1, "", "D"], [3, 3, 1, "", "H"]], "whylogs_container.util.time_test": [[3, 1, 1, "", "test_truncate_day"], [3, 1, 1, "", "test_truncate_hour"]], "whylogs_container.whylabs": [[5, 0, 0, "-", "actor"], [6, 0, 0, "-", "container"], [7, 0, 0, "-", "llm_validation"]], "whylogs_container.whylabs.actor": [[5, 0, 0, "-", "actor"], [5, 0, 0, "-", "preset_schema"], [5, 0, 0, "-", "profile_actor"], [5, 0, 0, "-", "profile_actor_messages"]], "whylogs_container.whylabs.actor.actor": [[5, 2, 1, "", "Actor"], [5, 2, 1, "", "CloseMessage"], [5, 1, 1, "", "start_actor"]], "whylogs_container.whylabs.actor.actor.Actor": [[5, 4, 1, "", "process_batch"], [5, 4, 1, "", "process_messages"], [5, 4, 1, "", "run"], [5, 4, 1, "", "send"], [5, 4, 1, "", "shutdown"]], "whylogs_container.whylabs.actor.preset_schema": [[5, 2, 1, "", "PresetSchema"]], "whylogs_container.whylabs.actor.preset_schema.PresetSchema": [[5, 4, 1, "", "get_default_schema"]], "whylogs_container.whylabs.actor.profile_actor": [[5, 2, 1, "", "ProfileActor"]], "whylogs_container.whylabs.actor.profile_actor.ProfileActor": [[5, 4, 1, "", "process_batch"], [5, 4, 1, "", "process_close_message"], [5, 4, 1, "", "process_debug_message"], [5, 4, 1, "", "process_log_dicts"], [5, 4, 1, "", "process_log_embeddings_dicts"], [5, 4, 1, "", "process_log_embeddings_messages"], [5, 4, 1, "", "process_openai_message"], [5, 4, 1, "", "process_publish_message"], [5, 4, 1, "", "process_pubsub"], [5, 4, 1, "", "process_pubsub_embedding"], [5, 4, 1, "", "process_raw_log_dicts"]], "whylogs_container.whylabs.actor.profile_actor_messages": [[5, 2, 1, "", "DataDict"], [5, 2, 1, "", "DebugMessage"], [5, 2, 1, "", "LogEmbeddingRequestDict"], [5, 2, 1, "", "LogRequestDict"], [5, 2, 1, "", "OpenAIMessage"], [5, 2, 1, "", "OpenAIPromptDict"], [5, 2, 1, "", "OpenAIRequestDict"], [5, 2, 1, "", "PubSubDict"], [5, 2, 1, "", "PubSubEmbeddingDict"], [5, 2, 1, "", "PubSubMessage"], [5, 2, 1, "", "PublishMessage"], [5, 2, 1, "", "RawLogEmbeddingsMessage"], [5, 2, 1, "", "RawLogMessage"], [5, 2, 1, "", "RawPubSubEmbeddingMessage"], [5, 2, 1, "", "RawPubSubMessage"], [5, 1, 1, "", "determine_dataset_timestamp"], [5, 1, 1, "", "get_columns"], [5, 1, 1, "", "log_dict_to_data_frame"], [5, 1, 1, "", "log_dict_to_embedding_matrix"], [5, 1, 1, "", "reduce_embeddings_request"], [5, 1, 1, "", "reduce_log_requests"]], "whylogs_container.whylabs.actor.profile_actor_messages.DataDict": [[5, 3, 1, "", "columns"], [5, 3, 1, "", "data"]], "whylogs_container.whylabs.actor.profile_actor_messages.LogEmbeddingRequestDict": [[5, 3, 1, "", "datasetId"], [5, 3, 1, "", "embeddings"], [5, 3, 1, "", "timestamp"]], "whylogs_container.whylabs.actor.profile_actor_messages.LogRequestDict": [[5, 3, 1, "", "datasetId"], [5, 3, 1, "", "multiple"], [5, 3, 1, "", "timestamp"]], "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIMessage": [[5, 3, 1, "", "dataset_id"], [5, 4, 1, "", "get_user_prompt"], [5, 3, 1, "", "prompt_id"], [5, 3, 1, "", "request"], [5, 3, 1, "", "request_time"], [5, 3, 1, "", "response"], [5, 4, 1, "", "to_log_request_dict"], [5, 4, 1, "", "to_openai_dict"]], "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIPromptDict": [[5, 3, 1, "", "content"], [5, 3, 1, "", "role"]], "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIRequestDict": [[5, 3, 1, "", "messages"], [5, 3, 1, "", "model"], [5, 3, 1, "", "temperature"], [5, 3, 1, "", "whylabs_dataset_id"]], "whylogs_container.whylabs.actor.profile_actor_messages.PubSubDict": [[5, 3, 1, "", "log_request"], [5, 3, 1, "", "message"], [5, 3, 1, "", "subscription"]], "whylogs_container.whylabs.actor.profile_actor_messages.PubSubEmbeddingDict": [[5, 3, 1, "", "log_embedding_request"], [5, 3, 1, "", "message"], [5, 3, 1, "", "subscription"]], "whylogs_container.whylabs.actor.profile_actor_messages.PubSubMessage": [[5, 3, 1, "", "attributes"], [5, 3, 1, "", "data"], [5, 3, 1, "", "message_id"], [5, 3, 1, "", "publish_time"]], "whylogs_container.whylabs.actor.profile_actor_messages.RawLogEmbeddingsMessage": [[5, 3, 1, "", "request"], [5, 3, 1, "", "request_time"], [5, 4, 1, "", "to_log_embeddings_request_dict"]], "whylogs_container.whylabs.actor.profile_actor_messages.RawLogMessage": [[5, 3, 1, "", "request"], [5, 3, 1, "", "request_time"], [5, 4, 1, "", "to_log_request_dict"]], "whylogs_container.whylabs.actor.profile_actor_messages.RawPubSubEmbeddingMessage": [[5, 3, 1, "", "request"], [5, 3, 1, "", "request_time"], [5, 4, 1, "", "to_pubsub_embedding_message"]], "whylogs_container.whylabs.actor.profile_actor_messages.RawPubSubMessage": [[5, 3, 1, "", "request"], [5, 3, 1, "", "request_time"], [5, 4, 1, "", "to_pubsub_message"]], "whylogs_container.whylabs.container": [[6, 0, 0, "-", "auth"], [6, 0, 0, "-", "config"], [6, 0, 0, "-", "config_test"], [6, 0, 0, "-", "requests"], [6, 0, 0, "-", "routes"], [6, 0, 0, "-", "startup"]], "whylogs_container.whylabs.container.auth": [[6, 2, 1, "", "Auth"]], "whylogs_container.whylabs.container.auth.Auth": [[6, 4, 1, "", "api_key_auth"]], "whylogs_container.whylabs.container.config": [[6, 2, 1, "", "ContainerConfig"], [6, 2, 1, "", "EnvVarNames"], [6, 1, 1, "", "get_dataset_options"]], "whylogs_container.whylabs.container.config.ContainerConfig": [[6, 4, 1, "", "assert_llm_endpoint"], [6, 4, 1, "", "auth_disabled"], [6, 3, 1, "", "container_password"], [6, 3, 1, "", "default_dataset_cadence"], [6, 3, 1, "", "default_openai_api_key"], [6, 3, 1, "", "default_openai_organization"], [6, 3, 1, "", "default_whylabs_upload_cadence"], [6, 3, 1, "", "default_whylabs_upload_interval"], [6, 3, 1, "", "disable_container_password"], [6, 3, 1, "", "fail_startup_without_config"], [6, 3, 1, "", "llm_container"], [6, 3, 1, "", "whylabs_api_key"], [6, 3, 1, "", "whylabs_org_id"]], "whylogs_container.whylabs.container.config.EnvVarNames": [[6, 3, 1, "", "CONTAINER_PASSWORD"], [6, 3, 1, "", "DEFAULT_WHYLABS_DATASET_CADENCE"], [6, 3, 1, "", "DEFAULT_WHYLABS_UPLOAD_CADENCE"], [6, 3, 1, "", "DEFAULT_WHYLABS_UPLOAD_INTERVAL"], [6, 3, 1, "", "DISABLE_CONTAINER_PASSWORD"], [6, 3, 1, "", "FAIL_STARTUP_WITHOUT_CONFIG"], [6, 3, 1, "", "LLM_CONTAINER"], [6, 3, 1, "", "MAX_REQUEST_BATCH_SIZE"], [6, 3, 1, "", "MAX_REQUEST_BUFFER_BYTES"], [6, 3, 1, "", "OPENAI_API_KEY"], [6, 3, 1, "", "OPENAI_ORGANIZATION"], [6, 3, 1, "", "WHYLABS_API_KEY"], [6, 3, 1, "", "WHYLABS_ORG_ID"]], "whylogs_container.whylabs.container.config_test": [[6, 1, 1, "", "test_indexing_into_toolkit"]], "whylogs_container.whylabs.container.requests": [[6, 2, 1, "", "LogEmbeddingRequest"], [6, 2, 1, "", "LogMultiple"], [6, 2, 1, "", "LogRequest"], [6, 2, 1, "", "OpenAIRequest"], [6, 2, 1, "", "PubSubMessage"], [6, 2, 1, "", "PubSubRequest"]], "whylogs_container.whylabs.container.requests.LogEmbeddingRequest": [[6, 3, 1, "", "datasetId"], [6, 3, 1, "", "embeddings"], [6, 3, 1, "", "timestamp"]], "whylogs_container.whylabs.container.requests.LogMultiple": [[6, 3, 1, "", "columns"], [6, 3, 1, "", "data"]], "whylogs_container.whylabs.container.requests.LogRequest": [[6, 3, 1, "", "datasetId"], [6, 3, 1, "", "multiple"], [6, 3, 1, "", "timestamp"]], "whylogs_container.whylabs.container.requests.OpenAIRequest": [[6, 3, 1, "", "prompt"], [6, 3, 1, "", "role"], [6, 3, 1, "", "temperature"]], "whylogs_container.whylabs.container.requests.PubSubMessage": [[6, 3, 1, "", "attributes"], [6, 3, 1, "", "data"], [6, 3, 1, "", "messageId"], [6, 3, 1, "", "publishTime"]], "whylogs_container.whylabs.container.requests.PubSubRequest": [[6, 3, 1, "", "message"], [6, 3, 1, "", "subscription"]], "whylogs_container.whylabs.container.routes": [[6, 1, 1, "", "health"], [6, 1, 1, "", "log"], [6, 1, 1, "", "log_debug_info"], [6, 1, 1, "", "log_embeddings"], [6, 1, 1, "", "log_embeddings_json"], [6, 1, 1, "", "log_json"], [6, 1, 1, "", "log_pubsub"], [6, 1, 1, "", "log_pubsub_embeddings"], [6, 1, 1, "", "openai_proxy"], [6, 1, 1, "", "openai_validation"], [6, 1, 1, "", "publish_profiles"], [6, 1, 1, "", "shutdown"]], "whylogs_container.whylabs.container.startup": [[6, 1, 1, "", "init_logging"], [6, 1, 1, "", "update_pid"]], "whylogs_container.whylabs.llm_validation": [[7, 0, 0, "-", "config"], [7, 0, 0, "-", "metadata"], [7, 0, 0, "-", "schema_builder"], [7, 0, 0, "-", "signals"], [7, 0, 0, "-", "validate"], [7, 0, 0, "-", "validation_workflow"], [7, 0, 0, "-", "validators"]], "whylogs_container.whylabs.llm_validation.config": [[7, 1, 1, "", "build_actions"], [7, 1, 1, "", "build_langkit_validator"], [7, 1, 1, "", "build_langkit_validators_dictionary"], [7, 1, 1, "", "parse_yaml_to_dict"], [7, 1, 1, "", "validate_yaml"]], "whylogs_container.whylabs.llm_validation.metadata": [[7, 2, 1, "", "ConfigurationMetadata"], [7, 2, 1, "", "ValidationMetadata"]], "whylogs_container.whylabs.llm_validation.metadata.ConfigurationMetadata": [[7, 3, 1, "", "config_error"], [7, 3, 1, "", "timestamp"]], "whylogs_container.whylabs.llm_validation.metadata.ValidationMetadata": [[7, 3, 1, "", "failed_metric"], [7, 3, 1, "", "is_valid"], [7, 3, 1, "", "prompt_id"], [7, 3, 1, "", "timestamp"], [7, 3, 1, "", "validator_name"], [7, 3, 1, "", "value"]], "whylogs_container.whylabs.llm_validation.schema_builder": [[7, 1, 1, "", "build_patterns_validator"], [7, 1, 1, "", "build_threshold_validator"], [7, 1, 1, "", "get_validators_udf_schema"]], "whylogs_container.whylabs.llm_validation.signals": [[7, 5, 1, "", "ValidationError"]], "whylogs_container.whylabs.llm_validation.validate": [[7, 2, 1, "", "Failure"], [7, 2, 1, "", "Result"], [7, 2, 1, "", "Success"], [7, 1, 1, "", "validate_input"]], "whylogs_container.whylabs.llm_validation.validation_workflow": [[7, 1, 1, "", "make_openai_request"], [7, 1, 1, "", "validation_workflow"]], "whylogs_container.whylabs.llm_validation.validators": [[7, 2, 1, "", "BaseThresholdValidatorBuilder"], [7, 2, 1, "", "InputOutputValidatorBuilder"], [7, 2, 1, "", "RegexValidatorBuilder"], [7, 2, 1, "", "SentimentValidatorBuilder"], [7, 2, 1, "", "TextStatValidatorBuilder"], [7, 2, 1, "", "ThemesValidatorBuilder"], [7, 2, 1, "", "ToxicityValidatorBuilder"], [7, 2, 1, "", "ValidatorBuilder"]], "whylogs_container.whylabs.llm_validation.validators.BaseThresholdValidatorBuilder": [[7, 4, 1, "", "build_threshold_validator"]], "whylogs_container.whylabs.llm_validation.validators.InputOutputValidatorBuilder": [[7, 4, 1, "", "build"]], "whylogs_container.whylabs.llm_validation.validators.RegexValidatorBuilder": [[7, 4, 1, "", "build"]], "whylogs_container.whylabs.llm_validation.validators.SentimentValidatorBuilder": [[7, 4, 1, "", "build"]], "whylogs_container.whylabs.llm_validation.validators.TextStatValidatorBuilder": [[7, 4, 1, "", "build"]], "whylogs_container.whylabs.llm_validation.validators.ThemesValidatorBuilder": [[7, 4, 1, "", "build"]], "whylogs_container.whylabs.llm_validation.validators.ToxicityValidatorBuilder": [[7, 4, 1, "", "build"]], "whylogs_container.whylabs.llm_validation.validators.ValidatorBuilder": [[7, 4, 1, "", "build"]]}, "objtypes": {"0": "py:module", "1": "py:function", "2": "py:class", "3": "py:attribute", "4": "py:method", "5": "py:exception"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"], "2": ["py", "class", "Python class"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "method", "Python method"], "5": ["py", "exception", "Python exception"]}, "titleterms": {"welcom": 0, "whylog": 0, "contain": [0, 6], "python": 0, "": 0, "document": 0, "indic": 0, "tabl": 0, "whylogs_contain": [1, 2, 3, 4, 5, 6, 7], "packag": [2, 3, 4, 5, 6, 7], "subpackag": [2, 4], "modul": [2, 3, 4, 5, 6, 7], "content": [2, 3, 4, 5, 6, 7], "util": 3, "submodul": [3, 5, 6, 7], "list_util": 3, "list_util_test": 3, "signal_util": 3, "string_util": 3, "string_util_test": 3, "time": 3, "time_test": 3, "whylab": [4, 5, 6, 7], "actor": 5, "preset_schema": 5, "profile_actor": 5, "profile_actor_messag": 5, "auth": 6, "config": [6, 7], "requir": 6, "option": 6, "config_test": 6, "request": 6, "rout": 6, "startup": 6, "llm_valid": 7, "metadata": 7, "schema_build": 7, "signal": 7, "valid": 7, "validation_workflow": 7}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 58}, "alltitles": {"Welcome to whylogs-container-python\u2019s documentation!": [[0, "welcome-to-whylogs-container-python-s-documentation"]], "Indices and tables": [[0, "indices-and-tables"]], "whylogs_container": [[1, "whylogs-container"]], "whylogs_container package": [[2, "whylogs-container-package"]], "Subpackages": [[2, "subpackages"], [4, "subpackages"]], "Module contents": [[2, "module-whylogs_container"], [3, "module-whylogs_container.util"], [4, "module-whylogs_container.whylabs"], [5, "module-whylogs_container.whylabs.actor"], [6, "module-whylogs_container.whylabs.container"], [7, "module-whylogs_container.whylabs.llm_validation"]], "whylogs_container.util package": [[3, "whylogs-container-util-package"]], "Submodules": [[3, "submodules"], [5, "submodules"], [6, "submodules"], [7, "submodules"]], "whylogs_container.util.list_util module": [[3, "module-whylogs_container.util.list_util"]], "whylogs_container.util.list_util_test module": [[3, "module-whylogs_container.util.list_util_test"]], "whylogs_container.util.signal_util module": [[3, "module-whylogs_container.util.signal_util"]], "whylogs_container.util.string_util module": [[3, "module-whylogs_container.util.string_util"]], "whylogs_container.util.string_util_test module": [[3, "module-whylogs_container.util.string_util_test"]], "whylogs_container.util.time module": [[3, "module-whylogs_container.util.time"]], "whylogs_container.util.time_test module": [[3, "module-whylogs_container.util.time_test"]], "whylogs_container.whylabs package": [[4, "whylogs-container-whylabs-package"]], "whylogs_container.whylabs.actor package": [[5, "whylogs-container-whylabs-actor-package"]], "whylogs_container.whylabs.actor.actor module": [[5, "module-whylogs_container.whylabs.actor.actor"]], "whylogs_container.whylabs.actor.preset_schema module": [[5, "module-whylogs_container.whylabs.actor.preset_schema"]], "whylogs_container.whylabs.actor.profile_actor module": [[5, "module-whylogs_container.whylabs.actor.profile_actor"]], "whylogs_container.whylabs.actor.profile_actor_messages module": [[5, "module-whylogs_container.whylabs.actor.profile_actor_messages"]], "whylogs_container.whylabs.container package": [[6, "whylogs-container-whylabs-container-package"]], "whylogs_container.whylabs.container.auth module": [[6, "module-whylogs_container.whylabs.container.auth"]], "whylogs_container.whylabs.container.config module": [[6, "module-whylogs_container.whylabs.container.config"]], "Required": [[6, "required"]], "Optional": [[6, "optional"]], "whylogs_container.whylabs.container.config_test module": [[6, "module-whylogs_container.whylabs.container.config_test"]], "whylogs_container.whylabs.container.requests module": [[6, "module-whylogs_container.whylabs.container.requests"]], "whylogs_container.whylabs.container.routes module": [[6, "module-whylogs_container.whylabs.container.routes"]], "}\u2019": [[6, "id5"], [6, "id18"]], "whylogs_container.whylabs.container.startup module": [[6, "module-whylogs_container.whylabs.container.startup"]], "whylogs_container.whylabs.llm_validation package": [[7, "whylogs-container-whylabs-llm-validation-package"]], "whylogs_container.whylabs.llm_validation.config module": [[7, "module-whylogs_container.whylabs.llm_validation.config"]], "whylogs_container.whylabs.llm_validation.metadata module": [[7, "module-whylogs_container.whylabs.llm_validation.metadata"]], "whylogs_container.whylabs.llm_validation.schema_builder module": [[7, "module-whylogs_container.whylabs.llm_validation.schema_builder"]], "whylogs_container.whylabs.llm_validation.signals module": [[7, "module-whylogs_container.whylabs.llm_validation.signals"]], "whylogs_container.whylabs.llm_validation.validate module": [[7, "module-whylogs_container.whylabs.llm_validation.validate"]], "whylogs_container.whylabs.llm_validation.validation_workflow module": [[7, "module-whylogs_container.whylabs.llm_validation.validation_workflow"]], "whylogs_container.whylabs.llm_validation.validators module": [[7, "module-whylogs_container.whylabs.llm_validation.validators"]]}, "indexentries": {"module": [[2, "module-whylogs_container"], [3, "module-whylogs_container.util"], [3, "module-whylogs_container.util.list_util"], [3, "module-whylogs_container.util.list_util_test"], [3, "module-whylogs_container.util.signal_util"], [3, "module-whylogs_container.util.string_util"], [3, "module-whylogs_container.util.string_util_test"], [3, "module-whylogs_container.util.time"], [3, "module-whylogs_container.util.time_test"], [4, "module-whylogs_container.whylabs"], [5, "module-whylogs_container.whylabs.actor"], [5, "module-whylogs_container.whylabs.actor.actor"], [5, "module-whylogs_container.whylabs.actor.preset_schema"], [5, "module-whylogs_container.whylabs.actor.profile_actor"], [5, "module-whylogs_container.whylabs.actor.profile_actor_messages"], [6, "module-whylogs_container.whylabs.container"], [6, "module-whylogs_container.whylabs.container.auth"], [6, "module-whylogs_container.whylabs.container.config"], [6, "module-whylogs_container.whylabs.container.config_test"], [6, "module-whylogs_container.whylabs.container.requests"], [6, "module-whylogs_container.whylabs.container.routes"], [6, "module-whylogs_container.whylabs.container.startup"], [7, "module-whylogs_container.whylabs.llm_validation"], [7, "module-whylogs_container.whylabs.llm_validation.config"], [7, "module-whylogs_container.whylabs.llm_validation.metadata"], [7, "module-whylogs_container.whylabs.llm_validation.schema_builder"], [7, "module-whylogs_container.whylabs.llm_validation.signals"], [7, "module-whylogs_container.whylabs.llm_validation.validate"], [7, "module-whylogs_container.whylabs.llm_validation.validation_workflow"], [7, "module-whylogs_container.whylabs.llm_validation.validators"]], "whylogs_container": [[2, "module-whylogs_container"]], "d (whylogs_container.util.time.timegranularity attribute)": [[3, "whylogs_container.util.time.TimeGranularity.D"]], "h (whylogs_container.util.time.timegranularity attribute)": [[3, "whylogs_container.util.time.TimeGranularity.H"]], "timegranularity (class in whylogs_container.util.time)": [[3, "whylogs_container.util.time.TimeGranularity"]], "current_time_ms() (in module whylogs_container.util.time)": [[3, "whylogs_container.util.time.current_time_ms"]], "encode_strings() (in module whylogs_container.util.string_util)": [[3, "whylogs_container.util.string_util.encode_strings"]], "get_like_items() (in module whylogs_container.util.list_util)": [[3, "whylogs_container.util.list_util.get_like_items"]], "suspended_signals() (in module whylogs_container.util.signal_util)": [[3, "whylogs_container.util.signal_util.suspended_signals"]], "test_different_hashes() (in module whylogs_container.util.string_util_test)": [[3, "whylogs_container.util.string_util_test.test_different_hashes"]], "test_get_like_items_empty() (in module whylogs_container.util.list_util_test)": [[3, "whylogs_container.util.list_util_test.test_get_like_items_empty"]], "test_get_like_items_hp() (in module whylogs_container.util.list_util_test)": [[3, "whylogs_container.util.list_util_test.test_get_like_items_hp"]], "test_get_like_items_single_item() (in module whylogs_container.util.list_util_test)": [[3, "whylogs_container.util.list_util_test.test_get_like_items_single_item"]], "test_get_like_items_single_type() (in module whylogs_container.util.list_util_test)": [[3, "whylogs_container.util.list_util_test.test_get_like_items_single_type"]], "test_get_like_items_until_empty() (in module whylogs_container.util.list_util_test)": [[3, "whylogs_container.util.list_util_test.test_get_like_items_until_empty"]], "test_iter() (in module whylogs_container.util.list_util_test)": [[3, "whylogs_container.util.list_util_test.test_iter"]], "test_order_doesnt_matter() (in module whylogs_container.util.string_util_test)": [[3, "whylogs_container.util.string_util_test.test_order_doesnt_matter"]], "test_truncate_day() (in module whylogs_container.util.time_test)": [[3, "whylogs_container.util.time_test.test_truncate_day"]], "test_truncate_hour() (in module whylogs_container.util.time_test)": [[3, "whylogs_container.util.time_test.test_truncate_hour"]], "truncate_time_ms() (in module whylogs_container.util.time)": [[3, "whylogs_container.util.time.truncate_time_ms"]], "type_batched_items() (in module whylogs_container.util.list_util)": [[3, "whylogs_container.util.list_util.type_batched_items"]], "whylogs_container.util": [[3, "module-whylogs_container.util"]], "whylogs_container.util.list_util": [[3, "module-whylogs_container.util.list_util"]], "whylogs_container.util.list_util_test": [[3, "module-whylogs_container.util.list_util_test"]], "whylogs_container.util.signal_util": [[3, "module-whylogs_container.util.signal_util"]], "whylogs_container.util.string_util": [[3, "module-whylogs_container.util.string_util"]], "whylogs_container.util.string_util_test": [[3, "module-whylogs_container.util.string_util_test"]], "whylogs_container.util.time": [[3, "module-whylogs_container.util.time"]], "whylogs_container.util.time_test": [[3, "module-whylogs_container.util.time_test"]], "whylogs_container.whylabs": [[4, "module-whylogs_container.whylabs"]], "actor (class in whylogs_container.whylabs.actor.actor)": [[5, "whylogs_container.whylabs.actor.actor.Actor"]], "closemessage (class in whylogs_container.whylabs.actor.actor)": [[5, "whylogs_container.whylabs.actor.actor.CloseMessage"]], "datadict (class in whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.DataDict"]], "debugmessage (class in whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.DebugMessage"]], "logembeddingrequestdict (class in whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.LogEmbeddingRequestDict"]], "logrequestdict (class in whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.LogRequestDict"]], "openaimessage (class in whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIMessage"]], "openaipromptdict (class in whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIPromptDict"]], "openairequestdict (class in whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIRequestDict"]], "presetschema (class in whylogs_container.whylabs.actor.preset_schema)": [[5, "whylogs_container.whylabs.actor.preset_schema.PresetSchema"]], "profileactor (class in whylogs_container.whylabs.actor.profile_actor)": [[5, "whylogs_container.whylabs.actor.profile_actor.ProfileActor"]], "pubsubdict (class in whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.PubSubDict"]], "pubsubembeddingdict (class in whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.PubSubEmbeddingDict"]], "pubsubmessage (class in whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.PubSubMessage"]], "publishmessage (class in whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.PublishMessage"]], "rawlogembeddingsmessage (class in whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawLogEmbeddingsMessage"]], "rawlogmessage (class in whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawLogMessage"]], "rawpubsubembeddingmessage (class in whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawPubSubEmbeddingMessage"]], "rawpubsubmessage (class in whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawPubSubMessage"]], "attributes (whylogs_container.whylabs.actor.profile_actor_messages.pubsubmessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.PubSubMessage.attributes"]], "columns (whylogs_container.whylabs.actor.profile_actor_messages.datadict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.DataDict.columns"]], "content (whylogs_container.whylabs.actor.profile_actor_messages.openaipromptdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIPromptDict.content"]], "data (whylogs_container.whylabs.actor.profile_actor_messages.datadict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.DataDict.data"]], "data (whylogs_container.whylabs.actor.profile_actor_messages.pubsubmessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.PubSubMessage.data"]], "datasetid (whylogs_container.whylabs.actor.profile_actor_messages.logembeddingrequestdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.LogEmbeddingRequestDict.datasetId"]], "datasetid (whylogs_container.whylabs.actor.profile_actor_messages.logrequestdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.LogRequestDict.datasetId"]], "dataset_id (whylogs_container.whylabs.actor.profile_actor_messages.openaimessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIMessage.dataset_id"]], "determine_dataset_timestamp() (in module whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.determine_dataset_timestamp"]], "embeddings (whylogs_container.whylabs.actor.profile_actor_messages.logembeddingrequestdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.LogEmbeddingRequestDict.embeddings"]], "get_columns() (in module whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.get_columns"]], "get_default_schema() (whylogs_container.whylabs.actor.preset_schema.presetschema method)": [[5, "whylogs_container.whylabs.actor.preset_schema.PresetSchema.get_default_schema"]], "get_user_prompt() (whylogs_container.whylabs.actor.profile_actor_messages.openaimessage method)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIMessage.get_user_prompt"]], "log_dict_to_data_frame() (in module whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.log_dict_to_data_frame"]], "log_dict_to_embedding_matrix() (in module whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.log_dict_to_embedding_matrix"]], "log_embedding_request (whylogs_container.whylabs.actor.profile_actor_messages.pubsubembeddingdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.PubSubEmbeddingDict.log_embedding_request"]], "log_request (whylogs_container.whylabs.actor.profile_actor_messages.pubsubdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.PubSubDict.log_request"]], "message (whylogs_container.whylabs.actor.profile_actor_messages.pubsubdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.PubSubDict.message"]], "message (whylogs_container.whylabs.actor.profile_actor_messages.pubsubembeddingdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.PubSubEmbeddingDict.message"]], "message_id (whylogs_container.whylabs.actor.profile_actor_messages.pubsubmessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.PubSubMessage.message_id"]], "messages (whylogs_container.whylabs.actor.profile_actor_messages.openairequestdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIRequestDict.messages"]], "model (whylogs_container.whylabs.actor.profile_actor_messages.openairequestdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIRequestDict.model"]], "multiple (whylogs_container.whylabs.actor.profile_actor_messages.logrequestdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.LogRequestDict.multiple"]], "process_batch() (whylogs_container.whylabs.actor.actor.actor method)": [[5, "whylogs_container.whylabs.actor.actor.Actor.process_batch"]], "process_batch() (whylogs_container.whylabs.actor.profile_actor.profileactor method)": [[5, "whylogs_container.whylabs.actor.profile_actor.ProfileActor.process_batch"]], "process_close_message() (whylogs_container.whylabs.actor.profile_actor.profileactor method)": [[5, "whylogs_container.whylabs.actor.profile_actor.ProfileActor.process_close_message"]], "process_debug_message() (whylogs_container.whylabs.actor.profile_actor.profileactor method)": [[5, "whylogs_container.whylabs.actor.profile_actor.ProfileActor.process_debug_message"]], "process_log_dicts() (whylogs_container.whylabs.actor.profile_actor.profileactor method)": [[5, "whylogs_container.whylabs.actor.profile_actor.ProfileActor.process_log_dicts"]], "process_log_embeddings_dicts() (whylogs_container.whylabs.actor.profile_actor.profileactor method)": [[5, "whylogs_container.whylabs.actor.profile_actor.ProfileActor.process_log_embeddings_dicts"]], "process_log_embeddings_messages() (whylogs_container.whylabs.actor.profile_actor.profileactor method)": [[5, "whylogs_container.whylabs.actor.profile_actor.ProfileActor.process_log_embeddings_messages"]], "process_messages() (whylogs_container.whylabs.actor.actor.actor method)": [[5, "whylogs_container.whylabs.actor.actor.Actor.process_messages"]], "process_openai_message() (whylogs_container.whylabs.actor.profile_actor.profileactor method)": [[5, "whylogs_container.whylabs.actor.profile_actor.ProfileActor.process_openai_message"]], "process_publish_message() (whylogs_container.whylabs.actor.profile_actor.profileactor method)": [[5, "whylogs_container.whylabs.actor.profile_actor.ProfileActor.process_publish_message"]], "process_pubsub() (whylogs_container.whylabs.actor.profile_actor.profileactor method)": [[5, "whylogs_container.whylabs.actor.profile_actor.ProfileActor.process_pubsub"]], "process_pubsub_embedding() (whylogs_container.whylabs.actor.profile_actor.profileactor method)": [[5, "whylogs_container.whylabs.actor.profile_actor.ProfileActor.process_pubsub_embedding"]], "process_raw_log_dicts() (whylogs_container.whylabs.actor.profile_actor.profileactor method)": [[5, "whylogs_container.whylabs.actor.profile_actor.ProfileActor.process_raw_log_dicts"]], "prompt_id (whylogs_container.whylabs.actor.profile_actor_messages.openaimessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIMessage.prompt_id"]], "publish_time (whylogs_container.whylabs.actor.profile_actor_messages.pubsubmessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.PubSubMessage.publish_time"]], "reduce_embeddings_request() (in module whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.reduce_embeddings_request"]], "reduce_log_requests() (in module whylogs_container.whylabs.actor.profile_actor_messages)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.reduce_log_requests"]], "request (whylogs_container.whylabs.actor.profile_actor_messages.openaimessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIMessage.request"]], "request (whylogs_container.whylabs.actor.profile_actor_messages.rawlogembeddingsmessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawLogEmbeddingsMessage.request"]], "request (whylogs_container.whylabs.actor.profile_actor_messages.rawlogmessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawLogMessage.request"]], "request (whylogs_container.whylabs.actor.profile_actor_messages.rawpubsubembeddingmessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawPubSubEmbeddingMessage.request"]], "request (whylogs_container.whylabs.actor.profile_actor_messages.rawpubsubmessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawPubSubMessage.request"]], "request_time (whylogs_container.whylabs.actor.profile_actor_messages.openaimessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIMessage.request_time"]], "request_time (whylogs_container.whylabs.actor.profile_actor_messages.rawlogembeddingsmessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawLogEmbeddingsMessage.request_time"]], "request_time (whylogs_container.whylabs.actor.profile_actor_messages.rawlogmessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawLogMessage.request_time"]], "request_time (whylogs_container.whylabs.actor.profile_actor_messages.rawpubsubembeddingmessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawPubSubEmbeddingMessage.request_time"]], "request_time (whylogs_container.whylabs.actor.profile_actor_messages.rawpubsubmessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawPubSubMessage.request_time"]], "response (whylogs_container.whylabs.actor.profile_actor_messages.openaimessage attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIMessage.response"]], "role (whylogs_container.whylabs.actor.profile_actor_messages.openaipromptdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIPromptDict.role"]], "run() (whylogs_container.whylabs.actor.actor.actor method)": [[5, "whylogs_container.whylabs.actor.actor.Actor.run"]], "send() (whylogs_container.whylabs.actor.actor.actor method)": [[5, "whylogs_container.whylabs.actor.actor.Actor.send"]], "shutdown() (whylogs_container.whylabs.actor.actor.actor method)": [[5, "whylogs_container.whylabs.actor.actor.Actor.shutdown"]], "start_actor() (in module whylogs_container.whylabs.actor.actor)": [[5, "whylogs_container.whylabs.actor.actor.start_actor"]], "subscription (whylogs_container.whylabs.actor.profile_actor_messages.pubsubdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.PubSubDict.subscription"]], "subscription (whylogs_container.whylabs.actor.profile_actor_messages.pubsubembeddingdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.PubSubEmbeddingDict.subscription"]], "temperature (whylogs_container.whylabs.actor.profile_actor_messages.openairequestdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIRequestDict.temperature"]], "timestamp (whylogs_container.whylabs.actor.profile_actor_messages.logembeddingrequestdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.LogEmbeddingRequestDict.timestamp"]], "timestamp (whylogs_container.whylabs.actor.profile_actor_messages.logrequestdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.LogRequestDict.timestamp"]], "to_log_embeddings_request_dict() (whylogs_container.whylabs.actor.profile_actor_messages.rawlogembeddingsmessage method)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawLogEmbeddingsMessage.to_log_embeddings_request_dict"]], "to_log_request_dict() (whylogs_container.whylabs.actor.profile_actor_messages.openaimessage method)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIMessage.to_log_request_dict"]], "to_log_request_dict() (whylogs_container.whylabs.actor.profile_actor_messages.rawlogmessage method)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawLogMessage.to_log_request_dict"]], "to_openai_dict() (whylogs_container.whylabs.actor.profile_actor_messages.openaimessage method)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIMessage.to_openai_dict"]], "to_pubsub_embedding_message() (whylogs_container.whylabs.actor.profile_actor_messages.rawpubsubembeddingmessage method)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawPubSubEmbeddingMessage.to_pubsub_embedding_message"]], "to_pubsub_message() (whylogs_container.whylabs.actor.profile_actor_messages.rawpubsubmessage method)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.RawPubSubMessage.to_pubsub_message"]], "whylabs_dataset_id (whylogs_container.whylabs.actor.profile_actor_messages.openairequestdict attribute)": [[5, "whylogs_container.whylabs.actor.profile_actor_messages.OpenAIRequestDict.whylabs_dataset_id"]], "whylogs_container.whylabs.actor": [[5, "module-whylogs_container.whylabs.actor"]], "whylogs_container.whylabs.actor.actor": [[5, "module-whylogs_container.whylabs.actor.actor"]], "whylogs_container.whylabs.actor.preset_schema": [[5, "module-whylogs_container.whylabs.actor.preset_schema"]], "whylogs_container.whylabs.actor.profile_actor": [[5, "module-whylogs_container.whylabs.actor.profile_actor"]], "whylogs_container.whylabs.actor.profile_actor_messages": [[5, "module-whylogs_container.whylabs.actor.profile_actor_messages"]], "auth (class in whylogs_container.whylabs.container.auth)": [[6, "whylogs_container.whylabs.container.auth.Auth"]], "container_password (whylogs_container.whylabs.container.config.envvarnames attribute)": [[6, "whylogs_container.whylabs.container.config.EnvVarNames.CONTAINER_PASSWORD"]], "containerconfig (class in whylogs_container.whylabs.container.config)": [[6, "whylogs_container.whylabs.container.config.ContainerConfig"]], "default_whylabs_dataset_cadence (whylogs_container.whylabs.container.config.envvarnames attribute)": [[6, "whylogs_container.whylabs.container.config.EnvVarNames.DEFAULT_WHYLABS_DATASET_CADENCE"]], "default_whylabs_upload_cadence (whylogs_container.whylabs.container.config.envvarnames attribute)": [[6, "whylogs_container.whylabs.container.config.EnvVarNames.DEFAULT_WHYLABS_UPLOAD_CADENCE"]], "default_whylabs_upload_interval (whylogs_container.whylabs.container.config.envvarnames attribute)": [[6, "whylogs_container.whylabs.container.config.EnvVarNames.DEFAULT_WHYLABS_UPLOAD_INTERVAL"]], "disable_container_password (whylogs_container.whylabs.container.config.envvarnames attribute)": [[6, "whylogs_container.whylabs.container.config.EnvVarNames.DISABLE_CONTAINER_PASSWORD"]], "envvarnames (class in whylogs_container.whylabs.container.config)": [[6, "whylogs_container.whylabs.container.config.EnvVarNames"]], "fail_startup_without_config (whylogs_container.whylabs.container.config.envvarnames attribute)": [[6, "whylogs_container.whylabs.container.config.EnvVarNames.FAIL_STARTUP_WITHOUT_CONFIG"]], "llm_container (whylogs_container.whylabs.container.config.envvarnames attribute)": [[6, "whylogs_container.whylabs.container.config.EnvVarNames.LLM_CONTAINER"]], "logembeddingrequest (class in whylogs_container.whylabs.container.requests)": [[6, "whylogs_container.whylabs.container.requests.LogEmbeddingRequest"]], "logmultiple (class in whylogs_container.whylabs.container.requests)": [[6, "whylogs_container.whylabs.container.requests.LogMultiple"]], "logrequest (class in whylogs_container.whylabs.container.requests)": [[6, "whylogs_container.whylabs.container.requests.LogRequest"]], "max_request_batch_size (whylogs_container.whylabs.container.config.envvarnames attribute)": [[6, "whylogs_container.whylabs.container.config.EnvVarNames.MAX_REQUEST_BATCH_SIZE"]], "max_request_buffer_bytes (whylogs_container.whylabs.container.config.envvarnames attribute)": [[6, "whylogs_container.whylabs.container.config.EnvVarNames.MAX_REQUEST_BUFFER_BYTES"]], "openai_api_key (whylogs_container.whylabs.container.config.envvarnames attribute)": [[6, "whylogs_container.whylabs.container.config.EnvVarNames.OPENAI_API_KEY"]], "openai_organization (whylogs_container.whylabs.container.config.envvarnames attribute)": [[6, "whylogs_container.whylabs.container.config.EnvVarNames.OPENAI_ORGANIZATION"]], "openairequest (class in whylogs_container.whylabs.container.requests)": [[6, "whylogs_container.whylabs.container.requests.OpenAIRequest"]], "pubsubmessage (class in whylogs_container.whylabs.container.requests)": [[6, "whylogs_container.whylabs.container.requests.PubSubMessage"]], "pubsubrequest (class in whylogs_container.whylabs.container.requests)": [[6, "whylogs_container.whylabs.container.requests.PubSubRequest"]], "whylabs_api_key (whylogs_container.whylabs.container.config.envvarnames attribute)": [[6, "whylogs_container.whylabs.container.config.EnvVarNames.WHYLABS_API_KEY"]], "whylabs_org_id (whylogs_container.whylabs.container.config.envvarnames attribute)": [[6, "whylogs_container.whylabs.container.config.EnvVarNames.WHYLABS_ORG_ID"]], "api_key_auth() (whylogs_container.whylabs.container.auth.auth method)": [[6, "whylogs_container.whylabs.container.auth.Auth.api_key_auth"]], "assert_llm_endpoint() (whylogs_container.whylabs.container.config.containerconfig method)": [[6, "whylogs_container.whylabs.container.config.ContainerConfig.assert_llm_endpoint"]], "attributes (whylogs_container.whylabs.container.requests.pubsubmessage attribute)": [[6, "whylogs_container.whylabs.container.requests.PubSubMessage.attributes"]], "auth_disabled() (whylogs_container.whylabs.container.config.containerconfig method)": [[6, "whylogs_container.whylabs.container.config.ContainerConfig.auth_disabled"]], "columns (whylogs_container.whylabs.container.requests.logmultiple attribute)": [[6, "whylogs_container.whylabs.container.requests.LogMultiple.columns"]], "container_password (whylogs_container.whylabs.container.config.containerconfig attribute)": [[6, "whylogs_container.whylabs.container.config.ContainerConfig.container_password"]], "data (whylogs_container.whylabs.container.requests.logmultiple attribute)": [[6, "whylogs_container.whylabs.container.requests.LogMultiple.data"]], "data (whylogs_container.whylabs.container.requests.pubsubmessage attribute)": [[6, "whylogs_container.whylabs.container.requests.PubSubMessage.data"]], "datasetid (whylogs_container.whylabs.container.requests.logembeddingrequest attribute)": [[6, "whylogs_container.whylabs.container.requests.LogEmbeddingRequest.datasetId"]], "datasetid (whylogs_container.whylabs.container.requests.logrequest attribute)": [[6, "whylogs_container.whylabs.container.requests.LogRequest.datasetId"]], "default_dataset_cadence (whylogs_container.whylabs.container.config.containerconfig attribute)": [[6, "whylogs_container.whylabs.container.config.ContainerConfig.default_dataset_cadence"]], "default_openai_api_key (whylogs_container.whylabs.container.config.containerconfig attribute)": [[6, "whylogs_container.whylabs.container.config.ContainerConfig.default_openai_api_key"]], "default_openai_organization (whylogs_container.whylabs.container.config.containerconfig attribute)": [[6, "whylogs_container.whylabs.container.config.ContainerConfig.default_openai_organization"]], "default_whylabs_upload_cadence (whylogs_container.whylabs.container.config.containerconfig attribute)": [[6, "whylogs_container.whylabs.container.config.ContainerConfig.default_whylabs_upload_cadence"]], "default_whylabs_upload_interval (whylogs_container.whylabs.container.config.containerconfig attribute)": [[6, "whylogs_container.whylabs.container.config.ContainerConfig.default_whylabs_upload_interval"]], "disable_container_password (whylogs_container.whylabs.container.config.containerconfig attribute)": [[6, "whylogs_container.whylabs.container.config.ContainerConfig.disable_container_password"]], "embeddings (whylogs_container.whylabs.container.requests.logembeddingrequest attribute)": [[6, "whylogs_container.whylabs.container.requests.LogEmbeddingRequest.embeddings"]], "fail_startup_without_config (whylogs_container.whylabs.container.config.containerconfig attribute)": [[6, "whylogs_container.whylabs.container.config.ContainerConfig.fail_startup_without_config"]], "get_dataset_options() (in module whylogs_container.whylabs.container.config)": [[6, "whylogs_container.whylabs.container.config.get_dataset_options"]], "health() (in module whylogs_container.whylabs.container.routes)": [[6, "whylogs_container.whylabs.container.routes.health"]], "init_logging() (in module whylogs_container.whylabs.container.startup)": [[6, "whylogs_container.whylabs.container.startup.init_logging"]], "llm_container (whylogs_container.whylabs.container.config.containerconfig attribute)": [[6, "whylogs_container.whylabs.container.config.ContainerConfig.llm_container"]], "log() (in module whylogs_container.whylabs.container.routes)": [[6, "whylogs_container.whylabs.container.routes.log"]], "log_debug_info() (in module whylogs_container.whylabs.container.routes)": [[6, "whylogs_container.whylabs.container.routes.log_debug_info"]], "log_embeddings() (in module whylogs_container.whylabs.container.routes)": [[6, "whylogs_container.whylabs.container.routes.log_embeddings"]], "log_embeddings_json() (in module whylogs_container.whylabs.container.routes)": [[6, "whylogs_container.whylabs.container.routes.log_embeddings_json"]], "log_json() (in module whylogs_container.whylabs.container.routes)": [[6, "whylogs_container.whylabs.container.routes.log_json"]], "log_pubsub() (in module whylogs_container.whylabs.container.routes)": [[6, "whylogs_container.whylabs.container.routes.log_pubsub"]], "log_pubsub_embeddings() (in module whylogs_container.whylabs.container.routes)": [[6, "whylogs_container.whylabs.container.routes.log_pubsub_embeddings"]], "message (whylogs_container.whylabs.container.requests.pubsubrequest attribute)": [[6, "whylogs_container.whylabs.container.requests.PubSubRequest.message"]], "messageid (whylogs_container.whylabs.container.requests.pubsubmessage attribute)": [[6, "whylogs_container.whylabs.container.requests.PubSubMessage.messageId"]], "multiple (whylogs_container.whylabs.container.requests.logrequest attribute)": [[6, "whylogs_container.whylabs.container.requests.LogRequest.multiple"]], "openai_proxy() (in module whylogs_container.whylabs.container.routes)": [[6, "whylogs_container.whylabs.container.routes.openai_proxy"]], "openai_validation() (in module whylogs_container.whylabs.container.routes)": [[6, "whylogs_container.whylabs.container.routes.openai_validation"]], "prompt (whylogs_container.whylabs.container.requests.openairequest attribute)": [[6, "whylogs_container.whylabs.container.requests.OpenAIRequest.prompt"]], "publishtime (whylogs_container.whylabs.container.requests.pubsubmessage attribute)": [[6, "whylogs_container.whylabs.container.requests.PubSubMessage.publishTime"]], "publish_profiles() (in module whylogs_container.whylabs.container.routes)": [[6, "whylogs_container.whylabs.container.routes.publish_profiles"]], "role (whylogs_container.whylabs.container.requests.openairequest attribute)": [[6, "whylogs_container.whylabs.container.requests.OpenAIRequest.role"]], "shutdown() (in module whylogs_container.whylabs.container.routes)": [[6, "whylogs_container.whylabs.container.routes.shutdown"]], "subscription (whylogs_container.whylabs.container.requests.pubsubrequest attribute)": [[6, "whylogs_container.whylabs.container.requests.PubSubRequest.subscription"]], "temperature (whylogs_container.whylabs.container.requests.openairequest attribute)": [[6, "whylogs_container.whylabs.container.requests.OpenAIRequest.temperature"]], "test_indexing_into_toolkit() (in module whylogs_container.whylabs.container.config_test)": [[6, "whylogs_container.whylabs.container.config_test.test_indexing_into_toolkit"]], "timestamp (whylogs_container.whylabs.container.requests.logembeddingrequest attribute)": [[6, "whylogs_container.whylabs.container.requests.LogEmbeddingRequest.timestamp"]], "timestamp (whylogs_container.whylabs.container.requests.logrequest attribute)": [[6, "whylogs_container.whylabs.container.requests.LogRequest.timestamp"]], "update_pid() (in module whylogs_container.whylabs.container.startup)": [[6, "whylogs_container.whylabs.container.startup.update_pid"]], "whylabs_api_key (whylogs_container.whylabs.container.config.containerconfig attribute)": [[6, "whylogs_container.whylabs.container.config.ContainerConfig.whylabs_api_key"]], "whylabs_org_id (whylogs_container.whylabs.container.config.containerconfig attribute)": [[6, "whylogs_container.whylabs.container.config.ContainerConfig.whylabs_org_id"]], "whylogs_container.whylabs.container": [[6, "module-whylogs_container.whylabs.container"]], "whylogs_container.whylabs.container.auth": [[6, "module-whylogs_container.whylabs.container.auth"]], "whylogs_container.whylabs.container.config": [[6, "module-whylogs_container.whylabs.container.config"]], "whylogs_container.whylabs.container.config_test": [[6, "module-whylogs_container.whylabs.container.config_test"]], "whylogs_container.whylabs.container.requests": [[6, "module-whylogs_container.whylabs.container.requests"]], "whylogs_container.whylabs.container.routes": [[6, "module-whylogs_container.whylabs.container.routes"]], "whylogs_container.whylabs.container.startup": [[6, "module-whylogs_container.whylabs.container.startup"]], "basethresholdvalidatorbuilder (class in whylogs_container.whylabs.llm_validation.validators)": [[7, "whylogs_container.whylabs.llm_validation.validators.BaseThresholdValidatorBuilder"]], "configurationmetadata (class in whylogs_container.whylabs.llm_validation.metadata)": [[7, "whylogs_container.whylabs.llm_validation.metadata.ConfigurationMetadata"]], "failure (class in whylogs_container.whylabs.llm_validation.validate)": [[7, "whylogs_container.whylabs.llm_validation.validate.Failure"]], "inputoutputvalidatorbuilder (class in whylogs_container.whylabs.llm_validation.validators)": [[7, "whylogs_container.whylabs.llm_validation.validators.InputOutputValidatorBuilder"]], "regexvalidatorbuilder (class in whylogs_container.whylabs.llm_validation.validators)": [[7, "whylogs_container.whylabs.llm_validation.validators.RegexValidatorBuilder"]], "result (class in whylogs_container.whylabs.llm_validation.validate)": [[7, "whylogs_container.whylabs.llm_validation.validate.Result"]], "sentimentvalidatorbuilder (class in whylogs_container.whylabs.llm_validation.validators)": [[7, "whylogs_container.whylabs.llm_validation.validators.SentimentValidatorBuilder"]], "success (class in whylogs_container.whylabs.llm_validation.validate)": [[7, "whylogs_container.whylabs.llm_validation.validate.Success"]], "textstatvalidatorbuilder (class in whylogs_container.whylabs.llm_validation.validators)": [[7, "whylogs_container.whylabs.llm_validation.validators.TextStatValidatorBuilder"]], "themesvalidatorbuilder (class in whylogs_container.whylabs.llm_validation.validators)": [[7, "whylogs_container.whylabs.llm_validation.validators.ThemesValidatorBuilder"]], "toxicityvalidatorbuilder (class in whylogs_container.whylabs.llm_validation.validators)": [[7, "whylogs_container.whylabs.llm_validation.validators.ToxicityValidatorBuilder"]], "validationerror": [[7, "whylogs_container.whylabs.llm_validation.signals.ValidationError"]], "validationmetadata (class in whylogs_container.whylabs.llm_validation.metadata)": [[7, "whylogs_container.whylabs.llm_validation.metadata.ValidationMetadata"]], "validatorbuilder (class in whylogs_container.whylabs.llm_validation.validators)": [[7, "whylogs_container.whylabs.llm_validation.validators.ValidatorBuilder"]], "build() (whylogs_container.whylabs.llm_validation.validators.inputoutputvalidatorbuilder method)": [[7, "whylogs_container.whylabs.llm_validation.validators.InputOutputValidatorBuilder.build"]], "build() (whylogs_container.whylabs.llm_validation.validators.regexvalidatorbuilder method)": [[7, "whylogs_container.whylabs.llm_validation.validators.RegexValidatorBuilder.build"]], "build() (whylogs_container.whylabs.llm_validation.validators.sentimentvalidatorbuilder method)": [[7, "whylogs_container.whylabs.llm_validation.validators.SentimentValidatorBuilder.build"]], "build() (whylogs_container.whylabs.llm_validation.validators.textstatvalidatorbuilder method)": [[7, "whylogs_container.whylabs.llm_validation.validators.TextStatValidatorBuilder.build"]], "build() (whylogs_container.whylabs.llm_validation.validators.themesvalidatorbuilder method)": [[7, "whylogs_container.whylabs.llm_validation.validators.ThemesValidatorBuilder.build"]], "build() (whylogs_container.whylabs.llm_validation.validators.toxicityvalidatorbuilder method)": [[7, "whylogs_container.whylabs.llm_validation.validators.ToxicityValidatorBuilder.build"]], "build() (whylogs_container.whylabs.llm_validation.validators.validatorbuilder method)": [[7, "whylogs_container.whylabs.llm_validation.validators.ValidatorBuilder.build"]], "build_actions() (in module whylogs_container.whylabs.llm_validation.config)": [[7, "whylogs_container.whylabs.llm_validation.config.build_actions"]], "build_langkit_validator() (in module whylogs_container.whylabs.llm_validation.config)": [[7, "whylogs_container.whylabs.llm_validation.config.build_langkit_validator"]], "build_langkit_validators_dictionary() (in module whylogs_container.whylabs.llm_validation.config)": [[7, "whylogs_container.whylabs.llm_validation.config.build_langkit_validators_dictionary"]], "build_patterns_validator() (in module whylogs_container.whylabs.llm_validation.schema_builder)": [[7, "whylogs_container.whylabs.llm_validation.schema_builder.build_patterns_validator"]], "build_threshold_validator() (in module whylogs_container.whylabs.llm_validation.schema_builder)": [[7, "whylogs_container.whylabs.llm_validation.schema_builder.build_threshold_validator"]], "build_threshold_validator() (whylogs_container.whylabs.llm_validation.validators.basethresholdvalidatorbuilder method)": [[7, "whylogs_container.whylabs.llm_validation.validators.BaseThresholdValidatorBuilder.build_threshold_validator"]], "config_error (whylogs_container.whylabs.llm_validation.metadata.configurationmetadata attribute)": [[7, "whylogs_container.whylabs.llm_validation.metadata.ConfigurationMetadata.config_error"]], "failed_metric (whylogs_container.whylabs.llm_validation.metadata.validationmetadata attribute)": [[7, "whylogs_container.whylabs.llm_validation.metadata.ValidationMetadata.failed_metric"]], "get_validators_udf_schema() (in module whylogs_container.whylabs.llm_validation.schema_builder)": [[7, "whylogs_container.whylabs.llm_validation.schema_builder.get_validators_udf_schema"]], "is_valid (whylogs_container.whylabs.llm_validation.metadata.validationmetadata attribute)": [[7, "whylogs_container.whylabs.llm_validation.metadata.ValidationMetadata.is_valid"]], "make_openai_request() (in module whylogs_container.whylabs.llm_validation.validation_workflow)": [[7, "whylogs_container.whylabs.llm_validation.validation_workflow.make_openai_request"]], "parse_yaml_to_dict() (in module whylogs_container.whylabs.llm_validation.config)": [[7, "whylogs_container.whylabs.llm_validation.config.parse_yaml_to_dict"]], "prompt_id (whylogs_container.whylabs.llm_validation.metadata.validationmetadata attribute)": [[7, "whylogs_container.whylabs.llm_validation.metadata.ValidationMetadata.prompt_id"]], "timestamp (whylogs_container.whylabs.llm_validation.metadata.configurationmetadata attribute)": [[7, "whylogs_container.whylabs.llm_validation.metadata.ConfigurationMetadata.timestamp"]], "timestamp (whylogs_container.whylabs.llm_validation.metadata.validationmetadata attribute)": [[7, "whylogs_container.whylabs.llm_validation.metadata.ValidationMetadata.timestamp"]], "validate_input() (in module whylogs_container.whylabs.llm_validation.validate)": [[7, "whylogs_container.whylabs.llm_validation.validate.validate_input"]], "validate_yaml() (in module whylogs_container.whylabs.llm_validation.config)": [[7, "whylogs_container.whylabs.llm_validation.config.validate_yaml"]], "validation_workflow() (in module whylogs_container.whylabs.llm_validation.validation_workflow)": [[7, "whylogs_container.whylabs.llm_validation.validation_workflow.validation_workflow"]], "validator_name (whylogs_container.whylabs.llm_validation.metadata.validationmetadata attribute)": [[7, "whylogs_container.whylabs.llm_validation.metadata.ValidationMetadata.validator_name"]], "value (whylogs_container.whylabs.llm_validation.metadata.validationmetadata attribute)": [[7, "whylogs_container.whylabs.llm_validation.metadata.ValidationMetadata.value"]], "whylogs_container.whylabs.llm_validation": [[7, "module-whylogs_container.whylabs.llm_validation"]], "whylogs_container.whylabs.llm_validation.config": [[7, "module-whylogs_container.whylabs.llm_validation.config"]], "whylogs_container.whylabs.llm_validation.metadata": [[7, "module-whylogs_container.whylabs.llm_validation.metadata"]], "whylogs_container.whylabs.llm_validation.schema_builder": [[7, "module-whylogs_container.whylabs.llm_validation.schema_builder"]], "whylogs_container.whylabs.llm_validation.signals": [[7, "module-whylogs_container.whylabs.llm_validation.signals"]], "whylogs_container.whylabs.llm_validation.validate": [[7, "module-whylogs_container.whylabs.llm_validation.validate"]], "whylogs_container.whylabs.llm_validation.validation_workflow": [[7, "module-whylogs_container.whylabs.llm_validation.validation_workflow"]], "whylogs_container.whylabs.llm_validation.validators": [[7, "module-whylogs_container.whylabs.llm_validation.validators"]]}}) \ No newline at end of file diff --git a/whylogs-container-python.html b/whylogs-container-python.html index 61bd004..9d5fc0a 100644 --- a/whylogs-container-python.html +++ b/whylogs-container-python.html @@ -487,7 +487,7 @@ -

      FastAPI (0.1.0)

      Download OpenAPI specification:Download

      Log

      Responses

      Response samples

      Content type
      application/json
      null

      Log Embeddings

      Responses

      Response samples

      Content type
      application/json
      null

      Log Pubsub

      Responses

      Response samples

      Content type
      application/json
      null

      Log Pubsub Embeddings

      Responses

      Response samples

      Content type
      application/json
      null

      Log Docs

      This endpoint is a bit silly. I can't find an easy way of manually controlling endpoint docs in the generated swagger -and I can't declare /log's body as LogRequest because that has the side effect of also performing serde automatically, -which performs far too poorly to keep in the server process. This endpoint is just for swagger docs on the body type -for convenience, but it shouldn't actually be used.

      + " fill="currentColor">

      FastAPI (0.1.0)

      Download OpenAPI specification:Download

      Log

      Profile tabular data. The Swagger UI isn't able to call this currently.

      +

      Sample curl request:

      +
      curl -X 'POST'     -H "X-API-Key: <password>"     -H "Content-Type: application/json"     'http://localhost:8000/log'     --data-raw '{
      +    "datasetId": "model-62",
      +    "multiple": {
      +        "columns": [ "age", "workclass", "fnlwgt", "education" ],
      +        "data": [
      +            [ 25, "Private", 226802, "11th" ]
      +        ]
      +    }
      +}'
      +

      Sample Python request:

      +
      import requests
      +
      +# Define your API key
      +api_key = "<password>"
      +
      +# API endpoint
      +url = 'http://localhost:8000/log'
      +
      +# Sample data
      +data = {
      +    "datasetId": "model-62",
      +    "multiple": {
      +        "columns": ["age", "workclass", "fnlwgt", "education"],
      +        "data": [
      +            [25, "Private", 226802, "11th"]
      +        ]
      +    }
      +}
      +
      +# Make the POST request
      +headers = {"X-API-Key": api_key}
      +response = requests.post(url, json=data, headers=headers)
      +

      Responses

      Response samples

      Content type
      application/json
      null

      Log Json

      Use this endpoint for manually testing and experimenting. It shouldn't be used in production +because it has a steep performance penalty compared to the normal /log endpoint.

      Request Body schema: application/json
      dataset_id
      string (Dataset Id)
      timestamp
      integer (Timestamp)
      required
      object (LogMultiple)

      Responses

      Request samples

      Content type
      application/json
      {
      • "dataset_id": "string",
      • "timestamp": 0,
      • "multiple": {
        }
      }

      Response samples

      Content type
      application/json
      null

      Openai Proxy

      query Parameters
      whylabs_dataset_id
      string (Whylabs Dataset Id)

      Responses

      Request samples

      Content type
      application/json
      {
      • "dataset_id": "string",
      • "timestamp": 0,
      • "multiple": {
        }
      }

      Response samples

      Content type
      application/json
      null

      Log Embeddings

      This endpoint requires a custom configuration to set up before hand. See https://docs.whylabs.ai/docs/integrations-whylogs-container/ +for setting up embeddings support.

      +

      Log embeddings data. The Swagger UI isn't able to call this currently.

      +

      Sample curl request:

      +
      curl -X 'POST'     -H "X-API-Key: <password>"     -H "Content-Type: application/json"     'http://localhost:8000/log-embeddings'     --data-raw '{
      +    "datasetId": "model-62",
      +    "timestamp": 1634235000,
      +    "embeddings": {
      +        "embeddings": [[0.12, 0.45, 0.33, 0.92]]
      +    }
      +}'
      +

      Sample Python request:

      +
      import requests
      +
      +# Define your API key
      +api_key = "<password>"
      +
      +# API endpoint
      +url = 'http://localhost:8000/log-embeddings'
      +
      +# Sample data
      +data = {
      +    "datasetId": "model-62",
      +    "timestamp": 1634235000,  # an example timestamp
      +    "embeddings": {
      +        "embeddings": [[0.12, 0.45, 0.33, 0.92]]
      +    }
      +}
      +
      +# Make the POST request
      +headers = {"X-API-Key": api_key, "Content-Type": "application/json"}
      +response = requests.post(url, json=data, headers=headers)
      +

      Responses

      Response samples

      Content type
      application/json
      null

      Log Embeddings Json

      Use this endpoint for manually testing and experimenting. It shouldn't be used in production +because it has a steep performance penalty compared to the normal /log-embeddings endpoint.

      +
      Request Body schema: application/json
      dataset_id
      string (Dataset Id)
      timestamp
      required
      integer (Timestamp)
      required
      object (Embeddings)

      Responses

      Request samples

      Content type
      application/json
      {
      • "dataset_id": "string",
      • "timestamp": 0,
      • "embeddings": {
        }
      }

      Response samples

      Content type
      application/json
      null

      Log Pubsub

      Responses

      Response samples

      Content type
      application/json
      null

      Log Pubsub Embeddings

      Responses

      Response samples

      Content type
      application/json
      null

      Openai Proxy

      query Parameters
      whylabs_dataset_id
      string (Whylabs Dataset Id)

      Responses

      Response samples

      Content type
      application/json
      null

      Openai Validation

      query Parameters
      whylabs_dataset_id
      required
      string (Whylabs Dataset Id)
      prompt_id
      string (Prompt Id)

      Responses

      Response samples

      Content type
      application/json
      null

      Openai Validation

      query Parameters
      whylabs_dataset_id
      required
      string (Whylabs Dataset Id)
      prompt_id
      string (Prompt Id)

      Responses

      Response samples

      Content type
      application/json
      null

      Publish Profiles

      Responses

      Response samples

      Content type
      application/json
      null

      Health

      Responses

      Response samples

      Content type
      application/json
      null

      Log Debug Info

      Responses

      Response samples

      Content type
      application/json
      null
      +

      Response samples

      Content type
      application/json
      null

      Publish Profiles

      Responses

      Response samples

      Content type
      application/json
      null

      Health

      Responses

      Response samples

      Content type
      application/json
      null

      Log Debug Info

      Responses

      Response samples

      Content type
      application/json
      null