From f4fccaffb11d3007687cd8c9f9b69d184da8dd19 Mon Sep 17 00:00:00 2001 From: Davide Cuttini Date: Mon, 25 May 2026 12:41:04 +0000 Subject: [PATCH 1/5] [docs] Add UomiRouter inference provider MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Companion to huggingface/huggingface.js#2193 and huggingface/huggingface_hub#4256. Adds the UomiRouter provider page, sidebar entry, partners-table row, and PROVIDERS_URLS constant. Logos are placeholder PNGs in this repo; real SVG/PNG light+dark assets will be uploaded to the documentation-images HF dataset before merge. Capabilities: Chat completion (LLM) ✅, Chat completion (VLM) ✅ (Gemma 4 VL behind the same /v1/chat/completions endpoint). Endpoint: https://gateway.uomi.ai (OpenAI Chat Completions spec; streaming, tool calling, structured output, vision). --- assets/logos/uomirouter-dark.png | Bin 0 -> 12711 bytes assets/logos/uomirouter-light.png | Bin 0 -> 9359 bytes docs/inference-providers/_toctree.yml | 2 + docs/inference-providers/index.md | 1 + .../providers/uomirouter.md | 66 ++++++++++++++++++ .../inference-providers/scripts/generate.ts | 1 + .../templates/providers/uomirouter.handlebars | 14 ++++ 7 files changed, 84 insertions(+) create mode 100644 assets/logos/uomirouter-dark.png create mode 100644 assets/logos/uomirouter-light.png create mode 100644 docs/inference-providers/providers/uomirouter.md create mode 100644 scripts/inference-providers/templates/providers/uomirouter.handlebars diff --git a/assets/logos/uomirouter-dark.png b/assets/logos/uomirouter-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..70caa10154fd3177403f702b2f86fb5f12e1c770 GIT binary patch literal 12711 zcmeIYRa9GV^esw-mO_C-p%k~4;_g}~?k=T3ad&rG+*{lN#WlD?pt!pR3sRgAG-%)k ze&?Ps?!$dNPv^fMlFbg^9&3Ml*_?BQD=SK2q7$K`prByNNQHB1!dO~W0R_d21_dP`2nFRDc`0BA1;v#W1!eC$3JQM; z3JQTkMze|_@`o2ja#G^=kH;(RizVchmo7325-;~q3DIdNte2^YQBYV*WyD3*Jre5k+C$6!i3ea*TRbaCF5vd%sKNys*X#=c=+!m}emJjzX>K{t0r& z!S8s-Ra7*u?5I;e-0B|%SCC~hiBdpZi1V(Ei*JrXRPX;BTYaa z>|KlePyRct#Kc2B#lyiK{PWG@$>##)#|=P1>BmDCd%T2_Dkh5dct)W{i}v4A6LeI{ z$4de7*%bfX_!r&(-0c6BJxiFJeT8)WeC7&S%!%NI8%u)mr*iAJZPr7oJ#k@}yBFf?{d?h+kwK$4iv`D#@`VO#Qr%Koxrn`RHh^=(c}1*_$`g z%dw;KVJ^qA4#h&U~TXF?)uw{67G_mO& z$&dkGy0Qg2jRYPEL|#hN+uBezZ64==>8~(Ji3OH{G(1-aphfts;b<5b`jh*^5@I==VMFSU~qksds9s=|J zk0Xft@aIiZfBZ*w0CmI|k;(fqG|eSkdoVu>@^`t%*z3n-PV<&w@y;S)pTldaMwD-) zemdB);to%@0T7^|d>;Mpzv{1N($Dd{MvCj)q9{9On~>}OkvxQW0EyM^(pvqM;@mPq zou&@xj12MqSC7H`j?m5AC~hr@rdwDxs@jzqxdt4lC;0^B1VnZ?63@wlZ-}l`Vj`2# zFs2Xt=ubuTWv$*$%}-VEFF5$yLcvQQcf-64@$n2Y$zGwg)uABQwE*ohH^_V)!J>lg!i+sl!UF%eVmX&qRrx)0_GiQsV z$hy>sYuq(HuJ%@@M}xS4IYCt|jX1G{N?H><-6GyHejrkiL(1Gop<|Z`az88~ zoORco=&aCmUc|437#$BPy`4#qE~odn+lz7*_4&mN?b5a@vt2B5W#m-Lu=FI^(8y)E zA{rvR<-1q9H&ID8f_B51(%d|3{H9m+BkQ*U1|gcIAJpkn*K*z@2CJeg<%M4xxMbs9 z7j%?HF7>ozeI(n$?wM;IPq6n|RdET+X+H}agA4oAgAT|HWADTM>TNC0R7?v{W)!s+ zSz%_IRdMv}N4VC-U~yQQnR)wCpcdeJ`(_BhJ=Oyczg-ZYmh+yDnlq3H{o!?3YuI48 z!tZ?E5$#;F0wK_*^6hUiU8*)b6pEO~57z^{Ny905RTWERmfq1AVYl7mOt(a>%X21z zci<y^*=1ScOafHmWD#g3^FbK|s?sOdY#zE*B=k0P;Ep!Q9*g$sWAnb3p zLfjQ>AmY%Yw?;e3IO~D{U^5QRY7<*Qzv!_dFY% zjWRl{#iytCCg=pga6uqO0^#L)n=S*njQHNe)NDFUOstkmP?uT4*YX>3z64xJJaYa< z7hD5`ee3A6tosVowBG0Z$Gl?)$)V|^3+YjMO;=|0;`vS4RGCanJ9%%Yj==pDCeM{A zw+-kd^2^qjBq{IOD^ZbhgGI}kda!+!+tz*QQikl8;A}k@oXN_`=Dd1J!`Uab_)u58 z)P%~_C;4iM`s#N}VtNC81DSLTmdY7V?bz#oPn`=vlg5MRj`l+)tR81qzH>?W5g&0j z#CqouGaU&p31u9E{#3FrxK`F%VwOr57R;#sz>uRw^}p;FZ^ zF4=Iu1=QNValBb~#KYySkQ#;MR!-qlFM_NUGBa#VLM-NmnV!)rlhkLs5iXi+HF9vFa8Hh|iXkqgYPr?|kh+x04a`r{Ys7tb z_%xfaOQ(*CM-SjA9EQEuRIE{E*3Pw_Oax1#%6m?Clf>OpPdMS3Y^l|Q2h%jNw*Iz1 zHZ0QFbmZ$>uc#uw;^gRRnK*=TV@@+_vMg}vKag)9@j+3lS+Ri3Agvj@@lwy+cpLp( zs2$has+EetkN>O^3(nBn^wLG zAZN;NIwJ`A(Hi-qZEko)3goXN&>lVLzfqjOoS=7J$|2UItP7!(lQDR`Avt1eWubYg zG9f%23ddFX`H_wIZn~sixg}eR!M4Cn1Jn-~ObJdb@F;B^P9M(9*e(>&-H~2XSuYC1 zt$9KC;w9Zp0(XllYkE>r>$=e!OdQV0sK6EysPDXsMR)2dT1!|c>EY;>`Sv6GyhdYH&d#g?gA!)wL62W2in{RAWT=mh@&gPkhI#nSxDVw*>%dDSVK@@6}i&NyijOyw1gfL9;ks(%oLp%qxK5^zfoe`}9>&iCtU1^^0&?0V{`<^fLB^+EOFZZ87cVjnW3LBvhjxlR~HBMJh+~nLtBXJ8r-EOLzjbRhNh26W}gN%aSR9$tjvH0R& zKo}&$aKPxXr#+&Gj{I%#M;EQqHBV zyKDfc+Ol8YHhMyitGzCMkQvjb3+8KB)sOB&A~@X-B$xf}JikbF5p3v6&9Y4=!fESW z^}!oz^>78}b$Uc5G*#dsE9P#MQR%kL;#6ayQuc@0o3~?bVYV-j1M@3vLHJy=6wv_^ z!r$gtID)czKSgqTRHV8hhN9koe~s|E`)gdV(d2)wS;!Ay%YuSUj<`4aRMO(KWQoPQ zN`{4y8v>9_WK`m&9UvLQtB`Ze|DCba&VLKYsQ{#f50e?NOYH~JT^a_rh&YL8vzVV5 zqhx6wJ0!jk3uJnx_-<0bBeCT0!`9wEXvXh0wrxafRqh&wrENQqb$_mC46o9&Y_D1 z0`()$KTPWXEX!H8aY@|1Dl0P@F|6O|a|+)1XjS|RSQC)(%WX=JwA~!!XZ-3yRiY>i z$T3J}>D)Ge|E`@o56qveq$02OLG46|!|!Tr7Y|NdH6l&2l6(aD(}6F+n-*phED+@W2VcPsy* z958Ot%(^^#u?6wszH>{bOP)>Xfc!2ntJ49e4y^RYJsX&KhKB(DX1ZnzP>P?OVz#Xt zNua~Sc5tI4&^1qR{;}+RmE!A_c zQsc^eGE-_Y|8=VQ1VMj6@P#q9zyN?Fn?0G0G28zRp>2l?stjShPxUbLqYI4Wnhli; zm9)7NEJ>^0i}elx7tc_SKF?Ci3V%<)E=ej3o5a>r|FQkL&+TZ!#@|}xIRqX`&c7?a{>9DO;geeklY*|4tHs-`kW;r|ZO2$U@@#&G*1#ACY5(g@1KfAtoV9Wre6Prgy`^0p|1vmS`7yq%Rq&1av4H ze*qzWN_?U%AuBSbbGsdHI>kJ_R%z)XGIJ(8!N3b@dWA}fr%i3G6vNhCDP*v-o)>?5 z+wdx`IW-5_N*ZON<2i=e&C=W`7?>2Xh5awuB6rPo|*;V@l*j z7cz}WT@PBe73meo_}g5ytq%$|xag-)H2z*3To%#O=mpLT^?h;OH0aa7zPjwM3&6s~ zL2yEEOxQdvPP$8bf7$Z~&vEJ?ST7hF#<2dqjH%#rNNw)PEylh+M(l`Od;y5R&A+!$ z?Y{p7_Vw#h@Jq#nA_3V1%}|9t&=wln`GsE$T|Ee_QtH%&--+Hpgx}iJF7!~0Q+3EUwn8weVmb?y&@=DNFXv)izr8bOU75@zF?*r{kz z+hDOk{s5YxNtYMUEiFBR(D|}@z1kHq<$J74$4JlUU|85MG_ZKFzt=BnoR6<=trkmYZHCn5EqXO7rwiS3yY%*3R~APJ*n(k1}`0mZnPxSL~;YUubiR`4F8bV;FAda zHkdA1`X1~lQCDC0Gg$wBxB2twc3+YE9@ntnNKy{rNaDD3zQd6clPs2krg)UM+{J9R zJh|XwGbumb=5T3D%?al^{J=0Nl)*;p)9wWuV1GG@A1(Cr3Yl?<@H*sxB^coTue0gRZ?!LvvA_4k3kY8kH@|2z|jOck8zWEwDMP z4CtH))~9O#tuHhTa$1`tE}RxqZ}Sd<#)w*GR9~f?j~zBv9b)%@v~JY0COC#T=#aSd z!$(D$;aKKdH=~d3ISqyW31&U%PgveIKDYjcibw%|$29btIDY_4QkoM5LDW#ks1DBtjT_H?+GuD&U>~NI5PPr&}F$aE^9rjC+wvJXA zcUSro6gt5DWeDVRc}of+{=u{7P>(+s-|D>Cx+yVFfeC#NIEEg6YX;({pTQ-lM!&Rw));jJ_(j=fg3lc>DgPO2j81c6h^)<8_LTZL8=5|x9cs&ewXJhz~0z%=nZKS4hqG9moAY@BJL`%oR>X1tQ9 z+Uksc(H~o3A8li7?0%+v_I(y!&A4b6-qqtir#@XPIC`2%*TXBNsRQsKzY+UQ4?L{= zF!~lIf-FherWziO6CF12rsqj{yGl44*Rd+0EbK}QrEcEtjJCwda)nYk{TFfb>oU&580+L4t1Gs&TIsj-KB=?x{+jp)WhX>~E&(U98YRx7tYGJtC>(9FP8YguuO7n`e_%ct{x(Yx13~1^otMAAb z7Sbsf84^xeHp~Cj$h(m1#m7jYSqkjWqG+fQr8{o=f>Pq(6#>}2lle}x2Xkgv#8-3j zeseY@`V%skT)UpwzP5s|BmVMejcVeg}i9m09d=_*RE0WfDu*VCX4yVRAMba5Ls+eHs2 z9UcvyeLWmRitSBR?DiX@C|2y712Zu7I!=kAkdFAN8V`)>`Ghe8O-6JV!(BMiTtz|m zbh|g^JwY|=F5PPk5kq)(8=L{J%Ia?DbT*iXVcqinqO+B$0ZQjTTSKW~2`QH|Qkys7ikDCiezNgj6Y z`jxuzSa3agV5`#Tz1WG^q6jj9$^6FVUjmGb)t@6!xRsH-c;|CxoxxuCg-(YOvZZ%A z{8xddxsvlib7DAMKJ#B{&6pK2-q+6mP|$(c7o z{&>a@#J6foc#Hg7cCt&|bUZ-Vc!pB4yq~z~d)7N2Ag5=ZT6V%3mAW#$W1$ z;DPR%=(TMp_cLc}4|Dh|_vGhKR;A0K51eMTk5nJhkO#`q#0@y?cKtVF1#`yNwe0;6 zWBdeRk{vz(^?IgR8Qm0L!56}ug!NTmyFK@zB{tT4!@hw`J$|$ZKYG)fqVW6tlmh7j z5!>YtSLkSPokAV8{D{Cn&6_z9Yhgyee&Ko@Pi(0hs%HoMu5}n+AtuKbn?=YkY!fGy#I`3t8XlV|Wx|j6Uex+kDL9PZ4qvKi*@%A^qshd6)VLs0t%D9>x8WuOv){8 z9r-;lqE5PySKnWu8fG3nlCr4vY=AZf9eu_ufhz)Xjp|nIAK>N6)$eM{VC*i-_oeda z`MmOYIvLO4yQPAzDSr>?n`>;iU7pas&jVfdYGOg{=j^8BT}% z7~5o~mgkyX^~*bNE8uzE^ED5gCmQ!&0r+Ld$a)IOh}5OjZA? z4h+%m@;d#e_f({XVTpl6vzD`|IwH06Huz>(@>NzR#tvjp>Zr!^s+QXf5dkX&2$G_ z^Z4Ik_(c{I?+fFTEd?{BlQR6TPIbNsRo{fuLYjMLUwsx0#OW05DB|JXB3j072c_tC z)0+i~e68hrc{FutG7;e&%}uv%Fgbjgvb8v5x3p%zeNf|{(SA{1WB zDW#X+XeT^k|AA}c_Ce^g@bTH~#$Kz^^g)xkdQ>4Q{NAS%Hip(;wS+hJ*M0^-DUvYX0HusbBDc4(z>Enq2E0$G|oDxJnpcj?MWY8-(%%smS#H~I=~ z%T^0!G9+ilUtN>DHS3y)+5Z%b zr2!HOdoj_J(2RCBpIjsA#S}w>nEUUwvM-lUO#4a;JRY!-_$N&^SThaT7M4ym_iAq| z!)WVi=;W?E*84w5EsnX;+n&4zyOditq8ZQnQ@y=#5rW~=T9b`Mo}W*NE!H*@1yy6q z!k3kx)d`-#A=|qV{zcR7)dZFBi&7#Y(XQ3IR!1uuZfr7M ziwZ}U(xo!w3+F88P3m*x{c3`z!^xfL%JXG|x*@gW(?994@}5pn-Ze9p^9fiz~OlHOV1ZM zDrsvJ#U#EX(GDAQwfixt*Q_D3Kr?*j9e|8X?+2hUWk{bZ33F9TLC%X(3lyg}dXBbf z?9otO!{1vm%SGuQH-dKhs&9(tp6Sy#@Mv!;BN+l0L&++Qk0lWrOyQ@#$2x(p10RSx zYBS^u5lv1KPHJlqMAqIz?`|QuUz6j%#M<$#ooY}I{%d`ivaD zg)rZQ_cIkEM~1y?%Vy_1Y4Y`>Xz1*CL7rhQOP#xHq0FbrV9C3?ZY90w6Ut#3uCCE(p~ zaUJ*48^bH+pG*LOCGO?jl~4bG;b1baE%RNfoq-ko_BPqjS(6Q0h>Gr!;sU|L}4bt*;Z#}ftXNUF8o=GCsp0ymt zSO%Kk+Ag>)dHQTj9Y+#->pN4r_W_Ft(qP1E)k8eL`JX&6ND6Ib>{a!j^vK=*rQnyZL54HFXV4~gC%)4F zQcf#dsuzm)vV8kM;3rU}T17R1%p+`<-Ym%cjD4;{Tx*}^_sCJDXlYY#x2ry9unTV> zLLzZHx7eljHgB_7>WKz=6ZKnosAJCW$3~fvDECD_KN3H0lMuH-^owP@yrB8VT#NW# zxD7;`$zgJx*25Ik!Eb;6wji+_fI_Qy7A@1WznKxAxVt!7DM2;p_8^ulTpw~k)4%c* z#y{y4&dAY>t*VR5L-I!r?gQHg{g20iCg0!H_??>x1?zh+^eW6KE&Dl*xDTqlYzKqC zPVALiuN&SSg(ktMo1}~XCMj-OIaHYHX4`(h(4Uc?$(LgD`dc0SzZei^h`YqDxPG^p zF$zlR@7`Cr*TbM}`IJjLGQw0)ILz6p|C{l@5NbKxgt`1X$`+jQSkq-B2J$>zaV=td zHSA%-eNd+n3D~QR{90*4?q?>_IFV$9<4Fb!<(5>XdaQEA9zz6h*39 zIhr=$<3S#G^f+w1y+5QMg(rv$`lomp51!wGcutG<&jpjRS8&Z87$(Sm z9<8w9;OYyv^BSj~ED`y=Vk~`$mIib7egpchS#Q#^^y1|zQ-o{Jd30ftZ}Fa&_bzgv zf>e$wxm9(6f@p8ahI2#^$-P0HfKJ_o!VLKA*C)#iR+rA52pa69PD8~g9F~Yfd8TJR8wt##D!lsRW>T;<9aF?6p^S?oL`9VYdvCy;tk>l0 z_Q#0AQw7~JfBQ-OalXIAS9)3aW5fo+&`cLMOO|KN-v0!#> zjpdHgmcl*oyt)#;??=r)f?M14apTJNW`2c+S&d$M;_1P1iQ!+Tj$W<<49qWnFI&U! zvsbJMzOc(2gE+2T$i2hK06YwK;BdBKUHoH}X%|VzjRbe@~_Z1JbzL$!p z@B?}Mt^T4*TqFsXYkTNMo z)KgwuZ6LlJe0_)FLp1wl%hFjh22hYj53E3{0*o^D!PLFM;`6~GS()pDx{d}cmZh25 zBh4ZzBD49v@8yhbm%ZemfI8Q5qtOyC5t#bsdZ><(Yd!sCbb#q z>uzdpHLf>z#HFrwv!|u^5nhAM^`lhVd0I@60v9Hu?IZq^9$%wM1*`y{KNQ1LdGXaR z2r!+hoZDP)uZ<6@fE?8c>gX{L;mXA3%>nnS;)rivf!-T`6P?iAcNN(MmKo+qug$cq zCHAYtcC_{myZ2}fQ7$9>qu*wlwZV1Z#UEpa%~I7kgZ-U zHUq`Q+hepRzJYC!EkCI`)CMqAc)(KYn_{#R{Y-1{_^^KT<2G3kM5mi&j|YfwPy5Ys zkd=xi#f4(>3cb^36*&=MyHu~gq1$JXqg1=Xa&j;`w4HNC2}_!&7WLB`Tuh8_t8^9# z9nw&W)r!K7vG$a8rplLfl8YI@y*&-OOr>t$Z;}EHwGJE%crNf$2mBl++6bB? z3jrCt*0HMIL32e06x&*9$IQ%3K8#ei&b@0W-#5{>04WKG`7UYlnE;TD(5h^Z!QoB3 z7yNZ)*QzE+#Fk>=diH^ti6#Uaq8JA(V^ZHw^^o@zFmxxP0p}vNg3GsW!yIK1svj^#m#Y#xSd2hAxUEzTuvalHI zCbnn$no*!G@K+po-W-ewFWj)6>hluV?SK12@kKNR;t~FJ(ypnoxpuI}|7)EsT-Wbm z^oX6l0!Sae=vhtxu@2BHEO!$PMEo4IUIKzNSzGdeGoLiDOD(pKXNn3~4pheoW1y?H zttpTEvBh$ZtQtr?6UsS5&E>49$9t)KJU;7=@j2$?gg5&+V!p5kDmW)MvA-YnPKz`7 z(MOo7SLzNQyXbQw2z{?z-!)C7RO!hvxDs37fu_JhKP@dQ798R;0$J(Z5k=lHSTgck z!I!2=)NBJwfm3ByOuibZrdO>xBn4bPuD_XOD?DC|zACfUY8lvZB7@^&@rq-sVb!_1 zDgQD|p74=hFr$d0iBiTk*y43Aurk|E1PG)GyvTdW#K}|=Kkm`Ys`u82Tta1b^q*m9 zOHC74DjCL9?y#T%or5H{Lx{6HQeq2^>)WJssDZSy)`fk}yXYIjutOGOW_KNUT`PRB%0RmjttLt-g&1g)doKP&j^$ zg_JXJ=*|(te;ZoEY}H7-JXu{xvD;#=7cY^Un46=pFPKQTC4w=U;I|98 z4~dhLmLQHx+EZ_~qV_dNQQP;OvH8O~j+|!_5Z%zsy~Q<@8F)>QU&M&JH6MCi#JQ*D zvbXW$qi58ak=NcCPF?}(h`)>gOYU;^xi8hS&8-YUHkr zrx5KwOtcxa8=SZaHQWUwINq8+lBLeA?OU@fOM3!L_Q=t{?zuMP)LGhtL;$ncf2S*V z<(GJaK{?~<%7T&HDyzXlgXezVWn9e)&X-H|USE#AsBA}8zyr9Y5pAzv$AP3>D)j6J z9xc=x-fAw(Hp&((S3Y*NZ0mZ;=r8G|+~$MSk^TOZyIiX?8`xnz@eBoJx&3GikXvUI z{4(q@vm@8mi=^*HA+xqmlg48aiB#H-a;+M$QZoqJGvY%_aQ9N4RRYYL5;Q#Rq}#*v zAD6EtQW=@Ajo69$j;_c6zvgv65WR#-Eae~v-xAj40G9`!o2d|Av*ldz>Q3kKlrIGq z9!D6tc%~sN2NyP5YLb_&lWX*tK`$Ps8e2~jCtpk`=LH*URh62RBPz~H)vt*LO|RqI znVEbUqZ5LAoRY3IYNG z8akl}NUs8+mlM7@=ggd$d;i~=d-5ai-YfHFul=_5yw6&%AL?pcp=G57fk0Of@cRZJ z(0Mb;b@jFLl<(Ad7G{dL=%T8l3IbIm(jD1dqTF*izzuXjpkO`_=xHPfbU+z;x&Q(N zh=D*$k3b;#w;&LccP3t6k@CZ3do7Lor~iIv%y!2pBUJtfod;A)msn`|IL8U}ls|!B z5%*P%f<{-zpB(87OrQSURd(cnsL#EMdoaiS2V#i1Y>0i>gaM2+;YlLb1?zXyMP=1< zC9c-Pjc%~qzJmFO1;eeDMLu?r^NkP*Q_iXC*&ZpM=Tuq~9yAZhsT!JCuNk!IB2_?` zZ&IEQ`Vx4)0(W)+;*z1J%pU~$ZFo`bOl}CA=RT8rH=kWQlc6#9sL!PG1Fnl_GUxWc zW_hZ2o%$T*_DkXas{cP`I->(KQxNDH&Ns*LDjZ5WW_6Y;3txEzTz4sWYsPsU1bRge z`%m97bH~y3mBf<)7kcG|dLh3j#GQ9W?%GBC{ik+*(NN*fk5jM*Ox9Kg#F&yMdRXof z=r-RCVN2STZ5}6hCzn82Y8Q`_Tei9Zu2(cQsm@m!ato)gor|h;C)QvDb;=$Cigk0b z7RZl48NSG=hi?da`6-k~TXoARh#xrlX|6)0>vo$TX-@N7}FEneDkjT&idJK;8B6k&50y+2Ct4(~A@}hh%*aJg92Ej9xS1&OYRaukZ1p zFQiDPG!goX-Rcwz)aSVb5y4BY_ST#r5GIk5YBc3Pp2m363f@|V>a$=#%`6?MVk@==2WqZ_=(Jav)EOC#>E-54zf0VVX;|{KKsh-l?QmPKl4s zjGyX9-J;dvxf-E$D5o)Qq-sl`;^G#A8;=LLt^-T268?}_-jJZx`IZ|Cj8$#I1@R4$ zXu;#MbRf7~HpS?0As$A1B$Ty<|C+oq>!*2e*qNrf7}b}59>?^e0&7G!z|XjR;aC(& z03YV9uVZwxPP!4uoe$$St)6ag_h;_d-yE%JP)8vSN|!XUtLuNxV;cX~YL4!H_tYEB z2`dM%H7B28pDDq7r>|18(}%wfQ1gh<6r3nbLgPX{;DKVvW!9o30k-8A3d@cJTi!JL zsm8g?qmYK0`W<-$r&QW9BI9v6c00bV8%sZlg6AqUHo!!*DCu@OC&U|HtfIt>Z@EqU z3|4sl)y(w#f9J3F)aERLwEC_1|CqfA9im$#&RRseiAO0^c$AD|N_S_Zshui0F;jw! z?+hwoEVjKI)X)%lcLuA+nwOz^jQ>?Nj(Q344Y`f_n-BETeSDuYP0akd5;)-qKm!|G zff&P*0(@qGu?j|N`X!Sh(zq_)?j&l<18+clVHv`@*eHrm`x!4u>_Tl+ z)f^>>lDh^zf6J*D51n=S1OM3{bnFtq(}10Cp;n?<3HhUe=-Z0l0`{-C1QT}-Wi%Gd zVs`5-h{C2dl0@q|MMogCoffuGB_b>zNXvHDWm0+s3%klXjhIZ@lem>5k>6|&8A!u^ zld#r*^X|%}-ys4&1f5%M~BK z?1glvIUE7=g&53C&t4$@f#kKsJs<3>V+tV(_qkmJxOz=9QB5k_1)7eCgJYiTS_I6>g%D%j;pd^LPgyx2hSe5y}|Rl zzEr`y{sXzzT&&=zBk%`QUwpcX&`V~Ae5Dww)JT3gHr3ygmbCR3U{Iy7iSQN)-Ebww<&85@s&AX zZ1_OChg<-aW;W&H>R#VNv3`FlA>`quz$ei?FHOQma1D1mkhJkvlA&-LkJp;NVMK^%8c=@AVy=q86S;kPp=7+5D zjo*#6-4}?tfx8;3erR?UO&9-g{n_j+D6MoMIF|j;lley0@oLSQg%DS~rV9UqD){>u z*X$MyhxxBTY_`h52WZ;C>s`j7s7pC;e26FZ>2{Y#G<%ABOnZnWI^`Pm6r^@&sdh8q zJURz9n*u%;;(w38yyM0%KKpq?^Kb8jI6=gVA^I!XK74Gq z0njb9khe|miaG7ctB$-!ZTnHkYTWks+`a1B4+)V^jwg43!t{U`lFd$cjmj>-9jL;z zH7r>TpY&U94)F3fy*Da36K!U?w6e(&YudoJwRNGZF>pS{IzV##3tV_oM}ZL>ca2Yk zfLa^R@S=rNg-DbHS z-N(mHd#II~{tcDM!qv)8#$46$n$y7{%lGxt#oQgoY`~O>&cB>syFYr5>pttQe|=B( zc3(FkZ^ImwMqXIC;-oP(mf!^_p)@`PRXMlNidL_&+dCcoL}zc8)eRt!X@idF{)4iR z+c&9^?e9Adl|6G>eDuRSSC<~l9eWdy-<0GyWr*)cr=GyC2@;Go+_@5+9gcj1UiyJ_ zw6c|su-w+ZX>v~oY^w0sh7}U|>s#A4yedVSQm(b?dVRvZ>MX_TA_`;C>0yBcG|tAx z#vsAH{w6CY>2$*e!KsY@Mn~SMw+`$I@7%f?a1}0DBgj3WUdQ%a_F%pnCRqCk07_p} zAx00sCt^~pB`2{cGBdUK+~{9v(u8d34lDI*E;yqkepq;^ZKfFxT81( z>G=o`4Os4rRBh4a+IMB!R zt713?B{8*=b#nYlA-{8x0ry!&cy;RjyH^ov(!B z>Y$6tsZN8Pl)!3f%y9&sOU4}aULKveNmu*|kXdpBWQ^r6<+Io(>;lT;gy7tlg)J^# za$1~0lUPjf$V|eJF_k1fcu>JXh(rP+e33&xH_M=5+PsjemBJBU>g_;*YosRCAR7=0d|x z7xU%mS6(D#$$S=?p+{JT+lnGv<60xu;!G!X!u~}KR0-s`p92~SjA0XlFk^ zqdwDBKfu`Z@h^$cjsvd65ZQ!oM$Txm3`;#<_+-;CXcqhI)4&uOeWN zlW{G!6K(GPp$4KXNUd%%pTEPa$ji_S7UY=DI-9`9yW_Se`%%ygw#9vDG+R;KSm{lC z#j(5|QMGldj}xZ6YTn0cX|h^wxZl(ckYmC1@FVwzu<`vzC4#;ctQ((dT6o93U9e(Zucboh59`?N zfT%4CEBm290GYn!?RtvioCIk(QJ3n99pl(1##h|Ig~Lq!w1o7}!&s z56x{kcTL1<5+BaH9gMHS@Fj;Y=riOL?Ak;?V3oD?5v4T!4K8!*SjshF)7if_nyzTSeft=UbOja@MXyE$6Clq}cT9+FN%|^pDOjqdeCZ{7 zdD_PN-}{x)z1&3_r{TIdbh3Kt{Z--Vet{-J3^1}~LX}T}IFV2Khy06qioO@!s8GJc z$$jm%PK9CX3dt3x_^GB4O&ce;@-bWK!UdfLFo!8)fnU9i{oNG>oTL06Fx6XbND`DWm+(F>s2(I*+}l{u;Z z_7I(9^X#2{8bj|E;P3am=|fV%tx)_cKqHkbPV7{gyqr%}tGpO0{FUxkLaPavpit>; z_A{XCzr81_t4Rn5eC%Aw6P?9uUT+=%osH=CMLHISk2QG^^SxKQYdo{VH}okFvnX^!9Qa0 zov(sfzr2@#8#dyaTJ4a@1vXwhWX&}T7Xf1*GMQfMli0CF2eu3SM&*-8}+mS^C zzEQ^m+Mc|;)t@MC^I`M{9@8&6=DR{LD_$%xp|s!P|_42*Tv%$-!Ru=4elxBGG(0yE)lIJ)urSV^Fz$eTbX>KsB4)_p#95);A$9^a0& z>V1a*6Oi%2uwoBYsq56}f+JVi+vR@>s@>!j1Q%|vL{_t7{W`|`nFzN+JX_~fiyvmZ zmuE_API0ne49W2E6{?|o9^LCnTBT)MZ)=M0Elut}u&udZFuB$e*Z;R>?fUVkYr8!u zAq&iXhY5RCqwlv z18PMb2?`eu?SmYIe2YJ|kkt436nahl4~=z~b`C#D(!0I9fBp0BRfOn|#VLeW_|1_p z3FO(cxKHXEU^lcBt-z=&#so4w@$z{)EBNB(ZpYvDhKT!RClTAn<95hJs)F#}2P+p9 zHQcdGNKcj7$Uez82A)G~+DvVtQ);NyzKtwbwl2xIppDM)-Y3LNr@q_UW)ydmQ2+ex zU6sa|O;0WHn{TuJt@RjH2X$tqs&bXHj+L&g>XgY$ zc`=0My6$jiEs#rEJl}iwz+i>gfAj_wufJR?XIQlg*Nh^fgN2plZi^4DzB3UzZ=d_B zx(CHGvWO0tbae-mC2gd0K_drcge;ZDVGr(Lr?4;kS7T9kYFFPDar)cL{StN;o57IW zcq-nqjh!kR3Wi*gmGr!(5~LPGmwL5#`N(ee=gP4@TbIh-T6n5Up2kvdRLQJ%sjY^> zDAfuvXZmrSIKqIj&;ta}d4O8VEScWxMNHd^i*uh8>f z>9myN43z)EU7Pia?$X>X16P_Wre3U}*3(`5{bOyqeZ#XCqr7Dvimdo=&3eqpXcF`2 zV~<2bqE|44m!oChJyfpn$SZgReUI~j;fvfJ)Uyp8EY6K%_&!S!u^ej~+HVt!s~rS9 z+Q&pZeRi%Ky{3=tPn`_?dca11OW>guG5up#MX$B(;9W-l23)}X>rqqekVv1e^o=Cr z46FT*Bm>b+x<^OQt(9;I%>0(#@`;uDP zFBa9k0|>heD%`2s252#xCOtVzH~vLhr3o_355*yil*KzUNB!{kC&!=c(Y!;Q<39tW zpGkG$oX2Vs4t<)%siLCgbm0mq1|wYrtBVm^$vFxF^QjbAlpfT@=EEUlC4BA1$#Br7 zak_=^8mcMOWr{}>|BUgK?8WB022H_+Gr>Mbl>U+z+58br?*-rSNPDKIGS5Xjju}k(EAx#{X^4pEUVTh0xfvf@ zvT$Nq#(-%{0xuy9bBNF4VlM z`1s4!6$hu#1O{RPukF;N=J)ZSUyJ2>h~VNUP|=!@8}wy|nb7Vf@H+NEnPSycnWK8=2{9D$Ltw~x>(?!(>ZGAdE8vi4lNWcBJE zbKn|&HkUeCu@r8rrzvQo%oX1u@dMkqREJ=)4QktQ6Z!nO;EY85iuLSyD9v^3-B;JM zY%+V#1L1Vp$lqY}N}!B5aiDAbv%hE9!Kfx8tFCSv2unPA8*^ht*C~XDP^!fZk(CqY})Bzo3DS*;_zGa z_2RAl6^u+*gvD>fIA0AJkZ*{g0??xWcuT;p@NklJzh%KrU6H^hgHRWlEqIVp;L%bG z&k7ZhZ?Z7}g#yf^^3&>kD4z#FjKfVnq;B8IIJc~^^dV$>-GxVK(N}!7@bnmi=J;7g z@AacZNO%hXaI?HMk^$_bVC-v_9v_jnT?vh6-K$g+ZFbB? zKjhCBs<`#L3x?Ow$+UvVMAeLpaBrU$bWwtn* z2+dfNQ2aw8Rbua!+WPeQiU(YA3bln*XIK@#tUcqpEx{;>N#K{!F=&9Yu@y}~)}WoE z?Xgixlr}?U=+hWS%bK-}NsAKFy>@E;B&_Y9G@dLQUyFG@RweeLE$2YJV7m!7)u9mY zb0?1NG#V;OX1NXI=0H^D$8T`G;OZxnM%BI)8w_o>pvL%Lf`qC8!qCKE)_EY_U#CzLa`pukU83V1(dNpKYGJG!?C_nJn z0hHP!-T=Usa(>+w_6l(0nV9at#PE0cuGQ{GG#@8R7GKV;AA6@T^1IT^ZTWGZg#{Ye z;#R_rpN(P$7xTY%hLrmx9tGKF}$eQtT1$oa^YCZYdS$MJ5JFr%Q<=KW&z$82d8|1gn zl*n8(b2vT?C^Pj{8d@?O#Pi}X56aQogS}cWh_~8l+wk)Dnz^p=J<^eyjXqq!_b2#P;B?J4&-nQtGbPW7hK4p0xtFjvw0Z(kwFD>T zmnb_|NcP@TnzjiGNlzlo_ez*O*8LD&CU~F(kDqt<|NDw2#w%%{x9%+u;RoWY> zfCbkLwW}8OWWvNFK6IjmQ`P8%k6eD&zU$|TsCqj@yHOa#0j+jz7wMjO?d);F&z!E! zEQd1cgcbD+a3t>6T}vogN=8dXEY7PItqYZ>-)DY_6=K(T}y7VI9{^sf4MT3WVLV6#7h zQiF)t@RESrw9*x_iNL%C>*9{;E^Cp0GA+iab+++2+MzH>`_~OfSf1z$V)bJOCFCz$ zpweP{*rdjSpNFk)ja@)||3Mz%R&Xq&uiy@i&%{$Lp{BwZG)G8LPRpbpZb&q7bil5i z#+F5{2kw?*JNxkud$g}yx$x?6YbIF78qdwI!z@pvD?1G4I-C&Gs@-j*tYXYXtC$|7 zyJpkzaiGCf$oS+|#k=aiBQ+S4d9yi023?p4a{j_(aPBd)hf8~ehuIAm_xA034M+gG z_4#Jf#HnX7v>U9_f>lDUc{*V9Qf$LSElUhvPnJ!L1OhywaTHgXtia+xLmu4G{-l$WE9bmYa@-v9(8yHpGMu z67MR@W*!tA9M}Y4rB4;37x@YeKkWW${A%#XlN<5!@lEO6Et7D)TZn<^0m;{&?_Qj4 z??5#PRx_F0U1rWd{evOaH&;BL2TR6LLz`#yrmV~Hfc?Vx7iU3K7NyrF`NefFz z8;Og_OWu{26c-W`lNS^Fbx*eYe<*l(IU=2({NEMcffIcw3LwM--TOGTN6-HQ3tmq^ literal 0 HcmV?d00001 diff --git a/docs/inference-providers/_toctree.yml b/docs/inference-providers/_toctree.yml index 4623dd474f..f887935030 100644 --- a/docs/inference-providers/_toctree.yml +++ b/docs/inference-providers/_toctree.yml @@ -138,6 +138,8 @@ title: Scaleway - local: providers/together title: Together + - local: providers/uomirouter + title: UomiRouter - local: providers/wavespeed title: WaveSpeedAI - local: providers/zai-org diff --git a/docs/inference-providers/index.md b/docs/inference-providers/index.md index 4572e7c280..5b7df276b7 100644 --- a/docs/inference-providers/index.md +++ b/docs/inference-providers/index.md @@ -30,6 +30,7 @@ Our platform integrates with leading AI infrastructure providers, giving you acc | [SambaNova](./providers/sambanova) | ✅ | | ✅ | | | | | [Scaleway](./providers/scaleway) | ✅ | | ✅ | | | | | [Together](./providers/together) | ✅ | ✅ | | ✅ | | | +| [UomiRouter](./providers/uomirouter) | ✅ | ✅ | | | | | | [WaveSpeedAI](./providers/wavespeed) | | | | ✅ | ✅ | | | [Z.ai](./providers/zai-org) | ✅ | ✅ | | | | | diff --git a/docs/inference-providers/providers/uomirouter.md b/docs/inference-providers/providers/uomirouter.md new file mode 100644 index 0000000000..fec49ebc83 --- /dev/null +++ b/docs/inference-providers/providers/uomirouter.md @@ -0,0 +1,66 @@ + + +# UomiRouter + +> [!TIP] +> All supported UomiRouter models can be found [here](https://huggingface.co/models?inference_provider=uomirouter&sort=trending) + + + + + +UomiRouter is an OpenAI-compatible inference network powered by distributed GPUs across the vast.ai marketplace and homelab operators. Every response is signed by the GPU that produced it and anchored to the UOMI L1 via on-chain Proof of Computation (OPoC), letting agents verify the model and parameters that actually generated their tokens. We serve open-weight models (Qwen3.6, Gemma 4, etc.) at $0.10 / Mtok input + output — roughly 2–12× cheaper than centralized APIs. + +Endpoints are served from EU (Sweden, Czechia, Netherlands), US, and APAC (Korea, Australia) regions through a single public gateway at `https://gateway.uomi.ai`. Per-model pricing is exposed via `/v1/models` (`pricing.input` / `pricing.output`, USD per million tokens). Inference payloads are retained for 7 days for billing reconciliation and never used for training — UomiRouter is a routing layer, so GPU operators only see the request payload, not user identity. Full provider documentation lives at [https://uomirouter.uomi.ai/docs](https://uomirouter.uomi.ai/docs). + +## Supported tasks + + +### Chat Completion (LLM) + +Find out more about Chat Completion (LLM) [here](../tasks/chat-completion). + + + + +### Chat Completion (VLM) + +Find out more about Chat Completion (VLM) [here](../tasks/chat-completion). + + + + +--- diff --git a/scripts/inference-providers/scripts/generate.ts b/scripts/inference-providers/scripts/generate.ts index 9078a6f4ae..049b12ea59 100644 --- a/scripts/inference-providers/scripts/generate.ts +++ b/scripts/inference-providers/scripts/generate.ts @@ -53,6 +53,7 @@ const PROVIDERS_URLS: Record = { sambanova: "https://sambanova.ai/", scaleway: "https://www.scaleway.com", together: "https://together.xyz/", + uomirouter: "https://uomirouter.uomi.ai/", wavespeed: "https://wavespeed.ai/", "zai-org": "https://z.ai/" }; diff --git a/scripts/inference-providers/templates/providers/uomirouter.handlebars b/scripts/inference-providers/templates/providers/uomirouter.handlebars new file mode 100644 index 0000000000..1e471da4f2 --- /dev/null +++ b/scripts/inference-providers/templates/providers/uomirouter.handlebars @@ -0,0 +1,14 @@ +# UomiRouter + +> [!TIP] +> All supported UomiRouter models can be found [here](https://huggingface.co/models?inference_provider=uomirouter&sort=trending) + +{{{logoSection}}} + +{{{followUsSection}}} + +UomiRouter is an OpenAI-compatible inference network powered by distributed GPUs across the vast.ai marketplace and homelab operators. Every response is signed by the GPU that produced it and anchored to the UOMI L1 via on-chain Proof of Computation (OPoC), letting agents verify the model and parameters that actually generated their tokens. We serve open-weight models (Qwen3.6, Gemma 4, etc.) at $0.10 / Mtok input + output — roughly 2–12× cheaper than centralized APIs. + +Endpoints are served from EU (Sweden, Czechia, Netherlands), US, and APAC (Korea, Australia) regions through a single public gateway at `https://gateway.uomi.ai`. Per-model pricing is exposed via `/v1/models` (`pricing.input` / `pricing.output`, USD per million tokens). Inference payloads are retained for 7 days for billing reconciliation and never used for training — UomiRouter is a routing layer, so GPU operators only see the request payload, not user identity. Full provider documentation lives at [https://uomirouter.uomi.ai/docs](https://uomirouter.uomi.ai/docs). + +{{{tasksSection}}} From 64acc9aef8df63de986af5113bdaf7d8cdbb2304 Mon Sep 17 00:00:00 2001 From: Davide Cuttini Date: Mon, 25 May 2026 12:52:41 +0000 Subject: [PATCH 2/5] logos: replace placeholders with real UOMI marks (light + dark) --- assets/logos/uomirouter-dark.png | Bin 12711 -> 9144 bytes assets/logos/uomirouter-light.png | Bin 9359 -> 8568 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/logos/uomirouter-dark.png b/assets/logos/uomirouter-dark.png index 70caa10154fd3177403f702b2f86fb5f12e1c770..d7abfc8b0ec6b245603f9679c8a32a869da071b0 100644 GIT binary patch literal 9144 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�m@Baaqp1xwJU?(pea*n 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 literal 9359 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 From 9fc66324103a5ef9c52de076080e6d44952a3e95 Mon Sep 17 00:00:00 2001 From: Davide Cuttini Date: Mon, 25 May 2026 13:05:39 +0000 Subject: [PATCH 3/5] docs: accurate description + canonical HF model names - Rewrote provider description: GPUs currently run directly by UomiRouter (not yet third-party operators); OPoC is off-chain today (signed responses + sampled cross-operator re-verification); on-chain UOMI L1 anchoring is the next milestone, not live yet - Renamed mapped models to HF canonical IDs (no -FP8 suffix, lowercase per HF convention): Qwen/Qwen3.6-27B-Instruct-FP8 -> Qwen/Qwen3.6-27B google/gemma-4-31B-it -> google/gemma-4-31b-it - Removed reference to vast.ai marketplace (currently we run the GPUs) --- docs/inference-providers/providers/uomirouter.md | 8 ++++---- .../templates/providers/uomirouter.handlebars | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/inference-providers/providers/uomirouter.md b/docs/inference-providers/providers/uomirouter.md index fec49ebc83..73adb0f625 100644 --- a/docs/inference-providers/providers/uomirouter.md +++ b/docs/inference-providers/providers/uomirouter.md @@ -36,9 +36,9 @@ For more details, check out the `generate.ts` script: https://github.com/hugging -UomiRouter is an OpenAI-compatible inference network powered by distributed GPUs across the vast.ai marketplace and homelab operators. Every response is signed by the GPU that produced it and anchored to the UOMI L1 via on-chain Proof of Computation (OPoC), letting agents verify the model and parameters that actually generated their tokens. We serve open-weight models (Qwen3.6, Gemma 4, etc.) at $0.10 / Mtok input + output — roughly 2–12× cheaper than centralized APIs. +UomiRouter is an OpenAI-compatible inference network. The GPUs currently serving traffic are run directly by us, guaranteeing throughput and quality SLAs on the listed catalog. Operators on the network commit to a strict privacy policy (no prompt logging, no training-data collection), payload obfuscation in transit and at rest, and **OPoC (Off-chain Proof of Computation)**: every response is signed by the operator's wallet key and carries a SHA256 of the output (returned as `x-wallet-signature` / `x-wallet-pubkey` headers), and a sampled fraction is cross-dispatched to an independent operator for re-verification. The on-chain anchoring layer on UOMI L1 is the next milestone and is not live yet. -Endpoints are served from EU (Sweden, Czechia, Netherlands), US, and APAC (Korea, Australia) regions through a single public gateway at `https://gateway.uomi.ai`. Per-model pricing is exposed via `/v1/models` (`pricing.input` / `pricing.output`, USD per million tokens). Inference payloads are retained for 7 days for billing reconciliation and never used for training — UomiRouter is a routing layer, so GPU operators only see the request payload, not user identity. Full provider documentation lives at [https://uomirouter.uomi.ai/docs](https://uomirouter.uomi.ai/docs). +Endpoints are served from EU, US and APAC regions through a single public gateway at `https://gateway.uomi.ai`. Per-model pricing is exposed via `/v1/models` (`pricing.input` / `pricing.output`, USD per million tokens). Inference payloads are retained for 7 days for billing reconciliation only — never used for training. Full provider documentation lives at [https://uomirouter.uomi.ai/docs](https://uomirouter.uomi.ai/docs). ## Supported tasks @@ -49,7 +49,7 @@ Find out more about Chat Completion (LLM) [here](../tasks/chat-completion). @@ -59,7 +59,7 @@ Find out more about Chat Completion (VLM) [here](../tasks/chat-completion). diff --git a/scripts/inference-providers/templates/providers/uomirouter.handlebars b/scripts/inference-providers/templates/providers/uomirouter.handlebars index 1e471da4f2..1e5d529fd1 100644 --- a/scripts/inference-providers/templates/providers/uomirouter.handlebars +++ b/scripts/inference-providers/templates/providers/uomirouter.handlebars @@ -7,8 +7,8 @@ {{{followUsSection}}} -UomiRouter is an OpenAI-compatible inference network powered by distributed GPUs across the vast.ai marketplace and homelab operators. Every response is signed by the GPU that produced it and anchored to the UOMI L1 via on-chain Proof of Computation (OPoC), letting agents verify the model and parameters that actually generated their tokens. We serve open-weight models (Qwen3.6, Gemma 4, etc.) at $0.10 / Mtok input + output — roughly 2–12× cheaper than centralized APIs. +UomiRouter is an OpenAI-compatible inference network. The GPUs currently serving traffic are run directly by us, guaranteeing throughput and quality SLAs on the listed catalog. Operators on the network commit to a strict privacy policy (no prompt logging, no training-data collection), payload obfuscation in transit and at rest, and **OPoC (Off-chain Proof of Computation)**: every response is signed by the operator's wallet key and carries a SHA256 of the output (returned as `x-wallet-signature` / `x-wallet-pubkey` headers), and a sampled fraction is cross-dispatched to an independent operator for re-verification. The on-chain anchoring layer on UOMI L1 is the next milestone and is not live yet. -Endpoints are served from EU (Sweden, Czechia, Netherlands), US, and APAC (Korea, Australia) regions through a single public gateway at `https://gateway.uomi.ai`. Per-model pricing is exposed via `/v1/models` (`pricing.input` / `pricing.output`, USD per million tokens). Inference payloads are retained for 7 days for billing reconciliation and never used for training — UomiRouter is a routing layer, so GPU operators only see the request payload, not user identity. Full provider documentation lives at [https://uomirouter.uomi.ai/docs](https://uomirouter.uomi.ai/docs). +Endpoints are served from EU, US and APAC regions through a single public gateway at `https://gateway.uomi.ai`. Per-model pricing is exposed via `/v1/models` (`pricing.input` / `pricing.output`, USD per million tokens). Inference payloads are retained for 7 days for billing reconciliation only — never used for training. Full provider documentation lives at [https://uomirouter.uomi.ai/docs](https://uomirouter.uomi.ai/docs). {{{tasksSection}}} From bf9fcc206df28da1dbe1d192403c602aaea329fa Mon Sep 17 00:00:00 2001 From: Davide Cuttini Date: Mon, 25 May 2026 13:13:34 +0000 Subject: [PATCH 4/5] docs: describe accredited operator network instead of single provider MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Clarify that inference is served by accredited operator nodes joining the UOMI network — each operator runs the engine on their own hardware after a hardware + reliability vetting. Privacy/obfuscation/OPoC commitments are part of the operator onboarding contract. --- docs/inference-providers/providers/uomirouter.md | 2 +- .../templates/providers/uomirouter.handlebars | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/inference-providers/providers/uomirouter.md b/docs/inference-providers/providers/uomirouter.md index 73adb0f625..475745755d 100644 --- a/docs/inference-providers/providers/uomirouter.md +++ b/docs/inference-providers/providers/uomirouter.md @@ -36,7 +36,7 @@ For more details, check out the `generate.ts` script: https://github.com/hugging -UomiRouter is an OpenAI-compatible inference network. The GPUs currently serving traffic are run directly by us, guaranteeing throughput and quality SLAs on the listed catalog. Operators on the network commit to a strict privacy policy (no prompt logging, no training-data collection), payload obfuscation in transit and at rest, and **OPoC (Off-chain Proof of Computation)**: every response is signed by the operator's wallet key and carries a SHA256 of the output (returned as `x-wallet-signature` / `x-wallet-pubkey` headers), and a sampled fraction is cross-dispatched to an independent operator for re-verification. The on-chain anchoring layer on UOMI L1 is the next milestone and is not live yet. +UomiRouter is an OpenAI-compatible inference network. Inference traffic is served by **accredited operator nodes that are part of the UOMI network** — each operator runs the engine container on their own GPU hardware (datacenter or homelab) and is admitted after a hardware + reliability vetting. Operators commit to a strict privacy policy (no prompt logging, no training-data collection), payload obfuscation in transit and at rest, and **OPoC (Off-chain Proof of Computation)**: every response is signed by the operator's wallet key and carries a SHA256 of the output (returned as `x-wallet-signature` / `x-wallet-pubkey` headers), and a sampled fraction is cross-dispatched to an independent operator for re-verification. The on-chain anchoring layer on UOMI L1 is the next milestone and is not live yet. Endpoints are served from EU, US and APAC regions through a single public gateway at `https://gateway.uomi.ai`. Per-model pricing is exposed via `/v1/models` (`pricing.input` / `pricing.output`, USD per million tokens). Inference payloads are retained for 7 days for billing reconciliation only — never used for training. Full provider documentation lives at [https://uomirouter.uomi.ai/docs](https://uomirouter.uomi.ai/docs). diff --git a/scripts/inference-providers/templates/providers/uomirouter.handlebars b/scripts/inference-providers/templates/providers/uomirouter.handlebars index 1e5d529fd1..ea59d35eb6 100644 --- a/scripts/inference-providers/templates/providers/uomirouter.handlebars +++ b/scripts/inference-providers/templates/providers/uomirouter.handlebars @@ -7,7 +7,7 @@ {{{followUsSection}}} -UomiRouter is an OpenAI-compatible inference network. The GPUs currently serving traffic are run directly by us, guaranteeing throughput and quality SLAs on the listed catalog. Operators on the network commit to a strict privacy policy (no prompt logging, no training-data collection), payload obfuscation in transit and at rest, and **OPoC (Off-chain Proof of Computation)**: every response is signed by the operator's wallet key and carries a SHA256 of the output (returned as `x-wallet-signature` / `x-wallet-pubkey` headers), and a sampled fraction is cross-dispatched to an independent operator for re-verification. The on-chain anchoring layer on UOMI L1 is the next milestone and is not live yet. +UomiRouter is an OpenAI-compatible inference network. Inference traffic is served by **accredited operator nodes that are part of the UOMI network** — each operator runs the engine container on their own GPU hardware (datacenter or homelab) and is admitted after a hardware + reliability vetting. Operators commit to a strict privacy policy (no prompt logging, no training-data collection), payload obfuscation in transit and at rest, and **OPoC (Off-chain Proof of Computation)**: every response is signed by the operator's wallet key and carries a SHA256 of the output (returned as `x-wallet-signature` / `x-wallet-pubkey` headers), and a sampled fraction is cross-dispatched to an independent operator for re-verification. The on-chain anchoring layer on UOMI L1 is the next milestone and is not live yet. Endpoints are served from EU, US and APAC regions through a single public gateway at `https://gateway.uomi.ai`. Per-model pricing is exposed via `/v1/models` (`pricing.input` / `pricing.output`, USD per million tokens). Inference payloads are retained for 7 days for billing reconciliation only — never used for training. Full provider documentation lives at [https://uomirouter.uomi.ai/docs](https://uomirouter.uomi.ai/docs). From c6f46daf8507deb0979027414b513547856b888e Mon Sep 17 00:00:00 2001 From: Davide Cuttini Date: Mon, 25 May 2026 13:43:03 +0000 Subject: [PATCH 5/5] fix: canonical HF model IDs + correct providerModelId mapping MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - google/gemma-4-31b-it -> google/gemma-4-31B-it (canonical, capital B; lowercase returns 307 redirect on huggingface.co) - providerModelId now reflects our INTERNAL model_id (qwen/qwen3.6-27b) rather than duplicating the HF canonical hfModel — matches how the mapping table is wired in Together/Fireworks etc. --- docs/inference-providers/providers/uomirouter.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/inference-providers/providers/uomirouter.md b/docs/inference-providers/providers/uomirouter.md index 475745755d..62dab602da 100644 --- a/docs/inference-providers/providers/uomirouter.md +++ b/docs/inference-providers/providers/uomirouter.md @@ -49,7 +49,7 @@ Find out more about Chat Completion (LLM) [here](../tasks/chat-completion). @@ -59,7 +59,7 @@ Find out more about Chat Completion (VLM) [here](../tasks/chat-completion).