From 12b72420011d7347acc21b597c3aec5376e1d36b Mon Sep 17 00:00:00 2001 From: Pavel Tisnovsky Date: Wed, 14 May 2025 08:20:52 +0200 Subject: [PATCH 1/2] Configuration diagram --- docs/config.png | Bin 0 -> 12720 bytes docs/config.puml | 14 ++++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 docs/config.png create mode 100644 docs/config.puml diff --git a/docs/config.png b/docs/config.png new file mode 100644 index 0000000000000000000000000000000000000000..f75ced7b477e09c8988ab13111831344ba5a6460 GIT binary patch literal 12720 zcmdsebyQW~*0x9p$Ptw05Efmcz!53w?hujgJakH^z@bG2=|&o)q*EG>bi<*$yX#y0 ze)rz@z3(0G`2PC-`5eRHW^eY|Yt1#+oX>ooX`rIK1O%4?_tvdj5GhGfU1rs*|--}LbtJb_YS;k0x~>K_{HiYi0{ zXOACb#F=YXjj_IGB-*X##UWy5IID1|OL$>wvVmSj0EH;09WVH0-ok?Jy^B!oC!xYx zZ_p4)HJmXr=#tKVa7C=A)B8q~m8!~K(rsACh!@E{7Tew`x@D6Vj!`;yVL|>btuA`*-YjEmGKEE2c#O_8 z4X&-BbLZQE9fRfrwVv~<6XUI0>>W~~LaMGhn+Z4`kT=t9E%Lu4eIz%2i1j}$ZGI4{ z@z{*j+Q;I1q<_xQed}1!#MIK++X!B%}`i%H5l@ul$Ye(ml2>j}Dxw&%*4qNO20 zpT~=xf@^4nh{&g0=GP8$*=wGk%r5C04zxAh8KN0Rz``VDrEA>wGqf;-h|qML=hqb8 zR15UwtAurL)9B1h z=g70;>e<-ZKFjs?!zC6EqYiDR@j97Bve!qHypk|8TiF;ZSyYunc66*x)xM8;ZY&+i z66ncg)_bcly3%JJHgb z7NlDW(?6tnjTa(o;o8x{5<U_*fIg(wiK` z^49+H%!x5B{7*Co`sTNKKF>2wCiXmbrXK@yMVGPjTrfl^g#hQGSWzW?w`8S5@L@i~ zQL?J{lW9pwIl1q5YlAz{nj8;ANZ7PaI++WS8NGLY-{GTzaKK$gmz9L z=*73L7XY_HRoHb#FqXq78}Fz5fx_Sc6ZS_NV=wF%B#HLAdAE0PEkBF+s4}bPxz75L z7Dj>ndSo|U=UG%#BqSu1HI<{5tHG_&RW1xsBC-f>L&kDhjxurL?Q(pNj6CX~PbxGn zBRxR($0IMcUzC=!t2rBZyjA|%U$FwX1^4Dew8uT=kVH4?vt=li)qheZKD1<&-ad+8pvlTl4P_LD7V$-Jz$qGyN)-!M&)2*>7*Mbx4r(kq*cc;>s`tLWTI~GJYd43n z=d#+LE}!r!OUJ~74%u4w8P}vcK9C~y)PS}BYiNFBb_2rYIJ*=+d6r*3Wq@oSF3_!S z4Ta9f6dEHFdNT0B-gs-Cc-?i!wo=od<$_W8a|;znS#4c$<^B$Z^|!9d^8FYWoZlNkS zXoDI*gqp&~e=$K+U#2qYpPvHHVr|AC{qpCK2=sr{rkq|BH)wdtYB z0Og^StZbfE@0XJ`MO zw?Z4${RAt%<7wA<$gfJBTK7PB0E~5TbLO|t1}!Q}qbT)si82Hi3y-WJ@rA(?MeAT{ z?xVvl*mQuO+2=Eq%e1GfW-3+T@rtdfSd`(_#i_FVhn!Rbye_xShL7k)cgt9)W0%Y{ z^3<7NN88h3{dJc|@9NgRN>Fn+roAmONrleosJ7)YqHH$_aPJpX_OWFoa89{0)NpjS z%q*n16CQX6!)o3!fXVGWH}2eV8Q`#B`2wYj3(nK2rAQ!<{Pb#HCTl#BA96r5lPs{3 zot8hCrDWLXi^Ed%{&?%_*RN;gB^+yqySuYZ23>X%-kYT(qs2M;*{BNJ+1oi!KO-%N z^E%XjyG@PUUct;pDN?Z$CYAzA=r(D;uM5^o61}}R`%BVP=!D2uw=N`H?Pt) zo!Q8+IjAk4B#m;c20IDUuHwJ|4>*olz- zJ#}8^Ei-arM($%;-WNJ1&Ct9^EAM-+)yQ&-1tD79FZ{+!LtA8~AU2~IOS`XG}k zT@OydfP$cQoyX~i54R5P*bd!YKv?X1o*${@Ixpw@^{2}ivRBxf_9PBb)>`9PTwYxC zcB@X@HfnuMIFUMO_`z-q#iLGhMa_0Lyz-||{vLeUtap_3d;=e5Kipn-ef6G_y;W@V z$@4VpBI~zG2nezn!rA%d3&9|XVdlxnNk9O08Lk8o5s`20O!AkhY8RXTxu%M8ev199 zgUXYv>_9WAiUzVM*k`jn+uR*Zh{butfty30D91$2qB#|>^PtO9Ei9Le{pB8HwtU(+ zo=l&vTkR~TR(JQc=Fu~}d-vpJ zWDEm00^%ezx^e=|{jeWF|1wR8`3XWx`mqiX|y6AGArHNu!r{d693o!vA{K% zfgVbHAI68@`V3^nw~G(y=_PcuDR+yZu_9p$3kyrEabdbIrM8={-|n`wnQy0;TMXeU z;63o!!JBgN`M3+x8`Zd2Ih1Q@=pc-ww%l|G!7kwCJw0w5Hznh_&c10lZpa$SfvsRb z4C8F$B_>-)&&X(PZAJL|-@(9`5sdu$=|I@yP0+*m-@*WOray#XH6aYijzM-VP*^*J&++saT^f znkE=I^VG=LxFg#awvz>2+AV6)Kojc(h$t;JRXTz}DMOZ=h9>DV6|dLT>9Rc?Rbt>F zD*`)9yP7+W?9XkJHIA^(zw${}TL}4+f+z6}Y4GT_wxbZJ#AnKE#gxV`k3=+P!W@>n z`L8eb)pFIj%#HARn$IFpVA`hu&8bfJz`{Dc)`wZG?(TO$Mr@Igroz$KC#_sn%*aSq zD4(mXg$0w1v$7T(r!O?rW!|?WYIJQeN>|*R5BKhHkl5nFf}VsyM9_~PPe~%)%@ws# z&!_0VO!*w$Yc*E5w^USD`pN%XJ>gXc#Hu|~iB{EQrr~2j-5Jwe8Ve0tMtJ2CHn}9c z0`U$`hG-e4B&{$X$N-V0DU_9st-Gfutn?XU#up41pEexRRdRCjih}vuX+MW@)ZXuR z!MG$;YuL1_cC7o_d!Saj%Lr3CPwEgwxo^7ZpV1T2El823DBp5A21>Dknqa3cjzuzags( z%ta)K@F&kJEG~;djbCQ>-{UAS0T6Y#riS_;^PQ>XOsrj{#6*sfg=L)ZZX*!PUuLN(Fj6rpHg7Y}a3V@$tP)&5?fm-#+13=O&L5O@En*@TF+M5%j*Q2@Asy z4rci{!Kc+Ia;pmyUB#{Rc8GGb{O6^Wm;8I}PkQ)|Dc@)3)ad8gbfpI@E@gK2LhcO< z+i;`as7d*vY{^F^pWy_D2Kx%_cZAb(wT04bewfUGuv60yGRVJd_(E|k!yPLTN5FqN zkaXp%cDOz=Qjd&@kN>k>@R%&C@Yt5)sF$*qh0pm}V@Fq)F}dpZH!WwwxYU0y=QZuA z!W{#G?e%q}7gN^{X-fMhV=b4ar!3rT53sO)|NcFc`$j^9oWlUavKm1e)->6>6-wx} z+E0t8CKJULnt~mx+LOqCN;ft(meW&)H=Sva+){2nfCYO`vcN}2hh>OWr>^FvmS>Yc zGh5fC0Cwpl`%zM42;Uhd~2wAIrkNSHeWXezBMkXfIf?itktg6p+ z+OkxyRamy>KXww9B}<|n1{mD>w+QIk4jIXCui~**V~&l<{YiCKpO21_{$SaR=Je^xAFJt!$DIYs{Z#d+nV zYVMWM326dD$-NsQ8W27GqZV5xO@v*J!p6fRS{D8VpNy5`?x%!E#wTUli(H4kj>^op z2r^H#s^_%+&cGnHf_N#YvWU2Xe%zA18Nt(RoN4ymoXPn1jX=X}G z5r${_vx?7JO+|qaj4CQ*hlDt``F#4+d+*}nVs3sOU^#6?*ul06hgMu!PIhKs|1Y)F zPyvkV;PU})KLmAl3 zLeQ*Mv4mW2{WDqpm9-cV@Bjz((|C=$@+wx9s$cMk|5h7d( zg5(tCv#$%m)EYNUbTa{55d&&^I%)Fd7?XKojy~p(cr&9VK~?5Y;vcFH3-z09mCg@V zn`n${;5CgoB}5jSc5eii)kUxQyC28exkxD`_Y;@lytm3#Q;_fyqMYao z=B|VXecoXu3`Ud(bQ~r|xzvTV}YRD)O`THTo-em~6LlmciW5K&X3=L0yr_nM`Gl#S2yXx4_SF zV>f__NKpjK&C-OTa$Z|%jYiLNW`C&gGr^igUh|7=%cp(sj*tTOkiSx7op66xe$`?;TE{QqEN;{YoDpFzzEnog+2Qk%~9VLP-WT6`Jzt(yJBVmO!8n+?I-4y-jdFd%wR?Vjz?YO)> zUudkme4fQ8v&6oh+BJ^&kQ}A~H^ti)aobZ|VweY%D%Xnn)bX?%3H428pTbQ8Q(_%* zy_2MW^e#g!{rDG0pCN+R{@Og^v@DeE9hmpC;jXT`n5+I4`HHl#K0#=$U)+9Z!fy}x zV%TKG<`jNwRb^!y*_C3xORg$|MjHgS4CVDXjW@EX(zguS^0%nH+XY+tPmD^`5E>E^ z(t)u%{d;c_d3OepM=V5S2}sgs2-HJt!~eX%orch(GsXG{bK6X@WK#TgdBbpi$kt8c zloGx@hJ=Zv?3AMKOGU)~d=7}K;IOdmfy^*6)-F%n=}_U*Z!d6T_}`bsTlmgy@NCZs zQ_3UuCA3!--XHzI17sYHpqGbyD z1aU$9GbN+^`125xY)0JKe53i+P{28J;E^UXq7+-gMPn)}D}zbdTkF1k`_`Sv{~j=U zcJr;Xv=p59TB+k&VFGyB0^Au==KUXey$9u~12VAPJ4Orj(Q`Nf>jg?605tbYOkHD| z2ZGb)Q&M}Avb8FUJ4C0^@7%+{z~DPZInW_yGXqM`3(e?gm>$q?0j}0j!@@&J>$2^{ApJ1wV-H6XJ0`F^8jwXb^p% zNoV9+0wGSiqv!nmRNAIxERW%ADYzozQdA0|Q6{c4n6K76@SC5m(BcXCoUiL%cdB1* z+Ia8p?h45d8Tb1RocBr42w~Y(po)!UR=RX^D!eYwK&qyI!SO^6zHXFRjm>RuhsCBb zP_v1s(d=s09}d6Ee^+jT^b1~xNBb5N8NMif76wd6=l7J3ZcaaxnKl2LVr5DYeaAXN zB}99Bw8*Dcl%{oLB#PBCsEbxrU-A&XBJ+Z8=Qfp7-5rAm2YU-0;r&b~ce^9iC@DgD z_O;<;A@sVGrGRX|%%tc~{!N;9=JqilROLtA3A`}#eqTXn(H+;{`Dm7QmU>jGYMyyp z;&mx3Dqs;O~F<8UWn?w#w6_eMVn>SLwDbQgR&_km} zoas$aMgZj1`au5bRm9S$ShjNd!@wK?br%sNdjzeIf3b>Ki7IiUc)Dwu0cU|AFXi8> z9hB=da==j|Q|7oiNN4|8q}f_>RIK5482=GjIJsB~hC2A#E`O?w&!3ACnHja$uRjP} zao)*UhK6GLhfR^5$75W|hP-jxac(*rZGh}6M&fNDfOT^SuHbYCW-`$rs$2K}@86T` zt#NZu#j6!M(C@`~`!NUkbnCt+(-m9ePwnb2Jk!HA-F2SlfKNxH>FG=MnN++-92R|q z;w_83wOBKY#AIqF|1&SO6dWFx+xSJgh(k`A`2c;y@WH_Yt`Xh4a-K0{WPA8P<+9K?>UX z57aShN~b+e*K!MVl+*ff2PT0i$6^z{An=}gqmM<;= z$6LU_8h@j(adF2>Oz~yzNAdSuU7jn%zkHOrbZ5SQmD6x$S-3bA5sD z-SN5;#F!HqxdE^1OBel1Dm>WW{(3?ERGnvBy~kR1raCw!d2b^3d%Uj*b4Q<73K0p= z!SmjhWB`5~2n0X1D)*u}3`fTi5NLNC4F4Jw;8%2Vu`}FZS9rMDs@eTO@6e!bf*fA# zA=yE2I66L-kiVF&bXW$$n^u*hxuBrn;A~o$fbw?-Kz?LpWd#v4M>4;GpX|(fW5YcF z$pk!r-~E80$La}Kp#EGdpbdcx#>JvlVVfcw^Bi!#2A0*%n`iqyg4ahAHUMs!CA5Xn zNVu!3M-~*Yzjr5tXPKTKZH7{C2`g#TxgRnmqHCB<)$n-3vpR7g5IHF+AM=5zE3af5&&MP~RsS&i>a* z#4Ri=YTXa3T(+++_Iu`I8eXv)bOYBnaBYaZ-cP!22t`J*=W=smG;IO??M=2aEe{X5 zcAnstQ&VBQcC|BL&*WGZ@FnsshH@|mtS;fimHMozaF4wXdNTAKG?@E^d{xSLuP-2E z{r&t>ehFg0Q~^7-0C?XEkf0vmp42akySuvsdaDJ7vjL6?c)O4d7m5eiD$30%DVQpB zP3X?XQdgXnTl<$sI5;>OD}&hsAdM6yGu^3W!G2~pC#us<^y7Qko z@!|9e2w&f1Q@<`imY(^~ATrD$P;Q{YXB5&*yaogBZ-*p%e=1|keDyILdIh%I&CP8` zTJ{3Sq^HqSKjPO%3ijLNcRzr`zXT^DS)uSl$<%vYF34UV0^e_Z0Vn9b8OFZp75MQJ zs_-7zWe_6J!P?s)>;KOm`Q2zBs0MF0%vne~BzNb0yZ%P-1JDdOLcfF%Js*ChJ~5DF z0TvVCgN^?(FLB*9aO0Y_Ylp~u@KObKyG^N=0_-(dviE8MajajPot*q|2`eBdC^hl> z$Rk({{7que*KvHBEHg=Y7{naPTy9;@~ zcWz#4B?h8rDjD#7AdqJ4B3vH9SkTVR`L?jADGmf~2F|;^{Z`4Q^YIs``p3gOi{U(} zTE<{tFzkao3T`V&@Pne&=Hin2Hf*c1kfyWADR&(GCF{?n-9g#2sC22ad0T z;3X%=;^E5YO%dvQpdq5+T7p+R%!6OQEt9uUed`se6ai>1F(F7nPJEgfL28;G zSK>JGe*L-(=ej5)f<%dRLbQDHmvMLvxjt^CJ```V!foF~*8mc=C&kzBQLI|1*~*O&F!5sRvdQvLK+?N?AX{QtXSY@gpZ*cd%4aGR94fZj zx#tQdt8&jSMC4aKX8Nn%)5iuMcnW*gYBroYmb39bk&I@^N;c*)YNgHKlL(E~=r1K? zbbF=*Uy0uOgG97b@Lii9MgD|epk+di^GBN#98|ArVg!VU=4&svVb;{j!V*><@zD^& zu(Cd-9G9OzfpiGiIU4T^B^{;LAR&;_&`f74ByDVL^az}9fU3#<^W)abgl~V12UI5O zbF&FB3wjvh7q%Y`{@{*6^xk;?By;5ETOR$@h0)Bper|Rmhq(eVRpcgb`Q5IWdptZm zp!{J6rA5a#S|xele!Y3=eDd}nIxDA3%f-L61Nx(`_ob7hWIO0$S&;SX0^7R-==i;; zt?dX@AtV)=ot@2oz1U;mpb-D{6PEVx^3+iuuh>?}=kKtuUK6NfI0+|u!6XG z2sZN(KPM+A3rikY*h*q2aYvyUTc$(|Y-od$9Gyf9oJ1`O#4RkDiG6wlE3vyCf{H=c>2s?!v~) zZNk3AJoCuZ{Eh!n2%L((P*AlN@YV@gZ7niK`a=fq=l$4a!SZ^rU!&C;lii;T^ z{8#hh($csJrl5m`H1z%7Ed@RgSdOCh7r!lFyZ(#lWmv1?wK=Xzm;K%_;d{@aY-YcHb1 z&GPBJ0|{z3(M54k%vS(0erM;m9+q|EKO~v zUzwpf(c~@vXUXzlABw=Z;V2ED;9dR3#9Bc?Q0#bvuuoc^EE z_3QcI{~=vh_C05MK)cib+S!?#no5Chw|RHIO~3s+^P4i8>26iGr5MxRjlZ??S#_}ER zt&_ZGgs(LIwbfq)NI_*gzaTcyOd@Du@pv4fN!+>^`XrVQ#Z;s2GcG{uIi!=r}}Z(Xusw@$vs$$G@?@70fBqx>We zAH}{r&ejwy^SGYcR*}=<=Bkmy@L-s|-sveQm8gJKxAO2U{Ac<8Ugse{#6p$|4;E_E`26-fbGFg|?eu01b zT@l3s!n(IQh3BAQAWh6DSSmPU&2z?kzQ0YdKlQD${WsE0ZH&9YUdf4%R?9+9#}^^1YZOg;%}9E2OA(` zdYBbD|Gz!7Z)*DA-uwHJ(4si-Nl+J5=;_*GgZ+(Esl@<;tHO7rdipm^*&q8^J5y6O z{?!V|eiP=Pm5*+2*{5Yaf`yM|`T%CsQPM zv)wmA0`9~Q%ImzL$KL0^dw6J!j5Tn;Ir#mz(i>c*f6+B?!#x?AB=R_j|3R$L($Rs` zNS+$BssqY$NO!gV1I4!o{*`t+GeSoX;Hr5VeI5?{6_SNizh4%D2CFjKc+=Nh*hQBv zCLv)MV;&wJ{^WBD%z9iEuyUIdi!>VtPyff;KnlOOy!=};-BtN}jvlW`KE@!XIoedgZMC ze_`b>P-?`#9{J=?+PX#Nk=}sR|906K3cNN6bT+pH5wq9q2n!3}zRuI+A{^>4FVZ{S znq;rP*aOXIr(r`fdJf#{YRxfki}OHrZ$tgusJ-($bNU08+kYJzUjzc-=Xba<<^W*+ z<@quDo1dsaLVC_a*+IoSr}DvF?d@5brE7p7P_zQ9^_0iHT%E+{`g-p$YW`*-dee^7 z+o1NeL{)H5)4eORx-WB6j#)pmO9QPk7sdk_a(3sW!_z6r0|o#^sR2YF7EDs)=&D>~ z(31P6pg4*$`XTKr9vKp+n+C#`dV68u6@;+X&s0d=)|Qr(+@{FG7fNrhJThCJo9Ydk z-2ub4AOQ*}vZ8x=^O~fT)GT{G4p@sUiXbzv3Gz#LNLH1x-U9bdTw#!WAKAx(`m0#u z7xdF_i(`Lw58oIa(_Vy&P_47Te*WTgUqCny758pTkTZIs48~;~){J(}k zG`NwGkt`iwBd8BLK#A4!cU=A7-$MYSgPKsj?t^HbEvUmlzXNil;fhEBcGCeA5kb`7 z^a9ZAaFAv9xC#YZ1|U0t+F{WsoUu*~h~YHv2W`6xCAusOWq|RE`%j_gg1wOWKF3|x UVM_2{CvHiJ$&3CJ*8B8-0FMhMjsO4v literal 0 HcmV?d00001 diff --git a/docs/config.puml b/docs/config.puml new file mode 100644 index 00000000..d500685f --- /dev/null +++ b/docs/config.puml @@ -0,0 +1,14 @@ +@startuml classes +set namespaceSeparator none +class "Configuration" as src.models.config.Configuration { + llama_stack + name : str +} +class "LLamaStackConfiguration" as src.models.config.LLamaStackConfiguration { + api_key : Optional[str] + url : Optional[str] + use_as_library_client : Optional[bool] + check_llama_stack_model() -> Self +} +src.models.config.LLamaStackConfiguration --* src.models.config.Configuration : llama_stack +@enduml From 245336b21cb6678eff3c72fd03b0764b54f57522 Mon Sep 17 00:00:00 2001 From: Pavel Tisnovsky Date: Wed, 14 May 2025 08:21:09 +0200 Subject: [PATCH 2/2] Make target to render configuration diagram --- Makefile | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Makefile b/Makefile index a9f4c893..073b5888 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,6 @@ +PATH_TO_PLANTUML := ~/bin + + run: ## Run the service locally python src/lightspeed-stack.py @@ -14,4 +17,13 @@ format: ## Format the code into unified format requirements.txt: pyproject.toml pdm.lock ## Generate requirements.txt file containing hashes for all non-devel packages pdm export --prod --format requirements --output requirements.txt --no-extras --without evaluation +docs/config.puml: ## Generate PlantUML class diagram for configuration + pyreverse src/models/config.py --output puml --output-directory=docs/ + mv docs/classes.puml docs/config.puml + +docs/config.png: docs/config.puml ## Generate an image with configuration graph + pushd docs && \ + java -jar ${PATH_TO_PLANTUML}/plantuml.jar --theme rose config.puml && \ + mv classes.png config.png && \ + popd