From 63ee307fae22ad03d3b9536b66e25adb4af4fa66 Mon Sep 17 00:00:00 2001 From: crypblizz Date: Tue, 17 Feb 2026 16:55:07 +1100 Subject: [PATCH] feat: sdk examples init --- README.md | 3 +- typescript/README.md | 3 +- typescript/bun.lockb | Bin 0 -> 35000 bytes typescript/openrouter-sdk/README.md | 28 ++++++++++ typescript/openrouter-sdk/package.json | 17 ++++++ typescript/openrouter-sdk/run-examples.ts | 50 ++++++++++++++++++ .../openrouter-sdk/src/basic/example.ts | 41 ++++++++++++++ typescript/openrouter-sdk/tsconfig.json | 16 ++++++ typescript/package.json | 3 +- 9 files changed, 158 insertions(+), 3 deletions(-) create mode 100755 typescript/bun.lockb create mode 100644 typescript/openrouter-sdk/README.md create mode 100644 typescript/openrouter-sdk/package.json create mode 100644 typescript/openrouter-sdk/run-examples.ts create mode 100644 typescript/openrouter-sdk/src/basic/example.ts create mode 100644 typescript/openrouter-sdk/tsconfig.json diff --git a/README.md b/README.md index 789f941..a5ddfa8 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ make typescript # Run TypeScript monorepo examples │ ├── fetch/ - Raw fetch API examples │ ├── ai-sdk-v5/ - Vercel AI SDK v5 examples │ ├── effect-ai/ - Effect-TS examples -│ └── openrouter-sdk/ - OpenRouter SDK examples (TODO) +│ └── openrouter-sdk/ - OpenRouter SDK examples ├── docs/ - Feature documentation └── Makefile - Unified command interface ``` @@ -79,6 +79,7 @@ bash curl/prompt-caching.sh cd typescript/fetch && bun examples cd typescript/ai-sdk-v5 && bun examples cd typescript/effect-ai && bun examples +cd typescript/openrouter-sdk && bun examples ``` ## Benefits diff --git a/typescript/README.md b/typescript/README.md index 2995dc5..7e8341c 100644 --- a/typescript/README.md +++ b/typescript/README.md @@ -8,7 +8,7 @@ A Bun monorepo containing OpenRouter examples across different TypeScript ecosys - **fetch/** - Raw fetch API examples - **ai-sdk-v5/** - Vercel AI SDK v5 examples (using ai v4.x package) - **effect-ai/** - Effect-TS AI examples -- **openrouter-sdk/** - OpenRouter TypeScript SDK examples (TODO) +- **openrouter-sdk/** - OpenRouter TypeScript SDK examples ## Prerequisites @@ -41,6 +41,7 @@ bun examples cd fetch && bun examples cd ai-sdk-v5 && bun examples cd effect-ai && bun examples +cd openrouter-sdk && bun examples ``` ## Workspace Benefits diff --git a/typescript/bun.lockb b/typescript/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..112a1907c79a8674c736991cfd796405b1f33958 GIT binary patch literal 35000 zcmeHQ2|QF^`yZMll1L&YON*8nyC|YXl!_KbS_}r0wVAQDjY6rkDwTF=PYZ2Yq(!BT z7DbCTt=iL`{?Bt~&dhBget!S={k)$~ryl2?d(QJc&w0*%?w#iv>KjK0_{KiGP-AXr zq@GVis1gt>ILtT5pBKz!`G@gCI6_vWiIO~n!8okUcJnKl-n*>Zz&qV7z8iB2C$wnk zZ=mK7h2Wvdc&IP{- z_`U*xFeaSK$cC^ogoPju-oFItn}WZs0fW&7`~~3afFBLMHu&D)Yk}`9@lC;R31J=Z zHNkHv@%I4^@}+=p2!4MB216D6*f2l1!(iM2LivbX!4Pf*;lbde{9J#3uCI{6xX?(P zt_2hwofR2O@}`fsgv&30MKaVLpt5P-&=_C;=!K+yIFl9l*!?ci)?c%e?}^cz-hZsHa2_3fq$fgi&5n|K}cX9w;xH{AqQ2 zQP(aBT%Q7kPKRAg;@(ZH2sl4e{h2|l7VXvI42PYwc`t0D9J6S_0^?E19roDSG!C=P ze>!CO!F4NwH%&O+A=7=H!?er+_Y8BEbG4jO#vebt&Dp;7NbA)_R$0AsFT5FR&)Tdw zzEt<6>f6*MZF^o^v#nIqGVlH1qViAXK@SWY$gh!`syltduH`!HCLL4^0~*KY#I}Ap z&R(Bob^n=D->G>&%jLEsH*RTcim_v>+W|Qt?QV?ID@%zxcXFRl+pPR^zorM6^|^%9kHL#qW5+-W`hz zl(G&6-q~|-?f%b8oO`I9*l;}X(eyfA37j?SU!YmJ2aC$3vLAbMm;FVEdilg6nYOfVjP%ckf??_Q_d-QKi+L&21? z?t`s{zwQ$@t?AoMx9(laS(3T@1JXXcBMny*sqt1XAf{r z^V*l@_2K9Gcy{R3`{nZ&HcKx!XcK4s?27va>skErUANzCmw#*gE}dm)#9OBmVtMJ+ zm#Ed&31K6=b}D*sdGW!+jKd?eW7f{!vOMd?)AWvWj`WoqT2|C|9I1a84(sJ`RHqyO z*+RQ-2m$C~4C#GwY_)$$I$Pkk1b&nUhSWOq#{y&bdhnkG{vN;&!xNP^j3u>lM1BRh zumXM}JNmV8gx?k}tbrfKI4b|T@{54K7x1I*VVtV9Bl#D=1(qN65929=SxW@Me+C5h ztOvgVWawTG{wUxdQV;&q!0%cQ{+7`2>%;F4{DbO|e-`k&)Puk3AM!g(+KC{L!{_?d zveD3z5&lHDhx0crs#cez{dvH83;RDZ!BV8wj_{`gKdz6U8BpU71Z(98e-SXy$1lXG zjU)UD&~fSGS8e%;{`|Q@-@w{r_){9f?+EvC9raW6AA>~x=^#HD|8NY2B=oWC(s#Kd`|Hjd=~75Hs{AM=Lwah>IlfyKBp@RNCu z_pSN;va?*RP3%CG>!Hdq@+@_7&Zr2j!xGO!%AafIIm7F`1* z`9nXbbN(BE-xT;!ZY+Oo9m)S1@OP8s5B;dl`fCaUHsLn`{<@AIj=+!WKa?Bh!CE^a z|90Rf^^dx*YyL4X>5PE<5$~VyUj+V9_2BOWha;ow!Jh#9W9z|xANalN!QZC^gW*#T z{tV!+Pxmh#@@YkpPG=@dX(0b(W1^gcM;Lig7`jo#BoR{JHi7Dy1 zb)A2E0e@fM$8`gaU$q^>NdHd&eye)qe-ij{{epP^B!4+=@p&k&yKwzlTSw&Y2mECG zukF}{c@X~jz>oU}yr&0LSN)xo@FO4A9W2Lc#Dznz;6xwME|57|5OZ;e*y60_=)l( zFTtrTe-C)bfah139x*_jwRYI&ks=u-v8``p5&*ALZ)fV}3A< zQ)P$d{6jggJeV)2iSnViRNcX|5^As3K@v8S#CHN89o@&V8P|5$zAS*y(S5{+F^Iym z#Yk{<@sS_)@RUOz>#;Ww=GRXWb^#w9`dG(te@L?&)2m(U)-|(>jn0Pl$?C1SX79NkC0+0wOr zFC=v6<9+PoD3`J%{I`9ABEZ$uUQus<+vmUCKC4u#NJFJ+;9vLycybIeE*+XVJ1zE! z+Uus3gYNe#Q@Q23v+rH4l5!Kn=C{o?a%N8c-nVpfzz(aV=e)BUy$prdciMe>qoc+f z-6mCU;D&F#6K7AM;bPw*j=68F>x;p|4deaV>x|X2z0ReFo~U|f z6WHHzMWt!WmzxF#9<93ac;P0)QysHMJp3c3%0cm(hf0vs2%^ zjC0>Y!^JUyIOeR8&D&OXoY|>K72RC;g918yhf|YrSRNIVa1-UEL0Kex@<*#P>@M>uhE@=+kf& z2q^f>H0Kj>NgfxUOmDyPNXyw@Ro%>b<<7rwe0;xqJ@QrDdrd7!S)aYxKIlq;<+IK< zE#I<|Do@63X{+beMx(&Aq^olX4HxGy;+O&U%ej8(uXc66FsIL#R`+KljGG^Kh?6<{ zaFX_xtIf0)l_V#{ly&aS8>qQu?rpRI z)nb*thlVmPl`@BHUI&d!4rT*5lKEjR#>~w;pj0-Zu~vT2#r1;^%b!yke!2YG9xanJ zv$j_|&T{rP{u0z$-aV(iuB*wY?k&4-3CL7U&mC=ar(o*Tqw*a2O_aP0MZ|^UQmJE# zoPDY+;u2PFc&2#u(PXW&7gt-YJ!Gr6(LA;HDn%ooh zCa)HpPF%|PTqZSt;e0|IGuSQIZv6QpP6M_TE{#^2lAk;y=6IrQlfzzy z{6-%ORz&x=3xNZ7xE%%OIaCvwuj_xFZ1Xl!rWPUzNwr`-Vm1I0pX}v9G~#rqnT4Dag(E zo~HI_{DO`<>^xlT{riZ_E58xFSG=V@9cCzMdOy*238?W7ShztG4$t)I&||KYURO`FgFN%Tk-5 zW&;m&eia;6B(L@*cmB!g_b(VEzq9?!H@KuYXWC2es}Ah_5?s^+5^>DM&608}eQtS% zFWVQ}*vS^YNLpKD^ZNN94c<*o1oZfDkxSKXQM z{nqrt^4Bj~3Ku2kn|02epGcFJ>=zK8*{sjyP7^MEF-z>}JcRvyhM^;K+{MRVGC7-= z6O4_U<}N>d;;5^o_3eNr7KH`|iMyL=^_BBc&CZ;DVAGRJ-}gS&qT#}EmeesHK0I_S zH_q?<;FRJ8B5$7GqJ?s*L;8$;vZ%rF%k3sMe&hW)w}EJyawC18NfxCaryo~sT~%XM>YFMQ2O8| zTL)b1e%w4Y=Rka7QC4t+D>PjCzLgo`zWmr{?KPU6Hg21_R@rTIq;HztC&%_qEBh>p z`83J>^s_f-F54xCuS%I`8n8Zmw9bjSYxeqm+1^1_^Xr%5kv`TmT--Mj$4vE4IJ@*H zTl=2Qf;(Gweop4!tJ7h{ zl-_ZJ*~aescVDLAwjrS4Gx?_0VSS4Z@5mdy=B>9wL}{D%jOQJbO1f__EBV)rg( zn!~T`zGsy_WoKtq^L)b=Pp^$Fa6fI+dYJ0Nuw1*53uw4_of@8RaGp9pd9T^xM_wM;f+8TQk?@=q($uU}85bol9rscf4$5xk%;q z`gSb>Xt=mvCXN|&!KHF}%j`nkvyt5c9>sZv9(dCy*PJ==T;l5a394?VKFrGRS6H~M zbZPMoW#1F>neDy~l+U}OSEX$m^e%m=*+3eu9svcPY4pnG_3cBQ<<_N+4Q!fme}O~a zhBGXRCf?}TbLzN9{PR!k7xNBVo<6oFxW9hI4o}ojxVtGifA;L2FF#i8V+Z*cMWxR^I`vJlQbeKh zICYne^12FKmD?}&D<`(=OT#swEXNJ4uqo?!C=U2vLJUaBmCg$`3;}yHs zM4J|S4Jt`&l4Cozb)L?!iGj}}L~D-EPs?NVzTKj`^|K~jqN#C`p(p}OLpts$r(&M6 z$HutsyIs6?6?R_vctTUT*55`qd2z3zZwJls`k9wIX+Xz%JLmqdn{qMy|!v`6fTjToY1YTR{?W9)_li`t}l9vt02x@*3L+za9OO>qhO$DT)z zt7uam(woASr{>}gblfQ_?6V*GRYmq4^WGq3i`v9PB38P;ZlbQiw9t;blRnK!DLHuk z&D)nZ_I+{N)UV%??y+}0HaT)m=zEG9syH<7wpyYGT$gmD<1V{->t;iN_tuojlXhgZUTEF|w%#+5mZm;#8 z-cq6m#5JPh_FC|Kv4@V_&AsQ8k{c9dULD}Pe_qQYry_DsuXx;MvwuLsijhr58J?ZY zz5CoU{O;ZOfLDhHPCj&HoBoIy^W8SQnMdJ@=S_0{gz(I)ik{nAY|Jn>aUN0H+_B{@ zZSNN?tTnr>?=)EVwBp)w`;Hy%d%Aj_-+iX#M(tIb4Gs^pkxR|c>*rY@I4yV;*SQA` zw=-Q{h3oH`_vgNi?dGNbsq$r$xQV7}4M&eZpwWGSR_4RJOHW^|xFtNJ^7-CDgGTKw zizB(4{k78u`&7;NGHY&!3r4;6&~UrZac7QTCv`s0^(xdqRh&ObVNKlR?Y<-1nol~i zE`Q~d*j+_t;Yz(lw*zm?nOoJ${AKKgk?FB>BLtO`UA(5g60N>0ZVzHTbfx3I|I%{H z@*8En#(BD0r#4u3E%Ho;`<>JQ2i|CY+PgTd^ucjWpHu2_lY-uUFi2jhI=7@jRSWH^ z9u}Ppzl?S3IwLWLCNGPQYo3-lJ^WeLN3((avIgaE!xP=Kd$stw>{9{DwY&5FwP_}a zE6y)JIZStKbKMmV>-G)lqHrL^>+%3EHTxab-cz2q&~Vvw+{>@*w%H!G-`DudIZMIS z>6PQYR|Zx-=(yM9>(_ql?6RP37w?aY{yO17Bb8fOQ+8}{d1`8OIWzZkvE1#Fj~Q~N zA8EM8bX*0$YiITx>%Jpab^N#G@0NU<;WJ3trg4{msA-CyM_%om)#dgg6*cwQ0Y3R< z*=1?*yKku)Y=1G+edye;hEv?zuzS&PP3XAR>Iz@28lH?l`p)rM;-;LPjan8>d;4l) z=BwPD^CGhYA1vs(;NiO%<;qMh?}Tg5&sS3?2X)G0Mf>Nbyx4eSlcFXK*OZQ%zsciF zKchYFjb~>+jrus}b7}mVlAOt-Ou|1MUb$_6UxyrzSDyz9$Bmz9I@clUbYXzq+Q=J}&DK7M zd9wDU%60iE3)*$@NEzJ7wxGp|&d#F;UfQA7rD5pMc3MiTJy&i8IB#&y8&s~cPtSez ziK11Myf8X|PtJ)Ep2=x4)MX0GcHC#b&}Uy~PCjM4-oA2Y%=P%81snE!YrVgH%)qw= z$KMvV(F%Pap+Ow-F?*aPB~q9ed_(eOIK!{KYOk; zYMsXL%HdPE&pyALm3GN=!dvAFjRqgM`Atot2i#+IlcItiHXqp-cr<_U&Yh9!_n&GR z4PVDCo#9e8=l$-@^3PYTztH(>*y5aW{|4)K#ySn2#XDFMsnp2u>+1zCbjmD*M-`5X z*AL=(2%eot9dl}+y^7uWc;8zJzM4LBeDXJRx&8ghm@~6&=InXgS~&20_Mp>a4k~?A zTa%Wi6;T#4jL~YIR`;Q=?C*#klrFJO7q9!o^QMgy7395=;uvkb_Ib;Z$3{Ax@6jQ$ zSncc9LoS_M;wW+NYw6OWwB@PD94WE-xv%TR8u@@s|9T8hfrROUm7UDM^9S zgBZ6v9d|+Yr(GxM0er@^QslSW~a8j zqa@cU;r?ZZWpACYTwFS7Lyiwm*`V*6`R1*ZcV7fpk^-K&oe1p zaxRSE%-c`QV)oyBayR4n%?0~1zpA!ye6j!9_^a!5-(B0X)RX^7d=_jy6~ifYKrr?D$8k$&0Qt!4CiBb z7ASSh0RJ(Wlg!3`c^P@diS28>aMDWst9HE0`&5&@7oGH3KjvA#uBuYAgP+-ld%^mxDGW-Yt+yV-Vl;ec%+S$#al#0(yl!8^v=>s_|@44@hiJl-P*-d937FNlewv9dDs~Jgr3Vi z0_?R_mS;yKb_tHkYwWIbm4@5v2i%YwS)K2<;8>oldUSDbOW|#HWJJj5%v{dLjt@7N z#ve&ja(aJyYxJU+7X#O@TxWgI3u|oIW+VStlZZ6YxuvJ*^F?nu?#U-ZgY-|8ZSZcs zcSNGc!HkfP@x|v;kEiD@T)ez@pL@;5s7~a(?)KpQ`&K)%dM=BY>#yb)m-;$Bd*cpf z(A_6P2him0L&xpEJB?AI@@&x6*)vc0SJ|=3`Z1&d11%A)PbiKy~*G?eT35qtMz7%4Hj%Sx!ke+ z6|;+_fgkLvY;!ef zW?og_gqb$0@=971wpv)pQOe8S-Qwn`>ET^+H1kiowbmDAv{%gN5@#^Z5%p?owYns{;+UKMl9umo!{>*F@@=?JJ^KN3Pxr zTkVN{S%qeg_q%$jd^3pLyUe4p);8i!dxC-vMw!yQD& zeLDAgNyoYGUk_+>#$j8;?f4s+yJN=)(;vKSHT$_;ZrJ@Dqfa=G>9c3Mt_lAe2Yzni zTD(I$O@AM&c*(=u(M>NOqT%9mY2ui%7o*K%F6)0`_Uxj@d%yl;_}NJjkBqe3Z&%vH zrr&glD%T&s;>6-Lqa*H3WL?i(lDup4_43DiMkF$WEAGvGdYDPWbtRzSGjA)3Y?Mo8 zPI0WvYH!x%>qozNrcc)t6_>`&o%FqLMuQus12%A0x=c7fb?WueZxW1yJsW*;>6O&n zK}liP__?V|`7~TNI_^%3)?P1GEaGKnm^JcR7CWlUDOq?|8kWhmupvksTUex7kj^9YV*Q5~-h?S(*B1(co3KB3*O! z6UEiAujr-S@d~m7y$*J*>~!9<1sn|0&I)7A2_EF8fjoXzeIVu zT4eL`l>0$<5?7voVrm?)RyZf~h3mw@`Mo-R@GxI`&W__bz1hu!&S|ZZLEhgvoJY|S zUmW`H{Dq}I!-p3Z!UaDM0`Ojd=)WV$-(3Hj8o+ko2oD9}{8;1-KAd}t{#){3zd)it z1OB&V!Sa&dqA!Mx89b*F{o8r`#rvy)|8)&iGll)H7wfP5e>L!*(LkL$P@Nh6Gv)aI z&85zTt~0~`ul#?}|7zf`2L5W`uLk~V;I9V$YT$og1AiA-|NC`V%MzTH9C`;17c(f? z3i!TkUZ_CG2@YlxQ=IJKd@i@Ao|%cBfEUXR^Y5x>p~ng41%!tA!+9aPs_$Zl*ZBN{ z-h@aP&)vvAcyFnsY!&Vh0H%F3N`TVE&jN;-egsfb@X$fee5Q zf!YJX*(vqAf~Mf(`}+9a2b?dWy+`V|;TquMyEe%{lYyoHO$8DG@qvUukw7Lura+y6 z@I5UyPzNAZrz_eE@g z@I4HCX99mW=>;?zXbjL;pm9LnKpY?+AYULqAbeKf4-^0t2*d*#4-^E1b%ynU`qu%P z4HPB0)*1m9;53SRZmg4S*DYNWEa4pq^3RsCN}0Qf|}} z>WlE=JM)Ow90=<|69};|9`8E=p)MVP@IB%-KzJYP72ku#cek-@dO)T?c;6TZ>#GY8 z^5_HU0iiB1-T0%0A~aS#LF`6Kr*Oxl2?n|;SPk{7wgHbSm3 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 0) { + process.exit(1); +} diff --git a/typescript/openrouter-sdk/src/basic/example.ts b/typescript/openrouter-sdk/src/basic/example.ts new file mode 100644 index 0000000..479766a --- /dev/null +++ b/typescript/openrouter-sdk/src/basic/example.ts @@ -0,0 +1,41 @@ +import { OpenRouter } from '@openrouter/sdk'; + +async function main() { + if (!process.env.OPENROUTER_API_KEY) { + throw new Error('OPENROUTER_API_KEY environment variable is not set'); + } + + const openRouter = new OpenRouter({ + apiKey: process.env.OPENROUTER_API_KEY, + httpReferer: 'https://github.com/openrouter/examples', + xTitle: 'OpenRouter SDK Example', + }); + + console.log('=== OpenRouter SDK Quickstart Example ===\n'); + + const completion = await openRouter.chat.send({ + chatGenerationParams: { + model: 'openai/gpt-5.2', + messages: [ + { + role: 'user', + content: 'Write a haiku about TypeScript.', + }, + ], + stream: false, + }, + }); + + const firstChoice = completion.choices?.[0]?.message?.content; + console.log('Response:'); + if (typeof firstChoice === 'string') { + console.log(firstChoice); + } else { + console.log(JSON.stringify(firstChoice, null, 2)); + } +} + +main().catch((error) => { + console.error('Error running OpenRouter SDK example:', error); + process.exit(1); +}); diff --git a/typescript/openrouter-sdk/tsconfig.json b/typescript/openrouter-sdk/tsconfig.json new file mode 100644 index 0000000..822a727 --- /dev/null +++ b/typescript/openrouter-sdk/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "ESNext", + "lib": ["ES2022"], + "moduleResolution": "bundler", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "types": ["bun-types"] + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/typescript/package.json b/typescript/package.json index 7a3b0c5..50e7f1a 100644 --- a/typescript/package.json +++ b/typescript/package.json @@ -13,7 +13,8 @@ "shared", "fetch", "ai-sdk-v5", - "effect-ai" + "effect-ai", + "openrouter-sdk" ], "devDependencies": { "@types/bun": "1.3.2",