omnigateway 0.1.7 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +27 -33
  2. package/bin/omni.js +917 -161
  3. package/gateway.js +3247 -300
  4. package/package.json +1 -1
  5. package/public/assets/{Chip-C69u2U_b.js → Chip-BB_5C1Zp.js} +1 -1
  6. package/public/assets/Confirm-B6aAiVbT.js +4 -0
  7. package/public/assets/{CopyValue-CJy2T0H6.js → CopyValue-CRQDLo7k.js} +4 -4
  8. package/public/assets/{Field-Sc8mDqJv.js → Field-uHZxl4fI.js} +8 -8
  9. package/public/assets/Lamp-B-5SjXbG.js +25 -0
  10. package/public/assets/{Meter-C0nUftAa.js → Meter-DI_BRUKt.js} +1 -1
  11. package/public/assets/Modal-CI6jk2D4.js +82 -0
  12. package/public/assets/{Rack-CMqGBP4I.js → Rack-D1WJswv3.js} +23 -19
  13. package/public/assets/{Readout-Dv2dZWtI.js → Readout-BocZ2HXP.js} +5 -5
  14. package/public/assets/{States-D55MhqMx.js → States-Bbiu5cHE.js} +10 -10
  15. package/public/assets/{Table-DBB3jdgi.js → Table-CdPWxYaz.js} +1 -1
  16. package/public/assets/Toggle-CiLC67Dw.js +39 -0
  17. package/public/assets/TokenBreakdown-B96iPBm9.js +28 -0
  18. package/public/assets/_app-BBOF6A0T.js +1 -0
  19. package/public/assets/_app.accounts-BNkhpvaB.js +54 -0
  20. package/public/assets/_app.console-Daz4aKhf.js +44 -0
  21. package/public/assets/_app.index-LO6d38oe.js +62 -0
  22. package/public/assets/{_app.keys-BX8k8COP.js → _app.keys-kBqLqoFf.js} +8 -8
  23. package/public/assets/_app.logs-_wYNS47N.js +32 -0
  24. package/public/assets/_app.models-Cjng8ohC.js +144 -0
  25. package/public/assets/_app.settings-a0FKyQAi.js +38 -0
  26. package/public/assets/{_app.usage-BRhEvwVr.js → _app.usage-D3KtgLrC.js} +32 -29
  27. package/public/assets/dist-C-IbPRiV.js +1 -0
  28. package/public/assets/index-PW6EvVh5.js +170 -0
  29. package/public/assets/{login-DaC-wVpI.js → login-CTvH_KAd.js} +8 -8
  30. package/public/assets/queries-D2o-X8Pj.js +144 -0
  31. package/public/assets/{trash-2--aH2iKg-.js → trash-2-BcZb-sCT.js} +1 -1
  32. package/public/index.html +2 -2
  33. package/public/assets/Lamp-7jD_9929.js +0 -25
  34. package/public/assets/Modal-CiVHSJmm.js +0 -82
  35. package/public/assets/Toggle-BoGjb5oi.js +0 -42
  36. package/public/assets/_app-p5Mz7sXD.js +0 -1
  37. package/public/assets/_app.accounts-B5wMO9TH.js +0 -51
  38. package/public/assets/_app.console-Bka7AkiL.js +0 -25
  39. package/public/assets/_app.index-MnQuadXb.js +0 -61
  40. package/public/assets/_app.logs-DD-sd4fn.js +0 -33
  41. package/public/assets/_app.models-CezFNL6y.js +0 -144
  42. package/public/assets/_app.settings-D1taAt8B.js +0 -16
  43. package/public/assets/index-vCuK1fRQ.js +0 -170
  44. package/public/assets/queries-2E6-CboE.js +0 -144
@@ -1,16 +0,0 @@
1
- import{A as e,F as t,I as n,Mt as r,N as i,S as a,W as o,Xt as s,j as c,jt as l,x as u,z as d}from"./queries-2E6-CboE.js";import{t as f}from"./Rack-CMqGBP4I.js";import{n as p,t as m}from"./Field-Sc8mDqJv.js";import{t as h}from"./Meter-C0nUftAa.js";import{a as g,i as _,n as v,r as y}from"./States-D55MhqMx.js";var b=s(r(),1),x=l(),S=[{id:`tier`,label:`Tier`,blurb:`How strongly a lower tier is preferred.`},{id:`health`,label:`Health`,blurb:`Penalty for recent failures and an open breaker.`},{id:`quota`,label:`Quota`,blurb:`Preference for accounts keeping ahead of their window's burn rate.`},{id:`cost`,label:`Cost`,blurb:`Preference for the cheaper target of the candidates.`},{id:`latency`,label:`Latency`,blurb:`Preference for the faster observed first token.`},{id:`recency`,label:`Recency`,blurb:`Preference for accounts that have been idle.`}],C=[{id:`maxAttempts`,label:`Attempts per request`,hint:`How many candidates dispatch may try before giving up. 1 disables failover.`,unit:`attempts`,step:1,min:1},{id:`requestDeadlineMs`,label:`Request deadline`,hint:`How long a single client request may take across all attempts.`,unit:`ms`,step:1e3,min:1},{id:`breakerThreshold`,label:`Breaker threshold`,hint:`Consecutive failures on one account and model before it is taken out of rotation.`,unit:`failures`,step:1,min:1},{id:`breakerCooldownMs`,label:`Breaker cooldown`,hint:`Base wait before a tripped account is probed again. Doubles per extra failure.`,unit:`ms`,step:1e3,min:1},{id:`logRetentionDays`,label:`Log retention`,hint:`How long request rows are kept before maintenance prunes them.`,unit:`days`,step:1,min:1},{id:`quotaPollIntervalMs`,label:`Quota poll interval`,hint:`How often each account's provider is asked for its remaining quota. 0 disables polling. Takes effect on restart.`,unit:`ms`,step:6e4,min:0}],w=o.div`
2
- display: grid;
3
- grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
4
- gap: ${({theme:e})=>e.space(3)};
5
- `,T=o(n)`
6
- gap: 6px;
7
- `,E=o.p`
8
- font-size: 11px;
9
- color: ${({theme:e})=>e.color.inkDim};
10
- `,D=o.p`
11
- font-size: 12px;
12
- color: ${({theme:e})=>e.color.down};
13
- `,O=o.p`
14
- font-size: 12px;
15
- color: ${({theme:e})=>e.color.ok};
16
- `;function k(e){let t={};for(let n of S)t[`w.${n.id}`]=String(e.weights[n.id]);for(let n of C)t[n.id]=String(e[n.id]);return t}function A(e){let t={};for(let n of S){let r=(e[`w.${n.id}`]??``).trim(),i=Number(r);if(r.length===0||!Number.isFinite(i))return{ok:!1,problem:`${n.label} must be a number.`};t[n.id]=i}let n={};for(let t of C){let r=(e[t.id]??``).trim(),i=Number(r);if(r.length===0||!Number.isInteger(i)||i<t.min)return{ok:!1,problem:`${t.label} must be a whole number of ${t.min} or more.`};n[t.id]=i}return n.maxAttempts>10?{ok:!1,problem:`Attempts per request cannot exceed 10.`}:{ok:!0,settings:{weights:t,...n}}}function j(){let r=a(),o=u(),[s,l]=(0,b.useState)({}),[j,M]=(0,b.useState)(null),[N,P]=(0,b.useState)(!1);(0,b.useEffect)(()=>{r.data!==void 0&&l(k(r.data))},[r.data]);let F=Math.max(1e-4,...S.map(e=>Math.abs(Number(s[`w.${e.id}`])||0)));return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(f,{legend:`Settings`,title:`Routing and retention`,summary:`These apply to every request the gateway routes. Changes take effect on the next request; nothing is restarted.`,actions:(0,x.jsx)(d,{type:`button`,$variant:`primary`,disabled:o.isPending||r.isLoading,onClick:()=>{P(!1);let e=A(s);if(!e.ok){M(e.problem);return}M(null),o.mutate(e.settings,{onSuccess:()=>P(!0),onError:e=>M(_(e))})},children:o.isPending?`Saving…`:`Save changes`})}),r.isError?(0,x.jsx)(g,{legend:`Settings`,children:(0,x.jsx)(v,{error:r.error,onRetry:()=>void r.refetch()})}):r.isLoading?(0,x.jsx)(g,{legend:`Settings`,children:(0,x.jsx)(y,{rows:6})}):(0,x.jsxs)(n,{$gap:4,children:[(0,x.jsx)(g,{legend:`Scoring weights`,meta:`relative to each other`,footer:(0,x.jsxs)(i,{children:[(0,x.jsx)(e,{children:`A candidate's score is the sum of each term times its weight, then multiplied by the account and target weights.`}),(0,x.jsx)(t,{})]}),children:(0,x.jsx)(w,{children:S.map(e=>{let t=Number(s[`w.${e.id}`])||0;return(0,x.jsxs)(T,{children:[(0,x.jsx)(m,{label:e.label,children:t=>(0,x.jsx)(p,{...t,type:`number`,step:.5,value:s[`w.${e.id}`]??``,onChange:t=>l({...s,[`w.${e.id}`]:t.target.value})})}),(0,x.jsx)(h,{fraction:Math.abs(t)/F,height:4,tone:`var(--accent)`,label:`${e.label} weight ${t}`}),(0,x.jsx)(E,{children:e.blurb})]},e.id)})})}),(0,x.jsx)(g,{legend:`Limits`,children:(0,x.jsx)(w,{children:C.map(t=>(0,x.jsx)(T,{children:(0,x.jsx)(m,{label:t.label,hint:t.hint,children:n=>(0,x.jsxs)(i,{$gap:2,children:[(0,x.jsx)(p,{...n,type:`number`,min:t.min,step:t.step,value:s[t.id]??``,onChange:e=>l({...s,[t.id]:e.target.value})}),(0,x.jsx)(e,{children:t.unit})]})})},t.id))})}),j===null?null:(0,x.jsx)(D,{role:`alert`,children:j}),N&&j===null?(0,x.jsx)(O,{role:`status`,children:`Settings saved.`}):null,(0,x.jsx)(g,{legend:`Known limits`,children:(0,x.jsxs)(n,{$gap:2,children:[(0,x.jsxs)(i,{$gap:2,children:[(0,x.jsx)(c,{$dim:!0,children:`rate limits`}),(0,x.jsx)(E,{children:`Per-key rate limits are counted inside one gateway process and reset when it restarts. They are not shared across instances.`})]}),(0,x.jsxs)(i,{$gap:2,children:[(0,x.jsx)(c,{$dim:!0,children:`logs`}),(0,x.jsx)(E,{children:`Request rows record routing and token counts only. Prompts, responses, and credentials are never written.`})]})]})})]})]})}var M=j;export{M as component};