From 4a50c55d84ae20659cc0a1a5673030f67eaea407 Mon Sep 17 00:00:00 2001 From: Sameer Kankute Date: Thu, 19 Feb 2026 12:48:03 +0530 Subject: [PATCH] Add allow defining default query params for a pass through --- docs/my-website/docs/proxy/pass_through.md | 70 +++++++++++++++++- .../img/passthrough_query_default.png | Bin 0 -> 85983 bytes litellm/passthrough/utils.py | 19 ++++- litellm/proxy/_types.py | 4 + .../pass_through_endpoints.py | 27 ++++++- 5 files changed, 113 insertions(+), 7 deletions(-) create mode 100644 docs/my-website/img/passthrough_query_default.png diff --git a/docs/my-website/docs/proxy/pass_through.md b/docs/my-website/docs/proxy/pass_through.md index e9c1d796969..f47d7064140 100644 --- a/docs/my-website/docs/proxy/pass_through.md +++ b/docs/my-website/docs/proxy/pass_through.md @@ -58,6 +58,17 @@ Configure the required authentication and pricing: - The Bria API requires an `api_token` header - Enter your Bria API key as the value for the `api_token` header +**Default Query Parameters (Optional):** +- Add query parameters that will be automatically sent with every request +- Perfect for API versioning, format specifications, or default configurations +- Clients can override these parameters by providing their own values +- Example: `version=v1`, `format=json`, `timeout=30` + + + **Pricing Configuration:** - Set a cost per request (e.g., $12.00 in this example) - This enables cost tracking and billing for your users @@ -112,6 +123,9 @@ general_settings: content-type: application/json accept: application/json forward_headers: true # Forward all incoming headers + default_query_params: # Optional: Default query parameters + version: "v1" # Always send version=v1 + format: "json" # Default format (can be overridden) ``` ### Start and Test @@ -167,6 +181,8 @@ general_settings: forward_headers: boolean # Forward all incoming headers include_subpath: boolean # If true, forwards requests to sub-paths (default: false) methods: list[string] # Optional: HTTP methods (e.g., ["GET", "POST"]). If not specified, all methods are supported. + default_query_params: # Optional: Default query parameters sent with every request + : string # Key-value pairs (e.g., version: "v1", format: "json") headers: # Custom headers to add Authorization: string # Auth header for target API content-type: string # Request content type @@ -178,11 +194,17 @@ general_settings: ### Header Options - **Authorization**: Authentication for the target API -- **content-type**: Request body format specification +- **content-type**: Request body format specification - **accept**: Expected response format - **LANGFUSE_PUBLIC_KEY/SECRET_KEY**: For Langfuse integration - **Custom headers**: Any additional key-value pairs +### Default Query Parameters +- **Parameter precedence**: Client params > URL params > default params +- **Use cases**: API versioning, authentication tokens, format control, feature flags +- **Override capability**: Clients can override any default parameter +- **Examples**: `version: "v1"`, `format: "json"`, `timeout: "30"` + ### Sub-path Routing By default, pass-through endpoints only match the **exact path** specified. To forward requests to sub-paths, set `include_subpath: true`: @@ -202,7 +224,51 @@ general_settings: --- -### Method-Specific Routing +### Default Query Parameters + +Pass-through endpoints support default query parameters that are automatically added to every request. This is useful for API versioning, format specifications, authentication tokens, or any default configuration. + +#### How It Works + +**Parameter Precedence (highest to lowest priority):** +1. **Client-provided parameters** (in the request URL) +2. **URL parameters** (from the target URL) +3. **Default parameters** (from configuration) + +#### Example Configuration + +```yaml +general_settings: + pass_through_endpoints: + - path: "/api/v1" + target: "https://external-api.com/service?timeout=60" # URL has timeout=60 + default_query_params: + version: "v1" # Always add version=v1 + format: "json" # Default format=json (can be overridden) + auth_level: "basic" # Always add auth_level=basic +``` + +#### Request Examples + +**Client Request:** `GET /api/v1/users` +**Actual Backend Call:** `https://external-api.com/service?version=v1&format=json&auth_level=basic&timeout=60` + +**Client Request:** `GET /api/v1/users?format=xml&custom=value` +**Actual Backend Call:** `https://external-api.com/service?version=v1&auth_level=basic&timeout=60&format=xml&custom=value` +- Client `format=xml` overrides default `format=json` +- Default `version=v1` and `auth_level=basic` are preserved +- URL `timeout=60` is preserved +- Client `custom=value` is added + +#### Use Cases + +- **API Versioning**: Always send `version=v2` to maintain compatibility +- **Authentication**: Add authentication tokens like `api_key=default_key` +- **Format Control**: Default to `format=json` but allow client override +- **Rate Limiting**: Set `rate_limit=standard` as default +- **Feature Flags**: Enable `experimental=false` by default + +--- You can configure different target URLs for the same path using different HTTP methods. This is useful when different backends handle different operations: diff --git a/docs/my-website/img/passthrough_query_default.png b/docs/my-website/img/passthrough_query_default.png new file mode 100644 index 0000000000000000000000000000000000000000..fb97e69001e1acdf892d1a41cc72b443f248336b GIT binary patch literal 85983 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 z�i>3wap}C!P0^Hy1+`9sKErXSPj!GzknH+=ViwrN^Km$Em}muJ5zfj8~uQbmBxv znC`$Q`ilkzK1nB;7~*4uu*i(QcV(qZ1ki{U@UZLtFGJ}PQB0#rp25x#1yGO6?OJ25 zT@|;roJ7pAc6!sHPvn|@p6ax_8=E`bFg@&g<~~jpr$Z6X*?HR`=~%fcl5pioDKYUB zzFsz(4_0l2!_QIeZAMX;vc&j|SQBrtDF?nmM*V3d5coD`B&n*dlJBU$lCQn%hTVp2 zk+ZShlr{X&?mJ_R4_@SD6KnDsfV7%BvyrdAi39I;X~XpkY6>mmfsyYG+AnYiRc3l- zzpJa{NXDqWz?$g+O79d6_UURJB#BdJvm_Qu`Ew<8zLu4+sngq2wFu){lSaWF6T=RB zbIN=OW}A{RI16b>Ll3^XdA_nzEvyZL0vG~eP#T@jwb%LUPnPbSWBrWabT*z(DC4KJ z3y(QuDdkivH+Fn&x4@mib&_t%&Xe96*Ki?QYxd`hRRnJjMSMbb;MMh7o6V7JU$Oz) z`mO5%@<7wwv<*he`jOWH*zLRx>}JkbS+7W(%2zrCVXMu&S_tZ*T-1$%gDEBDubc|$ z99-SU7wG7(9aZFWswQ$y4>0>}wtHH@4?-svVp0k?-W4M5w$m*4&BFk47|rU!2zwak zh9+*3WqHel8Iehaiq!fb9F1zy_d@9--R!?57%uF@{}f+9J%S0valmuI`DqVUX1zm3 z0!TZ~JwAxOk&bz1TkC+!Hh#lSA^-|ms8M=yI26`Ru(`V(gVx95u%26Oq;f_P)qfI zO_~xOqK>apJbiJZn%Dh0!|jZg;0%9U-LM#(<*@eTzNqtqNXoFHcLS zwn33M+Pk!=He}QKV|o?XQb=l_&uU&b(~@`mZ1z*?LwJ=N)qw)WHYC{|wS|+<-;qpf z7$xc}*VuLX5)FSYqmo{$EC=nF-^U&e(1&XJiVNz8mX@Bj-PUEF1&^wzm@^A)sez&u z*O4ftRQL@Z`>u9`Bx5(=}UzGs;_o(c?gPf!efn32kIem%>3;W zmi-wfrvqrd4j>fu)42B99PvO&zAa`w@6$5*-mnDE2?hY-rKj6ROblq=-`{ZjQ{9(b z#~%k2n%kyh*8WpyjyL>1$id2wvY&pH1yrSeNyi9+I<|n|*;O#-`@5n?a`epL8hAGD2ST!vx@54>&C@r zo4Q6CBho9h>5td9Pt`R%vD0!vFP!P->rEA$dpk zGvf=m?S5bH;%q{Sjm5bkrK*oN7-mAPKmj(L@0*j$mLmN|<|;b0nclftW03>>IQ+mJ z6-APsTfk8-)K(re#Iz17S(}@so^SvriQ&g2)ts!?=F@QYna+N1d4&h+1k{-0V9`T#oqUSa2?=(|Nypm{Et_ZiwFK#eR_5nA;QJ_yU`3{; z66ECFLwV*!rp0%Oa{#d+dX`E-;7Y9xl&&CO#FwwWENB!86$isMvmUvGa_3g4`+_0; zXddsqV&8^-wN+LRQ%ltP4H5fq#GEt`VmyCg`E>6ZXphhZwAlvu%337y4RnQG0p3tB zMU917Yo2_`+l|NiM*wz<-BsLR4xm9)q&eQBAtWr z46^f0`I&j#l#bmMJI&Pw-p30mV9Km3lE=6GoSvT-z_Dp4&uFfvHv_~m2I}1axSz^IR$?yq-Idda~8wfK?+FQ#;Kf1ArJ;?ZW!fpt4lOx@CWVS^am{pTuBan-r zf9DX+VSsz)$xw@VTERrUWRzi2>^;b5yW422Z51AI83K8T%PmD<(p#X`wgA{sGzOr7sDnBbF`FtZ|I(TbR)9U7EL zxF6Y-pG)k*!|RMX#bcf|DfZXzKmk6=wKspiBk3myKr)$WQ~`>J>>C5hzaE3z1@Xt* zZEO_~%rC?GgZ$3c`9oqqLDX&u#a%Y8u8#7Ii8B2MQvQf4w?>BMM2mZsl$3>pib{ar z-Vp+%8qWue1$ZUh)_$TAFLY0op0a5xf3 zAKqbydooyV_1aYaO`;*j0Q2f8@9MlS59{{fjpwBO3!@zC@%Fkcf ziyvs<*D)9{{V8$WPeAkJ3^;`)Ghf<_C^H@H^NeFY17y=T)=tCC&Gi)#Q5%P=_J3~= zhzoZKcMZz*KW0=7>=chEfgLt9G&I63fWvxk&m(dERE_$-bI=I|Hb^;0?HSnRMShq4 z^r_s)S|gsfKXjD2=}~Axf|2ji@7(qOOwJ_~sLl%=R2?*(=;fEBno9Y$CMLn*{?DSq zGBgy`t$!mT`M#Erq9F2+v5?bgl}~`-BRXdM8ymTO$kDU<6QWi~1_tT%ms^znd@dJP zLJ%QJhNq=Z8DL9csfr=3IBxSlKl6TMk0qt$hQnsT*Y0l@G&6fD^ZLAoqV35atHeD- z>^$a^#P{vPH{oyM-=x0D`Iapz5t{Gt=VdX0Mj|>kNOX2*RVElP_1an)$a7Q%`e!fk@;w{mv_}I|3@mOtK11l#= zAdP$yN4=rT>+hoWEb^o~9XA((>W8!TbA(kAP#t96#FsO-xm=<<-RbwK^e1Lg{w}Um zt(5=k!@Oau+VS_wXdVWr`3O*AsH${ie+n8Y|dwTv-Zs_qR4pxUM^nwzk#&*l{x>b{0~%Kcc|Dwprr< z%*SZjw*XTO5guNP%u9tD2bF3bzg(K|XwSd*`(ts@bzhn)@2>&AYXWBodjJWr151?t zKl&nKf&rU-osA<9b%SAE9O1XVDL=mK%jjaTE%aTNK+S$_XM4K*Cr!xX1acP<2MarF zQEU1!@>%|mlVt&B_40)6e!gkeAo0j1X_hif>yI4-3;~c5wQK9Kr;!<%q7*CVTLZ}W zN0MfBiQ?4M^lal*+pb2P|H?%t5!mIf-g}cmcP|e?pH35)r%$`nLSe1wP>Pu*;KwH> zDe0{?K-SkSz z#y64-TPnAW@{NQ{pA}Z{7l3&37T^ha$M60^;tK@SS{ipCY4nXVlEgL#!C6=);$MNFF#WBdC{(0+12}?i*Fe~P*xj*Fcmzd)* z!-#dR6AMTFeOdz$o<~cIYv*hGhE0_0|1e{d@V*Of$rUy()GOmFY#4wY+hgOf)g`>wL=YNF&50nJh%uI0$N2cN1R1Jjq|8p~g8eb0)&nx{y zIs(d^aTMtKGvWK|t%3LbM~4*y=-#sy$$uWw$c-~3wcAD{XPT?zXS4~f~@|3`Jj^&MQkS+wgpc;6Y{ z%)NM_<~pITEDCc?w?d(%bD~C+8%h5v>yzSG-KMCykwTM{kXRdkm`j-fpfD^|br*e(W1LL?QO@72kpRiv*x`KeN?fgX z31S_qc5ETGc}Nk}+SG7cdu(RlOVQ~T9IT4|W)VlO$gHfisx-prDP`%!vzL@(IWl1p zLQd43>qSPtR^ZX6a8Va*oGYu0cI^x@O5}1<_6)+v$hlTIP*^>9A*9(;&82l)l5$!V zQ}Vgz9vtc8R@R%M8!sLRJJO2C4zNs@9s%wGLcY#4*FRy#Fph*K=ERR3id`I7EAWPlD&jP zC>A?PUQj{hIjY?K26@%}dVO^+(2erLLJjVqss4mvaMtV3U57&hTV{jstBJI_v9&i% zSanVdZb2;Djs3R=PNN$K4vUBxCx7i6fO!6!zNyHj7M<}JxfB))v2a3CTaMZm)=_E+ zv|_crhlZoxo_v|+!aex$H0A+mQk8_`<@#$ffDv|gsz$}A@=V0*4YgddJ8BU^@j=5~ z_U!16{1s5?F;!}lgT>}JD{kdmoV|?21DxqdC0&6lju)JnRQcXQ!otYC8v&g5@8bO? zU^(|@8gRu~-wEJ~TO@`mPpG6o?7vZJUuw}v)f?+(z0a{(*fF20vFz?`dj6+a0;bbf z5UOGp?M-tSBEfgvi%?LTrz(9nBGX?s@r4zv!Ua72gWDRYMw*964Hg&iZLN+^Ry6Na z8oKiH^jD92sK=TQTSV8lD?fx~=p)W#Ynihg9(=ws?yyBqAoEtS*`rFyq%>r++Q!42 zpbTrVtM~x)7L7j+wEOICf7E4nt>|&QrnM0{cHHfcmL}!*8LTLvP;<+yPWa=;PtuDj zr}x6liWwDuTQO#C&Nab(>sIzy0Y{MwA%)ia><_ae^!n>4RDy3o#`_0=CWqIvHi?!i zZRG7<$?$Bsxd636Xd)_gC{Y7Vl-XLht`4y9qcc)D592c-EjVc2t3a8i&GAuF@#0LC zt8Fo|a`d4;YN48%S~a^$H{gGW84cB03@19t%NSzj4MX}ac~|Pf?SY$X9c9a;)2C*FC(^7#uXndCniWj zBQtf#RqIXN4?#vi>IeyNLVtdO{K>0ZPH3vjTAf<^cTAQ+w)X z4s&%Ga>d;{pH2DfM{%9Q!(W~+jQh9w-h~9(qPpsw4IEihW#H1vSgQ}lJpQbjud2jn zt<0ih?GRszg_r({k>QzA34=D^TiB+^UqzXF6J1{&Qr?l3bfU8^wJtFHMUa{OAXfLR-<0A zwc0lA0_6~$=9J5JSPoO2&4I}4Zu0`&GQV;}D6q*wF3tky$Fc2Hf4i;$2^EB@RR@b#(|X z(=4^ZNLYB=`&ft zrl4@wCtO|DnVL%3B0l>Mu}^tTP)1oNGS(cQTt9y9VEkDng@p+n=ew``ro=y2nXDR; zi9L%&Kb5z2KvXDo7sMnTuH2|w>P*kM;*(-Ds{c*zeaO=ar0Hq^ky0}9ybh_z*DsFw z`J&B%o$$imiOoYa$x_I@-qb^^~{Wj&xchWsRvJM-#dmiIbSz?Ii1h&}cHMNt0r z;C%o4RxJq5hViiX>IM)<7Ue~n0lNgS6i1koKeruh1dp;tDCIzEJ#|GJ0yS$acnN_O zchRnOeaU`XEeRI-54ehzcSP%pDN;>?3W#%|U_P;yd!6Z084Ax>s2as@ozu8PMTt?9 zQxY$)OmLBEI$u!$ZKS6viMQ*A12zL)Y-NF}up7|V%QnCUTd@9w!@1_z>xJg2KguGC z9H^`o78ZS66IQDLcdgy76VhGhv_R^0wuANV5R2r?(C=Y<1zCaTlpn=f>wxi&Lj2;v z&={mWoKDSe4r%(y9ulYCU-WB#sUB61_oG?kc7Z~i64DwhR9@Kos^KO-T4iTAM|^AU zU6{>xq4%vV_S1z&tgXM`PL1v4!x6cll(t64k&2&5l(nt@K#<3$q50f*0X?9@4r@d7 zyy}e5#_i07joz@^(f7y8eC-$6{wqR4yO3QA4Rz)FO^~4;N;b|5e-jZEsH$l%6Nlws zOlY@eXn3y2Zd5im1)F-%lx4UTJH31yQou4H$TcmrP;4tm@#PQ7Is+S6YGKRme95k# zpz+r@M=8F+$*M@f7YlGPy6eJlm<5cSY`KVQVdtt@pR~Hb<%W4gpc0RzX`8k`DX@p2*k(o;=JRo8g=|L zO^ugAMFQH@XoQ&l>>;!W{id)#hj;vo$o&8JTWD-`n-bXs&VHykqgMaCQz_I`vcKja z$_cf5d%K^EtCO4VUlQHKmteOm%Xf!JRQ+omtDQeH_C%2fY;{VV;RgSbM@ypWTHXFz zI!aTD1l(uN8ok^3b1Dw$rR3)EF#p9%R#|BmH&H-bi{~XGK_JbEs^Wmu(|80>=USg_aUJe zBld8Pf}6dOqB%vnf9Ps*6FqM-xYBxwId|-XN%!bmebb9@6E;!5C5roFucda^kgs$h zR|5{|C-7_O{=V#>qaxNi*ur|BoXYWLZqQv(#hs0F$Jl$4TVLW}QiPY{hB|Dn``m6t zEmK%uz$%J%b(eAc?<|^a3%xxhDEb;rN^E=l55l<7)DPu@?eK!+L{2q&!T{#%wW-txiycAoJ4ZJcEI z!3z9(H8@r=t}}-~{QB|JhOlIy&pnrSW(foWs$f2;t(hiK1AfS;cX3xDwq2s)zs zy{v&YBaXZ0*w$9lj;_DhI_<{<_&sh9mJz|bpbw(@U8<~0O(!Jl{%~VcG>K_&RC#rq z_E+XDdWw)WI{sa*_-pdnSPeb`K?!@;4vA(C6CR!E!Y4tpU#|N|czg4TbK^ryO!4!h zP6o3s6FH3lBY`qGnp%B1K%qe8L@OWGCflH8E~ox4a&FK^az5uB;ZRfMTrLyY*Kg}8 z=xX&B2Xh5*FbI(G65c-9^)O`k>apbYhiuUz6{1vJvT2+g0#1bMcbqG`OIwctBC;ag zqs*ehJO8tTUl2qW4ujdyJVnZiLg0Clkuq`8+Nvlc4KvgKR;Co2{>oT-S{v52!*p3# zbK5G7?a4&#%gko4BE(w1t2B!2OnPVEoL`$3G!PF5h6P=8Q!@shJ2E0ev4kA4OIwZE zXSF2xQsSxWok5*f+-$@oi zvy%(w9>y|QM&Lep2bxW-Sg@T+s$B6M;be?bPJMzm+W5NO?)Cgw=G7;Cd0-has7AGF zDru%ecayXZP>I2<5vYS?ZqxXC?0#f!^TMC)#WpRJ|2cdEjQlW6SytnXm<3GRQ9_P4 zhuCA-j}yA%l#^H36?e}$8Ih?j(=r5|dic}8*!OYCd&TRNi}s`lG5OnQVpa}dNuX_; zm%TOQ5d5qxXZU+2qAPV_JwO4pUax`Ng)tyKqWG}Ywy(U=07(K92%VgP@iWcO$g>M+ zR~xb=$GJlO+ADz>LG5tNk$8!08t$7;p`(|VE~^2RmdZ;V-jN+5K55T|{50jutsgqa znI(#Y^qe`Vb_dv(~eV}*CjEBbg$1-wx-WE=gSy? zJF0BG)5}=BS0sD)ZgI@k-#w=kpB%&iORe2UW17GBP=_cdyh8u}zKW7Tp~=yixXYPk zP$7;oNg?M4Gv14;YT}&%CQyGnB2oSVVtw8l+*e*bhH=0zhfQ)AxY>MLGwr;icVtk= zeN3i%*yF;``xdw_0u=N>4)feM%VS z{j(P96mFgA21j_-LV8=@tRar-JK@N@C|KrHE~CxjVPy1T_P8*aQ(Xta zvgJU**VQtS)>CW2$6;(k*(;5>egLx!sggTzAWfpr8PQs!=l-upKc``@Puc|vfv(b* zwE3U{H)_}QvuLrI`f~1KxI?3SNR@{I`noXu?~LLN2{PNUs9wa4jzTdF<+pAdWO+A? z1yAyJTxCT+US}!yrmmAu&RH4DZJyplw;LF(E({!MlCSNH=7Z*JiGhBFtad6;g*0>; zr;2Bu20{G`-qBLC$Z~6BGWwZ2t`&mE_2m41G6QLbHOv_O_D7@>IUNB%=g!P6U%sJu z{_$bQuL`{Za_*v4(dOijtUAiwy9ycp7MfUY;w+TG)G#MgK(61FaCZlDr+^Omd?h30 z%8R6(+{(mFOXlnFZIlxlg_v|F)6b%f&gQ0{^S??H!&D#)dK^7i+%`IT@1u1!?|+h0 zE31j>z3JS0q`%Yk&{T7WHPakLUu4`HQZUMf#8DkU!^cen5o@=5YaJ`k1Cm3IXJ12i zYC>}1$32~AG3{rAYDR_9s~L&hh%=8QwzuLU%}GeZT%~H;$UT8ZHkr<%A8O%+scrkx z{=V28l$wcVrT#bHA{n}$kOx&5TMl+|=&=EKqRuojo0RdKH7<<1%z;Mj z&Em)tDv$K;K8)%-j8w6vw0e{1Wv~J|eCIy-DLt5b&~|DNDk!rWzS8K#);#!l@1|_w zO<%Y~vp%MAfCKg0Gq-$8mzIObH10K|#)74xV6b~D)0VQ}8o_yKKozuMY7YWB0V7{w zFBLd9I`4AT->>9!9-p^Ur-A8M2;HW#gseY5>hF0#_(A05DX6tNU)c6ux>p3WRY(@! zBYe68Y?ul!Z0YY)##ribj?_AzkVdz!5xaZ`nA{VO;lWiFTA67YsAwi(s~?0?9qkPX zNIKECBA()fQJPtqlz$tvn+d%<8P#8}N=h}&roEUicfR7lkTlIA4VSd zpJ}(2Tr^=~oTLeBO_aeS+7k)wzbl_K+Nh=UvBQ4vWj30Qi}YTba5p;YCQ$B) z7+;PIonqc+Rp>fuM}Lk*1B|D%d1HT!bgb$cZAq-06*knY;4=ws^dAAUZzo@U3LdK5 z`M%O9nHH2G&^E;23d#FGHaFCJ6)Q;*zG&FvbT=k>t&Mb!=ICtmeNh}m(y2t==(p%v zMI*mB^I45P90!_;x$Kj`*@mw{8%%3*1*aJ7i%R|BWj{l{gA*0!Jp)^8YDLI#CbQZ1 z%WIrcfQQh{lY4NCl3MusKM7cUM?2v=@152t{J>T_-^is=l{KwZ`8GjWM~^E1i;P(; zj-JMN;FymyKu5s1`&Fw^q3MjzQBCV$R!9?}V4lm?yWvucUo{o@4_yr|iOL zU`Rn+5t95BWVUmdu$ZcL+MDUh#!@4jGa~^buI~EyQpJX#(>G3CyUR<-(i`0Pi16v#tbfc_=t;49E+AaUhl^V5sTu85E&_wnY#5<#BZkd0jK+vM|CP_- zG6J3SAx@2zxfv}v+1U+$SKuS#tBV8LWEXDNx-UJWm=5pD%fk3_L0yJ9bKrzMJvfg! z^W0wCgMznM$E*aq);#j!a<5h+Cp)U!jz{A!I%ihsI}J_Q%dHOzc5*Ypk#l7ouXwN$ z_^h#CH<_hq`Q`0PUEZl;!a5k1ZNZ|h9~)cNT;sI|qLq={X0hC-q%Wf6zuNMmgti_v zmg^@Fm3Q$yWd0#Z`T~cE^eeb{EOJbOKuqNux64;gKY6sIQ1oN+YElX)2(Wn4+hlq` z&e3)9oKPDJBlJ!_axx zxF1S6K7ZHmPz~@fN$rPYf0Q!lhSVLGyH2o##9mF@hBm>*_#ypfxBV|^HR))E=3;S2 zFH{`P49h%Q)Jqyiu_ukd1K*T4Q7=_jpR@p;53-2enSnj9A>Vy|_KCU$HlU7q2cZE- z*iFwMRS&VzU%IlS;j_g1ySA(`ok0SU?-L>oN8XSODyo?HVK_f#Ea@~{vZ&t5(OU6k$auUOfX1`b^FoTWmAOQ_;xHfMCT z&qjh>xBE`=nghstupgz)8_uy)>=0d?fBnWi(uNR}9hXG@pE#2i=F9Kp%ZK|i(Xm&u zE)f)RNLQZ6bCp!4q^8qS;)Xn({Va8RU2BGje$B+&Whwo8P50H^?U^cggHX=Var9o* zU5uEhRYQl+>1zT;h%2FSAulGWao%^!!w>(diXG8z+_IDBW|0cgq3$TB@^CMuokXQt zDt1v+3s${Pnj`wf6bx>TD$tJ*-u^hd6TS9=tJ~DQvv0p+YNQ|%O*ZU|=3~z%l!X>8 znJcmZ4D8ba5yT{`0TM!@h((B^n4)?|57$&jlxWV6f8&4p{JyRn{h6m$WsCk{!!G?& zz?^5f;eD4oM@#rkjYtVm$6Jxgun<^~2D|A_Br1=0AJ#T@*DFrEZ6*!=6XiMu3s-<)_O zpPkg3i)RX1N1X0obaY7CmH|^tV>l%ZwjrpgE-X2keicN^OYnDbBIc9s5vM=ZJZ6Pc z=U3T=e^8JThUQgEA9+r-${Iuwn%n4<_)7DD(Vu%J?Q$E^A!qCv%a~jDknvQIL#3x7 zeOOW4Dbl|Rs@#P287vSvSzV|6-;W@Rhsp%Y9pVhlVWtO23-l(Qz*P-9%Y}YGV5!g^rfRcp-4rJj{-(m$)e&063@SPN!0?NPL z8f80)^YDsX-?qBLVWGqcE;w#E^hT-DA-VHYV1)l!+^>f6Yq~=$>5%6VKa_qhmv>(} zkr2Y&y0y+67w{{1VlOXRn#%wk6WK5SqX_Fsl1gh9nQFjQMS0M1xHUjhZXiO^SmI|S z>{<1xO^^kxjXI=!Kx@vITW=@lVOIzi_(8{!P`Clvkah&{s?^iLh% zbs@~`8+6gB_#92!Dew1=-%X{P!O1xMHK%#0XIX3H`$fS19xW2k|~`9Ce2{x8M?T6s%Ky zY}v~?4je!gv;#KiW9voH8U$hDP?&?6X4^~KocafNn%VO7W*Z zarIscHIT3Idc1HsSaT>$vRdcgGP8WL*_5Udb?mI2>ND=luGOIUmBBP7jOm@|`|uBk ziH`wk{E-6TTZj~MZuRN#{wJBOWhyC^Jf0)payJs+p*MV;;=zBT0Z5*EQ1EN? zcqEXE)2C-SK#gnWuC_7q{>^$t`36fei`QrCnCyHQT#%M9=@UaM%PD z@GM5GzZ&lzdcLEG;kLSf1ZDl+qDUPx;oBt)Yg_`{wQhTqV=;yEWA3r}v6DdAZm8Y%+-Uya?kujea5D2xzI+58)bb^u_@g z-l^$V420^`wDqF<=1o#W^k8ExEWv{@(k#a}jo2lxK1x@7ioPt?eAfS7UtDV;(u+}# zMM|@!Hu1%%V-c+1*~`3qcl^eT4;4d`oqGVqe331H)|+kSw8;C+wn)% z&YVXGOu_1?7g9@ut?K-Mx+$B^KCQFIJG!<{l)aalS4x#k#vu^L(uM>x17^uRUS_T%scAJ~j=McTa^7)3%;T?R{O*28g zXH(ZV23n`ep18xWWM3vf$)j!AO|3StKIiSG40ifak~)5rEpk7NB_!&iI^^Qia(A&e z)TP))FcOT2i35EAvz@xKJ7);;vV$$TB$kPA5~Nvuqw5d)#Bs9hwe)e%8|ITcv-w;H zt-5<@S?bK*4m9xKzw@8W&j}Zx=8%Y#MA}06?3h&Zj8R7?1Q&3fOn9BSU|mVVeYwGb zyu_>hY%}Wa$L=}J*YIn~3*C~tr|UkA3pHnTL!59|JB+ZLS)%-1)j-yLS3=0t(YPEX z>;D$MNB%0`KkKVxvt(`M{; zABy&?m!V@GSgtBNFLsvAnic8qKG&jvHa^yy@(g%vkg5f!z>2+${6&~RWPp=zhq=A2 z2V!wYBD8U9^xY(#mb&_Jd4f9JQZ#6>y}M<#0o9;=Rcd&b z@8ILcxTe8QVs%>2&vBn!CWErB-IfMX-qt^VbkIE+lr-9P4Z5&MBSr4R){vEpjoag# zC+{XhEbG?AsX6eFq`Ti;6fAYK3&byVf53?-G$;g{>Ut}OQp~RgD6C~_WOLC~UnuZo zQuyK_XWgVOq?-Zj%h2k0`Kxrw=mWn2&xqa(D5KjgZt)j7aZ|c5)>mABuHQ^`HYeH=c>JP z&SsO{n5MUTaclz>+$;a;O)QCOX}$TQ%2c&DXCYV`KRkSG=w@1TYfhtJb7L+p+xn63 zy6ASqGTy>`@3fpwv)Se5a}0S%;@3OaBs1&t_ViZdXH;W+yrH%iVYl*|qH}5NVp8I6 zS=@{QkN@M5iT^=rgWIo#5SJOuASLB3K_+MsU%W-8#v2IReK%bkZDPQZ5tJqnfVzWh z^;$+eekV~d#)HX0C}?iwrhhzE(^fHUEsL^#G*O(}k9{VbKUPv!f&Evg?LnuLk~>EQ zTQ`xUpm5kux@I$-&;9a9UX&%sp{@|_jmVC34NMQ$J-zmItEXa7hk0flI(aFLCJ;GeDEcqv6x zaFkO^+>tB=RUHfNpTd1b!0%c;2C|nXAppbVTXyRn{}-iGywf8F&2C&>t0YcoK-M3E zunlb*+KfD*iEC2ui literal 0 HcmV?d00001 diff --git a/litellm/passthrough/utils.py b/litellm/passthrough/utils.py index fbbf9cd2581..74af02e5e62 100644 --- a/litellm/passthrough/utils.py +++ b/litellm/passthrough/utils.py @@ -9,7 +9,9 @@ from litellm.constants import PASS_THROUGH_HEADER_PREFIX class BasePassthroughUtils: @staticmethod def get_merged_query_parameters( - existing_url: httpx.URL, request_query_params: Dict[str, Union[str, list]] + existing_url: httpx.URL, + request_query_params: Dict[str, Union[str, list]], + default_query_params: Optional[Dict[str, Union[str, list]]] = None ) -> Dict[str, Union[str, List[str]]]: # Get the existing query params from the target URL existing_query_string = existing_url.query.decode("utf-8") @@ -19,8 +21,19 @@ class BasePassthroughUtils: updated_existing_query_params = { k: v[0] if len(v) == 1 else v for k, v in existing_query_params.items() } - # Merge the query params, giving priority to the existing ones - return {**request_query_params, **updated_existing_query_params} + + # Start with default query params (lowest priority) + merged_params = {} + if default_query_params: + merged_params.update(default_query_params) + + # Override with existing URL query params (medium priority) + merged_params.update(updated_existing_query_params) + + # Override with request query params (highest priority - client can override anything) + merged_params.update(request_query_params) + + return merged_params @staticmethod def forward_headers_from_request( diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index e94e41992d7..2a4fb89fd08 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -1909,6 +1909,10 @@ class PassThroughGenericEndpoint(LiteLLMPydanticObjectBase): default={}, description="Key-value pairs of headers to be forwarded with the request. You can set any key value pair here and it will be forwarded to your target endpoint", ) + default_query_params: dict = Field( + default={}, + description="Key-value pairs of default query parameters to be sent with every request to this endpoint. These can be overridden by client-provided query parameters. For example: {'key': 'default_value', 'api_version': '2023-01'}", + ) include_subpath: bool = Field( default=False, description="If True, requests to subpaths of the path will be forwarded to the target endpoint. For example, if the path is /bria and include_subpath is True, requests to /bria/v1/text-to-image/base/2.3 will be forwarded to the target endpoint.", diff --git a/litellm/proxy/pass_through_endpoints/pass_through_endpoints.py b/litellm/proxy/pass_through_endpoints/pass_through_endpoints.py index 20a446bd29b..76308e08187 100644 --- a/litellm/proxy/pass_through_endpoints/pass_through_endpoints.py +++ b/litellm/proxy/pass_through_endpoints/pass_through_endpoints.py @@ -600,6 +600,7 @@ async def pass_through_request( # noqa: PLR0915 forward_headers: Optional[bool] = False, merge_query_params: Optional[bool] = False, query_params: Optional[dict] = None, + default_query_params: Optional[dict] = None, stream: Optional[bool] = None, cost_per_request: Optional[float] = None, custom_llm_provider: Optional[str] = None, @@ -617,6 +618,7 @@ async def pass_through_request( # noqa: PLR0915 forward_headers: Whether to forward headers merge_query_params: Whether to merge query params query_params: The query params + default_query_params: The default query params to be applied if not overridden by client stream: Whether to stream the response cost_per_request: Optional field - cost per request to the target endpoint custom_llm_provider: Optional field - custom LLM provider for the endpoint @@ -649,13 +651,18 @@ async def pass_through_request( # noqa: PLR0915 forward_headers=forward_headers, ) - if merge_query_params: + # Apply default query parameters if provided, regardless of merge_query_params setting + if default_query_params or merge_query_params: + # Determine what to merge based on settings + request_params = dict(request.query_params) if merge_query_params else {} + # Create a new URL with the merged query params url = url.copy_with( query=urlencode( HttpPassThroughEndpointHelpers.get_merged_query_parameters( existing_url=url, - request_query_params=dict(request.query_params), + request_query_params=request_params, + default_query_params=default_query_params, ) ).encode("ascii") ) @@ -1080,6 +1087,7 @@ def create_pass_through_route( custom_llm_provider: Optional[str] = None, is_streaming_request: Optional[bool] = False, query_params: Optional[dict] = None, + default_query_params: Optional[dict] = None, guardrails: Optional[Dict[str, Any]] = None, ): # check if target is an adapter.py or a url @@ -1171,6 +1179,7 @@ def create_pass_through_route( "cost_per_request", cost_per_request ) param_guardrails = target_params.get("guardrails", None) + param_default_query_params = target_params.get("default_query_params", None) # Construct the full target URL with subpath if needed full_target = ( @@ -1208,6 +1217,7 @@ def create_pass_through_route( forward_headers=cast(Optional[bool], param_forward_headers), merge_query_params=cast(Optional[bool], param_merge_query_params), query_params=final_query_params, + default_query_params=param_default_query_params, stream=is_streaming_request or stream, custom_body=final_custom_body, cost_per_request=cast(Optional[float], param_cost_per_request), @@ -1849,6 +1859,7 @@ class InitPassThroughEndpointHelpers: endpoint_id: str, guardrails: Optional[dict] = None, methods: Optional[List[str]] = None, + default_query_params: Optional[dict] = None, ): """Add exact path route for pass-through endpoint""" # Default to all methods if none specified (backward compatibility) @@ -1886,6 +1897,7 @@ class InitPassThroughEndpointHelpers: merge_query_params, dependencies, cost_per_request=cost_per_request, + default_query_params=default_query_params, guardrails=guardrails, ), methods=methods, @@ -1903,6 +1915,7 @@ class InitPassThroughEndpointHelpers: "custom_headers": custom_headers, "forward_headers": forward_headers, "merge_query_params": merge_query_params, + "default_query_params": default_query_params, "dependencies": dependencies, "cost_per_request": cost_per_request, "guardrails": guardrails, @@ -1922,6 +1935,7 @@ class InitPassThroughEndpointHelpers: endpoint_id: str, guardrails: Optional[dict] = None, methods: Optional[List[str]] = None, + default_query_params: Optional[dict] = None, ): """Add wildcard route for sub-paths""" # Default to all methods if none specified (backward compatibility) @@ -1960,6 +1974,7 @@ class InitPassThroughEndpointHelpers: dependencies, include_subpath=True, cost_per_request=cost_per_request, + default_query_params=default_query_params, guardrails=guardrails, ), methods=methods, @@ -1977,6 +1992,7 @@ class InitPassThroughEndpointHelpers: "custom_headers": custom_headers, "forward_headers": forward_headers, "merge_query_params": merge_query_params, + "default_query_params": default_query_params, "dependencies": dependencies, "cost_per_request": cost_per_request, "guardrails": guardrails, @@ -2170,6 +2186,7 @@ async def initialize_pass_through_endpoints( ) _forward_headers = endpoint.get("forward_headers", None) _merge_query_params = endpoint.get("merge_query_params", None) + _default_query_params = endpoint.get("default_query_params", None) _auth = endpoint.get("auth", None) _dependencies = None if _auth is not None and str(_auth).lower() == "true": @@ -2207,6 +2224,7 @@ async def initialize_pass_through_endpoints( endpoint_id=endpoint_id, guardrails=_guardrails, methods=_methods, + default_query_params=_default_query_params, ) # Generate route key with methods for tracking @@ -2228,6 +2246,7 @@ async def initialize_pass_through_endpoints( endpoint_id=endpoint_id, guardrails=_guardrails, methods=_methods, + default_query_params=_default_query_params, ) visited_endpoints.add(f"{endpoint_id}:subpath:{_path}:{methods_str}") @@ -2546,6 +2565,7 @@ async def update_pass_through_endpoints( endpoint_id=updated_endpoint.id or endpoint_id or "", guardrails=getattr(updated_endpoint, "guardrails", None), methods=updated_endpoint.methods, + default_query_params=updated_endpoint.default_query_params, ) else: InitPassThroughEndpointHelpers.add_exact_path_route( @@ -2560,6 +2580,7 @@ async def update_pass_through_endpoints( endpoint_id=updated_endpoint.id or endpoint_id or "", guardrails=getattr(updated_endpoint, "guardrails", None), methods=updated_endpoint.methods, + default_query_params=updated_endpoint.default_query_params, ) return PassThroughEndpointResponse( @@ -2637,6 +2658,7 @@ async def create_pass_through_endpoints( endpoint_id=created_endpoint.id or "", guardrails=getattr(created_endpoint, "guardrails", None), methods=created_endpoint.methods, + default_query_params=created_endpoint.default_query_params, ) else: InitPassThroughEndpointHelpers.add_exact_path_route( @@ -2651,6 +2673,7 @@ async def create_pass_through_endpoints( endpoint_id=created_endpoint.id or "", guardrails=getattr(created_endpoint, "guardrails", None), methods=created_endpoint.methods, + default_query_params=created_endpoint.default_query_params, ) return PassThroughEndpointResponse(endpoints=[created_endpoint])