Compare commits

..

2733 Commits

Author SHA1 Message Date
github-merge-queue[bot]
779d182ece Publish onyx-0.4.29.tgz 2026-02-18 15:24:00 +00:00
github-merge-queue[bot]
9246384dc2 Publish onyx-0.4.29.tgz 2026-02-18 05:49:01 +00:00
github-merge-queue[bot]
0eb18888ae Publish onyx-0.4.29.tgz 2026-02-18 05:38:59 +00:00
github-merge-queue[bot]
1a6d2d4a2f Publish onyx-0.4.29.tgz 2026-02-18 05:16:55 +00:00
github-merge-queue[bot]
acbd97599a Publish onyx-0.4.29.tgz 2026-02-18 05:09:53 +00:00
jmelahman
58807b7be4 Publish onyx-0.4.29.tgz 2026-02-18 04:57:13 +00:00
github-merge-queue[bot]
afa55dfea8 Publish onyx-0.4.29.tgz 2026-02-18 04:34:50 +00:00
github-merge-queue[bot]
0bba288ffc Publish onyx-0.4.29.tgz 2026-02-18 03:54:26 +00:00
github-merge-queue[bot]
a20f9c3b09 Publish onyx-0.4.29.tgz 2026-02-18 02:15:21 +00:00
jmelahman
be7fb3bc84 Publish onyx-0.4.29.tgz 2026-02-18 01:52:55 +00:00
github-merge-queue[bot]
00ab2cb7f7 Publish onyx-0.4.29.tgz 2026-02-18 01:51:47 +00:00
github-merge-queue[bot]
9879ed606e Publish onyx-0.4.29.tgz 2026-02-18 01:04:40 +00:00
github-merge-queue[bot]
5f08263b92 Publish onyx-0.4.29.tgz 2026-02-18 00:48:42 +00:00
jmelahman
ca64fd709b Publish onyx-0.4.29.tgz 2026-02-18 00:26:07 +00:00
jmelahman
f7147e5219 Publish onyx-0.4.29.tgz 2026-02-18 00:23:54 +00:00
github-merge-queue[bot]
a8791d9636 Publish onyx-0.4.29.tgz 2026-02-18 00:07:06 +00:00
github-merge-queue[bot]
e70728dda1 Publish onyx-0.4.29.tgz 2026-02-18 00:04:39 +00:00
jmelahman
be6257e503 Publish onyx-0.4.29.tgz 2026-02-17 23:38:27 +00:00
github-merge-queue[bot]
6d034bead8 Publish onyx-0.4.29.tgz 2026-02-17 23:35:21 +00:00
jmelahman
74d9738bd3 Publish onyx-0.4.29.tgz 2026-02-17 23:12:54 +00:00
github-merge-queue[bot]
c163a83c14 Publish onyx-0.4.29.tgz 2026-02-17 23:02:44 +00:00
github-merge-queue[bot]
313f2b2e5b Publish onyx-0.4.29.tgz 2026-02-17 22:51:06 +00:00
github-merge-queue[bot]
f1fd9f92d0 Publish onyx-0.4.29.tgz 2026-02-17 22:40:16 +00:00
github-merge-queue[bot]
79cd778dba Publish onyx-0.4.29.tgz 2026-02-17 22:01:31 +00:00
github-merge-queue[bot]
3f055c7fa3 Publish onyx-0.4.29.tgz 2026-02-17 22:00:32 +00:00
github-merge-queue[bot]
46f921dce0 Publish onyx-0.4.29.tgz 2026-02-17 21:43:26 +00:00
github-merge-queue[bot]
d13d16d24f Publish onyx-0.4.29.tgz 2026-02-17 21:22:56 +00:00
github-merge-queue[bot]
6c740746a5 Publish onyx-0.4.28.tgz 2026-02-17 21:17:25 +00:00
github-merge-queue[bot]
d62b7be5a2 Publish onyx-0.4.28.tgz 2026-02-17 20:28:45 +00:00
github-merge-queue[bot]
112a192373 Publish onyx-0.4.28.tgz 2026-02-17 19:50:24 +00:00
github-merge-queue[bot]
9d47b3264d Publish onyx-0.4.28.tgz 2026-02-17 18:32:52 +00:00
github-merge-queue[bot]
c8b3b6ffe6 Publish onyx-0.4.28.tgz 2026-02-17 18:25:20 +00:00
github-merge-queue[bot]
49372ec265 Publish onyx-0.4.28.tgz 2026-02-17 18:23:58 +00:00
github-merge-queue[bot]
625452850a Publish onyx-0.4.28.tgz 2026-02-17 18:20:04 +00:00
justin-tahara
95a413c36b Publish onyx-0.4.28.tgz 2026-02-17 15:20:25 +00:00
github-merge-queue[bot]
b0b9e12d3d Publish onyx-0.4.27.tgz 2026-02-17 08:49:49 +00:00
github-merge-queue[bot]
88cb357e13 Publish onyx-0.4.27.tgz 2026-02-17 05:29:47 +00:00
Danelegend
35b179e1df Publish onyx-0.4.27.tgz 2026-02-17 02:54:17 +00:00
github-merge-queue[bot]
79c3b141e3 Publish onyx-0.4.27.tgz 2026-02-17 02:44:19 +00:00
github-merge-queue[bot]
6ecbe5e64a Publish onyx-0.4.27.tgz 2026-02-17 01:28:38 +00:00
github-merge-queue[bot]
1b48e04303 Publish onyx-0.4.27.tgz 2026-02-17 00:37:30 +00:00
github-merge-queue[bot]
6239a2ec29 Publish onyx-0.4.27.tgz 2026-02-17 00:03:23 +00:00
github-merge-queue[bot]
213e69783f Publish onyx-0.4.27.tgz 2026-02-16 23:20:30 +00:00
github-merge-queue[bot]
3ad3fd94b9 Publish onyx-0.4.27.tgz 2026-02-16 18:30:57 +00:00
github-merge-queue[bot]
18f6eea110 Publish onyx-0.4.27.tgz 2026-02-16 11:29:53 +00:00
github-merge-queue[bot]
adb86590b6 Publish onyx-0.4.27.tgz 2026-02-16 03:09:32 +00:00
github-merge-queue[bot]
d8f125535e Publish onyx-0.4.27.tgz 2026-02-16 00:52:50 +00:00
github-merge-queue[bot]
e9d59640d3 Publish onyx-0.4.27.tgz 2026-02-15 23:46:56 +00:00
github-merge-queue[bot]
cb8dd7a2ff Publish onyx-0.4.27.tgz 2026-02-15 20:19:57 +00:00
github-merge-queue[bot]
d6696a09f8 Publish onyx-0.4.27.tgz 2026-02-14 02:51:44 +00:00
github-merge-queue[bot]
45d8214d77 Publish onyx-0.4.27.tgz 2026-02-14 02:36:47 +00:00
github-merge-queue[bot]
b9047451db Publish onyx-0.4.27.tgz 2026-02-14 02:21:30 +00:00
github-merge-queue[bot]
17cabe213a Publish onyx-0.4.27.tgz 2026-02-14 02:11:49 +00:00
github-merge-queue[bot]
89153d3bd0 Publish onyx-0.4.27.tgz 2026-02-14 02:04:21 +00:00
github-merge-queue[bot]
588aefdabb Publish onyx-0.4.27.tgz 2026-02-14 01:45:37 +00:00
github-merge-queue[bot]
df370f71bf Publish onyx-0.4.27.tgz 2026-02-14 01:24:51 +00:00
github-merge-queue[bot]
803e4d4471 Publish onyx-0.4.27.tgz 2026-02-14 01:19:47 +00:00
github-merge-queue[bot]
9ce23097cd Publish onyx-0.4.27.tgz 2026-02-14 00:38:29 +00:00
github-merge-queue[bot]
fa7d7ed306 Publish onyx-0.4.27.tgz 2026-02-14 00:27:47 +00:00
github-merge-queue[bot]
7e29d36183 Publish onyx-0.4.27.tgz 2026-02-13 23:56:23 +00:00
github-merge-queue[bot]
f33291804b Publish onyx-0.4.27.tgz 2026-02-13 23:44:28 +00:00
github-merge-queue[bot]
82cfa6b786 Publish onyx-0.4.27.tgz 2026-02-13 23:39:36 +00:00
github-merge-queue[bot]
590c222d29 Publish onyx-0.4.27.tgz 2026-02-13 23:12:53 +00:00
github-merge-queue[bot]
4949334bdf Publish onyx-0.4.27.tgz 2026-02-13 22:52:56 +00:00
github-merge-queue[bot]
0dbf47d9f7 Publish onyx-0.4.27.tgz 2026-02-13 22:24:31 +00:00
github-merge-queue[bot]
101e794c24 Publish onyx-0.4.27.tgz 2026-02-13 22:08:57 +00:00
justin-tahara
35785391f7 Publish onyx-0.4.27.tgz 2026-02-13 21:38:49 +00:00
github-merge-queue[bot]
f0320db1a0 Publish onyx-0.4.27.tgz 2026-02-13 21:36:08 +00:00
github-merge-queue[bot]
d413019cbe Publish onyx-0.4.27.tgz 2026-02-13 21:28:24 +00:00
github-merge-queue[bot]
9fd5d09210 Publish onyx-0.4.27.tgz 2026-02-13 21:24:03 +00:00
github-merge-queue[bot]
7c28c44bc3 Publish onyx-0.4.27.tgz 2026-02-13 21:20:36 +00:00
github-merge-queue[bot]
a0358e62ee Publish onyx-0.4.27.tgz 2026-02-13 21:16:35 +00:00
github-merge-queue[bot]
5b87e1764e Publish onyx-0.4.27.tgz 2026-02-13 21:11:08 +00:00
github-merge-queue[bot]
e30a6b77be Publish onyx-0.4.27.tgz 2026-02-13 21:02:06 +00:00
jmelahman
6ae8912ee3 Publish onyx-0.4.27.tgz 2026-02-13 20:51:10 +00:00
jmelahman
4a2291955a Publish onyx-0.4.27.tgz 2026-02-13 20:30:41 +00:00
jmelahman
f902a19bd0 Publish onyx-0.4.27.tgz 2026-02-13 19:07:19 +00:00
jmelahman
997feadce8 Publish onyx-0.4.27.tgz 2026-02-13 18:08:16 +00:00
github-merge-queue[bot]
75b67e05bd Publish onyx-0.4.27.tgz 2026-02-13 17:28:31 +00:00
github-merge-queue[bot]
1a55d58eb4 Publish onyx-0.4.27.tgz 2026-02-13 17:27:42 +00:00
github-merge-queue[bot]
755f7637de Publish onyx-0.4.27.tgz 2026-02-13 07:46:20 +00:00
github-merge-queue[bot]
f87866d65d Publish onyx-0.4.27.tgz 2026-02-13 04:36:49 +00:00
jmelahman
99a4ca57ed Publish onyx-0.4.27.tgz 2026-02-13 03:54:08 +00:00
yuhongsun96
6239aa82a1 Publish onyx-0.4.27.tgz 2026-02-13 03:45:29 +00:00
github-merge-queue[bot]
c63906edf8 Publish onyx-0.4.27.tgz 2026-02-13 02:58:51 +00:00
github-merge-queue[bot]
36dd724fd8 Publish onyx-0.4.27.tgz 2026-02-13 02:10:35 +00:00
github-merge-queue[bot]
b5bcb926b4 Publish onyx-0.4.27.tgz 2026-02-13 01:48:09 +00:00
github-merge-queue[bot]
1189593d57 Publish onyx-0.4.27.tgz 2026-02-13 01:44:57 +00:00
github-merge-queue[bot]
fdc60214c4 Publish onyx-0.4.27.tgz 2026-02-13 01:25:15 +00:00
github-merge-queue[bot]
0344fab93e Publish onyx-0.4.27.tgz 2026-02-13 00:25:48 +00:00
github-merge-queue[bot]
bd4dca91a6 Publish onyx-0.4.27.tgz 2026-02-13 00:11:21 +00:00
github-merge-queue[bot]
e599f08a76 Publish onyx-0.4.27.tgz 2026-02-12 23:52:37 +00:00
github-merge-queue[bot]
2384cf79a3 Publish onyx-0.4.27.tgz 2026-02-12 23:50:22 +00:00
github-merge-queue[bot]
a85e85a003 Publish onyx-0.4.27.tgz 2026-02-12 23:20:20 +00:00
github-merge-queue[bot]
6434db854a Publish onyx-0.4.27.tgz 2026-02-12 23:19:53 +00:00
github-merge-queue[bot]
0cddc70073 Publish onyx-0.4.27.tgz 2026-02-12 23:07:48 +00:00
github-merge-queue[bot]
8df682c3fa Publish onyx-0.4.27.tgz 2026-02-12 23:05:13 +00:00
github-merge-queue[bot]
437b3bc1fb Publish onyx-0.4.27.tgz 2026-02-12 22:59:12 +00:00
github-merge-queue[bot]
fde8078b2f Publish onyx-0.4.27.tgz 2026-02-12 22:49:08 +00:00
github-merge-queue[bot]
2e93b63f7f Publish onyx-0.4.27.tgz 2026-02-12 22:38:22 +00:00
github-merge-queue[bot]
862e515648 Publish onyx-0.4.27.tgz 2026-02-12 22:00:44 +00:00
github-merge-queue[bot]
b3ee2e3865 Publish onyx-0.4.27.tgz 2026-02-12 21:47:25 +00:00
github-merge-queue[bot]
65ed4fa92e Publish onyx-0.4.27.tgz 2026-02-12 21:42:17 +00:00
github-merge-queue[bot]
c163ec26c5 Publish onyx-0.4.27.tgz 2026-02-12 20:41:40 +00:00
github-merge-queue[bot]
7736287b32 Publish onyx-0.4.27.tgz 2026-02-12 20:31:28 +00:00
github-merge-queue[bot]
90ecd9ed9e Publish onyx-0.4.27.tgz 2026-02-12 20:20:28 +00:00
jmelahman
1dfec3c872 Publish onyx-0.4.27.tgz 2026-02-12 19:16:21 +00:00
github-merge-queue[bot]
35dbff6f43 Publish onyx-0.4.27.tgz 2026-02-12 19:01:36 +00:00
github-merge-queue[bot]
18b858aa10 Publish onyx-0.4.27.tgz 2026-02-12 18:47:46 +00:00
github-merge-queue[bot]
8a5deac14b Publish onyx-0.4.27.tgz 2026-02-12 18:01:49 +00:00
github-merge-queue[bot]
d79ef3a8d5 Publish onyx-0.4.27.tgz 2026-02-12 17:27:09 +00:00
github-merge-queue[bot]
a3f3d5fac8 Publish onyx-0.4.27.tgz 2026-02-12 14:42:27 +00:00
github-merge-queue[bot]
2c3de42224 Publish onyx-0.4.27.tgz 2026-02-12 09:16:55 +00:00
github-merge-queue[bot]
da1b32edfa Publish onyx-0.4.27.tgz 2026-02-12 09:10:43 +00:00
github-merge-queue[bot]
98e15027e8 Publish onyx-0.4.27.tgz 2026-02-12 09:09:19 +00:00
github-merge-queue[bot]
2f65739265 Publish onyx-0.4.27.tgz 2026-02-12 08:41:01 +00:00
github-merge-queue[bot]
11584840e7 Publish onyx-0.4.27.tgz 2026-02-12 08:37:15 +00:00
github-merge-queue[bot]
a6552e1047 Publish onyx-0.4.27.tgz 2026-02-12 06:24:20 +00:00
github-merge-queue[bot]
42a5d2a6c4 Publish onyx-0.4.27.tgz 2026-02-12 03:44:27 +00:00
github-merge-queue[bot]
70848307da Publish onyx-0.4.27.tgz 2026-02-12 02:13:09 +00:00
github-merge-queue[bot]
6f8ade19b1 Publish onyx-0.4.27.tgz 2026-02-12 02:10:50 +00:00
github-merge-queue[bot]
06e8bd7f5b Publish onyx-0.4.27.tgz 2026-02-12 01:45:22 +00:00
github-merge-queue[bot]
e2ac492837 Publish onyx-0.4.27.tgz 2026-02-12 01:23:18 +00:00
github-merge-queue[bot]
bf3b91e104 Publish onyx-0.4.27.tgz 2026-02-12 00:35:29 +00:00
github-merge-queue[bot]
4ea0a41b94 Publish onyx-0.4.27.tgz 2026-02-12 00:04:12 +00:00
github-merge-queue[bot]
1a03568d27 Publish onyx-0.4.27.tgz 2026-02-12 00:00:54 +00:00
github-merge-queue[bot]
36cbf8ed67 Publish onyx-0.4.27.tgz 2026-02-11 23:48:56 +00:00
github-merge-queue[bot]
26c9271a01 Publish onyx-0.4.27.tgz 2026-02-11 23:37:18 +00:00
github-merge-queue[bot]
a4d7388798 Publish onyx-0.4.27.tgz 2026-02-11 23:18:49 +00:00
jmelahman
eb02aeaa49 Publish onyx-0.4.27.tgz 2026-02-11 23:10:19 +00:00
jmelahman
b4be07c7f5 Publish onyx-0.4.27.tgz 2026-02-11 23:05:16 +00:00
github-merge-queue[bot]
502e20d1f2 Publish onyx-0.4.27.tgz 2026-02-11 23:04:45 +00:00
jmelahman
0aa8a333f3 Publish onyx-0.4.27.tgz 2026-02-11 22:41:46 +00:00
jmelahman
2c8258ac7b Publish onyx-0.4.27.tgz 2026-02-11 22:36:15 +00:00
github-merge-queue[bot]
49a92d296e Publish onyx-0.4.27.tgz 2026-02-11 22:23:55 +00:00
github-merge-queue[bot]
523f4b4294 Publish onyx-0.4.27.tgz 2026-02-11 22:01:23 +00:00
github-merge-queue[bot]
a29d1ac904 Publish onyx-0.4.27.tgz 2026-02-11 21:53:20 +00:00
github-merge-queue[bot]
73da445b17 Publish onyx-0.4.27.tgz 2026-02-11 21:17:23 +00:00
github-merge-queue[bot]
cd17e1e51e Publish onyx-0.4.26.tgz 2026-02-11 21:14:22 +00:00
github-merge-queue[bot]
d1818e3005 Publish onyx-0.4.26.tgz 2026-02-11 20:20:08 +00:00
github-merge-queue[bot]
4a59880c0e Publish onyx-0.4.26.tgz 2026-02-11 20:06:46 +00:00
github-merge-queue[bot]
7d5940a810 Publish onyx-0.4.26.tgz 2026-02-11 19:42:21 +00:00
github-merge-queue[bot]
db68b6ed67 Publish onyx-0.4.26.tgz 2026-02-11 19:24:40 +00:00
github-merge-queue[bot]
2daa6020c1 Publish onyx-0.4.25.tgz 2026-02-11 18:55:53 +00:00
github-merge-queue[bot]
1dd0ef54e4 Publish onyx-0.4.25.tgz 2026-02-11 18:47:11 +00:00
github-merge-queue[bot]
e41369c06f Publish onyx-0.4.25.tgz 2026-02-11 18:32:54 +00:00
github-merge-queue[bot]
fa60c97d8b Publish onyx-0.4.25.tgz 2026-02-11 18:17:05 +00:00
github-merge-queue[bot]
c4497bfdaf Publish onyx-0.4.25.tgz 2026-02-11 16:20:38 +00:00
github-merge-queue[bot]
a7f6c4cd3f Publish onyx-0.4.25.tgz 2026-02-11 06:36:54 +00:00
github-merge-queue[bot]
1424d8a3a6 Publish onyx-0.4.25.tgz 2026-02-11 06:33:28 +00:00
github-merge-queue[bot]
9524bbbd5f Publish onyx-0.4.25.tgz 2026-02-11 04:41:18 +00:00
github-merge-queue[bot]
acfcb6b869 Publish onyx-0.4.25.tgz 2026-02-11 03:46:24 +00:00
github-merge-queue[bot]
618e5dbb25 Publish onyx-0.4.25.tgz 2026-02-11 02:53:23 +00:00
github-merge-queue[bot]
5575f2e78c Publish onyx-0.4.25.tgz 2026-02-11 02:41:39 +00:00
github-merge-queue[bot]
6278cbaa2e Publish onyx-0.4.25.tgz 2026-02-11 02:36:02 +00:00
github-merge-queue[bot]
2978c21f87 Publish onyx-0.4.25.tgz 2026-02-11 02:24:21 +00:00
github-merge-queue[bot]
2b6f880d3a Publish onyx-0.4.25.tgz 2026-02-11 02:22:24 +00:00
github-merge-queue[bot]
b6959842d5 Publish onyx-0.4.25.tgz 2026-02-11 02:15:15 +00:00
github-merge-queue[bot]
79ff22778c Publish onyx-0.4.25.tgz 2026-02-11 01:20:47 +00:00
github-merge-queue[bot]
8d974940e5 Publish onyx-0.4.25.tgz 2026-02-11 01:10:42 +00:00
github-merge-queue[bot]
f1b0b4d87d Publish onyx-0.4.25.tgz 2026-02-11 01:06:28 +00:00
github-merge-queue[bot]
719e997ec9 Publish onyx-0.4.25.tgz 2026-02-11 01:02:31 +00:00
github-merge-queue[bot]
d8dce7a2dc Publish onyx-0.4.25.tgz 2026-02-10 23:18:40 +00:00
github-merge-queue[bot]
96cd7e111d Publish onyx-0.4.25.tgz 2026-02-10 22:49:51 +00:00
github-merge-queue[bot]
c458bae6b7 Publish onyx-0.4.25.tgz 2026-02-10 21:49:09 +00:00
github-merge-queue[bot]
aa628f192b Publish onyx-0.4.25.tgz 2026-02-10 20:09:25 +00:00
github-merge-queue[bot]
b4c0bc2172 Publish onyx-0.4.25.tgz 2026-02-10 18:59:19 +00:00
github-merge-queue[bot]
3c5c4dd32f Publish onyx-0.4.25.tgz 2026-02-10 18:44:44 +00:00
jmelahman
4cbe10dc77 Publish onyx-0.4.25.tgz 2026-02-10 16:10:45 +00:00
github-merge-queue[bot]
ecd87ea0f9 Publish onyx-0.4.25.tgz 2026-02-10 04:28:20 +00:00
github-merge-queue[bot]
ce69796fea Publish onyx-0.4.25.tgz 2026-02-10 04:14:13 +00:00
github-merge-queue[bot]
03db362615 Publish onyx-0.4.25.tgz 2026-02-10 03:44:39 +00:00
github-merge-queue[bot]
ce559d0646 Publish onyx-0.4.25.tgz 2026-02-10 03:26:29 +00:00
github-merge-queue[bot]
1c8d5ba39f Publish onyx-0.4.25.tgz 2026-02-10 02:56:51 +00:00
github-merge-queue[bot]
671902c020 Publish onyx-0.4.25.tgz 2026-02-10 02:11:44 +00:00
github-merge-queue[bot]
67e085cca9 Publish onyx-0.4.25.tgz 2026-02-10 02:11:05 +00:00
github-merge-queue[bot]
d78b762dd6 Publish onyx-0.4.25.tgz 2026-02-10 01:28:19 +00:00
github-merge-queue[bot]
57b72a9159 Publish onyx-0.4.25.tgz 2026-02-10 00:49:18 +00:00
github-merge-queue[bot]
b9266d6aaf Publish onyx-0.4.25.tgz 2026-02-09 23:39:34 +00:00
github-merge-queue[bot]
6fc09154e0 Publish onyx-0.4.25.tgz 2026-02-09 23:06:11 +00:00
github-merge-queue[bot]
52684a0e69 Publish onyx-0.4.25.tgz 2026-02-09 22:59:04 +00:00
github-merge-queue[bot]
9ac8c465f4 Publish onyx-0.4.25.tgz 2026-02-09 22:19:33 +00:00
github-merge-queue[bot]
c571cf7502 Publish onyx-0.4.25.tgz 2026-02-09 22:12:03 +00:00
github-merge-queue[bot]
be1a341a06 Publish onyx-0.4.25.tgz 2026-02-09 21:57:42 +00:00
github-merge-queue[bot]
69f07ac734 Publish onyx-0.4.25.tgz 2026-02-09 21:51:10 +00:00
github-merge-queue[bot]
c45ef02d36 Publish onyx-0.4.25.tgz 2026-02-09 21:33:31 +00:00
jmelahman
a058e87e17 Publish onyx-0.4.25.tgz 2026-02-09 21:21:03 +00:00
jmelahman
a12bc75c02 Publish onyx-0.4.25.tgz 2026-02-09 21:20:35 +00:00
jmelahman
f50ed1ae89 Publish onyx-0.4.25.tgz 2026-02-09 21:19:25 +00:00
github-merge-queue[bot]
ac210a438c Publish onyx-0.4.25.tgz 2026-02-09 21:12:55 +00:00
github-merge-queue[bot]
637d2070ce Publish onyx-0.4.25.tgz 2026-02-09 20:52:10 +00:00
github-merge-queue[bot]
e3ce46182b Publish onyx-0.4.25.tgz 2026-02-09 20:41:54 +00:00
jmelahman
6c307f3aa8 Publish onyx-0.4.25.tgz 2026-02-09 20:35:08 +00:00
jmelahman
6a883d8521 Publish onyx-0.4.25.tgz 2026-02-09 20:19:25 +00:00
jmelahman
b6df242ea5 Publish onyx-0.4.25.tgz 2026-02-09 20:18:29 +00:00
jmelahman
6dd2c1d850 Publish onyx-0.4.25.tgz 2026-02-09 20:15:38 +00:00
jmelahman
5f8e11a826 Publish onyx-0.4.25.tgz 2026-02-09 20:14:27 +00:00
github-merge-queue[bot]
0ad5e5cd21 Publish onyx-0.4.25.tgz 2026-02-09 18:20:00 +00:00
github-merge-queue[bot]
12dbf9e8bb Publish onyx-0.4.25.tgz 2026-02-09 18:05:23 +00:00
github-merge-queue[bot]
3bcecebb81 Publish onyx-0.4.25.tgz 2026-02-09 18:00:06 +00:00
github-merge-queue[bot]
db71b7e767 Publish onyx-0.4.25.tgz 2026-02-09 17:33:47 +00:00
github-merge-queue[bot]
5844b7eb15 Publish onyx-0.4.25.tgz 2026-02-09 08:02:04 +00:00
github-merge-queue[bot]
b7a70c920a Publish onyx-0.4.25.tgz 2026-02-09 08:00:51 +00:00
github-merge-queue[bot]
0188be28aa Publish onyx-0.4.25.tgz 2026-02-09 07:33:14 +00:00
github-merge-queue[bot]
bbf68bdb08 Publish onyx-0.4.25.tgz 2026-02-09 04:36:06 +00:00
github-merge-queue[bot]
97061e12f6 Publish onyx-0.4.25.tgz 2026-02-09 04:19:06 +00:00
github-merge-queue[bot]
8aa94186c6 Publish onyx-0.4.25.tgz 2026-02-09 00:37:18 +00:00
github-merge-queue[bot]
26791128c1 Publish onyx-0.4.25.tgz 2026-02-08 22:34:56 +00:00
github-merge-queue[bot]
31c6e2bcb4 Publish onyx-0.4.25.tgz 2026-02-08 19:59:29 +00:00
github-merge-queue[bot]
352349de22 Publish onyx-0.4.25.tgz 2026-02-07 08:47:16 +00:00
github-merge-queue[bot]
47dd0f69df Publish onyx-0.4.25.tgz 2026-02-07 07:06:06 +00:00
github-merge-queue[bot]
e1a397167d Publish onyx-0.4.25.tgz 2026-02-07 03:45:16 +00:00
github-merge-queue[bot]
78dd178e1e Publish onyx-0.4.25.tgz 2026-02-07 00:43:22 +00:00
github-merge-queue[bot]
a97bee3b33 Publish onyx-0.4.25.tgz 2026-02-07 00:41:34 +00:00
github-merge-queue[bot]
196044b228 Publish onyx-0.4.25.tgz 2026-02-06 22:14:55 +00:00
github-merge-queue[bot]
651f350f4a Publish onyx-0.4.25.tgz 2026-02-06 22:04:51 +00:00
github-merge-queue[bot]
1cb72818e9 Publish onyx-0.4.25.tgz 2026-02-06 21:54:20 +00:00
github-merge-queue[bot]
8bef2b1390 Publish onyx-0.4.25.tgz 2026-02-06 21:07:31 +00:00
github-merge-queue[bot]
bee47a662e Publish onyx-0.4.25.tgz 2026-02-06 18:42:53 +00:00
github-merge-queue[bot]
ba004e8b1f Publish onyx-0.4.25.tgz 2026-02-06 18:35:46 +00:00
github-merge-queue[bot]
05cffec4ad Publish onyx-0.4.25.tgz 2026-02-06 18:10:19 +00:00
github-merge-queue[bot]
c4e8ee5a62 Publish onyx-0.4.25.tgz 2026-02-06 18:02:50 +00:00
github-merge-queue[bot]
e565646c7c Publish onyx-0.4.25.tgz 2026-02-06 17:15:45 +00:00
github-merge-queue[bot]
1ce5a79c4c Publish onyx-0.4.25.tgz 2026-02-06 04:46:15 +00:00
github-merge-queue[bot]
577798e692 Publish onyx-0.4.25.tgz 2026-02-06 04:05:52 +00:00
github-merge-queue[bot]
7452038633 Publish onyx-0.4.25.tgz 2026-02-06 03:39:35 +00:00
github-merge-queue[bot]
96432b453c Publish onyx-0.4.25.tgz 2026-02-06 03:35:51 +00:00
github-merge-queue[bot]
c0ee11d972 Publish onyx-0.4.25.tgz 2026-02-06 02:52:23 +00:00
github-merge-queue[bot]
b41dc2739e Publish onyx-0.4.25.tgz 2026-02-06 02:48:21 +00:00
github-merge-queue[bot]
f0fb7135ec Publish onyx-0.4.25.tgz 2026-02-06 02:28:34 +00:00
github-merge-queue[bot]
af47628af8 Publish onyx-0.4.25.tgz 2026-02-06 01:48:11 +00:00
github-merge-queue[bot]
729c06ab42 Publish onyx-0.4.25.tgz 2026-02-06 00:54:52 +00:00
github-merge-queue[bot]
b11a325de8 Publish onyx-0.4.25.tgz 2026-02-06 00:21:02 +00:00
wenxi-onyx
2d063ececa Publish onyx-0.4.25.tgz 2026-02-05 23:33:39 +00:00
github-merge-queue[bot]
269aa5c18a Publish onyx-0.4.25.tgz 2026-02-05 23:32:26 +00:00
github-merge-queue[bot]
9df4268cdc Publish onyx-0.4.25.tgz 2026-02-05 23:22:58 +00:00
github-merge-queue[bot]
e5da468272 Publish onyx-0.4.25.tgz 2026-02-05 22:54:04 +00:00
github-merge-queue[bot]
5c904c3c7c Publish onyx-0.4.25.tgz 2026-02-05 21:20:57 +00:00
github-merge-queue[bot]
4e0538fdd7 Publish onyx-0.4.25.tgz 2026-02-05 20:59:08 +00:00
github-merge-queue[bot]
2c5f08bf69 Publish onyx-0.4.25.tgz 2026-02-05 20:49:07 +00:00
github-merge-queue[bot]
47d820b661 Publish onyx-0.4.25.tgz 2026-02-05 20:43:21 +00:00
github-merge-queue[bot]
9d940c2188 Publish onyx-0.4.25.tgz 2026-02-05 20:31:38 +00:00
github-merge-queue[bot]
98d60df338 Publish onyx-0.4.25.tgz 2026-02-05 20:24:21 +00:00
github-merge-queue[bot]
46f2e27180 Publish onyx-0.4.25.tgz 2026-02-05 20:19:22 +00:00
github-merge-queue[bot]
e3052641fd Publish onyx-0.4.25.tgz 2026-02-05 20:15:26 +00:00
github-merge-queue[bot]
4ce8739334 Publish onyx-0.4.25.tgz 2026-02-05 19:52:47 +00:00
github-merge-queue[bot]
45fd853cd2 Publish onyx-0.4.25.tgz 2026-02-05 19:46:23 +00:00
github-merge-queue[bot]
653dbafc66 Publish onyx-0.4.25.tgz 2026-02-05 19:23:45 +00:00
github-merge-queue[bot]
3b26b355d3 Publish onyx-0.4.25.tgz 2026-02-05 19:05:55 +00:00
github-merge-queue[bot]
867e87eedb Publish onyx-0.4.25.tgz 2026-02-05 18:53:43 +00:00
github-merge-queue[bot]
d1daa7d397 Publish onyx-0.4.25.tgz 2026-02-05 18:40:15 +00:00
github-merge-queue[bot]
6c51b940d2 Publish onyx-0.4.25.tgz 2026-02-05 18:34:39 +00:00
github-merge-queue[bot]
2884a622d8 Publish onyx-0.4.25.tgz 2026-02-05 18:05:10 +00:00
github-merge-queue[bot]
8a26ae3f4e Publish onyx-0.4.25.tgz 2026-02-05 07:09:19 +00:00
yuhongsun96
b3a730bbe6 Publish onyx-0.4.25.tgz 2026-02-05 05:08:26 +00:00
github-merge-queue[bot]
91a70f8028 Publish onyx-0.4.25.tgz 2026-02-05 02:57:07 +00:00
github-merge-queue[bot]
83eb7fc872 Publish onyx-0.4.25.tgz 2026-02-05 02:34:59 +00:00
github-merge-queue[bot]
a279b61e07 Publish onyx-0.4.25.tgz 2026-02-05 01:29:33 +00:00
github-merge-queue[bot]
a11404203d Publish onyx-0.4.25.tgz 2026-02-05 01:21:32 +00:00
github-merge-queue[bot]
1b9b4b1121 Publish onyx-0.4.25.tgz 2026-02-05 00:47:16 +00:00
github-merge-queue[bot]
303bc834fb Publish onyx-0.4.25.tgz 2026-02-05 00:41:49 +00:00
github-merge-queue[bot]
fceae97798 Publish onyx-0.4.25.tgz 2026-02-04 23:23:26 +00:00
github-merge-queue[bot]
21a115eedc Publish onyx-0.4.25.tgz 2026-02-04 22:24:50 +00:00
github-merge-queue[bot]
71085bd575 Publish onyx-0.4.25.tgz 2026-02-04 21:58:03 +00:00
github-merge-queue[bot]
b16155bf06 Publish onyx-0.4.25.tgz 2026-02-04 21:45:29 +00:00
github-merge-queue[bot]
e9276ff234 Publish onyx-0.4.25.tgz 2026-02-04 21:38:55 +00:00
github-merge-queue[bot]
7b18d86c47 Publish onyx-0.4.25.tgz 2026-02-04 20:02:05 +00:00
github-merge-queue[bot]
b8bde12676 Publish onyx-0.4.25.tgz 2026-02-04 19:03:39 +00:00
github-merge-queue[bot]
e48c059aed Publish onyx-0.4.25.tgz 2026-02-04 17:52:47 +00:00
github-merge-queue[bot]
92c10aa013 Publish onyx-0.4.25.tgz 2026-02-04 09:48:30 +00:00
yuhongsun96
ea7659cc89 Publish onyx-0.4.25.tgz 2026-02-04 07:13:24 +00:00
github-merge-queue[bot]
e974bc1ce1 Publish onyx-0.4.25.tgz 2026-02-04 07:04:54 +00:00
github-merge-queue[bot]
5f2f26ef1e Publish onyx-0.4.25.tgz 2026-02-04 05:22:41 +00:00
github-merge-queue[bot]
4c3d5ad778 Publish onyx-0.4.25.tgz 2026-02-04 04:56:03 +00:00
github-merge-queue[bot]
e9b35e0bc6 Publish onyx-0.4.25.tgz 2026-02-04 03:27:27 +00:00
github-merge-queue[bot]
a1d9f52450 Publish onyx-0.4.25.tgz 2026-02-04 01:58:58 +00:00
github-merge-queue[bot]
542c3130ac Publish onyx-0.4.25.tgz 2026-02-04 01:03:32 +00:00
github-merge-queue[bot]
0eb1d970d9 Publish onyx-0.4.25.tgz 2026-02-04 00:33:32 +00:00
yuhongsun96
f2f8869707 Publish onyx-0.4.25.tgz 2026-02-03 23:29:53 +00:00
yuhongsun96
646c1456ae Publish onyx-0.4.25.tgz 2026-02-03 23:22:53 +00:00
yuhongsun96
2e7f67fddb Publish onyx-0.4.25.tgz 2026-02-03 23:08:23 +00:00
github-merge-queue[bot]
be12647305 Publish onyx-0.4.25.tgz 2026-02-03 22:54:35 +00:00
github-merge-queue[bot]
aa7cef1576 Publish onyx-0.4.25.tgz 2026-02-03 22:47:14 +00:00
yuhongsun96
e1d49a428d Publish onyx-0.4.25.tgz 2026-02-03 22:40:54 +00:00
github-merge-queue[bot]
d17cdcda72 Publish onyx-0.4.25.tgz 2026-02-03 19:48:19 +00:00
github-merge-queue[bot]
465955eeeb Publish onyx-0.4.25.tgz 2026-02-03 19:31:30 +00:00
github-merge-queue[bot]
ad0e069d3d Publish onyx-0.4.25.tgz 2026-02-03 18:02:31 +00:00
github-merge-queue[bot]
4952e0464c Publish onyx-0.4.25.tgz 2026-02-03 17:59:17 +00:00
nmgarza5
7efd66e877 Publish onyx-0.4.25.tgz 2026-02-03 16:37:10 +00:00
jessicasingh7
13c91ab5d0 Publish onyx-0.4.25.tgz 2026-02-03 08:36:15 +00:00
github-merge-queue[bot]
0e2f840f09 Publish onyx-0.4.25.tgz 2026-02-03 06:41:46 +00:00
github-merge-queue[bot]
2dd73186b4 Publish onyx-0.4.25.tgz 2026-02-03 05:19:04 +00:00
github-merge-queue[bot]
b280b00169 Publish onyx-0.4.25.tgz 2026-02-03 04:12:33 +00:00
github-merge-queue[bot]
3fe1a5e9f9 Publish onyx-0.4.25.tgz 2026-02-03 02:54:31 +00:00
github-merge-queue[bot]
47da373fce Publish onyx-0.4.25.tgz 2026-02-03 02:19:59 +00:00
github-merge-queue[bot]
d8cd54a580 Publish onyx-0.4.25.tgz 2026-02-03 02:05:35 +00:00
github-merge-queue[bot]
34418253d4 Publish onyx-0.4.25.tgz 2026-02-03 01:47:09 +00:00
github-merge-queue[bot]
dfc1117179 Publish onyx-0.4.25.tgz 2026-02-03 01:35:36 +00:00
github-merge-queue[bot]
1e215f1ee2 Publish onyx-0.4.25.tgz 2026-02-03 01:22:57 +00:00
github-merge-queue[bot]
c639e5de9d Publish onyx-0.4.25.tgz 2026-02-03 00:53:54 +00:00
github-merge-queue[bot]
d8d1aa1f37 Publish onyx-0.4.25.tgz 2026-02-03 00:52:28 +00:00
github-merge-queue[bot]
6291605ddb Publish onyx-0.4.25.tgz 2026-02-03 00:33:59 +00:00
github-merge-queue[bot]
1fb928ac07 Publish onyx-0.4.25.tgz 2026-02-03 00:22:08 +00:00
github-merge-queue[bot]
fb74017631 Publish onyx-0.4.25.tgz 2026-02-03 00:17:48 +00:00
github-merge-queue[bot]
115a9f2b76 Publish onyx-0.4.25.tgz 2026-02-02 23:51:47 +00:00
github-merge-queue[bot]
044a5f0dfa Publish onyx-0.4.25.tgz 2026-02-02 23:49:26 +00:00
github-merge-queue[bot]
045f72aaf9 Publish onyx-0.4.25.tgz 2026-02-02 23:12:22 +00:00
github-merge-queue[bot]
e96084b4a9 Publish onyx-0.4.24.tgz 2026-02-02 18:54:11 +00:00
github-merge-queue[bot]
5211983bf0 Publish onyx-0.4.23.tgz 2026-02-02 18:41:27 +00:00
github-merge-queue[bot]
28534088d4 Publish onyx-0.4.23.tgz 2026-02-02 17:43:08 +00:00
github-merge-queue[bot]
91586da94a Publish onyx-0.4.23.tgz 2026-02-02 15:04:01 +00:00
github-merge-queue[bot]
467742bfd8 Publish onyx-0.4.23.tgz 2026-02-02 15:00:37 +00:00
Danelegend
bd36aab974 Publish onyx-0.4.23.tgz 2026-02-02 03:36:56 +00:00
yuhongsun96
a189025bf8 Publish onyx-0.4.23.tgz 2026-02-02 01:18:45 +00:00
github-merge-queue[bot]
de1ed3466c Publish onyx-0.4.23.tgz 2026-02-01 22:45:47 +00:00
github-merge-queue[bot]
6209d81930 Publish onyx-0.4.23.tgz 2026-02-01 22:33:34 +00:00
github-merge-queue[bot]
80e0942e85 Publish onyx-0.4.23.tgz 2026-02-01 21:37:27 +00:00
github-merge-queue[bot]
dab1083187 Publish onyx-0.4.23.tgz 2026-02-01 20:33:54 +00:00
github-merge-queue[bot]
704cffca9b Publish onyx-0.4.23.tgz 2026-02-01 20:11:10 +00:00
github-merge-queue[bot]
7bd5b0876d Publish onyx-0.4.23.tgz 2026-02-01 17:58:37 +00:00
github-merge-queue[bot]
cbaf5fdb8a Publish onyx-0.4.23.tgz 2026-02-01 09:01:17 +00:00
yuhongsun96
23a8f45511 Publish onyx-0.4.23.tgz 2026-02-01 07:45:40 +00:00
yuhongsun96
e4e6dd51f5 Publish onyx-0.4.23.tgz 2026-02-01 07:43:38 +00:00
yuhongsun96
3f7eb20075 Publish onyx-0.4.23.tgz 2026-02-01 07:17:26 +00:00
yuhongsun96
75983de1c3 Publish onyx-0.4.23.tgz 2026-02-01 07:12:45 +00:00
yuhongsun96
282c87a508 Publish onyx-0.4.23.tgz 2026-02-01 06:58:56 +00:00
yuhongsun96
2d66c5d775 Publish onyx-0.4.23.tgz 2026-02-01 06:24:22 +00:00
yuhongsun96
0daa7c9997 Publish onyx-0.4.23.tgz 2026-02-01 05:30:04 +00:00
yuhongsun96
db19521361 Publish onyx-0.4.23.tgz 2026-02-01 04:22:06 +00:00
github-merge-queue[bot]
cad802c6e4 Publish onyx-0.4.23.tgz 2026-02-01 03:42:51 +00:00
yuhongsun96
d2d5632e4c Publish onyx-0.4.23.tgz 2026-02-01 03:27:01 +00:00
github-merge-queue[bot]
031131e812 Publish onyx-0.4.23.tgz 2026-02-01 03:22:38 +00:00
github-merge-queue[bot]
16c0c7322c Publish onyx-0.4.23.tgz 2026-02-01 03:12:11 +00:00
github-merge-queue[bot]
9ebeb4d178 Publish onyx-0.4.23.tgz 2026-02-01 02:43:09 +00:00
github-merge-queue[bot]
ce6d7ed6c8 Publish onyx-0.4.23.tgz 2026-02-01 02:39:16 +00:00
github-merge-queue[bot]
9157e6b009 Publish onyx-0.4.23.tgz 2026-02-01 02:07:09 +00:00
github-merge-queue[bot]
2ff26b015a Publish onyx-0.4.23.tgz 2026-02-01 01:40:41 +00:00
github-merge-queue[bot]
9fdd879386 Publish onyx-0.4.23.tgz 2026-02-01 00:31:53 +00:00
yuhongsun96
624f060374 Publish onyx-0.4.23.tgz 2026-01-31 23:45:28 +00:00
github-merge-queue[bot]
0b3cfbb44e Publish onyx-0.4.23.tgz 2026-01-31 23:42:27 +00:00
github-merge-queue[bot]
a39553c8b5 Publish onyx-0.4.23.tgz 2026-01-31 23:18:22 +00:00
github-merge-queue[bot]
b0ed7781e6 Publish onyx-0.4.23.tgz 2026-01-31 22:25:49 +00:00
github-merge-queue[bot]
8f3fcfc91d Publish onyx-0.4.23.tgz 2026-01-31 22:15:15 +00:00
github-merge-queue[bot]
79fdc073f5 Publish onyx-0.4.23.tgz 2026-01-31 19:54:51 +00:00
github-merge-queue[bot]
5a3a59cc66 Publish onyx-0.4.23.tgz 2026-01-31 13:53:22 +00:00
github-merge-queue[bot]
9c0400addf Publish onyx-0.4.23.tgz 2026-01-31 03:13:19 +00:00
github-merge-queue[bot]
5d98cceca4 Publish onyx-0.4.23.tgz 2026-01-31 02:30:07 +00:00
github-merge-queue[bot]
7a1b89037a Publish onyx-0.4.23.tgz 2026-01-31 02:27:33 +00:00
github-merge-queue[bot]
4fb2e4767b Publish onyx-0.4.23.tgz 2026-01-31 01:24:58 +00:00
github-merge-queue[bot]
4a561c03ae Publish onyx-0.4.23.tgz 2026-01-31 00:54:14 +00:00
github-merge-queue[bot]
e459734d6e Publish onyx-0.4.23.tgz 2026-01-31 00:33:16 +00:00
github-merge-queue[bot]
101a75101f Publish onyx-0.4.23.tgz 2026-01-31 00:23:50 +00:00
nmgarza5
5f169f86a7 Publish onyx-0.4.23.tgz 2026-01-31 00:17:27 +00:00
github-merge-queue[bot]
1c07a69e8d Publish onyx-0.4.23.tgz 2026-01-30 23:39:40 +00:00
github-merge-queue[bot]
5691c4956a Publish onyx-0.4.23.tgz 2026-01-30 23:05:57 +00:00
github-merge-queue[bot]
f8ecb64a34 Publish onyx-0.4.23.tgz 2026-01-30 22:59:31 +00:00
github-merge-queue[bot]
1c9342de93 Publish onyx-0.4.23.tgz 2026-01-30 22:40:33 +00:00
github-merge-queue[bot]
6279ab8b58 Publish onyx-0.4.23.tgz 2026-01-30 22:35:29 +00:00
github-merge-queue[bot]
508a0fdf8c Publish onyx-0.4.23.tgz 2026-01-30 22:13:29 +00:00
github-merge-queue[bot]
5e2e846444 Publish onyx-0.4.23.tgz 2026-01-30 21:26:49 +00:00
github-merge-queue[bot]
0b9aec3a58 Publish onyx-0.4.23.tgz 2026-01-30 20:59:37 +00:00
github-merge-queue[bot]
456d09e35c Publish onyx-0.4.23.tgz 2026-01-30 20:55:24 +00:00
github-merge-queue[bot]
419c150efe Publish onyx-0.4.23.tgz 2026-01-30 20:51:03 +00:00
github-merge-queue[bot]
a28fa85f4b Publish onyx-0.4.23.tgz 2026-01-30 20:02:54 +00:00
github-merge-queue[bot]
f1f530b96e Publish onyx-0.4.23.tgz 2026-01-30 19:36:08 +00:00
github-merge-queue[bot]
cb6c8e1af8 Publish onyx-0.4.23.tgz 2026-01-30 18:37:13 +00:00
github-merge-queue[bot]
c660c91c6e Publish onyx-0.4.23.tgz 2026-01-30 18:13:02 +00:00
github-merge-queue[bot]
0eae90cb65 Publish onyx-0.4.23.tgz 2026-01-30 17:43:58 +00:00
github-merge-queue[bot]
8dc8dba85f Publish onyx-0.4.23.tgz 2026-01-30 12:20:05 +00:00
github-merge-queue[bot]
7466375fab Publish onyx-0.4.23.tgz 2026-01-30 11:50:45 +00:00
github-merge-queue[bot]
5adbed866c Publish onyx-0.4.23.tgz 2026-01-30 10:44:17 +00:00
github-merge-queue[bot]
7bcdefdb50 Publish onyx-0.4.23.tgz 2026-01-30 10:05:15 +00:00
github-merge-queue[bot]
8a2b1bc140 Publish onyx-0.4.23.tgz 2026-01-30 07:55:16 +00:00
github-merge-queue[bot]
402a535cb3 Publish onyx-0.4.23.tgz 2026-01-30 06:58:15 +00:00
github-merge-queue[bot]
c2c5704645 Publish onyx-0.4.23.tgz 2026-01-30 06:09:46 +00:00
github-merge-queue[bot]
8798938b03 Publish onyx-0.4.23.tgz 2026-01-30 05:03:31 +00:00
github-merge-queue[bot]
fd994703a5 Publish onyx-0.4.23.tgz 2026-01-30 05:00:27 +00:00
github-merge-queue[bot]
2f4a08a7ee Publish onyx-0.4.23.tgz 2026-01-30 04:58:10 +00:00
github-merge-queue[bot]
4c1d7f4c0c Publish onyx-0.4.23.tgz 2026-01-30 03:53:58 +00:00
acaprau
135eead407 Publish onyx-0.4.23.tgz 2026-01-30 02:43:15 +00:00
evan-onyx
a99301deab Publish onyx-0.4.23.tgz 2026-01-30 02:41:34 +00:00
github-merge-queue[bot]
f77f5297b8 Publish onyx-0.4.23.tgz 2026-01-30 01:37:18 +00:00
github-merge-queue[bot]
59577803c5 Publish onyx-0.4.23.tgz 2026-01-30 01:00:18 +00:00
github-merge-queue[bot]
e2c8d35f24 Publish onyx-0.4.23.tgz 2026-01-30 00:55:20 +00:00
github-merge-queue[bot]
971135fbd3 Publish onyx-0.4.23.tgz 2026-01-30 00:42:32 +00:00
github-merge-queue[bot]
20e92499f6 Publish onyx-0.4.23.tgz 2026-01-30 00:26:37 +00:00
github-merge-queue[bot]
68d5628107 Publish onyx-0.4.23.tgz 2026-01-30 00:12:30 +00:00
raunakab
579d2faec9 Publish onyx-0.4.23.tgz 2026-01-29 23:45:37 +00:00
github-merge-queue[bot]
4fe7cf2947 Publish onyx-0.4.23.tgz 2026-01-29 23:35:18 +00:00
github-merge-queue[bot]
81e8db020b Publish onyx-0.4.22.tgz 2026-01-29 23:06:39 +00:00
github-merge-queue[bot]
4ff3fd9fb5 Publish onyx-0.4.22.tgz 2026-01-29 23:00:13 +00:00
github-merge-queue[bot]
a6b4e00345 Publish onyx-0.4.22.tgz 2026-01-29 21:44:14 +00:00
jessicasingh7
927818540b Publish onyx-0.4.21.tgz 2026-01-29 20:58:14 +00:00
github-merge-queue[bot]
a6f7c16cbe Publish onyx-0.4.21.tgz 2026-01-29 20:49:22 +00:00
github-merge-queue[bot]
729005e8e7 Publish onyx-0.4.21.tgz 2026-01-29 20:01:47 +00:00
github-merge-queue[bot]
07524d53bd Publish onyx-0.4.21.tgz 2026-01-29 18:17:48 +00:00
github-merge-queue[bot]
c67294318e Publish onyx-0.4.21.tgz 2026-01-29 18:05:09 +00:00
github-merge-queue[bot]
29668bc298 Publish onyx-0.4.21.tgz 2026-01-29 17:52:21 +00:00
github-merge-queue[bot]
48bc278509 Publish onyx-0.4.21.tgz 2026-01-29 16:13:57 +00:00
raunakab
ba70761e76 Publish onyx-0.4.21.tgz 2026-01-29 08:52:49 +00:00
rohoswagger
6ceebcf6a7 Publish onyx-0.4.21.tgz 2026-01-29 06:59:59 +00:00
github-merge-queue[bot]
1a0253bdf7 Publish onyx-0.4.21.tgz 2026-01-29 06:40:54 +00:00
raunakab
54b737ad14 Publish onyx-0.4.21.tgz 2026-01-29 06:19:49 +00:00
rohoswagger
65efee19aa Publish onyx-0.4.21.tgz 2026-01-29 04:07:40 +00:00
rohoswagger
bfc7d0e1ac Publish onyx-0.4.21.tgz 2026-01-29 03:17:53 +00:00
github-merge-queue[bot]
7219dde6d1 Publish onyx-0.4.21.tgz 2026-01-29 01:33:32 +00:00
github-merge-queue[bot]
2dfcfc4d5f Publish onyx-0.4.21.tgz 2026-01-29 01:27:03 +00:00
github-merge-queue[bot]
ee5cd89a25 Publish onyx-0.4.21.tgz 2026-01-29 00:36:26 +00:00
Weves
9f2f0130ca Publish onyx-0.4.21.tgz 2026-01-29 00:20:23 +00:00
github-merge-queue[bot]
34cb12b5c9 Publish onyx-0.4.21.tgz 2026-01-29 00:17:10 +00:00
Weves
8dd3ef4d02 Publish onyx-0.4.21.tgz 2026-01-29 00:13:18 +00:00
github-merge-queue[bot]
567e6db41d Publish onyx-0.4.21.tgz 2026-01-28 23:55:03 +00:00
github-merge-queue[bot]
a595ba2d6a Publish onyx-0.4.21.tgz 2026-01-28 23:06:33 +00:00
github-merge-queue[bot]
f99261dd7e Publish onyx-0.4.21.tgz 2026-01-28 22:59:06 +00:00
github-merge-queue[bot]
4db3b43c78 Publish onyx-0.4.21.tgz 2026-01-28 22:58:22 +00:00
github-merge-queue[bot]
0fdcbee366 Publish onyx-0.4.21.tgz 2026-01-28 22:41:53 +00:00
jmelahman
a4c02a8cc2 Publish onyx-0.4.21.tgz 2026-01-28 22:34:38 +00:00
jmelahman
4fbcad7b30 Publish onyx-0.4.21.tgz 2026-01-28 22:32:03 +00:00
jmelahman
66ebae7bc5 Publish onyx-0.4.21.tgz 2026-01-28 22:31:36 +00:00
github-merge-queue[bot]
7853b7f367 Publish onyx-0.4.21.tgz 2026-01-28 22:30:38 +00:00
github-merge-queue[bot]
e3fa88108d Publish onyx-0.4.21.tgz 2026-01-28 22:24:32 +00:00
jmelahman
56bcf06e25 Publish onyx-0.4.21.tgz 2026-01-28 22:20:29 +00:00
jmelahman
5d571b5e6c Publish onyx-0.4.21.tgz 2026-01-28 22:13:13 +00:00
jmelahman
d03aebdbdc Publish onyx-0.4.21.tgz 2026-01-28 22:12:46 +00:00
rohoswagger
4761589b7a Publish onyx-0.4.21.tgz 2026-01-28 22:11:51 +00:00
jmelahman
2699fc2d25 Publish onyx-0.4.21.tgz 2026-01-28 22:11:24 +00:00
github-merge-queue[bot]
f29812e501 Publish onyx-0.4.21.tgz 2026-01-28 21:55:42 +00:00
github-merge-queue[bot]
0b1647bfdb Publish onyx-0.4.21.tgz 2026-01-28 21:38:32 +00:00
github-merge-queue[bot]
1d1bfb4452 Publish onyx-0.4.21.tgz 2026-01-28 21:13:20 +00:00
github-merge-queue[bot]
6b3cf7041f Publish onyx-0.4.21.tgz 2026-01-28 21:07:50 +00:00
github-merge-queue[bot]
39e712c572 Publish onyx-0.4.21.tgz 2026-01-28 20:46:10 +00:00
github-merge-queue[bot]
b87e6c1347 Publish onyx-0.4.21.tgz 2026-01-28 20:33:39 +00:00
github-merge-queue[bot]
d22abbe764 Publish onyx-0.4.21.tgz 2026-01-28 20:29:19 +00:00
github-merge-queue[bot]
6f786df1fe Publish onyx-0.4.21.tgz 2026-01-28 20:18:19 +00:00
github-merge-queue[bot]
51c1518c7d Publish onyx-0.4.21.tgz 2026-01-28 19:11:13 +00:00
github-merge-queue[bot]
2610b52839 Publish onyx-0.4.21.tgz 2026-01-28 18:58:46 +00:00
github-merge-queue[bot]
b403364db8 Publish onyx-0.4.21.tgz 2026-01-28 18:38:26 +00:00
github-merge-queue[bot]
037eafcd83 Publish onyx-0.4.21.tgz 2026-01-28 09:20:15 +00:00
github-merge-queue[bot]
8e5a8dcbaa Publish onyx-0.4.21.tgz 2026-01-28 08:22:34 +00:00
github-merge-queue[bot]
0c12d2462d Publish onyx-0.4.21.tgz 2026-01-28 06:51:50 +00:00
Weves
0c375759f8 Publish onyx-0.4.21.tgz 2026-01-28 06:45:26 +00:00
Weves
cc4dccd6b0 Publish onyx-0.4.21.tgz 2026-01-28 06:32:51 +00:00
wenxi-onyx
ca9f7a45fe Publish onyx-0.4.21.tgz 2026-01-28 06:13:33 +00:00
github-merge-queue[bot]
19ff3330c8 Publish onyx-0.4.21.tgz 2026-01-28 06:10:14 +00:00
github-merge-queue[bot]
8e4dcc2cb8 Publish onyx-0.4.21.tgz 2026-01-28 06:05:11 +00:00
rohoswagger
3eee8c3537 Publish onyx-0.4.21.tgz 2026-01-28 05:41:22 +00:00
github-merge-queue[bot]
927f3ab259 Publish onyx-0.4.21.tgz 2026-01-28 05:36:27 +00:00
github-merge-queue[bot]
181a29b768 Publish onyx-0.4.21.tgz 2026-01-28 05:20:41 +00:00
rohoswagger
27484bb2f3 Publish onyx-0.4.21.tgz 2026-01-28 05:14:22 +00:00
github-merge-queue[bot]
0c5db07012 Publish onyx-0.4.21.tgz 2026-01-28 04:40:34 +00:00
github-merge-queue[bot]
2166d34e52 Publish onyx-0.4.21.tgz 2026-01-28 04:36:00 +00:00
github-merge-queue[bot]
8f8d4102cf Publish onyx-0.4.21.tgz 2026-01-28 04:11:41 +00:00
yuhongsun96
fb18042a42 Publish onyx-0.4.21.tgz 2026-01-28 03:46:03 +00:00
github-merge-queue[bot]
8fbb0aab44 Publish onyx-0.4.21.tgz 2026-01-28 03:43:44 +00:00
github-merge-queue[bot]
fe36725ae2 Publish onyx-0.4.21.tgz 2026-01-28 03:36:08 +00:00
github-merge-queue[bot]
139b7d7e73 Publish onyx-0.4.21.tgz 2026-01-28 03:18:05 +00:00
Weves
d050904a94 Publish onyx-0.4.21.tgz 2026-01-28 03:01:57 +00:00
github-merge-queue[bot]
eb6f36dce0 Publish onyx-0.4.21.tgz 2026-01-28 02:59:50 +00:00
github-merge-queue[bot]
44a0495746 Publish onyx-0.4.21.tgz 2026-01-28 02:57:07 +00:00
github-merge-queue[bot]
1ab16d8b0b Publish onyx-0.4.21.tgz 2026-01-28 02:52:48 +00:00
rohoswagger
afb3322478 Publish onyx-0.4.21.tgz 2026-01-28 02:46:28 +00:00
github-merge-queue[bot]
796a777560 Publish onyx-0.4.21.tgz 2026-01-28 01:51:29 +00:00
github-merge-queue[bot]
7e21244567 Publish onyx-0.4.21.tgz 2026-01-28 01:43:10 +00:00
github-merge-queue[bot]
94ce49f295 Publish onyx-0.4.21.tgz 2026-01-28 01:37:48 +00:00
github-merge-queue[bot]
d83d466edd Publish onyx-0.4.21.tgz 2026-01-28 01:37:26 +00:00
rohoswagger
cb73699150 Publish onyx-0.4.21.tgz 2026-01-28 01:31:23 +00:00
nmgarza5
f3c062e5b3 Publish onyx-0.4.21.tgz 2026-01-28 01:03:09 +00:00
github-merge-queue[bot]
742f7d22a3 Publish onyx-0.4.21.tgz 2026-01-28 00:11:12 +00:00
Weves
c176d37533 Publish onyx-0.4.21.tgz 2026-01-27 23:47:30 +00:00
github-merge-queue[bot]
fac386f59c Publish onyx-0.4.21.tgz 2026-01-27 23:36:59 +00:00
github-merge-queue[bot]
2e298b3b42 Publish onyx-0.4.21.tgz 2026-01-27 23:13:30 +00:00
github-merge-queue[bot]
365bc26b00 Publish onyx-0.4.21.tgz 2026-01-27 22:37:25 +00:00
github-merge-queue[bot]
3221d727c5 Publish onyx-0.4.21.tgz 2026-01-27 22:12:31 +00:00
github-merge-queue[bot]
30853bd822 Publish onyx-0.4.21.tgz 2026-01-27 22:06:08 +00:00
github-merge-queue[bot]
d1d3e5ad46 Publish onyx-0.4.21.tgz 2026-01-27 21:55:43 +00:00
github-merge-queue[bot]
86f18d6e59 Publish onyx-0.4.21.tgz 2026-01-27 21:00:19 +00:00
github-merge-queue[bot]
3e14b3df69 Publish onyx-0.4.21.tgz 2026-01-27 20:39:01 +00:00
github-merge-queue[bot]
999eec73e6 Publish onyx-0.4.21.tgz 2026-01-27 19:55:35 +00:00
github-merge-queue[bot]
ccc0742543 Publish onyx-0.4.21.tgz 2026-01-27 19:50:22 +00:00
github-merge-queue[bot]
fb8bf31a2e Publish onyx-0.4.21.tgz 2026-01-27 19:36:49 +00:00
github-merge-queue[bot]
76dd684060 Publish onyx-0.4.21.tgz 2026-01-27 18:57:09 +00:00
Weves
7e59f1c06e Publish onyx-0.4.21.tgz 2026-01-27 18:50:25 +00:00
github-merge-queue[bot]
b17b322b03 Publish onyx-0.4.21.tgz 2026-01-27 18:43:46 +00:00
github-merge-queue[bot]
e8be17e306 Publish onyx-0.4.21.tgz 2026-01-27 18:43:24 +00:00
github-merge-queue[bot]
53920fb1f0 Publish onyx-0.4.21.tgz 2026-01-27 18:20:23 +00:00
github-merge-queue[bot]
55877d1bee Publish onyx-0.4.21.tgz 2026-01-27 17:26:53 +00:00
github-merge-queue[bot]
e1bde506c9 Publish onyx-0.4.20.tgz 2026-01-27 17:26:26 +00:00
github-merge-queue[bot]
26484a8e3e Publish onyx-0.4.20.tgz 2026-01-27 17:20:00 +00:00
github-merge-queue[bot]
aeeff4c9ce Publish onyx-0.4.20.tgz 2026-01-27 17:04:06 +00:00
github-merge-queue[bot]
9a9f89891f Publish onyx-0.4.20.tgz 2026-01-27 05:34:26 +00:00
github-merge-queue[bot]
aa566088cb Publish onyx-0.4.20.tgz 2026-01-27 04:04:11 +00:00
wenxi-onyx
5cf0ced3ab Publish onyx-0.4.20.tgz 2026-01-27 03:10:12 +00:00
Weves
3c09316cce Publish onyx-0.4.20.tgz 2026-01-27 02:27:53 +00:00
wenxi-onyx
546352ba5f Publish onyx-0.4.20.tgz 2026-01-27 01:13:38 +00:00
github-merge-queue[bot]
d92779046e Publish onyx-0.4.20.tgz 2026-01-27 00:45:43 +00:00
github-merge-queue[bot]
ec9806923d Publish onyx-0.4.20.tgz 2026-01-26 23:49:20 +00:00
justin-tahara
fc7281bc46 Publish onyx-0.4.20.tgz 2026-01-26 21:22:26 +00:00
jmelahman
29ae285099 Publish onyx-0.4.20.tgz 2026-01-26 16:56:12 +00:00
github-merge-queue[bot]
93d52a1d6a Publish onyx-0.4.20.tgz 2026-01-26 10:30:46 +00:00
github-merge-queue[bot]
791290cc59 Publish onyx-0.4.20.tgz 2026-01-26 04:50:35 +00:00
github-merge-queue[bot]
ba20e213d5 Publish onyx-0.4.20.tgz 2026-01-26 04:47:20 +00:00
github-merge-queue[bot]
bf1c4d26f6 Publish onyx-0.4.20.tgz 2026-01-25 07:51:32 +00:00
github-merge-queue[bot]
6573862991 Publish onyx-0.4.20.tgz 2026-01-25 04:48:49 +00:00
github-merge-queue[bot]
9b14f0b8c9 Publish onyx-0.4.20.tgz 2026-01-24 21:03:16 +00:00
yuhongsun96
21d7098c05 Publish onyx-0.4.20.tgz 2026-01-24 20:59:45 +00:00
nmgarza5
01b97443e5 Publish onyx-0.4.20.tgz 2026-01-24 19:49:15 +00:00
github-merge-queue[bot]
090bd0f099 Publish onyx-0.4.20.tgz 2026-01-24 01:51:58 +00:00
github-merge-queue[bot]
fed6aa7733 Publish onyx-0.4.20.tgz 2026-01-23 23:32:24 +00:00
github-merge-queue[bot]
adc2afd1f3 Publish onyx-0.4.20.tgz 2026-01-23 20:59:45 +00:00
github-merge-queue[bot]
db411f65bc Publish onyx-0.4.19.tgz 2026-01-23 19:54:20 +00:00
jmelahman
a532c80189 Publish onyx-0.4.19.tgz 2026-01-23 18:22:13 +00:00
github-merge-queue[bot]
60603ea818 Publish onyx-0.4.19.tgz 2026-01-23 17:10:08 +00:00
jmelahman
6d8eb292cb Publish onyx-0.4.19.tgz 2026-01-23 16:50:45 +00:00
github-merge-queue[bot]
968dd7ac43 Publish onyx-0.4.19.tgz 2026-01-23 05:59:29 +00:00
github-merge-queue[bot]
87e7ee1797 Publish onyx-0.4.19.tgz 2026-01-23 05:26:04 +00:00
jmelahman
7fdb025d73 Publish onyx-0.4.19.tgz 2026-01-23 04:42:10 +00:00
yuhongsun96
c7deba27b1 Publish onyx-0.4.19.tgz 2026-01-23 03:24:57 +00:00
github-merge-queue[bot]
a5473a1a28 Publish onyx-0.4.19.tgz 2026-01-23 02:51:44 +00:00
github-merge-queue[bot]
18ea27f85e Publish onyx-0.4.19.tgz 2026-01-23 01:53:20 +00:00
jmelahman
0ce8580277 Publish onyx-0.4.19.tgz 2026-01-22 23:18:14 +00:00
github-merge-queue[bot]
50ee097f82 Publish onyx-0.4.19.tgz 2026-01-22 20:13:36 +00:00
jmelahman
42f6177420 Publish onyx-0.4.19.tgz 2026-01-22 19:27:01 +00:00
github-merge-queue[bot]
2e47d9fcb6 Publish onyx-0.4.19.tgz 2026-01-22 18:22:24 +00:00
justin-tahara
817561c88e Publish onyx-0.4.19.tgz 2026-01-22 18:11:00 +00:00
github-merge-queue[bot]
1fb72046bc Publish onyx-0.4.19.tgz 2026-01-22 18:05:46 +00:00
github-merge-queue[bot]
9c31df2391 Publish onyx-0.4.19.tgz 2026-01-22 17:56:50 +00:00
github-merge-queue[bot]
ad2a141953 Publish onyx-0.4.19.tgz 2026-01-22 17:47:07 +00:00
github-merge-queue[bot]
1366cdefde Publish onyx-0.4.18.tgz 2026-01-21 18:48:07 +00:00
github-merge-queue[bot]
045d6203f7 Publish onyx-0.4.18.tgz 2026-01-21 16:48:44 +00:00
raunakab
d9ee3c5726 Publish onyx-0.4.18.tgz 2026-01-21 08:30:06 +00:00
github-merge-queue[bot]
48cf83a076 Publish onyx-0.4.18.tgz 2026-01-21 07:38:08 +00:00
github-merge-queue[bot]
f9e70cea61 Publish onyx-0.4.18.tgz 2026-01-21 04:38:37 +00:00
github-merge-queue[bot]
562dac0840 Publish onyx-0.4.18.tgz 2026-01-21 04:28:30 +00:00
yuhongsun96
d3ca839863 Publish onyx-0.4.18.tgz 2026-01-21 03:50:49 +00:00
github-merge-queue[bot]
5d9bcee1f4 Publish onyx-0.4.18.tgz 2026-01-21 03:48:49 +00:00
jmelahman
85d94be44e Publish onyx-0.4.18.tgz 2026-01-21 03:20:40 +00:00
github-merge-queue[bot]
61d4e73902 Publish onyx-0.4.18.tgz 2026-01-21 02:01:46 +00:00
github-merge-queue[bot]
8afe49c8e2 Publish onyx-0.4.18.tgz 2026-01-21 01:39:46 +00:00
github-merge-queue[bot]
8e37d4e9c8 Publish onyx-0.4.18.tgz 2026-01-21 01:11:21 +00:00
github-merge-queue[bot]
11592597e9 Publish onyx-0.4.18.tgz 2026-01-21 00:44:32 +00:00
yuhongsun96
e1c810ed88 Publish onyx-0.4.18.tgz 2026-01-21 00:18:43 +00:00
github-merge-queue[bot]
840218b0a5 Publish onyx-0.4.18.tgz 2026-01-21 00:09:37 +00:00
github-merge-queue[bot]
3ac06954c5 Publish onyx-0.4.18.tgz 2026-01-20 23:41:09 +00:00
yuhongsun96
b048a0382b Publish onyx-0.4.18.tgz 2026-01-20 23:14:23 +00:00
justin-tahara
3e823eb61b Publish onyx-0.4.18.tgz 2026-01-20 22:45:10 +00:00
github-merge-queue[bot]
7bb7186c30 Publish onyx-0.4.18.tgz 2026-01-20 22:40:54 +00:00
jmelahman
f36178cdeb Publish onyx-0.4.18.tgz 2026-01-20 22:30:03 +00:00
github-merge-queue[bot]
cdd24ce3e7 Publish onyx-0.4.18.tgz 2026-01-20 22:17:05 +00:00
justin-tahara
208bf9fa2d Publish onyx-0.4.18.tgz 2026-01-20 22:08:05 +00:00
github-merge-queue[bot]
a06d1a2d08 Publish onyx-0.4.18.tgz 2026-01-20 22:02:24 +00:00
yuhongsun96
a6ac5b6e30 Publish onyx-0.4.18.tgz 2026-01-20 21:36:48 +00:00
github-merge-queue[bot]
74f739dcbb Publish onyx-0.4.18.tgz 2026-01-20 21:16:31 +00:00
raunakab
ad7592c511 Publish onyx-0.4.18.tgz 2026-01-20 21:05:10 +00:00
github-merge-queue[bot]
e9f2da764b Publish onyx-0.4.18.tgz 2026-01-20 20:58:04 +00:00
github-merge-queue[bot]
a161b0e6c9 Publish onyx-0.4.18.tgz 2026-01-20 20:37:52 +00:00
github-merge-queue[bot]
1af9ff5876 Publish onyx-0.4.18.tgz 2026-01-20 20:36:48 +00:00
github-merge-queue[bot]
8069352584 Publish onyx-0.4.18.tgz 2026-01-20 19:10:40 +00:00
github-merge-queue[bot]
a6df0f570c Publish onyx-0.4.18.tgz 2026-01-20 19:06:59 +00:00
jmelahman
961d676a47 Publish onyx-0.4.18.tgz 2026-01-20 19:03:41 +00:00
github-merge-queue[bot]
00e8a334f3 Publish onyx-0.4.18.tgz 2026-01-20 18:26:09 +00:00
github-merge-queue[bot]
5179b98499 Publish onyx-0.4.18.tgz 2026-01-20 17:15:57 +00:00
github-merge-queue[bot]
dae67fee85 Publish onyx-0.4.18.tgz 2026-01-20 07:12:50 +00:00
github-merge-queue[bot]
3c357a1c25 Publish onyx-0.4.18.tgz 2026-01-20 06:22:48 +00:00
jmelahman
63cf169cbf Publish onyx-0.4.18.tgz 2026-01-20 03:48:01 +00:00
jmelahman
daa8d7db4d Publish onyx-0.4.18.tgz 2026-01-20 03:20:48 +00:00
yuhongsun96
652a1e2b9f Publish onyx-0.4.18.tgz 2026-01-20 03:05:15 +00:00
yuhongsun96
9bae8138d2 Publish onyx-0.4.18.tgz 2026-01-20 02:57:56 +00:00
github-merge-queue[bot]
e59035920c Publish onyx-0.4.18.tgz 2026-01-20 01:28:43 +00:00
github-merge-queue[bot]
30d0588d1e Publish onyx-0.4.18.tgz 2026-01-20 00:22:31 +00:00
github-merge-queue[bot]
90cabe2469 Publish onyx-0.4.18.tgz 2026-01-20 00:06:26 +00:00
github-merge-queue[bot]
16586a375a Publish onyx-0.4.18.tgz 2026-01-19 23:19:26 +00:00
yuhongsun96
c4f72a61a9 Publish onyx-0.4.18.tgz 2026-01-19 21:37:44 +00:00
github-merge-queue[bot]
afe75479e4 Publish onyx-0.4.18.tgz 2026-01-19 21:25:00 +00:00
github-merge-queue[bot]
08ed29dda0 Publish onyx-0.4.18.tgz 2026-01-19 20:29:31 +00:00
github-merge-queue[bot]
80b406413f Publish onyx-0.4.18.tgz 2026-01-19 18:48:37 +00:00
github-merge-queue[bot]
ac289b7cfa Publish onyx-0.4.18.tgz 2026-01-19 18:08:48 +00:00
github-merge-queue[bot]
d937cf39b7 Publish onyx-0.4.18.tgz 2026-01-19 04:37:36 +00:00
github-merge-queue[bot]
085d602d4f Publish onyx-0.4.18.tgz 2026-01-19 02:53:38 +00:00
github-merge-queue[bot]
684ee1f15d Publish onyx-0.4.18.tgz 2026-01-19 00:33:37 +00:00
github-merge-queue[bot]
8f88a6bea0 Publish onyx-0.4.18.tgz 2026-01-18 23:18:01 +00:00
yuhongsun96
6fdd157db8 Publish onyx-0.4.18.tgz 2026-01-18 04:06:09 +00:00
github-merge-queue[bot]
3c495f8d4a Publish onyx-0.4.18.tgz 2026-01-18 02:04:22 +00:00
yuhongsun96
d3ec3e1035 Publish onyx-0.4.18.tgz 2026-01-17 23:56:56 +00:00
github-merge-queue[bot]
e3b178bcdc Publish onyx-0.4.18.tgz 2026-01-17 02:15:05 +00:00
github-merge-queue[bot]
468f1af394 Publish onyx-0.4.18.tgz 2026-01-17 02:04:30 +00:00
github-merge-queue[bot]
30ba8f7efd Publish onyx-0.4.18.tgz 2026-01-17 01:55:56 +00:00
jmelahman
084c418e51 Publish onyx-0.4.18.tgz 2026-01-17 01:04:26 +00:00
yuhongsun96
170e70ccf3 Publish onyx-0.4.18.tgz 2026-01-17 00:33:47 +00:00
github-merge-queue[bot]
9ffcd931ca Publish onyx-0.4.18.tgz 2026-01-17 00:03:57 +00:00
github-merge-queue[bot]
b2f451b019 Publish onyx-0.4.18.tgz 2026-01-16 23:55:08 +00:00
github-merge-queue[bot]
fb6ff08acc Publish onyx-0.4.18.tgz 2026-01-16 23:41:48 +00:00
yuhongsun96
377ae0f170 Publish onyx-0.4.18.tgz 2026-01-16 23:26:59 +00:00
github-merge-queue[bot]
56dbaff3a2 Publish onyx-0.4.18.tgz 2026-01-16 22:16:29 +00:00
github-merge-queue[bot]
c03c1081d0 Publish onyx-0.4.18.tgz 2026-01-16 21:46:32 +00:00
github-merge-queue[bot]
303c82002b Publish onyx-0.4.18.tgz 2026-01-16 20:32:10 +00:00
github-merge-queue[bot]
ccd4eebab0 Publish onyx-0.4.18.tgz 2026-01-16 20:25:54 +00:00
github-merge-queue[bot]
bab1da82db Publish onyx-0.4.18.tgz 2026-01-16 20:14:59 +00:00
yuhongsun96
1fb06f69a4 Publish onyx-0.4.18.tgz 2026-01-16 19:51:39 +00:00
yuhongsun96
8444c39394 Publish onyx-0.4.18.tgz 2026-01-16 19:24:50 +00:00
github-merge-queue[bot]
f874612225 Publish onyx-0.4.18.tgz 2026-01-16 18:16:14 +00:00
github-merge-queue[bot]
9399413ceb Publish onyx-0.4.18.tgz 2026-01-16 17:58:55 +00:00
github-merge-queue[bot]
8e7cf40190 Publish onyx-0.4.18.tgz 2026-01-16 16:39:26 +00:00
github-merge-queue[bot]
0cda20238c Publish onyx-0.4.18.tgz 2026-01-16 10:37:49 +00:00
github-merge-queue[bot]
3d1dce8f20 Publish onyx-0.4.18.tgz 2026-01-16 10:13:32 +00:00
github-merge-queue[bot]
ec3b1b102e Publish onyx-0.4.18.tgz 2026-01-16 10:06:58 +00:00
github-merge-queue[bot]
18394374b1 Publish onyx-0.4.18.tgz 2026-01-16 10:05:40 +00:00
github-merge-queue[bot]
6edafaab51 Publish onyx-0.4.18.tgz 2026-01-16 09:36:14 +00:00
jmelahman
883cbdbd03 Publish onyx-0.4.18.tgz 2026-01-16 09:03:47 +00:00
github-merge-queue[bot]
9651cdc5a0 Publish onyx-0.4.18.tgz 2026-01-16 08:48:48 +00:00
github-merge-queue[bot]
b6b8f7d368 Publish onyx-0.4.18.tgz 2026-01-16 03:54:33 +00:00
github-merge-queue[bot]
88591bb89a Publish onyx-0.4.18.tgz 2026-01-16 03:52:14 +00:00
github-merge-queue[bot]
1971958c8a Publish onyx-0.4.18.tgz 2026-01-16 03:18:02 +00:00
github-merge-queue[bot]
c16c59bf9d Publish onyx-0.4.18.tgz 2026-01-16 02:07:24 +00:00
github-merge-queue[bot]
6853104215 Publish onyx-0.4.18.tgz 2026-01-16 01:46:41 +00:00
github-merge-queue[bot]
7bd9ddd7d6 Publish onyx-0.4.18.tgz 2026-01-16 01:08:07 +00:00
github-merge-queue[bot]
6fb17fc641 Publish onyx-0.4.18.tgz 2026-01-16 00:18:47 +00:00
github-merge-queue[bot]
122a00063d Publish onyx-0.4.18.tgz 2026-01-16 00:00:06 +00:00
github-merge-queue[bot]
5856e5b852 Publish onyx-0.4.18.tgz 2026-01-15 23:09:26 +00:00
jmelahman
64931247b4 Publish onyx-0.4.18.tgz 2026-01-15 20:36:48 +00:00
jmelahman
44a935b03c Publish onyx-0.4.18.tgz 2026-01-15 20:28:09 +00:00
jmelahman
8f98863b04 Publish onyx-0.4.18.tgz 2026-01-15 19:50:53 +00:00
jmelahman
7a0df41eec Publish onyx-0.4.18.tgz 2026-01-15 19:11:22 +00:00
github-merge-queue[bot]
37513fd749 Publish onyx-0.4.18.tgz 2026-01-15 17:52:40 +00:00
github-merge-queue[bot]
3b9b513a65 Publish onyx-0.4.18.tgz 2026-01-15 17:16:27 +00:00
jmelahman
df1aa8fa36 Publish onyx-0.4.18.tgz 2026-01-15 16:09:17 +00:00
github-merge-queue[bot]
206cdec607 Publish onyx-0.4.18.tgz 2026-01-15 02:26:20 +00:00
github-merge-queue[bot]
77162612ba Publish onyx-0.4.18.tgz 2026-01-15 01:48:12 +00:00
github-merge-queue[bot]
80a145f096 Publish onyx-0.4.18.tgz 2026-01-15 01:21:37 +00:00
github-merge-queue[bot]
9aa559852e Publish onyx-0.4.18.tgz 2026-01-15 00:46:11 +00:00
github-merge-queue[bot]
993b9c3414 Publish onyx-0.4.18.tgz 2026-01-15 00:02:23 +00:00
github-merge-queue[bot]
06252bfa6b Publish onyx-0.4.18.tgz 2026-01-14 23:22:54 +00:00
yuhongsun96
e241dc11ea Publish onyx-0.4.18.tgz 2026-01-14 22:06:50 +00:00
github-merge-queue[bot]
3ed6056423 Publish onyx-0.4.18.tgz 2026-01-14 21:09:49 +00:00
github-merge-queue[bot]
2bd7e7ebb9 Publish onyx-0.4.18.tgz 2026-01-14 20:41:53 +00:00
github-merge-queue[bot]
c5ca0195c1 Publish onyx-0.4.18.tgz 2026-01-14 20:10:14 +00:00
github-merge-queue[bot]
f8795bd4bf Publish onyx-0.4.18.tgz 2026-01-14 20:04:46 +00:00
github-merge-queue[bot]
3b9f7892a4 Publish onyx-0.4.18.tgz 2026-01-14 19:56:47 +00:00
github-merge-queue[bot]
bb2669da77 Publish onyx-0.4.18.tgz 2026-01-14 19:55:46 +00:00
github-merge-queue[bot]
c0ffd54089 Publish onyx-0.4.18.tgz 2026-01-14 19:43:34 +00:00
github-merge-queue[bot]
c2ec3f3ed8 Publish onyx-0.4.18.tgz 2026-01-14 19:39:47 +00:00
github-merge-queue[bot]
2cb1b196f4 Publish onyx-0.4.18.tgz 2026-01-14 17:56:54 +00:00
github-merge-queue[bot]
713811e4cc Publish onyx-0.4.18.tgz 2026-01-14 17:24:45 +00:00
github-merge-queue[bot]
acb3017bc6 Publish onyx-0.4.18.tgz 2026-01-14 05:17:29 +00:00
github-merge-queue[bot]
dd6513c1af Publish onyx-0.4.18.tgz 2026-01-14 03:12:57 +00:00
github-merge-queue[bot]
b6d9e631dd Publish onyx-0.4.18.tgz 2026-01-14 02:52:58 +00:00
github-merge-queue[bot]
a7a44a9058 Publish onyx-0.4.18.tgz 2026-01-14 02:05:58 +00:00
github-merge-queue[bot]
74d1cd9bb6 Publish onyx-0.4.18.tgz 2026-01-14 00:34:12 +00:00
github-merge-queue[bot]
3ef3ac5e26 Publish onyx-0.4.18.tgz 2026-01-14 00:12:52 +00:00
github-merge-queue[bot]
385ef1f28e Publish onyx-0.4.18.tgz 2026-01-13 23:45:09 +00:00
github-merge-queue[bot]
899f6653dd Publish onyx-0.4.18.tgz 2026-01-13 23:42:07 +00:00
github-merge-queue[bot]
6f527cf169 Publish onyx-0.4.18.tgz 2026-01-13 22:42:08 +00:00
github-merge-queue[bot]
1d76f8fb8c Publish onyx-0.4.18.tgz 2026-01-13 22:21:50 +00:00
jmelahman
16f58a21cd Publish onyx-0.4.18.tgz 2026-01-13 22:10:15 +00:00
jmelahman
62c7755556 Publish onyx-0.4.18.tgz 2026-01-13 21:59:12 +00:00
jmelahman
2d6b066a54 Publish onyx-0.4.18.tgz 2026-01-13 21:22:52 +00:00
jmelahman
f559e8636c Publish onyx-0.4.18.tgz 2026-01-13 21:22:12 +00:00
github-merge-queue[bot]
a63dd5eb32 Publish onyx-0.4.18.tgz 2026-01-13 20:47:51 +00:00
github-merge-queue[bot]
dbbfc869d1 Publish onyx-0.4.18.tgz 2026-01-13 19:53:40 +00:00
github-merge-queue[bot]
f73f6033a9 Publish onyx-0.4.18.tgz 2026-01-13 19:53:11 +00:00
github-merge-queue[bot]
11d3fb9598 Publish onyx-0.4.18.tgz 2026-01-13 19:41:19 +00:00
github-merge-queue[bot]
4973aa54d3 Publish onyx-0.4.18.tgz 2026-01-13 19:29:24 +00:00
jmelahman
f97ee9e287 Publish onyx-0.4.18.tgz 2026-01-13 19:23:01 +00:00
github-merge-queue[bot]
6f0219e79c Publish onyx-0.4.18.tgz 2026-01-13 19:09:25 +00:00
github-merge-queue[bot]
67e1d7240d Publish onyx-0.4.18.tgz 2026-01-13 18:41:54 +00:00
github-merge-queue[bot]
f6b08a227f Publish onyx-0.4.18.tgz 2026-01-13 18:04:04 +00:00
github-merge-queue[bot]
bd55da78dd Publish onyx-0.4.18.tgz 2026-01-13 03:57:49 +00:00
github-merge-queue[bot]
5593b791c1 Publish onyx-0.4.18.tgz 2026-01-13 03:45:18 +00:00
github-merge-queue[bot]
55c89559b0 Publish onyx-0.4.18.tgz 2026-01-13 01:48:23 +00:00
github-merge-queue[bot]
17b2dbdcee Publish onyx-0.4.18.tgz 2026-01-13 01:10:22 +00:00
github-merge-queue[bot]
9ed2afb29a Publish onyx-0.4.18.tgz 2026-01-13 00:04:37 +00:00
github-merge-queue[bot]
7e5335d15c Publish onyx-0.4.18.tgz 2026-01-12 23:27:01 +00:00
github-merge-queue[bot]
60014c48b4 Publish onyx-0.4.18.tgz 2026-01-12 23:08:44 +00:00
github-merge-queue[bot]
5113a17a6c Publish onyx-0.4.18.tgz 2026-01-12 23:02:50 +00:00
github-merge-queue[bot]
0eb1269df4 Publish onyx-0.4.18.tgz 2026-01-12 22:00:04 +00:00
github-merge-queue[bot]
6f3f81a8cd Publish onyx-0.4.18.tgz 2026-01-12 21:54:19 +00:00
jmelahman
20323b613c Publish onyx-0.4.18.tgz 2026-01-12 21:49:29 +00:00
jmelahman
af6d2b291a Publish onyx-0.4.18.tgz 2026-01-12 21:13:16 +00:00
jmelahman
40fabdc291 Publish onyx-0.4.18.tgz 2026-01-12 20:53:03 +00:00
github-merge-queue[bot]
40a5731223 Publish onyx-0.4.18.tgz 2026-01-12 20:42:46 +00:00
github-merge-queue[bot]
58e0345903 Publish onyx-0.4.18.tgz 2026-01-12 20:35:15 +00:00
github-merge-queue[bot]
d198431fe2 Publish onyx-0.4.18.tgz 2026-01-12 19:53:26 +00:00
github-merge-queue[bot]
f82a425f43 Publish onyx-0.4.18.tgz 2026-01-12 19:19:12 +00:00
wenxi-onyx
4b9f633be9 Publish onyx-0.4.18.tgz 2026-01-12 19:11:10 +00:00
github-merge-queue[bot]
c07a94ff9c Publish onyx-0.4.18.tgz 2026-01-12 18:28:08 +00:00
github-merge-queue[bot]
2d469f7b72 Publish onyx-0.4.18.tgz 2026-01-12 12:14:26 +00:00
raunakab
95cff1789c Publish onyx-0.4.18.tgz 2026-01-12 11:28:35 +00:00
github-merge-queue[bot]
c17a2958c0 Publish onyx-0.4.18.tgz 2026-01-12 11:03:20 +00:00
github-merge-queue[bot]
4482c6d38a Publish onyx-0.4.18.tgz 2026-01-12 07:06:33 +00:00
github-merge-queue[bot]
3cdf929ac4 Publish onyx-0.4.18.tgz 2026-01-12 06:32:05 +00:00
github-merge-queue[bot]
73fc930f23 Publish onyx-0.4.18.tgz 2026-01-12 02:08:55 +00:00
github-merge-queue[bot]
13fc11418e Publish onyx-0.4.18.tgz 2026-01-12 01:17:56 +00:00
github-merge-queue[bot]
e38a6416fd Publish onyx-0.4.18.tgz 2026-01-11 22:24:36 +00:00
github-merge-queue[bot]
1682c548a1 Publish onyx-0.4.18.tgz 2026-01-11 22:21:43 +00:00
github-merge-queue[bot]
46d95399b9 Publish onyx-0.4.18.tgz 2026-01-11 21:19:24 +00:00
github-merge-queue[bot]
f2b2590f1a Publish onyx-0.4.18.tgz 2026-01-11 21:09:46 +00:00
github-merge-queue[bot]
81f0ed7c89 Publish onyx-0.4.18.tgz 2026-01-11 20:51:01 +00:00
wenxi-onyx
8efeaff739 Publish onyx-0.4.18.tgz 2026-01-11 20:45:50 +00:00
github-merge-queue[bot]
b2edfad49d Publish onyx-0.4.18.tgz 2026-01-11 11:27:24 +00:00
jmelahman
a403976793 Publish onyx-0.4.18.tgz 2026-01-11 06:02:40 +00:00
jmelahman
fd466eb12d Publish onyx-0.4.18.tgz 2026-01-11 05:23:07 +00:00
jmelahman
58c31a84c6 Publish onyx-0.4.18.tgz 2026-01-11 04:39:58 +00:00
jmelahman
721344dad6 Publish onyx-0.4.18.tgz 2026-01-11 04:02:13 +00:00
github-merge-queue[bot]
0516f199f6 Publish onyx-0.4.18.tgz 2026-01-11 00:35:07 +00:00
github-merge-queue[bot]
79d3c5fe4d Publish onyx-0.4.18.tgz 2026-01-11 00:29:32 +00:00
Weves
21f48e9e9c Publish onyx-0.4.18.tgz 2026-01-11 00:01:32 +00:00
wenxi-onyx
4dee622ff0 Publish onyx-0.4.18.tgz 2026-01-10 23:13:07 +00:00
Weves
91f5febad7 Publish onyx-0.4.18.tgz 2026-01-10 21:44:25 +00:00
github-merge-queue[bot]
0395a3bb30 Publish onyx-0.4.18.tgz 2026-01-10 06:36:43 +00:00
github-merge-queue[bot]
e52818f4fa Publish onyx-0.4.18.tgz 2026-01-10 05:19:07 +00:00
github-merge-queue[bot]
4fd649eda3 Publish onyx-0.4.18.tgz 2026-01-10 05:02:47 +00:00
yuhongsun96
88acc1a307 Publish onyx-0.4.18.tgz 2026-01-10 04:40:54 +00:00
yuhongsun96
e92b9cb353 Publish onyx-0.4.18.tgz 2026-01-10 04:38:24 +00:00
jmelahman
63839739fe Publish onyx-0.4.18.tgz 2026-01-10 04:21:15 +00:00
github-merge-queue[bot]
af938d8f89 Publish onyx-0.4.18.tgz 2026-01-10 00:22:37 +00:00
github-merge-queue[bot]
6ae461b9c9 Publish onyx-0.4.18.tgz 2026-01-10 00:16:22 +00:00
github-merge-queue[bot]
db1ede41a1 Publish onyx-0.4.18.tgz 2026-01-09 23:59:21 +00:00
yuhongsun96
9744b24040 Publish onyx-0.4.18.tgz 2026-01-09 23:54:12 +00:00
yuhongsun96
65544c0ba5 Publish onyx-0.4.18.tgz 2026-01-09 23:28:51 +00:00
nmgarza5
d668bec674 Publish onyx-0.4.18.tgz 2026-01-09 22:21:44 +00:00
github-merge-queue[bot]
01e1463540 Publish onyx-0.4.18.tgz 2026-01-09 20:10:19 +00:00
github-merge-queue[bot]
12e344e59f Publish onyx-0.4.18.tgz 2026-01-09 19:13:44 +00:00
github-merge-queue[bot]
8f4710def0 Publish onyx-0.4.18.tgz 2026-01-09 18:51:13 +00:00
github-merge-queue[bot]
5a8bc6c132 Publish onyx-0.4.18.tgz 2026-01-09 18:20:23 +00:00
github-merge-queue[bot]
7199976b7b Publish onyx-0.4.18.tgz 2026-01-09 17:52:14 +00:00
github-merge-queue[bot]
1b302d0b31 Publish onyx-0.4.18.tgz 2026-01-09 17:22:10 +00:00
github-merge-queue[bot]
390375b318 Publish onyx-0.4.18.tgz 2026-01-09 05:52:07 +00:00
github-merge-queue[bot]
ba0978f2e9 Publish onyx-0.4.18.tgz 2026-01-09 04:06:49 +00:00
github-merge-queue[bot]
d0a868536b Publish onyx-0.4.18.tgz 2026-01-09 03:31:37 +00:00
raunakab
4a0e8acd68 Publish onyx-0.4.18.tgz 2026-01-09 03:26:30 +00:00
github-merge-queue[bot]
6de08bc8c5 Publish onyx-0.4.18.tgz 2026-01-09 03:15:24 +00:00
github-merge-queue[bot]
3e9a0bd99a Publish onyx-0.4.18.tgz 2026-01-09 02:56:15 +00:00
github-merge-queue[bot]
4abd0d7de9 Publish onyx-0.4.18.tgz 2026-01-09 00:14:17 +00:00
github-merge-queue[bot]
9cab9b3287 Publish onyx-0.4.18.tgz 2026-01-08 23:34:17 +00:00
raunakab
005136ffbc Publish onyx-0.4.18.tgz 2026-01-08 22:57:56 +00:00
Weves
80e1be19b3 Publish onyx-0.4.18.tgz 2026-01-08 22:46:18 +00:00
github-merge-queue[bot]
1c2008d348 Publish onyx-0.4.18.tgz 2026-01-08 21:46:51 +00:00
github-merge-queue[bot]
fb236d1664 Publish onyx-0.4.18.tgz 2026-01-08 20:29:48 +00:00
github-merge-queue[bot]
337ea7acef Publish onyx-0.4.18.tgz 2026-01-08 18:58:15 +00:00
github-merge-queue[bot]
771d2b2937 Publish onyx-0.4.18.tgz 2026-01-08 18:35:04 +00:00
github-merge-queue[bot]
51b27b283b Publish onyx-0.4.18.tgz 2026-01-08 18:32:40 +00:00
github-merge-queue[bot]
556198653d Publish onyx-0.4.18.tgz 2026-01-08 17:14:52 +00:00
github-merge-queue[bot]
23fb312855 Publish onyx-0.4.18.tgz 2026-01-08 07:29:51 +00:00
github-merge-queue[bot]
98d3f94d64 Publish onyx-0.4.18.tgz 2026-01-08 05:13:20 +00:00
github-merge-queue[bot]
02d93cdde7 Publish onyx-0.4.17.tgz 2026-01-08 00:37:51 +00:00
github-merge-queue[bot]
4a4f5b4423 Publish onyx-0.4.17.tgz 2026-01-08 00:10:26 +00:00
github-merge-queue[bot]
d72adfab5a Publish onyx-0.4.17.tgz 2026-01-08 00:07:42 +00:00
github-merge-queue[bot]
f6288898cf Publish onyx-0.4.17.tgz 2026-01-07 23:58:37 +00:00
github-merge-queue[bot]
3e6210befb Publish onyx-0.4.17.tgz 2026-01-07 23:42:00 +00:00
github-merge-queue[bot]
4b02046be1 Publish onyx-0.4.17.tgz 2026-01-07 23:40:02 +00:00
github-merge-queue[bot]
9289564aa5 Publish onyx-0.4.17.tgz 2026-01-07 23:03:51 +00:00
github-merge-queue[bot]
111f7c6558 Publish onyx-0.4.17.tgz 2026-01-07 22:38:20 +00:00
github-merge-queue[bot]
18c72e4554 Publish onyx-0.4.17.tgz 2026-01-07 21:53:37 +00:00
github-merge-queue[bot]
82736ff925 Publish onyx-0.4.17.tgz 2026-01-07 21:23:03 +00:00
github-merge-queue[bot]
dfabd71aae Publish onyx-0.4.17.tgz 2026-01-07 20:47:52 +00:00
github-merge-queue[bot]
f741bf2c36 Publish onyx-0.4.17.tgz 2026-01-07 20:42:06 +00:00
jmelahman
575934d517 Publish onyx-0.4.17.tgz 2026-01-07 19:53:33 +00:00
github-merge-queue[bot]
f748454ebb Publish onyx-0.4.17.tgz 2026-01-07 19:50:03 +00:00
github-merge-queue[bot]
d5b0072989 Publish onyx-0.4.17.tgz 2026-01-07 19:45:13 +00:00
github-merge-queue[bot]
041260341a Publish onyx-0.4.17.tgz 2026-01-07 18:39:41 +00:00
github-merge-queue[bot]
1f184e7afc Publish onyx-0.4.17.tgz 2026-01-07 18:20:42 +00:00
github-merge-queue[bot]
781dab3ea5 Publish onyx-0.4.17.tgz 2026-01-07 18:17:36 +00:00
github-merge-queue[bot]
70473d7b7e Publish onyx-0.4.17.tgz 2026-01-07 18:11:12 +00:00
github-merge-queue[bot]
c694b33fff Publish onyx-0.4.17.tgz 2026-01-07 17:49:55 +00:00
github-merge-queue[bot]
ff3f1cb607 Publish onyx-0.4.17.tgz 2026-01-07 17:45:21 +00:00
jmelahman
966a27ebee Publish onyx-0.4.17.tgz 2026-01-07 15:07:43 +00:00
github-merge-queue[bot]
a524321921 Publish onyx-0.4.17.tgz 2026-01-07 06:15:31 +00:00
jmelahman
a03c47a17f Publish onyx-0.4.17.tgz 2026-01-07 05:58:34 +00:00
github-merge-queue[bot]
d7bb26174a Publish onyx-0.4.17.tgz 2026-01-07 05:48:40 +00:00
github-merge-queue[bot]
fa51203707 Publish onyx-0.4.17.tgz 2026-01-07 05:47:22 +00:00
justin-tahara
937861e721 Publish onyx-0.4.17.tgz 2026-01-07 02:38:55 +00:00
jmelahman
f411a48650 Publish onyx-0.4.17.tgz 2026-01-07 01:12:23 +00:00
jmelahman
d1934398dd Publish onyx-0.4.17.tgz 2026-01-07 01:09:31 +00:00
jmelahman
472db781af Publish onyx-0.4.17.tgz 2026-01-07 00:20:20 +00:00
jmelahman
92d2e6e11e Publish onyx-0.4.17.tgz 2026-01-07 00:04:17 +00:00
jmelahman
44b413d1c5 Publish onyx-0.4.17.tgz 2026-01-07 00:01:41 +00:00
github-merge-queue[bot]
ac1305675a Publish onyx-0.4.17.tgz 2026-01-06 23:09:27 +00:00
justin-tahara
da5ea3cf75 Publish onyx-0.4.17.tgz 2026-01-06 22:53:23 +00:00
github-merge-queue[bot]
5520fd611f Publish onyx-0.4.17.tgz 2026-01-06 22:48:50 +00:00
github-merge-queue[bot]
8dfa9abd57 Publish onyx-0.4.17.tgz 2026-01-06 22:40:04 +00:00
github-merge-queue[bot]
e00085a95f Publish onyx-0.4.17.tgz 2026-01-06 22:00:39 +00:00
github-merge-queue[bot]
8a831dde79 Publish onyx-0.4.17.tgz 2026-01-06 21:20:27 +00:00
github-merge-queue[bot]
d82466ffc8 Publish onyx-0.4.17.tgz 2026-01-06 21:03:03 +00:00
github-merge-queue[bot]
d73f2c759d Publish onyx-0.4.17.tgz 2026-01-06 20:59:25 +00:00
github-merge-queue[bot]
8fd1f04722 Publish onyx-0.4.17.tgz 2026-01-06 20:42:57 +00:00
github-merge-queue[bot]
ecdda76e5a Publish onyx-0.4.17.tgz 2026-01-06 19:21:23 +00:00
github-merge-queue[bot]
0221929b13 Publish onyx-0.4.17.tgz 2026-01-06 18:50:56 +00:00
github-merge-queue[bot]
cfe82b49c9 Publish onyx-0.4.17.tgz 2026-01-06 18:27:06 +00:00
github-merge-queue[bot]
60461fb87c Publish onyx-0.4.17.tgz 2026-01-06 17:41:42 +00:00
github-merge-queue[bot]
769fdfd801 Publish onyx-0.4.17.tgz 2026-01-06 17:37:13 +00:00
github-merge-queue[bot]
4806371d09 Publish onyx-0.4.17.tgz 2026-01-06 16:24:28 +00:00
Subash-Mohan
c52fdf9922 Publish onyx-0.4.17.tgz 2026-01-06 08:47:46 +00:00
github-merge-queue[bot]
e1b9ce21b5 Publish onyx-0.4.17.tgz 2026-01-06 04:17:28 +00:00
github-merge-queue[bot]
3253450e95 Publish onyx-0.4.17.tgz 2026-01-06 03:00:55 +00:00
github-merge-queue[bot]
fc97091163 Publish onyx-0.4.17.tgz 2026-01-06 01:41:54 +00:00
github-merge-queue[bot]
01f1457ec9 Publish onyx-0.4.17.tgz 2026-01-06 01:38:52 +00:00
github-merge-queue[bot]
448a167648 Publish onyx-0.4.17.tgz 2026-01-06 00:43:45 +00:00
github-merge-queue[bot]
acb50f0aa5 Publish onyx-0.4.17.tgz 2026-01-05 23:37:12 +00:00
github-merge-queue[bot]
7b9e6d2cd6 Publish onyx-0.4.17.tgz 2026-01-05 22:16:55 +00:00
github-merge-queue[bot]
73a0a1a8e3 Publish onyx-0.4.17.tgz 2026-01-05 21:20:29 +00:00
github-merge-queue[bot]
ab65222841 Publish onyx-0.4.17.tgz 2026-01-05 20:49:39 +00:00
github-merge-queue[bot]
207c3a4540 Publish onyx-0.4.17.tgz 2026-01-05 20:36:05 +00:00
github-merge-queue[bot]
f5291ab0ba Publish onyx-0.4.17.tgz 2026-01-05 19:05:27 +00:00
jmelahman
df5ea64183 Publish onyx-0.4.17.tgz 2026-01-05 17:02:39 +00:00
github-merge-queue[bot]
a84556be4d Publish onyx-0.4.17.tgz 2026-01-05 01:28:24 +00:00
github-merge-queue[bot]
0e1fa32a00 Publish onyx-0.4.17.tgz 2026-01-04 21:42:24 +00:00
github-merge-queue[bot]
00fd3531c6 Publish onyx-0.4.17.tgz 2026-01-04 06:58:27 +00:00
yuhongsun96
9628c4e965 Publish onyx-0.4.17.tgz 2026-01-04 06:55:05 +00:00
jmelahman
4c2faf0cf2 Publish onyx-0.4.17.tgz 2026-01-03 07:53:36 +00:00
jmelahman
96f2e1eb2b Publish onyx-0.4.17.tgz 2026-01-03 07:50:23 +00:00
jmelahman
eb8e834a33 Publish onyx-0.4.17.tgz 2026-01-03 07:43:33 +00:00
jmelahman
aedca55735 Publish onyx-0.4.17.tgz 2026-01-03 07:27:30 +00:00
yuhongsun96
1aee5f5a75 Publish onyx-0.4.17.tgz 2026-01-03 03:47:42 +00:00
github-merge-queue[bot]
5b58657310 Publish onyx-0.4.17.tgz 2026-01-03 02:42:52 +00:00
github-merge-queue[bot]
64f2be22e6 Publish onyx-0.4.17.tgz 2026-01-03 02:36:59 +00:00
github-merge-queue[bot]
cd51f73360 Publish onyx-0.4.17.tgz 2026-01-03 02:22:46 +00:00
yuhongsun96
fea6572f3f Publish onyx-0.4.17.tgz 2026-01-03 01:58:33 +00:00
github-merge-queue[bot]
e5992d8af4 Publish onyx-0.4.17.tgz 2026-01-03 01:20:11 +00:00
yuhongsun96
7385df89e0 Publish onyx-0.4.17.tgz 2026-01-03 00:44:33 +00:00
github-merge-queue[bot]
edc9429357 Publish onyx-0.4.17.tgz 2026-01-03 00:01:59 +00:00
justin-tahara
acd75331da Publish onyx-0.4.17.tgz 2026-01-02 23:20:56 +00:00
jmelahman
ab9d49bb24 Publish onyx-0.4.17.tgz 2026-01-02 23:11:35 +00:00
github-merge-queue[bot]
470f4c672d Publish onyx-0.4.17.tgz 2026-01-02 22:33:03 +00:00
acaprau
5201d425aa Publish onyx-0.4.17.tgz 2026-01-02 22:11:53 +00:00
github-merge-queue[bot]
9adabe161e Publish onyx-0.4.17.tgz 2026-01-02 22:04:40 +00:00
jmelahman
604910e623 Publish onyx-0.4.17.tgz 2026-01-02 21:30:48 +00:00
justin-tahara
75f7964a48 Publish onyx-0.4.17.tgz 2026-01-02 21:11:12 +00:00
github-merge-queue[bot]
bd96e6f29b Publish onyx-0.4.17.tgz 2026-01-02 20:25:51 +00:00
github-merge-queue[bot]
eac06c089e Publish onyx-0.4.17.tgz 2026-01-02 20:19:06 +00:00
github-merge-queue[bot]
bf1a7efd76 Publish onyx-0.4.17.tgz 2026-01-02 20:11:15 +00:00
github-merge-queue[bot]
12fa091100 Publish onyx-0.4.17.tgz 2026-01-02 19:10:29 +00:00
github-merge-queue[bot]
195603b783 Publish onyx-0.4.17.tgz 2026-01-02 18:59:55 +00:00
github-merge-queue[bot]
888a5a28b3 Publish onyx-0.4.17.tgz 2026-01-02 18:23:20 +00:00
jmelahman
0cfdde5f54 Publish onyx-0.4.17.tgz 2026-01-02 18:05:24 +00:00
Subash-Mohan
52a45b3238 Publish onyx-0.4.17.tgz 2026-01-02 13:44:44 +00:00
github-merge-queue[bot]
079ce11a07 Publish onyx-0.4.17.tgz 2026-01-02 11:40:44 +00:00
Subash-Mohan
a6633f5867 Publish onyx-0.4.17.tgz 2026-01-02 10:44:51 +00:00
jmelahman
e460d1b4dc Publish onyx-0.4.17.tgz 2026-01-02 06:24:22 +00:00
jmelahman
e37936cdd4 Publish onyx-0.4.17.tgz 2026-01-02 06:11:14 +00:00
github-merge-queue[bot]
dafdff5fb1 Publish onyx-0.4.17.tgz 2026-01-02 05:09:02 +00:00
jmelahman
17bb5ce214 Publish onyx-0.4.17.tgz 2026-01-02 03:59:27 +00:00
jmelahman
b4ef75f26d Publish onyx-0.4.17.tgz 2026-01-02 03:11:51 +00:00
github-merge-queue[bot]
f68aff4c12 Publish onyx-0.4.17.tgz 2026-01-01 21:19:51 +00:00
jmelahman
c159ecbd82 Publish onyx-0.4.17.tgz 2026-01-01 21:11:31 +00:00
github-merge-queue[bot]
737dbe0d29 Publish onyx-0.4.17.tgz 2026-01-01 18:43:18 +00:00
github-merge-queue[bot]
0ac9591ef7 Publish onyx-0.4.17.tgz 2026-01-01 15:50:23 +00:00
github-merge-queue[bot]
72662d1507 Publish onyx-0.4.17.tgz 2026-01-01 15:37:12 +00:00
github-merge-queue[bot]
cf8dab90dd Publish onyx-0.4.17.tgz 2026-01-01 09:59:59 +00:00
github-merge-queue[bot]
ee76192f40 Publish onyx-0.4.17.tgz 2026-01-01 03:07:59 +00:00
Weves
58485f966a Publish onyx-0.4.17.tgz 2026-01-01 02:30:17 +00:00
github-merge-queue[bot]
87c837e102 Publish onyx-0.4.17.tgz 2026-01-01 01:54:20 +00:00
github-merge-queue[bot]
c02ca5acb6 Publish onyx-0.4.17.tgz 2026-01-01 01:36:01 +00:00
Weves
f23cd30b37 Publish onyx-0.4.17.tgz 2026-01-01 01:19:40 +00:00
yuhongsun96
34d8d831a3 Publish onyx-0.4.17.tgz 2026-01-01 00:49:13 +00:00
github-merge-queue[bot]
4120981723 Publish onyx-0.4.17.tgz 2026-01-01 00:12:37 +00:00
github-merge-queue[bot]
6f7ee9d1a4 Publish onyx-0.4.17.tgz 2025-12-31 22:16:38 +00:00
Weves
6052aa11e8 Publish onyx-0.4.17.tgz 2025-12-31 22:02:49 +00:00
github-merge-queue[bot]
b0028f13f4 Publish onyx-0.4.17.tgz 2025-12-31 21:09:49 +00:00
github-merge-queue[bot]
beb602414b Publish onyx-0.4.17.tgz 2025-12-31 20:45:48 +00:00
yuhongsun96
3831d674e8 Publish onyx-0.4.17.tgz 2025-12-31 19:16:26 +00:00
yuhongsun96
6f578624c4 Publish onyx-0.4.17.tgz 2025-12-31 18:12:19 +00:00
github-merge-queue[bot]
1cfd22f35f Publish onyx-0.4.17.tgz 2025-12-31 11:43:37 +00:00
github-merge-queue[bot]
1bc109b663 Publish onyx-0.4.17.tgz 2025-12-31 07:58:04 +00:00
Subash-Mohan
965aa86e39 Publish onyx-0.4.17.tgz 2025-12-31 07:31:40 +00:00
github-merge-queue[bot]
4e46b763ed Publish onyx-0.4.17.tgz 2025-12-31 05:28:37 +00:00
github-merge-queue[bot]
11e635cadd Publish onyx-0.4.17.tgz 2025-12-31 02:18:35 +00:00
wenxi-onyx
5c22067803 Publish onyx-0.4.17.tgz 2025-12-31 02:09:08 +00:00
github-merge-queue[bot]
c1891e5a17 Publish onyx-0.4.17.tgz 2025-12-31 02:08:30 +00:00
github-merge-queue[bot]
6a5faefb1c Publish onyx-0.4.17.tgz 2025-12-31 01:49:32 +00:00
github-merge-queue[bot]
efaa5b94fb Publish onyx-0.4.17.tgz 2025-12-31 01:00:22 +00:00
Weves
de3f7c1be9 Publish onyx-0.4.17.tgz 2025-12-31 00:56:56 +00:00
github-merge-queue[bot]
90af8f7755 Publish onyx-0.4.17.tgz 2025-12-31 00:31:39 +00:00
github-merge-queue[bot]
2a32015dd6 Publish onyx-0.4.17.tgz 2025-12-30 22:36:11 +00:00
github-merge-queue[bot]
33c7808086 Publish onyx-0.4.17.tgz 2025-12-30 22:26:06 +00:00
github-merge-queue[bot]
defb7e041d Publish onyx-0.4.17.tgz 2025-12-30 21:45:55 +00:00
github-merge-queue[bot]
7f489a8d10 Publish onyx-0.4.17.tgz 2025-12-30 21:20:03 +00:00
yuhongsun96
3314954883 Publish onyx-0.4.17.tgz 2025-12-30 20:23:03 +00:00
github-merge-queue[bot]
c9f0da16fb Publish onyx-0.4.17.tgz 2025-12-30 19:59:56 +00:00
github-merge-queue[bot]
fd06cd55b0 Publish onyx-0.4.17.tgz 2025-12-30 19:52:17 +00:00
github-merge-queue[bot]
cd7a635cbe Publish onyx-0.4.17.tgz 2025-12-30 19:22:39 +00:00
github-merge-queue[bot]
30426f5b38 Publish onyx-0.4.17.tgz 2025-12-30 18:59:56 +00:00
yuhongsun96
a773598440 Publish onyx-0.4.17.tgz 2025-12-30 18:52:20 +00:00
jmelahman
a864216a7c Publish onyx-0.4.17.tgz 2025-12-30 18:50:46 +00:00
github-merge-queue[bot]
9b02c2c392 Publish onyx-0.4.17.tgz 2025-12-30 18:45:50 +00:00
github-merge-queue[bot]
a5fcce39fc Publish onyx-0.4.17.tgz 2025-12-30 18:44:39 +00:00
Weves
917e503bb6 Publish onyx-0.4.17.tgz 2025-12-30 17:37:44 +00:00
jmelahman
31ef198e75 Publish onyx-0.4.17.tgz 2025-12-30 16:06:57 +00:00
jmelahman
aececde888 Publish onyx-0.4.17.tgz 2025-12-30 16:05:42 +00:00
raunakab
76cdf69916 Publish onyx-0.4.17.tgz 2025-12-30 07:27:44 +00:00
jmelahman
c4c03ebc89 Publish onyx-0.4.17.tgz 2025-12-30 06:43:23 +00:00
jmelahman
56f982b940 Publish onyx-0.4.17.tgz 2025-12-30 03:59:13 +00:00
github-merge-queue[bot]
0057a53af1 Publish onyx-0.4.17.tgz 2025-12-30 03:56:11 +00:00
jmelahman
5fc3cfa5b0 Publish onyx-0.4.17.tgz 2025-12-30 03:29:56 +00:00
jmelahman
7ccf646bec Publish onyx-0.4.17.tgz 2025-12-30 02:30:36 +00:00
yuhongsun96
45bf1c0394 Publish onyx-0.4.17.tgz 2025-12-30 01:25:21 +00:00
jmelahman
6d697b6151 Publish onyx-0.4.17.tgz 2025-12-30 01:22:55 +00:00
yuhongsun96
74ccd5c59c Publish onyx-0.4.17.tgz 2025-12-30 00:41:11 +00:00
jmelahman
2fab387242 Publish onyx-0.4.17.tgz 2025-12-30 00:30:54 +00:00
github-merge-queue[bot]
184b1a4269 Publish onyx-0.4.17.tgz 2025-12-30 00:28:12 +00:00
yuhongsun96
f8421830d0 Publish onyx-0.4.17.tgz 2025-12-30 00:19:20 +00:00
github-merge-queue[bot]
777a4824fc Publish onyx-0.4.17.tgz 2025-12-30 00:01:58 +00:00
Weves
e105cf76f9 Publish onyx-0.4.17.tgz 2025-12-29 22:10:31 +00:00
github-merge-queue[bot]
b246906c43 Publish onyx-0.4.17.tgz 2025-12-29 20:38:05 +00:00
github-merge-queue[bot]
1c05950f06 Publish onyx-0.4.17.tgz 2025-12-29 20:04:03 +00:00
github-merge-queue[bot]
95ee450002 Publish onyx-0.4.17.tgz 2025-12-29 19:59:36 +00:00
github-merge-queue[bot]
e522426c94 Publish onyx-0.4.17.tgz 2025-12-29 18:05:42 +00:00
github-merge-queue[bot]
25298e3953 Publish onyx-0.4.17.tgz 2025-12-29 17:47:49 +00:00
raunakab
4a674e015c Publish onyx-0.4.17.tgz 2025-12-29 17:31:12 +00:00
github-merge-queue[bot]
502098cef9 Publish onyx-0.4.17.tgz 2025-12-29 03:42:32 +00:00
wenxi-onyx
1dd8b9534e Publish onyx-0.4.17.tgz 2025-12-28 22:31:00 +00:00
github-merge-queue[bot]
2415c90ada Publish onyx-0.4.17.tgz 2025-12-28 21:03:56 +00:00
github-merge-queue[bot]
aeb7224681 Publish onyx-0.4.17.tgz 2025-12-28 20:10:40 +00:00
Weves
d7263771cf Publish onyx-0.4.17.tgz 2025-12-28 05:10:09 +00:00
jmelahman
c7d72f1724 Publish onyx-0.4.17.tgz 2025-12-27 20:17:06 +00:00
github-merge-queue[bot]
6ef3c5fd66 Publish onyx-0.4.17.tgz 2025-12-27 19:31:19 +00:00
github-merge-queue[bot]
aa1586f742 Publish onyx-0.4.17.tgz 2025-12-27 17:13:16 +00:00
raunakab
79c7bc7b23 Publish onyx-0.4.17.tgz 2025-12-27 06:38:26 +00:00
raunakab
b777784aff Publish onyx-0.4.17.tgz 2025-12-27 06:02:45 +00:00
raunakab
90f721f54e Publish onyx-0.4.17.tgz 2025-12-27 05:02:15 +00:00
raunakab
c809001cc4 Publish onyx-0.4.17.tgz 2025-12-27 05:01:57 +00:00
jmelahman
31aa2cc581 Publish onyx-0.4.17.tgz 2025-12-27 04:40:47 +00:00
github-merge-queue[bot]
066b6c22e5 Publish onyx-0.4.17.tgz 2025-12-27 04:35:21 +00:00
github-merge-queue[bot]
442efdbba5 Publish onyx-0.4.17.tgz 2025-12-27 02:29:04 +00:00
justin-tahara
a1c22a8fba Publish onyx-0.4.17.tgz 2025-12-27 01:58:14 +00:00
github-merge-queue[bot]
791abb6e17 Publish onyx-0.4.17.tgz 2025-12-27 01:49:52 +00:00
github-merge-queue[bot]
d8c8c9e14b Publish onyx-0.4.17.tgz 2025-12-27 01:23:58 +00:00
justin-tahara
2e0457e4d3 Publish onyx-0.4.17.tgz 2025-12-27 00:18:08 +00:00
justin-tahara
7c384ff874 Publish onyx-0.4.17.tgz 2025-12-27 00:06:13 +00:00
github-merge-queue[bot]
6b1a7f7e6c Publish onyx-0.4.17.tgz 2025-12-26 23:24:08 +00:00
github-merge-queue[bot]
fb44edba0d Publish onyx-0.4.17.tgz 2025-12-26 22:57:08 +00:00
github-merge-queue[bot]
8c8c5c892a Publish onyx-0.4.17.tgz 2025-12-26 21:15:42 +00:00
github-merge-queue[bot]
fdff75e9e5 Publish onyx-0.4.17.tgz 2025-12-26 21:13:24 +00:00
github-merge-queue[bot]
5b1895deaa Publish onyx-0.4.17.tgz 2025-12-26 21:01:46 +00:00
github-merge-queue[bot]
201fe1e79e Publish onyx-0.4.17.tgz 2025-12-26 19:42:23 +00:00
github-merge-queue[bot]
bfb45632fb Publish onyx-0.4.17.tgz 2025-12-26 17:46:52 +00:00
raunakab
73a49a7822 Publish onyx-0.4.17.tgz 2025-12-26 17:01:13 +00:00
raunakab
afb738a06c Publish onyx-0.4.17.tgz 2025-12-26 16:07:38 +00:00
rohoswagger
de14705ae9 Publish onyx-0.4.17.tgz 2025-12-26 03:04:51 +00:00
jmelahman
1399469568 Publish onyx-0.4.17.tgz 2025-12-25 21:41:48 +00:00
rohoswagger
246022bbfe Publish onyx-0.4.17.tgz 2025-12-25 21:36:36 +00:00
rohoswagger
48a7baced9 Publish onyx-0.4.17.tgz 2025-12-25 21:32:08 +00:00
jmelahman
473c07d54a Publish onyx-0.4.17.tgz 2025-12-25 20:01:34 +00:00
raunakab
42815afc8e Publish onyx-0.4.17.tgz 2025-12-25 19:41:21 +00:00
github-merge-queue[bot]
3daff89ec7 Publish onyx-0.4.17.tgz 2025-12-25 18:09:52 +00:00
raunakab
2962d47c24 Publish onyx-0.4.17.tgz 2025-12-25 10:17:24 +00:00
raunakab
d7ca795b00 Publish onyx-0.4.17.tgz 2025-12-25 09:54:47 +00:00
raunakab
a3c81da469 Publish onyx-0.4.17.tgz 2025-12-25 07:24:34 +00:00
github-merge-queue[bot]
0a112fe1b2 Publish onyx-0.4.17.tgz 2025-12-25 05:26:30 +00:00
jmelahman
12d49e3ef3 Publish onyx-0.4.17.tgz 2025-12-25 04:45:18 +00:00
rohoswagger
748bd87985 Publish onyx-0.4.17.tgz 2025-12-25 02:39:16 +00:00
github-merge-queue[bot]
c3b820855c Publish onyx-0.4.17.tgz 2025-12-25 00:38:49 +00:00
justin-tahara
3b0ca278de Publish onyx-0.4.17.tgz 2025-12-24 20:26:26 +00:00
justin-tahara
70f04e6c63 Publish onyx-0.4.17.tgz 2025-12-24 20:22:40 +00:00
jmelahman
72d166ef3d Publish onyx-0.4.17.tgz 2025-12-24 19:38:47 +00:00
jmelahman
aa7d487576 Publish onyx-0.4.17.tgz 2025-12-24 19:18:54 +00:00
github-merge-queue[bot]
4295080357 Publish onyx-0.4.17.tgz 2025-12-24 18:23:28 +00:00
wenxi-onyx
c97ffa0165 Publish onyx-0.4.17.tgz 2025-12-24 17:38:07 +00:00
raunakab
5b9923369c Publish onyx-0.4.17.tgz 2025-12-24 16:10:08 +00:00
raunakab
2230d0d7da Publish onyx-0.4.17.tgz 2025-12-24 06:56:49 +00:00
Subash-Mohan
f90a623839 Publish onyx-0.4.17.tgz 2025-12-24 06:48:10 +00:00
raunakab
2d45232402 Publish onyx-0.4.17.tgz 2025-12-24 06:36:18 +00:00
github-merge-queue[bot]
10c6adb185 Publish onyx-0.4.17.tgz 2025-12-24 06:21:43 +00:00
github-merge-queue[bot]
64f00ecc91 Publish onyx-0.4.17.tgz 2025-12-24 04:54:46 +00:00
github-merge-queue[bot]
8020bb5242 Publish onyx-0.4.17.tgz 2025-12-24 03:51:25 +00:00
yuhongsun96
016ce702d6 Publish onyx-0.4.17.tgz 2025-12-24 03:08:03 +00:00
raunakab
e8b59adec7 Publish onyx-0.4.17.tgz 2025-12-24 03:01:23 +00:00
yuhongsun96
f8e41b4e88 Publish onyx-0.4.17.tgz 2025-12-24 02:46:22 +00:00
yuhongsun96
f8b063700a Publish onyx-0.4.17.tgz 2025-12-24 02:09:59 +00:00
raunakab
7422151cf6 Publish onyx-0.4.17.tgz 2025-12-24 01:55:17 +00:00
raunakab
ffadcb2324 Publish onyx-0.4.17.tgz 2025-12-24 01:54:40 +00:00
github-merge-queue[bot]
b6ae3a1bfb Publish onyx-0.4.17.tgz 2025-12-23 23:46:11 +00:00
github-merge-queue[bot]
0c40dc17c2 Publish onyx-0.4.17.tgz 2025-12-23 23:38:26 +00:00
raunakab
c5d5f138cc Publish onyx-0.4.17.tgz 2025-12-23 23:12:18 +00:00
raunakab
03a8c570ba Publish onyx-0.4.17.tgz 2025-12-23 22:38:58 +00:00
github-merge-queue[bot]
23c7f75bf2 Publish onyx-0.4.17.tgz 2025-12-23 22:37:59 +00:00
yuhongsun96
d42362189b Publish onyx-0.4.17.tgz 2025-12-23 22:20:00 +00:00
github-merge-queue[bot]
37886b0b45 Publish onyx-0.4.17.tgz 2025-12-23 21:44:43 +00:00
justin-tahara
1450b3fa1a Publish onyx-0.4.17.tgz 2025-12-23 21:27:28 +00:00
github-merge-queue[bot]
c04ab841f4 Publish onyx-0.4.17.tgz 2025-12-23 19:44:27 +00:00
jmelahman
d98e7e48a3 Publish onyx-0.4.17.tgz 2025-12-23 17:21:40 +00:00
yuhongsun96
7af945da0f Publish onyx-0.4.17.tgz 2025-12-23 04:14:03 +00:00
github-merge-queue[bot]
7c407da697 Publish onyx-0.4.17.tgz 2025-12-23 03:26:41 +00:00
yuhongsun96
7dd2ccf39c Publish onyx-0.4.17.tgz 2025-12-23 03:09:56 +00:00
wenxi-onyx
33f967d9f7 Publish onyx-0.4.17.tgz 2025-12-23 03:01:07 +00:00
github-merge-queue[bot]
d9f5fa84c6 Publish onyx-0.4.17.tgz 2025-12-23 02:26:39 +00:00
yuhongsun96
418e8797f1 Publish onyx-0.4.17.tgz 2025-12-23 02:11:24 +00:00
wenxi-onyx
fd0d12cc24 Publish onyx-0.4.17.tgz 2025-12-23 01:46:24 +00:00
justin-tahara
458e8106e7 Publish onyx-0.4.17.tgz 2025-12-23 01:22:34 +00:00
github-merge-queue[bot]
bfd7498a3d Publish onyx-0.4.17.tgz 2025-12-23 01:22:22 +00:00
github-merge-queue[bot]
ca290e8061 Publish onyx-0.4.17.tgz 2025-12-23 01:09:51 +00:00
github-merge-queue[bot]
fb287bad7a Publish onyx-0.4.17.tgz 2025-12-23 00:39:12 +00:00
github-merge-queue[bot]
5f5049f779 Publish onyx-0.4.17.tgz 2025-12-23 00:26:22 +00:00
github-merge-queue[bot]
8b66df511c Publish onyx-0.4.17.tgz 2025-12-23 00:14:26 +00:00
wenxi-onyx
d6ff7bb2e5 Publish onyx-0.4.17.tgz 2025-12-22 22:55:08 +00:00
github-merge-queue[bot]
1551eca12c Publish onyx-0.4.17.tgz 2025-12-22 21:50:34 +00:00
jmelahman
4e4823a91e Publish onyx-0.4.17.tgz 2025-12-22 20:13:26 +00:00
github-merge-queue[bot]
14294cd513 Publish onyx-0.4.17.tgz 2025-12-22 19:19:02 +00:00
github-merge-queue[bot]
1bca23ffdc Publish onyx-0.4.17.tgz 2025-12-22 19:12:52 +00:00
github-merge-queue[bot]
7f410ad9d8 Publish onyx-0.4.17.tgz 2025-12-22 18:57:52 +00:00
justin-tahara
30c065748b Publish onyx-0.4.17.tgz 2025-12-22 18:45:08 +00:00
wenxi-onyx
3b342ac800 Publish onyx-0.4.17.tgz 2025-12-22 18:07:26 +00:00
github-merge-queue[bot]
10dbc0150f Publish onyx-0.4.17.tgz 2025-12-22 16:41:06 +00:00
acaprau
f26ef858af Publish onyx-0.4.17.tgz 2025-12-22 16:06:54 +00:00
raunakab
3a1ecd4470 Publish onyx-0.4.17.tgz 2025-12-22 16:01:17 +00:00
jmelahman
17c793556b Publish onyx-0.4.17.tgz 2025-12-22 10:37:41 +00:00
jmelahman
0b413b75f6 Publish onyx-0.4.17.tgz 2025-12-22 08:47:08 +00:00
jmelahman
b317bdddb7 Publish onyx-0.4.17.tgz 2025-12-22 08:31:02 +00:00
jmelahman
33baf24173 Publish onyx-0.4.17.tgz 2025-12-22 08:22:24 +00:00
jmelahman
09b2258269 Publish onyx-0.4.17.tgz 2025-12-22 08:21:31 +00:00
yuhongsun96
1817fd71bb Publish onyx-0.4.17.tgz 2025-12-22 02:26:05 +00:00
yuhongsun96
de930f6f9b Publish onyx-0.4.17.tgz 2025-12-22 01:24:38 +00:00
github-merge-queue[bot]
d887ff2a8e Publish onyx-0.4.17.tgz 2025-12-22 00:34:40 +00:00
jmelahman
63bdcff060 Publish onyx-0.4.17.tgz 2025-12-22 00:16:17 +00:00
yuhongsun96
382b11ae48 Publish onyx-0.4.17.tgz 2025-12-21 23:08:24 +00:00
yuhongsun96
3661670b42 Publish onyx-0.4.17.tgz 2025-12-21 22:57:39 +00:00
github-merge-queue[bot]
0fd15f2bb4 Publish onyx-0.4.17.tgz 2025-12-21 22:26:18 +00:00
yuhongsun96
c1cd609f15 Publish onyx-0.4.17.tgz 2025-12-21 21:49:07 +00:00
github-merge-queue[bot]
803e6cefd9 Publish onyx-0.4.17.tgz 2025-12-21 20:53:54 +00:00
jmelahman
246c47f6f8 Publish onyx-0.4.17.tgz 2025-12-21 20:10:07 +00:00
yuhongsun96
85a46e7a2d Publish onyx-0.4.17.tgz 2025-12-21 07:29:06 +00:00
yuhongsun96
3ddd497f80 Publish onyx-0.4.17.tgz 2025-12-21 06:46:57 +00:00
jmelahman
ef29c3663f Publish onyx-0.4.17.tgz 2025-12-21 04:21:49 +00:00
yuhongsun96
3822392875 Publish onyx-0.4.17.tgz 2025-12-21 04:09:05 +00:00
yuhongsun96
a5fdef5c1d Publish onyx-0.4.17.tgz 2025-12-21 02:28:47 +00:00
jmelahman
7a50d21ed5 Publish onyx-0.4.17.tgz 2025-12-20 15:20:57 +00:00
jmelahman
4c38f3d510 Publish onyx-0.4.17.tgz 2025-12-20 15:04:05 +00:00
jmelahman
3fc66af7c9 Publish onyx-0.4.17.tgz 2025-12-20 14:38:56 +00:00
jmelahman
6838b1dd20 Publish onyx-0.4.17.tgz 2025-12-20 14:05:36 +00:00
jmelahman
08459d643e Publish onyx-0.4.17.tgz 2025-12-20 13:02:41 +00:00
jmelahman
e85b0b1b30 Publish onyx-0.4.17.tgz 2025-12-20 12:30:01 +00:00
jmelahman
eb9e8362f1 Publish onyx-0.4.17.tgz 2025-12-20 12:13:26 +00:00
yuhongsun96
2a6baf8f4b Publish onyx-0.4.17.tgz 2025-12-20 04:32:42 +00:00
yuhongsun96
c0bfccb479 Publish onyx-0.4.17.tgz 2025-12-20 04:23:45 +00:00
yuhongsun96
be10b599ba Publish onyx-0.4.17.tgz 2025-12-20 03:15:02 +00:00
github-merge-queue[bot]
3a1d5e5bdc Publish onyx-0.4.17.tgz 2025-12-20 02:40:50 +00:00
github-merge-queue[bot]
d8e6fbea95 Publish onyx-0.4.17.tgz 2025-12-20 01:45:12 +00:00
yuhongsun96
1bb202ae7c Publish onyx-0.4.17.tgz 2025-12-20 01:19:44 +00:00
github-merge-queue[bot]
2d66631d9b Publish onyx-0.4.17.tgz 2025-12-20 01:12:49 +00:00
github-merge-queue[bot]
9596d0046f Publish onyx-0.4.17.tgz 2025-12-20 01:10:37 +00:00
github-merge-queue[bot]
4b723fb026 Publish onyx-0.4.17.tgz 2025-12-20 01:05:56 +00:00
yuhongsun96
7d19c451bb Publish onyx-0.4.17.tgz 2025-12-20 00:47:43 +00:00
jmelahman
5e811c69ed Publish onyx-0.4.17.tgz 2025-12-20 00:36:25 +00:00
yuhongsun96
acbdc34702 Publish onyx-0.4.17.tgz 2025-12-20 00:13:04 +00:00
yuhongsun96
62162485f9 Publish onyx-0.4.17.tgz 2025-12-19 23:51:05 +00:00
justin-tahara
c2ed8c98d1 Publish onyx-0.4.17.tgz 2025-12-19 23:50:01 +00:00
yuhongsun96
8760915ecd Publish onyx-0.4.17.tgz 2025-12-19 23:38:30 +00:00
yuhongsun96
1cb1e16d31 Publish onyx-0.4.17.tgz 2025-12-19 23:10:13 +00:00
yuhongsun96
cd5ff24bdf Publish onyx-0.4.17.tgz 2025-12-19 23:00:04 +00:00
yuhongsun96
0cda5ea120 Publish onyx-0.4.17.tgz 2025-12-19 22:13:14 +00:00
github-merge-queue[bot]
748a4f1859 Publish onyx-0.4.17.tgz 2025-12-19 22:03:10 +00:00
jmelahman
4b56d37c48 Publish onyx-0.4.17.tgz 2025-12-19 21:44:38 +00:00
yuhongsun96
1564526e2b Publish onyx-0.4.17.tgz 2025-12-19 21:31:02 +00:00
github-merge-queue[bot]
e4dd2dca34 Publish onyx-0.4.17.tgz 2025-12-19 21:19:05 +00:00
github-merge-queue[bot]
55f29eef37 Publish onyx-0.4.17.tgz 2025-12-19 20:42:41 +00:00
github-merge-queue[bot]
f52aef5697 Publish onyx-0.4.17.tgz 2025-12-19 20:32:34 +00:00
jmelahman
e73b08b1b5 Publish onyx-0.4.17.tgz 2025-12-19 20:01:07 +00:00
github-merge-queue[bot]
ea72f4281f Publish onyx-0.4.17.tgz 2025-12-19 19:49:32 +00:00
github-merge-queue[bot]
632f51f62e Publish onyx-0.4.17.tgz 2025-12-19 19:26:56 +00:00
raunakab
ae00cb671a Publish onyx-0.4.17.tgz 2025-12-19 19:12:17 +00:00
yuhongsun96
e0fbb64dde Publish onyx-0.4.17.tgz 2025-12-19 18:48:44 +00:00
jmelahman
b1db38765d Publish onyx-0.4.17.tgz 2025-12-19 18:04:51 +00:00
rohoswagger
f6d663b638 Publish onyx-0.4.17.tgz 2025-12-19 17:53:21 +00:00
github-merge-queue[bot]
0658019b9d Publish onyx-0.4.17.tgz 2025-12-19 17:42:53 +00:00
jmelahman
bf76262630 Publish onyx-0.4.17.tgz 2025-12-19 15:45:12 +00:00
jmelahman
6c90993695 Publish onyx-0.4.17.tgz 2025-12-19 14:51:21 +00:00
jmelahman
c113f49222 Publish onyx-0.4.17.tgz 2025-12-19 14:38:14 +00:00
jmelahman
32087cf85b Publish onyx-0.4.17.tgz 2025-12-19 12:08:35 +00:00
wenxi-onyx
46df314861 Publish onyx-0.4.17.tgz 2025-12-19 07:09:58 +00:00
wenxi-onyx
025921093f Publish onyx-0.4.17.tgz 2025-12-19 06:29:14 +00:00
yuhongsun96
47e11967a7 Publish onyx-0.4.17.tgz 2025-12-19 04:31:12 +00:00
yuhongsun96
60ff7459c5 Publish onyx-0.4.17.tgz 2025-12-19 03:00:52 +00:00
github-merge-queue[bot]
fa90278315 Publish onyx-0.4.17.tgz 2025-12-19 01:59:20 +00:00
github-merge-queue[bot]
330c1a0a8f Publish onyx-0.4.17.tgz 2025-12-19 01:45:34 +00:00
yuhongsun96
82e62e78ae Publish onyx-0.4.17.tgz 2025-12-19 01:18:48 +00:00
justin-tahara
7c6ac5f4e8 Publish onyx-0.4.17.tgz 2025-12-19 01:15:48 +00:00
github-merge-queue[bot]
ec49127cd5 Publish onyx-0.4.17.tgz 2025-12-19 01:03:57 +00:00
wenxi-onyx
a2c7ed8c9f Publish onyx-0.4.17.tgz 2025-12-19 00:50:16 +00:00
github-merge-queue[bot]
4a7a708e72 Publish onyx-0.4.17.tgz 2025-12-19 00:38:51 +00:00
yuhongsun96
f98258370e Publish onyx-0.4.17.tgz 2025-12-18 23:51:50 +00:00
github-merge-queue[bot]
7282bea848 Publish onyx-0.4.17.tgz 2025-12-18 23:28:10 +00:00
github-merge-queue[bot]
f5ae8b0280 Publish onyx-0.4.17.tgz 2025-12-18 23:07:59 +00:00
Weves
7b03bc9813 Publish onyx-0.4.17.tgz 2025-12-18 22:52:49 +00:00
yuhongsun96
e37ff4a899 Publish onyx-0.4.17.tgz 2025-12-18 22:10:22 +00:00
github-merge-queue[bot]
b6b204291d Publish onyx-0.4.17.tgz 2025-12-18 20:54:34 +00:00
yuhongsun96
23d827d939 Publish onyx-0.4.17.tgz 2025-12-18 19:47:11 +00:00
yuhongsun96
c387ef1dca Publish onyx-0.4.17.tgz 2025-12-18 19:37:17 +00:00
github-merge-queue[bot]
94c16fd705 Publish onyx-0.4.17.tgz 2025-12-18 18:56:58 +00:00
rohoswagger
90ccccc1e5 Publish onyx-0.4.17.tgz 2025-12-18 18:19:23 +00:00
rohoswagger
912240e139 Publish onyx-0.4.17.tgz 2025-12-18 18:12:24 +00:00
github-merge-queue[bot]
1a14a0c38d Publish onyx-0.4.17.tgz 2025-12-18 17:54:07 +00:00
github-merge-queue[bot]
69d3903808 Publish onyx-0.4.17.tgz 2025-12-18 11:16:09 +00:00
jmelahman
b5f6c17f42 Publish onyx-0.4.17.tgz 2025-12-18 10:44:07 +00:00
jmelahman
dd2bfe1252 Publish onyx-0.4.17.tgz 2025-12-18 07:44:44 +00:00
github-merge-queue[bot]
7d1a6a68e6 Publish onyx-0.4.17.tgz 2025-12-18 05:39:43 +00:00
jmelahman
8dc93216f4 Publish onyx-0.4.17.tgz 2025-12-18 05:05:18 +00:00
yuhongsun96
28bb4ea931 Publish onyx-0.4.17.tgz 2025-12-18 04:17:31 +00:00
yuhongsun96
b387d7eb94 Publish onyx-0.4.17.tgz 2025-12-18 03:46:08 +00:00
nmgarza5
4c9fe3c543 Publish onyx-0.4.17.tgz 2025-12-18 03:31:26 +00:00
wenxi-onyx
2e9fb7368e Publish onyx-0.4.17.tgz 2025-12-18 03:09:40 +00:00
yuhongsun96
4e15917e0b Publish onyx-0.4.17.tgz 2025-12-18 03:00:14 +00:00
github-merge-queue[bot]
d93eb4ba0e Publish onyx-0.4.17.tgz 2025-12-18 01:57:20 +00:00
yuhongsun96
344c673504 Publish onyx-0.4.17.tgz 2025-12-18 01:13:06 +00:00
github-merge-queue[bot]
a40842dd60 Publish onyx-0.4.17.tgz 2025-12-18 00:41:23 +00:00
github-merge-queue[bot]
8cd43ebc2c Publish onyx-0.4.17.tgz 2025-12-18 00:38:43 +00:00
github-merge-queue[bot]
e5832a0d60 Publish onyx-0.4.17.tgz 2025-12-18 00:08:21 +00:00
wenxi-onyx
acd25c914d Publish onyx-0.4.17.tgz 2025-12-17 23:25:24 +00:00
github-merge-queue[bot]
2a091a79b7 Publish onyx-0.4.17.tgz 2025-12-17 23:07:47 +00:00
yuhongsun96
9c99709322 Publish onyx-0.4.17.tgz 2025-12-17 22:54:07 +00:00
jmelahman
416e8fb580 Publish onyx-0.4.17.tgz 2025-12-17 22:52:53 +00:00
github-merge-queue[bot]
d87c479085 Publish onyx-0.4.17.tgz 2025-12-17 21:42:35 +00:00
jmelahman
192a0818b9 Publish onyx-0.4.17.tgz 2025-12-17 21:28:23 +00:00
github-merge-queue[bot]
999042f475 Publish onyx-0.4.17.tgz 2025-12-17 21:26:19 +00:00
github-merge-queue[bot]
1d4150e8eb Publish onyx-0.4.17.tgz 2025-12-17 21:00:36 +00:00
wenxi-onyx
2548d5bb67 Publish onyx-0.4.17.tgz 2025-12-17 20:38:55 +00:00
Weves
fdf955d6ca Publish onyx-0.4.17.tgz 2025-12-17 20:27:57 +00:00
Weves
4ad13fede3 Publish onyx-0.4.17.tgz 2025-12-17 20:09:00 +00:00
github-merge-queue[bot]
2fa85dcc6c Publish onyx-0.4.17.tgz 2025-12-17 19:28:44 +00:00
github-merge-queue[bot]
3d95859b66 Publish onyx-0.4.17.tgz 2025-12-17 18:51:44 +00:00
raunakab
b1ee288296 Publish onyx-0.4.17.tgz 2025-12-17 17:00:58 +00:00
jmelahman
8c09b03a97 Publish onyx-0.4.17.tgz 2025-12-17 09:11:52 +00:00
jmelahman
3c2e5400d5 Publish onyx-0.4.17.tgz 2025-12-17 09:01:56 +00:00
github-merge-queue[bot]
0c592d4b29 Publish onyx-0.4.17.tgz 2025-12-17 07:21:46 +00:00
jmelahman
8d9389a0aa Publish onyx-0.4.17.tgz 2025-12-17 07:08:16 +00:00
jmelahman
fa345f616b Publish onyx-0.4.17.tgz 2025-12-17 06:17:03 +00:00
github-merge-queue[bot]
b44465d88b Publish onyx-0.4.17.tgz 2025-12-17 05:53:17 +00:00
github-merge-queue[bot]
63393e9dd0 Publish onyx-0.4.17.tgz 2025-12-17 04:08:08 +00:00
yuhongsun96
3eb2c3816a Publish onyx-0.4.17.tgz 2025-12-17 03:54:06 +00:00
yuhongsun96
951e0d8dc7 Publish onyx-0.4.17.tgz 2025-12-17 03:41:30 +00:00
github-merge-queue[bot]
98b2aef3e4 Publish onyx-0.4.17.tgz 2025-12-17 03:00:36 +00:00
github-merge-queue[bot]
cce9ea783e Publish onyx-0.4.17.tgz 2025-12-17 02:53:36 +00:00
github-merge-queue[bot]
6f4d8e612a Publish onyx-0.4.17.tgz 2025-12-17 02:53:05 +00:00
yuhongsun96
4daa7ac0ea Publish onyx-0.4.17.tgz 2025-12-17 02:26:02 +00:00
justin-tahara
9b1a09e152 Publish onyx-0.4.17.tgz 2025-12-17 01:01:05 +00:00
github-merge-queue[bot]
2ef9f72cda Publish onyx-0.4.17.tgz 2025-12-17 00:40:58 +00:00
github-merge-queue[bot]
c5bfd21752 Publish onyx-0.4.17.tgz 2025-12-17 00:27:58 +00:00
github-merge-queue[bot]
38e61ae794 Publish onyx-0.4.17.tgz 2025-12-17 00:19:42 +00:00
github-merge-queue[bot]
ec7a4217b0 Publish onyx-0.4.17.tgz 2025-12-16 23:37:50 +00:00
github-merge-queue[bot]
727e0b8d89 Publish onyx-0.4.17.tgz 2025-12-16 23:32:11 +00:00
github-merge-queue[bot]
e5dfdc5bc3 Publish onyx-0.4.17.tgz 2025-12-16 23:14:55 +00:00
github-merge-queue[bot]
ed552377dc Publish onyx-0.4.17.tgz 2025-12-16 23:06:51 +00:00
justin-tahara
7cc484e8bc Publish onyx-0.4.17.tgz 2025-12-16 22:51:50 +00:00
github-merge-queue[bot]
958c219cef Publish onyx-0.4.17.tgz 2025-12-16 22:34:00 +00:00
justin-tahara
d94ea1049f Publish onyx-0.4.17.tgz 2025-12-16 22:20:01 +00:00
github-merge-queue[bot]
994e1f8afa Publish onyx-0.4.16.tgz 2025-12-16 21:45:40 +00:00
github-merge-queue[bot]
ddecbf6c47 Publish onyx-0.4.16.tgz 2025-12-16 21:38:20 +00:00
github-merge-queue[bot]
c5d0172351 Publish onyx-0.4.16.tgz 2025-12-16 21:16:35 +00:00
jmelahman
6d29345fb7 Publish onyx-0.4.16.tgz 2025-12-16 21:03:49 +00:00
Weves
71dd57b92c Publish onyx-0.4.16.tgz 2025-12-16 20:57:01 +00:00
github-merge-queue[bot]
88e1d984b3 Publish onyx-0.4.16.tgz 2025-12-16 20:32:45 +00:00
github-merge-queue[bot]
e64150be85 Publish onyx-0.4.15.tgz 2025-12-16 19:37:31 +00:00
github-merge-queue[bot]
9b3e6d5fb1 Publish onyx-0.4.15.tgz 2025-12-16 19:06:23 +00:00
github-merge-queue[bot]
c85706b40c Publish onyx-0.4.15.tgz 2025-12-16 19:01:38 +00:00
wenxi-onyx
b4ef57663c Publish onyx-0.4.15.tgz 2025-12-16 18:39:07 +00:00
wenxi-onyx
c0983c0278 Publish onyx-0.4.15.tgz 2025-12-16 18:21:40 +00:00
github-merge-queue[bot]
0e66cd9fe5 Publish onyx-0.4.15.tgz 2025-12-16 18:09:25 +00:00
wenxi-onyx
c2a3d1f817 Publish onyx-0.4.15.tgz 2025-12-16 17:48:34 +00:00
jmelahman
7fa94f772f Publish onyx-0.4.15.tgz 2025-12-16 10:54:21 +00:00
jmelahman
3bf0715dca Publish onyx-0.4.15.tgz 2025-12-16 10:30:35 +00:00
jmelahman
747b18431b Publish onyx-0.4.15.tgz 2025-12-16 10:05:23 +00:00
jmelahman
02d7fb2a83 Publish onyx-0.4.15.tgz 2025-12-16 09:05:46 +00:00
jmelahman
282167c0ec Publish onyx-0.4.15.tgz 2025-12-16 07:52:19 +00:00
github-merge-queue[bot]
ab4d7d22b6 Publish onyx-0.4.15.tgz 2025-12-16 05:36:19 +00:00
github-merge-queue[bot]
8395dbbb6f Publish onyx-0.4.15.tgz 2025-12-16 03:50:31 +00:00
nmgarza5
9f14b965e4 Publish onyx-0.4.15.tgz 2025-12-16 03:36:42 +00:00
jmelahman
edb3905a22 Publish onyx-0.4.15.tgz 2025-12-16 03:34:48 +00:00
jmelahman
1521445c04 Publish onyx-0.4.15.tgz 2025-12-16 02:55:35 +00:00
raunakab
66009f6739 Publish onyx-0.4.15.tgz 2025-12-16 02:49:10 +00:00
github-merge-queue[bot]
c2bc449b35 Publish onyx-0.4.15.tgz 2025-12-16 02:42:46 +00:00
github-merge-queue[bot]
17476fdcf0 Publish onyx-0.4.15.tgz 2025-12-16 02:36:44 +00:00
github-merge-queue[bot]
00e92cdfc1 Publish onyx-0.4.15.tgz 2025-12-16 01:48:34 +00:00
jmelahman
dcfb327981 Publish onyx-0.4.15.tgz 2025-12-16 01:16:30 +00:00
github-merge-queue[bot]
93ef56dca9 Publish onyx-0.4.15.tgz 2025-12-16 00:08:06 +00:00
jmelahman
42851099b4 Publish onyx-0.4.15.tgz 2025-12-15 23:38:53 +00:00
github-merge-queue[bot]
f8afba56f5 Publish onyx-0.4.15.tgz 2025-12-15 22:17:07 +00:00
github-merge-queue[bot]
f058af3c2a Publish onyx-0.4.15.tgz 2025-12-15 19:36:08 +00:00
wenxi-onyx
e9b4fe3e39 Publish onyx-0.4.15.tgz 2025-12-15 18:54:05 +00:00
github-merge-queue[bot]
c3a767030f Publish onyx-0.4.15.tgz 2025-12-15 18:52:19 +00:00
github-merge-queue[bot]
37409c6dcd Publish onyx-0.4.15.tgz 2025-12-15 18:48:39 +00:00
wenxi-onyx
2d3f8e4eb0 Publish onyx-0.4.15.tgz 2025-12-15 18:20:03 +00:00
Weves
c12616e83c Publish onyx-0.4.15.tgz 2025-12-15 17:46:40 +00:00
yuhongsun96
3833e1ebf8 Publish onyx-0.4.15.tgz 2025-12-15 08:00:10 +00:00
yuhongsun96
8cb3e5fc65 Publish onyx-0.4.15.tgz 2025-12-15 07:01:06 +00:00
yuhongsun96
e2d6750c2f Publish onyx-0.4.15.tgz 2025-12-15 06:56:23 +00:00
Weves
2da27140da Publish onyx-0.4.15.tgz 2025-12-15 03:50:39 +00:00
github-merge-queue[bot]
a41747006d Publish onyx-0.4.15.tgz 2025-12-15 02:22:19 +00:00
Weves
7345eb8472 Publish onyx-0.4.15.tgz 2025-12-15 01:37:32 +00:00
Weves
17a7fbbd50 Publish onyx-0.4.15.tgz 2025-12-15 01:14:57 +00:00
Weves
553f7b6105 Publish onyx-0.4.15.tgz 2025-12-15 00:37:46 +00:00
github-merge-queue[bot]
e778af7676 Publish onyx-0.4.15.tgz 2025-12-14 23:15:00 +00:00
Weves
6f1080bff8 Publish onyx-0.4.15.tgz 2025-12-14 22:51:01 +00:00
github-merge-queue[bot]
344148d751 Publish onyx-0.4.15.tgz 2025-12-14 22:22:06 +00:00
github-merge-queue[bot]
c437ce2f8d Publish onyx-0.4.15.tgz 2025-12-13 02:29:45 +00:00
github-merge-queue[bot]
87919aea44 Publish onyx-0.4.15.tgz 2025-12-13 02:26:55 +00:00
github-merge-queue[bot]
6ee3fc7d40 Publish onyx-0.4.14.tgz 2025-12-13 00:21:23 +00:00
github-merge-queue[bot]
dc3b11a2fc Publish onyx-0.4.14.tgz 2025-12-12 07:39:22 +00:00
yuhongsun96
debb922649 Publish onyx-0.4.14.tgz 2025-12-12 03:48:30 +00:00
jmelahman
14ea3b466b Publish onyx-0.4.14.tgz 2025-12-12 03:19:18 +00:00
yuhongsun96
ebf2c8d2f1 Publish onyx-0.4.14.tgz 2025-12-12 03:17:43 +00:00
yuhongsun96
42a8b66c74 Publish onyx-0.4.14.tgz 2025-12-12 02:28:36 +00:00
raunakab
d6191c30ad Publish onyx-0.4.14.tgz 2025-12-12 00:22:39 +00:00
yuhongsun96
2a4461f913 Publish onyx-0.4.14.tgz 2025-12-11 23:45:26 +00:00
jmelahman
3682358fc0 Publish onyx-0.4.14.tgz 2025-12-11 01:23:47 +00:00
justin-tahara
c1d3c439f1 Publish onyx-0.4.14.tgz 2025-12-09 17:44:23 +00:00
github-merge-queue[bot]
b2ee3119a5 Publish onyx-0.4.14.tgz 2025-12-09 04:26:11 +00:00
Weves
520237e881 Publish onyx-0.4.14.tgz 2025-12-09 03:01:43 +00:00
Weves
019e148db3 Publish onyx-0.4.14.tgz 2025-12-09 02:44:51 +00:00
github-merge-queue[bot]
e498ba629c Publish onyx-0.4.14.tgz 2025-12-07 01:02:05 +00:00
jmelahman
b548fff581 Publish onyx-0.4.14.tgz 2025-12-06 18:49:27 +00:00
jmelahman
bf660c5f16 Publish onyx-0.4.14.tgz 2025-12-06 18:10:41 +00:00
jmelahman
e5624ab298 Publish onyx-0.4.14.tgz 2025-12-06 17:53:58 +00:00
raunakab
837a57950a Publish onyx-0.4.14.tgz 2025-12-06 03:41:07 +00:00
yuhongsun96
2890d38439 Publish onyx-0.4.14.tgz 2025-12-06 01:13:35 +00:00
github-merge-queue[bot]
1bbfa63966 Publish onyx-0.4.14.tgz 2025-12-06 00:30:03 +00:00
jmelahman
5878abfe17 Publish onyx-0.4.14.tgz 2025-12-06 00:17:33 +00:00
github-merge-queue[bot]
cea5c23d8b Publish onyx-0.4.14.tgz 2025-12-05 23:49:04 +00:00
github-merge-queue[bot]
e8cbcbb5d0 Publish onyx-0.4.14.tgz 2025-12-05 23:15:05 +00:00
github-merge-queue[bot]
f1c7aae545 Publish onyx-0.4.14.tgz 2025-12-05 22:36:47 +00:00
github-merge-queue[bot]
99e4ec6353 Publish onyx-0.4.14.tgz 2025-12-05 21:51:44 +00:00
github-merge-queue[bot]
0209cbb1f6 Publish onyx-0.4.14.tgz 2025-12-05 20:52:25 +00:00
jmelahman
243589a3cd Publish onyx-0.4.14.tgz 2025-12-05 18:52:05 +00:00
github-merge-queue[bot]
4c4c29fbcd Publish onyx-0.4.14.tgz 2025-12-05 18:45:29 +00:00
jmelahman
0badf1c599 Publish onyx-0.4.14.tgz 2025-12-05 18:32:02 +00:00
jmelahman
846571208f Publish onyx-0.4.14.tgz 2025-12-05 18:28:48 +00:00
yuhongsun96
69b9fa834e Publish onyx-0.4.14.tgz 2025-12-05 18:16:22 +00:00
github-merge-queue[bot]
7b09025e5b Publish onyx-0.4.14.tgz 2025-12-05 18:07:29 +00:00
github-merge-queue[bot]
5e516f2cd4 Publish onyx-0.4.14.tgz 2025-12-05 17:54:15 +00:00
github-merge-queue[bot]
d17fb03813 Publish onyx-0.4.14.tgz 2025-12-05 17:45:43 +00:00
github-merge-queue[bot]
da1114bc05 Publish onyx-0.4.14.tgz 2025-12-05 07:19:22 +00:00
github-merge-queue[bot]
56ffc55f25 Publish onyx-0.4.14.tgz 2025-12-05 03:21:15 +00:00
github-merge-queue[bot]
528b894e29 Publish onyx-0.4.14.tgz 2025-12-05 03:18:35 +00:00
jmelahman
d9338763c8 Publish onyx-0.4.14.tgz 2025-12-05 02:36:59 +00:00
jmelahman
09dc8bfc99 Publish onyx-0.4.14.tgz 2025-12-05 02:30:44 +00:00
jmelahman
fd2de6e373 Publish onyx-0.4.14.tgz 2025-12-05 02:28:41 +00:00
github-merge-queue[bot]
b6f3ff8379 Publish onyx-0.4.14.tgz 2025-12-05 02:21:00 +00:00
yuhongsun96
e1a632cebe Publish onyx-0.4.14.tgz 2025-12-05 01:51:03 +00:00
jmelahman
918bf1e4f3 Publish onyx-0.4.14.tgz 2025-12-05 01:28:06 +00:00
github-merge-queue[bot]
79064f602d Publish onyx-0.4.14.tgz 2025-12-05 01:12:59 +00:00
github-merge-queue[bot]
9b656b76f9 Publish onyx-0.4.13.tgz 2025-12-05 00:24:23 +00:00
github-merge-queue[bot]
c637235b1e Publish onyx-0.4.13.tgz 2025-12-05 00:04:35 +00:00
github-merge-queue[bot]
19c098a8c1 Publish onyx-0.4.13.tgz 2025-12-04 23:59:43 +00:00
github-merge-queue[bot]
7d98599805 Publish onyx-0.4.13.tgz 2025-12-04 23:21:03 +00:00
github-merge-queue[bot]
aa33016bd0 Publish onyx-0.4.13.tgz 2025-12-04 22:40:03 +00:00
github-merge-queue[bot]
6d04b1718b Publish onyx-0.4.13.tgz 2025-12-04 21:50:55 +00:00
github-merge-queue[bot]
57bebf9582 Publish onyx-0.4.13.tgz 2025-12-04 21:01:06 +00:00
github-merge-queue[bot]
5a1b2c6de2 Publish onyx-0.4.13.tgz 2025-12-04 20:58:53 +00:00
justin-tahara
44b7eb4189 Publish onyx-0.4.13.tgz 2025-12-04 19:31:23 +00:00
jmelahman
9903c0e852 Publish onyx-0.4.13.tgz 2025-12-04 19:30:52 +00:00
github-merge-queue[bot]
1c5c234c81 Publish onyx-0.4.13.tgz 2025-12-04 17:17:42 +00:00
github-merge-queue[bot]
aef3ae1059 Publish onyx-0.4.13.tgz 2025-12-04 08:39:32 +00:00
yuhongsun96
837cabd1f0 Publish onyx-0.4.13.tgz 2025-12-04 07:46:43 +00:00
raunakab
ce8ce39d79 Publish onyx-0.4.13.tgz 2025-12-04 05:19:31 +00:00
github-merge-queue[bot]
fcb3987e1c Publish onyx-0.4.13.tgz 2025-12-04 05:08:24 +00:00
github-merge-queue[bot]
0ad7aae02f Publish onyx-0.4.13.tgz 2025-12-04 04:34:19 +00:00
wenxi-onyx
c415832662 Publish onyx-0.4.13.tgz 2025-12-04 03:52:43 +00:00
github-merge-queue[bot]
6408760fbf Publish onyx-0.4.13.tgz 2025-12-04 02:41:52 +00:00
jmelahman
15ec8d38a4 Publish onyx-0.4.13.tgz 2025-12-04 02:09:01 +00:00
jmelahman
d7e3fbdd51 Publish onyx-0.4.13.tgz 2025-12-04 02:07:33 +00:00
yuhongsun96
71a3434d89 Publish onyx-0.4.13.tgz 2025-12-04 01:30:57 +00:00
Weves
5b1202e08c Publish onyx-0.4.13.tgz 2025-12-04 01:27:01 +00:00
github-merge-queue[bot]
552cb9bd7e Publish onyx-0.4.13.tgz 2025-12-04 01:20:09 +00:00
github-merge-queue[bot]
e4df251ebb Publish onyx-0.4.13.tgz 2025-12-04 00:54:06 +00:00
github-merge-queue[bot]
c5a99ef84a Publish onyx-0.4.13.tgz 2025-12-04 00:07:20 +00:00
github-merge-queue[bot]
475f17ba88 Publish onyx-0.4.13.tgz 2025-12-04 00:05:10 +00:00
yuhongsun96
da3e6a7589 Publish onyx-0.4.13.tgz 2025-12-03 23:47:25 +00:00
github-merge-queue[bot]
065cb844c5 Publish onyx-0.4.13.tgz 2025-12-03 22:47:10 +00:00
github-merge-queue[bot]
3ade4b6e1d Publish onyx-0.4.13.tgz 2025-12-03 22:23:50 +00:00
yuhongsun96
550aa35735 Publish onyx-0.4.13.tgz 2025-12-03 22:08:03 +00:00
jmelahman
52bb13b7a0 Publish onyx-0.4.13.tgz 2025-12-03 21:57:35 +00:00
yuhongsun96
6894ebf1e6 Publish onyx-0.4.13.tgz 2025-12-03 21:50:00 +00:00
github-merge-queue[bot]
ef0cda4ada Publish onyx-0.4.13.tgz 2025-12-03 21:43:44 +00:00
github-merge-queue[bot]
0993f7a6c4 Publish onyx-0.4.13.tgz 2025-12-03 21:01:33 +00:00
raunakab
5a4dca0a68 Publish onyx-0.4.13.tgz 2025-12-03 20:48:28 +00:00
yuhongsun96
46d924877e Publish onyx-0.4.13.tgz 2025-12-03 20:38:11 +00:00
yuhongsun96
02b6b5d0f9 Publish onyx-0.4.13.tgz 2025-12-03 19:50:56 +00:00
github-merge-queue[bot]
280eafe630 Publish onyx-0.4.13.tgz 2025-12-03 18:43:38 +00:00
github-merge-queue[bot]
f9ded6b05a Publish onyx-0.4.13.tgz 2025-12-03 18:28:41 +00:00
github-merge-queue[bot]
44aaa808e0 Publish onyx-0.4.13.tgz 2025-12-03 18:24:38 +00:00
wenxi-onyx
f08dbc3dfd Publish onyx-0.4.13.tgz 2025-12-03 18:09:28 +00:00
wenxi-onyx
1952d80fdb Publish onyx-0.4.13.tgz 2025-12-03 18:03:36 +00:00
github-merge-queue[bot]
bf2e9f4e35 Publish onyx-0.4.13.tgz 2025-12-03 16:57:30 +00:00
github-merge-queue[bot]
ff2dddd0bf Publish onyx-0.4.13.tgz 2025-12-03 06:32:34 +00:00
github-merge-queue[bot]
d58b157007 Publish onyx-0.4.13.tgz 2025-12-03 04:10:08 +00:00
github-merge-queue[bot]
4a71fcf6a0 Publish onyx-0.4.13.tgz 2025-12-03 03:10:15 +00:00
github-merge-queue[bot]
b301a2f7f9 Publish onyx-0.4.13.tgz 2025-12-03 02:54:16 +00:00
github-merge-queue[bot]
601f1c3697 Publish onyx-0.4.13.tgz 2025-12-03 02:02:35 +00:00
jmelahman
4b7bbbb6f1 Publish onyx-0.4.13.tgz 2025-12-03 01:48:56 +00:00
github-merge-queue[bot]
b458030be8 Publish onyx-0.4.13.tgz 2025-12-03 01:28:53 +00:00
jmelahman
dc10feee5f Publish onyx-0.4.13.tgz 2025-12-03 01:12:48 +00:00
github-merge-queue[bot]
2aa5dbb5eb Publish onyx-0.4.13.tgz 2025-12-03 00:53:27 +00:00
github-merge-queue[bot]
b232017687 Publish onyx-0.4.13.tgz 2025-12-02 22:54:03 +00:00
github-merge-queue[bot]
cc4015c031 Publish onyx-0.4.13.tgz 2025-12-02 22:28:43 +00:00
github-merge-queue[bot]
c9bc1333d8 Publish onyx-0.4.13.tgz 2025-12-02 21:29:32 +00:00
github-merge-queue[bot]
f97a0c2d16 Publish onyx-0.4.13.tgz 2025-12-02 21:26:43 +00:00
Weves
7299145723 Publish onyx-0.4.13.tgz 2025-12-02 20:31:15 +00:00
yuhongsun96
008bb1fd77 Publish onyx-0.4.13.tgz 2025-12-02 19:09:10 +00:00
yuhongsun96
6538cc0775 Publish onyx-0.4.13.tgz 2025-12-02 19:07:55 +00:00
yuhongsun96
8d9ff6ed31 Publish onyx-0.4.13.tgz 2025-12-02 19:01:23 +00:00
yuhongsun96
10d2fffb10 Publish onyx-0.4.13.tgz 2025-12-02 18:50:58 +00:00
github-merge-queue[bot]
9d2e309ed4 Publish onyx-0.4.13.tgz 2025-12-02 18:05:04 +00:00
github-merge-queue[bot]
33fb005cf7 Publish onyx-0.4.13.tgz 2025-12-02 17:59:49 +00:00
justin-tahara
6a9d235e09 Publish onyx-0.4.13.tgz 2025-12-02 04:40:43 +00:00
justin-tahara
52780326c3 Publish onyx-0.4.13.tgz 2025-12-02 03:54:46 +00:00
yuhongsun96
87ca46f128 Publish onyx-0.4.12.tgz 2025-12-02 02:02:17 +00:00
github-merge-queue[bot]
6960594905 Publish onyx-0.4.12.tgz 2025-12-02 01:42:02 +00:00
raunakab
ee43b826e2 Publish onyx-0.4.12.tgz 2025-12-02 01:15:57 +00:00
github-merge-queue[bot]
864dce89e4 Publish onyx-0.4.12.tgz 2025-12-02 00:51:05 +00:00
github-merge-queue[bot]
3f9113c892 Publish onyx-0.4.12.tgz 2025-12-02 00:35:10 +00:00
jmelahman
a78b8f0bc3 Publish onyx-0.4.12.tgz 2025-12-02 00:19:58 +00:00
github-merge-queue[bot]
62e2bfa1e8 Publish onyx-0.4.12.tgz 2025-12-01 23:52:07 +00:00
github-merge-queue[bot]
12ba157fb8 Publish onyx-0.4.12.tgz 2025-12-01 23:44:49 +00:00
justin-tahara
36cafb38ab Publish onyx-0.4.12.tgz 2025-12-01 23:29:10 +00:00
yuhongsun96
ea9df74ca6 Publish onyx-0.4.12.tgz 2025-12-01 22:41:51 +00:00
github-merge-queue[bot]
fac9865674 Publish onyx-0.4.12.tgz 2025-12-01 22:11:21 +00:00
justin-tahara
5d134b848b Publish onyx-0.4.12.tgz 2025-12-01 21:42:09 +00:00
wenxi-onyx
b1a5c4131e Publish onyx-0.4.11.tgz 2025-12-01 17:38:28 +00:00
Weves
2d9f11e84e Publish onyx-0.4.11.tgz 2025-12-01 17:37:15 +00:00
Weves
09072038d4 Publish onyx-0.4.11.tgz 2025-12-01 02:53:59 +00:00
Subash-Mohan
01a5985c70 Publish onyx-0.4.11.tgz 2025-11-30 06:16:13 +00:00
github-merge-queue[bot]
cc08f460ee Publish onyx-0.4.11.tgz 2025-11-29 19:56:15 +00:00
jmelahman
8b7f180223 Publish onyx-0.4.11.tgz 2025-11-26 23:38:54 +00:00
jmelahman
fb4c84e09c Publish onyx-0.4.11.tgz 2025-11-26 23:10:52 +00:00
Weves
711587aeb2 Publish onyx-0.4.11.tgz 2025-11-26 22:55:42 +00:00
jmelahman
914601c437 Publish onyx-0.4.11.tgz 2025-11-26 22:28:07 +00:00
jmelahman
610c8e34fd Publish onyx-0.4.11.tgz 2025-11-26 21:40:42 +00:00
raunakab
e0a0ad2fdb Publish onyx-0.4.11.tgz 2025-11-26 21:18:33 +00:00
jmelahman
0681f03cdc Publish onyx-0.4.11.tgz 2025-11-26 21:17:40 +00:00
github-merge-queue[bot]
96b452c316 Publish onyx-0.4.11.tgz 2025-11-26 18:30:06 +00:00
github-merge-queue[bot]
b0fdcc1d4c Publish onyx-0.4.11.tgz 2025-11-26 17:47:49 +00:00
Weves
932be0135e Publish onyx-0.4.11.tgz 2025-11-26 06:42:25 +00:00
justin-tahara
3e567aecf2 Publish onyx-0.4.11.tgz 2025-11-26 04:11:22 +00:00
github-merge-queue[bot]
3cd087f859 Publish onyx-0.4.11.tgz 2025-11-26 03:24:18 +00:00
github-merge-queue[bot]
94305fad8f Publish onyx-0.4.11.tgz 2025-11-26 00:34:35 +00:00
raunakab
a2270e6787 Publish onyx-0.4.11.tgz 2025-11-26 00:11:52 +00:00
github-merge-queue[bot]
e6bbb71bd7 Publish onyx-0.4.11.tgz 2025-11-25 22:16:47 +00:00
raunakab
ffefb4cdaf Publish onyx-0.4.11.tgz 2025-11-25 21:51:54 +00:00
justin-tahara
f405aa45aa Publish onyx-0.4.11.tgz 2025-11-25 21:32:53 +00:00
github-merge-queue[bot]
0980c00bb9 Publish onyx-0.4.11.tgz 2025-11-25 21:30:48 +00:00
wenxi-onyx
2a49cd18e6 Publish onyx-0.4.11.tgz 2025-11-25 20:40:24 +00:00
github-merge-queue[bot]
3575238fac Publish onyx-0.4.11.tgz 2025-11-25 20:33:33 +00:00
wenxi-onyx
98a89e9855 Publish onyx-0.4.11.tgz 2025-11-25 19:25:21 +00:00
raunakab
eff360d5c1 Publish onyx-0.4.11.tgz 2025-11-25 18:28:16 +00:00
github-merge-queue[bot]
06fb8911ff Publish onyx-0.4.11.tgz 2025-11-25 18:03:13 +00:00
github-merge-queue[bot]
0e881d024d Publish onyx-0.4.11.tgz 2025-11-25 17:36:48 +00:00
github-merge-queue[bot]
b8c67d0453 Publish onyx-0.4.11.tgz 2025-11-25 17:16:34 +00:00
github-merge-queue[bot]
11be109ac8 Publish onyx-0.4.11.tgz 2025-11-25 02:44:53 +00:00
github-merge-queue[bot]
889ab179f9 Publish onyx-0.4.11.tgz 2025-11-25 01:35:55 +00:00
rguan72
9cd9da2ec1 Publish onyx-0.4.11.tgz 2025-11-24 22:42:31 +00:00
justin-tahara
49536bec45 Publish onyx-0.4.11.tgz 2025-11-24 22:25:56 +00:00
github-merge-queue[bot]
c366aad426 Publish onyx-0.4.10.tgz 2025-11-24 21:44:14 +00:00
justin-tahara
7870ead6c5 Publish onyx-0.4.10.tgz 2025-11-24 21:30:02 +00:00
github-merge-queue[bot]
500477484a Publish onyx-0.4.10.tgz 2025-11-24 21:17:55 +00:00
github-merge-queue[bot]
0b3acefdec Publish onyx-0.4.10.tgz 2025-11-24 19:15:32 +00:00
github-merge-queue[bot]
54bdc8f84b Publish onyx-0.4.10.tgz 2025-11-24 18:41:04 +00:00
github-merge-queue[bot]
363929b19a Publish onyx-0.4.10.tgz 2025-11-24 17:28:28 +00:00
github-merge-queue[bot]
2b4230e484 Publish onyx-0.4.10.tgz 2025-11-24 02:52:05 +00:00
github-merge-queue[bot]
a8b704a74c Publish onyx-0.4.10.tgz 2025-11-23 21:33:03 +00:00
raunakab
476e199c4d Publish onyx-0.4.10.tgz 2025-11-23 20:33:07 +00:00
github-merge-queue[bot]
ac8c82d953 Publish onyx-0.4.10.tgz 2025-11-23 19:25:00 +00:00
raunakab
a2a3b7d23f Publish onyx-0.4.10.tgz 2025-11-23 18:24:50 +00:00
github-merge-queue[bot]
fdf99a5d8a Publish onyx-0.4.10.tgz 2025-11-23 10:32:29 +00:00
Subash-Mohan
7e19c6e8fa Publish onyx-0.4.10.tgz 2025-11-23 10:18:41 +00:00
github-merge-queue[bot]
6fb86e5ca7 Publish onyx-0.4.10.tgz 2025-11-23 10:03:44 +00:00
raunakab
b983c80a45 Publish onyx-0.4.10.tgz 2025-11-23 04:40:16 +00:00
github-merge-queue[bot]
f80dfa5597 Publish onyx-0.4.10.tgz 2025-11-23 02:13:05 +00:00
raunakab
b0e1fc8473 Publish onyx-0.4.10.tgz 2025-11-23 01:38:32 +00:00
github-merge-queue[bot]
8d94382f29 Publish onyx-0.4.10.tgz 2025-11-22 07:45:21 +00:00
github-merge-queue[bot]
80cd4d1a0d Publish onyx-0.4.10.tgz 2025-11-22 07:34:59 +00:00
github-merge-queue[bot]
fd8b1eafb5 Publish onyx-0.4.10.tgz 2025-11-22 07:32:42 +00:00
nmgarza5
901d00ccbe Publish onyx-0.4.10.tgz 2025-11-22 05:49:10 +00:00
raunakab
f193689472 Publish onyx-0.4.10.tgz 2025-11-22 04:59:21 +00:00
evan-onyx
bb27c29a3b Publish onyx-0.4.10.tgz 2025-11-22 01:30:06 +00:00
github-merge-queue[bot]
0b1d64389f Publish onyx-0.4.10.tgz 2025-11-21 21:42:01 +00:00
github-merge-queue[bot]
6a767ad668 Publish onyx-0.4.10.tgz 2025-11-21 21:14:51 +00:00
justin-tahara
179a15e3ae Publish onyx-0.4.10.tgz 2025-11-21 18:50:39 +00:00
justin-tahara
f397d67c69 Publish onyx-0.4.10.tgz 2025-11-21 18:17:12 +00:00
wenxi-onyx
a6fd686142 Publish onyx-0.4.10.tgz 2025-11-21 17:24:24 +00:00
github-merge-queue[bot]
1f73ece782 Publish onyx-0.4.10.tgz 2025-11-21 04:47:57 +00:00
github-merge-queue[bot]
e25b49b0c2 Publish onyx-0.4.10.tgz 2025-11-21 04:25:18 +00:00
Weves
73b82dc63e Publish onyx-0.4.10.tgz 2025-11-21 02:33:34 +00:00
github-merge-queue[bot]
0d8c15cd2e Publish onyx-0.4.10.tgz 2025-11-21 02:18:55 +00:00
wenxi-onyx
9f9b1a91b0 Publish onyx-0.4.10.tgz 2025-11-21 01:23:43 +00:00
justin-tahara
968aef17e5 Publish onyx-0.4.10.tgz 2025-11-21 01:16:54 +00:00
github-merge-queue[bot]
7bc98a1403 Publish onyx-0.4.10.tgz 2025-11-21 01:01:16 +00:00
github-merge-queue[bot]
70cc37e967 Publish onyx-0.4.10.tgz 2025-11-21 00:50:15 +00:00
github-merge-queue[bot]
b860e6855b Publish onyx-0.4.10.tgz 2025-11-21 00:27:25 +00:00
github-merge-queue[bot]
c3d48d76a8 Publish onyx-0.4.10.tgz 2025-11-20 23:52:18 +00:00
github-merge-queue[bot]
0ce4d2d4f8 Publish onyx-0.4.10.tgz 2025-11-20 23:00:53 +00:00
github-merge-queue[bot]
7aa4514976 Publish onyx-0.4.10.tgz 2025-11-20 22:06:47 +00:00
github-merge-queue[bot]
c5f264cae4 Publish onyx-0.4.10.tgz 2025-11-20 21:22:47 +00:00
github-merge-queue[bot]
3b609149ea Publish onyx-0.4.9.tgz 2025-11-20 20:39:55 +00:00
github-merge-queue[bot]
6512411546 Publish onyx-0.4.8.tgz 2025-11-20 20:25:38 +00:00
wenxi-onyx
617ec34ac3 Publish onyx-0.4.8.tgz 2025-11-20 18:36:25 +00:00
github-merge-queue[bot]
1c8751483e Publish onyx-0.4.8.tgz 2025-11-20 18:05:16 +00:00
github-merge-queue[bot]
dec8e1657c Publish onyx-0.4.8.tgz 2025-11-20 18:01:23 +00:00
github-merge-queue[bot]
e3f8310d1b Publish onyx-0.4.8.tgz 2025-11-20 16:59:27 +00:00
github-merge-queue[bot]
77d06b04b1 Publish onyx-0.4.8.tgz 2025-11-20 07:26:10 +00:00
github-merge-queue[bot]
209b518a49 Publish onyx-0.4.8.tgz 2025-11-20 03:39:24 +00:00
github-merge-queue[bot]
c202b42ad2 Publish onyx-0.4.8.tgz 2025-11-20 01:12:52 +00:00
github-merge-queue[bot]
d167b4fa3e Publish onyx-0.4.8.tgz 2025-11-20 01:08:39 +00:00
github-merge-queue[bot]
337c30868b Publish onyx-0.4.8.tgz 2025-11-20 00:09:10 +00:00
nmgarza5
012d61be85 Publish onyx-0.4.8.tgz 2025-11-19 22:45:27 +00:00
jmelahman
790a7a68aa Publish onyx-0.4.8.tgz 2025-11-19 22:27:24 +00:00
jmelahman
fe636dd4c6 Publish onyx-0.4.8.tgz 2025-11-19 22:20:28 +00:00
github-merge-queue[bot]
13c876dd33 Publish onyx-0.4.8.tgz 2025-11-19 22:01:34 +00:00
jmelahman
de4fbb7392 Publish onyx-0.4.8.tgz 2025-11-19 19:04:54 +00:00
justin-tahara
6ed12c6957 Publish onyx-0.4.8.tgz 2025-11-19 18:06:53 +00:00
raunakab
5579e277dd Publish onyx-0.4.8.tgz 2025-11-19 17:28:26 +00:00
raunakab
593226404e Publish onyx-0.4.8.tgz 2025-11-19 16:32:14 +00:00
github-merge-queue[bot]
087ae426f1 Publish onyx-0.4.8.tgz 2025-11-19 14:30:33 +00:00
raunakab
eb794b53f3 Publish onyx-0.4.8.tgz 2025-11-19 09:41:18 +00:00
jmelahman
daf2981bd1 Publish onyx-0.4.8.tgz 2025-11-19 06:27:36 +00:00
github-merge-queue[bot]
969fee9345 Publish onyx-0.4.8.tgz 2025-11-19 04:20:39 +00:00
github-merge-queue[bot]
f3f65d5e22 Publish onyx-0.4.8.tgz 2025-11-19 03:02:46 +00:00
github-merge-queue[bot]
e058d52751 Publish onyx-0.4.8.tgz 2025-11-19 01:14:55 +00:00
nmgarza5
274b454fa7 Publish onyx-0.4.8.tgz 2025-11-19 00:49:52 +00:00
jmelahman
53d784cfd4 Publish onyx-0.4.8.tgz 2025-11-19 00:10:46 +00:00
jmelahman
e4f5c3cb30 Publish onyx-0.4.8.tgz 2025-11-19 00:06:37 +00:00
jmelahman
aa1ef9e6bd Publish onyx-0.4.8.tgz 2025-11-18 22:50:08 +00:00
jmelahman
91b4997924 Publish onyx-0.4.8.tgz 2025-11-18 22:16:44 +00:00
jmelahman
62d9bbcf34 Publish onyx-0.4.8.tgz 2025-11-18 18:46:30 +00:00
justin-tahara
4307991cb9 Publish onyx-0.4.8.tgz 2025-11-18 17:51:07 +00:00
Subash-Mohan
411f715e6f Publish onyx-0.4.7.tgz 2025-11-18 12:11:36 +00:00
Subash-Mohan
8dab6c049f Publish onyx-0.4.7.tgz 2025-11-18 06:55:17 +00:00
github-merge-queue[bot]
41aef33360 Publish onyx-0.4.7.tgz 2025-11-17 23:51:01 +00:00
github-merge-queue[bot]
940f471df7 Publish onyx-0.4.7.tgz 2025-11-17 23:38:50 +00:00
github-merge-queue[bot]
ab432eca02 Publish onyx-0.4.7.tgz 2025-11-17 23:29:14 +00:00
github-merge-queue[bot]
f5f1f48ecf Publish onyx-0.4.7.tgz 2025-11-17 20:48:49 +00:00
github-merge-queue[bot]
f4824d9979 Publish onyx-0.4.7.tgz 2025-11-17 20:33:31 +00:00
github-merge-queue[bot]
001e5c3362 Publish onyx-0.4.7.tgz 2025-11-17 20:30:23 +00:00
github-merge-queue[bot]
23676c21a4 Publish onyx-0.4.7.tgz 2025-11-17 20:02:59 +00:00
github-merge-queue[bot]
c8b5befe29 Publish onyx-0.4.7.tgz 2025-11-17 18:53:56 +00:00
github-merge-queue[bot]
d8b9bc18c8 Publish onyx-0.4.7.tgz 2025-11-17 18:19:44 +00:00
github-merge-queue[bot]
cbbd60c4cb Publish onyx-0.4.7.tgz 2025-11-17 17:36:44 +00:00
github-merge-queue[bot]
08a63d01bd Publish onyx-0.4.7.tgz 2025-11-17 17:35:02 +00:00
github-merge-queue[bot]
9587cc8591 Publish onyx-0.4.7.tgz 2025-11-17 17:34:26 +00:00
nmgarza5
a0a51c889c Publish onyx-0.4.7.tgz 2025-11-17 17:17:24 +00:00
evan-onyx
af81c1c8b4 Publish onyx-0.4.7.tgz 2025-11-17 16:59:25 +00:00
github-merge-queue[bot]
1727ed5951 Publish onyx-0.4.7.tgz 2025-11-17 05:31:29 +00:00
github-merge-queue[bot]
1b5d49c068 Publish onyx-0.4.7.tgz 2025-11-17 03:50:04 +00:00
github-merge-queue[bot]
218b20a399 Publish onyx-0.4.7.tgz 2025-11-16 23:06:48 +00:00
github-merge-queue[bot]
9cdaa10293 Publish onyx-0.4.7.tgz 2025-11-16 22:18:03 +00:00
wenxi-onyx
3655cc88dc Publish onyx-0.4.7.tgz 2025-11-16 21:18:53 +00:00
github-merge-queue[bot]
183428c3bd Publish onyx-0.4.7.tgz 2025-11-16 18:47:29 +00:00
nmgarza5
c471d03b1b Publish onyx-0.4.7.tgz 2025-11-16 18:30:13 +00:00
raunakab
147b71516a Publish onyx-0.4.7.tgz 2025-11-16 17:08:34 +00:00
github-merge-queue[bot]
1365d02223 Publish onyx-0.4.7.tgz 2025-11-16 05:35:51 +00:00
github-merge-queue[bot]
4c4957b8ab Publish onyx-0.4.7.tgz 2025-11-16 05:26:43 +00:00
github-merge-queue[bot]
6acf92476e Publish onyx-0.4.7.tgz 2025-11-16 05:20:43 +00:00
github-merge-queue[bot]
bb7457992f Publish onyx-0.4.7.tgz 2025-11-15 12:05:11 +00:00
github-merge-queue[bot]
3a95f0dd72 Publish onyx-0.4.7.tgz 2025-11-15 07:22:29 +00:00
github-merge-queue[bot]
dfa0bfaada Publish onyx-0.4.7.tgz 2025-11-15 04:57:36 +00:00
github-merge-queue[bot]
57c550ae95 Publish onyx-0.4.7.tgz 2025-11-15 04:26:59 +00:00
github-merge-queue[bot]
a7bc72e129 Publish onyx-0.4.7.tgz 2025-11-15 04:10:13 +00:00
github-merge-queue[bot]
a0cbc786c6 Publish onyx-0.4.7.tgz 2025-11-15 03:38:43 +00:00
github-merge-queue[bot]
3ceeeff964 Publish onyx-0.4.7.tgz 2025-11-15 03:03:38 +00:00
github-merge-queue[bot]
15313de8f7 Publish onyx-0.4.7.tgz 2025-11-15 02:43:27 +00:00
raunakab
18117e6674 Publish onyx-0.4.7.tgz 2025-11-15 02:28:09 +00:00
justin-tahara
9b3b3c8431 Publish onyx-0.4.7.tgz 2025-11-15 02:00:04 +00:00
justin-tahara
2b1ed6116a Publish onyx-0.4.7.tgz 2025-11-15 00:55:08 +00:00
justin-tahara
4cd5f7f924 Publish onyx-0.4.7.tgz 2025-11-15 00:53:51 +00:00
rguan72
ce5621787c Publish onyx-0.4.7.tgz 2025-11-14 22:52:12 +00:00
wenxi-onyx
2d4afd952f Publish onyx-0.4.7.tgz 2025-11-14 22:43:08 +00:00
wenxi-onyx
bba807c085 Publish onyx-0.4.7.tgz 2025-11-14 22:39:34 +00:00
wenxi-onyx
a7e6034baf Publish onyx-0.4.7.tgz 2025-11-14 22:30:46 +00:00
github-merge-queue[bot]
9fdf20548e Publish onyx-0.4.7.tgz 2025-11-14 22:10:23 +00:00
github-merge-queue[bot]
e83eb56495 Publish onyx-0.4.7.tgz 2025-11-14 21:46:34 +00:00
wenxi-onyx
8103e01148 Publish onyx-0.4.7.tgz 2025-11-14 21:32:21 +00:00
wenxi-onyx
e47d2a95f2 Publish onyx-0.4.7.tgz 2025-11-14 21:27:27 +00:00
jmelahman
c582e67db2 Publish onyx-0.4.7.tgz 2025-11-14 21:17:03 +00:00
Weves
4833251e92 Publish onyx-0.4.7.tgz 2025-11-14 20:27:25 +00:00
jmelahman
3baa1296e1 Publish onyx-0.4.7.tgz 2025-11-14 19:23:03 +00:00
Weves
f2c420d88b Publish onyx-0.4.7.tgz 2025-11-14 18:56:40 +00:00
github-merge-queue[bot]
503b58313b Publish onyx-0.4.7.tgz 2025-11-14 17:07:07 +00:00
github-merge-queue[bot]
0a82657da2 Publish onyx-0.4.7.tgz 2025-11-14 16:35:42 +00:00
github-merge-queue[bot]
90d95a7fde Publish onyx-0.4.7.tgz 2025-11-14 09:01:04 +00:00
github-merge-queue[bot]
e23c72b492 Publish onyx-0.4.7.tgz 2025-11-14 06:38:30 +00:00
raunakab
38a5d7c4be Publish onyx-0.4.7.tgz 2025-11-14 05:49:05 +00:00
github-merge-queue[bot]
cdfd85af95 Publish onyx-0.4.7.tgz 2025-11-14 04:47:47 +00:00
jmelahman
2ccc6a39a8 Publish onyx-0.4.7.tgz 2025-11-14 03:40:34 +00:00
Weves
a0a9337467 Publish onyx-0.4.7.tgz 2025-11-14 03:02:35 +00:00
justin-tahara
908ba42a10 Publish onyx-0.4.7.tgz 2025-11-14 02:25:41 +00:00
Weves
9f6163b9e9 Publish onyx-0.4.7.tgz 2025-11-14 01:43:24 +00:00
wenxi-onyx
ffdb30965d Publish onyx-0.4.7.tgz 2025-11-13 22:19:25 +00:00
github-merge-queue[bot]
1b507e3a14 Publish onyx-0.4.7.tgz 2025-11-13 22:16:21 +00:00
github-merge-queue[bot]
2dda377c1c Publish onyx-0.4.7.tgz 2025-11-13 17:54:18 +00:00
github-merge-queue[bot]
1a5cb435af Publish onyx-0.4.7.tgz 2025-11-13 02:53:13 +00:00
github-merge-queue[bot]
998db46bef Publish onyx-0.4.7.tgz 2025-11-13 02:49:04 +00:00
github-merge-queue[bot]
cf8ccdbf55 Publish onyx-0.4.7.tgz 2025-11-13 00:28:38 +00:00
github-merge-queue[bot]
e8a2292028 Publish onyx-0.4.7.tgz 2025-11-12 23:16:47 +00:00
github-merge-queue[bot]
80b864f163 Publish onyx-0.4.7.tgz 2025-11-12 22:52:31 +00:00
nmgarza5
15242f41d4 Publish onyx-0.4.7.tgz 2025-11-12 22:36:44 +00:00
github-merge-queue[bot]
816c87ee48 Publish onyx-0.4.7.tgz 2025-11-12 22:36:22 +00:00
github-merge-queue[bot]
6cf2c5248a Publish onyx-0.4.7.tgz 2025-11-12 19:58:44 +00:00
github-merge-queue[bot]
5e5d392b74 Publish onyx-0.4.7.tgz 2025-11-12 19:39:37 +00:00
github-merge-queue[bot]
1cc5e75b2d Publish onyx-0.4.7.tgz 2025-11-12 19:36:07 +00:00
github-merge-queue[bot]
a6ffdc5142 Publish onyx-0.4.7.tgz 2025-11-12 19:20:58 +00:00
raunakab
02ceb75a4e Publish onyx-0.4.7.tgz 2025-11-12 19:09:05 +00:00
nmgarza5
e29b0e7a10 Publish onyx-0.4.7.tgz 2025-11-12 18:49:28 +00:00
github-merge-queue[bot]
589d9019d3 Publish onyx-0.4.7.tgz 2025-11-12 18:44:56 +00:00
github-merge-queue[bot]
4f8a91ca6e Publish onyx-0.4.7.tgz 2025-11-12 18:32:10 +00:00
github-merge-queue[bot]
1e706fdccb Publish onyx-0.4.7.tgz 2025-11-12 18:31:58 +00:00
github-merge-queue[bot]
33c4dfd498 Publish onyx-0.4.7.tgz 2025-11-12 18:24:27 +00:00
Weves
67e1b2d6ee Publish onyx-0.4.7.tgz 2025-11-12 17:54:08 +00:00
github-merge-queue[bot]
f78b583bbd Publish onyx-0.4.7.tgz 2025-11-12 03:53:32 +00:00
github-merge-queue[bot]
0316ee7f17 Publish onyx-0.4.7.tgz 2025-11-12 01:40:40 +00:00
github-merge-queue[bot]
20f1e90e54 Publish onyx-0.4.7.tgz 2025-11-12 01:14:39 +00:00
rguan72
22508aac61 Publish onyx-0.4.7.tgz 2025-11-12 00:25:53 +00:00
github-merge-queue[bot]
fb8acda7b8 Publish onyx-0.4.7.tgz 2025-11-12 00:06:53 +00:00
github-merge-queue[bot]
6983c419d8 Publish onyx-0.4.7.tgz 2025-11-11 23:27:48 +00:00
wenxi-onyx
573235b404 Publish onyx-0.4.7.tgz 2025-11-11 21:31:58 +00:00
jmelahman
15a9761d6f Publish onyx-0.4.7.tgz 2025-11-11 21:07:36 +00:00
github-merge-queue[bot]
fce72063fe Publish onyx-0.4.7.tgz 2025-11-11 20:03:10 +00:00
wenxi-onyx
aeabc3d1f7 Publish onyx-0.4.7.tgz 2025-11-11 19:22:36 +00:00
github-merge-queue[bot]
fca1f4111b Publish onyx-0.4.7.tgz 2025-11-11 19:19:58 +00:00
jmelahman
232322374c Publish onyx-0.4.7.tgz 2025-11-11 17:38:37 +00:00
jmelahman
2fcf495734 Publish onyx-0.4.7.tgz 2025-11-11 17:38:26 +00:00
justin-tahara
e6ca0f0a90 Publish onyx-0.4.7.tgz 2025-11-11 17:27:31 +00:00
justin-tahara
7675aa7521 Publish onyx-0.4.7.tgz 2025-11-11 03:38:06 +00:00
github-merge-queue[bot]
828c652e19 Publish onyx-0.4.7.tgz 2025-11-11 02:53:30 +00:00
justin-tahara
85dc63ba4a Publish onyx-0.4.7.tgz 2025-11-11 02:35:38 +00:00
Weves
0d7d80f76a Publish onyx-0.4.7.tgz 2025-11-11 01:02:27 +00:00
jmelahman
4da6351546 Publish onyx-0.4.7.tgz 2025-11-10 23:51:46 +00:00
justin-tahara
07973e2528 Publish onyx-0.4.7.tgz 2025-11-10 22:40:11 +00:00
justin-tahara
d24d3d1a2a Publish onyx-0.4.7.tgz 2025-11-10 22:32:32 +00:00
justin-tahara
2f19680898 Publish onyx-0.4.7.tgz 2025-11-10 22:11:11 +00:00
jmelahman
a57abfe2ea Publish onyx-0.4.7.tgz 2025-11-10 20:10:53 +00:00
jmelahman
508fbbf107 Publish onyx-0.4.7.tgz 2025-11-10 19:34:42 +00:00
jmelahman
e276a0f5f3 Publish onyx-0.4.7.tgz 2025-11-10 19:28:23 +00:00
jmelahman
5a898bbec7 Publish onyx-0.4.7.tgz 2025-11-10 19:28:09 +00:00
jmelahman
c73a5fd2c0 Publish onyx-0.4.7.tgz 2025-11-10 19:14:34 +00:00
jmelahman
c51c3d79fb Publish onyx-0.4.7.tgz 2025-11-10 18:58:10 +00:00
jmelahman
505376e8c7 Publish onyx-0.4.7.tgz 2025-11-10 18:34:35 +00:00
Weves
cf654fe55f Publish onyx-0.4.7.tgz 2025-11-10 17:40:10 +00:00
Weves
fa7d5f81d6 Publish onyx-0.4.7.tgz 2025-11-08 22:53:12 +00:00
nmgarza5
1e0083964c Publish onyx-0.4.7.tgz 2025-11-08 18:36:46 +00:00
raunakab
1f5f1d2351 Publish onyx-0.4.7.tgz 2025-11-08 02:39:39 +00:00
Weves
819d10e629 Publish onyx-0.4.7.tgz 2025-11-08 02:10:40 +00:00
jmelahman
4591eb6017 Publish onyx-0.4.7.tgz 2025-11-08 01:29:57 +00:00
justin-tahara
56f477fe1c Publish onyx-0.4.7.tgz 2025-11-08 01:11:11 +00:00
justin-tahara
4ace01ff0f Publish onyx-0.4.7.tgz 2025-11-08 01:10:52 +00:00
justin-tahara
1f0ce10e34 Publish onyx-0.4.7.tgz 2025-11-08 01:10:12 +00:00
justin-tahara
fe8d09b47d Publish onyx-0.4.7.tgz 2025-11-08 00:34:24 +00:00
justin-tahara
1405fd6d82 Publish onyx-0.4.7.tgz 2025-11-08 00:25:43 +00:00
jmelahman
d4a4a3f3d0 Publish onyx-0.4.7.tgz 2025-11-08 00:21:54 +00:00
jmelahman
609661edae Publish onyx-0.4.7.tgz 2025-11-07 23:27:01 +00:00
justin-tahara
5f964108ce Publish onyx-0.4.7.tgz 2025-11-07 21:37:00 +00:00
github-merge-queue[bot]
6274cac375 Publish onyx-0.4.7.tgz 2025-11-07 19:03:23 +00:00
raunakab
acc9d986f9 Publish onyx-0.4.7.tgz 2025-11-07 03:44:03 +00:00
raunakab
c184c98ab7 Publish onyx-0.4.7.tgz 2025-11-07 03:32:35 +00:00
justin-tahara
e4116338ef Publish onyx-0.4.7.tgz 2025-11-07 01:36:28 +00:00
wenxi-onyx
9cf744cca2 Publish onyx-0.4.7.tgz 2025-11-07 01:15:03 +00:00
github-merge-queue[bot]
b64e5902b9 Publish onyx-0.4.7.tgz 2025-11-06 23:40:18 +00:00
raunakab
1871860d5a Publish onyx-0.4.7.tgz 2025-11-06 22:49:53 +00:00
github-merge-queue[bot]
960792e48f Publish onyx-0.4.7.tgz 2025-11-06 21:43:55 +00:00
justin-tahara
8c16183a0c Publish onyx-0.4.7.tgz 2025-11-06 21:19:31 +00:00
github-merge-queue[bot]
e6a5301db9 Publish onyx-0.4.7.tgz 2025-11-06 20:13:15 +00:00
github-merge-queue[bot]
a4a0a191e0 Publish onyx-0.4.7.tgz 2025-11-06 20:11:45 +00:00
github-merge-queue[bot]
a9317b5fe7 Publish onyx-0.4.7.tgz 2025-11-06 19:06:42 +00:00
raunakab
6ac641df8d Publish onyx-0.4.7.tgz 2025-11-06 18:09:36 +00:00
raunakab
6d039ffda8 Publish onyx-0.4.7.tgz 2025-11-06 18:07:26 +00:00
github-merge-queue[bot]
eda4a10d41 Publish onyx-0.4.7.tgz 2025-11-06 07:34:26 +00:00
Weves
b613210d2b Publish onyx-0.4.7.tgz 2025-11-06 06:04:35 +00:00
github-merge-queue[bot]
85326d1dda Publish onyx-0.4.7.tgz 2025-11-06 05:45:11 +00:00
github-merge-queue[bot]
362f6d57cf Publish onyx-0.4.7.tgz 2025-11-06 05:42:24 +00:00
jmelahman
a547b3e2d4 Publish onyx-0.4.7.tgz 2025-11-06 05:05:05 +00:00
wenxi-onyx
7c4a882de4 Publish onyx-0.4.7.tgz 2025-11-06 04:00:48 +00:00
github-merge-queue[bot]
b23b362233 Publish onyx-0.4.7.tgz 2025-11-06 02:45:40 +00:00
justin-tahara
66f8213ce2 Publish onyx-0.4.7.tgz 2025-11-06 02:04:01 +00:00
Weves
1e41a0169d Publish onyx-0.4.7.tgz 2025-11-06 01:54:54 +00:00
github-merge-queue[bot]
2a64a99d4d Publish onyx-0.4.7.tgz 2025-11-06 01:30:45 +00:00
github-merge-queue[bot]
57d25c6444 Publish onyx-0.4.7.tgz 2025-11-06 01:07:24 +00:00
github-merge-queue[bot]
8ee0e5e7e1 Publish onyx-0.4.7.tgz 2025-11-06 00:39:19 +00:00
rguan72
edd17a0e32 Publish onyx-0.4.7.tgz 2025-11-06 00:14:41 +00:00
github-merge-queue[bot]
661504000f Publish onyx-0.4.7.tgz 2025-11-05 22:24:51 +00:00
jmelahman
85a00d9d47 Publish onyx-0.4.7.tgz 2025-11-05 22:04:36 +00:00
jmelahman
cd7e60333c Publish onyx-0.4.7.tgz 2025-11-05 21:32:19 +00:00
wenxi-onyx
64d47e5ccf Publish onyx-0.4.7.tgz 2025-11-05 19:44:16 +00:00
Weves
657e955512 Publish onyx-0.4.7.tgz 2025-11-05 07:35:06 +00:00
Weves
b5bc32dca8 Publish onyx-0.4.7.tgz 2025-11-05 03:53:21 +00:00
wenxi-onyx
03f5e2c1eb Publish onyx-0.4.7.tgz 2025-11-04 23:23:44 +00:00
wenxi-onyx
224b30ffe7 Publish onyx-0.4.7.tgz 2025-11-04 22:51:26 +00:00
wenxi-onyx
8227acc59e Publish onyx-0.4.7.tgz 2025-11-04 22:50:54 +00:00
wenxi-onyx
2162f24bd0 Publish onyx-0.4.7.tgz 2025-11-04 22:50:40 +00:00
wenxi-onyx
cf2b31cdd9 Publish onyx-0.4.7.tgz 2025-11-04 20:16:01 +00:00
yuhongsun96
498446fb1b Publish onyx-0.4.7.tgz 2025-11-04 19:57:30 +00:00
justin-tahara
ba502a7a53 Publish onyx-0.4.7.tgz 2025-11-04 18:30:32 +00:00
github-merge-queue[bot]
0a2cc9168a Publish onyx-0.4.6.tgz 2025-11-04 01:01:01 +00:00
Weves
bf6c3f1d11 Publish onyx-0.4.6.tgz 2025-11-03 23:14:44 +00:00
raunakab
e2bb2c0e68 Publish onyx-0.4.6.tgz 2025-11-03 21:50:41 +00:00
github-merge-queue[bot]
a3e40509ba Publish onyx-0.4.6.tgz 2025-11-03 21:26:04 +00:00
rguan72
db78cdc071 Publish onyx-0.4.6.tgz 2025-11-03 20:59:20 +00:00
wenxi-onyx
1fe5bcb360 Publish onyx-0.4.6.tgz 2025-11-03 20:03:42 +00:00
github-merge-queue[bot]
82595f6d3e Publish onyx-0.4.6.tgz 2025-11-03 19:44:29 +00:00
raunakab
c7ab6daaab Publish onyx-0.4.6.tgz 2025-11-03 18:01:07 +00:00
raunakab
d8e1c30738 Publish onyx-0.4.6.tgz 2025-11-03 17:57:09 +00:00
Weves
2386f7a7cd Publish onyx-0.4.6.tgz 2025-11-03 17:48:20 +00:00
yuhongsun96
23a3443eb4 Publish onyx-0.4.6.tgz 2025-11-03 17:31:38 +00:00
github-merge-queue[bot]
b828c58bf0 Publish onyx-0.4.6.tgz 2025-11-03 08:30:22 +00:00
raunakab
702c4794c2 Publish onyx-0.4.6.tgz 2025-11-03 06:27:22 +00:00
raunakab
a94cd163db Publish onyx-0.4.6.tgz 2025-11-03 06:26:53 +00:00
raunakab
0ec699ad75 Publish onyx-0.4.6.tgz 2025-11-03 02:36:07 +00:00
Weves
e861525d2a Publish onyx-0.4.6.tgz 2025-11-02 19:25:42 +00:00
github-merge-queue[bot]
d6503e470c Publish onyx-0.4.6.tgz 2025-11-02 04:27:40 +00:00
github-merge-queue[bot]
191691a6bc Publish onyx-0.4.6.tgz 2025-11-01 18:40:57 +00:00
Weves
ab17323949 Publish onyx-0.4.6.tgz 2025-11-01 18:24:01 +00:00
github-merge-queue[bot]
71844b7e3d Publish onyx-0.4.6.tgz 2025-11-01 18:23:22 +00:00
github-merge-queue[bot]
627cfb2d11 Publish onyx-0.4.6.tgz 2025-11-01 02:06:11 +00:00
raunakab
642946f44b Publish onyx-0.4.6.tgz 2025-11-01 00:43:02 +00:00
justin-tahara
879a67ef10 Publish onyx-0.4.6.tgz 2025-11-01 00:31:08 +00:00
github-merge-queue[bot]
f727b18748 Publish onyx-0.4.5.tgz 2025-11-01 00:12:31 +00:00
rguan72
f95d9c46c1 Publish onyx-0.4.5.tgz 2025-10-31 21:12:07 +00:00
rguan72
3c444d6b3d Publish onyx-0.4.5.tgz 2025-10-31 17:37:21 +00:00
justin-tahara
0f98e36c78 Publish onyx-0.4.5.tgz 2025-10-31 17:37:07 +00:00
rguan72
6da707d770 Publish onyx-0.4.5.tgz 2025-10-31 07:26:56 +00:00
Weves
cd63baa02a Publish onyx-0.4.5.tgz 2025-10-30 22:45:40 +00:00
wenxi-onyx
0b0412312c Publish onyx-0.4.5.tgz 2025-10-30 22:29:22 +00:00
Subash-Mohan
8dade60dd6 Publish onyx-0.4.5.tgz 2025-10-30 04:39:15 +00:00
github-merge-queue[bot]
b2dda14a95 Publish onyx-0.4.5.tgz 2025-10-30 02:11:13 +00:00
github-merge-queue[bot]
7e8b53d68a Publish onyx-0.4.5.tgz 2025-10-30 02:08:05 +00:00
github-merge-queue[bot]
5d36a4b190 Publish onyx-0.4.5.tgz 2025-10-30 00:47:47 +00:00
justin-tahara
ed87cba01f Publish onyx-0.4.5.tgz 2025-10-29 22:52:46 +00:00
justin-tahara
8a46172d97 Publish onyx-0.4.4.tgz 2025-10-29 22:51:54 +00:00
justin-tahara
e85317662b Publish onyx-0.4.4.tgz 2025-10-29 20:39:47 +00:00
github-merge-queue[bot]
5969396815 Publish onyx-0.4.4.tgz 2025-10-29 01:39:22 +00:00
evan-onyx
72a832ef8b Publish onyx-0.4.4.tgz 2025-10-29 00:00:46 +00:00
github-merge-queue[bot]
52d56211bf Publish onyx-0.4.4.tgz 2025-10-28 22:59:03 +00:00
raunakab
efcef0b322 Publish onyx-0.4.4.tgz 2025-10-28 21:33:12 +00:00
github-merge-queue[bot]
b87e1d5836 Publish onyx-0.4.4.tgz 2025-10-28 19:33:10 +00:00
github-merge-queue[bot]
0dd3857e3b Publish onyx-0.4.4.tgz 2025-10-28 19:05:53 +00:00
justin-tahara
881cc4736e Publish onyx-0.4.4.tgz 2025-10-28 03:57:28 +00:00
github-merge-queue[bot]
318191157e Publish onyx-0.4.4.tgz 2025-10-28 01:53:50 +00:00
github-merge-queue[bot]
c89b441987 Publish onyx-0.4.4.tgz 2025-10-28 01:04:38 +00:00
github-merge-queue[bot]
0fa5b346ba Publish onyx-0.4.4.tgz 2025-10-28 00:18:30 +00:00
github-merge-queue[bot]
94b69c5d4b Publish onyx-0.4.4.tgz 2025-10-27 23:51:48 +00:00
rguan72
d135caddf7 Publish onyx-0.4.4.tgz 2025-10-27 23:11:56 +00:00
justin-tahara
98d695e26c Publish onyx-0.4.4.tgz 2025-10-27 22:40:35 +00:00
justin-tahara
5fd82473b2 Publish onyx-0.4.4.tgz 2025-10-27 22:40:26 +00:00
github-merge-queue[bot]
ddfd4960bc Publish onyx-0.4.4.tgz 2025-10-27 21:59:18 +00:00
justin-tahara
b18f392976 Publish onyx-0.4.4.tgz 2025-10-27 21:27:12 +00:00
wenxi-onyx
056352b1bf Publish onyx-0.4.4.tgz 2025-10-27 19:39:59 +00:00
wenxi-onyx
1956e4dcbf Publish onyx-0.4.4.tgz 2025-10-27 19:39:25 +00:00
wenxi-onyx
fb026b094c Publish onyx-0.4.4.tgz 2025-10-27 18:55:38 +00:00
raunakab
41ad3174ab Publish onyx-0.4.4.tgz 2025-10-27 18:33:50 +00:00
yuhongsun96
f39951fed4 Publish onyx-0.4.4.tgz 2025-10-27 17:53:34 +00:00
raunakab
f5b0771a92 Publish onyx-0.4.4.tgz 2025-10-27 17:51:55 +00:00
raunakab
01717998e1 Publish onyx-0.4.4.tgz 2025-10-27 07:11:42 +00:00
raunakab
f850f3aa95 Publish onyx-0.4.4.tgz 2025-10-27 06:03:21 +00:00
raunakab
d3aa953bf5 Publish onyx-0.4.4.tgz 2025-10-27 05:32:52 +00:00
raunakab
eae70b8308 Publish onyx-0.4.4.tgz 2025-10-27 05:26:00 +00:00
Weves
644160486a Publish onyx-0.4.4.tgz 2025-10-27 02:09:12 +00:00
Weves
93e1cd340a Publish onyx-0.4.4.tgz 2025-10-27 00:20:41 +00:00
Weves
998d86077a Publish onyx-0.4.4.tgz 2025-10-26 22:23:18 +00:00
Weves
73b21184f7 Publish onyx-0.4.4.tgz 2025-10-26 20:38:59 +00:00
Weves
ea87c8320a Publish onyx-0.4.4.tgz 2025-10-26 00:50:48 +00:00
Weves
e723c3dfce Publish onyx-0.4.4.tgz 2025-10-25 06:39:50 +00:00
Weves
1020973a53 Publish onyx-0.4.4.tgz 2025-10-25 03:02:51 +00:00
github-merge-queue[bot]
4d757b4f94 Publish onyx-0.4.4.tgz 2025-10-25 00:06:45 +00:00
github-merge-queue[bot]
08012e25fe Publish onyx-0.4.4.tgz 2025-10-24 23:47:08 +00:00
Weves
a26e3b22ee Publish onyx-0.4.4.tgz 2025-10-24 23:22:37 +00:00
Weves
79d54ce542 Publish onyx-0.4.4.tgz 2025-10-24 23:21:30 +00:00
Weves
f390b3dcc6 Publish onyx-0.4.4.tgz 2025-10-24 21:09:16 +00:00
evan-onyx
ab935234d8 Publish onyx-0.4.4.tgz 2025-10-24 18:50:51 +00:00
github-merge-queue[bot]
aff7ecffcf Publish onyx-0.4.4.tgz 2025-10-24 18:42:18 +00:00
Weves
e0f6d46b2e Publish onyx-0.4.4.tgz 2025-10-24 18:15:45 +00:00
justin-tahara
41afcf9504 Publish onyx-0.4.4.tgz 2025-10-24 01:24:16 +00:00
wenxi-onyx
cc6f45f6ad Publish onyx-0.4.4.tgz 2025-10-24 00:45:45 +00:00
wenxi-onyx
1b54ac165c Publish onyx-0.4.4.tgz 2025-10-24 00:44:54 +00:00
Weves
735b0a0e82 Publish onyx-0.4.4.tgz 2025-10-24 00:35:29 +00:00
Weves
f717326cae Publish onyx-0.4.4.tgz 2025-10-24 00:30:03 +00:00
raunakab
bb621480d5 Publish onyx-0.4.4.tgz 2025-10-24 00:24:06 +00:00
raunakab
461bc2b647 Publish onyx-0.4.4.tgz 2025-10-24 00:22:33 +00:00
github-merge-queue[bot]
8689d10631 Publish onyx-0.4.4.tgz 2025-10-24 00:16:30 +00:00
Weves
ca5f2b6912 Publish onyx-0.4.4.tgz 2025-10-24 00:00:09 +00:00
Weves
5e53e5768b Publish onyx-0.4.4.tgz 2025-10-23 23:52:25 +00:00
github-merge-queue[bot]
4fe74e4caa Publish onyx-0.4.4.tgz 2025-10-23 23:18:54 +00:00
Weves
5ef89e9ed5 Publish onyx-0.4.4.tgz 2025-10-23 23:01:32 +00:00
Weves
e81ef91f31 Publish onyx-0.4.4.tgz 2025-10-23 22:09:30 +00:00
nmgarza5
fbc42bc6d0 Publish onyx-0.4.4.tgz 2025-10-23 21:41:39 +00:00
github-merge-queue[bot]
86712bcae7 Publish onyx-0.4.4.tgz 2025-10-23 21:31:57 +00:00
github-merge-queue[bot]
3da70dbdeb Publish onyx-0.4.4.tgz 2025-10-23 21:23:14 +00:00
Weves
4f9bf3a4f3 Publish onyx-0.4.4.tgz 2025-10-23 21:02:59 +00:00
Weves
0f178da7d8 Publish onyx-0.4.4.tgz 2025-10-23 20:43:47 +00:00
Weves
a41845ae87 Publish onyx-0.4.4.tgz 2025-10-23 20:40:10 +00:00
github-merge-queue[bot]
2717da9dc7 Publish onyx-0.4.4.tgz 2025-10-23 19:41:00 +00:00
Weves
0ad85cdbcf Publish onyx-0.4.4.tgz 2025-10-23 19:00:07 +00:00
wenxi-onyx
0cf30673f7 Publish onyx-0.4.4.tgz 2025-10-23 18:42:53 +00:00
github-merge-queue[bot]
0464d4f516 Publish onyx-0.4.4.tgz 2025-10-23 17:58:52 +00:00
Weves
f269aed596 Publish onyx-0.4.4.tgz 2025-10-23 17:42:31 +00:00
Weves
4c1affc450 Publish onyx-0.4.4.tgz 2025-10-23 17:27:21 +00:00
Weves
20da7d8298 Publish onyx-0.4.4.tgz 2025-10-23 17:22:14 +00:00
wenxi-onyx
040666ad00 Publish onyx-0.4.4.tgz 2025-10-23 17:13:38 +00:00
Weves
2b3087a7d3 Publish onyx-0.4.4.tgz 2025-10-23 16:50:41 +00:00
github-merge-queue[bot]
555b000b2b Publish onyx-0.4.4.tgz 2025-10-22 23:53:51 +00:00
justin-tahara
7a40e51bdc Publish onyx-0.4.4.tgz 2025-10-22 22:59:48 +00:00
github-merge-queue[bot]
7d6d2dc341 Publish onyx-0.4.4.tgz 2025-10-22 22:24:08 +00:00
github-merge-queue[bot]
91e38c03be Publish onyx-0.4.4.tgz 2025-10-22 22:15:11 +00:00
github-merge-queue[bot]
1a50ee5056 Publish onyx-0.4.4.tgz 2025-10-22 21:40:43 +00:00
github-merge-queue[bot]
9cd1a5d2ab Publish onyx-0.4.4.tgz 2025-10-22 21:01:20 +00:00
github-merge-queue[bot]
6af5efc605 Publish onyx-0.4.4.tgz 2025-10-22 20:36:43 +00:00
github-merge-queue[bot]
6ff9d2e513 Publish onyx-0.4.4.tgz 2025-10-22 20:35:10 +00:00
raunakab
0cb9640509 Publish onyx-0.4.4.tgz 2025-10-22 03:37:57 +00:00
raunakab
0de637235a Publish onyx-0.4.4.tgz 2025-10-22 03:23:28 +00:00
raunakab
cc5cb6c87e Publish onyx-0.4.4.tgz 2025-10-22 03:18:12 +00:00
raunakab
af6d9d8d87 Publish onyx-0.4.4.tgz 2025-10-22 02:45:48 +00:00
raunakab
1e80836aa5 Publish onyx-0.4.4.tgz 2025-10-22 02:30:32 +00:00
justin-tahara
e804303b99 Publish onyx-0.4.4.tgz 2025-10-22 01:26:54 +00:00
raunakab
5a3d4d8949 Publish onyx-0.4.4.tgz 2025-10-22 01:11:47 +00:00
justin-tahara
d47dd3673b Publish onyx-0.4.4.tgz 2025-10-22 00:56:49 +00:00
justin-tahara
98fdbb4497 Publish onyx-0.4.4.tgz 2025-10-21 23:54:50 +00:00
raunakab
3a299b8069 Publish onyx-0.4.4.tgz 2025-10-21 23:51:50 +00:00
github-merge-queue[bot]
6b2c473ade Publish onyx-0.4.4.tgz 2025-10-21 21:09:38 +00:00
Weves
5d066efd89 Publish onyx-0.4.4.tgz 2025-10-21 20:23:28 +00:00
github-merge-queue[bot]
d9eb2ee362 Publish onyx-0.4.4.tgz 2025-10-21 19:41:25 +00:00
Weves
bbaf25eced Publish onyx-0.4.4.tgz 2025-10-21 18:48:17 +00:00
wenxi-onyx
42ee750b1f Publish onyx-0.4.4.tgz 2025-10-21 18:39:46 +00:00
github-merge-queue[bot]
6a8a9e67fc Publish onyx-0.4.4.tgz 2025-10-21 18:27:11 +00:00
justin-tahara
c277590dce Publish onyx-0.4.4.tgz 2025-10-21 17:42:59 +00:00
Weves
1adcc6135d Publish onyx-0.4.4.tgz 2025-10-21 17:39:30 +00:00
Weves
a4024e8b6a Publish onyx-0.4.4.tgz 2025-10-21 17:28:15 +00:00
wenxi-onyx
b981697dcb Publish onyx-0.4.4.tgz 2025-10-21 00:49:07 +00:00
Weves
e2877bd180 Publish onyx-0.4.4.tgz 2025-10-21 00:48:37 +00:00
wenxi-onyx
e66c07fbef Publish onyx-0.4.4.tgz 2025-10-21 00:48:16 +00:00
wenxi-onyx
d54ac2daf7 Publish onyx-0.4.4.tgz 2025-10-21 00:43:23 +00:00
justin-tahara
a00a28fb73 Publish onyx-0.4.4.tgz 2025-10-21 00:41:46 +00:00
Weves
e2041ac597 Publish onyx-0.4.4.tgz 2025-10-21 00:30:40 +00:00
justin-tahara
1a35f728c5 Publish onyx-0.4.4.tgz 2025-10-21 00:21:54 +00:00
wenxi-onyx
022fba787a Publish onyx-0.4.4.tgz 2025-10-21 00:02:22 +00:00
wenxi-onyx
048f6f39b3 Publish onyx-0.4.4.tgz 2025-10-20 23:53:47 +00:00
Weves
e65dfd9ba2 Publish onyx-0.4.4.tgz 2025-10-20 23:53:02 +00:00
raunakab
cdf57d463d Publish onyx-0.4.4.tgz 2025-10-20 22:43:21 +00:00
wenxi-onyx
a81f3c36ee Publish onyx-0.4.4.tgz 2025-10-20 21:24:52 +00:00
raunakab
580cd7fea1 Publish onyx-0.4.4.tgz 2025-10-20 21:10:31 +00:00
Weves
5ce59a5cca Publish onyx-0.4.4.tgz 2025-10-20 20:53:34 +00:00
nmgarza5
c893ebeaf5 Publish onyx-0.4.4.tgz 2025-10-20 20:50:16 +00:00
Weves
29abc18269 Publish onyx-0.4.4.tgz 2025-10-20 20:29:40 +00:00
evan-onyx
3abc32d45a Publish onyx-0.4.4.tgz 2025-10-20 20:01:39 +00:00
justin-tahara
8e6e0d543c Publish onyx-0.4.4.tgz 2025-10-20 19:58:16 +00:00
raunakab
9d8f7cc608 Publish onyx-0.4.4.tgz 2025-10-20 19:49:16 +00:00
Weves
931fedcb5f Publish onyx-0.4.4.tgz 2025-10-19 20:26:04 +00:00
Weves
ed5ba46bc2 Publish onyx-0.4.4.tgz 2025-10-19 20:02:48 +00:00
Weves
2be412f674 Publish onyx-0.4.4.tgz 2025-10-19 19:38:30 +00:00
Weves
350a21a73b Publish onyx-0.4.4.tgz 2025-10-19 01:26:55 +00:00
Weves
f58895d542 Publish onyx-0.4.4.tgz 2025-10-18 16:06:42 +00:00
raunakab
dea0276581 Publish onyx-0.4.4.tgz 2025-10-18 01:50:07 +00:00
wenxi-onyx
d3dec72421 Publish onyx-0.4.4.tgz 2025-10-18 01:27:26 +00:00
github-merge-queue[bot]
8504ad07aa Publish onyx-0.4.4.tgz 2025-10-18 00:20:58 +00:00
github-merge-queue[bot]
9983e60c15 Publish onyx-0.4.4.tgz 2025-10-18 00:18:39 +00:00
github-merge-queue[bot]
77a190cb78 Publish onyx-0.4.4.tgz 2025-10-17 23:10:35 +00:00
github-merge-queue[bot]
80b2299732 Publish onyx-0.4.4.tgz 2025-10-17 22:57:20 +00:00
Weves
66fe67b428 Publish onyx-0.4.4.tgz 2025-10-17 20:57:08 +00:00
justin-tahara
8c30d9b21d Publish onyx-0.4.4.tgz 2025-10-17 20:53:11 +00:00
wenxi-onyx
c32e4fdafc Publish onyx-0.4.4.tgz 2025-10-17 20:52:45 +00:00
github-merge-queue[bot]
5ac4b4123d Publish onyx-0.4.4.tgz 2025-10-17 19:37:12 +00:00
yuhongsun96
29e735905b Publish onyx-0.4.4.tgz 2025-10-17 18:15:48 +00:00
github-merge-queue[bot]
3866bdcae8 Publish onyx-0.4.4.tgz 2025-10-17 18:00:20 +00:00
github-merge-queue[bot]
4afcfc3de4 Publish onyx-0.4.4.tgz 2025-10-17 17:51:34 +00:00
github-merge-queue[bot]
5afe528792 Publish onyx-0.4.4.tgz 2025-10-17 17:14:13 +00:00
Weves
e2ce5f91ab Publish onyx-0.4.4.tgz 2025-10-17 16:36:09 +00:00
Weves
c665c0bb1a Publish onyx-0.4.4.tgz 2025-10-17 16:35:19 +00:00
github-merge-queue[bot]
10db34f283 Publish onyx-0.4.4.tgz 2025-10-17 01:50:13 +00:00
justin-tahara
57f5863be4 Publish onyx-0.4.4.tgz 2025-10-17 01:17:57 +00:00
raunakab
8a285a8c50 Publish onyx-0.4.4.tgz 2025-10-17 01:04:07 +00:00
evan-onyx
a184b35d2a Publish onyx-0.4.4.tgz 2025-10-16 23:59:00 +00:00
evan-onyx
1e73df14ad Publish onyx-0.4.4.tgz 2025-10-16 23:42:55 +00:00
justin-tahara
e786885742 Publish onyx-0.4.4.tgz 2025-10-16 23:31:16 +00:00
Weves
e1a30513cd Publish onyx-0.4.4.tgz 2025-10-16 21:36:45 +00:00
github-merge-queue[bot]
c4820f667f Publish onyx-0.4.4.tgz 2025-10-16 17:54:03 +00:00
wenxi-onyx
940b310b21 Publish onyx-0.4.4.tgz 2025-10-16 17:08:44 +00:00
justin-tahara
428af24b1b Publish onyx-0.4.4.tgz 2025-10-15 23:12:31 +00:00
github-merge-queue[bot]
d6e83c56e5 Publish onyx-0.4.4.tgz 2025-10-15 21:51:06 +00:00
github-merge-queue[bot]
08bc366848 Publish onyx-0.4.4.tgz 2025-10-15 21:50:33 +00:00
raunakab
727ea3ca0a Publish onyx-0.4.4.tgz 2025-10-15 18:21:21 +00:00
github-merge-queue[bot]
8aa9d90c63 Publish onyx-0.4.4.tgz 2025-10-15 18:06:36 +00:00
raunakab
181b38fdaa Publish onyx-0.4.4.tgz 2025-10-15 17:16:05 +00:00
github-merge-queue[bot]
5bcc231f6d Publish onyx-0.4.4.tgz 2025-10-15 16:18:58 +00:00
github-merge-queue[bot]
dc03dcfb4b Publish onyx-0.4.4.tgz 2025-10-15 03:57:17 +00:00
rguan72
8cbf5b10fb Publish onyx-0.4.4.tgz 2025-10-15 03:27:39 +00:00
raunakab
092512c6a0 Publish onyx-0.4.4.tgz 2025-10-15 01:27:05 +00:00
justin-tahara
d167e777e3 Publish onyx-0.4.4.tgz 2025-10-15 00:21:53 +00:00
github-merge-queue[bot]
384ba06b57 Publish onyx-0.4.4.tgz 2025-10-14 23:18:00 +00:00
github-merge-queue[bot]
bb56002f75 Publish onyx-0.4.4.tgz 2025-10-14 22:29:32 +00:00
github-merge-queue[bot]
48f74ccce1 Publish onyx-0.4.4.tgz 2025-10-14 22:21:33 +00:00
github-merge-queue[bot]
ce39602a6f Publish onyx-0.4.4.tgz 2025-10-14 22:05:17 +00:00
github-merge-queue[bot]
5401ad49f3 Publish onyx-0.4.4.tgz 2025-10-14 19:27:35 +00:00
github-merge-queue[bot]
06f70ac245 Publish onyx-0.4.4.tgz 2025-10-14 19:23:12 +00:00
github-merge-queue[bot]
f49597de80 Publish onyx-0.4.4.tgz 2025-10-14 02:20:32 +00:00
github-merge-queue[bot]
ea7293d28f Publish onyx-0.4.4.tgz 2025-10-14 01:14:17 +00:00
github-merge-queue[bot]
bfea2ed371 Publish onyx-0.4.4.tgz 2025-10-14 00:54:13 +00:00
github-merge-queue[bot]
2276a6ab2c Publish onyx-0.4.4.tgz 2025-10-13 23:45:06 +00:00
Weves
9605a956e3 Publish onyx-0.4.4.tgz 2025-10-13 21:19:35 +00:00
github-merge-queue[bot]
7580666382 Publish onyx-0.4.4.tgz 2025-10-13 20:29:37 +00:00
justin-tahara
a6267e1188 Publish onyx-0.4.4.tgz 2025-10-12 22:15:01 +00:00
Weves
fa4bd58324 Publish onyx-0.4.3.tgz 2025-10-11 17:16:57 +00:00
github-merge-queue[bot]
0c8b4035ed Publish onyx-0.4.3.tgz 2025-10-11 04:40:03 +00:00
github-merge-queue[bot]
847b873a34 Publish onyx-0.4.3.tgz 2025-10-11 04:19:46 +00:00
Weves
18aa2249c1 Publish onyx-0.4.3.tgz 2025-10-11 01:04:45 +00:00
github-merge-queue[bot]
b08f409b63 Publish onyx-0.4.3.tgz 2025-10-10 23:52:28 +00:00
github-merge-queue[bot]
c7b994f8ae Publish onyx-0.4.3.tgz 2025-10-10 22:36:23 +00:00
github-merge-queue[bot]
b596e9fc3e Publish onyx-0.4.3.tgz 2025-10-10 22:23:31 +00:00
Weves
6b68223165 Publish onyx-0.4.3.tgz 2025-10-10 05:05:25 +00:00
nmgarza5
9c6953eafa Publish onyx-0.4.3.tgz 2025-10-10 00:21:53 +00:00
nmgarza5
39ca5a1458 Publish onyx-0.4.3.tgz 2025-10-10 00:03:23 +00:00
nmgarza5
6853f74df3 Publish onyx-0.4.3.tgz 2025-10-10 00:00:49 +00:00
github-merge-queue[bot]
97c12f550b Publish onyx-0.4.3.tgz 2025-10-09 23:01:56 +00:00
github-merge-queue[bot]
8d72c93006 Publish onyx-0.4.3.tgz 2025-10-09 22:43:59 +00:00
wenxi-onyx
9aa9b2319f Publish onyx-0.4.2.tgz 2025-10-09 21:38:43 +00:00
github-merge-queue[bot]
ea4fbdde02 Publish onyx-0.4.2.tgz 2025-10-09 19:56:25 +00:00
justin-tahara
435d225df5 Publish onyx-0.4.2.tgz 2025-10-09 19:16:44 +00:00
justin-tahara
d16d5e3f2c Publish onyx-0.4.1.tgz 2025-10-09 18:01:26 +00:00
Weves
099f38c659 Publish onyx-0.4.1.tgz 2025-10-09 02:03:37 +00:00
Weves
df36a07b6c Publish onyx-0.4.1.tgz 2025-10-08 21:43:01 +00:00
Weves
e275f6b47e Publish onyx-0.4.1.tgz 2025-10-08 21:40:43 +00:00
raunakab
bcd0ac51c4 Publish onyx-0.4.1.tgz 2025-10-08 18:59:55 +00:00
evan-onyx
00e0b5aa7e Publish onyx-0.4.1.tgz 2025-10-08 17:29:43 +00:00
evan-onyx
f737d33896 Publish onyx-0.4.1.tgz 2025-10-08 17:26:04 +00:00
Weves
40d4e14b83 Publish onyx-0.4.1.tgz 2025-10-08 16:57:58 +00:00
Weves
7f98790d35 Publish onyx-0.4.1.tgz 2025-10-08 16:06:04 +00:00
github-merge-queue[bot]
588878725c Publish onyx-0.4.1.tgz 2025-10-08 03:23:17 +00:00
Weves
45fb0a5a4b Publish onyx-0.4.1.tgz 2025-10-08 02:10:47 +00:00
justin-tahara
9c5d23e217 Publish onyx-0.4.1.tgz 2025-10-08 02:02:33 +00:00
yuhongsun96
8c341731d1 Publish onyx-0.4.1.tgz 2025-10-08 01:42:12 +00:00
rguan72
87f1387cc8 Publish onyx-0.4.1.tgz 2025-10-07 22:12:24 +00:00
wenxi-onyx
d5cdd042fe Publish onyx-0.4.1.tgz 2025-10-07 21:51:23 +00:00
wenxi-onyx
c8511cea98 Publish onyx-0.4.1.tgz 2025-10-07 21:41:24 +00:00
Weves
d27ece6c17 Publish onyx-0.4.1.tgz 2025-10-07 21:21:19 +00:00
justin-tahara
ef668870c8 Publish onyx-0.4.1.tgz 2025-10-07 21:11:51 +00:00
Weves
08a0846f42 Publish onyx-0.4.1.tgz 2025-10-07 20:54:19 +00:00
Weves
d4c2a615d7 Publish onyx-0.4.1.tgz 2025-10-07 20:25:48 +00:00
Weves
85a5b3aa24 Publish onyx-0.4.1.tgz 2025-10-07 19:53:23 +00:00
justin-tahara
5f17937569 Publish onyx-0.4.1.tgz 2025-10-07 19:18:40 +00:00
Weves
76e26fead2 Publish onyx-0.4.1.tgz 2025-10-07 19:08:38 +00:00
justin-tahara
40a9eaa37b Publish onyx-0.4.1.tgz 2025-10-07 19:04:15 +00:00
Weves
a7fc2cdad3 Publish onyx-0.4.1.tgz 2025-10-07 19:02:58 +00:00
Weves
ea3d5cd08e Publish onyx-0.4.1.tgz 2025-10-07 18:40:57 +00:00
wenxi-onyx
778c5f0621 Publish onyx-0.4.1.tgz 2025-10-07 17:25:34 +00:00
Weves
3f0dcc255f Publish onyx-0.4.1.tgz 2025-10-07 16:09:01 +00:00
justin-tahara
8256738a71 Publish onyx-0.4.1.tgz 2025-10-06 20:37:56 +00:00
wenxi-onyx
5574fd2da5 Publish onyx-0.4.0.tgz 2025-10-06 19:09:15 +00:00
Weves
8ff1d06e84 Publish onyx-0.4.0.tgz 2025-10-06 19:03:09 +00:00
Weves
f6b67514f4 Publish onyx-0.4.0.tgz 2025-10-06 19:01:16 +00:00
raunakab
d9e72867fa Publish onyx-0.4.0.tgz 2025-10-06 06:04:41 +00:00
wenxi-onyx
dbc008c520 Publish onyx-0.4.0.tgz 2025-10-05 19:25:11 +00:00
Weves
d992fac05a Publish onyx-0.4.0.tgz 2025-10-05 19:00:12 +00:00
wenxi-onyx
4869d54a84 Publish onyx-0.4.0.tgz 2025-10-05 18:35:12 +00:00
Weves
06e00b9c87 Publish onyx-0.4.0.tgz 2025-10-04 21:31:13 +00:00
justin-tahara
ba87f5b027 Publish onyx-0.4.0.tgz 2025-10-04 00:46:25 +00:00
Weves
7c0b2223ca Publish onyx-0.3.5.tgz 2025-10-03 23:59:46 +00:00
Weves
7e88248f66 Publish onyx-0.3.5.tgz 2025-10-03 20:11:25 +00:00
justin-tahara
7be459980e Publish onyx-0.3.5.tgz 2025-10-03 19:33:22 +00:00
evan-onyx
549c48d76d Publish onyx-0.3.4.tgz 2025-10-03 17:52:12 +00:00
justin-tahara
44e875d903 Publish onyx-0.3.4.tgz 2025-10-03 17:45:43 +00:00
Weves
ae9313a400 Publish onyx-0.3.3.tgz 2025-10-03 17:36:43 +00:00
justin-tahara
44647361c8 Publish onyx-0.3.3.tgz 2025-10-03 16:50:06 +00:00
github-merge-queue[bot]
6d4cc2bae5 Publish onyx-0.3.3.tgz 2025-10-03 01:57:36 +00:00
Weves
04a223008d Publish onyx-0.3.3.tgz 2025-10-02 23:33:53 +00:00
wenxi-onyx
83d9d1e682 Publish onyx-0.3.3.tgz 2025-10-02 23:16:09 +00:00
evan-onyx
88486480dc Publish onyx-0.3.3.tgz 2025-10-02 22:37:18 +00:00
Weves
bb3676f69c Publish onyx-0.3.3.tgz 2025-10-02 22:31:38 +00:00
wenxi-onyx
122def562b Publish onyx-0.3.3.tgz 2025-10-02 22:23:35 +00:00
Weves
0706c6cc69 Publish onyx-0.3.3.tgz 2025-10-02 22:18:00 +00:00
evan-onyx
3c265b9825 Publish onyx-0.3.3.tgz 2025-10-02 22:02:36 +00:00
evan-onyx
92f99f0329 Publish onyx-0.3.3.tgz 2025-10-02 20:07:12 +00:00
Weves
a8ba1daa0e Publish onyx-0.3.3.tgz 2025-10-02 19:54:27 +00:00
wenxi-onyx
c763c215e1 Publish onyx-0.3.3.tgz 2025-10-02 17:48:21 +00:00
evan-onyx
56d2aa6a86 Publish onyx-0.3.3.tgz 2025-10-02 17:24:05 +00:00
Subash-Mohan
5552507432 Publish onyx-0.3.3.tgz 2025-10-02 16:14:02 +00:00
Weves
664556ddb5 Publish onyx-0.3.3.tgz 2025-10-02 15:43:36 +00:00
github-merge-queue[bot]
9af74b7b4d Publish onyx-0.3.3.tgz 2025-10-01 23:45:42 +00:00
Weves
aba219d435 Publish onyx-0.3.3.tgz 2025-10-01 22:15:31 +00:00
Weves
d46474f2ae Publish onyx-0.3.3.tgz 2025-10-01 22:06:32 +00:00
evan-onyx
b990c606bd Publish onyx-0.3.3.tgz 2025-10-01 21:54:35 +00:00
wenxi-onyx
8c6c223d21 Publish onyx-0.3.3.tgz 2025-10-01 21:43:01 +00:00
Weves
369836a0c1 Publish onyx-0.3.3.tgz 2025-09-30 21:44:50 +00:00
justin-tahara
a8dfb2e061 Publish onyx-0.3.3.tgz 2025-09-30 19:57:42 +00:00
justin-tahara
2e9b109718 Publish onyx-0.3.3.tgz 2025-09-30 19:56:13 +00:00
justin-tahara
1f02116d94 Publish onyx-0.3.3.tgz 2025-09-30 18:29:28 +00:00
Weves
c23ef63028 Publish onyx-0.3.3.tgz 2025-09-30 17:42:50 +00:00
Weves
354d4f9eda Publish onyx-0.3.3.tgz 2025-09-30 16:58:45 +00:00
Weves
f43c5c45dd Publish onyx-0.3.3.tgz 2025-09-30 02:58:16 +00:00
Weves
847f6fa830 Publish onyx-0.3.3.tgz 2025-09-30 00:59:20 +00:00
evan-onyx
cd8e9866b0 Publish onyx-0.3.3.tgz 2025-09-30 00:02:49 +00:00
Weves
9cf9f1404d Publish onyx-0.3.3.tgz 2025-09-29 22:09:51 +00:00
Weves
101be8e3bb Publish onyx-0.3.3.tgz 2025-09-29 20:56:01 +00:00
Weves
036b528757 Publish onyx-0.3.3.tgz 2025-09-29 18:03:25 +00:00
Weves
ce9fd2c3c8 Publish onyx-0.3.3.tgz 2025-09-29 17:56:02 +00:00
Weves
ac6c85bf35 Publish onyx-0.3.3.tgz 2025-09-29 16:05:21 +00:00
Subash-Mohan
fee2f623ae Publish onyx-0.3.3.tgz 2025-09-29 06:59:11 +00:00
Weves
af6ced79a8 Publish onyx-0.3.3.tgz 2025-09-28 20:44:58 +00:00
Weves
d0e1737d32 Publish onyx-0.3.3.tgz 2025-09-28 20:01:39 +00:00
Weves
554f5f3ab7 Publish onyx-0.3.3.tgz 2025-09-28 19:59:07 +00:00
yuhongsun96
33a4005a1d Publish onyx-0.3.3.tgz 2025-09-28 02:04:51 +00:00
Weves
ef12d7f822 Publish onyx-0.3.3.tgz 2025-09-28 00:44:18 +00:00
yuhongsun96
1ee54dbe73 Publish onyx-0.3.3.tgz 2025-09-27 22:38:01 +00:00
Weves
b70836e9d7 Publish onyx-0.3.3.tgz 2025-09-27 00:16:52 +00:00
Weves
610d2fc213 Publish onyx-0.3.3.tgz 2025-09-26 22:34:47 +00:00
justin-tahara
0f6eccfdfb Publish onyx-0.3.3.tgz 2025-09-26 21:00:42 +00:00
Weves
2b5276f995 Publish onyx-0.3.2.tgz 2025-09-26 02:58:51 +00:00
jessicasingh7
ec1831c198 Publish onyx-0.3.2.tgz 2025-09-26 01:11:55 +00:00
Weves
4b883eca52 Publish onyx-0.3.2.tgz 2025-09-26 00:10:31 +00:00
Weves
1a1f74fb0b Publish onyx-0.3.2.tgz 2025-09-25 23:13:36 +00:00
jessicasingh7
66e07d01f3 Publish onyx-0.3.2.tgz 2025-09-25 23:13:16 +00:00
wenxi-onyx
a968bcd433 Publish onyx-0.3.2.tgz 2025-09-25 23:00:06 +00:00
justin-tahara
a18b5253ad Publish onyx-0.3.2.tgz 2025-09-25 22:35:26 +00:00
justin-tahara
3cdb6e6531 Publish onyx-0.3.2.tgz 2025-09-25 22:09:30 +00:00
justin-tahara
cb5ff10ae7 Publish onyx-0.3.2.tgz 2025-09-25 21:09:11 +00:00
justin-tahara
0a7631204b Publish onyx-0.3.2.tgz 2025-09-25 18:59:26 +00:00
yuhongsun96
e006fc8e08 Publish onyx-0.3.1.tgz 2025-09-25 18:35:48 +00:00
yuhongsun96
7f8d28af37 Publish onyx-0.3.1.tgz 2025-09-25 18:12:00 +00:00
yuhongsun96
c93a88608f Publish onyx-0.3.1.tgz 2025-09-25 17:10:05 +00:00
yuhongsun96
e84d6170d3 Publish onyx-0.3.1.tgz 2025-09-25 16:07:03 +00:00
yuhongsun96
d9d06f884b Publish onyx-0.3.1.tgz 2025-09-25 03:34:42 +00:00
justin-tahara
de52c4a0f5 Publish onyx-0.3.1.tgz 2025-09-25 02:34:25 +00:00
justin-tahara
ff3b56ca95 Publish onyx-0.3.1.tgz 2025-09-25 02:31:15 +00:00
yuhongsun96
763e4077c9 Publish onyx-0.3.1.tgz 2025-09-24 22:33:10 +00:00
Weves
9487864920 Publish onyx-stack-0.3.1.tgz 2025-09-23 23:08:59 +00:00
jessicasingh7
9b356b48d8 Publish onyx-stack-0.3.1.tgz 2025-09-23 02:20:58 +00:00
justin-tahara
2bd2c1f33a Publish onyx-stack-0.3.1.tgz 2025-09-23 01:49:57 +00:00
justin-tahara
6c863481ad Publish onyx-stack-0.3.1.tgz 2025-09-23 01:49:37 +00:00
yuhongsun96
9c67e5f47a Publish onyx-stack-0.3.1.tgz 2025-09-23 00:26:50 +00:00
yuhongsun96
cf847d060e Publish onyx-stack-0.3.1.tgz 2025-09-23 00:10:54 +00:00
yuhongsun96
2e1f3a5cc5 Publish onyx-stack-0.3.1.tgz 2025-09-22 22:39:11 +00:00
Subash-Mohan
52e9960ca8 Publish onyx-stack-0.3.1.tgz 2025-09-22 13:54:59 +00:00
edwin-onyx
d566ca0c91 Publish onyx-stack-0.3.1.tgz 2025-09-22 03:44:32 +00:00
evan-onyx
a149cfa6a2 Publish onyx-stack-0.3.1.tgz 2025-09-20 00:11:46 +00:00
rguan72
35f72e40ab Publish onyx-stack-0.3.1.tgz 2025-09-19 21:11:44 +00:00
rguan72
82d2985eec Publish onyx-stack-0.3.1.tgz 2025-09-19 01:18:59 +00:00
evan-onyx
0a7a90d310 Publish onyx-stack-0.3.1.tgz 2025-09-18 23:37:08 +00:00
Weves
860c3e0ba1 Publish onyx-stack-0.3.1.tgz 2025-09-18 20:00:52 +00:00
Weves
3bb2bddf61 Publish onyx-stack-0.3.1.tgz 2025-09-18 18:10:37 +00:00
Weves
4d2b6e453a Publish onyx-stack-0.3.1.tgz 2025-09-18 06:49:57 +00:00
rguan72
0a9c5a619f Publish onyx-stack-0.3.1.tgz 2025-09-18 00:13:17 +00:00
wenxi-onyx
968e8b7ec8 Publish onyx-stack-0.3.1.tgz 2025-09-18 00:07:46 +00:00
Weves
8b1c15cef2 Publish onyx-stack-0.3.1.tgz 2025-09-17 23:41:04 +00:00
justin-tahara
2113dd4a75 Publish onyx-stack-0.3.1.tgz 2025-09-17 20:53:21 +00:00
rguan72
0b826e7095 Publish onyx-stack-0.3.1.tgz 2025-09-17 19:18:28 +00:00
Weves
86eb089c02 Publish onyx-stack-0.3.1.tgz 2025-09-17 06:26:42 +00:00
rguan72
4e39d5851e Publish onyx-stack-0.3.1.tgz 2025-09-17 01:59:11 +00:00
justin-tahara
ee411195a8 Publish onyx-stack-0.3.1.tgz 2025-09-16 23:59:53 +00:00
justin-tahara
229459835a Publish onyx-stack-0.3.0.tgz 2025-09-16 23:49:27 +00:00
Weves
25a0f3a53d Publish onyx-stack-0.3.0.tgz 2025-09-16 22:49:41 +00:00
justin-tahara
836e58ffc9 Publish onyx-stack-0.3.0.tgz 2025-09-16 21:57:12 +00:00
Weves
2ebe86565a Publish onyx-stack-0.2.12.tgz 2025-09-16 21:50:10 +00:00
justin-tahara
2ba0974117 Publish onyx-stack-0.2.12.tgz 2025-09-16 20:57:58 +00:00
wenxi-onyx
c87e52a699 Publish onyx-stack-0.2.11.tgz 2025-09-16 18:07:27 +00:00
evan-onyx
46ac793c69 Publish onyx-stack-0.2.11.tgz 2025-09-16 01:25:18 +00:00
Weves
c6abd907cb Publish onyx-stack-0.2.11.tgz 2025-09-15 23:47:04 +00:00
evan-onyx
b005accd56 Publish onyx-stack-0.2.11.tgz 2025-09-15 18:31:25 +00:00
Weves
f6c2891d65 Publish onyx-stack-0.2.11.tgz 2025-09-15 03:08:29 +00:00
Weves
0950d78cb5 Publish onyx-stack-0.2.11.tgz 2025-09-15 03:06:37 +00:00
Weves
5f6cb591ba Publish onyx-stack-0.2.11.tgz 2025-09-14 00:34:45 +00:00
github-merge-queue[bot]
de40793bf5 Publish onyx-stack-0.2.11.tgz 2025-09-13 12:53:35 +00:00
github-merge-queue[bot]
5ad7e97f05 Publish onyx-stack-0.2.11.tgz 2025-09-13 02:33:23 +00:00
wenxi-onyx
88d5a253bd Publish onyx-stack-0.2.11.tgz 2025-09-13 01:16:20 +00:00
Weves
3c747f839d Publish onyx-stack-0.2.11.tgz 2025-09-12 07:16:01 +00:00
justin-tahara
3abee88d15 Publish onyx-stack-0.2.11.tgz 2025-09-12 02:28:53 +00:00
Weves
be61941063 Publish onyx-stack-0.2.11.tgz 2025-09-12 01:22:02 +00:00
justin-tahara
f7c210176d Publish onyx-stack-0.2.11.tgz 2025-09-12 01:20:15 +00:00
Weves
c2ca0e2fa7 Publish onyx-stack-0.2.10.tgz 2025-09-11 21:07:30 +00:00
justin-tahara
227542631c Publish onyx-stack-0.2.10.tgz 2025-09-11 17:36:28 +00:00
wenxi-onyx
8f44d2c78a Publish onyx-stack-0.2.10.tgz 2025-09-11 04:50:11 +00:00
Weves
81ae79abb6 Publish onyx-stack-0.2.10.tgz 2025-09-11 02:30:18 +00:00
Weves
2122f1f0ed Publish onyx-stack-0.2.10.tgz 2025-09-11 02:30:04 +00:00
joachim-danswer
f99bcc7736 Publish onyx-stack-0.2.10.tgz 2025-09-10 23:40:32 +00:00
Weves
7db3a9a880 Publish onyx-stack-0.2.10.tgz 2025-09-10 23:20:59 +00:00
Weves
4c28b2ae1c Publish onyx-stack-0.2.10.tgz 2025-09-10 21:38:48 +00:00
Weves
3cf7b0a7ba Publish onyx-stack-0.2.10.tgz 2025-09-10 21:15:02 +00:00
Weves
d382508e5b Publish onyx-stack-0.2.10.tgz 2025-09-10 19:16:21 +00:00
justin-tahara
a5e457458c Publish onyx-stack-0.2.10.tgz 2025-09-10 17:25:00 +00:00
Weves
b3ca478411 Publish onyx-stack-0.2.9.tgz 2025-09-10 17:23:03 +00:00
Weves
e80554619a Publish onyx-stack-0.2.9.tgz 2025-09-09 22:53:17 +00:00
wenxi-onyx
5669ce29a7 Publish onyx-stack-0.2.9.tgz 2025-09-09 17:24:40 +00:00
justin-tahara
23ab597d6f Publish onyx-stack-0.2.9.tgz 2025-09-09 16:38:21 +00:00
Weves
d8e33695d5 Publish onyx-stack-0.2.9.tgz 2025-09-09 07:30:56 +00:00
wenxi-onyx
6fc0f1b724 Publish onyx-stack-0.2.9.tgz 2025-09-09 01:51:11 +00:00
wenxi-onyx
c602ccbec5 Publish onyx-stack-0.2.9.tgz 2025-09-09 01:07:34 +00:00
Weves
ee94fcfdd9 Publish onyx-stack-0.2.9.tgz 2025-09-09 00:48:27 +00:00
github-merge-queue[bot]
4da51c3d98 Publish onyx-stack-0.2.9.tgz 2025-09-08 23:00:13 +00:00
Weves
bc8f472e70 Publish onyx-stack-0.2.9.tgz 2025-09-08 21:01:39 +00:00
wenxi-onyx
240de9ead8 Publish onyx-stack-0.2.9.tgz 2025-09-08 20:50:22 +00:00
wenxi-onyx
8a22fb9157 Publish onyx-stack-0.2.9.tgz 2025-09-08 19:12:20 +00:00
Weves
49401be4f6 Publish onyx-stack-0.2.9.tgz 2025-09-08 06:18:19 +00:00
Weves
a468ee668d Publish onyx-stack-0.2.9.tgz 2025-09-07 21:45:45 +00:00
wenxi-onyx
c23a029aef Publish onyx-stack-0.2.9.tgz 2025-09-07 20:07:50 +00:00
Weves
94fcde3629 Publish onyx-stack-0.2.9.tgz 2025-09-07 18:58:45 +00:00
Weves
b1f1bf6fc4 Publish onyx-stack-0.2.9.tgz 2025-09-07 18:25:36 +00:00
wenxi-onyx
2d85a2be1f Publish onyx-stack-0.2.9.tgz 2025-09-07 02:30:36 +00:00
Weves
50c3cf8245 Publish onyx-stack-0.2.9.tgz 2025-09-07 01:28:02 +00:00
github-merge-queue[bot]
66a55d4e39 Publish onyx-stack-0.2.9.tgz 2025-09-06 21:34:50 +00:00
Weves
6ffbe431f1 Publish onyx-stack-0.2.9.tgz 2025-09-06 06:29:37 +00:00
Weves
22404f18e2 Publish onyx-stack-0.2.9.tgz 2025-09-06 06:14:54 +00:00
Weves
cc2b4c44c4 Publish onyx-stack-0.2.9.tgz 2025-09-06 04:07:44 +00:00
github-merge-queue[bot]
14fbcc5bc8 Publish onyx-stack-0.2.9.tgz 2025-09-06 02:16:46 +00:00
github-merge-queue[bot]
2f073e43db Publish onyx-stack-0.2.9.tgz 2025-09-05 21:06:41 +00:00
wenxi-onyx
50504fcf3a Publish onyx-stack-0.2.9.tgz 2025-09-05 17:22:35 +00:00
justin-tahara
640e1cbae1 Publish onyx-stack-0.2.9.tgz 2025-09-05 17:03:38 +00:00
github-merge-queue[bot]
11224351d1 Publish onyx-stack-0.2.9.tgz 2025-09-05 07:59:01 +00:00
Weves
997a4ad613 Publish onyx-stack-0.2.9.tgz 2025-09-05 04:52:58 +00:00
Weves
05fe9b743f Publish onyx-stack-0.2.9.tgz 2025-09-05 04:51:41 +00:00
Weves
310b3b3f8b Publish onyx-stack-0.2.9.tgz 2025-09-04 23:15:39 +00:00
wenxi-onyx
f0bbcb3a06 Publish onyx-stack-0.2.9.tgz 2025-09-04 19:07:43 +00:00
Weves
93fdc1793b Publish onyx-stack-0.2.9.tgz 2025-09-04 18:15:00 +00:00
Weves
e55fc27f0c Publish onyx-stack-0.2.9.tgz 2025-09-04 02:08:39 +00:00
wenxi-onyx
68786ecd38 Publish onyx-stack-0.2.9.tgz 2025-09-04 00:33:28 +00:00
wenxi-onyx
954c70f422 Publish onyx-stack-0.2.9.tgz 2025-09-04 00:33:13 +00:00
Weves
6080fe48a7 Publish onyx-stack-0.2.9.tgz 2025-09-03 23:26:43 +00:00
github-merge-queue[bot]
8ba887ccfe Publish onyx-stack-0.2.9.tgz 2025-09-03 23:13:08 +00:00
Weves
c2209c1522 Publish onyx-stack-0.2.9.tgz 2025-09-02 23:45:37 +00:00
github-merge-queue[bot]
85ce395df2 Publish onyx-stack-0.2.9.tgz 2025-09-02 22:53:33 +00:00
github-merge-queue[bot]
fd0d302113 Publish onyx-stack-0.2.9.tgz 2025-09-02 20:52:56 +00:00
Weves
48f3816451 Publish onyx-stack-0.2.9.tgz 2025-09-02 15:58:33 +00:00
wenxi-onyx
73b555c844 Publish onyx-stack-0.2.9.tgz 2025-09-02 04:54:13 +00:00
justin-tahara
ea21f88db8 Publish onyx-stack-0.2.9.tgz 2025-09-02 02:36:52 +00:00
justin-tahara
61670c4be4 Publish onyx-stack-0.2.9.tgz 2025-09-01 22:34:57 +00:00
justin-tahara
094970deb3 Publish onyx-stack-0.2.9.tgz 2025-09-01 22:34:09 +00:00
Weves
5fa375ac3b Publish onyx-stack-0.2.9.tgz 2025-09-01 20:34:01 +00:00
justin-tahara
fd4c5d7389 Publish onyx-stack-0.2.9.tgz 2025-09-01 17:53:28 +00:00
Weves
411e67dad7 Publish onyx-stack-0.2.9.tgz 2025-09-01 17:19:43 +00:00
Weves
9ec7c20f88 Publish onyx-stack-0.2.9.tgz 2025-09-01 17:19:09 +00:00
evan-onyx
d3f65cb8aa Publish onyx-stack-0.2.9.tgz 2025-09-01 16:53:48 +00:00
Weves
9f2e10020e Publish onyx-stack-0.2.9.tgz 2025-09-01 06:20:28 +00:00
Weves
bde4f8d10a Publish onyx-stack-0.2.9.tgz 2025-09-01 04:30:24 +00:00
Weves
625fa4d61a Publish onyx-stack-0.2.9.tgz 2025-09-01 03:57:17 +00:00
Weves
9d35781773 Publish onyx-stack-0.2.9.tgz 2025-09-01 02:51:01 +00:00
wenxi-onyx
94bf94ff1b Publish onyx-stack-0.2.9.tgz 2025-09-01 02:17:33 +00:00
Weves
ae5fe8de0e Publish onyx-stack-0.2.9.tgz 2025-08-31 21:30:06 +00:00
Weves
770bdacc67 Publish onyx-stack-0.2.9.tgz 2025-08-30 00:18:43 +00:00
Weves
d37bc1d5f3 Publish onyx-stack-0.2.9.tgz 2025-08-30 00:18:18 +00:00
wenxi-onyx
8575fbc284 Publish onyx-stack-0.2.9.tgz 2025-08-30 00:09:02 +00:00
Weves
649c3b9391 Publish onyx-stack-0.2.9.tgz 2025-08-30 00:00:09 +00:00
Weves
2ce2ee7614 Publish onyx-stack-0.2.9.tgz 2025-08-29 23:17:10 +00:00
Weves
42779ff17a Publish onyx-stack-0.2.9.tgz 2025-08-29 22:09:28 +00:00
Weves
f9c94693cd Publish onyx-stack-0.2.9.tgz 2025-08-29 21:03:17 +00:00
Weves
5dfb35507a Publish onyx-stack-0.2.9.tgz 2025-08-29 16:03:03 +00:00
Weves
23708dadfd Publish onyx-stack-0.2.9.tgz 2025-08-29 03:43:18 +00:00
wenxi-onyx
578a22c653 Publish onyx-stack-0.2.9.tgz 2025-08-28 21:18:51 +00:00
wenxi-onyx
12657196ca Publish onyx-stack-0.2.9.tgz 2025-08-28 21:18:30 +00:00
wenxi-onyx
65df5dd49d Publish onyx-stack-0.2.9.tgz 2025-08-28 20:36:02 +00:00
Weves
dca2d4cd6b Publish onyx-stack-0.2.9.tgz 2025-08-28 06:25:00 +00:00
rguan72
52b4930e49 Publish onyx-stack-0.2.9.tgz 2025-08-28 03:04:10 +00:00
Weves
8c8e1b239c Publish onyx-stack-0.2.9.tgz 2025-08-27 05:35:03 +00:00
wenxi-onyx
37d883a8a5 Publish onyx-stack-0.2.9.tgz 2025-08-27 01:16:02 +00:00
Weves
d1e4c357e9 Publish onyx-stack-0.2.9.tgz 2025-08-27 00:34:29 +00:00
wenxi-onyx
7f9a8615eb Publish onyx-stack-0.2.9.tgz 2025-08-27 00:28:18 +00:00
wenxi-onyx
faff1f34b5 Publish onyx-stack-0.2.9.tgz 2025-08-26 19:45:46 +00:00
wenxi-onyx
26c8f32e95 Publish onyx-stack-0.2.9.tgz 2025-08-26 19:34:05 +00:00
Weves
c0b027a88e Publish onyx-stack-0.2.9.tgz 2025-08-26 18:22:11 +00:00
evan-onyx
39021f5ecc Publish onyx-stack-0.2.9.tgz 2025-08-26 18:15:24 +00:00
wenxi-onyx
10d00ec489 Publish onyx-stack-0.2.9.tgz 2025-08-26 16:50:41 +00:00
Weves
564f5699c5 Publish onyx-stack-0.2.9.tgz 2025-08-26 07:27:43 +00:00
evan-onyx
fd2f3ad351 Publish onyx-stack-0.2.9.tgz 2025-08-25 23:43:56 +00:00
github-merge-queue[bot]
f2725db40c Publish onyx-stack-0.2.9.tgz 2025-08-25 23:28:03 +00:00
justin-tahara
af4b64304a Publish onyx-stack-0.2.9.tgz 2025-08-25 21:12:23 +00:00
evan-onyx
6abf464c56 Publish onyx-stack-0.2.9.tgz 2025-08-25 20:36:57 +00:00
github-merge-queue[bot]
4ba236e010 Publish onyx-stack-0.2.9.tgz 2025-08-25 19:29:42 +00:00
Subash-Mohan
a997968142 Publish onyx-stack-0.2.9.tgz 2025-08-25 02:38:45 +00:00
Weves
cd3700254a Publish onyx-stack-0.2.9.tgz 2025-08-25 00:44:56 +00:00
justin-tahara
b18842e7fe Publish onyx-stack-0.2.9.tgz 2025-08-23 01:14:16 +00:00
justin-tahara
65bfd97dcc Publish onyx-stack-0.2.9.tgz 2025-08-22 23:40:25 +00:00
justin-tahara
733e44786b Publish onyx-stack-0.2.9.tgz 2025-08-22 00:37:00 +00:00
evan-onyx
a1979f957b Publish onyx-stack-0.2.8.tgz 2025-08-22 00:26:34 +00:00
justin-tahara
bc85c1aa68 Publish onyx-stack-0.2.8.tgz 2025-08-21 21:16:11 +00:00
justin-tahara
db046e4d3c Publish onyx-stack-0.2.7.tgz 2025-08-21 16:44:26 +00:00
github-merge-queue[bot]
3aac46e58b Publish onyx-stack-0.2.7.tgz 2025-08-20 23:27:52 +00:00
justin-tahara
043fc279a8 Publish onyx-stack-0.2.7.tgz 2025-08-20 20:51:11 +00:00
justin-tahara
551dfd5d58 Publish onyx-stack-0.2.7.tgz 2025-08-20 20:51:01 +00:00
wenxi-onyx
4d0c140961 Publish onyx-stack-0.2.6.tgz 2025-08-20 16:15:17 +00:00
github-merge-queue[bot]
3a238277ec Publish onyx-stack-0.2.6.tgz 2025-08-20 05:11:52 +00:00
github-merge-queue[bot]
abf15bb4a6 Publish onyx-stack-0.2.6.tgz 2025-08-20 03:51:11 +00:00
Weves
b68d35d14f Publish onyx-stack-0.2.6.tgz 2025-08-19 22:17:15 +00:00
Weves
ec90a7370a Publish onyx-stack-0.2.6.tgz 2025-08-19 20:02:42 +00:00
justin-tahara
e34a035afc Publish onyx-stack-0.2.6.tgz 2025-08-19 00:46:58 +00:00
wenxi-onyx
7cbdd0b729 Publish onyx-stack-0.2.6.tgz 2025-08-18 21:35:18 +00:00
github-merge-queue[bot]
5bbb6b059b Publish onyx-stack-0.2.6.tgz 2025-08-18 18:25:51 +00:00
github-merge-queue[bot]
ae1635e93d Publish onyx-stack-0.2.6.tgz 2025-08-18 17:27:13 +00:00
github-merge-queue[bot]
0c2d3cbc1a Publish onyx-stack-0.2.6.tgz 2025-08-18 04:30:45 +00:00
github-merge-queue[bot]
102dcefc9d Publish onyx-stack-0.2.6.tgz 2025-08-17 23:37:06 +00:00
github-merge-queue[bot]
af3cc8edb9 Publish onyx-stack-0.2.6.tgz 2025-08-16 03:49:15 +00:00
wenxi-onyx
c96b27389e Publish onyx-stack-0.2.6.tgz 2025-08-16 01:20:47 +00:00
Weves
4b128f3e85 Publish onyx-stack-0.2.6.tgz 2025-08-15 22:44:16 +00:00
github-merge-queue[bot]
691f6797bb Publish onyx-stack-0.2.6.tgz 2025-08-15 01:53:14 +00:00
github-merge-queue[bot]
2e9f41a7f7 Publish onyx-stack-0.2.6.tgz 2025-08-15 00:59:46 +00:00
justin-tahara
d275e440ca Publish onyx-stack-0.2.6.tgz 2025-08-14 23:48:20 +00:00
wenxi-onyx
8f1d5fae8c Publish onyx-stack-0.2.6.tgz 2025-08-14 22:18:29 +00:00
wenxi-onyx
c904b50454 Publish onyx-stack-0.2.6.tgz 2025-08-14 20:21:22 +00:00
github-merge-queue[bot]
fb9d9fd995 Publish onyx-stack-0.2.5.tgz 2025-08-14 10:13:19 +00:00
github-merge-queue[bot]
fd599797db Publish onyx-stack-0.2.5.tgz 2025-08-13 21:21:27 +00:00
github-merge-queue[bot]
094f416441 Publish onyx-stack-0.2.5.tgz 2025-08-13 19:09:25 +00:00
Weves
ba9e777bdf Publish onyx-stack-0.2.5.tgz 2025-08-13 16:58:38 +00:00
github-merge-queue[bot]
e16ba43392 Publish onyx-stack-0.2.5.tgz 2025-08-13 02:23:28 +00:00
github-merge-queue[bot]
4d4ff04d2e Publish onyx-stack-0.2.5.tgz 2025-08-13 01:33:06 +00:00
github-merge-queue[bot]
ba1dcd346b Publish onyx-stack-0.2.5.tgz 2025-08-12 03:45:29 +00:00
github-merge-queue[bot]
3b5352a65a Publish onyx-stack-0.2.5.tgz 2025-08-11 18:16:34 +00:00
evan-onyx
1cb87fe4b1 Publish onyx-stack-0.2.5.tgz 2025-08-11 16:58:46 +00:00
github-merge-queue[bot]
f098eacf09 Publish onyx-stack-0.2.5.tgz 2025-08-10 23:50:24 +00:00
github-merge-queue[bot]
3afea18239 Publish onyx-stack-0.2.5.tgz 2025-08-10 20:09:42 +00:00
justin-tahara
26c6f60595 Publish onyx-stack-0.2.5.tgz 2025-08-09 01:41:59 +00:00
justin-tahara
df03438e34 Update index.yaml
Signed-off-by: justin-tahara <justin-tahara@users.noreply.github.com>
2025-08-07 02:06:52 +00:00
justin-tahara
88c2a87b18 Update index.yaml
Signed-off-by: justin-tahara <justin-tahara@users.noreply.github.com>
2025-08-05 21:12:35 +00:00
justin-tahara
e717796131 Add README.md 2025-07-30 16:39:07 -07:00
Raunak Bhagat
f87d3e9849 fix: Make ungrounded types have a default name when sending to the frontend (#5133)
* Update names in map-comprehension

* Make default name for ungrounded types public

* Return the default name for ungrounded entity-types

* Update backend/onyx/db/entities.py

Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>

---------

Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
2025-07-30 20:46:30 +00:00
Rei Meguro
72cdada893 edit link to custom actions (#5129) 2025-07-30 15:08:39 +00:00
SubashMohan
c442ebaff6 Feature/GitHub permission sync (#4996)
* github perm sync initial draft

* introduce github  doc sync and perm sync

* remove specific start time check

* Refactor GitHub connector to use SlimCheckpointOutputWrapper for improved document handling

* Update GitHub sync frequency defaults from 30 minutes to 5 minutes

* Add stop signal handling and progress reporting in GitHub document sync

* Refactor tests for Confluence and Google Drive connectors to use a mock fetch function for document access

* change the doc_sync approach

* add static typing for ocument columns and where clause

* remove prefix logic in connector runner

* mypy fix

* code review changes

* mypy fix

* fix review comments

* add sort order

* Implement merge heads migration for Alembic and update Confluence and Google Drive test

* github unit tests fix

* delete merge head and rebase the docmetadata field migration

---------

Co-authored-by: Subash <subash@onyx.app>
2025-07-30 02:42:18 +00:00
Justin Tahara
56f16d107e feat(infra): Update helm version after new feature (#5120) 2025-07-29 16:31:35 -07:00
Justin Tahara
0157ae099a [Vespa] Update to optimized configuration pt.2 (#5113) 2025-07-28 20:42:31 +00:00
justin-tahara
565fb42457 Let's do this properly 2025-07-28 10:42:31 -07:00
justin-tahara
a50a8b4a12 [Vespa] Update to optimized configuration 2025-07-28 10:38:48 -07:00
Evan Lohn
4baf4e7d96 feat: pruning freq (#5097)
* pruning frequency increase

* add logs
2025-07-26 22:29:43 +00:00
Wenxi
8b7ab2eb66 onyx metadata minio fix + permissive unstructured fail (#5085) 2025-07-25 21:26:02 +00:00
Evan Lohn
1f75f3633e fix: sidebar ranges (#5084) 2025-07-25 19:46:47 +00:00
Evan Lohn
650884d76a fix: preserve error traces (#5083) 2025-07-25 18:56:11 +00:00
Wenxi
8722bdb414 typo (#5082) 2025-07-25 18:26:21 +00:00
Evan Lohn
71037678c3 attempt to fix parsing of tricky template files (#5080) 2025-07-25 02:18:35 +00:00
Chris Weaver
68de1015e1 feat: support aspx files (#5068)
* Support aspx files

* Add fetching of site pages

* Improve

* Small enhancement

* more improvements

* Improvements

* Fix tests
2025-07-24 19:19:24 -07:00
Evan Lohn
e2b3a6e144 fix: drive external links (#5079) 2025-07-24 17:42:12 -07:00
Evan Lohn
4f04b09efa add library to fall back to for tokenizing (#5078) 2025-07-24 11:15:07 -07:00
SubashMohan
5c4f44d258 fix: sharepoint lg files issue (#5065)
* add SharePoint file size threshold check

* Implement retry logic for SharePoint queries to handle rate limiting and server error

* mypy fix

* add content none check

* remove unreachable code from retry logic in sharepoint connector
2025-07-24 14:26:01 +00:00
Evan Lohn
19652ad60e attempt fix for broken excel files (#5071) 2025-07-24 01:21:13 +00:00
Evan Lohn
70c96b6ab3 fix: remove locks from indexing callback (#5070) 2025-07-23 23:05:35 +00:00
Raunak Bhagat
65076b916f refactor: Update location of sidebar (#5067)
* Use props instead of inline type def

* Add new AppProvider

* Remove unused component file

* Move `sessionSidebar` to be inside of `components` instead of `app/chat`

* Change name of `sessionSidebar` to `sidebar`

* Remove `AppModeProvider`

* Fix bug in how the cookies were set
2025-07-23 21:59:34 +00:00
PaulHLiatrio
06bc0e51db fix: adjust template variable from .Chart.AppVersion to .Values.global.version to match versioning pattern. (#5069) 2025-07-23 14:54:32 -07:00
Devin
508b456b40 fix: explicit api_server dependency on minio in docker compose files (#5066) 2025-07-23 13:37:42 -07:00
Evan Lohn
bf1e2a2661 feat: avoid full rerun (#5063)
* fix: remove extra group sync

* second extra task

* minor improvement for non-checkpointed connectors
2025-07-23 18:01:23 +00:00
Evan Lohn
991d5e4203 fix: regen api key (#5064) 2025-07-23 03:36:51 +00:00
Evan Lohn
d21f012b04 fix: remove extra group sync (#5061)
* fix: remove extra group sync

* second extra task
2025-07-22 23:24:42 +00:00
Wenxi
86b7beab01 fix: too many internet chunks (#5060)
* minor internet search env vars

* add limit to internet search chunks

* note

* nits
2025-07-22 23:11:10 +00:00
Evan Lohn
b4eaa81d8b handle empty doc batches (#5058) 2025-07-22 22:35:59 +00:00
Evan Lohn
ff2a4c8723 fix: time discrepancy (#5056)
* fix time discrepancy

* remove log

* remove log
2025-07-22 22:19:02 +00:00
Raunak Bhagat
51027fd259 fix: Make pr-labeler run on edits too 2025-07-22 15:04:37 -07:00
Raunak Bhagat
7e3fd2b12a refactor: Update the error message that is logged when PR title fails Conventional Commits regex (#5062) 2025-07-22 14:46:22 -07:00
Chris Weaver
d2fef6f0b7 Tiny launch.json template improvement (#5055) 2025-07-22 11:15:44 -07:00
Evan Lohn
bd06147d26 feat: connector indexing decoupling (#4893)
* WIP

* renamed and moved tasks (WIP)

* minio migration

* bug fixes and finally add document batch storage

* WIP: can suceed but status is error

* WIP

* import fixes

* working v1 of decoupled

* catastrophe handling

* refactor

* remove unused db session in prep for new approach

* renaming and docstrings (untested)

* renames

* WIP with no more indexing fences

* robustness improvements

* clean up rebase

* migration and salesforce rate limits

* minor tweaks

* test fix

* connector pausing behavior

* correct checkpoint resumption logic

* cleanups in docfetching

* add heartbeat file

* update template jsonc

* deployment fixes

* fix vespa httpx pool

* error handling

* cosmetic fixes

* dumb

* logging improvements and non checkpointed connector fixes

* didnt save

* misc fixes

* fix import

* fix deletion of old files

* add in attempt prefix

* fix attempt prefix

* tiny log improvement

* minor changes

* fixed resumption behavior

* passing int tests

* fix unit test

* fixed unit tests

* trying timeout bump to see if int tests pass

* trying timeout bump to see if int tests pass

* fix autodiscovery

* helm chart fixes

* helm and logging
2025-07-22 03:33:25 +00:00
Raunak Bhagat
1f3cc9ed6e Make from_.user optional (use "Unknown User") if not found (#5051) 2025-07-21 17:50:28 -07:00
Raunak Bhagat
6086d9e51a feat: Updated KG admin page (#5044)
* Update KG admin UI

* Styling changes

* More changes

* Make edits auto-save

* Add more stylings / transitions

* Fix opacity

* Separate out modal into new component

* Revert backend changes

* Update styling

* Add convenience / styling changes to date-picker

* More styling / functional updates to kg admin-page

* Avoid reducing opacity of active-toggle

* Update backend APIs for new KG admin page

* More updates of styling for kg-admin page

* Remove nullability

* Remove console log

* Remove unused imports

* Change type of `children` variable

* Update web/src/app/admin/kg/interfaces.ts

Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>

* Update web/src/components/CollapsibleCard.tsx

Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>

* Remove null

* Update web/src/components/CollapsibleCard.tsx

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Force non-null

* Fix failing test

---------

Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-07-21 15:37:27 -07:00
Raunak Bhagat
e0de24f64e Remove empty tooltip (#5050) 2025-07-21 12:45:48 -07:00
Rei Meguro
08b6b1f8b3 feat: Search and Answer Quality Test Script (#4974)
* aefads

* search quality tests improvement

Co-authored-by: wenxi-onyx <wenxi@onyx.app>

* nits

* refactor: config refactor

* document context + skip genai fix

* feat: answer eval

* more error messages

* mypy ragas

* mypy

* small fixes

* feat: more metrics

* fix

* feat: grab content

* typing

* feat: lazy updates

* mypy

* all at front

* feat: answer correctness

* use api key so it works with auth enabled

* update readme

* feat: auto add path

* feat: rate limit

* fix: readme + remove rerank all

* fix: raise exception immediately

* docs: improved clarity

* feat: federated handling

* fix: mypy

* nits

---------

Co-authored-by: wenxi-onyx <wenxi@onyx.app>
2025-07-19 01:51:51 +00:00
joachim-danswer
afed1a4b37 feat: KG improvements (#5048)
* improvements

* drop views if SQL fails

* mypy fix
2025-07-18 16:15:11 -07:00
Chris Weaver
bca18cacdf fix: improve assistant fetching efficiency (#5047)
* Improve assistant fetching efficiency

* More fix

* Fix weird build stuff

* Improve
2025-07-18 14:16:10 -07:00
Chris Weaver
335db91803 fix: improve check for indexing status (#5042)
* Improve check_for_indexing + check_for_vespa_sync_task

* Remove unused

* Fix

* Simplify query

* Add more logging

* Address bot comments

* Increase # of tasks generated since we're not going cc-pair by cc-pair

* Only index 50 user files at a time
2025-07-17 23:52:51 -07:00
Chris Weaver
67c488ff1f Improve support for non-default postgres schemas (#5046) 2025-07-17 23:51:39 -07:00
Wenxi
deb7f13962 remove chat session necessity from send message simple api (#5040) 2025-07-17 23:23:46 +00:00
Raunak Bhagat
e2d3d65c60 fix: Move around group-sync tests (since they require docker services to be running) (#5041)
* Move around tests

* Add missing fixtures + change directory structure up some more

* Add env variables
2025-07-17 22:41:31 +00:00
Raunak Bhagat
b78a6834f5 fix: Have document show up before message starts streaming back (#5006)
* Have document show up before message starts streaming back

* Add docs
2025-07-17 10:17:57 -07:00
Raunak Bhagat
4abe90aa2c fix: Fix Confluence pagination (#5035)
* Re-implement pagination

* Add note

* Fix invalid integration test configs

* Fix other failing test

* Edit failing test

* Revert test

* Revert pagination size

* Add comment on yielding style

* Use fixture instead of manually initializing sql-engine

* Fix failing tests

* Move code back and copy-paste
2025-07-17 14:02:29 +00:00
Raunak Bhagat
de9568844b Add PR labeller job (#4611) 2025-07-16 18:28:18 -07:00
Evan Lohn
34268f9806 fix bug in index swap (#5036) 2025-07-16 23:09:17 +00:00
Chris Weaver
ed75678837 Add suggested helm resource limits (#5032)
* Add resource suggestions for helm

* Adjust README

* fix

* fix lint
2025-07-15 15:52:16 -07:00
Chris Weaver
3bb58a3dd3 Persona simplification r2 (#5031)
* Revert "Revert "Reduce amount of stuff we fetch on `/persona` (#4988)" (#5024)"

This reverts commit f7ed7cd3cd.

* Enhancements / fix re-render

* re-arrange

* greptile
2025-07-15 14:51:40 -07:00
Chris Weaver
4b02feef31 Add option to disable my documents (#5020)
* Add option to disable my documents

* cleanup
2025-07-14 23:16:14 -07:00
Chris Weaver
6a4d49f02e More pruning logging (#5027) 2025-07-14 12:55:12 -07:00
Chris Weaver
d1736187d3 Fix full tenant sync (#5026) 2025-07-14 10:56:40 -07:00
Wenxi
0e79b96091 Feature/revised internet search (#4994)
* remove unused pruning config

* add env vars

* internet search date time toggle

* revised internet search supporting multiple providers

* env var

* simplify retries and fix mypy issues

* greptile nits

* more mypy

* please mypy

* mypy final straw

* cursor vs. mypy

* simplify fields from provider results

* type-safe prompt, enum nit, provider enums, indexingdoc processing change

---------

Co-authored-by: Wenxi Onyx <wenxi-onyx@Wenxis-MacBook-Pro.local>
2025-07-14 10:24:03 -07:00
Raunak Bhagat
ae302d473d Fix imap tests 2025-07-14 09:50:33 -07:00
Raunak Bhagat
feca4fda78 feat: Add frontend for email connector (#5008)
* Add basic structure for frontend email connector

* Update names of credentials-json keys

* Fix up configurations workflow

* Edit logic on how `mail_client` is used

- imaplib.IMAP4_SSL is supposed to be treated as an ephemeral object

* Edit helper name and add docs

* Fix invalid mailbox selection error

* Implement greptile suggestions

* Make recipients optional and add sender to primary-owners

* Add sender to external-access too; perform dedupe-ing of emails

* Simplify logic
2025-07-14 09:43:36 -07:00
Chris Weaver
f7ed7cd3cd Revert "Reduce amount of stuff we fetch on /persona (#4988)" (#5024)
This reverts commit adf48de652.
2025-07-14 09:20:50 -07:00
Chris Weaver
8377ab3ef2 Send over less data for document sets (#5018)
* Send over less data for document sets

* Fix type errors

* Fix tests

* Fixes

* Don't change packages
2025-07-13 22:47:05 +00:00
Chris Weaver
95c23bf870 Add full sync endpoint (#5019)
* Add full sync endpoint

* Update backend/ee/onyx/server/tenants/billing_api.py

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update backend/ee/onyx/server/tenants/billing_api.py

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* fix

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-07-13 13:59:19 -07:00
Chris Weaver
e49fb8f56d Fix pruning (#5017)
* Use better last_pruned time for never pruned connectors

* improved pruning req / refresh freq selections

* Small tweak

* Update web/src/lib/connectors/connectors.tsx

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-07-12 14:46:00 -07:00
Chris Weaver
adf48de652 Reduce amount of stuff we fetch on /persona (#4988)
* claude stuff

* Send over less Assistant data

* more

* Fix build

* Fix mypy

* fix

* small tweak

* Address EL cmments

* fix

* Fix build
2025-07-12 14:15:31 -07:00
Wenxi Onyx
bca2500438 personas no longer overwrite when same name 2025-07-12 10:57:01 -07:00
Raunak Bhagat
89f925662f feat: Add ability to specify vertex-ai model location (#4955)
* Make constant a global

* Add ability to specify vertex location

* Add period

* Add a hardcoding path to the frontend

* Add docs

* Add default value to `CustomConfigKey`

* Consume default value from custom-config-key on frontend

* Use markdown renderer instead

* Update description
2025-07-11 16:16:12 -07:00
Chris Weaver
b64c6d5d40 Skip federated connectors when document sets are specified (#5015) 2025-07-11 15:49:13 -07:00
Raunak Bhagat
36c63950a6 fix: More small IMAP backend fixes (#5014)
* Make recipients an optional header and add IMAP to recognized connectors

* Add sender to external-access; perform dedupe-ing of emails
2025-07-11 20:06:28 +00:00
Raunak Bhagat
3f31340e6f feat: Add support for Confluence Macros (#5001)
* Remove macro stylings from HTML tree

* Add params

* Handle multiple cases of `ac:structured-macro` being found.

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-07-11 00:34:49 +00:00
Raunak Bhagat
6ac2258c2e Fixes for imap backend (#5011) 2025-07-10 23:58:28 +00:00
Weves
b4d3b43e8a Add more error handling for drive group sync 2025-07-10 18:33:43 -07:00
Rei Meguro
ca281b71e3 add missing slack scope 2025-07-10 17:37:57 -07:00
Wenxi
9bd5a1de7a check file size first and clarify processing logic (#4985)
* check file size first and clarify processing logic

* basic gdrive extraction clariy

* typo

---------

Co-authored-by: Wenxi Onyx <wenxi-onyx@Wenxis-MacBook-Pro.local>
2025-07-10 00:48:36 +00:00
Wenxi Onyx
d3c5a4fba0 add docx fallback 2025-07-09 17:46:15 -07:00
Chris Weaver
f50006ee63 Stop fetching channel info to make pages load faster (#5005) 2025-07-09 16:45:45 -07:00
Evan Lohn
e0092024af add minIO to README 2025-07-09 16:36:18 -07:00
Evan Lohn
675ef524b0 add minio to contributing instructions 2025-07-09 16:33:56 -07:00
Evan Lohn
240367c775 skip id migration based on env var 2025-07-09 13:37:54 -07:00
Chris Weaver
f0ed063860 Allow curators to create public connectors / document sets (#4972)
* Allow curators to create public connectors / document sets

* Address EL comments
2025-07-09 11:38:56 -07:00
Rei Meguro
bcf0ef0c87 feat: original query + better slack expansion 2025-07-09 09:23:03 -07:00
Rei Meguro
0c7a245a46 Revert "feat: original query + better slack expansion"
This reverts commit 583d82433a.
2025-07-09 20:15:15 +09:00
Rei Meguro
583d82433a feat: original query + better slack expansion 2025-07-09 20:11:24 +09:00
Chris Weaver
391e710b6e Slack federated search ux (#4969)
* slack_search.py

* rem

* fix: get elements

* feat: better stack message processing

* fix: mypy

* fix: url parsing

* refactor: federated search

* feat: proper chunking + source filters

* highlighting + source check

* feat: forced section insertion

* feat: multi slack api queries

* slack query expansion

* feat: max slack queries env

* limit slack search to avoid overloading the search

* Initial draft

* more

* simpify

* Improve modal

* Fix oauth flow

* Fully working versino

* More nicities

* Improved cascade delete

* document set for fed connector UI

* Fix source filters + improve document set selection

* Improve callback modal

* fix: logging error + showing connectors in admin page user settings

* better log

* Fix mypy

* small rei comment

* Fix pydantic

* Improvements to modals

* feat: distributed pruning

* random fix

* greptile

* Encrypt token

* respect source filters + revert llm pruning ordering

* greptile nit

* feat: thread as context in slack search

* feat: slack doc ordering

* small improvements

* rebase

* Small improvements

* Fix web build

* try fix build

* Move to seaprate model file

* Use default_factory

* remove unused model

---------

Co-authored-by: Rei Meguro <36625832+Orbital-Web@users.noreply.github.com>
2025-07-08 21:35:51 -07:00
Raunak Bhagat
004e56a91b feat: IMAP connector (#4987)
* Implement fetching; still need to work on document parsing

* Add basic skeleton of parsing email bodies

* Add id field

* Add email body parsing

* Implement checkpointed imap-connector

* Add testing logic for basic iteration

* Add logic to get different header if "to" isn't present

- possible in mailing-list workflows

* Add ability to index specific mailboxes

* Add breaking when indexing has been fully exhausted

* Sanitize all mailbox names + add space between stripped strings after parsing

* Add multi-recipient parsing

* Change around semantic-identifier and title

* Add imap tests

* Add recipients and content assertions to tests

* Add envvars to github actions workflow file

* Remove encoding header

* Update logic to not immediately establish connection upon init of `ImapConnector`

* Add start and end datetime filtering + edit when connection is established / how login is done

* Remove content-type header

* Add note about guards

* Change default parameters to be `None` instead of `[]`

* Address comment on PR

* Implement more PR suggestions

* More PR suggestions

* Implement more PR suggestions

* Change up login/logout flow (PR suggestion)

* Move port number to be envvar

* Make globals variants in enum instead (PR suggestion)

* Fix more documentation related suggestions on PR

* Have the imap connector implement `CheckpointedConnectorWithPermSync` instead

* Add helper for loading all docs with permission syncing
2025-07-08 23:58:22 +00:00
Evan Lohn
103300798f Bugfix/drive doc ids3 (#4998)
* fix migration

* fix migration2

* cursor based pages

* correct vespa URL

* fix visit api index name

* use correct endpoint and query
2025-07-07 18:23:00 +00:00
Evan Lohn
8349d6f0ea Bugfix/drive doc ids (#4990)
* fixed id extraction in drive connector

* WIP migration

* full migration script

* migration works single tenant without duplicates

* tested single tenant with duplicate docs

* migrations and frontend

* tested mutlitenant

* fix connector tests

* make tests pass
2025-07-06 01:59:12 +00:00
Emerson Gomes
cd63bf6da9 Re-adding .epub file support (#4989)
.epub files apparently were forgotten and were not allowed for upload in the frontend.
2025-07-05 07:48:55 -07:00
Rei Meguro
5f03e85195 fireflies metadata update (#4993)
* fireflies metadata

* str
2025-07-04 18:39:41 -07:00
Raunak Bhagat
cbdbfcab5e fix: Fix bug with incorrect model icon being shown (#4986)
* Fix bug with incorrect model icon being shown

* Update web/src/app/chat/input/LLMPopover.tsx

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update web/src/app/chat/input/LLMPopover.tsx

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update web/src/app/chat/input/LLMPopover.tsx

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update web/src/app/chat/input/LLMPopover.tsx

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Add visibility to filtering

* Update the model names which are shown in the popup

* Fix incorrect llm updating bug

* Fix bug in which the provider name would be used instead

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-07-04 01:39:50 +00:00
SubashMohan
6918611287 remove check for folder assistant before uploading (#4975)
Co-authored-by: Subash <subash@onyx.app>
2025-07-03 09:25:03 -07:00
Chris Weaver
b0639add8f Fix migration (#4982) 2025-07-03 09:18:57 -07:00
Evan Lohn
7af10308d7 drive service account shared fixes (#4977)
* drive service account shared fixes

* oops

* ily greptile

* scrollable index attempt errors

* tentatively correct index errors page, needs testing

* mypy

* black

* better bounds in practice

* remove random failures

* remove console log

* CW
2025-07-02 16:56:32 -07:00
Rei Meguro
5e14f23507 mypy fix 2025-07-01 23:00:33 -07:00
Raunak Bhagat
0bf3a5c609 Add type ignore for dynamic sqlalchemy class (#4979) 2025-07-01 18:14:35 -07:00
Emerson Gomes
82724826ce Remove hardcoded image extraction flag for PDFs
PDFs currently always have their images extracted.
This will make use of the "Enable Image Extraction and Analysis" workspace configuration instead.
2025-07-01 13:57:36 -07:00
Wenxi
f9e061926a account for category prefix added by user (#4976)
Co-authored-by: Wenxi Onyx <wenxi-onyx@Wenxis-MacBook-Pro.local>
2025-07-01 10:39:46 -07:00
Chris Weaver
8afd07ff7a Small gdrive perm sync enhancement (#4973)
* Small gdrive perm sync enhancement

* Small enhancement
2025-07-01 09:33:45 -07:00
Evan Lohn
6523a38255 search speedup (#4971) 2025-07-01 01:41:27 +00:00
Yuhong Sun
264878a1c9 Onyx Metadata Header for File Connector (#4968) 2025-06-29 16:09:06 -07:00
Weves
e480946f8a Reduce frequency of heavy checks on primary for cloud 2025-06-28 17:56:34 -07:00
Evan Lohn
be25b1efbd perm sync validation framework (#4958)
* perm synce validation framework

* frontend fixes

* validate perm sync when getting runner

* attempt to fix integration tests

* added new file

* oops

* skipping salesforce test due to creds

* add todo
2025-06-28 19:57:54 +00:00
Chris Weaver
204493439b Move onyx_list_tenants.py to make sure it's in the image (#4966)
* Move onyx_list_tenants.py to make sure it's in the image

* Improve
2025-06-28 13:18:14 -07:00
Weves
106c685afb Remove CONCURRENTLY from migrations 2025-06-28 11:59:59 -07:00
Raunak Bhagat
809122fec3 fix: Fix bug in which emails would be fetched during initial indexing (#4959)
* Add new convenience method

* Fix bug in which emails would be fetched for initial indexing

* Improve tests for MS Teams connector

* Fix test_gdrive_perm_sync_with_real_data patching

* Protect against incorrect truthiness

---------

Co-authored-by: Weves <chrisweaver101@gmail.com>
2025-06-27 22:05:50 -07:00
Chris Weaver
c8741d8e9c Improve mt migration process (#4960)
* Improve MT migration process

* improve MT migrations

* Improve parallel migration

* Add additional options to env.py

* Improve script

* Remove script

* Simplify

* Address greptile comment

* Fix st migration

* fix run_alembic_migrations
2025-06-27 17:31:22 -07:00
Weves
885f01e6a7 Fix test_gdrive_perm_sync_with_real_data patching 2025-06-27 16:34:37 -07:00
Rei Meguro
3180a13cf1 source fix (#4956) 2025-06-27 13:20:42 -07:00
Rei Meguro
630ac31355 KG vespa error handling + separating relationship transfer & vespa updates (#4954)
* feat: move vespa at end in try block

* simplify query

* mypy

* added order by just in case for consistent pagination

* liveness probe

* kg_p check for both extraction and clustering

* fix: better vespa logging
2025-06-26 22:05:57 -07:00
Chris Weaver
80de62f47d Improve drive group sync (#4952)
* Improve drive group sync

* Improve group syncing approach

* Fix github action

* Improve tests

* address greptile
2025-06-26 20:14:35 -07:00
Raunak Bhagat
c75d42aa99 perf: Improve performance of MS Teams permission-syncing logic (#4953)
* Add function stubs for Teams

* Implement more boilerplate code

* Change structure of helper functions

* Implement teams perms for the initial index

* Make private functions start with underscore

* Implement slim_doc retrieval and fix up doc_sync

* Simplify how doc-sync is done

* Refactor jira doc-sync

* Make locally used function start with an underscore

* Update backend/ee/onyx/configs/app_configs.py

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Add docstring to helper function

* Update tests

* Add an expected failure

* Address comment on PR

* Skip expert-info if user does not have a display-name

* Add doc comments

* Fix error in generic_doc_sync

* Move callback invocation to earlier in the loop

* Update tests to include proper list of user emails

* Update logic to grab user emails as well

* Only fetch expert-info if channel is not public

* Pull expert-info creation outside of loop

* Remove unnecessary call to `iter`

* Switch from `dataclass` to `BaseModel`

* Simplify boolean logic

* Simplify logic for determining if channel is public

* Remove unnecessary channel membership-type

* Add log-warns

* Only perform another API fetch if email is not present

* Address comments on PR

* Add message on assertion failure

* Address typo

* Make exception message more descriptive

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-06-27 01:41:01 +00:00
Raunak Bhagat
e1766bca55 feat: MS Teams permission syncing (#4934)
* Add function stubs for Teams

* Implement more boilerplate code

* Change structure of helper functions

* Implement teams perms for the initial index

* Make private functions start with underscore

* Implement slim_doc retrieval and fix up doc_sync

* Simplify how doc-sync is done

* Refactor jira doc-sync

* Make locally used function start with an underscore

* Update backend/ee/onyx/configs/app_configs.py

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Add docstring to helper function

* Update tests

* Add an expected failure

* Address comment on PR

* Skip expert-info if user does not have a display-name

* Add doc comments

* Fix error in generic_doc_sync

* Move callback invocation to earlier in the loop

* Update tests to include proper list of user emails

* Update logic to grab user emails as well

* Only fetch expert-info if channel is not public

* Pull expert-info creation outside of loop

* Remove unnecessary call to `iter`

* Switch from `dataclass` to `BaseModel`

* Simplify boolean logic

* Simplify logic for determining if channel is public

* Remove unnecessary channel membership-type

* Add log-warns

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-06-26 22:36:09 +00:00
Rei Meguro
211102f5f0 kg cleanup + reintroducing deep extraction & classification (#4949)
* kg cleanup

* more cleanup

* fix: copy over _get_classification_content_from_call_chunks for content formatting

* added back deep extraction logic

* feat: making deep extraction and clustering work

* nit
2025-06-26 14:46:50 -07:00
Weves
c46cc4666f Fix query history 2 2025-06-25 21:35:53 -07:00
joachim-danswer
0b2536b82b expand definition of public 2025-06-25 20:01:09 -07:00
Rei Meguro
600a86f11d Add creator to linear (#4948)
* add creator to linear

* fix: mypy
2025-06-25 18:19:36 -07:00
Rei Meguro
4d97a03935 KG Attribute Overhaul + Processing Tests (#4933)
* feat: extract email

* title

* feat: new type definition

* working

* test and bugfix

* fix: set docid

* fix: mypy

* feat: show implied entities too

* fix import + migration

* fix: added random delay for vespa

* fix: mypy

* mypy again...

* fix: nit

* fix: mypy

* SOLUTION!

* fix

* cleanup

* fix: transfer

* nit

---------

Co-authored-by: joachim-danswer <joachim@danswer.ai>
2025-06-25 05:06:12 +00:00
Raunak Bhagat
5d7169f244 Implement JIRA permission syncing (#4899) 2025-06-24 23:59:26 +00:00
Wenxi
df9329009c curator bug fixes (#4941)
* curator bug fixes

* basic users default to my files

* fix admin param + move delete button

* fix trashcan admin only

---------

Co-authored-by: Wenxi Onyx <wenxi-onyx@Wenxis-MacBook-Pro.local>
2025-06-24 21:33:47 +00:00
Arun Philip
e74a0398dc Update Docker Compose restart policy to unless-stopped
Changed the restart policy to unless-stopped to ensure containers
automatically restart after failures or reboots but allow manual stop
without immediate restart.

This is preferable over always because it prevents containers from
restarting automatically after a manual stop, enabling controlled
shutdowns and maintenance without unintended restarts.
2025-06-24 13:27:50 -07:00
SubashMohan
94c5822cb7 Add MinIO configuration to env template and update restart script for MinIO container (#4944)
Co-authored-by: Subash <subash@onyx.app>
2025-06-24 17:21:16 +00:00
joachim-danswer
dedac55098 KG extraction without vespa queries (#4940)
* no vespa in extraction

* prompt/flow improvements

* EL comments

* nit

* Updated get_session_with_current_tenant import

---------

Co-authored-by: Rei Meguro <36625832+Orbital-Web@users.noreply.github.com>
2025-06-24 15:02:50 +00:00
Chris Weaver
2bbab5cefe Handle very long file names (#4939)
* Handle very long file names

* Add logging

* Enhancements

* EL comments
2025-06-23 19:22:02 -07:00
joachim-danswer
4bef718fad fix kg db proxy (#4942) 2025-06-23 18:27:59 -07:00
Chris Weaver
e7376e9dc2 Add support for db proxy (#4932)
* Split up engine file

* Switch to schema_translate_map

* Fix mass serach/replace

* Remove unused

* Fix mypy

* Fix

* Add back __init__.py

* kg fix for new session management

Adding "<tenant_id>" in front of all views.

* additional kg fix

* better handling

* improve naming

---------

Co-authored-by: joachim-danswer <joachim@danswer.ai>
2025-06-23 17:19:07 -07:00
Raunak Bhagat
8d5136fe8b Fix error in which curator sidebars were hitting kg-exposed endpoint 2025-06-23 17:07:11 -07:00
joachim-danswer
3272050975 docker dev and prod template (#4936)
* docker dev and prod template

* more dev files
2025-06-23 21:43:42 +00:00
Weves
1960714042 Fix query history 2025-06-23 14:32:14 -07:00
Weves
5bddb2632e Fix parallel tool calls 2025-06-23 09:50:44 -07:00
Raunak Bhagat
5cd055dab8 Add minor type-checking fixes (#4916) 2025-06-23 13:34:40 +00:00
Raunak Bhagat
fa32b7f21e Update ruff and remove ruff-formating from pr checks (#4914) 2025-06-23 05:34:34 -07:00
Rei Meguro
37f7227000 fix: too many vespa request fix (#4931) 2025-06-22 14:31:42 -07:00
Chris Weaver
c1f9a9d122 Hubspot connector enhancements (#4927)
* Enhance hubspot connector

* Add companies, deals, and tickets

* improve typing

* Add HUBSPOT_ACCESS_TOKEN to connector tests

* Fix prettier

* Fix mypy

* Address JR comments
2025-06-22 13:54:04 -07:00
Rei Meguro
045b7cc7e2 feat: comma separated citations (#4923)
* feat: comam separated citations

* nit

* fix

* fix: comment
2025-06-21 22:51:32 +00:00
joachim-danswer
970e07a93b Forcing vespa language 2025-06-21 16:12:13 -07:00
joachim-danswer
d463a3f213 KG Updates (#4925)
* updates

 - no classification if deep extraction is False
 - separate names for views in LLM generation
 - better prompts
 - any relationship type provided to LLM that relates to identified entities

* CW feedback/comment update
2025-06-21 20:16:39 +00:00
Wenxi
4ba44c5e48 Fix no subject gmail docs (#4922)
Co-authored-by: Wenxi Onyx <wenxi-onyx@Wenxis-MacBook-Pro.local>
2025-06-20 23:22:49 +00:00
Chris Weaver
6f8176092e S3 like file store (#4897)
* Move to an S3-like file store

* Add non-mocked test

* Add S3 tests

* Improve migration / add auto-running tests

* Refactor

* Fix mypy

* Small fixes

* Improve migration to handle downgrades

* fix file store tests

* Fix file store tests again

* Fix file store tests again

* Fix mypy

* Fix default values

* Add MinIO to other compose files

* Working helm w/ minio

* Fix test

* Address greptile comments

* Harden migration

* Fix README

* Fix it

* Address more greptile comments

* Fix it

* Rebase

* Handle multi-tenant case

* Fix mypy

* Fix test

* fix test

* Improve migration

* Fix test
2025-06-20 14:22:05 -07:00
Wenxi
198ec417ba fix gemini model names + add vertex claude sonnet 4 (#4920)
* fix gemini model names + add vertex claude sonnet 4

* few more models

---------

Co-authored-by: Wenxi Onyx <wenxi-onyx@Wenxis-MacBook-Pro.local>
2025-06-20 18:18:36 +00:00
Wenxi
fbdf7798cf GCS metadata processing (#4879)
* GCS metadata processing

* Unprocessable files should still be indexed to be searched by title

* Moved re-used logic to utils. Combined file metadata PR with GCS metadata changes

* Added OnyxMetadata type, adjusted timestamp naming consistency, clarified timestamp logic

* Use BaseModel

---------

Co-authored-by: Wenxi Onyx <wenxi-onyx@Wenxis-MacBook-Pro.local>
2025-06-20 16:11:38 +00:00
Weves
7bd9c856aa Really add psql to api-server 2025-06-19 18:50:17 -07:00
Rei Meguro
948c719d73 fix (#4915) 2025-06-19 23:06:34 +00:00
Weves
42572479cb Don't load prompts if not necessary 2025-06-19 16:56:33 -07:00
Suvodhoy Sinha
accd363d3f fix(discourse-connector): handle redirect issue with categoryId rewriting page number (#4780) 2025-06-19 16:21:09 -07:00
Rei Meguro
8cf754a8b6 Kg config refactor (#4902)
* refactor: kg_config

* feat: reworked migrations

* nit

* fix: test

* rebase alembic migration

* feat: bypass cache

* fix: mypy

* fix: processing when kg disabled

* feat: celery rework

* fix: grammar

* fix: only do kg commands for KG Beta

* fix: keep config on downgrade

* fix: nit
2025-06-19 20:25:56 +00:00
Raunak Bhagat
bf79220ac0 build: Remove ruff (#4912)
* Update ruff version

* Update format command

* Update pyproject.toml

* Remove line-length

* Remove ruff in general
2025-06-18 19:12:59 -07:00
Weves
4c9dc14e65 ADd slackbot to helm 2025-06-18 11:04:25 -07:00
Weves
f8621f7ea9 Add psql to backend containers 2025-06-17 21:15:40 -07:00
trial-danswer
e0e08427b9 Feature/connector creation feedback (#4644)
* Loading on connector creation

* Dangling connectors cleaned up. Fixed loading modal.

* Dangling connector deletion happens immediately at timeout. Swapped loading modal to spinner for consistency

* Removed redundant delete func
2025-06-17 18:32:37 -07:00
Evan Lohn
169df994da tiny connector logging tweaks (#4908) 2025-06-17 22:13:40 +00:00
Evan Lohn
d83eaf2efb fail loudly when error should be propagated (#4903) 2025-06-17 22:12:19 +00:00
joachim-danswer
4e1e30f751 KG - Entity-Only Path (#4898)
* Create Entity-Only path for simple entity-focussed queries. Plus
other fixes.

* fix: use env var

* mypy fix

* fix: mypy

---------

Co-authored-by: Rei Meguro <36625832+Orbital-Web@users.noreply.github.com>
2025-06-17 22:10:29 +00:00
Raunak Bhagat
561f8c9c53 fix: Implement time-filtering for MS Teams document fetching (#4906)
* Add delta-time filtering

* Remove unused variables

* Update retry logic

* Remove variable change (inside of overriden function)

* Add back helpful variables

* Add missing assignment to variable

* Reorder classes in order to avoid using quotes

* Compress f-strings

* Address PR comment

* Implement pagination
2025-06-17 21:06:04 +00:00
SubashMohan
f625a4d0a7 feat: Add support for Assume Role authentication in S3 (#4907)
Co-authored-by: Subash <subash@onyx.app>
2025-06-17 20:56:44 +00:00
rkuo-danswer
746d4b6d3c Bugfix/salesforce correctness 3 (#4598)
* refactor salesforce sqlite db access

* more refactoring

* refactor again

* refactor again

* rename object

* add finalizer to ensure db connection is always closed

* avoid unnecessarily nesting connections and commit regularly when possible

* remove db usage from csv download

* dead code

* hide deprecation warning in ddtrace

* remove unused param

* local testing WIP

* stuff for pytest-dotenv

* autodetect filter types instead of assuming last modified always works (it doesn't)
Move filtering responsibility up instead of making utility calls excessively stateful

* fix how changed parent id's are yielded

* remove slow part of test

* clean up comments

* small refactor

* more refactor

* add normalize test

* checkpoint and comments

* add helper function

* fix gitignore

* add gitignore

* update pyproject

* delta updates

* remove comments

* fix time import

* fix set init

* add salesforce env vars

* cleanup

* more cleanup

* filtered item is unbound here

* typo

* fix suffix check

* fix empty type query

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-06-17 18:39:22 +00:00
Evan Lohn
fdd48c6588 fix db connection assertion (#4905) 2025-06-17 03:42:55 +00:00
Rei Meguro
23a04f7b9c Kg Subtype Rework (#4892)
* feat: vespa schema update

* fix: vespa multiple entities/relations yql logic

* fix: mypy

* fix: comments

* fix: kgchunkformat

* fix: reset vespa fix

* feat: vespa schema update

* feat: modify entity type and attribute value extraction

* feat: modify entity type and attribute value extraction

* feat: removed entity class and subtype from db

* slightly formatting

* feat: subtype narrowed normalization

* fix: mypy

* nits

* fix: rebase error fix

* fix: null handling

* rename for clarity

* fix: reverse order downgrade

* fix: nit

* rebase leftovers
2025-06-17 01:17:35 +00:00
Chris Weaver
b7b0dde7aa Remove non-helm kubernetes deployment option (#4904)
* Remove non-helm kubernetes deployment option

* Improve Vespa default set up

* Make nginx LoadBalancer

* Add version in values.yaml

* Fix lint

* Fix typo
2025-06-16 18:27:23 -07:00
Wenxi
c40b78c7e9 Bugfix/honor disable default slack config (#4891)
* Honor disable default config & improve UI clarity

* Disable default will also disable DMs

---------

Co-authored-by: Wenxi Onyx <wenxi-onyx@Wenxis-MacBook-Pro.local>
2025-06-16 22:24:51 +00:00
Raunak Bhagat
33c0133cc7 feat: Knowledge graph full-stack implementation (#4790)
* db setup

* transfer 1 - incomplete

* more adjustments

* relationship table + query update

* temp view creation

* restructuring

* nits

* updates

* separate read_only engine

* extraction revamp

* focus on metadata relatonships 1

* dev

* migration downgrade fix

* rebase migration change

* a3+

* progress

* base

* new extraction

* progress

* fixed KG extraction

* nits

* updates

* simplifications & cleanup

* fixes

* updates

* more feature flag checks

* fixes

* extraction process fix

* read-only user creation as part of setup

* fix for missing entity attributes

* kg read-only user creation as part of migration

* typo

* EL initial comments

* initial Account/SF Connector chnges

* SF Connector update

 - include account information

* base w/ salesforce

* evan updates + quite a bit more

* kg-filtered search

* EL changes pt 2

* migrations and env vars

* quick migration fix

* migration update

* post_rebase fixes

* mypy fixes

* test fixes

* test fix

* test fix

* read_only pool + misc

* nf

* env vars

* test improvements

* salesforce fix

* test update

* small changes

* small adjustments

* SF Connector fix & kg_stage removal for one table

* mypy fix

* small fixes

* EL + RK (pt 1) comments

* nit

* setting updated

* Salesforce test update

* EL comments

* read-only user replacement & cleanup

* SQL View fix

* converting entity type-name separators

* sql view group ownership

* view fix

* SQL tweak

* dealing with docs that were skipped by indexing

* increased error handling

* more error handling

* Output formatting fix

* kg-incremental-reindexing

* 0-doc found improvement

* celery

* migration correction

* timeout adjustments

* nit

* Updated migration

* Entity Normalization for KG Dev 1 (#4746)

* feat: trigrams column

* fix: reranking and db

* feat: v1

* fix: convert to orm

* feat: parallel

* fix: default to id_name

* fix: renamed semantic_id and semantic_id_trigrams

* fix: scalar subquery

* fix: tuning + redundancy

* fix: threshold

* fix: typo

* fix: shorten names

* wip

* fix: reverted

* feat: config

* feat: works but it was dumb

* feat: clustering works

* fix: mypy

* normalization <-> language awareness for SQL generation

* small type fixes

---------

Co-authored-by: joachim-danswer <joachim@danswer.ai>

* mypy

* typo and dead code

* kg_time_fencing

* feat: remove temp views on migration downgrade

* remove functions and triggers for now

* rebase adjustments

* EL code review results

* quick fix + trigger/funcs for single tenant

* fix: typo, mypy, dead code

* fix: autoflake

* small updatesd

* nit

* fix: typo

* early + faster view creation

* Extension creation in MT migration

* nit changes to default ETs

* Incremental Clustering and KG Refactor V1 (#4784)

Optimized/restructured incremental clustering. New pipeline actually that moves vespa updates to clustering.
Also, celery configuration has been updated.
---------

Co-authored-by: joachim-danswer <joachim@danswer.ai>

* Move file

* Fix all prior imports

* Clean sidebar items logic; add kg page

* Add kg_processing celery background task

* prompt tweak & ET extraction reset

* more general hierarchical structure

* feat: better vespa reset logic

* Add basic knowledge graph configuration

* Add configurations for KG entity-type

* prompt optimization and entity replacemants

* small prompt changes

* Implement backend APIs

* KG Refactor V2 (#4814)

Clustering & Extraction improvements & various nits 

Co-authored-by: joachim-danswer <joachim@danswer.ai>

* add connector-level coverage days

* Update APIs to be more frontend ergonomic

* Add simple test

* Make config optional in test

* fix: nit

* initial  EL responses

* refactor: helper functions for formatting

* fix: more helper fns & comments

* fix: comment code that's been implemented elsewhere

* Add entity-types APIs

* Hook up frontend to backend

* Finish hookup up entity-types to backend

* Update ordering of entity-types and fix form submitting

* Add backend API to get kg-exposed

* Add kg-exposed to sidebar

* Fix path

* Use existing values, even if kg-enabled is false

* Update what initial values are used

* Add skeleton for kg resetting

* Add return type

* Add default entity-type population when fetching entity-types

* Remove circular deps

* Minor fixes to logic

* Edit logic for default entity-types population

* Add re-index API + skeleton

* Update verbiage for KG

* Remove templatization in favour of function

* Address comments on PR

* Pull call out into its own binding

* Remove re-index API and revert implement of reset back to stub

* Fix circular import error

* Remove 'reindex' button

* Edit how the empty vendor name list is handled

* Edit how exposed is processed

* Redirect if navigated to `/admin/kg` and kg is not exposed

* Address comments on PR

* reset + entity type table display & updating updates

* Update fetching entity-types

* Make KG entity types refresh when reset

* Edit verbiage of reset button

* Update package-lock.json file

* Protect against overflowing

* Re-implement refreshing table after reset

* Edit message when nothing is shown.

* UI enhancements

* small fixes

* remove form validation?

* fix

* nit

* nit

* nit

* nit

* fix configure max coverage days

* EL comments for JR

* refactor: moved functions where they belong to fix circular import

* feat: intuitive coverage days

* feat: intuitive coverage days

* fix: safe date picker

* fix: startdate

* evan fixes

* fix: evan comment on enable/disable

* fix: style

* fix: ui issues

* fix: ui issues for reset too

* fix: tests

* fix: kg entity is not enabled

* fix: entity type reload on enable

---------

Co-authored-by: joachim-danswer <joachim@danswer.ai>
Co-authored-by: Rei Meguro <36625832+Orbital-Web@users.noreply.github.com>
2025-06-16 15:51:11 +00:00
Shahar Mazor
cca5bc13dc Make password validation configurable (#4869) 2025-06-14 14:31:05 -07:00
Wenxi
d5ecaea8e7 new script for hard deleting sessions (#4883)
Co-authored-by: Wenxi Onyx <wenxi-onyx@Wenxis-MacBook-Pro.local>
2025-06-14 01:06:47 -07:00
joachim-danswer
b6d3c38ca9 Prep KG on-demand indexing through celery (#4874)
* filter updates

* nits

* nit

* moving to celery

* RK discussion updates

* fix of postgres reset logic

* greptile comments

* RK comments

* fix

* change num_chunks

* further hardening

* nit

* added logging

* fix: mypy and argument to function

* feat: log so we know when rs finishes

* nits

* nit

---------

Co-authored-by: Rei Meguro <36625832+Orbital-Web@users.noreply.github.com>
2025-06-13 18:00:02 +00:00
Rei Meguro
b5fc1b4323 fix kg (#4881) 2025-06-12 15:44:14 -07:00
rkuo-danswer
a1a9c42b0b bump disk size (#4882)
Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-06-12 20:19:49 +00:00
Raunak Bhagat
e689e143e5 cleanup: Edit logic for default entity-types population (#4876)
* Edit logic for default entity-types population

* Remove templatization in favour of function

* Address comments on PR

* Pull call out into its own binding

* Address comments on PR
2025-06-12 08:46:32 -07:00
joachim-danswer
a7a168d934 Dual search pipeline for non-tool-calling LLMs (#4872)
Added dual pipeline also for non-tool-calling LLMs. 
A helper function was created.
2025-06-11 17:43:44 -07:00
joachim-danswer
69f47fc3e3 kg_update (#4858)
Improving Vespa chunk retrieval

Co-authored-by: Weves <chrisweaver101@gmail.com>
2025-06-11 17:40:20 -07:00
Evan Lohn
8a87140b4f JR comments 2025-06-11 15:51:11 -07:00
Evan Lohn
53db0ddc4d skip large empty excel files 2025-06-11 15:51:11 -07:00
Rei Meguro
087085403f fix: kg answer streaming (#4877)
* fix: answer streaming

* fix: env vars

* fix: remove duplicate
2025-06-11 15:47:32 -07:00
Chris Weaver
c040b1cb47 Switch to chonkie from llamaindex chunker (#4838)
* Switch to chonkie from llamaindex chunker

* Remove un-intended changes

* Order requirements

* Upgrade chonkie version
2025-06-11 14:12:52 -07:00
Raunak Bhagat
1f4d0716b9 Remove invocation of parallel_yield (was causing problems) 2025-06-11 12:19:05 -07:00
SubashMohan
aa4993873f feat: add configurable image model name and update dependencies (#4873)
Co-authored-by: Subash <subash@onyx.app>
2025-06-11 16:17:11 +00:00
Raunak Bhagat
ce031c4394 Change how replies are processed (#4870) 2025-06-11 02:14:34 +00:00
Rei Meguro
d4dadb0dda feat: default kg entity types (#4851)
* feat: default entity types

* refactor: cleaned duplicate code

* fix: delete unused fn

* refactor: dictionary instead of model for better type safety

* fix: mypy
2025-06-10 18:19:41 -07:00
Raunak Bhagat
0ded5813cd fix: Add rate-limiting to Teams API request (#4854)
* Add rate-limiting to Teams API request

* Add comment for rate-limiting

* Implement rate-limiting for office365 library.

* Remove hardcoded value

* Fix nits on PR
2025-06-10 21:12:06 +00:00
Evan Lohn
83137a19fb remove lru cache (#4865)
* remove lru cache

* fix types issue

* mypy
2025-06-10 19:40:07 +00:00
Zhipeng He
be66f8dbeb add: add Qwen icon in LLM list and update provider icon mapping (#4625) 2025-06-10 12:36:18 -07:00
SubashMohan
70baecb402 Enhancement/gpt4o image gen support (#4859)
* initial model switching changes

* Update image generation output format and revise prompt handling

* Add validation for output format in ImageGenerationTool and implement tests

---------

Co-authored-by: Subash <subash@onyx.app>
2025-06-10 08:52:21 -07:00
Chris Weaver
c27ba6bad4 Add perm sync to indexing for google drive (#4842)
* Add perm sync to indexing for google drive

* Applying changes elsewhere

* Turn on EE for perm sync slack tests

* Add new load_from_checkpoint_with_perm_sync

* Adjust way perm sync configs are represented

* Adjust run_indexing to handle perm sync on first run

* Add missing file

* Add sync on index for slack

* Add test + fixes

* Update permission

* Fix connector tests

* skip perm sync test if running MIT tests

* Address EL comments
2025-06-10 02:36:04 +00:00
Evan Lohn
61fda6ec58 drive smaller checkpoints v1 (#4849)
* drive smaller checkpoints v1

* v2

* text encoding fix
2025-06-09 23:35:12 +00:00
Evan Lohn
2c93841eaa errors have correct file id (#4818) 2025-06-09 22:36:35 +00:00
Weves
879db3391b Enable embedding parallelism 2025-06-09 15:36:36 -07:00
Suvodhoy Sinha
6dff3d41fa fix(discourse): Remove early break that was limiting topics to batch size 2025-06-09 15:20:43 -07:00
Raunak Bhagat
e399eeb014 fix: Query History Export (#4841)
* Move task registration to earlier in the API

* Remove unnecessary check
2025-06-09 10:10:53 -07:00
joachim-danswer
b133e8fcf0 enforce sub_question ordering for chat_message (#4848) 2025-06-09 02:37:35 +00:00
SubashMohan
ba9b24a477 Enhance credential management with multi-auth support and improved validation (#4846)
Co-authored-by: Subash <subash@onyx.app>
2025-06-09 00:53:18 +00:00
Rei Meguro
cc7fb625a6 KG autofill metadata (#4834)
* feat: autofill metadata

* fix: typo

* fix: enum

* fix: nit
2025-06-08 21:56:50 +00:00
Rei Meguro
2b812b7d7d Kg batch clustering (#4847)
* super genius kg_entity parent migration

* feat: batched clustering

* fix: nit
2025-06-08 21:16:10 +00:00
joachim-danswer
c5adbe4180 Knowledge Graph v1 (#4626)
* db setup

* transfer 1 - incomplete

* more adjustments

* relationship table + query update

* temp view creation

* restructuring

* nits

* updates

* separate read_only engine

* extraction revamp

* focus on metadata relatonships 1

* dev

* migration downgrade fix

* rebase migration change

* a3+

* progress

* base

* new extraction

* progress

* fixed KG extraction

* nits

* updates

* simplifications & cleanup

* fixes

* updates

* more feature flag checks

* fixes

* extraction process fix

* read-only user creation as part of setup

* fix for missing entity attributes

* kg read-only user creation as part of migration

* typo

* EL initial comments

* initial Account/SF Connector chnges

* SF Connector update

 - include account information

* base w/ salesforce

* evan updates + quite a bit more

* kg-filtered search

* EL changes pt 2

* migrations and env vars

* quick migration fix

* migration update

* post_rebase fixes

* mypy fixes

* test fixes

* test fix

* test fix

* read_only pool + misc

* nf

* env vars

* test improvements

* salesforce fix

* test update

* small changes

* small adjustments

* SF Connector fix & kg_stage removal for one table

* mypy fix

* small fixes

* EL + RK (pt 1) comments

* nit

* setting updated

* Salesforce test update

* EL comments

* read-only user replacement & cleanup

* SQL View fix

* converting entity type-name separators

* sql view group ownership

* view fix

* SQL tweak

* dealing with docs that were skipped by indexing

* increased error handling

* more error handling

* Output formatting fix

* kg-incremental-reindexing

* 0-doc found improvement

* celery

* migration correction

* timeout adjustments

* nit

* Updated migration

* Entity Normalization for KG Dev 1 (#4746)

* feat: trigrams column

* fix: reranking and db

* feat: v1

* fix: convert to orm

* feat: parallel

* fix: default to id_name

* fix: renamed semantic_id and semantic_id_trigrams

* fix: scalar subquery

* fix: tuning + redundancy

* fix: threshold

* fix: typo

* fix: shorten names

* wip

* fix: reverted

* feat: config

* feat: works but it was dumb

* feat: clustering works

* fix: mypy

* normalization <-> language awareness for SQL generation

* small type fixes

---------

Co-authored-by: joachim-danswer <joachim@danswer.ai>

* mypy

* typo and dead code

* kg_time_fencing

* feat: remove temp views on migration downgrade

* remove functions and triggers for now

* rebase adjustments

* EL code review results

* quick fix + trigger/funcs for single tenant

* fix: typo, mypy, dead code

* fix: autoflake

* small updatesd

* nit

* fix: typo

* early + faster view creation

* Extension creation in MT migration

* nit changes to default ETs

* Incremental Clustering and KG Refactor V1 (#4784)

Optimized/restructured incremental clustering. New pipeline actually that moves vespa updates to clustering.
Also, celery configuration has been updated.
---------

Co-authored-by: joachim-danswer <joachim@danswer.ai>

* prompt tweak & ET extraction reset

* more general hierarchical structure

* feat: better vespa reset logic

* prompt optimization and entity replacemants

* small prompt changes

* KG Refactor V2 (#4814)

Clustering & Extraction improvements & various nits 

Co-authored-by: joachim-danswer <joachim@danswer.ai>

* add connector-level coverage days

* fix: nit

* initial  EL responses

* refactor: helper functions for formatting

* fix: more helper fns & comments

* fix: comment code that's been implemented elsewhere

* fix: tenant_id missing arg

* fix: removed debugging stuff

* fix: moved kg_interactions db query to helper fn

* fix: tenant_id

* fix: tenant_id & removed outdated helper fn

* fix always set entity class

* fix: typo

* fix alembic heads

* fix: celery logging

* fix: migrations fix

* fix: multi tenant permissions

* fix: temp connector fix

* fix: downgrade

* Fix upgrade migration

* fix: tenant for normalization

* added additional acl

* stray EL comments

* fix: connector test

* fix mypy

* fix: temporary connector test fix

* fix: jira connector test

* nit

* small nits

* fix: black

* fix: mypy

* fix: mypy

---------

Co-authored-by: Rei Meguro <36625832+Orbital-Web@users.noreply.github.com>
2025-06-07 23:14:20 +00:00
Wenxi
21dc3a2456 Restart script clarity (#4839)
* Add error clarity to restart containers script

* erroneous cleanup on exit

* fix when starting containers for the first time

---------

Co-authored-by: Wenxi Onyx <wenxi-onyx@Wenxis-MacBook-Pro.local>
2025-06-06 09:11:58 -07:00
Wenxi
9631f373f0 Restart script clarity (#4837)
* Add error clarity to restart containers script

* erroneous cleanup on exit

* space

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

---------

Co-authored-by: Wenxi Onyx <wenxi-onyx@Wenxis-MacBook-Pro.local>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-06-05 19:24:06 -07:00
rexjohannes
cbd4d46fa5 remove Hagen from CONTRIBUTING.md (#4778)
* remove Hagen from CONTRIBUTING.md

* fix slack invite url

* fix second slack invite
2025-06-05 18:59:34 -07:00
Wenxi
dc4b9bc003 Fixed indexing when no sites are specified (#4822)
* Fixed indexing when no sites are specificed

* Added test for Sharepoint all sites index

* Accounted for paginated results.

* Typing

* Typing

---------

Co-authored-by: Wenxi Onyx <wenxi-onyx@Wenxis-MacBook-Pro.local>
2025-06-05 23:25:20 +00:00
Chris Weaver
affb9e6941 Extend the onyx_vespa_schemas.py script (#4835) 2025-06-05 22:47:32 +00:00
Chris Weaver
dc542fd7fa Enable default quantization (#4815)
* Adjust migration

* update default in form

* Add cloud indices for bfloat16

* Update backend/shared_configs/configs.py

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update vespa schema gen script

* Move embedding configs

* Remove unused imports

* remove import from shared configs

* Remove unused model

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-06-05 14:02:08 -07:00
rkuo-danswer
85eeb21b77 add slack percentage progress (#4809)
* add percentage progress

* range checking

* formatting

* for new channels, skip them if the most recent messages are all from bots

* comments

* bypass bot channels

* code review

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-06-05 17:52:46 +00:00
Rei Meguro
4bb3ee03a0 Update GitHub Connector metadata (#4769)
* feat: updated github metadata

* feat: nullity check

* feat: more metadata

* feat: userinfo

* test: connector test + more metadata

* feat: num files changed

* feat str

* feat: list of str
2025-06-04 18:33:14 +00:00
Maciej Bryński
1bb23d6837 Upgrade asyncpg for Python 3.12 (#4699) 2025-06-04 11:44:52 -07:00
joachim-danswer
f447359815 bump up agent timeouts across the board (#4821) 2025-06-04 14:36:46 +00:00
Weves
851e0b05f2 Small tweak to user invite flow 2025-06-04 08:09:33 -07:00
Chris Weaver
094cc940a4 Small embedding model cleanups (#4820)
* Small embedding model cleanups

* fix

* address greptile

* fix build
2025-06-04 00:10:44 +00:00
rkuo-danswer
51be9000bb Feature/vespa bump (#4819)
* bump cloudformation

* update kubernetes

* bump helm chart

* bump docker compose

* update chart.lock

* ai accident!

* bump vespa helm chart for fix

* increase timeout

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-06-04 00:03:01 +00:00
joachim-danswer
80ecdb711d New metadata for Jira for KG (#4785)
* new metadata components

* nits & tests
2025-06-03 20:12:56 +00:00
Chris Weaver
a599176bbf Improve reasoning detection (#4817)
* Improve reasoning detection

* Address greptile comments

* Fix mypy
2025-06-03 20:01:12 +00:00
rkuo-danswer
e0341b4c8a bumping docker push action version (#4816)
Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-06-03 12:47:01 -07:00
CaptainJeff
4c93fd448f fix: updating gemini models (#4806)
Co-authored-by: Jeffrey Drakos <jeffreydrakos@Jeffreys-MacBook-Pro-2.local>
2025-06-03 11:16:42 -07:00
Chris Weaver
84d916e210 Fix hard delete of agentic chats (#4803)
* Fix hard delete of agentic chats

* Update backend/tests/integration/tests/chat/test_chat_deletion.py

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Address Greptile comments

* fix tests

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-06-03 11:14:11 -07:00
Weves
f57ed2a8dd Adjust script 2025-06-02 18:39:00 -07:00
trial-danswer
713889babf [Connectors][Script] Resume Paused Connectors (#4798)
* [Connectors][Script] Resume Paused Connectors

* Addressing comment
2025-06-02 18:34:00 -07:00
Weves
58c641d8ec Remove ordering-only flow 2025-06-02 18:29:42 -07:00
Weves
94985e24c6 Adjust user file access 2025-06-02 17:28:49 -07:00
Evan Lohn
4c71a5f5ff drive perm sync logs + misc deployment improvements (#4788)
* some logs

* give postgress more memory

* give postgress more memory

* give postgress more memory

* revert

* give postgress more memory

* bump external access limit

* vespa timeout

* deployment consistency

* bump vespa version

* skip upgrade check

* retry permission by ids

* logs

* fix temp docx file issue

* fix drive file deduping

* RK comments

* mypy

* aggregate logs
2025-06-01 23:36:57 +00:00
rkuo-danswer
b19e3a500b try fixing slack bot (#4792)
* try fixing slack bot

* add logging

* just use if

* safe msg get

* .close isn't async

* enforce block list size limit

* various fixes and notes

* don't use self

* switch to punkt_tab

* fix return condition

* synchronize waiting, use non thread local redis locks

* fix log format, make collection copy more explicit for readability

* fix some logging

* unnecessary function

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-05-31 00:39:14 +00:00
Chris Weaver
267fe027f5 Fix failed docs table (#4800)
* Fix initial LLM provider set up

* Fix IndexAttemptErrorsModal pagination
2025-05-30 22:19:52 +00:00
Evan Lohn
0d4d8c0d64 jira daylight savings handling (#4797) 2025-05-30 19:13:38 +00:00
Chris Weaver
6f9d8c0cff Simplify passing in of file IDs for filtering (#4791)
* Simplify passing in of file IDs for filtering

* Address RK comments
2025-05-30 05:08:21 +00:00
Weves
5031096a2b Fix frozen add token rate limit migration 2025-05-29 22:22:36 -07:00
rkuo-danswer
797e113000 add a comment (#4789)
Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-05-29 14:11:19 -07:00
Raunak Bhagat
edc2892785 fix: Remove "Refining Answer" popup (#4783)
* Clean up logic

* Remove dead code

* Remove "Refining Answer" prompt
2025-05-29 19:55:38 +00:00
rkuo-danswer
ef4d5dcec3 new slack rate limiting approach (#4779)
* fix slack rate limit retry handler for groups

* trying to mitigate memory usage during csv download

* Revert "trying to mitigate memory usage during csv download"

This reverts commit 48262eacf6.

* integrated approach to rate limiting

* code review

* try no redis setting

* add pytest-dotenv

* add more debugging

* added comments

* add more stats

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-05-29 19:49:32 +00:00
Evan Lohn
0b5e3e5ee4 skip excel files that openpyxl fails on (#4787) 2025-05-29 18:09:46 +00:00
SubashMohan
f5afb3621e connector filter bug fix (#4771)
* connector filter bug fix

* refactor: use ValidStatuses type for last status filter

---------

Co-authored-by: Subash <subash@onyx.app>
2025-05-29 15:17:04 +00:00
rkuo-danswer
9f72826143 Bugfix/slack bot debugging (#4782)
* adding some logging

* better var name

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-05-28 18:43:11 +00:00
rkuo-danswer
ab7a4184df Feature/helm k8s probes 2 (#4766)
* add probes

* lint fixes

* add beat probes

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-05-28 05:20:24 +00:00
rkuo-danswer
16a14bac89 Feature/tenant reporting 2 (#4750)
* add more info

* fix headers

* add filename as param (merge)

* db manager entry in launch template

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-05-27 23:24:47 +00:00
Raunak Bhagat
baaf31513c fix: Create new grouping for CRM connectors (#4776)
* Create new grouping for CRM connectors
* Edit spacing
2025-05-27 06:51:34 -07:00
Rei Meguro
0b01d7f848 refactor: stream_llm_answer (#4772)
* refactor: stream_llm_answer

* fix: lambda

* fix: mypy, docstring
2025-05-26 22:29:33 +00:00
rkuo-danswer
23ff3476bc print sanitized api key to help troubleshoot (#4764)
Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-05-24 22:27:37 +00:00
Chris Weaver
0c7ba8e2ac Fix/add back search with files (#4767)
* Allow search w/ user files

* more

* More

* Fix

* Improve prompt

* Combine user files + regular uploaded files
2025-05-24 15:44:39 -07:00
Evan Lohn
dad99cbec7 v1 refresh drive creds during perm sync (#4768) 2025-05-23 23:01:26 +00:00
Chris Weaver
3e78c2f087 Fix POSTGRES_IDLE_SESSIONS_TIMEOUT (#4765) 2025-05-23 14:55:23 -07:00
rkuo-danswer
e822afdcfa add probes (#4762)
* add probes

* lint fixes

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-05-23 02:24:54 +00:00
rkuo-danswer
b824951c89 add probe signals for beat (#4760)
Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-05-23 01:41:11 +00:00
Evan Lohn
ca20e527fc fix tool calling for bedrock claude models (#4761)
* fix tool calling for bedrock claude models

* unit test

* fix unit test
2025-05-23 01:13:18 +00:00
rkuo-danswer
c8e65cce1e add k8s probes (#4752)
* add file signals to celery workers

* improve probe script

* cancel tref

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-05-22 20:21:59 +00:00
rkuo-danswer
6c349687da improve impersonation logging slightly (#4758)
Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-05-22 11:17:27 -07:00
Raunak Bhagat
3b64793d4b Update listener passing (#4751) 2025-05-22 01:31:20 +00:00
Rei Meguro
9dbe12cea8 Feat: Search Eval Testing Overhaul (provide ground truth, categorize query, etc.) (#4739)
* fix: autoflake & import order

* docs: readme

* fix: mypy

* feat: eval

* docs: readme

* fix: oops forgot to remove comment

* fix: typo

* fix: rename var

* updated default config

* fix: config issue

* oops

* fix: black

* fix: eval and config

* feat: non tool calling query mod
2025-05-21 19:25:10 +00:00
rkuo-danswer
e78637d632 mitigate memory usage during csv download (#4745)
* mitigate memory usage during csv download

* more gc tweaks

* missed some small changes

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-05-21 00:44:27 +00:00
Evan Lohn
cac03c07f7 v1 answer refactor (#4721)
* v1 answer refactor

* fix tests

* good catch, tests

* more cleanup
2025-05-20 23:34:27 +00:00
Raunak Bhagat
95dabfaa18 fix: Add back Teams' replies processing (#4744)
* Add replies to document construction and edit tests

* Update tests

* Add replies processing to teams

* Fix test

* Add try-except block around potential failure

* Update entity-id during ConnectorFailure raise
2025-05-20 22:55:28 +00:00
rkuo-danswer
e92c418e0f Feature/openapi (#4710)
* starting openapi support

* fix app / app_fn

* send gitignore

* dedupe function names

* add readme

* modify gitignore

* update launch template

* fix unused path param

* fix mypy

* local tests pass

* first pass at making integration tests work

* fixes

* fix script path

* set python path

* try full path

* fix output dir

* fix integration test

* more build fixes

* add generated directory

* use the config

* add a comment

* add

* modify tsconfig.json

* fix index linting bugs

* tons of lint fixes

* new gitignore

* remove generated dir

* add tasks template

* check for undefined explicitly

* fix hooks.ts

* refactor destructureValue

* improve readme

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-05-20 21:33:18 +00:00
Chris Weaver
0593d045bf Fix ext_perm_user sign-up for non multi-tenant (#4743)
* OAuth w/ external user fix

* Apply to basic auth as well
2025-05-20 20:17:01 +00:00
rkuo-danswer
fff701b0bb fix slack rate limit retry handler for groups (#4742)
Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-05-20 18:54:27 +00:00
rkuo-danswer
0087a32d8b database isn't a var! (#4741)
Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-05-20 11:02:53 -07:00
rkuo-danswer
06312e485c make sure the permission client uses the proper retry handler (#4737)
* make sure the permission client uses the proper retry handler

* fix client

---------

Co-authored-by: Richard Kuo <rkuo@rkuo.com>
2025-05-19 21:07:00 -07:00
Evan Lohn
e0f5b95cfc full drive perm sync 2025-05-19 21:06:43 -07:00
Chris Weaver
10bc072b4b Improve drive group sync (#4736)
* Improve drive group sync

* Fix mypy
2025-05-20 02:39:27 +00:00
Evan Lohn
b60884d3af don't fail on fake files (#4735)
* don't fail on fake files

* solve at the source

* oops

* oops2
2025-05-19 23:09:34 +00:00
Chris Weaver
95ae6d300c Fix slack bot kubernetes template (#4734)
* Fix slack path for kubernetes files

* Add env variables
2025-05-19 21:25:57 +00:00
Evan Lohn
b76e4754bf anthropic fix (#4733)
* anthropic fix

* naming
2025-05-19 20:34:29 +00:00
rkuo-danswer
b1085039ca fix nltk punkt (#4732)
Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-05-19 20:29:02 +00:00
Rei Meguro
d64f479c9f feat: error handling & optimization (#4722) 2025-05-19 20:27:22 +00:00
Raunak Bhagat
fd735c9a3f perf: Change query-exporting to use generators instead of expanding fully into memory (#4729)
* Change query-exporting to use generators instead of expanding fully into memory

* Fix pagination logic

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Add type annotation

* Add early break if list of chat_sessions is empty

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-05-19 20:09:45 +00:00
rkuo-danswer
2282f6a42e fix restart (#4726)
Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-05-17 17:02:27 +00:00
Rei Meguro
0262002883 fix: continue button (#4724) 2025-05-16 15:43:37 -07:00
Chris Weaver
01ca9dc85d Fix OAuth w/ ext_perm_user for multi-tenant (#4723)
* Fix OAuth w/ ext_perm_user for multi-tenant

* Improve comment
2025-05-16 14:44:01 -07:00
Weves
0735a98284 Fix import ordering 2025-05-16 14:43:50 -07:00
Emerson Gomes
8d2e170fc4 Use LiteLLM DB for determining model tool capability (#4698)
* Bump LiteLLM

* Use LiteLLM DB for determining model tool capability instead of using hardcoded list

* Make function defaults explicit
2025-05-16 13:31:39 -07:00
SubashMohan
f3e2795e69 Highlight active link in AdminSidebar based on current pathname (#4719)
* Highlight active link in AdminSidebar based on current pathname

* Refactor AdminSidebar to declare pathname variable earlier

---------

Co-authored-by: Subash <subash@onyx.app>
2025-05-16 04:55:28 +00:00
Rei Meguro
30d9ce1310 feat: search quality eval (#4720)
* fix: import order

* test examples

* fix: import

* wip: reranker based eval

* fix: import order

* feat: adjuted score

* fix: mypy

* fix: suggestions

* sorry cvs, you must go

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* fix: mypy

* fix: suggestions

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-05-15 23:44:33 +00:00
Evan Lohn
2af2b7f130 fix connector tests and drive indexing (#4715)
* fix connector tests and drive indexing

* fix other test

* fix checkpoint data bug
2025-05-15 19:15:46 +00:00
SubashMohan
9d41820363 UI fixes (#4709)
Co-authored-by: Subash <subash@onyx.app>
2025-05-15 05:46:51 +00:00
rkuo-danswer
a44f289aed restructure to signal activity while processing (#4712)
Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-05-15 05:23:11 +00:00
SubashMohan
9c078b3acf Implement pagination for retrieving spots in HighspotClient (#4705)
Co-authored-by: Subash <subash@onyx.app>
2025-05-15 00:32:12 +00:00
Rei Meguro
349f2c6ed6 Bugfix/usage report UUID (#4703)
* feat: replace user id with username in user report

* feat: pagelink arrow disable

* fix: import order

* fix: removed things we're not doing
2025-05-14 22:27:01 +00:00
rkuo-danswer
0dc851a1cf use existing session user if it matches the email (#4706)
Co-authored-by: Richard Kuo <rkuo@rkuo.com>
2025-05-14 22:18:56 +00:00
Raunak Bhagat
f27fe068e8 Add env variables (#4711) 2025-05-14 19:39:29 +00:00
Evan Lohn
f836cff935 reset to prs on next checkpoint (#4704)
* reset to prs on next checkpoint

* github time fix
2025-05-14 18:47:38 +00:00
Raunak Bhagat
312e3b92bc perf: Implement checkpointing for Teams Connector. (#4601)
* Add basic foundation for teams checkpointing classes

* Fix slack connector main entrypoint

* Saving changes

* Finish teams checkpointing impl

* Remove commented out code

* Remove more unused code

* Move code around

* Add threadpool to process requests in parallel

* Fix mypy errors / warnings

* Move test import to main function only

* Address nits on PR

* Remove unnecessary check prior to entering while-loop

* Remove print statement

* Change exception message

* Address more nits

* Use indexing instead of destructuring

* Add back invocation of `run_with_timeout` instead of a direct call

* Revert slack testing code

* Move early return to before second API call

* Pull fetch to team outside of loop

* Address nits on PR

* Add back client-side filtering

* Updated connector to return after a team's indexing is finished

* Add type ignore

* Implement proper datetime range fetching

* Address comment on PR

* Rename function

* Change exception type when no team with the given id was found

* Address nit on PR

* Add comment on why `page_loaded` is needed to be specified explicitly

* Remove duplicated calls to fetching channels

* Use helper function for thread-based yielding instead of manual logic

* Move datetime filtering to message-level instead

* Address more comments on PR

* Add new utility function for yielding sections

* Add additional utility function

* Add teams tests

* Edit error message

* Address nits on PR

* Promote url-prefix to be a class level constant

* Fix mypy error

* Remove start/end parameters from function that doesn't use them anymore; move around comments

* Address more nits on PR

* Add comment
2025-05-14 04:30:57 +00:00
Evan Lohn
0cc0964231 Perf/drive finer checkpoints (#4702)
* celery and drive fixes

* some initial nits

* skip weird files

* safer extension check

* fix drive
2025-05-14 03:15:29 +00:00
Chris Weaver
b82278e685 Fix heavy import (#4701) 2025-05-13 23:04:16 +00:00
Richard Kuo (Onyx)
daa1746b4a just readme fixes 2025-05-13 09:56:07 -07:00
rkuo-danswer
d8068f0a68 Feature/helm separate workers (#4679)
* add test

* try breaking out background workers

* fix helm lint complaints

* rename disabled files more

* try different folder structure

* fix beat selector

* vespa setup should break on success

* improved instructions for basic helm chart testing

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-05-13 02:23:32 +00:00
Chris Weaver
d91f776c2d Fix initial checkpoint save (#4697)
* Fix initial checkpoint save

* Improve comment

* Another small fix
2025-05-13 01:59:07 +00:00
Chris Weaver
a01135581f Small GitHub enhancements (#4696)
* Small github enhancements

* Fix manual run

* Address EL comments
2025-05-13 01:14:16 +00:00
rkuo-danswer
392b87fb4f Bugfix/limit permission size (#4695)
* add utility function

* add utility functions to DocExternalAccess

* refactor db access out of individual celery tasks and put it directly into the heavy task

* code review and remove leftovers

* fix circular imports

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-05-13 00:46:31 +00:00
Evan Lohn
551a05aef0 light worker discovers beat task (#4694)
* light worker discovers beat task

* v2: put in right place
2025-05-12 21:20:18 +00:00
rkuo-danswer
6b9d0b5af9 ensure we don't tag 'latest' with cloud images (#4688)
* ensure we don't tag 'latest' with cloud images

* add docker login to trivy

* fix tag names

* flavor latest false (no auto latest tags)

* fix typo

* only run the appropriate workflow for web

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
Co-authored-by: Richard Kuo <rkuo@rkuo.com>
2025-05-12 17:23:01 +00:00
Chris Weaver
b8f3ad3e5d Fix/remove ee fe (#4690)
* Remove ee imports from FE

* Remove ee imports from FE

* Style
2025-05-12 02:31:04 +00:00
Chris Weaver
b19515e25d Fix window_start (#4689)
* Fix window_start

* Add comment
2025-05-12 00:11:20 +00:00
Chris Weaver
913f7cc7d4 Fix/remove ee from mit (#4682)
* Remove some ee imports

* more

* Remove all ee imports

* Fix

* Autodiscover

* fix

* Fix typing

* More celery task stuff

* Fix import
2025-05-11 22:09:50 +00:00
rkuo-danswer
84566debab set field size limit (#4683)
* set field size limit

* don't use sys.maxsize

---------

Co-authored-by: Richard Kuo <rkuo@rkuo.com>
Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-05-09 22:46:13 +00:00
rkuo-danswer
1a8b7abd00 add test (#4676)
* add test

* comment

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-05-09 21:38:51 +00:00
Evan Lohn
4c0423f27b fix github cursor pagination infinite loop (#4673)
* fix infinite loop

* unit test for infinite loop issue

* mypy version

* more logging

* unbound locals
2025-05-09 21:35:37 +00:00
rkuo-danswer
7965fd9cbb run testing (#4681)
* run testing

* need to break on success

* add a readme

* raise vespa to 6GB

* allow test to retry

* add 20 attempts

* put memory limits back to normal

* restore chart testing on changes only

* increase retries to 40

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-05-09 11:49:43 -07:00
Chris Weaver
91831f4d07 Fix user count (#4677)
* Fix user count

* Add helper + fix async function as well

* fix mypy

* Address RK comment
2025-05-08 17:19:40 -07:00
Chris Weaver
1dd98a87cc Try to reduce memory usage on group sync (#4678) 2025-05-08 22:53:53 +00:00
rkuo-danswer
0dd65cc839 enterprise settings needs to 403 on tenant id absence (#4675)
Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-05-08 18:32:12 +00:00
Chris Weaver
519aeb6a1f Drive perm sync enhancement (#4672)
* Enhance drive perm sync

* add tests

* more stuff

* fixes

* Fix

* Speed up

* Add missing file

* Address EL comments

* Add ondelete=CASCADE

* Improve comment
2025-05-08 03:12:41 +00:00
Evan Lohn
0eab6ab935 fix drive slowness (#4668)
* fix slowness

* no more silent failing for users

* nits

* no silly info transfer
2025-05-07 22:48:08 +00:00
Evan Lohn
ee09cb95af fixes foreign key violation (#4670)
* fixes foreign key violation

* nit
2025-05-07 18:27:32 +00:00
Evan Lohn
8a9a66947e make 404s skippable (#4671) 2025-05-07 18:04:35 +00:00
Raunak Bhagat
d744c0dab4 fix: Fix error in which channel names would not have the leading "#" removed (#4664)
* Fix failing entrypoint into slack connector

* Pre-filter channel names upon instantiation of slack connector class

* Add decrypt script

* Add slack connector tests

* Fix mypy errors on decrypt.py

* Add property to SlackConnector class

* Add some basic tests

* Move location of tests

* Change name of env token

* Add secrets for Slack

* Add more parameterized cases

* Change env variable name

* Change names

* Update channel names

* Edit tests

* Modify tests

* Only import type in __main__

* Fix tests to actually test connectors

* Pass parameter to fixture directly
2025-05-07 04:55:21 +00:00
Chris Weaver
70df685709 Non default schema fix (#4667)
* Use correct postgres schema

* Remove raw Session() use

* Refactor + add test

* Fix comment
2025-05-06 20:35:59 -07:00
Chris Weaver
f85ef78238 Add more logging for confluence perm-sync + handle case where permiss… (#4586)
* Add more logging for confluence perm-sync + handle case where permissions are removed from the access token

* Make required permissions are explicit

* more

* Add slim fetch limit + mark all cc pairs of source type as successful upon group sync

* Add to dev compose

* Small teams fix

* Add file

* Add single limit pagination for confluence

* Restrict to server only

* more logging

* cleanup

* Cleanup

* Remove CONFLUENCE_CONNECTOR_SLIM_FETCH_LIMIT

* Handle teams error

* Fix ut

* Remove db dependency from confluence_doc_sync

* move stuff back to debug
2025-05-06 18:35:14 +00:00
Evan Lohn
2d7e48d8e8 possible mangling fix (#4666)
* possible mangling fix

* fixed nextUrl setting

* global bad
2025-05-06 15:51:39 +00:00
rkuo-danswer
8231328dc6 restore caching and fix up some prefixing (#4649)
* restore caching and fix up some prefixing

* try backend matrix build and fix artifact names

* need id

* add backslashes to be consistent

* fix no-cache

* leave docker tags to the meta action

* need checkout in merge

* add comment

* move spammy logs to debug status

* bunch of no-cache updates

* prefix

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-05-05 16:43:29 +00:00
Chris Weaver
7763e2fa23 Fix non-default schema in KV store (#4655)
* Fix non-default schema in KV store

* Fix custom schema
2025-05-04 22:19:35 +00:00
Chris Weaver
6085bff12d Fix test / display models (#4657)
* Fix test / display models

* Address greptile comments

* Increase wait time

* Increase overall timeout

* Move stuff to utils file

* Updates
2025-05-04 14:04:03 -07:00
Weves
97d60a89ae Add LRU cache to get_model_map 2025-05-03 17:43:58 -07:00
Raunak Bhagat
79b981075e perf: Optimize query history exporting process (#4602)
* Update mode to be a default parameter in `FileStore.read`

* Move query history exporting process to be a background job instead

* Move hardcoded report-file-naming to a common utility function

* Add type annotations

* Update download component

* Implement button to re-ping and download CSV file; fix up some backend file-checking logic

* De-indent logic (w/ early return)

* Return different error codes dependings on the type of task status

* Add more resistant failure retrying mechanisms

* Remove default parameter in helper function

* Use popup for error messaging

* Update return code

* Update web/src/app/ee/admin/performance/query-history/DownloadAsCSV.tsx

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Add type to useState call

* Update backend/ee/onyx/server/query_history/api.py

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update backend/onyx/file_store/file_store.py

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update backend/ee/onyx/background/celery/apps/primary.py

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Move rerender call to after check

* Run formatter

* Add type conversions back (smh greptile)

* Remove duplicated call to save_file

* Move non-fallible logic out of try-except block

* Pass date-ranges into API call

* Convert to ISO strings before passing it into the API call

* Add API to list all tasks

* Create new pydantic model to represent tasks to return instead

* Change helper to only fetch query-history tasks

* Use `shared_tasks` instead of old method

* Address more comments from PR; consolidate how task name is generated

* Mark task as failed if any exception is raised

* Change the task object which is returned back to the FE

* Add a table to display previously generated query-history-csv's

* Add timestamps to task; delete tasks as soon as file finishes processing

* Raise exception if start_time is not present

* Convert hard-coded string to constant

* Add "Generated At" field to table

* Return task list in sorted order (based off of start-time)

* Implement pagination

* Remove unused props and cleanup tailwind classes

* Change the name of kickoff button

* Redesign how previous query exports are viewed

* Make button a constant width even when contents change

* Remove timezone information before comparing

* Decrease interval time for re-pinging API

* Add timezone to start-time creation

* Add a refreshInterval for getting updated task status

* Add new background queue

* Edit small verbiage and remove error popup when max-retries is hit

* Change up heavy worker to recognize new task in new module

* Ensure `celery_app` is imported

* Change how `celery_app` is imported and defined

* Update comment on why `celery_app` must be imported

* Add basic skeleton for new beat task to cleanup any dead / failed query-history-export tasks

* Move cleanup task to different worker / queue

* Implement cleanup task

* Add return type

* Address comment on PR

* Remove delimiter from prefix

* Change name of function to be more descriptive

* Remove delimiter from prefix constant

* Move function invocation closer to usage location

* Move imports to top of file

* Move variable up a scope due to undefined error

* Remove dangling if-statement

* Make function more pure-functional

* Remove redefinition

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-05-03 00:16:35 +00:00
Evan Lohn
113876b276 id not set in checkpoint FINAL (#4656)
* it will never happen again.

* fix perm sync issue

* fix perm sync issue2

* ensure member emails map is populated

* other fix for perm sync

* address CW comments

* nit
2025-05-03 00:10:21 +00:00
rkuo-danswer
5c3820b39f Bugfix/slack timeout (#4652)
* don't log all channels

* print number of channels

* sanitize indexing exception messages

* harden vespa index swap

* use constants and fix list generation

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-05-02 18:24:45 +00:00
Evan Lohn
55e4465782 orphan tag cleanup optimization (#4651)
* move orphan tag cleanup to final cleanup section of associated tparent tasks

* naming
2025-05-02 17:22:59 +00:00
Evan Lohn
6d9693dc51 drive file deduping (#4648)
* drive file deduping

* switched to version that does not require thread safety

* thanks greptile

* CW comments
2025-05-02 10:58:16 -07:00
Weves
75fa10cead fix highspot 2025-05-01 14:34:35 -07:00
Richard Kuo (Onyx)
0497bfdf78 fix double entry 2025-05-01 11:26:57 -07:00
rkuo-danswer
0db2ad2132 memory optimize task generation for connector deletion (#4645)
* memory optimize task generation for connector deletion

* test

* fix up integration test docker file

* more no-cache

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-05-01 10:47:26 -07:00
Chris Weaver
49cd38fb2d Update README.md 2025-05-01 09:58:33 -07:00
Raunak Bhagat
bd36b2ad6d Remove cursor-help for tooltip (#4643) 2025-05-01 09:38:13 -07:00
Evan Lohn
6436b60763 github cursor pagination (#4642)
* v1 of cursor pagination

* mypy

* unit tests

* CW comments
2025-04-30 19:09:20 -07:00
Raunak Bhagat
a6cc1c84dc Add padding to bottom of pages (#4641) 2025-04-30 22:34:18 +00:00
Weves
8515f4b57a Highspot cleanup 2025-04-30 14:57:36 -07:00
joachim-danswer
f68b74ff4a disable Agent Search refinement by default (#4638)
- created env variable  AGENT_ALLOW_REFINEMENT  with default "". Must be set to true to enable Refinement.
 - added an environment variable for the upper limit of docs that can be sent to verification
2025-04-30 19:51:08 +00:00
rkuo-danswer
e254fdc066 add sendgrid as option (#4639)
* add sendgrid as option

* code review

* mypy

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-30 07:33:15 +00:00
Raunak Bhagat
f26de37878 Remove info hoverable (#4637) 2025-04-30 03:16:14 +00:00
rkuo-danswer
94de23fe87 Bugfix/chat images 2 (#4630)
* don't hardcode -1

* extra spaces

* fix binary data in blurb

* add note to binary handling

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-30 01:29:10 +00:00
Chris Weaver
dd242c9926 Fix race condition with archived channels (#4635) 2025-04-29 23:35:40 +00:00
Chris Weaver
47767c1666 Small improvements to checkpoint pickup logic (#4634) 2025-04-29 21:23:54 +00:00
Chris Weaver
9be3da2357 Fix gitlab (#4629)
* Fix gitlab

* Add back assert
2025-04-28 17:42:49 -07:00
Evan Lohn
8961a3cc72 page token for drive group sync (#4627) 2025-04-28 19:06:06 +00:00
Chris Weaver
47b9e7aa62 Fix teams (#4628)
* Fix teams

* Use get_all

* Add comment
2025-04-28 11:53:22 -07:00
Evan Lohn
eebfa5be18 Confluence server api time fix (#4589)
* tolerance of confluence api weirdness

* remove checkpointing

* remove skipping logic from checkpointing

* add back checkpointing

* switch confluence checkpointing to be based on page starts

* address CW comments and fix unit tests

* some mitigations of bad confluence api

* new checkpointing approach and testing fixes

* fix test

* CW comments
2025-04-28 06:06:29 +00:00
Chris Weaver
5047d256b4 Add support for restrictions w/o any access (#4624)
* Add support for restrictions w/o any access

* Fix
2025-04-28 03:09:36 +00:00
Evan Lohn
5db676967f no more duplicate files during folder indexing (#4579)
* no more duplicate files during folder indexing

* cleanup checkpoint after a shared folder has been finished

* cleanup

* lint
2025-04-28 01:01:20 +00:00
Chris Weaver
ea0664e203 Fix LLM API key (#4623)
* Fix LLM API key

* Remove unused import

* Update web/src/app/admin/configuration/llm/LLMProviderUpdateForm.tsx

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-04-27 23:10:36 +00:00
Weves
bbd0874200 fix 2025-04-27 14:37:53 -07:00
rkuo-danswer
c6d100b415 Bugfix/chat images (#4618)
* keep chatfiletype as image instead of user_knowledge

* improve continue message

* fix to image handling

* greptile code review

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-27 20:34:30 +00:00
Evan Lohn
5ca7a7def9 fix migration and add test (#4615) 2025-04-25 21:27:59 +00:00
Chris Weaver
92b5e1adf4 Add support for overriding user list (#4616)
* Add support for overriding user list

* Fix

* Add typing

* pythonify
2025-04-25 15:15:23 -07:00
Chris Weaver
23c6e0f3bf Single source of truth for image capability (#4612)
* Single source of truth for image capability

* Update web/src/app/admin/assistants/AssistantEditor.tsx

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Fix tests

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-04-25 20:37:16 +00:00
Chris Weaver
ad76e6ac9e Adjust confluence perm sync frequency (#4613)
* Adjust confluence perm sync frequency

* Fiux comment
2025-04-25 19:36:10 +00:00
Evan Lohn
151aabea73 specific user emails for drive connector (#4608)
* specific user emails for drive connector

* fix drive connector tests

* fix connector tests
2025-04-25 18:49:20 +00:00
Chris Weaver
d711680069 Add e2e test for assistant creation/edit (#4597)
* Add e2e test for assistant creation/edit

* Skip initial full reset to have seeded connector
2025-04-25 13:21:34 -07:00
Evan Lohn
9835d55ecb transfer old fileds to new config 2025-04-25 12:25:20 -07:00
Raunak Bhagat
69c539df6e fix: Create migration to re-introduce display_model_names (#4600)
* Fix migration

* Fix migration to take care of various nullability cases

* Address comments on PR

* Rename variables to be more descriptive

* Make helpers private

* Fix select statement

* Add comments to explain the involved logic

* Saving changes

* Finish script to revalidate `display_model_names`

* Address comments on PR by greptile

* Add missing columns

* Pull difference operator out into binding

* Add deletion prior to re-insertion

* Use map from shared llm-provider file instead

* Use helper function instead of copying code

* Remove delete and convert into an update statement

* Use pydantic for ModelConfigurations

* Update to do nothing on-conflict rather than update

* Address nits on PR

* Add default visible model(s) for bedrock

* Perform an update on conflict instead of doing nothing
2025-04-25 10:44:13 -07:00
pablonyx
df67ca18d8 My docs cleanup (#4519)
* update

* improved my docs

* nit

* nit

* k

* push changes

* update

* looking good

* k

* fix preprocessing

* try a fix

* k

* update

* nit

* k

* quick nits

* Cleanup / fixes

* Fixes

* Fix build

* fix

* fix quality checks

---------

Co-authored-by: Weves <chrisweaver101@gmail.com>
2025-04-25 05:20:33 +00:00
Chris Weaver
115cfb6ae9 Fix tool choice (#4596)
* Fix tool choice

* fix
2025-04-24 21:51:14 -07:00
rkuo-danswer
672f3a1c34 fix provisioning and don't spawn tasks which could result in a race condition (#4604)
Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-25 02:41:05 +00:00
Raunak Bhagat
13b71f559f fix: Fix migration issue in which display-model-names were not being appropriately set (#4594)
* Fix migration

* Fix migration to take care of various nullability cases

* Address comments on PR

* Rename variables to be more descriptive

* Make helpers private

* Fix select statement

* Add comments to explain the involved logic

* Add helpers for viewing visible model names

* Fix logic for missing model + display-model names in migration
2025-04-24 21:26:33 +00:00
Evan Lohn
2981b7a425 linear dupe docs fix (#4607) 2025-04-24 21:00:21 +00:00
rkuo-danswer
37adf31a3b fix priority on vespa metadata sync (#4603)
Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-24 19:50:49 +00:00
Raunak Bhagat
5d59850a17 Fix slack formatting bug (#4587) 2025-04-24 17:18:54 +00:00
Evan Lohn
91d6b739a4 ensure drive id set in checkpoint (#4595)
* ensure drive id set in checkpoint

* asserts gone

* address CW
2025-04-24 01:20:13 +00:00
rkuo-danswer
c83ee06062 Feature/salesforce correctness 2 (#4506)
* refactor salesforce sqlite db access

* more refactoring

* refactor again

* refactor again

* rename object

* add finalizer to ensure db connection is always closed

* avoid unnecessarily nesting connections and commit regularly when possible

* remove db usage from csv download

* dead code

* hide deprecation warning in ddtrace

* remove unused param

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-24 01:05:52 +00:00
Raunak Bhagat
c93cebe1ab fix: Add minor fixes to how model configurations are displayed (#4593)
* Add minor fixes to how model configurations are interacted with

* Remove azure entry
2025-04-23 21:42:02 +00:00
rkuo-danswer
ea1d3c1eda Feature/db script (#4574)
* debug script + slight refactor of db class

* better comments

* move setup logger

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
Co-authored-by: Richard Kuo <rkuo@rkuo.com>
2025-04-23 20:00:35 +00:00
rkuo-danswer
c9a609b7d8 Bugfix/slack bot channel config (#4585)
* friendlier handling of slack channel retrieval

* retry on downgrade_postgres deadlock

* fix comment

* text

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-23 20:00:03 +00:00
rkuo-danswer
07f04e35ec Bugfix/alembic sqlengine (#4592)
* need sqlengine to work

* add comments

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-23 19:21:34 +00:00
joachim-danswer
d8b050026d removal of keyword 1st phase 2025-04-22 20:29:57 -07:00
Raunak Bhagat
c76dc2ea2c fix: Fix the add_model_configuration migration by removing duplicate model-names during insertion (#4588)
* Convert the model_names and display_model_names into a set instead

* Update backend/alembic/versions/7a70b7664e37_add_model_configuration_table.py

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-04-22 18:59:31 -07:00
rkuo-danswer
5e11c635d9 wrong logger imported in a lot of wrong places (#4582)
Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-22 23:34:02 +00:00
joachim-danswer
669b668463 updated logging and basic search expansion procedure 2025-04-22 11:58:02 -07:00
Raunak Bhagat
85fa083717 fix: Return default value instead of throwing error (#4575)
* Return default value instead of throwing error

* Add default parameter

* Move logic around

* Use dummy value for max_input_tokens in testing flow

* Remove unnecessary assignment
2025-04-22 17:33:36 +00:00
Chris Weaver
420d2614d4 Fix assistants forms (#4578)
* Fix assistant num chunk setting

* test

* Fix test

* Update web/src/app/assistants/mine/AssistantModal.tsx

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update web/src/app/assistants/mine/AssistantModal.tsx

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-04-22 16:09:03 +00:00
Raunak Bhagat
e3218d358d feat: Add assistant name to UI (#4569)
* Add assistant name to UI

* Fix tailwind styling class
2025-04-22 09:35:35 -07:00
Weves
ae632b5fab Fix missing Connector Configuration 2025-04-21 18:50:25 -07:00
rkuo-danswer
0d4c600852 out of process retry for multitenant test reset (#4566)
* tool to generate vespa schema variations for our cloud

* extraneous assign

* use a real templating system instead of search/replace

* fix float

* maybe this should be double

* remove redundant var

* template the other files

* try a spawned process

* move the wrapper

* fix args

* increase timeout

* run multitenant reset operations out of process as well

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
Co-authored-by: Richard Kuo <rkuo@rkuo.com>
2025-04-21 23:30:18 +00:00
Evan Lohn
eb569bf79d add emails to retry with on 403 (#4565)
* add emails to retry with on 403

* attempted fix for connector test

* CW comments

* connector test fix

* test fixes and continue on 403

* fix tests

* fix tests

* fix concurrency tests

* fix integration tests with llmprovider eager loading
2025-04-21 23:27:31 +00:00
Chris Weaver
f3d5303d93 Fix slack bot feedback (#4573)
* Fix slack bot feedback

* Fix

* Make safe
2025-04-21 15:54:48 -07:00
Raunak Bhagat
b97628070e feat: Add ability to specify max input token limit for custom LLM providers (#4510)
* Add multi text array field

* Add multiple values to model configuration for a custom LLM provider

* Fix reference to old field name

* Add migration

* Update all instances of model_names / display_model_names to use new schema migration

* Update background task

* Update endpoints to not throw errors

* Add test

* Update backend/alembic/versions/7a70b7664e37_add_models_configuration_table.py

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update backend/onyx/background/celery/tasks/llm_model_update/tasks.py

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Fix list comprehension nits

* Update web/src/components/admin/connectors/Field.tsx

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update web/src/app/admin/configuration/llm/interfaces.ts

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Implement greptile recommendations

* Update backend/onyx/db/llm.py

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update backend/onyx/server/manage/llm/api.py

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update backend/onyx/background/celery/tasks/llm_model_update/tasks.py

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update backend/onyx/db/llm.py

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Fix more greptile suggestions

* Run formatter again

* Update backend/onyx/db/models.py

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Add relationship to `LLMProvider` and `ModelConfigurations` classes

* Use sqlalchemy ORM relationships instead of manually populating fields

* Upgrade migration

* Update interface

* Remove all instances of model_names and display_model_names from backend

* Add more tests and fix bugs

* Run prettier

* Add types

* Update migration to perform data transformation

* Ensure native llm providers don't have custom max input tokens

* Start updating frontend logic to support custom max input tokens

* Pass max input tokens to LLM class (to be passed into `litellm.completion` call later)

* Add ModelConfigurationField component for custom llm providers

* Edit spacing and styling of model configuration matrix

* Fix error message displaying bug

* Edit opacity of `FiX` field for first index

* Change opacity back

* Change roundness

* Address comments on PR

* Perform fetching of `max_input_tokens` at the beginning of the callgraph and rope it throughout the entire callstack

* Change `add` to `execute`

* Move `max_input_tokens` into `LLMConfig`

* Fix bug with error messages not being cleared

* Change field used to fetch LLMProvider

* Fix model-configuration UI

* Address comments

* Remove circular import

* Fix failing tests in GH

* Fix failing tests

* Use `isSubset` instead of equality to determine native vs custom LLM Provider

* Remove unused import

* Make responses always display max_input_tokens

* Fix api endpoint to hit

* Update types in web application

* Update object field

* Fix more type errors

* Fix failing llm provider tests

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-04-21 04:30:21 -07:00
pablonyx
72d3a7ff21 Frontend testing (#4500)
* add o3 + o4 mini

* k

* see which ones fail

* attempt

* k

* k

* llm ordering passing

* all tests passing

* quick bump

* Revert "add o3 + o4 mini"

This reverts commit 4cfa1984ec.

* k

* k
2025-04-20 23:29:47 +00:00
rkuo-danswer
2111eccf07 Feature/vespa jinja (#4558)
* tool to generate vespa schema variations for our cloud

* extraneous assign

* use a real templating system instead of search/replace

* fix float

* maybe this should be double

* remove redundant var

* template the other files

* try a spawned process

* move the wrapper

* fix args

* increase timeout

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
Co-authored-by: Richard Kuo <rkuo@rkuo.com>
2025-04-20 22:28:55 +00:00
Chris Weaver
87478c5ca6 Parallelize connector tests (#4563)
* Parallelize connector tests

* Use --dist loadfile

* Add slow test logging
2025-04-19 18:10:50 -07:00
evan-danswer
dc62d83a06 File connector tests (#4561)
* danswer to onyx plus tests for file connector

* actually add test
2025-04-19 15:54:30 -07:00
evan-danswer
5681df9095 address getting attachments forever (#4562)
* address getting attachments forever

* fix unit tests
2025-04-19 15:53:27 -07:00
Chris Weaver
6666300f37 Fix flakey web test (#4551)
* Fix flakey web test

* Increase wait time

* Another attempt to fix

* Simplify + add new test

* Fix web tests
2025-04-19 15:12:11 -07:00
Chris Weaver
7f99c54527 Small improvements to connector UI (#4559)
* Small improvements to connector UI

* Update web/src/app/admin/connector/[ccPairId]/IndexingAttemptsTable.tsx

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Fix last_permission_sync

* Handle cases where a source doesn't need group sync

* fix

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-04-19 19:14:05 +00:00
Chris Weaver
4b8ef4b151 Update README.md 2025-04-18 18:29:56 -07:00
rkuo-danswer
e5e0944049 tool to generate vespa schema variations for our cloud (#4556)
* tool to generate vespa schema variations for our cloud

* extraneous assign

* float, not double

* back to double

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-18 20:47:17 +00:00
pablonyx
356336a842 add o3 + o4 mini (#4555) 2025-04-18 20:42:35 +00:00
rkuo-danswer
5bc059881e ping with keep alive (#4550)
Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-18 18:44:07 +00:00
rkuo-danswer
fa80842afe Bugfix/harden activity timeout (#4545)
* add some hardening

* add info memory logging

* fix last_observed

* remove log spam

* properly cache last activity details

* default values

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-18 02:28:22 +00:00
rkuo-danswer
a8a5a82251 slightly better slack logging (#4554)
Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-17 18:45:48 -07:00
evan-danswer
953a4e3793 v1 file connector with metadata (#4552) 2025-04-17 23:02:34 +00:00
rkuo-danswer
04ebde7838 refactor a mega function for readability and make sure to increment r… (#4542)
* refactor a mega function for readability and make sure to increment retry_count on exception so that we don't infinitely loop

* improve session and page level context handling

* don't use pydantic for the session context

* we don't need retry success

* move playwright handling into the session context

* need to break on ok

* return doc from scrape

* fix comment

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-17 06:43:30 +00:00
Chris Weaver
6df1c6c72f Pull in more fields for Jira (#4547)
* Pull in more fields for Jira

* Fix tests

* Fix

* more fix

* Fix

* Fix S3 test

* fix
2025-04-17 01:52:50 +00:00
Raunak Bhagat
fe94bdf936 fix: Fix duplicate kwarg issue when calling litellm.main.completion (#4533)
* Fix duplicate kwarg issue

* Change how vertex_credentials are passed

* Modify temporary dict instead

* Change string to a global constant

* Add extra condition to if-check during population of map
2025-04-16 19:29:53 -07:00
rkuo-danswer
2a9fd9342e small improvement to checking for image attachments (#4543)
* small improvement to checking for image attachments

* better comments

* check centralized list of types instead of hardcoding them in the connector

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-17 00:34:22 +00:00
pablonyx
597ad806e3 Skip image files for S3 (#4535)
* skip image files

* process images s3

* tests

* k

* update

* nit

* update
2025-04-16 23:41:00 +00:00
evan-danswer
5acae2dc80 fix re-processing of previously seen docs Confluence (#4544)
* fix re-processing of previously seen docs

* performance
2025-04-16 23:16:21 +00:00
pablonyx
99455db26c add 4.1 (#4540) 2025-04-16 15:34:01 -07:00
pablonyx
0d12e96362 Fix bug with saml validation (#4522)
* fix bug with saml validation

* k
2025-04-16 19:35:58 +00:00
Chris Weaver
7e7b6e08ff Fix confluence perm sync ancestry (#4536)
* Fix confluence perm sync ancestry

* Address EL comments

* add test for special case

* remove print

* Fix test
2025-04-16 03:02:54 +00:00
Raunak Bhagat
1dd32ebfce Remove alert upon submission (#4537) 2025-04-15 19:12:12 -07:00
Weves
c3ffaa19a4 Small no-letsencrypt improvement 2025-04-15 18:29:07 -07:00
pablonyx
f4ea7e62a7 Miscellaneous cleanup (#4516)
* stricter typing

* k
2025-04-15 23:35:13 +00:00
rkuo-danswer
2ac41c3719 Feature/celery beat watchdog (#4534)
* upgrade celery to release version

* make the watchdog script more reusable

* use constant

* code review

* catch interrupt

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-15 22:05:37 +00:00
evan-danswer
a8cba7abae extra logging for uncommon permissions cases (#4532)
* extra logging for uncommon permissions cases

* address CW comments
2025-04-15 18:56:17 +00:00
evan-danswer
ae9f8c3071 checkpointed confluence (#4473)
* checkpointed confluence

* confluence checkpointing tested

* fixed integration tests

* attempt to fix connector test flakiness

* fix rebase
2025-04-14 23:59:53 +00:00
evan-danswer
742041d97a fix font for dark mode (#4527) 2025-04-14 22:43:03 +00:00
pablonyx
187b93275d k (#4525) 2025-04-14 22:29:47 +00:00
Weves
ca2aeac2cc Fix black 2025-04-14 15:53:09 -07:00
ThomaciousD
f7543c6285 Fix #3764: Dynamically handle default branch in GitLab connector 2025-04-14 15:52:10 -07:00
pablonyx
1430a18d44 cohere validation logic update (#4523) 2025-04-14 21:49:22 +00:00
rkuo-danswer
7c4487585d rollback properly on exception (#4073)
* rollback properly on exception

* rollback on exception

* don't continue if we can't set the search path

* cleaner handling via context manager

---------

Co-authored-by: Richard Kuo (Danswer) <rkuo@onyx.app>
2025-04-14 21:48:35 +00:00
pablonyx
e572ce95e7 Shore up multi tenant tests (#4484)
* update

* fix

* finalize`

* remove unnecessary prints

* fix

* k
2025-04-14 18:34:57 +00:00
evan-danswer
68c6c1f4f8 refactor to use stricter typing (#4513)
* refactor to use stricter typing

* older version of ruff
2025-04-14 17:23:07 +00:00
Chris Weaver
a5edc8aa0f Fix default log level (#4501)
* Fix default log level

* fix
2025-04-14 16:40:11 +00:00
evan-danswer
a377f6ffb6 Unify document deduping (#4520)
* minor cleanup

* cleanup doc deduping and add unit tests
2025-04-14 16:33:00 +00:00
Weves
72ce2f75cc Add env var to docker compose file 2025-04-13 23:14:06 -07:00
joachim-danswer
2683207a24 Expanded basic search (#4517)
* initial working version

* ranking profile

* modification for keyword/instruction retrieval

* mypy fixes

* EL comments

* added env var (True for now)

* flipped default to False

* mypy & final EL/CW comments + import issue
2025-04-13 23:13:01 -07:00
Chris Weaver
e3aab8e85e Improve index attempt display (#4511) 2025-04-13 15:57:47 -07:00
pablonyx
65fd8b90a8 add image indexing tests (#4477)
* address file path

* k

* update

* update

* nit- fix typing

* k

* should path

* in a good state

* k

* k

* clean up file

* update

* update

* k

* k

* k
2025-04-11 22:16:37 +00:00
Chris Weaver
6eaa774051 Confluence timeout fix? (#4509) 2025-04-11 20:06:27 +00:00
evan-danswer
60da282dd1 ensure individual search tool runs do not affect each other (#4503)
* ensure individual search tool runs do not affect each other

* small bug fixes

* nit
2025-04-11 17:24:57 +00:00
rkuo-danswer
493e5386ec Bugfix/salesforce correctness (#4497)
* refactor salesforce sqlite db access

* more refactoring

* refactor again

* refactor again

* rename object

* add finalizer to ensure db connection is always closed

* avoid unnecessarily nesting connections and commit regularly when possible

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-11 08:41:22 +00:00
rkuo-danswer
bc74bcae3a updating more packages (#4502)
* updating more packages

* mypy fixes

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-10 20:53:36 -07:00
evan-danswer
e51e4b33b6 fix max 10 drives issue (#4505) 2025-04-11 02:22:38 +00:00
rkuo-danswer
1d7d5e1809 fix scheduler init (#4504) 2025-04-10 18:21:47 -07:00
Patrick Weston
4a6998b7e3 If an assistant limits knowledge, don't let a user override it in the Sets filter 2025-04-10 11:56:00 -07:00
Weves
6d48b9b4fd fix drive permission sync 2025-04-10 10:41:40 -07:00
Weves
86680cd45b Fix google drive group sync 2025-04-10 10:41:40 -07:00
rkuo-danswer
77e60b9812 remove try update in init ... we really don't need the init to access the db or do any work. (#4498)
Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-10 10:15:28 -07:00
rkuo-danswer
24184024bb Bugfix/dependency updates (#4482)
* bump fastapi and starlette

* bumping llama index and nltk and associated deps

* bump to fix python-multipart

* bump aiohttp

* update package lock for examples/widget

* bump black

* sentencesplitter has changed namespaces

* fix reorder import check, fix missing passlib

* update package-lock.json

* black formatter updated

* reformatted again

* change to black compatible reorder

* change to black compatible reorder-python-imports fork

* fix pytest dependency

* black format again

* we don't need cdk.txt. update packages to be consistent across all packages

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
Co-authored-by: Richard Kuo <rkuo@rkuo.com>
2025-04-10 08:23:02 +00:00
evan-danswer
e79134eaa0 don't yield expected auth errors (#4494)
* don't yield expected auth errors

* only catch 403s
2025-04-10 01:53:02 +00:00
evan-danswer
b5be1fb948 important clarity comment (#4492) 2025-04-10 01:28:34 +00:00
evan-danswer
1718b8f677 fix claude bug (#4493)
* fix claude bug

* fixed tests
2025-04-10 00:59:18 +00:00
rkuo-danswer
3fc8027e73 pass through various id's and log them in the model server for better… (#4485)
* pass through various id's and log them in the model server for better tracking

* fix test

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-10 00:40:57 +00:00
pablonyx
caa9b106e4 k (#4487) 2025-04-10 00:19:47 +00:00
Chris Weaver
89688f0cef Fix naming of volume (#4491) 2025-04-09 23:46:10 +00:00
Raunak Bhagat
eeab3f06ec fix: Remove advanced options toggle if enterprise features are not enabled (#4489)
* Only show advanced options for custom llm providers *if* the paid features are enabled

* Change variable name
2025-04-09 20:42:20 +00:00
rkuo-danswer
15c74224ad xfail bedrock test (#4490)
Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-09 14:44:02 -07:00
Raunak Bhagat
2da26c16a9 Edit .gitignore file to add zed editor configurations (#4483) 2025-04-08 23:10:42 +00:00
pablonyx
8db80a6bb1 Add latency metrics (#4472)
* k

* update

* Update chat_backend.py

nit

---------

Co-authored-by: evan-danswer <evan@danswer.ai>
2025-04-08 21:23:26 +00:00
rkuo-danswer
9b6c7625fd Bugfix/cloud checkpoint cleanup (#4478)
* use send_task to be consistent

* add pidbox monitoring task

* add logging so we can track the task execution

* log the idletime of the pidbox

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-08 19:47:07 +00:00
Chris Weaver
634d990cb8 Fix startup w/ seed_db (#4481) 2025-04-08 19:46:41 +00:00
pablonyx
5792261a4f Minor doc set fix (#4480)
* update

* update

* update

* k
2025-04-08 19:14:56 +00:00
Chris Weaver
71839e723f Add stuff to better avoid bot-detection in web connector (#4479)
* Add stuff to better avoid bot-detection in web connector

* Switch to exception log
2025-04-08 12:31:30 -07:00
evan-danswer
10f1ac5da1 use persona info when creating tool args (#4397)
* use persona info when creating tool args

* fixed unit test

* include system message

* fix unit test

* nit
2025-04-08 02:55:36 +00:00
Weves
1f80ed11d9 Fix black 2025-04-07 20:33:15 -07:00
Emerson Gomes
ba80191f5b Handle exception for token cost calculation (#4474)
The code for token cost calculation fails when using a LiteLLM proxy due to mismatch with the provider naming. For now, just handle this exception and assume cost 0 when that happens instead of breaking the flow - A more precise, LiteLLM proxy based cost calculation (relying in the `/model/info`) LiteLLM Proxy method will be needed
2025-04-07 20:30:50 -07:00
Raunak Bhagat
206daa6903 feat: Vertex AI support (#4458)
* Add gemini well-known-llm-provider

* Edit styling of anonymous function

* Remove space

* Edit how advanced options are displayed

* Add VertexAI to acceptable llm providers

* Add new `FileUploadFormField` component

* Edit FileUpload component

* Clean up logic for displaying native llm providers; add support for more complex `CustomConfigKey` types

* Fix minor nits in web app

* Add ability to pass vertex credentials to `litellm`

* Remove unused prop

* Change name of enum value

* Add back ability to change form based on first time configurations

* Create new Error with string instead of throwing raw string

* Add more Gemini models

* Edit mappings for Gemini models

* Edit comment

* Rearrange llm models

* Run black formatter

* Remove complex configurations during first time registration

* Fix nit

* Update llm provider name

* Edit temporary formik field to also have the filename

* Run reformatter

* Reorder commits

* Add advanced configurations for enabled LLM Providers
2025-04-08 00:56:47 +00:00
evan-danswer
17562f9b8f Id not set in checkpoint2 (#4468)
* unconditionally set completion

* drive connector improvements

* fixing broader typing issue

* fix tests, CW comments

* actual test fix
2025-04-07 17:00:42 -07:00
evan-danswer
9c73099241 Drive smart chip indexing (#4459)
* WIP

* WIP almost done, but realized we can just do basic retrieval

* rebased and added scripts

* improved approach to extracting smart chips

* remove files from previous branch

* fix connector tests

* fix test
2025-04-07 21:52:45 +00:00
Emerson Gomes
88d4a65e7b Fix hardcoded temperature 2025-04-07 13:56:11 -07:00
Weves
614d0f8d72 Add more options to dev compose file 2025-04-07 10:03:34 -07:00
SubashMohan
157da24504 update test expectations for Highspot connector (#4464) 2025-04-07 05:12:22 +00:00
Evan Lohn
989dab51b9 unconditionally set completion 2025-04-06 22:39:42 -07:00
Weves
6a13401172 Small tweaks to thinking 2025-04-06 15:59:00 -07:00
rkuo-danswer
bb73bb224a slack permission tests are enterprise only (#4463)
* slack permission tests are enterprise only

* xfail highspot connector

* test is broken

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-06 15:23:17 -07:00
Richard Kuo (Onyx)
4dc382b571 Revert "slack permission tests are enterprise only"
This reverts commit 056a83493f.
2025-04-06 14:24:42 -07:00
Richard Kuo (Onyx)
056a83493f slack permission tests are enterprise only 2025-04-06 14:24:25 -07:00
Chris Weaver
aadd4f212a Adjust pg engine intialization (#4408)
* Adjust pg engine intialization

* Fix mypy

* Rename var

* fix typo

* Fix tests
2025-04-06 12:44:49 -07:00
Ferdinand Loesch
8b05f98d54 Thinking mode UI. (#4370)
* Update web connector implementation and fix line length issues

* Update configurations and fix connector issues

* Update Slack connector

* Update connectors and add jira_test_env to gitignore, removing sensitive information

* Restore checkpointing functionality and remove sensitive information

* Fix agent mode to properly handle thinking tokens

* up

* Enhance ThinkingBox component with improved content handling and animations. Added support for partial thinking tokens, refined scrolling behavior, and updated CSS for better visual feedback during thinking states.

* Create clean branch with frontend thinking mode changes only

* Update ThinkingBox component to include new props for completion and streaming states. Refactor smooth scrolling logic into a dedicated function for improved readability. Add new entry to .gitignore for jira_test_env.

* Remove autoCollapse prop from AIMessage component for improved flexibility in message display.

* Update thinking tokens handling in chat utils

* Remove unused cleanThinkingContent import from Messages component to streamline code.

---------

Co-authored-by: ferdinand loesch <f.loesch@sportradar.com>
Co-authored-by: EC2 Default User <ec2-user@ip-10-73-128-233.eu-central-1.compute.internal>
Co-authored-by: Your Name <you@example.com>
Co-authored-by: Chris Weaver <25087905+Weves@users.noreply.github.com>
2025-04-05 17:31:02 -07:00
Weves
1c16c4ea3d Adjusting default search assistant 2025-04-05 16:00:47 -07:00
Weves
cf6ff3ce4a Fix run-nginx 2025-04-05 16:00:10 -07:00
Weves
86d9f5d9dd Update resource limits 2025-04-05 16:00:10 -07:00
pablonyx
09450010cd refresh token limit (#4456) 2025-04-05 01:27:57 +00:00
pablonyx
0acd50b75d docx bugfix 2025-04-04 18:20:31 -07:00
pablonyx
c3c9a0e57c Docx parsing (#4455)
* looks okay

* k

* k

* k

* update values

* k

* quick fix
2025-04-04 23:36:43 +00:00
pablonyx
ef978aea97 Additional ACL Tests + Slackbot fix (#4430)
* try turning drive perm sync on

* try passing in env var

* add some logs

* Update pr-integration-tests.yml

* revert "Update pr-integration-tests.yml"

This reverts commit 76a44adbfe.

* Revert "add some logs"

This reverts commit ab9e6bcfb1.

* Revert "try passing in env var"

This reverts commit 9c0b6162ea.

* Revert "try turning drive perm sync on"

This reverts commit 2d35f61f42.

* try slack connector

* k

* update

* remove logs

* remove more logs

* nit

* k

* k

* address nits

* run test with additional logs

* Revert "run test with additional logs"

This reverts commit 1397a2c4a0.

* Revert "address nits"

This reverts commit d5e24b019d.
2025-04-04 22:00:17 +00:00
rkuo-danswer
15ab0586df handle gong api race condition (#4457)
* working around a gong race condition in their api

* add back gong basic test

* formatting

* add the call index

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-04 19:33:47 +00:00
rkuo-danswer
839c8611b7 Bugfix/salesforce (#4335)
* add some gc

* small refactoring for temp directories

* WIP

* add some gc collects and size calculations

* un-xfail

* fix salesforce test

* loose check for number of docs

* adjust test again

* cleanup

* nuke directory param, remove using sqlite db to cache email / id mappings

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-04 16:21:34 +00:00
joachim-danswer
68f9f157a6 Adding research topics for better search context (#4448)
* research topics addition

* allow for question to overwrite research area
2025-04-04 09:53:39 -07:00
SubashMohan
9dd56a5c80 Enhance Highspot connector with error handling and add unit tests (#4454)
* Enhance Highspot connector with error handling and add unit tests for poll_source functionality

* Fix file extension validation logic to allow either plain text or document format
2025-04-04 09:53:16 -07:00
pablonyx
842a73a242 Mock connector fix (#4446) 2025-04-04 09:26:10 -07:00
Weves
c04c1ea31b Fix onyx_config.jsonl 2025-04-03 22:44:56 -07:00
Chris Weaver
2380c2266c Infra and Deployment for ECS Fargate (#4449)
* Infra and Deployment for ECS Fargate
---------

Co-authored-by: jpb80 <jordan.buttkevitz@gmail.com>
2025-04-03 22:43:56 -07:00
pablonyx
b02af9b280 Div Con (#4442)
* base setup

* Improvements + time boxing

* time box fix

* mypy fix

* EL Comments

* CW comments

* date awareness

---------

Co-authored-by: joachim-danswer <joachim@danswer.ai>
2025-04-04 00:52:00 +00:00
rkuo-danswer
42938dcf62 Bugfix/gong tweaks (#4444)
* gong debugging

* add retries via class level session, add debugging

* add gong connector test

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-03 22:22:45 +00:00
pablonyx
93886f0e2c Assistant Prompt length + client side (#4433) 2025-04-03 11:26:53 -07:00
rkuo-danswer
8c3a953b7a add prometheus metrics endpoints via helper package (#4436)
* add prometheus metrics endpoints via helper package

* model server specific requirements

* mark as public endpoint

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-03 16:52:05 +00:00
evan-danswer
54b883d0ca fix large docs selected in chat pruning (#4412)
* fix large docs selected in chat pruning

* better approach to length restriction

* comments

* comments

* fix unit tests and minor pruning bug

* remove prints
2025-04-03 15:48:10 +00:00
pablonyx
91faac5447 minor fix (#4435) 2025-04-03 15:00:27 +00:00
Chris Weaver
1d8f9fc39d Fix weird re-index state (#4439)
* Fix weird re-index state

* Address rkuo's comments
2025-04-03 02:16:34 +00:00
Weves
9390de21e5 More logging on confluence space permissions 2025-04-02 20:01:38 -07:00
rkuo-danswer
3a33433fc9 unit tests for chunk censoring (#4434)
* unit tests for chunk censoring

* type hints for mypy

* pytestification

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-03 01:28:54 +00:00
Chris Weaver
c4865d57b1 Fix tons of users w/o drive access causing timeouts (#4437) 2025-04-03 00:01:05 +00:00
rkuo-danswer
81d04db08f Feature/request id middleware 2 (#4427)
* stubbing out request id

* passthru or create request id's in api and model server

* add onyx request id

* get request id logging into uvicorn

* no logs

* change prefixes

* fix comment

* docker image needs specific shared files

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-02 22:30:03 +00:00
rkuo-danswer
d50a17db21 add filter unit tests (#4421)
* add filter unit tests

* fix tests

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-02 20:26:25 +00:00
pablonyx
dc5a1e8fd0 add more flexible vision support check (#4429) 2025-04-02 18:11:33 +00:00
pablonyx
c0b3681650 update (#4428) 2025-04-02 18:09:44 +00:00
Chris Weaver
7ec04484d4 Another fix for Salesforce perm sync (#4432)
* Another fix for Salesforce perm sync

* typing
2025-04-02 11:08:40 -07:00
Weves
1cf966ecc1 Fix Salesforce perm sync 2025-04-02 10:47:26 -07:00
rkuo-danswer
8a8526dbbb harden join function (#4424)
* harden join function

* remove log spam

* use time.monotonic

* add pid logging

* client only celery app

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-02 01:04:00 -07:00
Weves
be20586ba1 Add retries for confluence calls 2025-04-01 23:00:37 -07:00
Weves
a314462d1e Fix migrations 2025-04-01 21:48:32 -07:00
rkuo-danswer
155f53c3d7 Revert "Add user invitation test (#4161)" (#4422)
This reverts commit 806de92feb.

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-01 19:55:04 -07:00
pablonyx
7c027df186 Fix cc pair doc deletion (#4420) 2025-04-01 18:44:15 -07:00
pablonyx
0a5db96026 update (#4415) 2025-04-02 00:42:42 +00:00
joachim-danswer
daef985b02 Simpler approach (#4414) 2025-04-01 16:52:59 -07:00
Weves
b7ece296e0 Additional logging to salesforce perm sync 2025-04-01 16:19:50 -07:00
Richard Kuo (Onyx)
d7063e0a1d expose acl link feature in onyx_vespa 2025-04-01 16:19:50 -07:00
pablonyx
ee073f6d30 Tracking things (#4352) 2025-04-01 16:19:50 -07:00
Raunak Bhagat
2e524816a0 Regen (#4409)
* Edit styling of regeneration dropdown

* Finish regeneration style changes

* Remove invalid props

* Update web/src/app/chat/input/ChatInputBar.tsx

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Remove unused variables

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-04-01 16:19:50 -07:00
pablonyx
47ef0c8658 Still delete cookies (#4404) 2025-04-01 16:19:50 -07:00
pablonyx
806de92feb Add user invitation test (#4161) 2025-04-01 16:19:50 -07:00
pablonyx
da39f32fea Validate advanced fields + proper yup assurances for lists (#4399) 2025-04-01 16:19:50 -07:00
pablonyx
2a87837ce1 Very minor auth standardization (#4400) 2025-04-01 16:19:50 -07:00
pablonyx
7491cdd0f0 Update migration (#4410) 2025-04-01 16:19:50 -07:00
SubashMohan
aabd698295 refactor tests for Highspot connector to use mocking for API key retrieval (#4346) 2025-04-01 16:19:50 -07:00
Weves
4b725e4d1a Init engine in slackbot 2025-04-01 16:19:50 -07:00
rkuo-danswer
34d2d92fa8 also set permission upsert to medium priority (#4405)
Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-04-01 16:19:50 -07:00
pablonyx
3a3b2a2f8d add user files (#4152) 2025-04-01 16:19:44 -07:00
rkuo-danswer
ccd372cc4a Bugfix/slack rate limiting (#4386)
* use slack's built in rate limit handler for the bot

* WIP

* fix the slack rate limit handler

* change default to 8

* cleanup

* try catch int conversion just in case

* linearize this logic better

* code review comments

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-03-31 21:00:26 +00:00
evan-danswer
ea30f1de1e minor improvement to fireflies connector (#4383)
* minor improvement to fireflies connector

* reduce time diff
2025-03-31 20:00:52 +00:00
evan-danswer
a7130681d9 ensure bedrock model contains API key (#4396)
* ensure bedrock model contains API key

* fix storing bug
2025-03-31 19:58:53 +00:00
pablonyx
04911db715 fix slashes (#4259) 2025-03-31 18:08:17 +00:00
rkuo-danswer
feae7d0cc4 disambiguate job name from ee version (#4403)
Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-03-31 11:48:28 -07:00
pablonyx
ac19c64b3c temporary fix for auth (#4402) 2025-03-31 11:10:41 -07:00
pablonyx
03d5c30fd2 fix (#4372) 2025-03-31 17:25:21 +00:00
joachim-danswer
e988c13e1d Additional logging for the path from Search Results to LLM Context (#4387)
* added logging

* nit

* nit
2025-03-31 00:38:43 +00:00
pablonyx
dc18d53133 Improve multi tenant anonymous user interaction (#3857)
* cleaner handling

* k

* k

* address nits

* fix typing
2025-03-31 00:33:32 +00:00
evan-danswer
a1cef389aa fallback to ignoring unicode chars when huggingface tokenizer fails (#4394) 2025-03-30 23:45:20 +00:00
pablonyx
db8d6ce538 formatting (#4316) 2025-03-30 23:43:17 +00:00
pablonyx
e8370dcb24 Update refresh conditional (#4375)
* update refresh conditional

* k
2025-03-30 17:28:35 -07:00
pablonyx
9951fe13ba Fix image input processing without LLMs (#4390)
* quick fix

* quick fix

* Revert "quick fix"

This reverts commit 906b29bd9b.

* nit
2025-03-30 19:28:49 +00:00
evan-danswer
56f8ab927b Contextual Retrieval (#4029)
* contextual rag implementation

* WIP

* indexing test fix

* workaround for chunking errors, WIP on fixing massive memory cost

* mypy and test fixes

* reformatting

* fixed rebase
2025-03-30 18:49:09 +00:00
rkuo-danswer
cb5bbd3812 Feature/mit integration tests (#4299)
* new mit integration test template

* edit

* fix problem with ACL type tags and MIT testing for test_connector_deletion

* fix test_connector_deletion_for_overlapping_connectors

* disable some enterprise only tests in MIT version

* disable a bunch of user group / curator tests in MIT version

* wire off more tests

* typo fix

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
Co-authored-by: Richard Kuo <rkuo@rkuo.com>
2025-03-30 02:41:08 +00:00
Yuhong Sun
742d29e504 Remove BETA 2025-03-29 15:38:46 -07:00
SubashMohan
ecc155d082 fix: ensure base_url ends with a trailing slash (#4388) 2025-03-29 14:34:30 -07:00
pablonyx
0857e4809d fix background color 2025-03-28 16:33:30 -07:00
Chris Weaver
22e00a1f5c Fix duplicate docs (#4378)
* Initial

* Fix duplicate docs

* Add tests

* Switch to list comprehension

* Fix test
2025-03-28 22:25:26 +00:00
Chris Weaver
0d0588a0c1 Remove OnyxContext (#4376)
* Remove OnyxContext

* Fix UT

* Fix tests v2
2025-03-28 12:39:51 -07:00
rkuo-danswer
aab777f844 Bugfix/acl prefix (#4377)
* fix acl prefixing

* increase timeout a tad

* block access to init'ing DocumentAccess directly, fix test to work with ee/MIT

* fix env var checks

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-03-28 05:52:35 +00:00
pablonyx
babbe7689a k (#4380) 2025-03-28 02:23:45 +00:00
evan-danswer
a123661c92 fixed shared folder issue (#4371)
* fixed shared folder issue

* fix existing tests

* default allow files shared with me for service account
2025-03-27 23:39:52 +00:00
pablonyx
c554889baf Fix actions link (#4374) 2025-03-27 16:39:35 -07:00
rkuo-danswer
f08fa878a6 refactor file extension checking and add test for blob s3 (#4369)
* refactor file extension checking and add test for blob s3

* code review

* fix checking ext

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-03-27 18:57:44 +00:00
pablonyx
d307534781 add some debug logging (#4328) 2025-03-27 11:49:32 -07:00
rkuo-danswer
6f54791910 adjust some vars in real time (#4365)
* adjust some vars in real time

* some sanity checking

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-03-27 17:30:08 +00:00
pablonyx
0d5497bb6b Add multi-tenant user invitation flow test (#4360) 2025-03-27 09:53:15 -07:00
Chris Weaver
7648627503 Save all logs + add log persistence to most Onyx-owned containers (#4368)
* Save all logs + add log persistence to most Onyx-owned containers

* Separate volumes for each container

* Small fixes
2025-03-26 22:25:39 -07:00
pablonyx
927554d5ca slight robustification (#4367) 2025-03-27 03:23:36 +00:00
pablonyx
7dcec6caf5 Fix session touching (#4363)
* fix session touching

* Revert "fix session touching"

This reverts commit c473d5c9a2.

* Revert "Revert "fix session touching""

This reverts commit 26a71d40b6.

* update

* quick nit
2025-03-27 01:18:46 +00:00
rkuo-danswer
036648146d possible fix for confluence query filter (#4280)
* possible fix for confluence query filter

* nuke the attachment filter query ... it doesn't work!

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-03-27 00:35:14 +00:00
rkuo-danswer
2aa4697ac8 permission sync runs so often that it starves out other tasks if run at high priority (#4364)
Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-03-27 00:22:53 +00:00
rkuo-danswer
bc9b4e4f45 use slack's built in rate limit handler for the bot (#4362)
Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-03-26 21:55:04 +00:00
evan-danswer
178a64f298 fix issue with drive connector service account indexing (#4356)
* fix issue with drive connector service account indexing

* correct checkpoint resumption

* final set of fixes

* nit

* fix typing

* logging and CW comments

* nit
2025-03-26 20:54:26 +00:00
pablonyx
c79f1edf1d add a flush (#4361) 2025-03-26 14:40:52 -07:00
pablonyx
7c8e23aa54 Fix saml conversion from ext_perm -> basic (#4343)
* fix saml conversion from ext_perm -> basic

* quick nit

* minor fix

* finalize

* update

* quick fix
2025-03-26 20:36:51 +00:00
pablonyx
d37b427d52 fix email flow (#4339) 2025-03-26 18:59:12 +00:00
pablonyx
a65fefd226 test fix 2025-03-26 12:43:38 -07:00
rkuo-danswer
bb09bde519 Bugfix/google drive size threshold 2 (#4355) 2025-03-26 12:06:36 -07:00
Tim Rosenblatt
0f6cf0fc58 Fixes docker logs helper text in run-nginx.sh (#3678)
The docker container name is slightly wrong, and this commit fixes it.
2025-03-26 09:03:35 -07:00
pablonyx
fed06b592d Auto refresh credentials (#4268)
* Auto refresh credentials

* remove dupes

* clean up + tests

* k

* quick nit

* add brief comment

* misc typing
2025-03-26 01:53:31 +00:00
pablonyx
8d92a1524e fix invitation on cloud (#4351)
* fix invitation on cloud

* k
2025-03-26 01:25:17 +00:00
pablonyx
ecfea9f5ed Email formatting devices (#4353)
* update email formatting

* k

* update

* k

* nit
2025-03-25 21:42:32 +00:00
rkuo-danswer
b269f1ba06 fix broken function call (#4354)
Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-03-25 21:07:31 +00:00
pablonyx
30c878efa5 Quick fix (#4341)
* quick fix

* Revert "quick fix"

This reverts commit f113616276.

* smaller chnage
2025-03-25 18:39:55 +00:00
pablonyx
2024776c19 Respect contextvars when parallelizing for Google Drive (#4291)
* k

* k

* fix typing
2025-03-25 17:40:12 +00:00
pablonyx
431316929c k (#4336) 2025-03-25 17:00:35 +00:00
pablonyx
c5b9c6e308 update (#4344) 2025-03-25 16:56:23 +00:00
pablonyx
73dd188b3f update (#4338) 2025-03-25 16:55:25 +00:00
evan-danswer
79b061abbc Daylight savings time handling (#4345)
* confluence timezone improvements

* confluence timezone improvements
2025-03-25 16:11:30 +00:00
rkuo-danswer
552f1ead4f use correct namespace in redis for certain keys (#4340)
Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-03-25 04:10:31 +00:00
evan-danswer
17925b49e8 typing fix (#4342)
* typing fix

* changed type hint to help future coders
2025-03-25 01:01:13 +00:00
rkuo-danswer
55fb5c3ca5 add size threshold for google drive (#4329)
* add size threshold for google drive

* greptile nits

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-03-24 04:09:28 +00:00
evan-danswer
99546e4a4d zendesk checkpointed connector (#4311)
* zendesk v1

* logic fix

* zendesk testing

* add unit tests

* zendesk caching

* CW comments

* fix unit tests
2025-03-23 20:43:13 +00:00
pablonyx
c25d56f4a5 Improved drive flow UX (#4331)
* wip

* k

* looking good

* clenaed up

* quick nit
2025-03-23 19:21:03 +00:00
Chris Weaver
35f3f4f120 Small slack bot fixes (#4333) 2025-03-22 23:22:17 +00:00
Weves
25b69a8aca Adjust spammy log 2025-03-22 14:52:09 -07:00
pablonyx
1b7d710b2a Fix links from file metadata (#4324)
* quick fix

* clarify comment

* fix file metadata

* k
2025-03-22 18:21:47 +00:00
pablonyx
ae3d3db3f4 Update slack bot listing endpoint (#4325)
* update slack bot listing endpoint

* nit
2025-03-22 18:21:31 +00:00
evan-danswer
fb79a9e700 Checkpointed GitHub connector (#4307)
* WIP github checkpointing

* first draft of github checkpointing

* nit

* CW comments

* github basic connector test

* connector test env var

* secrets cant start with GITHUB_

* unit tests and bug fix

* connector failures

* address CW comments

* validation fix

* validation fix

* remove prints

* fixed tests

* 100 items per page
2025-03-22 01:48:05 +00:00
rkuo-danswer
587ba11bbc alembic script logging fixes (#4322)
* log fixing

* fix typos

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-03-22 00:50:58 +00:00
pablonyx
fce81ebb60 Minor ux nits (#4327)
* k

* quick fix
2025-03-21 21:50:56 +00:00
Chris Weaver
61facfb0a8 Fix slack connector (#4326) 2025-03-21 21:30:03 +00:00
Chris Weaver
52b96854a2 Handle move errors (#4317)
* Handle move errors

* Make a warning
2025-03-21 11:11:12 -07:00
Chris Weaver
d123713c00 Fix GPU status request in sync flow (#4318)
* Fix GPU status request in sync flow

* tweak

* Fix test

* Fix more tests
2025-03-21 11:11:00 -07:00
Chris Weaver
775c847f82 Reduce drive retries (#4312)
* Reduce drive retries

* timestamp format fix

---------

Co-authored-by: Evan Lohn <evan@danswer.ai>
2025-03-21 00:23:55 +00:00
rkuo-danswer
6d330131fd wire off image downloading for confluence and gdrive if not enabled i… (#4305)
* wire off image downloading for confluence and gdrive if not enabled in settings

* fix partial func

* fix confluence basic test

* add test for skipping/allowing images

* review comments

* skip allow images test

* mock function using the db

* mock at the proper level

---------

Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-03-20 23:10:28 +00:00
Chris Weaver
0292ca2445 Add option to control # of slack threads (#4310) 2025-03-20 16:56:05 +00:00
Weves
15dd1e72ca Remove slack channel validation 2025-03-20 08:34:54 -07:00
Weves
91c9be37c0 Fix loader 2025-03-20 08:30:46 -07:00
Weves
2a01c854a0 Fix cases where the bot is disabled 2025-03-20 08:30:46 -07:00
rkuo-danswer
85ebadc8eb sanitize llm keys and handle updates properly (#4270)
* sanitize llm keys and handle updates properly

* fix llm provider testing

* fix test

* mypy

* fix default model editing

---------

Co-authored-by: Richard Kuo (Danswer) <rkuo@onyx.app>
Co-authored-by: Richard Kuo <rkuo@rkuo.com>
2025-03-20 01:13:02 +00:00
Chris Weaver
5dda53eec3 Notion improvement (#4306)
* Notion connector improvements

* Enable recursive index by default

* Small tweak
2025-03-19 23:16:05 +00:00
Chris Weaver
72bf427cc2 Address invalid connector state (#4304)
* Address invalid connector state

* Fixes

* Address mypy

* Address RK comment
2025-03-19 21:15:06 +00:00
Chris Weaver
f421c6010b Checkpointed Jira connector (#4286)
* Checkpointed Jira connector

* nit

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* typing improvements and test fixes

* cleaner typing

* remove default because it is from the future

* mypy

* Address EL comments

---------

Co-authored-by: evan-danswer <evan@danswer.ai>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-03-19 20:41:01 +00:00
rkuo-danswer
0b87549f35 Feature/email whitelabeling (#4260)
* work in progress

* work in progress

* WIP

* refactor, use inline attachment for image (base64 encoding doesn't work)

* pretty sure this belongs behind a multi_tenant check

* code review / refactor

---------

Co-authored-by: Richard Kuo (Danswer) <rkuo@onyx.app>
2025-03-19 13:08:44 -07:00
evan-danswer
06624a988d Gdrive checkpointed connector (#4262)
* WIP rebased

* style

* WIP, testing theory

* fix type issue

* fixed filtering bug

* fix silliness

* correct serialization and validation of threadsafedict

* concurrent drive access

* nits

* nit

* oauth bug fix

* testing fix

* fix slim retrieval

* fix integration tests

* fix testing change

* CW comments

* nit

* guarantee completion stage existence

* fix default values
2025-03-19 18:49:35 +00:00
Chris Weaver
ae774105e3 Fix slack connector creation (#4303)
* Make it fail fast + succeed validation if rate limiting is happening

* Add logging + reduce spam
2025-03-19 18:26:49 +00:00
evan-danswer
4dafc3aa6d Update README.md 2025-03-18 21:14:05 -07:00
evan-danswer
5d7d471823 Update README.md
fix bullet points
2025-03-18 19:34:08 -07:00
Weves
61366df34c Add execute permission 2025-03-18 12:03:32 -07:00
Chris Weaver
1a444245f6 Memory tracking script (#4297)
* Add simple container-level memory tracking script
2025-03-18 12:00:09 -07:00
rkuo-danswer
c32d234491 xfail highspot connector tests (#4296)
Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-03-18 11:47:17 -07:00
pablonyx
07b68436cf use ONYX_CLOUD_CELERY_TASK_PREFIX for pre provisioning (#4293) 2025-03-18 17:34:22 +00:00
Chris Weaver
293d1a4476 Add process-level memory monitoring (#4294)
* Add process-level memory monitoring

* Switch to every 5 minutes
2025-03-17 22:39:52 -07:00
SubashMohan
ba514aaaa2 Highspot connector (#4277) 2025-03-17 08:36:02 -07:00
Arun Philip
f45798b5dd add overflow-auto to show all content in Modal (#4140) 2025-03-15 11:56:19 -07:00
Weves
64ff5df083 Fix basic auth for non-ee 2025-03-14 11:40:17 -07:00
rkuo-danswer
cf1b7e7a93 add proper boolean validation to field (#4283)
Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-03-14 03:38:25 +00:00
Chris Weaver
63692a6bd3 Fix perm sync memory usage (#4282)
* Fix slack perm sync memory usage

* Make perm syncing run in batches rather than fetching everything

* Update backend/ee/onyx/external_permissions/slack/doc_sync.py

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update backend/ee/onyx/external_permissions/slack/doc_sync.py

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Loud error on slack doc sync missing permissions

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-03-14 02:26:22 +00:00
evan-danswer
934700b928 better drive url cleaning (#4247)
* better drive url cleaning

* nit

* address JR comments
2025-03-13 21:16:24 +00:00
Chris Weaver
b1a7cff9e0 Enable claude 3.7 (#4279) 2025-03-13 18:33:06 +00:00
joachim-danswer
463340b8a1 Reduce ranking scores for short chunks without actual information (#4098)
* remove title for slack

* initial working code

* simplification

* improvements

* name change to information_content_model

* avoid boost_score > 1.0

* nit

* EL comments and improvements

Improvements:
  - proper import of information content model from cache or HF
  - warm up for information content model

Other:
  - EL PR review comments

* nit

* requirements version update

* fixed docker file

* new home for model_server configs

* default off

* small updates

* YS comments - pt 1

* renaming to chunk_boost & chunk table def

* saving and deleting chunk stats in new table

* saving and updating chunk stats

* improved dict score update

* create columns for individual boost factors

* RK comments

* Update migration

* manual import reordering
2025-03-13 17:35:45 +00:00
rkuo-danswer
ba82888e1e change max workers to 2 for the moment (#4278)
Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
2025-03-13 09:58:24 -07:00
rkuo-danswer
39465d3104 change default build info in dockerfile's to something more obviously source only (#4275)
Co-authored-by: Richard Kuo <rkuo@rkuo.com>
2025-03-13 09:42:10 -07:00
rkuo-danswer
b4ecc870b9 safe handling for mediaType in confluence connector in all places (#4269)
Co-authored-by: Richard Kuo (Danswer) <rkuo@onyx.app>
2025-03-13 06:09:19 +00:00
rkuo-danswer
a2ac9f02fb unique constraint here doesn't work (#4271)
Co-authored-by: Richard Kuo (Danswer) <rkuo@onyx.app>
2025-03-12 16:25:27 -07:00
pablonyx
f87e559cc4 Separate out indexing-time image analysis into new phase (#4228)
* Separate out indexing-time image analysis into new phase

* looking good

* k

* k
2025-03-12 22:26:05 +00:00
pablonyx
5883336d5e Support image indexing customization (#4261)
* working well

* k

* ready to go

* k

* minor nits

* k

* quick fix

* k

* k
2025-03-12 20:03:45 +00:00
pablonyx
0153ff6b51 Improved logout flow (#4258)
* improved app provider modals

* improved logout flow

* k

* updates

* add docstring
2025-03-12 19:19:39 +00:00
pablonyx
2f8f0f01be Tenants on standby (#4218)
* add tenants on standby feature

* k

* fix alembic

* k

* k
2025-03-12 18:25:30 +00:00
pablonyx
a9e5ae2f11 Fix slash mystery (#4263) 2025-03-12 10:03:21 -07:00
Chris Weaver
997f40500d Add support for sandboxed salesforce (#4252) 2025-03-12 00:21:24 +00:00
rkuo-danswer
a918a84e7b fix oauth downloading and size limits in confluence (#4249)
* fix oauth downloading and size limits in confluence

* bump black to get past corrupt hash

* try working around another corrupt package

* fix raw_bytes

---------

Co-authored-by: Richard Kuo (Danswer) <rkuo@onyx.app>
Co-authored-by: Richard Kuo <rkuo@rkuo.com>
2025-03-11 23:57:47 +00:00
rkuo-danswer
090f3fe817 handle conflicts on lowercasing emails (#4255)
Co-authored-by: Richard Kuo (Danswer) <rkuo@onyx.app>
2025-03-11 21:25:50 +00:00
pablonyx
4e70f99214 Fix slack links (#4254)
* fix slack links

* updates

* k

* nit improvements
2025-03-11 19:58:15 +00:00
pablonyx
ecbd4eb1ad add basic user invite flow (#4253) 2025-03-11 19:02:51 +00:00
pablonyx
f94d335d12 Do not show modals to non-multitenant users (#4256) 2025-03-11 11:53:13 -07:00
pablonyx
59a388ce0a fix tests 2025-03-11 11:12:35 -07:00
rkuo-danswer
9cd3cbb978 fix versions (#4250)
Co-authored-by: Richard Kuo <rkuo@rkuo.com>
2025-03-10 23:50:07 -07:00
pablonyx
ab1b6b487e descrease model server logspam (#4166) 2025-03-10 18:29:27 +00:00
Chris Weaver
6ead9510a4 Small notion tweaks (#4244)
* Small notion tweaks

* Add comment
2025-03-10 15:51:12 +00:00
Chris Weaver
965f9e98bf Eliminate extremely long log line for large checkpointds (#4236)
* Eliminate extremely long log line for large checkpointds

* address greptile
2025-03-10 15:50:50 +00:00
rkuo-danswer
426883bbf5 Feature/agentic buffered (#4231)
* rename agent test script to prevent pytest autodiscovery

* first cut

* fix log message

* fix up typing

* add a sample test

---------

Co-authored-by: Richard Kuo (Danswer) <rkuo@onyx.app>
2025-03-10 15:48:42 +00:00
rkuo-danswer
6ca400ced9 Bugfix/delete document tags slow (#4232)
* Add Missing Date and Message-ID Headers to Ensure Email Delivery

* fix issue Performance issue during connector deletion #4191

* fix ruff

* bump to rebuild PR

---------

Co-authored-by: ThomaciousD <2194608+ThomaciousD@users.noreply.github.com>
Co-authored-by: Richard Kuo (Danswer) <rkuo@onyx.app>
2025-03-10 03:07:30 +00:00
Weves
104c4b9f4d small modal improvement 2025-03-09 20:54:53 -07:00
pablonyx
8b5e8bd5b9 k (#4240) 2025-03-10 03:06:13 +00:00
Weves
7f7621d7c0 SMall gitbook tweaks 2025-03-09 14:46:44 -07:00
pablonyx
06dcc28d05 Improved login experience (#4178)
* functional initial auth modal

* k

* k

* k

* looking good

* k

* k

* k

* k

* update

* k

* k

* misc bunch

* improvements

* k

* address comments

* k

* nit

* update

* k
2025-03-09 01:06:20 +00:00
pablonyx
18df63dfd9 Fix local background jobs (#4241) 2025-03-08 14:47:56 -08:00
Chris Weaver
0d3c72acbf Add basic memory logging (#4234)
* Add basic memory logging

* Small tweaks

* Switch to monotonic
2025-03-08 03:49:47 +00:00
rkuo-danswer
9217243e3e Bugfix/query history notes (#4204)
* early work in progress

* rename utility script

* move actual data seeding to a shareable function

* add test

* make the test pass with the fix

* fix comment

* slight improvements and notes to query history and seeding

* update test

---------

Co-authored-by: Richard Kuo (Danswer) <rkuo@onyx.app>
2025-03-07 19:52:30 +00:00
rkuo-danswer
61ccba82a9 light worker needs to discover some indexing tasks (#4209)
* light worker needs to discover some indexing tasks

* fix formatting

---------

Co-authored-by: Richard Kuo (Danswer) <rkuo@onyx.app>
2025-03-07 11:52:09 -08:00
Weves
9e8eba23c3 Fix frozen model issue 2025-03-07 09:05:43 -08:00
evan-danswer
0c29743538 use max_tokens to do better rate limit handling (#4224)
* use max_tokens to do better rate limit handling

* fix unti tests

* address greptile comment, thanks greptile
2025-03-06 18:12:05 -08:00
pablonyx
08b2421947 fix 2025-03-06 17:30:31 -08:00
pablonyx
ed518563db minor typing update 2025-03-06 17:02:39 -08:00
pablonyx
a32f7dc936 Fix Connector tests (confluence) (#4221) 2025-03-06 17:00:01 -08:00
rkuo-danswer
798e10c52f revert to always building model server (#4213)
* revert to always building model server

* fix just in case

---------

Co-authored-by: Richard Kuo (Danswer) <rkuo@onyx.app>
2025-03-06 23:49:45 +00:00
pablonyx
bf4983e35a Ensure consistent UX (#4222)
* ux consistent

* nit

* Update web/src/app/admin/configuration/llm/interfaces.ts

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-03-06 23:13:32 +00:00
evan-danswer
b7da91e3ae improved basic search latency (#4186)
* improved basic search latency

* address PR comments + minor cleanup
2025-03-06 22:22:59 +00:00
Weves
29382656fc Stop trying a million times for the user validity check 2025-03-06 15:35:49 -08:00
pablonyx
7d6db8d500 Comma separated list for Github repos (#4199) 2025-03-06 14:46:57 -08:00
Chris Weaver
a7a374dc81 Confluence fixes (#4220)
* Confluence fixes

* Small tweak

* Address greptile comments
2025-03-06 20:57:07 +00:00
rkuo-danswer
facc8cc2fa add scope needed for permission sync (#4198)
Co-authored-by: Richard Kuo (Danswer) <rkuo@onyx.app>
2025-03-06 20:03:38 +00:00
rkuo-danswer
2c0af0a0ca Feature/helm updates (#4201)
* add ingress for api and web

* helm setup docs

* add letsencrypt. close blocks

* use pathType ImplementationSpecific as Prefix is deprecated

* fix backend labels. configure nginx routes. update annotations

* fix linting

---------

Co-authored-by: Sajjad Anwar <sajjadkm@gmail.com>
Co-authored-by: Richard Kuo (Danswer) <rkuo@onyx.app>
2025-03-06 19:48:20 +00:00
pablonyx
bfbc1cd954 k (#4172) 2025-03-06 18:55:12 +00:00
pablonyx
626da583aa Fix gated tenants (#4177)
* fix

* mypy .
2025-03-06 18:07:15 +00:00
pablonyx
92faca139d Fix extra tenant mystery (#4197)
* fix extra tenant mystery

* nit
2025-03-06 18:06:49 +00:00
pablonyx
cec05c5ee9 Revert "k"
This reverts commit 687122911d.
2025-03-06 09:38:31 -08:00
Richard Kuo (Danswer)
eaf054ef06 oauth router went missing? 2025-03-05 15:50:23 -08:00
pablonyx
a7a1a24658 minor nit 2025-03-05 15:35:02 -08:00
1561 changed files with 115099 additions and 32359 deletions

View File

@@ -25,6 +25,10 @@ inputs:
tags:
description: 'Image tags'
required: true
no-cache:
description: 'Read from cache'
required: false
default: 'false'
cache-from:
description: 'Cache sources'
required: false
@@ -55,6 +59,7 @@ runs:
push: ${{ inputs.push }}
load: ${{ inputs.load }}
tags: ${{ inputs.tags }}
no-cache: ${{ inputs.no-cache }}
cache-from: ${{ inputs.cache-from }}
cache-to: ${{ inputs.cache-to }}
@@ -77,6 +82,7 @@ runs:
push: ${{ inputs.push }}
load: ${{ inputs.load }}
tags: ${{ inputs.tags }}
no-cache: ${{ inputs.no-cache }}
cache-from: ${{ inputs.cache-from }}
cache-to: ${{ inputs.cache-to }}
@@ -99,6 +105,7 @@ runs:
push: ${{ inputs.push }}
load: ${{ inputs.load }}
tags: ${{ inputs.tags }}
no-cache: ${{ inputs.no-cache }}
cache-from: ${{ inputs.cache-from }}
cache-to: ${{ inputs.cache-to }}

View File

@@ -7,18 +7,47 @@ on:
env:
REGISTRY_IMAGE: ${{ contains(github.ref_name, 'cloud') && 'onyxdotapp/onyx-backend-cloud' || 'onyxdotapp/onyx-backend' }}
LATEST_TAG: ${{ contains(github.ref_name, 'latest') }}
DEPLOYMENT: ${{ contains(github.ref_name, 'cloud') && 'cloud' || 'standalone' }}
# don't tag cloud images with "latest"
LATEST_TAG: ${{ contains(github.ref_name, 'latest') && !contains(github.ref_name, 'cloud') }}
jobs:
build-and-push:
# TODO: investigate a matrix build like the web container
# See https://runs-on.com/runners/linux/
runs-on: [runs-on, runner=8cpu-linux-x64, "run-id=${{ github.run_id }}"]
runs-on:
- runs-on
- runner=${{ matrix.platform == 'linux/amd64' && '8cpu-linux-x64' || '8cpu-linux-arm64' }}
- run-id=${{ github.run_id }}
- tag=platform-${{ matrix.platform }}
strategy:
fail-fast: false
matrix:
platform:
- linux/amd64
- linux/arm64
steps:
- name: Prepare
run: |
platform=${{ matrix.platform }}
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
- name: Checkout code
uses: actions/checkout@v4
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY_IMAGE }}
flavor: |
latest=false
tags: |
type=raw,value=${{ github.ref_name }}
type=raw,value=${{ env.LATEST_TAG == 'true' && 'latest' || '' }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
@@ -34,18 +63,80 @@ jobs:
sudo apt-get install -y build-essential
- name: Backend Image Docker Build and Push
uses: docker/build-push-action@v5
id: build
uses: docker/build-push-action@v6
with:
context: ./backend
file: ./backend/Dockerfile
platforms: linux/amd64,linux/arm64
platforms: ${{ matrix.platform }}
push: true
tags: |
${{ env.REGISTRY_IMAGE }}:${{ github.ref_name }}
${{ env.LATEST_TAG == 'true' && format('{0}:latest', env.REGISTRY_IMAGE) || '' }}
build-args: |
ONYX_VERSION=${{ github.ref_name }}
labels: ${{ steps.meta.outputs.labels }}
outputs: type=image,name=${{ env.REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=true
cache-from: type=s3,prefix=cache/${{ github.repository }}/${{ env.DEPLOYMENT }}/backend-${{ env.PLATFORM_PAIR }}/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }}
cache-to: type=s3,prefix=cache/${{ github.repository }}/${{ env.DEPLOYMENT }}/backend-${{ env.PLATFORM_PAIR }}/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }},mode=max
- name: Export digest
run: |
mkdir -p /tmp/digests
digest="${{ steps.build.outputs.digest }}"
touch "/tmp/digests/${digest#sha256:}"
- name: Upload digest
uses: actions/upload-artifact@v4
with:
name: backend-digests-${{ env.PLATFORM_PAIR }}-${{ github.run_id }}
path: /tmp/digests/*
if-no-files-found: error
retention-days: 1
merge:
runs-on: ubuntu-latest
needs:
- build-and-push
steps:
# Needed for trivyignore
- name: Checkout
uses: actions/checkout@v4
- name: Download digests
uses: actions/download-artifact@v4
with:
path: /tmp/digests
pattern: backend-digests-*-${{ github.run_id }}
merge-multiple: true
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY_IMAGE }}
flavor: |
latest=false
tags: |
type=raw,value=${{ github.ref_name }}
type=raw,value=${{ env.LATEST_TAG == 'true' && 'latest' || '' }}
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: Create manifest list and push
working-directory: /tmp/digests
run: |
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
$(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *)
- name: Inspect image
run: |
docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }}
# trivy has their own rate limiting issues causing this action to flake
# we worked around it by hardcoding to different db repos in env
# can re-enable when they figure it out
@@ -56,6 +147,8 @@ jobs:
env:
TRIVY_DB_REPOSITORY: "public.ecr.aws/aquasecurity/trivy-db:2"
TRIVY_JAVA_DB_REPOSITORY: "public.ecr.aws/aquasecurity/trivy-java-db:1"
TRIVY_USERNAME: ${{ secrets.DOCKER_USERNAME }}
TRIVY_PASSWORD: ${{ secrets.DOCKER_TOKEN }}
with:
# To run locally: trivy image --severity HIGH,CRITICAL onyxdotapp/onyx-backend
image-ref: docker.io/${{ env.REGISTRY_IMAGE }}:${{ github.ref_name }}

View File

@@ -4,12 +4,12 @@ name: Build and Push Cloud Web Image on Tag
on:
push:
tags:
- "*"
- "*cloud*"
env:
REGISTRY_IMAGE: onyxdotapp/onyx-web-server-cloud
LATEST_TAG: ${{ contains(github.ref_name, 'latest') }}
DEPLOYMENT: cloud
jobs:
build:
runs-on:
@@ -38,9 +38,10 @@ jobs:
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY_IMAGE }}
flavor: |
latest=false
tags: |
type=raw,value=${{ env.REGISTRY_IMAGE }}:${{ github.ref_name }}
type=raw,value=${{ env.LATEST_TAG == 'true' && format('{0}:latest', env.REGISTRY_IMAGE) || '' }}
type=raw,value=${{ github.ref_name }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
@@ -53,7 +54,7 @@ jobs:
- name: Build and push by digest
id: build
uses: docker/build-push-action@v5
uses: docker/build-push-action@v6
with:
context: ./web
file: ./web/Dockerfile
@@ -70,10 +71,12 @@ jobs:
NEXT_PUBLIC_FORGOT_PASSWORD_ENABLED=true
NEXT_PUBLIC_INCLUDE_ERROR_POPUP_SUPPORT_LINK=true
NODE_OPTIONS=--max-old-space-size=8192
# needed due to weird interactions with the builds for different platforms
no-cache: true
labels: ${{ steps.meta.outputs.labels }}
outputs: type=image,name=${{ env.REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=true
cache-from: type=s3,prefix=cache/${{ github.repository }}/${{ env.DEPLOYMENT }}/cloudweb-${{ env.PLATFORM_PAIR }}/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }}
cache-to: type=s3,prefix=cache/${{ github.repository }}/${{ env.DEPLOYMENT }}/cloudweb-${{ env.PLATFORM_PAIR }}/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }},mode=max
# no-cache needed due to weird interactions with the builds for different platforms
# NOTE(rkuo): this may not be true any more with the proper cache prefixing by architecture - currently testing with it off
- name: Export digest
run: |
@@ -84,7 +87,7 @@ jobs:
- name: Upload digest
uses: actions/upload-artifact@v4
with:
name: digests-${{ env.PLATFORM_PAIR }}
name: cloudweb-digests-${{ env.PLATFORM_PAIR }}-${{ github.run_id }}
path: /tmp/digests/*
if-no-files-found: error
retention-days: 1
@@ -98,7 +101,7 @@ jobs:
uses: actions/download-artifact@v4
with:
path: /tmp/digests
pattern: digests-*
pattern: cloudweb-digests-*-${{ github.run_id }}
merge-multiple: true
- name: Set up Docker Buildx
@@ -109,6 +112,10 @@ jobs:
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY_IMAGE }}
flavor: |
latest=false
tags: |
type=raw,value=${{ github.ref_name }}
- name: Login to Docker Hub
uses: docker/login-action@v3
@@ -136,6 +143,8 @@ jobs:
env:
TRIVY_DB_REPOSITORY: "public.ecr.aws/aquasecurity/trivy-db:2"
TRIVY_JAVA_DB_REPOSITORY: "public.ecr.aws/aquasecurity/trivy-java-db:1"
TRIVY_USERNAME: ${{ secrets.DOCKER_USERNAME }}
TRIVY_PASSWORD: ${{ secrets.DOCKER_TOKEN }}
with:
image-ref: docker.io/${{ env.REGISTRY_IMAGE }}:${{ github.ref_name }}
severity: "CRITICAL,HIGH"

View File

@@ -7,39 +7,55 @@ on:
env:
REGISTRY_IMAGE: ${{ contains(github.ref_name, 'cloud') && 'onyxdotapp/onyx-model-server-cloud' || 'onyxdotapp/onyx-model-server' }}
LATEST_TAG: ${{ contains(github.ref_name, 'latest') }}
DOCKER_BUILDKIT: 1
BUILDKIT_PROGRESS: plain
DEPLOYMENT: ${{ contains(github.ref_name, 'cloud') && 'cloud' || 'standalone' }}
# don't tag cloud images with "latest"
LATEST_TAG: ${{ contains(github.ref_name, 'latest') && !contains(github.ref_name, 'cloud') }}
jobs:
# 1) Preliminary job to check if the changed files are relevant
# Bypassing this for now as the idea of not building is glitching
# releases and builds that depends on everything being tagged in docker
# 1) Preliminary job to check if the changed files are relevant
# check_model_server_changes:
# runs-on: ubuntu-latest
# outputs:
# changed: ${{ steps.check.outputs.changed }}
# steps:
# - name: Checkout code
# uses: actions/checkout@v4
#
# - name: Check if relevant files changed
# id: check
# run: |
# # Default to "false"
# echo "changed=false" >> $GITHUB_OUTPUT
#
# # Compare the previous commit (github.event.before) to the current one (github.sha)
# # If any file in backend/model_server/** or backend/Dockerfile.model_server is changed,
# # set changed=true
# if git diff --name-only ${{ github.event.before }} ${{ github.sha }} \
# | grep -E '^backend/model_server/|^backend/Dockerfile.model_server'; then
# echo "changed=true" >> $GITHUB_OUTPUT
# fi
check_model_server_changes:
runs-on: ubuntu-latest
outputs:
changed: ${{ steps.check.outputs.changed }}
changed: "true"
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Check if relevant files changed
id: check
run: |
# Default to "false"
echo "changed=false" >> $GITHUB_OUTPUT
# Compare the previous commit (github.event.before) to the current one (github.sha)
# If any file in backend/model_server/** or backend/Dockerfile.model_server is changed,
# set changed=true
if git diff --name-only ${{ github.event.before }} ${{ github.sha }} \
| grep -E '^backend/model_server/|^backend/Dockerfile.model_server'; then
echo "changed=true" >> $GITHUB_OUTPUT
fi
- name: Bypass check and set output
run: echo "changed=true" >> $GITHUB_OUTPUT
build-amd64:
needs: [check_model_server_changes]
if: needs.check_model_server_changes.outputs.changed == 'true'
runs-on:
[runs-on, runner=8cpu-linux-x64, "run-id=${{ github.run_id }}-amd64"]
env:
PLATFORM_PAIR: linux-amd64
steps:
- name: Checkout code
uses: actions/checkout@v4
@@ -64,7 +80,7 @@ jobs:
password: ${{ secrets.DOCKER_TOKEN }}
- name: Build and Push AMD64
uses: docker/build-push-action@v5
uses: docker/build-push-action@v6
with:
context: ./backend
file: ./backend/Dockerfile.model_server
@@ -75,12 +91,17 @@ jobs:
DANSWER_VERSION=${{ github.ref_name }}
outputs: type=registry
provenance: false
cache-from: type=s3,prefix=cache/${{ github.repository }}/${{ env.DEPLOYMENT }}/model-server-${{ env.PLATFORM_PAIR }}/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }}
cache-to: type=s3,prefix=cache/${{ github.repository }}/${{ env.DEPLOYMENT }}/model-server-${{ env.PLATFORM_PAIR }}/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }},mode=max
# no-cache: true
build-arm64:
needs: [check_model_server_changes]
if: needs.check_model_server_changes.outputs.changed == 'true'
runs-on:
[runs-on, runner=8cpu-linux-x64, "run-id=${{ github.run_id }}-arm64"]
env:
PLATFORM_PAIR: linux-arm64
steps:
- name: Checkout code
uses: actions/checkout@v4
@@ -105,7 +126,7 @@ jobs:
password: ${{ secrets.DOCKER_TOKEN }}
- name: Build and Push ARM64
uses: docker/build-push-action@v5
uses: docker/build-push-action@v6
with:
context: ./backend
file: ./backend/Dockerfile.model_server
@@ -116,6 +137,8 @@ jobs:
DANSWER_VERSION=${{ github.ref_name }}
outputs: type=registry
provenance: false
cache-from: type=s3,prefix=cache/${{ github.repository }}/${{ env.DEPLOYMENT }}/model-server-${{ env.PLATFORM_PAIR }}/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }}
cache-to: type=s3,prefix=cache/${{ github.repository }}/${{ env.DEPLOYMENT }}/model-server-${{ env.PLATFORM_PAIR }}/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }},mode=max
merge-and-scan:
needs: [build-amd64, build-arm64, check_model_server_changes]
@@ -145,6 +168,8 @@ jobs:
env:
TRIVY_DB_REPOSITORY: "public.ecr.aws/aquasecurity/trivy-db:2"
TRIVY_JAVA_DB_REPOSITORY: "public.ecr.aws/aquasecurity/trivy-java-db:1"
TRIVY_USERNAME: ${{ secrets.DOCKER_USERNAME }}
TRIVY_PASSWORD: ${{ secrets.DOCKER_TOKEN }}
with:
image-ref: docker.io/${{ env.REGISTRY_IMAGE }}:${{ github.ref_name }}
severity: "CRITICAL,HIGH"

View File

@@ -8,9 +8,25 @@ on:
env:
REGISTRY_IMAGE: onyxdotapp/onyx-web-server
LATEST_TAG: ${{ contains(github.ref_name, 'latest') }}
DEPLOYMENT: standalone
jobs:
precheck:
runs-on: [runs-on, runner=2cpu-linux-x64, "run-id=${{ github.run_id }}"]
outputs:
should-run: ${{ steps.set-output.outputs.should-run }}
steps:
- name: Check if tag contains "cloud"
id: set-output
run: |
if [[ "${{ github.ref_name }}" == *cloud* ]]; then
echo "should-run=false" >> "$GITHUB_OUTPUT"
else
echo "should-run=true" >> "$GITHUB_OUTPUT"
fi
build:
needs: precheck
if: needs.precheck.outputs.should-run == 'true'
runs-on:
- runs-on
- runner=${{ matrix.platform == 'linux/amd64' && '8cpu-linux-x64' || '8cpu-linux-arm64' }}
@@ -37,9 +53,11 @@ jobs:
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY_IMAGE }}
flavor: |
latest=false
tags: |
type=raw,value=${{ env.REGISTRY_IMAGE }}:${{ github.ref_name }}
type=raw,value=${{ env.LATEST_TAG == 'true' && format('{0}:latest', env.REGISTRY_IMAGE) || '' }}
type=raw,value=${{ github.ref_name }}
type=raw,value=${{ env.LATEST_TAG == 'true' && 'latest' || '' }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
@@ -52,7 +70,7 @@ jobs:
- name: Build and push by digest
id: build
uses: docker/build-push-action@v5
uses: docker/build-push-action@v6
with:
context: ./web
file: ./web/Dockerfile
@@ -62,11 +80,13 @@ jobs:
ONYX_VERSION=${{ github.ref_name }}
NODE_OPTIONS=--max-old-space-size=8192
# needed due to weird interactions with the builds for different platforms
no-cache: true
labels: ${{ steps.meta.outputs.labels }}
outputs: type=image,name=${{ env.REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=true
cache-from: type=s3,prefix=cache/${{ github.repository }}/${{ env.DEPLOYMENT }}/web-${{ env.PLATFORM_PAIR }}/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }}
cache-to: type=s3,prefix=cache/${{ github.repository }}/${{ env.DEPLOYMENT }}/web-${{ env.PLATFORM_PAIR }}/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }},mode=max
# no-cache needed due to weird interactions with the builds for different platforms
# NOTE(rkuo): this may not be true any more with the proper cache prefixing by architecture - currently testing with it off
- name: Export digest
run: |
mkdir -p /tmp/digests
@@ -76,21 +96,22 @@ jobs:
- name: Upload digest
uses: actions/upload-artifact@v4
with:
name: digests-${{ env.PLATFORM_PAIR }}
name: web-digests-${{ env.PLATFORM_PAIR }}-${{ github.run_id }}
path: /tmp/digests/*
if-no-files-found: error
retention-days: 1
merge:
runs-on: ubuntu-latest
needs:
- build
if: needs.precheck.outputs.should-run == 'true'
runs-on: ubuntu-latest
steps:
- name: Download digests
uses: actions/download-artifact@v4
with:
path: /tmp/digests
pattern: digests-*
pattern: web-digests-*-${{ github.run_id }}
merge-multiple: true
- name: Set up Docker Buildx
@@ -101,6 +122,11 @@ jobs:
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY_IMAGE }}
flavor: |
latest=false
tags: |
type=raw,value=${{ github.ref_name }}
type=raw,value=${{ env.LATEST_TAG == 'true' && 'latest' || '' }}
- name: Login to Docker Hub
uses: docker/login-action@v3
@@ -128,6 +154,8 @@ jobs:
env:
TRIVY_DB_REPOSITORY: "public.ecr.aws/aquasecurity/trivy-db:2"
TRIVY_JAVA_DB_REPOSITORY: "public.ecr.aws/aquasecurity/trivy-java-db:1"
TRIVY_USERNAME: ${{ secrets.DOCKER_USERNAME }}
TRIVY_PASSWORD: ${{ secrets.DOCKER_TOKEN }}
with:
image-ref: docker.io/${{ env.REGISTRY_IMAGE }}:${{ github.ref_name }}
severity: "CRITICAL,HIGH"

View File

@@ -0,0 +1,94 @@
name: External Dependency Unit Tests
on:
merge_group:
pull_request:
branches: [main]
env:
# AWS
S3_AWS_ACCESS_KEY_ID: ${{ secrets.S3_AWS_ACCESS_KEY_ID }}
S3_AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_AWS_SECRET_ACCESS_KEY }}
# MinIO
S3_ENDPOINT_URL: "http://localhost:9004"
# Confluence
CONFLUENCE_TEST_SPACE_URL: ${{ secrets.CONFLUENCE_TEST_SPACE_URL }}
CONFLUENCE_TEST_SPACE: ${{ secrets.CONFLUENCE_TEST_SPACE }}
CONFLUENCE_TEST_PAGE_ID: ${{ secrets.CONFLUENCE_TEST_PAGE_ID }}
CONFLUENCE_IS_CLOUD: ${{ secrets.CONFLUENCE_IS_CLOUD }}
CONFLUENCE_USER_NAME: ${{ secrets.CONFLUENCE_USER_NAME }}
CONFLUENCE_ACCESS_TOKEN: ${{ secrets.CONFLUENCE_ACCESS_TOKEN }}
jobs:
discover-test-dirs:
runs-on: ubuntu-latest
outputs:
test-dirs: ${{ steps.set-matrix.outputs.test-dirs }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Discover test directories
id: set-matrix
run: |
# Find all subdirectories in backend/tests/external_dependency_unit
dirs=$(find backend/tests/external_dependency_unit -mindepth 1 -maxdepth 1 -type d -exec basename {} \; | sort | jq -R -s -c 'split("\n")[:-1]')
echo "test-dirs=$dirs" >> $GITHUB_OUTPUT
external-dependency-unit-tests:
needs: discover-test-dirs
# See https://runs-on.com/runners/linux/
runs-on: [runs-on, runner=8cpu-linux-x64, "run-id=${{ github.run_id }}"]
strategy:
fail-fast: false
matrix:
test-dir: ${{ fromJson(needs.discover-test-dirs.outputs.test-dirs) }}
env:
PYTHONPATH: ./backend
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.11"
cache: "pip"
cache-dependency-path: |
backend/requirements/default.txt
backend/requirements/dev.txt
- name: Install Dependencies
run: |
python -m pip install --upgrade pip
pip install --retries 5 --timeout 30 -r backend/requirements/default.txt
pip install --retries 5 --timeout 30 -r backend/requirements/dev.txt
playwright install chromium
playwright install-deps chromium
- name: Set up Standard Dependencies
run: |
cd deployment/docker_compose
docker compose -f docker-compose.dev.yml -p onyx-stack up -d minio relational_db cache index
- name: Run migrations
run: |
cd backend
alembic upgrade head
- name: Run Tests for ${{ matrix.test-dir }}
shell: script -q -e -c "bash --noprofile --norc -eo pipefail {0}"
run: |
py.test \
-n 8 \
--dist loadfile \
--durations=8 \
-o junit_family=xunit2 \
-xv \
--ff \
backend/tests/external_dependency_unit/${{ matrix.test-dir }}

View File

@@ -37,6 +37,11 @@ jobs:
echo "changed=true" >> "$GITHUB_OUTPUT"
fi
# uncomment to force run chart-testing
# - name: Force run chart-testing (list-changed)
# id: list-changed
# run: echo "changed=true" >> $GITHUB_OUTPUT
# lint all charts if any changes were detected
- name: Run chart-testing (lint)
if: steps.list-changed.outputs.changed == 'true'

View File

@@ -16,15 +16,58 @@ env:
CONFLUENCE_TEST_SPACE_URL: ${{ secrets.CONFLUENCE_TEST_SPACE_URL }}
CONFLUENCE_USER_NAME: ${{ secrets.CONFLUENCE_USER_NAME }}
CONFLUENCE_ACCESS_TOKEN: ${{ secrets.CONFLUENCE_ACCESS_TOKEN }}
JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }}
JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}
PLATFORM_PAIR: linux-amd64
jobs:
integration-tests:
# See https://runs-on.com/runners/linux/
runs-on: [runs-on, runner=32cpu-linux-x64, "run-id=${{ github.run_id }}"]
runs-on:
[
runs-on,
runner=32cpu-linux-x64,
disk=large,
"run-id=${{ github.run_id }}",
]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.11"
cache: "pip"
cache-dependency-path: |
backend/requirements/default.txt
backend/requirements/dev.txt
backend/requirements/ee.txt
- run: |
python -m pip install --upgrade pip
pip install --retries 5 --timeout 30 -r backend/requirements/default.txt
pip install --retries 5 --timeout 30 -r backend/requirements/dev.txt
pip install --retries 5 --timeout 30 -r backend/requirements/ee.txt
- name: Generate OpenAPI schema
working-directory: ./backend
env:
PYTHONPATH: "."
run: |
python scripts/onyx_openapi_schema.py --filename generated/openapi.json
- name: Generate OpenAPI Python client
working-directory: ./backend
run: |
docker run --rm \
-v "${{ github.workspace }}/backend/generated:/local" \
openapitools/openapi-generator-cli generate \
-i /local/openapi.json \
-g python \
-o /local/onyx_openapi_client \
--package-name onyx_openapi_client
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
@@ -61,8 +104,8 @@ jobs:
tags: onyxdotapp/onyx-backend:test
push: false
load: true
cache-from: type=s3,prefix=cache/${{ github.repository }}/integration-tests/backend/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }}
cache-to: type=s3,prefix=cache/${{ github.repository }}/integration-tests/backend/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }},mode=max
cache-from: type=s3,prefix=cache/${{ github.repository }}/integration-tests/backend-${{ env.PLATFORM_PAIR }}/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }}
cache-to: type=s3,prefix=cache/${{ github.repository }}/integration-tests/backend-${{ env.PLATFORM_PAIR }}/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }},mode=max
- name: Build Model Server Docker image
uses: ./.github/actions/custom-build-and-push
@@ -73,8 +116,8 @@ jobs:
tags: onyxdotapp/onyx-model-server:test
push: false
load: true
cache-from: type=s3,prefix=cache/${{ github.repository }}/integration-tests/model-server/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }}
cache-to: type=s3,prefix=cache/${{ github.repository }}/integration-tests/model-server/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }},mode=max
cache-from: type=s3,prefix=cache/${{ github.repository }}/integration-tests/model-server-${{ env.PLATFORM_PAIR }}/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }}
cache-to: type=s3,prefix=cache/${{ github.repository }}/integration-tests/model-server-${{ env.PLATFORM_PAIR }}/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }},mode=max
- name: Build integration test Docker image
uses: ./.github/actions/custom-build-and-push
@@ -85,8 +128,8 @@ jobs:
tags: onyxdotapp/onyx-integration:test
push: false
load: true
cache-from: type=s3,prefix=cache/${{ github.repository }}/integration-tests/integration/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }}
cache-to: type=s3,prefix=cache/${{ github.repository }}/integration-tests/integration/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }},mode=max
cache-from: type=s3,prefix=cache/${{ github.repository }}/integration-tests/integration-${{ env.PLATFORM_PAIR }}/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }}
cache-to: type=s3,prefix=cache/${{ github.repository }}/integration-tests/integration-${{ env.PLATFORM_PAIR }}/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }},mode=max
# Start containers for multi-tenant tests
- name: Start Docker containers for multi-tenant tests
@@ -113,6 +156,8 @@ jobs:
-e POSTGRES_HOST=relational_db \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=password \
-e DB_READONLY_USER=db_readonly_user \
-e DB_READONLY_PASSWORD=password \
-e POSTGRES_DB=postgres \
-e POSTGRES_USE_NULL_POOL=true \
-e VESPA_HOST=index \
@@ -158,6 +203,7 @@ jobs:
DISABLE_TELEMETRY=true \
IMAGE_TAG=test \
INTEGRATION_TESTS_MODE=true \
CHECK_TTL_MANAGEMENT_TASK_FREQUENCY_IN_HOURS=0.001 \
docker compose -f docker-compose.dev.yml -p onyx-stack up -d
id: start_docker
@@ -210,6 +256,8 @@ jobs:
-e POSTGRES_HOST=relational_db \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=password \
-e DB_READONLY_USER=db_readonly_user \
-e DB_READONLY_PASSWORD=password \
-e POSTGRES_DB=postgres \
-e POSTGRES_POOL_PRE_PING=true \
-e POSTGRES_USE_NULL_POOL=true \
@@ -221,6 +269,9 @@ jobs:
-e CONFLUENCE_TEST_SPACE_URL=${CONFLUENCE_TEST_SPACE_URL} \
-e CONFLUENCE_USER_NAME=${CONFLUENCE_USER_NAME} \
-e CONFLUENCE_ACCESS_TOKEN=${CONFLUENCE_ACCESS_TOKEN} \
-e JIRA_BASE_URL=${JIRA_BASE_URL} \
-e JIRA_USER_EMAIL=${JIRA_USER_EMAIL} \
-e JIRA_API_TOKEN=${JIRA_API_TOKEN} \
-e TEST_WEB_HOSTNAME=test-runner \
-e MOCK_CONNECTOR_SERVER_HOST=mock_connector_server \
-e MOCK_CONNECTOR_SERVER_PORT=8001 \

38
.github/workflows/pr-labeler.yml vendored Normal file
View File

@@ -0,0 +1,38 @@
name: PR Labeler
on:
pull_request_target:
branches:
- main
types:
- opened
- reopened
- synchronize
- edited
permissions:
contents: read
pull-requests: write
jobs:
validate_pr_title:
runs-on: ubuntu-latest
steps:
- name: Check PR title for Conventional Commits
env:
PR_TITLE: ${{ github.event.pull_request.title }}
run: |
echo "PR Title: $PR_TITLE"
if [[ ! "$PR_TITLE" =~ ^(feat|fix|docs|test|ci|refactor|perf|chore|revert|build)(\(.+\))?:\ .+ ]]; then
echo "::error::❌ Your PR title does not follow the Conventional Commits format.
This check ensures that all pull requests use clear, consistent titles that help automate changelogs and improve project history.
Please update your PR title to follow the Conventional Commits style.
Here is a link to a blog explaining the reason why we've included the Conventional Commits style into our PR titles: https://xfuture-blog.com/working-with-conventional-commits
**Here are some examples of valid PR titles:**
- feat: add user authentication
- fix(login): handle null password error
- docs(readme): update installation instructions"
exit 1
fi

View File

@@ -0,0 +1,254 @@
name: Run MIT Integration Tests v2
concurrency:
group: Run-MIT-Integration-Tests-${{ github.workflow }}-${{ github.head_ref || github.event.workflow_run.head_branch || github.run_id }}
cancel-in-progress: true
on:
merge_group:
pull_request:
branches:
- main
- "release/**"
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
CONFLUENCE_TEST_SPACE_URL: ${{ secrets.CONFLUENCE_TEST_SPACE_URL }}
CONFLUENCE_USER_NAME: ${{ secrets.CONFLUENCE_USER_NAME }}
CONFLUENCE_ACCESS_TOKEN: ${{ secrets.CONFLUENCE_ACCESS_TOKEN }}
JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }}
JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}
PLATFORM_PAIR: linux-amd64
jobs:
integration-tests-mit:
# See https://runs-on.com/runners/linux/
runs-on:
[
runs-on,
runner=32cpu-linux-x64,
disk=large,
"run-id=${{ github.run_id }}",
]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.11"
cache: "pip"
cache-dependency-path: |
backend/requirements/default.txt
backend/requirements/dev.txt
- run: |
python -m pip install --upgrade pip
pip install --retries 5 --timeout 30 -r backend/requirements/default.txt
pip install --retries 5 --timeout 30 -r backend/requirements/dev.txt
- name: Generate OpenAPI schema
working-directory: ./backend
env:
PYTHONPATH: "."
run: |
python scripts/onyx_openapi_schema.py --filename generated/openapi.json
- name: Generate OpenAPI Python client
working-directory: ./backend
run: |
docker run --rm \
-v "${{ github.workspace }}/backend/generated:/local" \
openapitools/openapi-generator-cli generate \
-i /local/openapi.json \
-g python \
-o /local/onyx_openapi_client \
--package-name onyx_openapi_client
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
# tag every docker image with "test" so that we can spin up the correct set
# of images during testing
# We don't need to build the Web Docker image since it's not yet used
# in the integration tests. We have a separate action to verify that it builds
# successfully.
- name: Pull Web Docker image
run: |
docker pull onyxdotapp/onyx-web-server:latest
docker tag onyxdotapp/onyx-web-server:latest onyxdotapp/onyx-web-server:test
# we use the runs-on cache for docker builds
# in conjunction with runs-on runners, it has better speed and unlimited caching
# https://runs-on.com/caching/s3-cache-for-github-actions/
# https://runs-on.com/caching/docker/
# https://github.com/moby/buildkit#s3-cache-experimental
# images are built and run locally for testing purposes. Not pushed.
- name: Build Backend Docker image
uses: ./.github/actions/custom-build-and-push
with:
context: ./backend
file: ./backend/Dockerfile
platforms: linux/amd64
tags: onyxdotapp/onyx-backend:test
push: false
load: true
cache-from: type=s3,prefix=cache/${{ github.repository }}/mit-integration-tests/backend-${{ env.PLATFORM_PAIR }}/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }}
cache-to: type=s3,prefix=cache/${{ github.repository }}/mit-integration-tests/backend-${{ env.PLATFORM_PAIR }}/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }},mode=max
- name: Build Model Server Docker image
uses: ./.github/actions/custom-build-and-push
with:
context: ./backend
file: ./backend/Dockerfile.model_server
platforms: linux/amd64
tags: onyxdotapp/onyx-model-server:test
push: false
load: true
cache-from: type=s3,prefix=cache/${{ github.repository }}/mit-integration-tests/model-server-${{ env.PLATFORM_PAIR }}/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }}
cache-to: type=s3,prefix=cache/${{ github.repository }}/mit-integration-tests/model-server-${{ env.PLATFORM_PAIR }}/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }},mode=max
- name: Build integration test Docker image
uses: ./.github/actions/custom-build-and-push
with:
context: ./backend
file: ./backend/tests/integration/Dockerfile
platforms: linux/amd64
tags: onyxdotapp/onyx-integration:test
push: false
load: true
cache-from: type=s3,prefix=cache/${{ github.repository }}/mit-integration-tests/integration-${{ env.PLATFORM_PAIR }}/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }}
cache-to: type=s3,prefix=cache/${{ github.repository }}/mit-integration-tests/integration-${{ env.PLATFORM_PAIR }}/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }},mode=max
# NOTE: Use pre-ping/null pool to reduce flakiness due to dropped connections
- name: Start Docker containers
run: |
cd deployment/docker_compose
AUTH_TYPE=basic \
POSTGRES_POOL_PRE_PING=true \
POSTGRES_USE_NULL_POOL=true \
REQUIRE_EMAIL_VERIFICATION=false \
DISABLE_TELEMETRY=true \
IMAGE_TAG=test \
INTEGRATION_TESTS_MODE=true \
docker compose -f docker-compose.dev.yml -p onyx-stack up -d
id: start_docker
- name: Wait for service to be ready
run: |
echo "Starting wait-for-service script..."
docker logs -f onyx-stack-api_server-1 &
start_time=$(date +%s)
timeout=300 # 5 minutes in seconds
while true; do
current_time=$(date +%s)
elapsed_time=$((current_time - start_time))
if [ $elapsed_time -ge $timeout ]; then
echo "Timeout reached. Service did not become ready in 5 minutes."
exit 1
fi
# Use curl with error handling to ignore specific exit code 56
response=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8080/health || echo "curl_error")
if [ "$response" = "200" ]; then
echo "Service is ready!"
break
elif [ "$response" = "curl_error" ]; then
echo "Curl encountered an error, possibly exit code 56. Continuing to retry..."
else
echo "Service not ready yet (HTTP status $response). Retrying in 5 seconds..."
fi
sleep 5
done
echo "Finished waiting for service."
- name: Start Mock Services
run: |
cd backend/tests/integration/mock_services
docker compose -f docker-compose.mock-it-services.yml \
-p mock-it-services-stack up -d
# NOTE: Use pre-ping/null to reduce flakiness due to dropped connections
- name: Run Standard Integration Tests
run: |
echo "Running integration tests..."
docker run --rm --network onyx-stack_default \
--name test-runner \
-e POSTGRES_HOST=relational_db \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=password \
-e POSTGRES_DB=postgres \
-e DB_READONLY_USER=db_readonly_user \
-e DB_READONLY_PASSWORD=password \
-e POSTGRES_POOL_PRE_PING=true \
-e POSTGRES_USE_NULL_POOL=true \
-e VESPA_HOST=index \
-e REDIS_HOST=cache \
-e API_SERVER_HOST=api_server \
-e OPENAI_API_KEY=${OPENAI_API_KEY} \
-e SLACK_BOT_TOKEN=${SLACK_BOT_TOKEN} \
-e CONFLUENCE_TEST_SPACE_URL=${CONFLUENCE_TEST_SPACE_URL} \
-e CONFLUENCE_USER_NAME=${CONFLUENCE_USER_NAME} \
-e CONFLUENCE_ACCESS_TOKEN=${CONFLUENCE_ACCESS_TOKEN} \
-e JIRA_BASE_URL=${JIRA_BASE_URL} \
-e JIRA_USER_EMAIL=${JIRA_USER_EMAIL} \
-e JIRA_API_TOKEN=${JIRA_API_TOKEN} \
-e TEST_WEB_HOSTNAME=test-runner \
-e MOCK_CONNECTOR_SERVER_HOST=mock_connector_server \
-e MOCK_CONNECTOR_SERVER_PORT=8001 \
onyxdotapp/onyx-integration:test \
/app/tests/integration/tests \
/app/tests/integration/connector_job_tests
continue-on-error: true
id: run_tests
- name: Check test results
run: |
if [ ${{ steps.run_tests.outcome }} == 'failure' ]; then
echo "Integration tests failed. Exiting with error."
exit 1
else
echo "All integration tests passed successfully."
fi
# ------------------------------------------------------------
# Always gather logs BEFORE "down":
- name: Dump API server logs
if: always()
run: |
cd deployment/docker_compose
docker compose -f docker-compose.dev.yml -p onyx-stack logs --no-color api_server > $GITHUB_WORKSPACE/api_server.log || true
- name: Dump all-container logs (optional)
if: always()
run: |
cd deployment/docker_compose
docker compose -f docker-compose.dev.yml -p onyx-stack logs --no-color > $GITHUB_WORKSPACE/docker-compose.log || true
- name: Upload logs
if: always()
uses: actions/upload-artifact@v4
with:
name: docker-all-logs
path: ${{ github.workspace }}/docker-compose.log
# ------------------------------------------------------------
- name: Stop Docker containers
if: always()
run: |
cd deployment/docker_compose
docker compose -f docker-compose.dev.yml -p onyx-stack down -v

View File

@@ -10,6 +10,7 @@ env:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
GEN_AI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
MOCK_LLM_RESPONSE: true
PYTEST_PLAYWRIGHT_SKIP_INITIAL_RESET: true
jobs:
playwright-tests:

View File

@@ -31,20 +31,33 @@ jobs:
pip install --retries 5 --timeout 30 -r backend/requirements/dev.txt
pip install --retries 5 --timeout 30 -r backend/requirements/model_server.txt
- name: Generate OpenAPI schema
working-directory: ./backend
env:
PYTHONPATH: "."
run: |
python scripts/onyx_openapi_schema.py --filename generated/openapi.json
- name: Generate OpenAPI Python client
working-directory: ./backend
run: |
docker run --rm \
-v "${{ github.workspace }}/backend/generated:/local" \
openapitools/openapi-generator-cli generate \
-i /local/openapi.json \
-g python \
-o /local/onyx_openapi_client \
--package-name onyx_openapi_client \
- name: Run MyPy
run: |
cd backend
mypy .
- name: Run ruff
run: |
cd backend
ruff .
- name: Check import order with reorder-python-imports
run: |
cd backend
find ./danswer -name "*.py" | xargs reorder-python-imports --py311-plus
find ./onyx -name "*.py" | xargs reorder-python-imports --py311-plus
- name: Check code formatting with Black
run: |

View File

@@ -1,6 +1,7 @@
name: Connector Tests
on:
merge_group:
pull_request:
branches: [main]
schedule:
@@ -8,50 +9,97 @@ on:
- cron: "0 16 * * *"
env:
# AWS
AWS_ACCESS_KEY_ID_DAILY_CONNECTOR_TESTS: ${{ secrets.AWS_ACCESS_KEY_ID_DAILY_CONNECTOR_TESTS }}
AWS_SECRET_ACCESS_KEY_DAILY_CONNECTOR_TESTS: ${{ secrets.AWS_SECRET_ACCESS_KEY_DAILY_CONNECTOR_TESTS }}
# Confluence
CONFLUENCE_TEST_SPACE_URL: ${{ secrets.CONFLUENCE_TEST_SPACE_URL }}
CONFLUENCE_TEST_SPACE: ${{ secrets.CONFLUENCE_TEST_SPACE }}
CONFLUENCE_IS_CLOUD: ${{ secrets.CONFLUENCE_IS_CLOUD }}
CONFLUENCE_TEST_PAGE_ID: ${{ secrets.CONFLUENCE_TEST_PAGE_ID }}
CONFLUENCE_IS_CLOUD: ${{ secrets.CONFLUENCE_IS_CLOUD }}
CONFLUENCE_USER_NAME: ${{ secrets.CONFLUENCE_USER_NAME }}
CONFLUENCE_ACCESS_TOKEN: ${{ secrets.CONFLUENCE_ACCESS_TOKEN }}
# Jira
JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }}
JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}
# Gong
GONG_ACCESS_KEY: ${{ secrets.GONG_ACCESS_KEY }}
GONG_ACCESS_KEY_SECRET: ${{ secrets.GONG_ACCESS_KEY_SECRET }}
# Google
GOOGLE_DRIVE_SERVICE_ACCOUNT_JSON_STR: ${{ secrets.GOOGLE_DRIVE_SERVICE_ACCOUNT_JSON_STR }}
GOOGLE_DRIVE_OAUTH_CREDENTIALS_JSON_STR_TEST_USER_1: ${{ secrets.GOOGLE_DRIVE_OAUTH_CREDENTIALS_JSON_STR_TEST_USER_1 }}
GOOGLE_DRIVE_OAUTH_CREDENTIALS_JSON_STR: ${{ secrets.GOOGLE_DRIVE_OAUTH_CREDENTIALS_JSON_STR }}
GOOGLE_GMAIL_SERVICE_ACCOUNT_JSON_STR: ${{ secrets.GOOGLE_GMAIL_SERVICE_ACCOUNT_JSON_STR }}
GOOGLE_GMAIL_OAUTH_CREDENTIALS_JSON_STR: ${{ secrets.GOOGLE_GMAIL_OAUTH_CREDENTIALS_JSON_STR }}
# Slab
SLAB_BOT_TOKEN: ${{ secrets.SLAB_BOT_TOKEN }}
# Zendesk
ZENDESK_SUBDOMAIN: ${{ secrets.ZENDESK_SUBDOMAIN }}
ZENDESK_EMAIL: ${{ secrets.ZENDESK_EMAIL }}
ZENDESK_TOKEN: ${{ secrets.ZENDESK_TOKEN }}
# Salesforce
SF_USERNAME: ${{ secrets.SF_USERNAME }}
SF_PASSWORD: ${{ secrets.SF_PASSWORD }}
SF_SECURITY_TOKEN: ${{ secrets.SF_SECURITY_TOKEN }}
# Hubspot
HUBSPOT_ACCESS_TOKEN: ${{ secrets.HUBSPOT_ACCESS_TOKEN }}
# IMAP
IMAP_HOST: ${{ secrets.IMAP_HOST }}
IMAP_USERNAME: ${{ secrets.IMAP_USERNAME }}
IMAP_PASSWORD: ${{ secrets.IMAP_PASSWORD }}
IMAP_MAILBOXES: ${{ secrets.IMAP_MAILBOXES }}
# Airtable
AIRTABLE_TEST_BASE_ID: ${{ secrets.AIRTABLE_TEST_BASE_ID }}
AIRTABLE_TEST_TABLE_ID: ${{ secrets.AIRTABLE_TEST_TABLE_ID }}
AIRTABLE_TEST_TABLE_NAME: ${{ secrets.AIRTABLE_TEST_TABLE_NAME }}
AIRTABLE_ACCESS_TOKEN: ${{ secrets.AIRTABLE_ACCESS_TOKEN }}
# Sharepoint
SHAREPOINT_CLIENT_ID: ${{ secrets.SHAREPOINT_CLIENT_ID }}
SHAREPOINT_CLIENT_SECRET: ${{ secrets.SHAREPOINT_CLIENT_SECRET }}
SHAREPOINT_CLIENT_DIRECTORY_ID: ${{ secrets.SHAREPOINT_CLIENT_DIRECTORY_ID }}
SHAREPOINT_SITE: ${{ secrets.SHAREPOINT_SITE }}
# Github
ACCESS_TOKEN_GITHUB: ${{ secrets.ACCESS_TOKEN_GITHUB }}
# Gitlab
GITLAB_ACCESS_TOKEN: ${{ secrets.GITLAB_ACCESS_TOKEN }}
# Gitbook
GITBOOK_SPACE_ID: ${{ secrets.GITBOOK_SPACE_ID }}
GITBOOK_API_KEY: ${{ secrets.GITBOOK_API_KEY }}
# Notion
NOTION_INTEGRATION_TOKEN: ${{ secrets.NOTION_INTEGRATION_TOKEN }}
# Highspot
HIGHSPOT_KEY: ${{ secrets.HIGHSPOT_KEY }}
HIGHSPOT_SECRET: ${{ secrets.HIGHSPOT_SECRET }}
# Slack
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
# Teams
TEAMS_APPLICATION_ID: ${{ secrets.TEAMS_APPLICATION_ID }}
TEAMS_DIRECTORY_ID: ${{ secrets.TEAMS_DIRECTORY_ID }}
TEAMS_SECRET: ${{ secrets.TEAMS_SECRET }}
jobs:
connectors-check:
# See https://runs-on.com/runners/linux/
runs-on: [runs-on,runner=8cpu-linux-x64,"run-id=${{ github.run_id }}"]
runs-on: [runs-on, runner=8cpu-linux-x64, "run-id=${{ github.run_id }}"]
env:
PYTHONPATH: ./backend
@@ -76,10 +124,18 @@ jobs:
pip install --retries 5 --timeout 30 -r backend/requirements/dev.txt
playwright install chromium
playwright install-deps chromium
- name: Run Tests
shell: script -q -e -c "bash --noprofile --norc -eo pipefail {0}"
run: py.test -o junit_family=xunit2 -xv --ff backend/tests/daily/connectors
run: |
py.test \
-n 8 \
--dist loadfile \
--durations=8 \
-o junit_family=xunit2 \
-xv \
--ff \
backend/tests/daily/connectors
- name: Alert on Failure
if: failure() && github.event_name == 'schedule'

View File

@@ -15,6 +15,9 @@ jobs:
env:
PYTHONPATH: ./backend
REDIS_CLOUD_PYTEST_PASSWORD: ${{ secrets.REDIS_CLOUD_PYTEST_PASSWORD }}
SF_USERNAME: ${{ secrets.SF_USERNAME }}
SF_PASSWORD: ${{ secrets.SF_PASSWORD }}
SF_SECURITY_TOKEN: ${{ secrets.SF_SECURITY_TOKEN }}
steps:
- name: Checkout code

26
.gitignore vendored
View File

@@ -1,12 +1,28 @@
.env
# editors
.vscode
.zed
# macos
.DS_store
# python
.venv
.mypy_cache
.idea
/deployment/data/nginx/app.conf
.vscode/
*.sw?
/backend/tests/regression/answer_quality/search_test_config.yaml
# testing
/web/test-results/
backend/onyx/agent_search/main/test_data.json
backend/tests/regression/answer_quality/test_data.json
backend/tests/regression/search_quality/eval-*
backend/tests/regression/search_quality/search_eval_config.yaml
backend/tests/regression/search_quality/*.json
# secret files
.env
jira_test_env
# others
/deployment/data/nginx/app.conf
*.sw?
/backend/tests/regression/answer_quality/search_test_config.yaml

View File

@@ -1,12 +1,13 @@
repos:
- repo: https://github.com/psf/black
rev: 23.3.0
rev: 25.1.0
hooks:
- id: black
language_version: python3.11
- repo: https://github.com/asottile/reorder_python_imports
rev: v3.9.0
# this is a fork which keeps compatibility with black
- repo: https://github.com/wimglenn/reorder-python-imports-black
rev: v3.14.0
hooks:
- id: reorder-python-imports
args: ['--py311-plus', '--application-directories=backend/']
@@ -18,14 +19,14 @@ repos:
# These settings will remove unused imports with side effects
# Note: The repo currently does not and should not have imports with side effects
- repo: https://github.com/PyCQA/autoflake
rev: v2.2.0
rev: v2.3.1
hooks:
- id: autoflake
args: [ '--remove-all-unused-imports', '--remove-unused-variables', '--in-place' , '--recursive']
- repo: https://github.com/astral-sh/ruff-pre-commit
# Ruff version.
rev: v0.0.286
rev: v0.11.4
hooks:
- id: ruff
- repo: https://github.com/pre-commit/mirrors-prettier

View File

@@ -45,8 +45,9 @@ PYTHONPATH=../backend
PYTHONUNBUFFERED=1
# Internet Search
# Internet Search
BING_API_KEY=<REPLACE THIS>
EXA_API_KEY=<REPLACE THIS>
# Enable the full set of Danswer Enterprise Edition features
@@ -58,3 +59,9 @@ AGENT_RETRIEVAL_STATS=False # Note: This setting will incur substantial re-ran
AGENT_RERANKING_STATS=True
AGENT_MAX_QUERY_RETRIEVAL_RESULTS=20
AGENT_RERANKING_MAX_QUERY_RETRIEVAL_RESULTS=20
# S3 File Store Configuration (MinIO for local development)
S3_ENDPOINT_URL=http://localhost:9004
S3_FILE_STORE_BUCKET_NAME=onyx-file-store-bucket
S3_AWS_ACCESS_KEY_ID=minioadmin
S3_AWS_SECRET_ACCESS_KEY=minioadmin

View File

@@ -6,396 +6,461 @@
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"compounds": [
{
// Dummy entry used to label the group
"name": "--- Compound ---",
"configurations": [
"--- Individual ---"
],
"presentation": {
"group": "1",
}
},
{
"name": "Run All Onyx Services",
"configurations": [
"Web Server",
"Model Server",
"API Server",
"Slack Bot",
"Celery primary",
"Celery light",
"Celery heavy",
"Celery indexing",
"Celery beat",
"Celery monitoring",
],
"presentation": {
"group": "1",
}
},
{
"name": "Web / Model / API",
"configurations": [
"Web Server",
"Model Server",
"API Server",
],
"presentation": {
"group": "1",
}
},
{
"name": "Celery (all)",
"configurations": [
"Celery primary",
"Celery light",
"Celery heavy",
"Celery indexing",
"Celery beat",
"Celery monitoring",
],
"presentation": {
"group": "1",
}
}
{
// Dummy entry used to label the group
"name": "--- Compound ---",
"configurations": ["--- Individual ---"],
"presentation": {
"group": "1"
}
},
{
"name": "Run All Onyx Services",
"configurations": [
"Web Server",
"Model Server",
"API Server",
"Slack Bot",
"Celery primary",
"Celery light",
"Celery heavy",
"Celery docfetching",
"Celery docprocessing",
"Celery beat",
"Celery monitoring"
],
"presentation": {
"group": "1"
}
},
{
"name": "Web / Model / API",
"configurations": ["Web Server", "Model Server", "API Server"],
"presentation": {
"group": "1"
}
},
{
"name": "Celery (all)",
"configurations": [
"Celery primary",
"Celery light",
"Celery heavy",
"Celery docfetching",
"Celery docprocessing",
"Celery beat",
"Celery monitoring"
],
"presentation": {
"group": "1"
}
}
],
"configurations": [
{
// Dummy entry used to label the group
"name": "--- Individual ---",
"type": "node",
"request": "launch",
"presentation": {
"group": "2",
"order": 0
}
},
{
"name": "Web Server",
"type": "node",
"request": "launch",
"cwd": "${workspaceRoot}/web",
"runtimeExecutable": "npm",
"envFile": "${workspaceFolder}/.vscode/.env",
"runtimeArgs": [
"run", "dev"
],
"presentation": {
"group": "2",
},
"console": "integratedTerminal",
"consoleTitle": "Web Server Console"
{
// Dummy entry used to label the group
"name": "--- Individual ---",
"type": "node",
"request": "launch",
"presentation": {
"group": "2",
"order": 0
}
},
{
"name": "Web Server",
"type": "node",
"request": "launch",
"cwd": "${workspaceRoot}/web",
"runtimeExecutable": "npm",
"envFile": "${workspaceFolder}/.vscode/.env",
"runtimeArgs": ["run", "dev"],
"presentation": {
"group": "2"
},
{
"name": "Model Server",
"consoleName": "Model Server",
"type": "debugpy",
"request": "launch",
"module": "uvicorn",
"cwd": "${workspaceFolder}/backend",
"envFile": "${workspaceFolder}/.vscode/.env",
"env": {
"LOG_LEVEL": "DEBUG",
"PYTHONUNBUFFERED": "1"
},
"args": [
"model_server.main:app",
"--reload",
"--port",
"9000"
],
"presentation": {
"group": "2",
},
"consoleTitle": "Model Server Console"
"console": "integratedTerminal",
"consoleTitle": "Web Server Console"
},
{
"name": "Model Server",
"consoleName": "Model Server",
"type": "debugpy",
"request": "launch",
"module": "uvicorn",
"cwd": "${workspaceFolder}/backend",
"envFile": "${workspaceFolder}/.vscode/.env",
"env": {
"LOG_LEVEL": "DEBUG",
"PYTHONUNBUFFERED": "1"
},
{
"name": "API Server",
"consoleName": "API Server",
"type": "debugpy",
"request": "launch",
"module": "uvicorn",
"cwd": "${workspaceFolder}/backend",
"envFile": "${workspaceFolder}/.vscode/.env",
"env": {
"LOG_DANSWER_MODEL_INTERACTIONS": "True",
"LOG_LEVEL": "DEBUG",
"PYTHONUNBUFFERED": "1"
},
"args": [
"onyx.main:app",
"--reload",
"--port",
"8080"
],
"presentation": {
"group": "2",
},
"consoleTitle": "API Server Console"
"args": ["model_server.main:app", "--reload", "--port", "9000"],
"presentation": {
"group": "2"
},
// For the listener to access the Slack API,
// DANSWER_BOT_SLACK_APP_TOKEN & DANSWER_BOT_SLACK_BOT_TOKEN need to be set in .env file located in the root of the project
{
"name": "Slack Bot",
"consoleName": "Slack Bot",
"type": "debugpy",
"request": "launch",
"program": "onyx/onyxbot/slack/listener.py",
"cwd": "${workspaceFolder}/backend",
"envFile": "${workspaceFolder}/.vscode/.env",
"env": {
"LOG_LEVEL": "DEBUG",
"PYTHONUNBUFFERED": "1",
"PYTHONPATH": "."
},
"presentation": {
"group": "2",
},
"consoleTitle": "Slack Bot Console"
"consoleTitle": "Model Server Console"
},
{
"name": "API Server",
"consoleName": "API Server",
"type": "debugpy",
"request": "launch",
"module": "uvicorn",
"cwd": "${workspaceFolder}/backend",
"envFile": "${workspaceFolder}/.vscode/.env",
"env": {
"LOG_DANSWER_MODEL_INTERACTIONS": "True",
"LOG_LEVEL": "DEBUG",
"PYTHONUNBUFFERED": "1"
},
{
"name": "Celery primary",
"type": "debugpy",
"request": "launch",
"module": "celery",
"cwd": "${workspaceFolder}/backend",
"envFile": "${workspaceFolder}/.vscode/.env",
"env": {
"LOG_LEVEL": "INFO",
"PYTHONUNBUFFERED": "1",
"PYTHONPATH": "."
},
"args": [
"-A",
"onyx.background.celery.versioned_apps.primary",
"worker",
"--pool=threads",
"--concurrency=4",
"--prefetch-multiplier=1",
"--loglevel=INFO",
"--hostname=primary@%n",
"-Q",
"celery",
],
"presentation": {
"group": "2",
},
"consoleTitle": "Celery primary Console"
"args": ["onyx.main:app", "--reload", "--port", "8080"],
"presentation": {
"group": "2"
},
{
"name": "Celery light",
"type": "debugpy",
"request": "launch",
"module": "celery",
"cwd": "${workspaceFolder}/backend",
"envFile": "${workspaceFolder}/.vscode/.env",
"env": {
"LOG_LEVEL": "INFO",
"PYTHONUNBUFFERED": "1",
"PYTHONPATH": "."
},
"args": [
"-A",
"onyx.background.celery.versioned_apps.light",
"worker",
"--pool=threads",
"--concurrency=64",
"--prefetch-multiplier=8",
"--loglevel=INFO",
"--hostname=light@%n",
"-Q",
"vespa_metadata_sync,connector_deletion,doc_permissions_upsert,checkpoint_cleanup",
],
"presentation": {
"group": "2",
},
"consoleTitle": "Celery light Console"
"consoleTitle": "API Server Console"
},
// For the listener to access the Slack API,
// DANSWER_BOT_SLACK_APP_TOKEN & DANSWER_BOT_SLACK_BOT_TOKEN need to be set in .env file located in the root of the project
{
"name": "Slack Bot",
"consoleName": "Slack Bot",
"type": "debugpy",
"request": "launch",
"program": "onyx/onyxbot/slack/listener.py",
"cwd": "${workspaceFolder}/backend",
"envFile": "${workspaceFolder}/.vscode/.env",
"env": {
"LOG_LEVEL": "DEBUG",
"PYTHONUNBUFFERED": "1",
"PYTHONPATH": "."
},
{
"name": "Celery heavy",
"type": "debugpy",
"request": "launch",
"module": "celery",
"cwd": "${workspaceFolder}/backend",
"envFile": "${workspaceFolder}/.vscode/.env",
"env": {
"LOG_LEVEL": "INFO",
"PYTHONUNBUFFERED": "1",
"PYTHONPATH": "."
},
"args": [
"-A",
"onyx.background.celery.versioned_apps.heavy",
"worker",
"--pool=threads",
"--concurrency=4",
"--prefetch-multiplier=1",
"--loglevel=INFO",
"--hostname=heavy@%n",
"-Q",
"connector_pruning,connector_doc_permissions_sync,connector_external_group_sync",
],
"presentation": {
"group": "2",
},
"consoleTitle": "Celery heavy Console"
"presentation": {
"group": "2"
},
{
"name": "Celery indexing",
"type": "debugpy",
"request": "launch",
"module": "celery",
"cwd": "${workspaceFolder}/backend",
"envFile": "${workspaceFolder}/.vscode/.env",
"env": {
"ENABLE_MULTIPASS_INDEXING": "false",
"LOG_LEVEL": "DEBUG",
"PYTHONUNBUFFERED": "1",
"PYTHONPATH": "."
},
"args": [
"-A",
"onyx.background.celery.versioned_apps.indexing",
"worker",
"--pool=threads",
"--concurrency=1",
"--prefetch-multiplier=1",
"--loglevel=INFO",
"--hostname=indexing@%n",
"-Q",
"connector_indexing",
],
"presentation": {
"group": "2",
},
"consoleTitle": "Celery indexing Console"
"consoleTitle": "Slack Bot Console"
},
{
"name": "Celery primary",
"type": "debugpy",
"request": "launch",
"module": "celery",
"cwd": "${workspaceFolder}/backend",
"envFile": "${workspaceFolder}/.vscode/.env",
"env": {
"LOG_LEVEL": "INFO",
"PYTHONUNBUFFERED": "1",
"PYTHONPATH": "."
},
{
"name": "Celery monitoring",
"type": "debugpy",
"request": "launch",
"module": "celery",
"cwd": "${workspaceFolder}/backend",
"envFile": "${workspaceFolder}/.vscode/.env",
"env": {},
"args": [
"-A",
"onyx.background.celery.versioned_apps.monitoring",
"worker",
"--pool=solo",
"--concurrency=1",
"--prefetch-multiplier=1",
"--loglevel=INFO",
"--hostname=monitoring@%n",
"-Q",
"monitoring",
],
"presentation": {
"group": "2",
},
"consoleTitle": "Celery monitoring Console"
"args": [
"-A",
"onyx.background.celery.versioned_apps.primary",
"worker",
"--pool=threads",
"--concurrency=4",
"--prefetch-multiplier=1",
"--loglevel=INFO",
"--hostname=primary@%n",
"-Q",
"celery"
],
"presentation": {
"group": "2"
},
{
"name": "Celery beat",
"type": "debugpy",
"request": "launch",
"module": "celery",
"cwd": "${workspaceFolder}/backend",
"envFile": "${workspaceFolder}/.vscode/.env",
"env": {
"LOG_LEVEL": "DEBUG",
"PYTHONUNBUFFERED": "1",
"PYTHONPATH": "."
},
"args": [
"-A",
"onyx.background.celery.versioned_apps.beat",
"beat",
"--loglevel=INFO",
],
"presentation": {
"group": "2",
},
"consoleTitle": "Celery beat Console"
"consoleTitle": "Celery primary Console"
},
{
"name": "Celery light",
"type": "debugpy",
"request": "launch",
"module": "celery",
"cwd": "${workspaceFolder}/backend",
"envFile": "${workspaceFolder}/.vscode/.env",
"env": {
"LOG_LEVEL": "INFO",
"PYTHONUNBUFFERED": "1",
"PYTHONPATH": "."
},
{
"name": "Pytest",
"consoleName": "Pytest",
"type": "debugpy",
"request": "launch",
"module": "pytest",
"cwd": "${workspaceFolder}/backend",
"envFile": "${workspaceFolder}/.vscode/.env",
"env": {
"LOG_LEVEL": "DEBUG",
"PYTHONUNBUFFERED": "1",
"PYTHONPATH": "."
},
"args": [
"-v"
// Specify a sepcific module/test to run or provide nothing to run all tests
//"tests/unit/onyx/llm/answering/test_prune_and_merge.py"
],
"presentation": {
"group": "2",
},
"consoleTitle": "Pytest Console"
"args": [
"-A",
"onyx.background.celery.versioned_apps.light",
"worker",
"--pool=threads",
"--concurrency=64",
"--prefetch-multiplier=8",
"--loglevel=INFO",
"--hostname=light@%n",
"-Q",
"vespa_metadata_sync,connector_deletion,doc_permissions_upsert"
],
"presentation": {
"group": "2"
},
{
// Dummy entry used to label the group
"name": "--- Tasks ---",
"type": "node",
"request": "launch",
"presentation": {
"group": "3",
"order": 0
}
},
{
"name": "Clear and Restart External Volumes and Containers",
"type": "node",
"request": "launch",
"runtimeExecutable": "bash",
"runtimeArgs": ["${workspaceFolder}/backend/scripts/restart_containers.sh"],
"cwd": "${workspaceFolder}",
"console": "integratedTerminal",
"stopOnEntry": true,
"presentation": {
"group": "3",
},
"consoleTitle": "Celery light Console"
},
{
"name": "Celery heavy",
"type": "debugpy",
"request": "launch",
"module": "celery",
"cwd": "${workspaceFolder}/backend",
"envFile": "${workspaceFolder}/.vscode/.env",
"env": {
"LOG_LEVEL": "INFO",
"PYTHONUNBUFFERED": "1",
"PYTHONPATH": "."
},
{
// Celery jobs launched through a single background script (legacy)
// Recommend using the "Celery (all)" compound launch instead.
"name": "Background Jobs",
"consoleName": "Background Jobs",
"type": "debugpy",
"request": "launch",
"program": "scripts/dev_run_background_jobs.py",
"cwd": "${workspaceFolder}/backend",
"envFile": "${workspaceFolder}/.vscode/.env",
"env": {
"LOG_DANSWER_MODEL_INTERACTIONS": "True",
"LOG_LEVEL": "DEBUG",
"PYTHONUNBUFFERED": "1",
"PYTHONPATH": "."
},
"args": [
"-A",
"onyx.background.celery.versioned_apps.heavy",
"worker",
"--pool=threads",
"--concurrency=4",
"--prefetch-multiplier=1",
"--loglevel=INFO",
"--hostname=heavy@%n",
"-Q",
"connector_pruning,connector_doc_permissions_sync,connector_external_group_sync"
],
"presentation": {
"group": "2"
},
{
"name": "Install Python Requirements",
"type": "node",
"request": "launch",
"runtimeExecutable": "bash",
"runtimeArgs": [
"-c",
"pip install -r backend/requirements/default.txt && pip install -r backend/requirements/dev.txt && pip install -r backend/requirements/ee.txt && pip install -r backend/requirements/model_server.txt"
],
"cwd": "${workspaceFolder}",
"console": "integratedTerminal",
"presentation": {
"group": "3"
}
"consoleTitle": "Celery heavy Console"
},
{
"name": "Celery docfetching",
"type": "debugpy",
"request": "launch",
"module": "celery",
"cwd": "${workspaceFolder}/backend",
"envFile": "${workspaceFolder}/.vscode/.env",
"env": {
"LOG_LEVEL": "DEBUG",
"PYTHONUNBUFFERED": "1",
"PYTHONPATH": "."
},
"args": [
"-A",
"onyx.background.celery.versioned_apps.docfetching",
"worker",
"--pool=threads",
"--concurrency=1",
"--prefetch-multiplier=1",
"--loglevel=INFO",
"--hostname=docfetching@%n",
"-Q",
"connector_doc_fetching,user_files_indexing"
],
"presentation": {
"group": "2"
},
"consoleTitle": "Celery docfetching Console",
"justMyCode": false
},
{
"name": "Celery docprocessing",
"type": "debugpy",
"request": "launch",
"module": "celery",
"cwd": "${workspaceFolder}/backend",
"envFile": "${workspaceFolder}/.vscode/.env",
"env": {
"ENABLE_MULTIPASS_INDEXING": "false",
"LOG_LEVEL": "DEBUG",
"PYTHONUNBUFFERED": "1",
"PYTHONPATH": "."
},
"args": [
"-A",
"onyx.background.celery.versioned_apps.docprocessing",
"worker",
"--pool=threads",
"--concurrency=6",
"--prefetch-multiplier=1",
"--loglevel=INFO",
"--hostname=docprocessing@%n",
"-Q",
"docprocessing"
],
"presentation": {
"group": "2"
},
"consoleTitle": "Celery docprocessing Console",
"justMyCode": false
},
{
"name": "Celery monitoring",
"type": "debugpy",
"request": "launch",
"module": "celery",
"cwd": "${workspaceFolder}/backend",
"envFile": "${workspaceFolder}/.vscode/.env",
"env": {},
"args": [
"-A",
"onyx.background.celery.versioned_apps.monitoring",
"worker",
"--pool=solo",
"--concurrency=1",
"--prefetch-multiplier=1",
"--loglevel=INFO",
"--hostname=monitoring@%n",
"-Q",
"monitoring"
],
"presentation": {
"group": "2"
},
"consoleTitle": "Celery monitoring Console"
},
{
"name": "Celery beat",
"type": "debugpy",
"request": "launch",
"module": "celery",
"cwd": "${workspaceFolder}/backend",
"envFile": "${workspaceFolder}/.vscode/.env",
"env": {
"LOG_LEVEL": "DEBUG",
"PYTHONUNBUFFERED": "1",
"PYTHONPATH": "."
},
"args": [
"-A",
"onyx.background.celery.versioned_apps.beat",
"beat",
"--loglevel=INFO"
],
"presentation": {
"group": "2"
},
"consoleTitle": "Celery beat Console"
},
{
"name": "Pytest",
"consoleName": "Pytest",
"type": "debugpy",
"request": "launch",
"module": "pytest",
"cwd": "${workspaceFolder}/backend",
"envFile": "${workspaceFolder}/.vscode/.env",
"env": {
"LOG_LEVEL": "DEBUG",
"PYTHONUNBUFFERED": "1",
"PYTHONPATH": "."
},
"args": [
"-v"
// Specify a sepcific module/test to run or provide nothing to run all tests
//"tests/unit/onyx/llm/answering/test_prune_and_merge.py"
],
"presentation": {
"group": "2"
},
"consoleTitle": "Pytest Console"
},
{
// Dummy entry used to label the group
"name": "--- Tasks ---",
"type": "node",
"request": "launch",
"presentation": {
"group": "3",
"order": 0
}
},
{
"name": "Clear and Restart External Volumes and Containers",
"type": "node",
"request": "launch",
"runtimeExecutable": "bash",
"runtimeArgs": [
"${workspaceFolder}/backend/scripts/restart_containers.sh"
],
"cwd": "${workspaceFolder}",
"console": "integratedTerminal",
"stopOnEntry": true,
"presentation": {
"group": "3"
}
},
{
// Celery jobs launched through a single background script (legacy)
// Recommend using the "Celery (all)" compound launch instead.
"name": "Background Jobs",
"consoleName": "Background Jobs",
"type": "debugpy",
"request": "launch",
"program": "scripts/dev_run_background_jobs.py",
"cwd": "${workspaceFolder}/backend",
"envFile": "${workspaceFolder}/.vscode/.env",
"env": {
"LOG_DANSWER_MODEL_INTERACTIONS": "True",
"LOG_LEVEL": "DEBUG",
"PYTHONUNBUFFERED": "1",
"PYTHONPATH": "."
}
},
{
"name": "Install Python Requirements",
"type": "node",
"request": "launch",
"runtimeExecutable": "bash",
"runtimeArgs": [
"-c",
"pip install -r backend/requirements/default.txt && pip install -r backend/requirements/dev.txt && pip install -r backend/requirements/ee.txt && pip install -r backend/requirements/model_server.txt"
],
"cwd": "${workspaceFolder}",
"console": "integratedTerminal",
"presentation": {
"group": "3"
}
},
{
// script to generate the openapi schema
"name": "Onyx OpenAPI Schema Generator",
"type": "debugpy",
"request": "launch",
"program": "scripts/onyx_openapi_schema.py",
"cwd": "${workspaceFolder}/backend",
"envFile": "${workspaceFolder}/.env",
"env": {
"PYTHONUNBUFFERED": "1",
"PYTHONPATH": "."
},
"args": [
"--filename",
"generated/openapi.json"
]
},
{
// script to debug multi tenant db issues
"name": "Onyx DB Manager (Top Chunks)",
"type": "debugpy",
"request": "launch",
"program": "scripts/debugging/onyx_db.py",
"cwd": "${workspaceFolder}/backend",
"envFile": "${workspaceFolder}/.env",
"env": {
"PYTHONUNBUFFERED": "1",
"PYTHONPATH": "."
},
"args": [
"--password",
"your_password_here",
"--port",
"5433",
"--report",
"top-chunks",
"--filename",
"generated/tenants_by_num_docs.csv"
]
},
{
"name": "Debug React Web App in Chrome",
"type": "chrome",
"request": "launch",
"url": "http://localhost:3000",
"webRoot": "${workspaceFolder}/web"
}
]
}
}

101
.vscode/tasks.template.jsonc vendored Normal file
View File

@@ -0,0 +1,101 @@
{
"version": "2.0.0",
"tasks": [
{
"type": "austin",
"label": "Profile celery beat",
"envFile": "${workspaceFolder}/.env",
"options": {
"cwd": "${workspaceFolder}/backend"
},
"command": [
"sudo",
"-E"
],
"args": [
"celery",
"-A",
"onyx.background.celery.versioned_apps.beat",
"beat",
"--loglevel=INFO"
]
},
{
"type": "shell",
"label": "Generate Onyx OpenAPI Python client",
"cwd": "${workspaceFolder}/backend",
"envFile": "${workspaceFolder}/.env",
"options": {
"cwd": "${workspaceFolder}/backend"
},
"command": [
"openapi-generator"
],
"args": [
"generate",
"-i",
"generated/openapi.json",
"-g",
"python",
"-o",
"generated/onyx_openapi_client",
"--package-name",
"onyx_openapi_client",
]
},
{
"type": "shell",
"label": "Generate Typescript Fetch client (openapi-generator)",
"envFile": "${workspaceFolder}/.env",
"options": {
"cwd": "${workspaceFolder}"
},
"command": [
"openapi-generator"
],
"args": [
"generate",
"-i",
"backend/generated/openapi.json",
"-g",
"typescript-fetch",
"-o",
"${workspaceFolder}/web/src/lib/generated/onyx_api",
"--additional-properties=disallowAdditionalPropertiesIfNotPresent=false,legacyDiscriminatorBehavior=false,supportsES6=true",
]
},
{
"type": "shell",
"label": "Generate TypeScript Client (openapi-ts)",
"envFile": "${workspaceFolder}/.env",
"options": {
"cwd": "${workspaceFolder}/web"
},
"command": [
"npx"
],
"args": [
"openapi-typescript",
"../backend/generated/openapi.json",
"--output",
"./src/lib/generated/onyx-schema.ts",
]
},
{
"type": "shell",
"label": "Generate TypeScript Client (orval)",
"envFile": "${workspaceFolder}/.env",
"options": {
"cwd": "${workspaceFolder}/web"
},
"command": [
"npx"
],
"args": [
"orval",
"--config",
"orval.config.js",
]
}
]
}

View File

@@ -1,4 +1,4 @@
<!-- DANSWER_METADATA={"link": "https://github.com/onyx-dot-app/onyx/blob/main/CONTRIBUTING.md"} -->
<!-- ONYX_METADATA={"link": "https://github.com/onyx-dot-app/onyx/blob/main/CONTRIBUTING.md"} -->
# Contributing to Onyx
@@ -12,8 +12,8 @@ As an open source project in a rapidly changing space, we welcome all contributi
The [GitHub Issues](https://github.com/onyx-dot-app/onyx/issues) page is a great place to start for contribution ideas.
To ensure that your contribution is aligned with the project's direction, please reach out to Hagen (or any other maintainer) on the Onyx team
via [Slack](https://join.slack.com/t/onyx-dot-app/shared_invite/zt-2twesxdr6-5iQitKZQpgq~hYIZ~dv3KA) /
To ensure that your contribution is aligned with the project's direction, please reach out to any maintainer on the Onyx team
via [Slack](https://join.slack.com/t/onyx-dot-app/shared_invite/zt-34lu4m7xg-TsKGO6h8PDvR5W27zTdyhA) /
[Discord](https://discord.gg/TDJ59cGV2X) or [email](mailto:founders@onyx.app).
Issues that have been explicitly approved by the maintainers (aligned with the direction of the project)
@@ -28,7 +28,7 @@ Your input is vital to making sure that Onyx moves in the right direction.
Before starting on implementation, please raise a GitHub issue.
Also, always feel free to message the founders (Chris Weaver / Yuhong Sun) on
[Slack](https://join.slack.com/t/onyx-dot-app/shared_invite/zt-2twesxdr6-5iQitKZQpgq~hYIZ~dv3KA) /
[Slack](https://join.slack.com/t/onyx-dot-app/shared_invite/zt-34lu4m7xg-TsKGO6h8PDvR5W27zTdyhA) /
[Discord](https://discord.gg/TDJ59cGV2X) directly about anything at all.
### Contributing Code
@@ -59,6 +59,7 @@ Onyx being a fully functional app, relies on some external software, specificall
- [Postgres](https://www.postgresql.org/) (Relational DB)
- [Vespa](https://vespa.ai/) (Vector DB/Search Engine)
- [Redis](https://redis.io/) (Cache)
- [MinIO](https://min.io/) (File Store)
- [Nginx](https://nginx.org/) (Not needed for development flows generally)
> **Note:**
@@ -171,10 +172,10 @@ Otherwise, you can follow the instructions below to run the application for deve
You will need Docker installed to run these containers.
First navigate to `onyx/deployment/docker_compose`, then start up Postgres/Vespa/Redis with:
First navigate to `onyx/deployment/docker_compose`, then start up Postgres/Vespa/Redis/MinIO with:
```bash
docker compose -f docker-compose.dev.yml -p onyx-stack up -d index relational_db cache
docker compose -f docker-compose.dev.yml -p onyx-stack up -d index relational_db cache minio
```
(index refers to Vespa, relational_db refers to Postgres, and cache refers to Redis)

View File

@@ -1,4 +1,4 @@
<!-- DANSWER_METADATA={"link": "https://github.com/onyx-dot-app/onyx/blob/main/README.md"} -->
<!-- ONYX_METADATA={"link": "https://github.com/onyx-dot-app/onyx/blob/main/README.md"} -->
<a name="readme-top"></a>
@@ -13,7 +13,7 @@
<a href="https://docs.onyx.app/" target="_blank">
<img src="https://img.shields.io/badge/docs-view-blue" alt="Documentation">
</a>
<a href="https://join.slack.com/t/onyx-dot-app/shared_invite/zt-2twesxdr6-5iQitKZQpgq~hYIZ~dv3KA" target="_blank">
<a href="https://join.slack.com/t/onyx-dot-app/shared_invite/zt-34lu4m7xg-TsKGO6h8PDvR5W27zTdyhA" target="_blank">
<img src="https://img.shields.io/badge/slack-join-blue.svg?logo=slack" alt="Slack">
</a>
<a href="https://discord.gg/TDJ59cGV2X" target="_blank">
@@ -114,3 +114,4 @@ To try the Onyx Enterprise Edition:
## 💡 Contributing
Looking to contribute? Please check out the [Contribution Guide](CONTRIBUTING.md) for more details.

4
backend/.gitignore vendored
View File

@@ -9,4 +9,6 @@ api_keys.py
vespa-app.zip
dynamic_config_storage/
celerybeat-schedule*
onyx/connectors/salesforce/data/
onyx/connectors/salesforce/data/
.test.env
/generated

View File

@@ -8,7 +8,7 @@ Edition features outside of personal development or testing purposes. Please rea
founders@onyx.app for more information. Please visit https://github.com/onyx-dot-app/onyx"
# Default ONYX_VERSION, typically overriden during builds by GitHub Actions.
ARG ONYX_VERSION=0.8-dev
ARG ONYX_VERSION=0.0.0-dev
# DO_NOT_TRACK is used to disable telemetry for Unstructured
ENV ONYX_VERSION=${ONYX_VERSION} \
DANSWER_RUNNING_IN_DOCKER="true" \
@@ -77,6 +77,9 @@ RUN apt-get update && \
rm -rf /var/lib/apt/lists/* && \
rm -f /usr/local/lib/python3.11/site-packages/tornado/test/test.key
# Install postgresql-client for easy manual tests
# Install it here to avoid it being cleaned up above
RUN apt-get update && apt-get install -y postgresql-client
# Pre-downloading models for setups with limited egress
RUN python -c "from tokenizers import Tokenizer; \
@@ -85,7 +88,7 @@ Tokenizer.from_pretrained('nomic-ai/nomic-embed-text-v1')"
# Pre-downloading NLTK for setups with limited egress
RUN python -c "import nltk; \
nltk.download('stopwords', quiet=True); \
nltk.download('punkt', quiet=True);"
nltk.download('punkt_tab', quiet=True);"
# nltk.download('wordnet', quiet=True); introduce this back if lemmatization is needed
# Set up application files
@@ -102,6 +105,7 @@ COPY ./alembic /app/alembic
COPY ./alembic_tenants /app/alembic_tenants
COPY ./alembic.ini /app/alembic.ini
COPY supervisord.conf /usr/etc/supervisord.conf
COPY ./static /app/static
# Escape hatch scripts
COPY ./scripts/debugging /app/scripts/debugging

View File

@@ -7,7 +7,7 @@ You can find it at https://hub.docker.com/r/onyx/onyx-model-server. For more det
visit https://github.com/onyx-dot-app/onyx."
# Default ONYX_VERSION, typically overriden during builds by GitHub Actions.
ARG ONYX_VERSION=0.8-dev
ARG ONYX_VERSION=0.0.0-dev
ENV ONYX_VERSION=${ONYX_VERSION} \
DANSWER_RUNNING_IN_DOCKER="true"
@@ -31,7 +31,8 @@ RUN python -c "from transformers import AutoTokenizer; \
AutoTokenizer.from_pretrained('distilbert-base-uncased'); \
AutoTokenizer.from_pretrained('mixedbread-ai/mxbai-rerank-xsmall-v1'); \
from huggingface_hub import snapshot_download; \
snapshot_download(repo_id='danswer/hybrid-intent-token-classifier', revision='v1.0.3'); \
snapshot_download(repo_id='onyx-dot-app/hybrid-intent-token-classifier'); \
snapshot_download(repo_id='onyx-dot-app/information-content-model'); \
snapshot_download('nomic-ai/nomic-embed-text-v1'); \
snapshot_download('mixedbread-ai/mxbai-rerank-xsmall-v1'); \
from sentence_transformers import SentenceTransformer; \
@@ -45,6 +46,7 @@ WORKDIR /app
# Utils used by model server
COPY ./onyx/utils/logger.py /app/onyx/utils/logger.py
COPY ./onyx/utils/middleware.py /app/onyx/utils/middleware.py
# Place to fetch version information
COPY ./onyx/__init__.py /app/onyx/__init__.py

View File

@@ -84,7 +84,7 @@ keys = console
keys = generic
[logger_root]
level = WARN
level = INFO
handlers = console
qualname =

View File

@@ -1,4 +1,4 @@
<!-- DANSWER_METADATA={"link": "https://github.com/onyx-dot-app/onyx/blob/main/backend/alembic/README.md"} -->
<!-- ONYX_METADATA={"link": "https://github.com/onyx-dot-app/onyx/blob/main/backend/alembic/README.md"} -->
# Alembic DB Migrations
@@ -20,3 +20,44 @@ To run all un-applied migrations:
To undo migrations:
`alembic downgrade -X`
where X is the number of migrations you want to undo from the current state
### Multi-tenant migrations
For multi-tenant deployments, you can use additional options:
**Upgrade all tenants:**
```bash
alembic -x upgrade_all_tenants=true upgrade head
```
**Upgrade specific schemas:**
```bash
# Single schema
alembic -x schemas=tenant_12345678-1234-1234-1234-123456789012 upgrade head
# Multiple schemas (comma-separated)
alembic -x schemas=tenant_12345678-1234-1234-1234-123456789012,public,another_tenant upgrade head
```
**Upgrade tenants within an alphabetical range:**
```bash
# Upgrade tenants 100-200 when sorted alphabetically (positions 100 to 200)
alembic -x upgrade_all_tenants=true -x tenant_range_start=100 -x tenant_range_end=200 upgrade head
# Upgrade tenants starting from position 1000 alphabetically
alembic -x upgrade_all_tenants=true -x tenant_range_start=1000 upgrade head
# Upgrade first 500 tenants alphabetically
alembic -x upgrade_all_tenants=true -x tenant_range_end=500 upgrade head
```
**Continue on error (for batch operations):**
```bash
alembic -x upgrade_all_tenants=true -x continue=true upgrade head
```
The tenant range filtering works by:
1. Sorting tenant IDs alphabetically
2. Using 1-based position numbers (1st, 2nd, 3rd tenant, etc.)
3. Filtering to the specified range of positions
4. Non-tenant schemas (like 'public') are always included

View File

@@ -1,12 +1,12 @@
from typing import Any, Literal
from onyx.db.engine import get_iam_auth_token
from onyx.db.engine.iam_auth import get_iam_auth_token
from onyx.configs.app_configs import USE_IAM_AUTH
from onyx.configs.app_configs import POSTGRES_HOST
from onyx.configs.app_configs import POSTGRES_PORT
from onyx.configs.app_configs import POSTGRES_USER
from onyx.configs.app_configs import AWS_REGION_NAME
from onyx.db.engine import build_connection_string
from onyx.db.engine import get_all_tenant_ids
from onyx.db.engine.sql_engine import build_connection_string
from onyx.db.engine.tenant_utils import get_all_tenant_ids
from sqlalchemy import event
from sqlalchemy import pool
from sqlalchemy import text
@@ -21,9 +21,17 @@ from alembic import context
from sqlalchemy.ext.asyncio import create_async_engine
from sqlalchemy.sql.schema import SchemaItem
from onyx.configs.constants import SSL_CERT_FILE
from shared_configs.configs import MULTI_TENANT, POSTGRES_DEFAULT_SCHEMA
from shared_configs.configs import (
MULTI_TENANT,
POSTGRES_DEFAULT_SCHEMA,
TENANT_ID_PREFIX,
)
from onyx.db.models import Base
from celery.backends.database.session import ResultModelBase # type: ignore
from onyx.db.engine.sql_engine import SqlEngine
# Make sure in alembic.ini [logger_root] level=INFO is set or most logging will be
# hidden! (defaults to level=WARN)
# Alembic Config object
config = context.config
@@ -36,6 +44,7 @@ if config.config_file_name is not None and config.attributes.get(
target_metadata = [Base.metadata, ResultModelBase.metadata]
EXCLUDE_TABLES = {"kombu_queue", "kombu_message"}
logger = logging.getLogger(__name__)
ssl_context: ssl.SSLContext | None = None
@@ -64,36 +73,154 @@ def include_object(
return True
def get_schema_options() -> tuple[str, bool, bool]:
def filter_tenants_by_range(
tenant_ids: list[str], start_range: int | None = None, end_range: int | None = None
) -> list[str]:
"""
Filter tenant IDs by alphabetical position range.
Args:
tenant_ids: List of tenant IDs to filter
start_range: Starting position in alphabetically sorted list (1-based, inclusive)
end_range: Ending position in alphabetically sorted list (1-based, inclusive)
Returns:
Filtered list of tenant IDs in their original order
"""
if start_range is None and end_range is None:
return tenant_ids
# Separate tenant IDs from non-tenant schemas
tenant_schemas = [tid for tid in tenant_ids if tid.startswith(TENANT_ID_PREFIX)]
non_tenant_schemas = [
tid for tid in tenant_ids if not tid.startswith(TENANT_ID_PREFIX)
]
# Sort tenant schemas alphabetically.
# NOTE: can cause missed schemas if a schema is created in between workers
# fetching of all tenant IDs. We accept this risk for now. Just re-running
# the migration will fix the issue.
sorted_tenant_schemas = sorted(tenant_schemas)
# Apply range filtering (0-based indexing)
start_idx = start_range if start_range is not None else 0
end_idx = end_range if end_range is not None else len(sorted_tenant_schemas)
# Ensure indices are within bounds
start_idx = max(0, start_idx)
end_idx = min(len(sorted_tenant_schemas), end_idx)
# Get the filtered tenant schemas
filtered_tenant_schemas = sorted_tenant_schemas[start_idx:end_idx]
# Combine with non-tenant schemas and preserve original order
filtered_tenants = []
for tenant_id in tenant_ids:
if tenant_id in filtered_tenant_schemas or tenant_id in non_tenant_schemas:
filtered_tenants.append(tenant_id)
return filtered_tenants
def get_schema_options() -> (
tuple[bool, bool, bool, int | None, int | None, list[str] | None]
):
x_args_raw = context.get_x_argument()
x_args = {}
for arg in x_args_raw:
for pair in arg.split(","):
if "=" in pair:
key, value = pair.split("=", 1)
x_args[key.strip()] = value.strip()
schema_name = x_args.get("schema", POSTGRES_DEFAULT_SCHEMA)
if "=" in arg:
key, value = arg.split("=", 1)
x_args[key.strip()] = value.strip()
else:
raise ValueError(f"Invalid argument: {arg}")
create_schema = x_args.get("create_schema", "true").lower() == "true"
upgrade_all_tenants = x_args.get("upgrade_all_tenants", "false").lower() == "true"
if (
MULTI_TENANT
and schema_name == POSTGRES_DEFAULT_SCHEMA
and not upgrade_all_tenants
):
# continue on error with individual tenant
# only applies to online migrations
continue_on_error = x_args.get("continue", "false").lower() == "true"
# Tenant range filtering
tenant_range_start = None
tenant_range_end = None
if "tenant_range_start" in x_args:
try:
tenant_range_start = int(x_args["tenant_range_start"])
except ValueError:
raise ValueError(
f"Invalid tenant_range_start value: {x_args['tenant_range_start']}. Must be an integer."
)
if "tenant_range_end" in x_args:
try:
tenant_range_end = int(x_args["tenant_range_end"])
except ValueError:
raise ValueError(
f"Invalid tenant_range_end value: {x_args['tenant_range_end']}. Must be an integer."
)
# Validate range
if tenant_range_start is not None and tenant_range_end is not None:
if tenant_range_start > tenant_range_end:
raise ValueError(
f"tenant_range_start ({tenant_range_start}) cannot be greater than tenant_range_end ({tenant_range_end})"
)
# Specific schema names filtering (replaces both schema_name and the old tenant_ids approach)
schemas = None
if "schemas" in x_args:
schema_names_str = x_args["schemas"].strip()
if schema_names_str:
# Split by comma and strip whitespace
schemas = [
name.strip() for name in schema_names_str.split(",") if name.strip()
]
if schemas:
logger.info(f"Specific schema names specified: {schemas}")
# Validate that only one method is used at a time
range_filtering = tenant_range_start is not None or tenant_range_end is not None
specific_filtering = schemas is not None and len(schemas) > 0
if range_filtering and specific_filtering:
raise ValueError(
"Cannot run default migrations in public schema when multi-tenancy is enabled. "
"Please specify a tenant-specific schema."
"Cannot use both tenant range filtering (tenant_range_start/tenant_range_end) "
"and specific schema filtering (schemas) at the same time. "
"Please use only one filtering method."
)
return schema_name, create_schema, upgrade_all_tenants
if upgrade_all_tenants and specific_filtering:
raise ValueError(
"Cannot use both upgrade_all_tenants=true and schemas at the same time. "
"Use either upgrade_all_tenants=true for all tenants, or schemas for specific schemas."
)
# If any filtering parameters are specified, we're not doing the default single schema migration
if range_filtering:
upgrade_all_tenants = True
# Validate multi-tenant requirements
if MULTI_TENANT and not upgrade_all_tenants and not specific_filtering:
raise ValueError(
"In multi-tenant mode, you must specify either upgrade_all_tenants=true "
"or provide schemas. Cannot run default migration."
)
return (
create_schema,
upgrade_all_tenants,
continue_on_error,
tenant_range_start,
tenant_range_end,
schemas,
)
def do_run_migrations(
connection: Connection, schema_name: str, create_schema: bool
) -> None:
logger.info(f"About to migrate schema: {schema_name}")
if create_schema:
connection.execute(text(f'CREATE SCHEMA IF NOT EXISTS "{schema_name}"'))
connection.execute(text("COMMIT"))
@@ -134,7 +261,20 @@ def provide_iam_token_for_alembic(
async def run_async_migrations() -> None:
schema_name, create_schema, upgrade_all_tenants = get_schema_options()
(
create_schema,
upgrade_all_tenants,
continue_on_error,
tenant_range_start,
tenant_range_end,
schemas,
) = get_schema_options()
if not schemas and not MULTI_TENANT:
schemas = [POSTGRES_DEFAULT_SCHEMA]
# without init_engine, subsequent engine calls fail hard intentionally
SqlEngine.init_engine(pool_size=20, max_overflow=5)
engine = create_async_engine(
build_connection_string(),
@@ -149,11 +289,18 @@ async def run_async_migrations() -> None:
) -> None:
provide_iam_token_for_alembic(dialect, conn_rec, cargs, cparams)
if upgrade_all_tenants:
tenant_schemas = get_all_tenant_ids()
for schema in tenant_schemas:
if schemas:
# Use specific schema names directly without fetching all tenants
logger.info(f"Migrating specific schema names: {schemas}")
i_schema = 0
num_schemas = len(schemas)
for schema in schemas:
i_schema += 1
logger.info(
f"Migrating schema: index={i_schema} num_schemas={num_schemas} schema={schema}"
)
try:
logger.info(f"Migrating schema: {schema}")
async with engine.connect() as connection:
await connection.run_sync(
do_run_migrations,
@@ -162,28 +309,108 @@ async def run_async_migrations() -> None:
)
except Exception as e:
logger.error(f"Error migrating schema {schema}: {e}")
raise
if not continue_on_error:
logger.error("--continue=true is not set, raising exception!")
raise
logger.warning("--continue=true is set, continuing to next schema.")
elif upgrade_all_tenants:
tenant_schemas = get_all_tenant_ids()
filtered_tenant_schemas = filter_tenants_by_range(
tenant_schemas, tenant_range_start, tenant_range_end
)
if tenant_range_start is not None or tenant_range_end is not None:
logger.info(
f"Filtering tenants by range: start={tenant_range_start}, end={tenant_range_end}"
)
logger.info(
f"Total tenants: {len(tenant_schemas)}, Filtered tenants: {len(filtered_tenant_schemas)}"
)
i_tenant = 0
num_tenants = len(filtered_tenant_schemas)
for schema in filtered_tenant_schemas:
i_tenant += 1
logger.info(
f"Migrating schema: index={i_tenant} num_tenants={num_tenants} schema={schema}"
)
try:
async with engine.connect() as connection:
await connection.run_sync(
do_run_migrations,
schema_name=schema,
create_schema=create_schema,
)
except Exception as e:
logger.error(f"Error migrating schema {schema}: {e}")
if not continue_on_error:
logger.error("--continue=true is not set, raising exception!")
raise
logger.warning("--continue=true is set, continuing to next schema.")
else:
try:
logger.info(f"Migrating schema: {schema_name}")
async with engine.connect() as connection:
await connection.run_sync(
do_run_migrations,
schema_name=schema_name,
create_schema=create_schema,
)
except Exception as e:
logger.error(f"Error migrating schema {schema_name}: {e}")
raise
# This should not happen in the new design since we require either
# upgrade_all_tenants=true or schemas in multi-tenant mode
# and for non-multi-tenant mode, we should use schemas with the default schema
raise ValueError(
"No migration target specified. Use either upgrade_all_tenants=true for all tenants "
"or schemas for specific schemas."
)
await engine.dispose()
def run_migrations_offline() -> None:
schema_name, _, upgrade_all_tenants = get_schema_options()
"""
NOTE(rkuo): This generates a sql script that can be used to migrate the database ...
instead of migrating the db live via an open connection
Not clear on when this would be used by us or if it even works.
If it is offline, then why are there calls to the db engine?
This doesn't really get used when we migrate in the cloud."""
logger.info("run_migrations_offline starting.")
# without init_engine, subsequent engine calls fail hard intentionally
SqlEngine.init_engine(pool_size=20, max_overflow=5)
(
create_schema,
upgrade_all_tenants,
continue_on_error,
tenant_range_start,
tenant_range_end,
schemas,
) = get_schema_options()
url = build_connection_string()
if upgrade_all_tenants:
if schemas:
# Use specific schema names directly without fetching all tenants
logger.info(f"Migrating specific schema names: {schemas}")
for schema in schemas:
logger.info(f"Migrating schema: {schema}")
context.configure(
url=url,
target_metadata=target_metadata, # type: ignore
literal_binds=True,
include_object=include_object,
version_table_schema=schema,
include_schemas=True,
script_location=config.get_main_option("script_location"),
dialect_opts={"paramstyle": "named"},
)
with context.begin_transaction():
context.run_migrations()
elif upgrade_all_tenants:
engine = create_async_engine(url)
if USE_IAM_AUTH:
@@ -197,7 +424,19 @@ def run_migrations_offline() -> None:
tenant_schemas = get_all_tenant_ids()
engine.sync_engine.dispose()
for schema in tenant_schemas:
filtered_tenant_schemas = filter_tenants_by_range(
tenant_schemas, tenant_range_start, tenant_range_end
)
if tenant_range_start is not None or tenant_range_end is not None:
logger.info(
f"Filtering tenants by range: start={tenant_range_start}, end={tenant_range_end}"
)
logger.info(
f"Total tenants: {len(tenant_schemas)}, Filtered tenants: {len(filtered_tenant_schemas)}"
)
for schema in filtered_tenant_schemas:
logger.info(f"Migrating schema: {schema}")
context.configure(
url=url,
@@ -213,23 +452,15 @@ def run_migrations_offline() -> None:
with context.begin_transaction():
context.run_migrations()
else:
logger.info(f"Migrating schema: {schema_name}")
context.configure(
url=url,
target_metadata=target_metadata, # type: ignore
literal_binds=True,
include_object=include_object,
version_table_schema=schema_name,
include_schemas=True,
script_location=config.get_main_option("script_location"),
dialect_opts={"paramstyle": "named"},
# This should not happen in the new design
raise ValueError(
"No migration target specified. Use either upgrade_all_tenants=true for all tenants "
"or schemas for specific schemas."
)
with context.begin_transaction():
context.run_migrations()
def run_migrations_online() -> None:
logger.info("run_migrations_online starting.")
asyncio.run(run_async_migrations())

View File

@@ -5,6 +5,7 @@ Revises: 6fc7886d665d
Create Date: 2025-01-14 12:14:00.814390
"""
from alembic import op
import sqlalchemy as sa

View File

@@ -0,0 +1,121 @@
"""rework-kg-config
Revision ID: 03bf8be6b53a
Revises: 65bc6e0f8500
Create Date: 2025-06-16 10:52:34.815335
"""
import json
from datetime import datetime
from datetime import timedelta
from sqlalchemy.dialects import postgresql
from sqlalchemy import text
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = "03bf8be6b53a"
down_revision = "65bc6e0f8500"
branch_labels = None
depends_on = None
def upgrade() -> None:
# get current config
current_configs = (
op.get_bind()
.execute(text("SELECT kg_variable_name, kg_variable_values FROM kg_config"))
.all()
)
current_config_dict = {
config.kg_variable_name: (
config.kg_variable_values[0]
if config.kg_variable_name
not in ("KG_VENDOR_DOMAINS", "KG_IGNORE_EMAIL_DOMAINS")
else config.kg_variable_values
)
for config in current_configs
if config.kg_variable_values
}
# not using the KGConfigSettings model here in case it changes in the future
kg_config_settings = json.dumps(
{
"KG_EXPOSED": current_config_dict.get("KG_EXPOSED", False),
"KG_ENABLED": current_config_dict.get("KG_ENABLED", False),
"KG_VENDOR": current_config_dict.get("KG_VENDOR", None),
"KG_VENDOR_DOMAINS": current_config_dict.get("KG_VENDOR_DOMAINS", []),
"KG_IGNORE_EMAIL_DOMAINS": current_config_dict.get(
"KG_IGNORE_EMAIL_DOMAINS", []
),
"KG_COVERAGE_START": current_config_dict.get(
"KG_COVERAGE_START",
(datetime.now() - timedelta(days=90)).strftime("%Y-%m-%d"),
),
"KG_MAX_COVERAGE_DAYS": current_config_dict.get("KG_MAX_COVERAGE_DAYS", 90),
"KG_MAX_PARENT_RECURSION_DEPTH": current_config_dict.get(
"KG_MAX_PARENT_RECURSION_DEPTH", 2
),
"KG_BETA_PERSONA_ID": current_config_dict.get("KG_BETA_PERSONA_ID", None),
}
)
op.execute(
f"INSERT INTO key_value_store (key, value) VALUES ('kg_config', '{kg_config_settings}')"
)
# drop kg config table
op.drop_table("kg_config")
def downgrade() -> None:
# get current config
current_config_dict = {
"KG_EXPOSED": False,
"KG_ENABLED": False,
"KG_VENDOR": [],
"KG_VENDOR_DOMAINS": [],
"KG_IGNORE_EMAIL_DOMAINS": [],
"KG_COVERAGE_START": (datetime.now() - timedelta(days=90)).strftime("%Y-%m-%d"),
"KG_MAX_COVERAGE_DAYS": 90,
"KG_MAX_PARENT_RECURSION_DEPTH": 2,
}
current_configs = (
op.get_bind()
.execute(text("SELECT value FROM key_value_store WHERE key = 'kg_config'"))
.one_or_none()
)
if current_configs is not None:
current_config_dict.update(current_configs[0])
insert_values = [
{
"kg_variable_name": name,
"kg_variable_values": (
[str(val).lower() if isinstance(val, bool) else str(val)]
if not isinstance(val, list)
else val
),
}
for name, val in current_config_dict.items()
]
op.create_table(
"kg_config",
sa.Column("id", sa.Integer(), primary_key=True, nullable=False, index=True),
sa.Column("kg_variable_name", sa.String(), nullable=False, index=True),
sa.Column("kg_variable_values", postgresql.ARRAY(sa.String()), nullable=False),
sa.UniqueConstraint("kg_variable_name", name="uq_kg_config_variable_name"),
)
op.bulk_insert(
sa.table(
"kg_config",
sa.column("kg_variable_name", sa.String),
sa.column("kg_variable_values", postgresql.ARRAY(sa.String)),
),
insert_values,
)
op.execute("DELETE FROM key_value_store WHERE key = 'kg_config'")

View File

@@ -0,0 +1,72 @@
"""add federated connector tables
Revision ID: 0816326d83aa
Revises: 12635f6655b7
Create Date: 2025-06-29 14:09:45.109518
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql
# revision identifiers, used by Alembic.
revision = "0816326d83aa"
down_revision = "12635f6655b7"
branch_labels = None
depends_on = None
def upgrade() -> None:
# Create federated_connector table
op.create_table(
"federated_connector",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("source", sa.String(), nullable=False),
sa.Column("credentials", sa.LargeBinary(), nullable=False),
sa.PrimaryKeyConstraint("id"),
)
# Create federated_connector_oauth_token table
op.create_table(
"federated_connector_oauth_token",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("federated_connector_id", sa.Integer(), nullable=False),
sa.Column("user_id", postgresql.UUID(as_uuid=True), nullable=False),
sa.Column("token", sa.LargeBinary(), nullable=False),
sa.Column("expires_at", sa.DateTime(), nullable=True),
sa.ForeignKeyConstraint(
["federated_connector_id"], ["federated_connector.id"], ondelete="CASCADE"
),
sa.ForeignKeyConstraint(["user_id"], ["user.id"], ondelete="CASCADE"),
sa.PrimaryKeyConstraint("id"),
)
# Create federated_connector__document_set table
op.create_table(
"federated_connector__document_set",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("federated_connector_id", sa.Integer(), nullable=False),
sa.Column("document_set_id", sa.Integer(), nullable=False),
sa.Column("entities", postgresql.JSONB(), nullable=False),
sa.ForeignKeyConstraint(
["federated_connector_id"], ["federated_connector.id"], ondelete="CASCADE"
),
sa.ForeignKeyConstraint(
["document_set_id"], ["document_set.id"], ondelete="CASCADE"
),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint(
"federated_connector_id",
"document_set_id",
name="uq_federated_connector_document_set",
),
)
def downgrade() -> None:
# Drop tables in reverse order due to foreign key dependencies
op.drop_table("federated_connector__document_set")
op.drop_table("federated_connector_oauth_token")
op.drop_table("federated_connector")

View File

@@ -5,6 +5,7 @@ Revises: 8a87bd6ec550
Create Date: 2024-07-23 11:12:39.462397
"""
from alembic import op
import sqlalchemy as sa

View File

@@ -5,6 +5,7 @@ Revises: 5f4b8568a221
Create Date: 2024-03-02 23:23:49.960309
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql

View File

@@ -5,6 +5,7 @@ Revises: 570282d33c49
Create Date: 2024-05-05 19:30:34.317972
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.sql import table

View File

@@ -5,6 +5,7 @@ Revises: 52a219fb5233
Create Date: 2024-09-10 15:03:48.233926
"""
from alembic import op
import sqlalchemy as sa

View File

@@ -5,6 +5,7 @@ Revises: 369644546676
Create Date: 2025-01-10 14:01:14.067144
"""
from alembic import op
# revision identifiers, used by Alembic.

View File

@@ -0,0 +1,596 @@
"""drive-canonical-ids
Revision ID: 12635f6655b7
Revises: 58c50ef19f08
Create Date: 2025-06-20 14:44:54.241159
"""
from alembic import op
import sqlalchemy as sa
from urllib.parse import urlparse, urlunparse
from httpx import HTTPStatusError
import httpx
from onyx.document_index.factory import get_default_document_index
from onyx.db.search_settings import SearchSettings
from onyx.document_index.vespa.shared_utils.utils import get_vespa_http_client
from onyx.document_index.vespa.shared_utils.utils import (
replace_invalid_doc_id_characters,
)
from onyx.document_index.vespa_constants import DOCUMENT_ID_ENDPOINT
from onyx.utils.logger import setup_logger
import os
logger = setup_logger()
# revision identifiers, used by Alembic.
revision = "12635f6655b7"
down_revision = "58c50ef19f08"
branch_labels = None
depends_on = None
SKIP_CANON_DRIVE_IDS = os.environ.get("SKIP_CANON_DRIVE_IDS", "true").lower() == "true"
def active_search_settings() -> tuple[SearchSettings, SearchSettings | None]:
result = op.get_bind().execute(
sa.text(
"""
SELECT * FROM search_settings WHERE status = 'PRESENT' ORDER BY id DESC LIMIT 1
"""
)
)
search_settings_fetch = result.fetchall()
search_settings = (
SearchSettings(**search_settings_fetch[0]._asdict())
if search_settings_fetch
else None
)
result2 = op.get_bind().execute(
sa.text(
"""
SELECT * FROM search_settings WHERE status = 'FUTURE' ORDER BY id DESC LIMIT 1
"""
)
)
search_settings_future_fetch = result2.fetchall()
search_settings_future = (
SearchSettings(**search_settings_future_fetch[0]._asdict())
if search_settings_future_fetch
else None
)
if not isinstance(search_settings, SearchSettings):
raise RuntimeError(
"current search settings is of type " + str(type(search_settings))
)
if (
not isinstance(search_settings_future, SearchSettings)
and search_settings_future is not None
):
raise RuntimeError(
"future search settings is of type " + str(type(search_settings_future))
)
return search_settings, search_settings_future
def normalize_google_drive_url(url: str) -> str:
"""Remove query parameters from Google Drive URLs to create canonical document IDs.
NOTE: copied from drive doc_conversion.py
"""
parsed_url = urlparse(url)
parsed_url = parsed_url._replace(query="")
spl_path = parsed_url.path.split("/")
if spl_path and (spl_path[-1] in ["edit", "view", "preview"]):
spl_path.pop()
parsed_url = parsed_url._replace(path="/".join(spl_path))
# Remove query parameters and reconstruct URL
return urlunparse(parsed_url)
def get_google_drive_documents_from_database() -> list[dict]:
"""Get all Google Drive documents from the database."""
bind = op.get_bind()
result = bind.execute(
sa.text(
"""
SELECT d.id
FROM document d
JOIN document_by_connector_credential_pair dcc ON d.id = dcc.id
JOIN connector_credential_pair cc ON dcc.connector_id = cc.connector_id
AND dcc.credential_id = cc.credential_id
JOIN connector c ON cc.connector_id = c.id
WHERE c.source = 'GOOGLE_DRIVE'
"""
)
)
documents = []
for row in result:
documents.append({"document_id": row.id})
return documents
def update_document_id_in_database(
old_doc_id: str, new_doc_id: str, index_name: str
) -> None:
"""Update document IDs in all relevant database tables using copy-and-swap approach."""
bind = op.get_bind()
# print(f"Updating database tables for document {old_doc_id} -> {new_doc_id}")
# Check if new document ID already exists
result = bind.execute(
sa.text("SELECT COUNT(*) FROM document WHERE id = :new_id"),
{"new_id": new_doc_id},
)
row = result.fetchone()
if row and row[0] > 0:
# print(f"Document with ID {new_doc_id} already exists, deleting old one")
delete_document_from_db(old_doc_id, index_name)
return
# Step 1: Create a new document row with the new ID (copy all fields from old row)
# Use a conservative approach to handle columns that might not exist in all installations
try:
bind.execute(
sa.text(
"""
INSERT INTO document (id, from_ingestion_api, boost, hidden, semantic_id,
link, doc_updated_at, primary_owners, secondary_owners,
external_user_emails, external_user_group_ids, is_public,
chunk_count, last_modified, last_synced, kg_stage, kg_processing_time)
SELECT :new_id, from_ingestion_api, boost, hidden, semantic_id,
link, doc_updated_at, primary_owners, secondary_owners,
external_user_emails, external_user_group_ids, is_public,
chunk_count, last_modified, last_synced, kg_stage, kg_processing_time
FROM document
WHERE id = :old_id
"""
),
{"new_id": new_doc_id, "old_id": old_doc_id},
)
# print(f"Successfully updated database tables for document {old_doc_id} -> {new_doc_id}")
except Exception as e:
# If the full INSERT fails, try a more basic version with only core columns
logger.warning(f"Full INSERT failed, trying basic version: {e}")
bind.execute(
sa.text(
"""
INSERT INTO document (id, from_ingestion_api, boost, hidden, semantic_id,
link, doc_updated_at, primary_owners, secondary_owners)
SELECT :new_id, from_ingestion_api, boost, hidden, semantic_id,
link, doc_updated_at, primary_owners, secondary_owners
FROM document
WHERE id = :old_id
"""
),
{"new_id": new_doc_id, "old_id": old_doc_id},
)
# Step 2: Update all foreign key references to point to the new ID
# Update document_by_connector_credential_pair table
bind.execute(
sa.text(
"UPDATE document_by_connector_credential_pair SET id = :new_id WHERE id = :old_id"
),
{"new_id": new_doc_id, "old_id": old_doc_id},
)
# print(f"Successfully updated document_by_connector_credential_pair table for document {old_doc_id} -> {new_doc_id}")
# Update search_doc table (stores search results for chat replay)
# This is critical for agent functionality
bind.execute(
sa.text(
"UPDATE search_doc SET document_id = :new_id WHERE document_id = :old_id"
),
{"new_id": new_doc_id, "old_id": old_doc_id},
)
# print(f"Successfully updated search_doc table for document {old_doc_id} -> {new_doc_id}")
# Update document_retrieval_feedback table (user feedback on documents)
bind.execute(
sa.text(
"UPDATE document_retrieval_feedback SET document_id = :new_id WHERE document_id = :old_id"
),
{"new_id": new_doc_id, "old_id": old_doc_id},
)
# print(f"Successfully updated document_retrieval_feedback table for document {old_doc_id} -> {new_doc_id}")
# Update document__tag table (document-tag relationships)
bind.execute(
sa.text(
"UPDATE document__tag SET document_id = :new_id WHERE document_id = :old_id"
),
{"new_id": new_doc_id, "old_id": old_doc_id},
)
# print(f"Successfully updated document__tag table for document {old_doc_id} -> {new_doc_id}")
# Update user_file table (user uploaded files linked to documents)
bind.execute(
sa.text(
"UPDATE user_file SET document_id = :new_id WHERE document_id = :old_id"
),
{"new_id": new_doc_id, "old_id": old_doc_id},
)
# print(f"Successfully updated user_file table for document {old_doc_id} -> {new_doc_id}")
# Update KG and chunk_stats tables (these may not exist in all installations)
try:
# Update kg_entity table
bind.execute(
sa.text(
"UPDATE kg_entity SET document_id = :new_id WHERE document_id = :old_id"
),
{"new_id": new_doc_id, "old_id": old_doc_id},
)
# print(f"Successfully updated kg_entity table for document {old_doc_id} -> {new_doc_id}")
# Update kg_entity_extraction_staging table
bind.execute(
sa.text(
"UPDATE kg_entity_extraction_staging SET document_id = :new_id WHERE document_id = :old_id"
),
{"new_id": new_doc_id, "old_id": old_doc_id},
)
# print(f"Successfully updated kg_entity_extraction_staging table for document {old_doc_id} -> {new_doc_id}")
# Update kg_relationship table
bind.execute(
sa.text(
"UPDATE kg_relationship SET source_document = :new_id WHERE source_document = :old_id"
),
{"new_id": new_doc_id, "old_id": old_doc_id},
)
# print(f"Successfully updated kg_relationship table for document {old_doc_id} -> {new_doc_id}")
# Update kg_relationship_extraction_staging table
bind.execute(
sa.text(
"UPDATE kg_relationship_extraction_staging SET source_document = :new_id WHERE source_document = :old_id"
),
{"new_id": new_doc_id, "old_id": old_doc_id},
)
# print(f"Successfully updated kg_relationship_extraction_staging table for document {old_doc_id} -> {new_doc_id}")
# Update chunk_stats table
bind.execute(
sa.text(
"UPDATE chunk_stats SET document_id = :new_id WHERE document_id = :old_id"
),
{"new_id": new_doc_id, "old_id": old_doc_id},
)
# print(f"Successfully updated chunk_stats table for document {old_doc_id} -> {new_doc_id}")
# Update chunk_stats ID field which includes document_id
bind.execute(
sa.text(
"""
UPDATE chunk_stats
SET id = REPLACE(id, :old_id, :new_id)
WHERE id LIKE :old_id_pattern
"""
),
{
"new_id": new_doc_id,
"old_id": old_doc_id,
"old_id_pattern": f"{old_doc_id}__%",
},
)
# print(f"Successfully updated chunk_stats ID field for document {old_doc_id} -> {new_doc_id}")
except Exception as e:
logger.warning(f"Some KG/chunk tables may not exist or failed to update: {e}")
# Step 3: Delete the old document row (this should now be safe since all FKs point to new row)
bind.execute(
sa.text("DELETE FROM document WHERE id = :old_id"), {"old_id": old_doc_id}
)
# print(f"Successfully deleted document {old_doc_id} from database")
def _visit_chunks(
*,
http_client: httpx.Client,
index_name: str,
selection: str,
continuation: str | None = None,
) -> tuple[list[dict], str | None]:
"""Helper that calls the /document/v1 visit API once and returns (docs, next_token)."""
# Use the same URL as the document API, but with visit-specific params
base_url = DOCUMENT_ID_ENDPOINT.format(index_name=index_name)
params: dict[str, str] = {
"selection": selection,
"wantedDocumentCount": "1000",
}
if continuation:
params["continuation"] = continuation
# print(f"Visiting chunks for selection '{selection}' with params {params}")
resp = http_client.get(base_url, params=params, timeout=None)
# print(f"Visited chunks for document {selection}")
resp.raise_for_status()
payload = resp.json()
return payload.get("documents", []), payload.get("continuation")
def delete_document_chunks_from_vespa(index_name: str, doc_id: str) -> None:
"""Delete all chunks for *doc_id* from Vespa using continuation-token paging (no offset)."""
total_deleted = 0
# Use exact match instead of contains - Document Selector Language doesn't support contains
selection = f'{index_name}.document_id=="{doc_id}"'
with get_vespa_http_client() as http_client:
continuation: str | None = None
while True:
docs, continuation = _visit_chunks(
http_client=http_client,
index_name=index_name,
selection=selection,
continuation=continuation,
)
if not docs:
break
for doc in docs:
vespa_full_id = doc.get("id")
if not vespa_full_id:
continue
vespa_doc_uuid = vespa_full_id.split("::")[-1]
delete_url = f"{DOCUMENT_ID_ENDPOINT.format(index_name=index_name)}/{vespa_doc_uuid}"
try:
resp = http_client.delete(delete_url)
resp.raise_for_status()
total_deleted += 1
except Exception as e:
print(f"Failed to delete chunk {vespa_doc_uuid}: {e}")
if not continuation:
break
def update_document_id_in_vespa(
index_name: str, old_doc_id: str, new_doc_id: str
) -> None:
"""Update all chunks' document_id field from *old_doc_id* to *new_doc_id* using continuation paging."""
clean_new_doc_id = replace_invalid_doc_id_characters(new_doc_id)
# Use exact match instead of contains - Document Selector Language doesn't support contains
selection = f'{index_name}.document_id=="{old_doc_id}"'
with get_vespa_http_client() as http_client:
continuation: str | None = None
while True:
# print(f"Visiting chunks for document {old_doc_id} -> {new_doc_id}")
docs, continuation = _visit_chunks(
http_client=http_client,
index_name=index_name,
selection=selection,
continuation=continuation,
)
if not docs:
break
for doc in docs:
vespa_full_id = doc.get("id")
if not vespa_full_id:
continue
vespa_doc_uuid = vespa_full_id.split("::")[-1]
vespa_url = f"{DOCUMENT_ID_ENDPOINT.format(index_name=index_name)}/{vespa_doc_uuid}"
update_request = {
"fields": {"document_id": {"assign": clean_new_doc_id}}
}
try:
resp = http_client.put(vespa_url, json=update_request)
resp.raise_for_status()
except Exception as e:
print(f"Failed to update chunk {vespa_doc_uuid}: {e}")
raise
if not continuation:
break
def delete_document_from_db(current_doc_id: str, index_name: str) -> None:
# Delete all foreign key references first, then delete the document
try:
bind = op.get_bind()
# Delete from agent-related tables first (order matters due to foreign keys)
# Delete from agent__sub_query__search_doc first since it references search_doc
bind.execute(
sa.text(
"""
DELETE FROM agent__sub_query__search_doc
WHERE search_doc_id IN (
SELECT id FROM search_doc WHERE document_id = :doc_id
)
"""
),
{"doc_id": current_doc_id},
)
# Delete from chat_message__search_doc
bind.execute(
sa.text(
"""
DELETE FROM chat_message__search_doc
WHERE search_doc_id IN (
SELECT id FROM search_doc WHERE document_id = :doc_id
)
"""
),
{"doc_id": current_doc_id},
)
# Now we can safely delete from search_doc
bind.execute(
sa.text("DELETE FROM search_doc WHERE document_id = :doc_id"),
{"doc_id": current_doc_id},
)
# Delete from document_by_connector_credential_pair
bind.execute(
sa.text(
"DELETE FROM document_by_connector_credential_pair WHERE id = :doc_id"
),
{"doc_id": current_doc_id},
)
# Delete from other tables that reference this document
bind.execute(
sa.text(
"DELETE FROM document_retrieval_feedback WHERE document_id = :doc_id"
),
{"doc_id": current_doc_id},
)
bind.execute(
sa.text("DELETE FROM document__tag WHERE document_id = :doc_id"),
{"doc_id": current_doc_id},
)
bind.execute(
sa.text("DELETE FROM user_file WHERE document_id = :doc_id"),
{"doc_id": current_doc_id},
)
# Delete from KG tables if they exist
try:
bind.execute(
sa.text("DELETE FROM kg_entity WHERE document_id = :doc_id"),
{"doc_id": current_doc_id},
)
bind.execute(
sa.text(
"DELETE FROM kg_entity_extraction_staging WHERE document_id = :doc_id"
),
{"doc_id": current_doc_id},
)
bind.execute(
sa.text("DELETE FROM kg_relationship WHERE source_document = :doc_id"),
{"doc_id": current_doc_id},
)
bind.execute(
sa.text(
"DELETE FROM kg_relationship_extraction_staging WHERE source_document = :doc_id"
),
{"doc_id": current_doc_id},
)
bind.execute(
sa.text("DELETE FROM chunk_stats WHERE document_id = :doc_id"),
{"doc_id": current_doc_id},
)
bind.execute(
sa.text("DELETE FROM chunk_stats WHERE id LIKE :doc_id_pattern"),
{"doc_id_pattern": f"{current_doc_id}__%"},
)
except Exception as e:
logger.warning(
f"Some KG/chunk tables may not exist or failed to delete from: {e}"
)
# Finally delete the document itself
bind.execute(
sa.text("DELETE FROM document WHERE id = :doc_id"),
{"doc_id": current_doc_id},
)
# Delete chunks from vespa
delete_document_chunks_from_vespa(index_name, current_doc_id)
except Exception as e:
print(f"Failed to delete duplicate document {current_doc_id}: {e}")
# Continue with other documents instead of failing the entire migration
def upgrade() -> None:
if SKIP_CANON_DRIVE_IDS:
return
current_search_settings, future_search_settings = active_search_settings()
document_index = get_default_document_index(
current_search_settings,
future_search_settings,
)
# Get the index name
if hasattr(document_index, "index_name"):
index_name = document_index.index_name
else:
# Default index name if we can't get it from the document_index
index_name = "danswer_index"
# Get all Google Drive documents from the database (this is faster and more reliable)
gdrive_documents = get_google_drive_documents_from_database()
if not gdrive_documents:
return
# Track normalized document IDs to detect duplicates
all_normalized_doc_ids = set()
updated_count = 0
for doc_info in gdrive_documents:
current_doc_id = doc_info["document_id"]
normalized_doc_id = normalize_google_drive_url(current_doc_id)
print(f"Processing document {current_doc_id} -> {normalized_doc_id}")
# Check for duplicates
if normalized_doc_id in all_normalized_doc_ids:
# print(f"Deleting duplicate document {current_doc_id}")
delete_document_from_db(current_doc_id, index_name)
continue
all_normalized_doc_ids.add(normalized_doc_id)
# If the document ID already doesn't have query parameters, skip it
if current_doc_id == normalized_doc_id:
# print(f"Skipping document {current_doc_id} -> {normalized_doc_id} because it already has no query parameters")
continue
try:
# Update both database and Vespa in order
# Database first to ensure consistency
update_document_id_in_database(
current_doc_id, normalized_doc_id, index_name
)
# For Vespa, we can now use the original document IDs since we're using contains matching
update_document_id_in_vespa(index_name, current_doc_id, normalized_doc_id)
updated_count += 1
# print(f"Finished updating document {current_doc_id} -> {normalized_doc_id}")
except Exception as e:
print(f"Failed to update document {current_doc_id}: {e}")
if isinstance(e, HTTPStatusError):
print(f"HTTPStatusError: {e}")
print(f"Response: {e.response.text}")
print(f"Status: {e.response.status_code}")
print(f"Headers: {e.response.headers}")
print(f"Request: {e.request.url}")
print(f"Request headers: {e.request.headers}")
# Note: Rollback is complex with copy-and-swap approach since the old document is already deleted
# In case of failure, manual intervention may be required
# Continue with other documents instead of failing the entire migration
continue
logger.info(f"Migration complete. Updated {updated_count} Google Drive documents")
def downgrade() -> None:
# this is a one way migration, so no downgrade.
# It wouldn't make sense to store the extra query parameters
# and duplicate documents to allow a reversal.
pass

View File

@@ -5,6 +5,7 @@ Revises: 77d07dffae64
Create Date: 2023-11-11 20:51:24.228999
"""
from alembic import op
import sqlalchemy as sa

View File

@@ -5,6 +5,7 @@ Revises: e50154680a5c
Create Date: 2024-03-19 15:30:44.425436
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql

View File

@@ -5,6 +5,7 @@ Revises: 4ee1287bd26a
Create Date: 2024-11-21 11:49:04.488677
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql

View File

@@ -5,6 +5,7 @@ Revises: 9c00a2bccb83
Create Date: 2025-02-18 10:45:13.957807
"""
from alembic import op
# revision identifiers, used by Alembic.

View File

@@ -5,6 +5,7 @@ Revises: 6756efa39ada
Create Date: 2024-10-15 19:26:44.071259
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql

View File

@@ -5,6 +5,7 @@ Revises: 35e6853a51d5
Create Date: 2024-09-18 11:48:59.418726
"""
from alembic import op

View File

@@ -5,6 +5,7 @@ Revises: 5fc1f54cc252
Create Date: 2024-08-10 11:13:36.070790
"""
from alembic import op
import sqlalchemy as sa

View File

@@ -0,0 +1,45 @@
"""Add foreign key to user__external_user_group_id
Revision ID: 238b84885828
Revises: a7688ab35c45
Create Date: 2025-05-19 17:15:33.424584
"""
from alembic import op
# revision identifiers, used by Alembic.
revision = "238b84885828"
down_revision = "a7688ab35c45"
branch_labels = None
depends_on = None
def upgrade() -> None:
# First, clean up any entries that don't have a valid cc_pair_id
op.execute(
"""
DELETE FROM user__external_user_group_id
WHERE cc_pair_id NOT IN (SELECT id FROM connector_credential_pair)
"""
)
# Add foreign key constraint with cascade delete
op.create_foreign_key(
"fk_user__external_user_group_id_cc_pair_id",
"user__external_user_group_id",
"connector_credential_pair",
["cc_pair_id"],
["id"],
ondelete="CASCADE",
)
def downgrade() -> None:
# Drop the foreign key constraint
op.drop_constraint(
"fk_user__external_user_group_id_cc_pair_id",
"user__external_user_group_id",
type_="foreignkey",
)

View File

@@ -5,6 +5,7 @@ Revises: bc9771dccadf
Create Date: 2024-06-27 16:04:51.480437
"""
from alembic import op
import sqlalchemy as sa

View File

@@ -5,6 +5,7 @@ Revises: 6d387b3196c2
Create Date: 2023-05-05 15:49:35.716016
"""
import fastapi_users_db_sqlalchemy
import sqlalchemy as sa
from alembic import op

View File

@@ -5,6 +5,7 @@ Revises: 2daa494a0851
Create Date: 2024-11-12 13:23:29.858995
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql

View File

@@ -5,6 +5,7 @@ Revises: 2666d766cb9b
Create Date: 2023-05-24 18:45:17.244495
"""
import fastapi_users_db_sqlalchemy
import sqlalchemy as sa
from alembic import op
@@ -143,27 +144,34 @@ def upgrade() -> None:
def downgrade() -> None:
op.execute("TRUNCATE TABLE index_attempt")
op.add_column(
"index_attempt",
sa.Column("input_type", sa.VARCHAR(), autoincrement=False, nullable=False),
)
op.add_column(
"index_attempt",
sa.Column("source", sa.VARCHAR(), autoincrement=False, nullable=False),
)
op.add_column(
"index_attempt",
sa.Column(
"connector_specific_config",
postgresql.JSONB(astext_type=sa.Text()),
autoincrement=False,
nullable=False,
),
)
# Check if the constraint exists before dropping
conn = op.get_bind()
inspector = sa.inspect(conn)
existing_columns = {col["name"] for col in inspector.get_columns("index_attempt")}
if "input_type" not in existing_columns:
op.add_column(
"index_attempt",
sa.Column("input_type", sa.VARCHAR(), autoincrement=False, nullable=False),
)
if "source" not in existing_columns:
op.add_column(
"index_attempt",
sa.Column("source", sa.VARCHAR(), autoincrement=False, nullable=False),
)
if "connector_specific_config" not in existing_columns:
op.add_column(
"index_attempt",
sa.Column(
"connector_specific_config",
postgresql.JSONB(astext_type=sa.Text()),
autoincrement=False,
nullable=False,
),
)
# Check if the constraint exists before dropping
constraints = inspector.get_foreign_keys("index_attempt")
if any(
@@ -182,8 +190,12 @@ def downgrade() -> None:
"fk_index_attempt_connector_id", "index_attempt", type_="foreignkey"
)
op.drop_column("index_attempt", "credential_id")
op.drop_column("index_attempt", "connector_id")
op.drop_table("connector_credential_pair")
op.drop_table("credential")
op.drop_table("connector")
if "credential_id" in existing_columns:
op.drop_column("index_attempt", "credential_id")
if "connector_id" in existing_columns:
op.drop_column("index_attempt", "connector_id")
op.execute("DROP TABLE IF EXISTS connector_credential_pair CASCADE")
op.execute("DROP TABLE IF EXISTS credential CASCADE")
op.execute("DROP TABLE IF EXISTS connector CASCADE")

View File

@@ -5,6 +5,7 @@ Revises: c0aab6edb6dd
Create Date: 2025-01-04 11:39:43.268612
"""
from alembic import op
import sqlalchemy as sa

View File

@@ -5,6 +5,7 @@ Revises: f5437cc136c5
Create Date: 2025-02-11 14:57:51.308775
"""
from alembic import op

View File

@@ -5,6 +5,7 @@ Revises: 4b08d97e175a
Create Date: 2024-08-21 19:15:15.762948
"""
from alembic import op
import sqlalchemy as sa

View File

@@ -5,6 +5,7 @@ Revises: c0fd6e4da83a
Create Date: 2024-11-11 10:57:22.991157
"""
from alembic import op
import sqlalchemy as sa

View File

@@ -5,6 +5,7 @@ Revises: 33ea50e88f24
Create Date: 2025-01-31 10:30:27.289646
"""
from alembic import op
import sqlalchemy as sa

View File

@@ -0,0 +1,115 @@
"""add_indexing_coordination
Revision ID: 2f95e36923e6
Revises: 0816326d83aa
Create Date: 2025-07-10 16:17:57.762182
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = "2f95e36923e6"
down_revision = "0816326d83aa"
branch_labels = None
depends_on = None
def upgrade() -> None:
# Add database-based coordination fields (replacing Redis fencing)
op.add_column(
"index_attempt", sa.Column("celery_task_id", sa.String(), nullable=True)
)
op.add_column(
"index_attempt",
sa.Column(
"cancellation_requested",
sa.Boolean(),
nullable=False,
server_default="false",
),
)
# Add batch coordination fields (replacing FileStore state)
op.add_column(
"index_attempt", sa.Column("total_batches", sa.Integer(), nullable=True)
)
op.add_column(
"index_attempt",
sa.Column(
"completed_batches", sa.Integer(), nullable=False, server_default="0"
),
)
op.add_column(
"index_attempt",
sa.Column(
"total_failures_batch_level",
sa.Integer(),
nullable=False,
server_default="0",
),
)
op.add_column(
"index_attempt",
sa.Column("total_chunks", sa.Integer(), nullable=False, server_default="0"),
)
# Progress tracking for stall detection
op.add_column(
"index_attempt",
sa.Column("last_progress_time", sa.DateTime(timezone=True), nullable=True),
)
op.add_column(
"index_attempt",
sa.Column(
"last_batches_completed_count",
sa.Integer(),
nullable=False,
server_default="0",
),
)
# Heartbeat tracking for worker liveness detection
op.add_column(
"index_attempt",
sa.Column(
"heartbeat_counter", sa.Integer(), nullable=False, server_default="0"
),
)
op.add_column(
"index_attempt",
sa.Column(
"last_heartbeat_value", sa.Integer(), nullable=False, server_default="0"
),
)
op.add_column(
"index_attempt",
sa.Column("last_heartbeat_time", sa.DateTime(timezone=True), nullable=True),
)
# Add index for coordination queries
op.create_index(
"ix_index_attempt_active_coordination",
"index_attempt",
["connector_credential_pair_id", "search_settings_id", "status"],
)
def downgrade() -> None:
# Remove the new index
op.drop_index("ix_index_attempt_active_coordination", table_name="index_attempt")
# Remove the new columns
op.drop_column("index_attempt", "last_batches_completed_count")
op.drop_column("index_attempt", "last_progress_time")
op.drop_column("index_attempt", "last_heartbeat_time")
op.drop_column("index_attempt", "last_heartbeat_value")
op.drop_column("index_attempt", "heartbeat_counter")
op.drop_column("index_attempt", "total_chunks")
op.drop_column("index_attempt", "total_failures_batch_level")
op.drop_column("index_attempt", "completed_batches")
op.drop_column("index_attempt", "total_batches")
op.drop_column("index_attempt", "cancellation_requested")
op.drop_column("index_attempt", "celery_task_id")

View File

@@ -5,6 +5,7 @@ Revises: 7f99be1cb9f5
Create Date: 2023-10-16 23:21:01.283424
"""
from alembic import op
import sqlalchemy as sa

View File

@@ -5,6 +5,7 @@ Revises: 91ffac7e65b3
Create Date: 2024-07-24 21:29:31.784562
"""
import random
from alembic import op
import sqlalchemy as sa

View File

@@ -5,6 +5,7 @@ Revises: 5b29123cd710
Create Date: 2024-11-01 12:51:01.535003
"""
from alembic import op
import sqlalchemy as sa

View File

@@ -5,6 +5,7 @@ Revises: a6df6b88ef81
Create Date: 2025-01-29 10:54:22.141765
"""
from alembic import op

View File

@@ -5,6 +5,7 @@ Revises: ee3f4b47fad5
Create Date: 2024-08-15 22:37:08.397052
"""
from alembic import op
import sqlalchemy as sa

View File

@@ -5,6 +5,7 @@ Revises: 91a0a4d62b14
Create Date: 2024-09-20 21:24:04.891018
"""
from alembic import op

View File

@@ -5,6 +5,7 @@ Revises: c99d76fcd298
Create Date: 2024-09-13 13:20:32.885317
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql

View File

@@ -5,6 +5,7 @@ Revises: 2955778aa44c
Create Date: 2025-01-08 15:38:17.224380
"""
from alembic import op
from sqlalchemy import text

View File

@@ -0,0 +1,136 @@
"""update_kg_trigger_functions
Revision ID: 36e9220ab794
Revises: c9e2cd766c29
Create Date: 2025-06-22 17:33:25.833733
"""
from alembic import op
from sqlalchemy.orm import Session
from sqlalchemy import text
from shared_configs.configs import POSTGRES_DEFAULT_SCHEMA
# revision identifiers, used by Alembic.
revision = "36e9220ab794"
down_revision = "c9e2cd766c29"
branch_labels = None
depends_on = None
def _get_tenant_contextvar(session: Session) -> str:
"""Get the current schema for the migration"""
current_tenant = session.execute(text("SELECT current_schema()")).scalar()
if isinstance(current_tenant, str):
return current_tenant
else:
raise ValueError("Current tenant is not a string")
def upgrade() -> None:
bind = op.get_bind()
session = Session(bind=bind)
# Create kg_entity trigger to update kg_entity.name and its trigrams
tenant_id = _get_tenant_contextvar(session)
alphanum_pattern = r"[^a-z0-9]+"
truncate_length = 1000
function = "update_kg_entity_name"
op.execute(
text(
f"""
CREATE OR REPLACE FUNCTION "{tenant_id}".{function}()
RETURNS TRIGGER AS $$
DECLARE
name text;
cleaned_name text;
BEGIN
-- Set name to semantic_id if document_id is not NULL
IF NEW.document_id IS NOT NULL THEN
SELECT lower(semantic_id) INTO name
FROM "{tenant_id}".document
WHERE id = NEW.document_id;
ELSE
name = lower(NEW.name);
END IF;
-- Clean name and truncate if too long
cleaned_name = regexp_replace(
name,
'{alphanum_pattern}', '', 'g'
);
IF length(cleaned_name) > {truncate_length} THEN
cleaned_name = left(cleaned_name, {truncate_length});
END IF;
-- Set name and name trigrams
NEW.name = name;
NEW.name_trigrams = {POSTGRES_DEFAULT_SCHEMA}.show_trgm(cleaned_name);
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
"""
)
)
trigger = f"{function}_trigger"
op.execute(f'DROP TRIGGER IF EXISTS {trigger} ON "{tenant_id}".kg_entity')
op.execute(
f"""
CREATE TRIGGER {trigger}
BEFORE INSERT OR UPDATE OF name
ON "{tenant_id}".kg_entity
FOR EACH ROW
EXECUTE FUNCTION "{tenant_id}".{function}();
"""
)
# Create kg_entity trigger to update kg_entity.name and its trigrams
function = "update_kg_entity_name_from_doc"
op.execute(
text(
f"""
CREATE OR REPLACE FUNCTION "{tenant_id}".{function}()
RETURNS TRIGGER AS $$
DECLARE
doc_name text;
cleaned_name text;
BEGIN
doc_name = lower(NEW.semantic_id);
-- Clean name and truncate if too long
cleaned_name = regexp_replace(
doc_name,
'{alphanum_pattern}', '', 'g'
);
IF length(cleaned_name) > {truncate_length} THEN
cleaned_name = left(cleaned_name, {truncate_length});
END IF;
-- Set name and name trigrams for all entities referencing this document
UPDATE "{tenant_id}".kg_entity
SET
name = doc_name,
name_trigrams = {POSTGRES_DEFAULT_SCHEMA}.show_trgm(cleaned_name)
WHERE document_id = NEW.id;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
"""
)
)
trigger = f"{function}_trigger"
op.execute(f'DROP TRIGGER IF EXISTS {trigger} ON "{tenant_id}".document')
op.execute(
f"""
CREATE TRIGGER {trigger}
AFTER UPDATE OF semantic_id
ON "{tenant_id}".document
FOR EACH ROW
EXECUTE FUNCTION "{tenant_id}".{function}();
"""
)
def downgrade() -> None:
pass

View File

@@ -0,0 +1,52 @@
"""add chunk stats table
Revision ID: 3781a5eb12cb
Revises: df46c75b714e
Create Date: 2025-03-10 10:02:30.586666
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = "3781a5eb12cb"
down_revision = "df46c75b714e"
branch_labels = None
depends_on = None
def upgrade() -> None:
op.create_table(
"chunk_stats",
sa.Column("id", sa.String(), primary_key=True, index=True),
sa.Column(
"document_id",
sa.String(),
sa.ForeignKey("document.id"),
nullable=False,
index=True,
),
sa.Column("chunk_in_doc_id", sa.Integer(), nullable=False),
sa.Column("information_content_boost", sa.Float(), nullable=True),
sa.Column(
"last_modified",
sa.DateTime(timezone=True),
nullable=False,
index=True,
server_default=sa.func.now(),
),
sa.Column("last_synced", sa.DateTime(timezone=True), nullable=True, index=True),
sa.UniqueConstraint(
"document_id", "chunk_in_doc_id", name="uq_chunk_stats_doc_chunk"
),
)
op.create_index(
"ix_chunk_sync_status", "chunk_stats", ["last_modified", "last_synced"]
)
def downgrade() -> None:
op.drop_index("ix_chunk_sync_status", table_name="chunk_stats")
op.drop_table("chunk_stats")

View File

@@ -5,6 +5,7 @@ Revises: f1c6478c3fd8
Create Date: 2024-05-11 16:11:23.718084
"""
from alembic import op
import sqlalchemy as sa

View File

@@ -5,6 +5,7 @@ Revises: 776b3bbe9092
Create Date: 2024-03-27 19:41:29.073594
"""
from alembic import op
import sqlalchemy as sa

View File

@@ -0,0 +1,126 @@
"""Update GitHub connector repo_name to repositories
Revision ID: 3934b1bc7b62
Revises: b7c2b63c4a03
Create Date: 2025-03-05 10:50:30.516962
"""
from alembic import op
import sqlalchemy as sa
import json
import logging
# revision identifiers, used by Alembic.
revision = "3934b1bc7b62"
down_revision = "b7c2b63c4a03"
branch_labels = None
depends_on = None
logger = logging.getLogger("alembic.runtime.migration")
def upgrade() -> None:
# Get all GitHub connectors
conn = op.get_bind()
# First get all GitHub connectors
github_connectors = conn.execute(
sa.text(
"""
SELECT id, connector_specific_config
FROM connector
WHERE source = 'GITHUB'
"""
)
).fetchall()
# Update each connector's config
updated_count = 0
for connector_id, config in github_connectors:
try:
if not config:
logger.warning(f"Connector {connector_id} has no config, skipping")
continue
# Parse the config if it's a string
if isinstance(config, str):
config = json.loads(config)
if "repo_name" not in config:
continue
# Create new config with repositories instead of repo_name
new_config = dict(config)
repo_name_value = new_config.pop("repo_name")
new_config["repositories"] = repo_name_value
# Update the connector with the new config
conn.execute(
sa.text(
"""
UPDATE connector
SET connector_specific_config = :new_config
WHERE id = :connector_id
"""
),
{"connector_id": connector_id, "new_config": json.dumps(new_config)},
)
updated_count += 1
except Exception as e:
logger.error(f"Error updating connector {connector_id}: {str(e)}")
def downgrade() -> None:
# Get all GitHub connectors
conn = op.get_bind()
logger.debug(
"Starting rollback of GitHub connectors from repositories to repo_name"
)
github_connectors = conn.execute(
sa.text(
"""
SELECT id, connector_specific_config
FROM connector
WHERE source = 'GITHUB'
"""
)
).fetchall()
logger.debug(f"Found {len(github_connectors)} GitHub connectors to rollback")
# Revert each GitHub connector to use repo_name instead of repositories
reverted_count = 0
for connector_id, config in github_connectors:
try:
if not config:
continue
# Parse the config if it's a string
if isinstance(config, str):
config = json.loads(config)
if "repositories" not in config:
continue
# Create new config with repo_name instead of repositories
new_config = dict(config)
repositories_value = new_config.pop("repositories")
new_config["repo_name"] = repositories_value
# Update the connector with the new config
conn.execute(
sa.text(
"""
UPDATE connector
SET connector_specific_config = :new_config
WHERE id = :connector_id
"""
),
{"new_config": json.dumps(new_config), "connector_id": connector_id},
)
reverted_count += 1
except Exception as e:
logger.error(f"Error reverting connector {connector_id}: {str(e)}")

View File

@@ -5,6 +5,7 @@ Revises: e0a68a81d434
Create Date: 2023-10-05 18:47:09.582849
"""
from alembic import op
import sqlalchemy as sa

View File

@@ -5,9 +5,9 @@ Revises: 8f43500ee275
Create Date: 2025-02-26 13:07:56.217791
"""
from alembic import op
import time
from sqlalchemy import text
# revision identifiers, used by Alembic.
revision = "3bd4c84fe72f"
@@ -21,374 +21,59 @@ depends_on = None
# an outage by creating an index without using CONCURRENTLY. This migration:
#
# 1. Creates more efficient full-text search capabilities using tsvector columns and GIN indexes
# 2. Uses CONCURRENTLY for all index creation to prevent table locking
# 3. Explicitly manages transactions with COMMIT statements to allow CONCURRENTLY to work
# (see: https://www.postgresql.org/docs/9.4/sql-createindex.html#SQL-CREATEINDEX-CONCURRENTLY)
# (see: https://github.com/sqlalchemy/alembic/issues/277)
# 4. Adds indexes to both chat_message and chat_session tables for comprehensive search
# 2. Adds indexes to both chat_message and chat_session tables for comprehensive search
# 3. Note: CONCURRENTLY was removed due to operational issues
def upgrade():
# --- PART 1: chat_message table ---
# Step 1: Add nullable column (quick, minimal locking)
# op.execute("ALTER TABLE chat_message DROP COLUMN IF EXISTS message_tsv")
# op.execute("DROP TRIGGER IF EXISTS chat_message_tsv_trigger ON chat_message")
# op.execute("DROP FUNCTION IF EXISTS update_chat_message_tsv()")
# op.execute("ALTER TABLE chat_message DROP COLUMN IF EXISTS message_tsv")
# # Drop chat_session tsv trigger if it exists
# op.execute("DROP TRIGGER IF EXISTS chat_session_tsv_trigger ON chat_session")
# op.execute("DROP FUNCTION IF EXISTS update_chat_session_tsv()")
# op.execute("ALTER TABLE chat_session DROP COLUMN IF EXISTS title_tsv")
# raise Exception("Stop here")
time.time()
op.execute("ALTER TABLE chat_message ADD COLUMN IF NOT EXISTS message_tsv tsvector")
def upgrade() -> None:
# First, drop any existing indexes to avoid conflicts
op.execute("DROP INDEX IF EXISTS idx_chat_message_tsv;")
op.execute("DROP INDEX IF EXISTS idx_chat_session_desc_tsv;")
op.execute("DROP INDEX IF EXISTS idx_chat_message_message_lower;")
# Step 2: Create function and trigger for new/updated rows
# Drop existing columns if they exist
op.execute("ALTER TABLE chat_message DROP COLUMN IF EXISTS message_tsv;")
op.execute("ALTER TABLE chat_session DROP COLUMN IF EXISTS description_tsv;")
# Create a GIN index for full-text search on chat_message.message
op.execute(
"""
CREATE OR REPLACE FUNCTION update_chat_message_tsv()
RETURNS TRIGGER AS $$
BEGIN
NEW.message_tsv = to_tsvector('english', NEW.message);
RETURN NEW;
END;
$$ LANGUAGE plpgsql
"""
ALTER TABLE chat_message
ADD COLUMN message_tsv tsvector
GENERATED ALWAYS AS (to_tsvector('english', message)) STORED;
"""
)
# Create trigger in a separate execute call
op.execute(
"""
CREATE TRIGGER chat_message_tsv_trigger
BEFORE INSERT OR UPDATE ON chat_message
FOR EACH ROW EXECUTE FUNCTION update_chat_message_tsv()
"""
CREATE INDEX IF NOT EXISTS idx_chat_message_tsv
ON chat_message
USING GIN (message_tsv)
"""
)
# Step 3: Update existing rows in batches using Python
time.time()
# Get connection and count total rows
connection = op.get_bind()
total_count_result = connection.execute(
text("SELECT COUNT(*) FROM chat_message")
).scalar()
total_count = total_count_result if total_count_result is not None else 0
batch_size = 5000
batches = 0
# Calculate total batches needed
total_batches = (
(total_count + batch_size - 1) // batch_size if total_count > 0 else 0
# Also add a stored tsvector column for chat_session.description
op.execute(
"""
ALTER TABLE chat_session
ADD COLUMN description_tsv tsvector
GENERATED ALWAYS AS (to_tsvector('english', coalesce(description, ''))) STORED;
"""
)
# Process in batches - properly handling UUIDs by using OFFSET/LIMIT approach
for batch_num in range(total_batches):
offset = batch_num * batch_size
# Execute update for this batch using OFFSET/LIMIT which works with UUIDs
connection.execute(
text(
"""
UPDATE chat_message
SET message_tsv = to_tsvector('english', message)
WHERE id IN (
SELECT id FROM chat_message
WHERE message_tsv IS NULL
ORDER BY id
LIMIT :batch_size OFFSET :offset
)
"""
).bindparams(batch_size=batch_size, offset=offset)
)
# Commit each batch
connection.execute(text("COMMIT"))
# Start a new transaction
connection.execute(text("BEGIN"))
batches += 1
# Final check for any remaining NULL values
connection.execute(
text(
"""
UPDATE chat_message SET message_tsv = to_tsvector('english', message)
WHERE message_tsv IS NULL
"""
)
)
# Create GIN index concurrently
connection.execute(text("COMMIT"))
time.time()
connection.execute(
text(
"""
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_chat_message_tsv
ON chat_message USING GIN (message_tsv)
"""
)
)
# First drop the trigger as it won't be needed anymore
connection.execute(
text(
"""
DROP TRIGGER IF EXISTS chat_message_tsv_trigger ON chat_message;
"""
)
)
connection.execute(
text(
"""
DROP FUNCTION IF EXISTS update_chat_message_tsv();
"""
)
)
# Add new generated column
time.time()
connection.execute(
text(
"""
ALTER TABLE chat_message
ADD COLUMN message_tsv_gen tsvector
GENERATED ALWAYS AS (to_tsvector('english', message)) STORED;
"""
)
)
connection.execute(text("COMMIT"))
time.time()
connection.execute(
text(
"""
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_chat_message_tsv_gen
ON chat_message USING GIN (message_tsv_gen)
"""
)
)
# Drop old index and column
connection.execute(text("COMMIT"))
connection.execute(
text(
"""
DROP INDEX CONCURRENTLY IF EXISTS idx_chat_message_tsv;
"""
)
)
connection.execute(text("COMMIT"))
connection.execute(
text(
"""
ALTER TABLE chat_message DROP COLUMN message_tsv;
"""
)
)
# Rename new column to old name
connection.execute(
text(
"""
ALTER TABLE chat_message RENAME COLUMN message_tsv_gen TO message_tsv;
"""
)
)
# --- PART 2: chat_session table ---
# Step 1: Add nullable column (quick, minimal locking)
time.time()
connection.execute(
text(
"ALTER TABLE chat_session ADD COLUMN IF NOT EXISTS description_tsv tsvector"
)
)
# Step 2: Create function and trigger for new/updated rows - SPLIT INTO SEPARATE CALLS
connection.execute(
text(
"""
CREATE OR REPLACE FUNCTION update_chat_session_tsv()
RETURNS TRIGGER AS $$
BEGIN
NEW.description_tsv = to_tsvector('english', COALESCE(NEW.description, ''));
RETURN NEW;
END;
$$ LANGUAGE plpgsql
"""
)
)
# Create trigger in a separate execute call
connection.execute(
text(
"""
CREATE TRIGGER chat_session_tsv_trigger
BEFORE INSERT OR UPDATE ON chat_session
FOR EACH ROW EXECUTE FUNCTION update_chat_session_tsv()
"""
)
)
# Step 3: Update existing rows in batches using Python
time.time()
# Get the maximum ID to determine batch count
# Cast id to text for MAX function since it's a UUID
max_id_result = connection.execute(
text("SELECT COALESCE(MAX(id::text), '0') FROM chat_session")
).scalar()
max_id_result if max_id_result is not None else "0"
batch_size = 5000
batches = 0
# Get all IDs ordered to process in batches
rows = connection.execute(
text("SELECT id FROM chat_session ORDER BY id")
).fetchall()
total_rows = len(rows)
# Process in batches
for batch_num, batch_start in enumerate(range(0, total_rows, batch_size)):
batch_end = min(batch_start + batch_size, total_rows)
batch_ids = [row[0] for row in rows[batch_start:batch_end]]
if not batch_ids:
continue
# Use IN clause instead of BETWEEN for UUIDs
placeholders = ", ".join([f":id{i}" for i in range(len(batch_ids))])
params = {f"id{i}": id_val for i, id_val in enumerate(batch_ids)}
# Execute update for this batch
connection.execute(
text(
f"""
UPDATE chat_session
SET description_tsv = to_tsvector('english', COALESCE(description, ''))
WHERE id IN ({placeholders})
AND description_tsv IS NULL
"""
).bindparams(**params)
)
# Commit each batch
connection.execute(text("COMMIT"))
# Start a new transaction
connection.execute(text("BEGIN"))
batches += 1
# Final check for any remaining NULL values
connection.execute(
text(
"""
UPDATE chat_session SET description_tsv = to_tsvector('english', COALESCE(description, ''))
WHERE description_tsv IS NULL
"""
)
)
# Create GIN index concurrently
connection.execute(text("COMMIT"))
time.time()
connection.execute(
text(
"""
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_chat_session_desc_tsv
ON chat_session USING GIN (description_tsv)
"""
)
)
# After Final check for chat_session
# First drop the trigger as it won't be needed anymore
connection.execute(
text(
"""
DROP TRIGGER IF EXISTS chat_session_tsv_trigger ON chat_session;
"""
)
)
connection.execute(
text(
"""
DROP FUNCTION IF EXISTS update_chat_session_tsv();
"""
)
)
# Add new generated column
time.time()
connection.execute(
text(
"""
ALTER TABLE chat_session
ADD COLUMN description_tsv_gen tsvector
GENERATED ALWAYS AS (to_tsvector('english', COALESCE(description, ''))) STORED;
"""
)
)
# Create new index on generated column
connection.execute(text("COMMIT"))
time.time()
connection.execute(
text(
"""
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_chat_session_desc_tsv_gen
ON chat_session USING GIN (description_tsv_gen)
"""
)
)
# Drop old index and column
connection.execute(text("COMMIT"))
connection.execute(
text(
"""
DROP INDEX CONCURRENTLY IF EXISTS idx_chat_session_desc_tsv;
"""
)
)
connection.execute(text("COMMIT"))
connection.execute(
text(
"""
ALTER TABLE chat_session DROP COLUMN description_tsv;
"""
)
)
# Rename new column to old name
connection.execute(
text(
"""
ALTER TABLE chat_session RENAME COLUMN description_tsv_gen TO description_tsv;
"""
)
op.execute(
"""
CREATE INDEX IF NOT EXISTS idx_chat_session_desc_tsv
ON chat_session
USING GIN (description_tsv)
"""
)
def downgrade() -> None:
# Drop the indexes first (use CONCURRENTLY for dropping too)
op.execute("COMMIT")
op.execute("DROP INDEX CONCURRENTLY IF EXISTS idx_chat_message_tsv;")
op.execute("COMMIT")
op.execute("DROP INDEX CONCURRENTLY IF EXISTS idx_chat_session_desc_tsv;")
# Drop the indexes first
op.execute("DROP INDEX IF EXISTS idx_chat_message_tsv;")
op.execute("DROP INDEX IF EXISTS idx_chat_session_desc_tsv;")
# Then drop the columns
op.execute("ALTER TABLE chat_message DROP COLUMN IF EXISTS message_tsv;")

View File

@@ -5,6 +5,7 @@ Revises: 27c6ecc08586
Create Date: 2023-06-14 23:45:51.760440
"""
import sqlalchemy as sa
from alembic import op

View File

@@ -5,6 +5,7 @@ Revises: aeda5f2df4f6
Create Date: 2025-01-13 12:49:51.705235
"""
from alembic import op
import sqlalchemy as sa
import fastapi_users_db_sqlalchemy

View File

@@ -0,0 +1,30 @@
"""add_doc_metadata_field_in_document_model
Revision ID: 3fc5d75723b3
Revises: 2f95e36923e6
Create Date: 2025-07-28 18:45:37.985406
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql
# revision identifiers, used by Alembic.
revision = "3fc5d75723b3"
down_revision = "2f95e36923e6"
branch_labels = None
depends_on = None
def upgrade() -> None:
op.add_column(
"document",
sa.Column(
"doc_metadata", postgresql.JSONB(astext_type=sa.Text()), nullable=True
),
)
def downgrade() -> None:
op.drop_column("document", "doc_metadata")

View File

@@ -5,6 +5,7 @@ Revises: 703313b75876
Create Date: 2024-04-13 18:07:29.153817
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql

View File

@@ -5,6 +5,7 @@ Revises: e1392f05e840
Create Date: 2024-08-01 12:38:54.466081
"""
from alembic import op
# revision identifiers, used by Alembic.

View File

@@ -5,6 +5,7 @@ Revises: d716b0791ddd
Create Date: 2024-06-28 20:01:05.927647
"""
from alembic import op
import sqlalchemy as sa

View File

@@ -5,6 +5,7 @@ Revises: c18cdf4b497e
Create Date: 2024-06-18 20:46:09.095034
"""
from alembic import op
import sqlalchemy as sa

View File

@@ -5,6 +5,7 @@ Revises: 3c5e35aa9af0
Create Date: 2023-07-18 17:33:40.365034
"""
from alembic import op
import sqlalchemy as sa

View File

@@ -5,6 +5,7 @@ Revises: 9d97fecfab7f
Create Date: 2023-10-27 11:38:33.803145
"""
from alembic import op
from sqlalchemy import String

View File

@@ -5,6 +5,7 @@ Revises: f32615f71aeb
Create Date: 2024-09-23 12:58:03.894038
"""
from alembic import op
# revision identifiers, used by Alembic.

View File

@@ -5,6 +5,7 @@ Revises: e91df4e935ef
Create Date: 2024-03-20 18:53:32.461518
"""
from alembic import op
import sqlalchemy as sa

View File

@@ -5,6 +5,7 @@ Revises:
Create Date: 2023-05-04 00:55:32.971991
"""
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql

View File

@@ -5,6 +5,7 @@ Revises: ecab2b3f1a3b
Create Date: 2024-04-11 11:05:18.414438
"""
from alembic import op
import sqlalchemy as sa

View File

@@ -0,0 +1,51 @@
"""update prompt length
Revision ID: 4794bc13e484
Revises: f7505c5b0284
Create Date: 2025-04-02 11:26:36.180328
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = "4794bc13e484"
down_revision = "f7505c5b0284"
branch_labels = None
depends_on = None
def upgrade() -> None:
op.alter_column(
"prompt",
"system_prompt",
existing_type=sa.TEXT(),
type_=sa.String(length=5000000),
existing_nullable=False,
)
op.alter_column(
"prompt",
"task_prompt",
existing_type=sa.TEXT(),
type_=sa.String(length=5000000),
existing_nullable=False,
)
def downgrade() -> None:
op.alter_column(
"prompt",
"system_prompt",
existing_type=sa.String(length=5000000),
type_=sa.TEXT(),
existing_nullable=False,
)
op.alter_column(
"prompt",
"task_prompt",
existing_type=sa.String(length=5000000),
type_=sa.TEXT(),
existing_nullable=False,
)

View File

@@ -0,0 +1,150 @@
"""Fix invalid model-configurations state
Revision ID: 47a07e1a38f1
Revises: 7a70b7664e37
Create Date: 2025-04-23 15:39:43.159504
"""
from alembic import op
from pydantic import BaseModel, ConfigDict
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql
from onyx.llm.llm_provider_options import (
fetch_model_names_for_provider_as_set,
fetch_visible_model_names_for_provider_as_set,
)
# revision identifiers, used by Alembic.
revision = "47a07e1a38f1"
down_revision = "7a70b7664e37"
branch_labels = None
depends_on = None
class _SimpleModelConfiguration(BaseModel):
# Configure model to read from attributes
model_config = ConfigDict(from_attributes=True)
id: int
llm_provider_id: int
name: str
is_visible: bool
max_input_tokens: int | None
def upgrade() -> None:
llm_provider_table = sa.sql.table(
"llm_provider",
sa.column("id", sa.Integer),
sa.column("provider", sa.String),
sa.column("model_names", postgresql.ARRAY(sa.String)),
sa.column("display_model_names", postgresql.ARRAY(sa.String)),
sa.column("default_model_name", sa.String),
sa.column("fast_default_model_name", sa.String),
)
model_configuration_table = sa.sql.table(
"model_configuration",
sa.column("id", sa.Integer),
sa.column("llm_provider_id", sa.Integer),
sa.column("name", sa.String),
sa.column("is_visible", sa.Boolean),
sa.column("max_input_tokens", sa.Integer),
)
connection = op.get_bind()
llm_providers = connection.execute(
sa.select(
llm_provider_table.c.id,
llm_provider_table.c.provider,
)
).fetchall()
for llm_provider in llm_providers:
llm_provider_id, provider_name = llm_provider
default_models = fetch_model_names_for_provider_as_set(provider_name)
display_models = fetch_visible_model_names_for_provider_as_set(
provider_name=provider_name
)
# if `fetch_model_names_for_provider_as_set` returns `None`, then
# that means that `provider_name` is not a well-known llm provider.
if not default_models:
continue
if not display_models:
raise RuntimeError(
"If `default_models` is non-None, `display_models` must be non-None too."
)
model_configurations = [
_SimpleModelConfiguration.model_validate(model_configuration)
for model_configuration in connection.execute(
sa.select(
model_configuration_table.c.id,
model_configuration_table.c.llm_provider_id,
model_configuration_table.c.name,
model_configuration_table.c.is_visible,
model_configuration_table.c.max_input_tokens,
).where(model_configuration_table.c.llm_provider_id == llm_provider_id)
).fetchall()
]
if model_configurations:
at_least_one_is_visible = any(
[
model_configuration.is_visible
for model_configuration in model_configurations
]
)
# If there is at least one model which is public, this is a valid state.
# Therefore, don't touch it and move on to the next one.
if at_least_one_is_visible:
continue
existing_visible_model_names: set[str] = set(
[
model_configuration.name
for model_configuration in model_configurations
if model_configuration.is_visible
]
)
difference = display_models.difference(existing_visible_model_names)
for model_name in difference:
if not model_name:
continue
insert_statement = postgresql.insert(model_configuration_table).values(
llm_provider_id=llm_provider_id,
name=model_name,
is_visible=True,
max_input_tokens=None,
)
connection.execute(
insert_statement.on_conflict_do_update(
index_elements=["llm_provider_id", "name"],
set_={"is_visible": insert_statement.excluded.is_visible},
)
)
else:
for model_name in default_models:
connection.execute(
model_configuration_table.insert().values(
llm_provider_id=llm_provider_id,
name=model_name,
is_visible=model_name in display_models,
max_input_tokens=None,
)
)
def downgrade() -> None:
pass

View File

@@ -5,6 +5,7 @@ Revises: dfbe9e93d3c7
Create Date: 2024-11-05 18:55:02.221064
"""
from alembic import op
import sqlalchemy as sa

View File

@@ -5,6 +5,7 @@ Revises: b85f02ec1308
Create Date: 2024-06-09 14:58:19.946509
"""
from alembic import op
import fastapi_users_db_sqlalchemy
import sqlalchemy as sa

View File

@@ -0,0 +1,691 @@
"""create knowledge graph tables
Revision ID: 495cb26ce93e
Revises: ca04500b9ee8
Create Date: 2025-03-19 08:51:14.341989
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql
from sqlalchemy import text
from datetime import datetime, timedelta
from onyx.configs.app_configs import DB_READONLY_USER
from onyx.configs.app_configs import DB_READONLY_PASSWORD
from shared_configs.configs import MULTI_TENANT
from shared_configs.configs import POSTGRES_DEFAULT_SCHEMA
# revision identifiers, used by Alembic.
revision = "495cb26ce93e"
down_revision = "ca04500b9ee8"
branch_labels = None
depends_on = None
def upgrade() -> None:
# Create a new permission-less user to be later used for knowledge graph queries.
# The user will later get temporary read privileges for a specific view that will be
# ad hoc generated specific to a knowledge graph query.
#
# Note: in order for the migration to run, the DB_READONLY_USER and DB_READONLY_PASSWORD
# environment variables MUST be set. Otherwise, an exception will be raised.
if not MULTI_TENANT:
# Enable pg_trgm extension if not already enabled
op.execute("CREATE EXTENSION IF NOT EXISTS pg_trgm")
# Create read-only db user here only in single tenant mode. For multi-tenant mode,
# the user is created in the alembic_tenants migration.
if not (DB_READONLY_USER and DB_READONLY_PASSWORD):
raise Exception("DB_READONLY_USER or DB_READONLY_PASSWORD is not set")
op.execute(
text(
f"""
DO $$
BEGIN
-- Check if the read-only user already exists
IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = '{DB_READONLY_USER}') THEN
-- Create the read-only user with the specified password
EXECUTE format('CREATE USER %I WITH PASSWORD %L', '{DB_READONLY_USER}', '{DB_READONLY_PASSWORD}');
-- First revoke all privileges to ensure a clean slate
EXECUTE format('REVOKE ALL ON DATABASE %I FROM %I', current_database(), '{DB_READONLY_USER}');
-- Grant only the CONNECT privilege to allow the user to connect to the database
-- but not perform any operations without additional specific grants
EXECUTE format('GRANT CONNECT ON DATABASE %I TO %I', current_database(), '{DB_READONLY_USER}');
END IF;
END
$$;
"""
)
)
# Grant usage on current schema to readonly user
op.execute(
text(
f"""
DO $$
BEGIN
IF EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = '{DB_READONLY_USER}') THEN
EXECUTE format('GRANT USAGE ON SCHEMA %I TO %I', current_schema(), '{DB_READONLY_USER}');
END IF;
END
$$;
"""
)
)
op.execute("DROP TABLE IF EXISTS kg_config CASCADE")
op.create_table(
"kg_config",
sa.Column("id", sa.Integer(), primary_key=True, nullable=False, index=True),
sa.Column("kg_variable_name", sa.String(), nullable=False, index=True),
sa.Column("kg_variable_values", postgresql.ARRAY(sa.String()), nullable=False),
sa.UniqueConstraint("kg_variable_name", name="uq_kg_config_variable_name"),
)
# Insert initial data into kg_config table
op.bulk_insert(
sa.table(
"kg_config",
sa.column("kg_variable_name", sa.String),
sa.column("kg_variable_values", postgresql.ARRAY(sa.String)),
),
[
{"kg_variable_name": "KG_EXPOSED", "kg_variable_values": ["false"]},
{"kg_variable_name": "KG_ENABLED", "kg_variable_values": ["false"]},
{"kg_variable_name": "KG_VENDOR", "kg_variable_values": []},
{"kg_variable_name": "KG_VENDOR_DOMAINS", "kg_variable_values": []},
{"kg_variable_name": "KG_IGNORE_EMAIL_DOMAINS", "kg_variable_values": []},
{
"kg_variable_name": "KG_EXTRACTION_IN_PROGRESS",
"kg_variable_values": ["false"],
},
{
"kg_variable_name": "KG_CLUSTERING_IN_PROGRESS",
"kg_variable_values": ["false"],
},
{
"kg_variable_name": "KG_COVERAGE_START",
"kg_variable_values": [
(datetime.now() - timedelta(days=90)).strftime("%Y-%m-%d")
],
},
{"kg_variable_name": "KG_MAX_COVERAGE_DAYS", "kg_variable_values": ["90"]},
{
"kg_variable_name": "KG_MAX_PARENT_RECURSION_DEPTH",
"kg_variable_values": ["2"],
},
],
)
op.execute("DROP TABLE IF EXISTS kg_entity_type CASCADE")
op.create_table(
"kg_entity_type",
sa.Column("id_name", sa.String(), primary_key=True, nullable=False, index=True),
sa.Column("description", sa.String(), nullable=True),
sa.Column("grounding", sa.String(), nullable=False),
sa.Column(
"attributes",
postgresql.JSONB,
nullable=False,
server_default="{}",
),
sa.Column("occurrences", sa.Integer(), server_default="1", nullable=False),
sa.Column("active", sa.Boolean(), nullable=False, default=False),
sa.Column("deep_extraction", sa.Boolean(), nullable=False, default=False),
sa.Column(
"time_updated",
sa.DateTime(timezone=True),
server_default=sa.text("now()"),
onupdate=sa.text("now()"),
),
sa.Column(
"time_created", sa.DateTime(timezone=True), server_default=sa.text("now()")
),
sa.Column("grounded_source_name", sa.String(), nullable=True),
sa.Column("entity_values", postgresql.ARRAY(sa.String()), nullable=True),
sa.Column(
"clustering",
postgresql.JSONB,
nullable=False,
server_default="{}",
),
)
op.execute("DROP TABLE IF EXISTS kg_relationship_type CASCADE")
# Create KGRelationshipType table
op.create_table(
"kg_relationship_type",
sa.Column("id_name", sa.String(), primary_key=True, nullable=False, index=True),
sa.Column("name", sa.String(), nullable=False, index=True),
sa.Column(
"source_entity_type_id_name", sa.String(), nullable=False, index=True
),
sa.Column(
"target_entity_type_id_name", sa.String(), nullable=False, index=True
),
sa.Column("definition", sa.Boolean(), nullable=False, default=False),
sa.Column("occurrences", sa.Integer(), server_default="1", nullable=False),
sa.Column("type", sa.String(), nullable=False, index=True),
sa.Column("active", sa.Boolean(), nullable=False, default=True),
sa.Column(
"time_updated",
sa.DateTime(timezone=True),
server_default=sa.text("now()"),
onupdate=sa.text("now()"),
),
sa.Column(
"time_created", sa.DateTime(timezone=True), server_default=sa.text("now()")
),
sa.Column(
"clustering",
postgresql.JSONB,
nullable=False,
server_default="{}",
),
sa.ForeignKeyConstraint(
["source_entity_type_id_name"], ["kg_entity_type.id_name"]
),
sa.ForeignKeyConstraint(
["target_entity_type_id_name"], ["kg_entity_type.id_name"]
),
)
op.execute("DROP TABLE IF EXISTS kg_relationship_type_extraction_staging CASCADE")
# Create KGRelationshipTypeExtractionStaging table
op.create_table(
"kg_relationship_type_extraction_staging",
sa.Column("id_name", sa.String(), primary_key=True, nullable=False, index=True),
sa.Column("name", sa.String(), nullable=False, index=True),
sa.Column(
"source_entity_type_id_name", sa.String(), nullable=False, index=True
),
sa.Column(
"target_entity_type_id_name", sa.String(), nullable=False, index=True
),
sa.Column("definition", sa.Boolean(), nullable=False, default=False),
sa.Column("occurrences", sa.Integer(), server_default="1", nullable=False),
sa.Column("type", sa.String(), nullable=False, index=True),
sa.Column("active", sa.Boolean(), nullable=False, default=True),
sa.Column(
"time_created", sa.DateTime(timezone=True), server_default=sa.text("now()")
),
sa.Column(
"clustering",
postgresql.JSONB,
nullable=False,
server_default="{}",
),
sa.Column("transferred", sa.Boolean(), nullable=False, server_default="false"),
sa.ForeignKeyConstraint(
["source_entity_type_id_name"], ["kg_entity_type.id_name"]
),
sa.ForeignKeyConstraint(
["target_entity_type_id_name"], ["kg_entity_type.id_name"]
),
)
op.execute("DROP TABLE IF EXISTS kg_entity CASCADE")
# Create KGEntity table
op.create_table(
"kg_entity",
sa.Column("id_name", sa.String(), primary_key=True, nullable=False, index=True),
sa.Column("name", sa.String(), nullable=False, index=True),
sa.Column("entity_class", sa.String(), nullable=True, index=True),
sa.Column("entity_subtype", sa.String(), nullable=True, index=True),
sa.Column("entity_key", sa.String(), nullable=True, index=True),
sa.Column("name_trigrams", postgresql.ARRAY(sa.String(3)), nullable=True),
sa.Column("document_id", sa.String(), nullable=True, index=True),
sa.Column(
"alternative_names",
postgresql.ARRAY(sa.String()),
nullable=False,
server_default="{}",
),
sa.Column("entity_type_id_name", sa.String(), nullable=False, index=True),
sa.Column("description", sa.String(), nullable=True),
sa.Column(
"keywords",
postgresql.ARRAY(sa.String()),
nullable=False,
server_default="{}",
),
sa.Column("occurrences", sa.Integer(), server_default="1", nullable=False),
sa.Column(
"acl", postgresql.ARRAY(sa.String()), nullable=False, server_default="{}"
),
sa.Column("boosts", postgresql.JSONB, nullable=False, server_default="{}"),
sa.Column("attributes", postgresql.JSONB, nullable=False, server_default="{}"),
sa.Column("event_time", sa.DateTime(timezone=True), nullable=True),
sa.Column(
"time_updated",
sa.DateTime(timezone=True),
server_default=sa.text("now()"),
onupdate=sa.text("now()"),
),
sa.Column(
"time_created", sa.DateTime(timezone=True), server_default=sa.text("now()")
),
sa.ForeignKeyConstraint(["entity_type_id_name"], ["kg_entity_type.id_name"]),
sa.ForeignKeyConstraint(["document_id"], ["document.id"]),
sa.UniqueConstraint(
"name",
"entity_type_id_name",
"document_id",
name="uq_kg_entity_name_type_doc",
),
)
op.create_index("ix_entity_type_acl", "kg_entity", ["entity_type_id_name", "acl"])
op.create_index(
"ix_entity_name_search", "kg_entity", ["name", "entity_type_id_name"]
)
op.execute("DROP TABLE IF EXISTS kg_entity_extraction_staging CASCADE")
# Create KGEntityExtractionStaging table
op.create_table(
"kg_entity_extraction_staging",
sa.Column("id_name", sa.String(), primary_key=True, nullable=False, index=True),
sa.Column("name", sa.String(), nullable=False, index=True),
sa.Column("document_id", sa.String(), nullable=True, index=True),
sa.Column(
"alternative_names",
postgresql.ARRAY(sa.String()),
nullable=False,
server_default="{}",
),
sa.Column("entity_type_id_name", sa.String(), nullable=False, index=True),
sa.Column("description", sa.String(), nullable=True),
sa.Column(
"keywords",
postgresql.ARRAY(sa.String()),
nullable=False,
server_default="{}",
),
sa.Column("occurrences", sa.Integer(), server_default="1", nullable=False),
sa.Column(
"acl", postgresql.ARRAY(sa.String()), nullable=False, server_default="{}"
),
sa.Column("boosts", postgresql.JSONB, nullable=False, server_default="{}"),
sa.Column("attributes", postgresql.JSONB, nullable=False, server_default="{}"),
sa.Column("transferred_id_name", sa.String(), nullable=True, default=None),
sa.Column("entity_class", sa.String(), nullable=True, index=True),
sa.Column("entity_key", sa.String(), nullable=True, index=True),
sa.Column("entity_subtype", sa.String(), nullable=True, index=True),
sa.Column("parent_key", sa.String(), nullable=True, index=True),
sa.Column("event_time", sa.DateTime(timezone=True), nullable=True),
sa.Column(
"time_created", sa.DateTime(timezone=True), server_default=sa.text("now()")
),
sa.ForeignKeyConstraint(["entity_type_id_name"], ["kg_entity_type.id_name"]),
sa.ForeignKeyConstraint(["document_id"], ["document.id"]),
)
op.create_index(
"ix_entity_extraction_staging_acl",
"kg_entity_extraction_staging",
["entity_type_id_name", "acl"],
)
op.create_index(
"ix_entity_extraction_staging_name_search",
"kg_entity_extraction_staging",
["name", "entity_type_id_name"],
)
op.execute("DROP TABLE IF EXISTS kg_relationship CASCADE")
# Create KGRelationship table
op.create_table(
"kg_relationship",
sa.Column("id_name", sa.String(), nullable=False, index=True),
sa.Column("source_node", sa.String(), nullable=False, index=True),
sa.Column("target_node", sa.String(), nullable=False, index=True),
sa.Column("source_node_type", sa.String(), nullable=False, index=True),
sa.Column("target_node_type", sa.String(), nullable=False, index=True),
sa.Column("source_document", sa.String(), nullable=True, index=True),
sa.Column("type", sa.String(), nullable=False, index=True),
sa.Column("relationship_type_id_name", sa.String(), nullable=False, index=True),
sa.Column("occurrences", sa.Integer(), server_default="1", nullable=False),
sa.Column(
"time_updated",
sa.DateTime(timezone=True),
server_default=sa.text("now()"),
onupdate=sa.text("now()"),
),
sa.Column(
"time_created", sa.DateTime(timezone=True), server_default=sa.text("now()")
),
sa.ForeignKeyConstraint(["source_node"], ["kg_entity.id_name"]),
sa.ForeignKeyConstraint(["target_node"], ["kg_entity.id_name"]),
sa.ForeignKeyConstraint(["source_node_type"], ["kg_entity_type.id_name"]),
sa.ForeignKeyConstraint(["target_node_type"], ["kg_entity_type.id_name"]),
sa.ForeignKeyConstraint(["source_document"], ["document.id"]),
sa.ForeignKeyConstraint(
["relationship_type_id_name"], ["kg_relationship_type.id_name"]
),
sa.UniqueConstraint(
"source_node",
"target_node",
"type",
name="uq_kg_relationship_source_target_type",
),
sa.PrimaryKeyConstraint("id_name", "source_document"),
)
op.create_index(
"ix_kg_relationship_nodes", "kg_relationship", ["source_node", "target_node"]
)
op.execute("DROP TABLE IF EXISTS kg_relationship_extraction_staging CASCADE")
# Create KGRelationshipExtractionStaging table
op.create_table(
"kg_relationship_extraction_staging",
sa.Column("id_name", sa.String(), nullable=False, index=True),
sa.Column("source_node", sa.String(), nullable=False, index=True),
sa.Column("target_node", sa.String(), nullable=False, index=True),
sa.Column("source_node_type", sa.String(), nullable=False, index=True),
sa.Column("target_node_type", sa.String(), nullable=False, index=True),
sa.Column("source_document", sa.String(), nullable=True, index=True),
sa.Column("type", sa.String(), nullable=False, index=True),
sa.Column("relationship_type_id_name", sa.String(), nullable=False, index=True),
sa.Column("occurrences", sa.Integer(), server_default="1", nullable=False),
sa.Column("transferred", sa.Boolean(), nullable=False, server_default="false"),
sa.Column(
"time_created", sa.DateTime(timezone=True), server_default=sa.text("now()")
),
sa.ForeignKeyConstraint(
["source_node"], ["kg_entity_extraction_staging.id_name"]
),
sa.ForeignKeyConstraint(
["target_node"], ["kg_entity_extraction_staging.id_name"]
),
sa.ForeignKeyConstraint(["source_node_type"], ["kg_entity_type.id_name"]),
sa.ForeignKeyConstraint(["target_node_type"], ["kg_entity_type.id_name"]),
sa.ForeignKeyConstraint(["source_document"], ["document.id"]),
sa.ForeignKeyConstraint(
["relationship_type_id_name"],
["kg_relationship_type_extraction_staging.id_name"],
),
sa.UniqueConstraint(
"source_node",
"target_node",
"type",
name="uq_kg_relationship_extraction_staging_source_target_type",
),
sa.PrimaryKeyConstraint("id_name", "source_document"),
)
op.create_index(
"ix_kg_relationship_extraction_staging_nodes",
"kg_relationship_extraction_staging",
["source_node", "target_node"],
)
op.execute("DROP TABLE IF EXISTS kg_term CASCADE")
# Create KGTerm table
op.create_table(
"kg_term",
sa.Column("id_term", sa.String(), primary_key=True, nullable=False, index=True),
sa.Column(
"entity_types",
postgresql.ARRAY(sa.String()),
nullable=False,
server_default="{}",
),
sa.Column(
"time_updated",
sa.DateTime(timezone=True),
server_default=sa.text("now()"),
onupdate=sa.text("now()"),
),
sa.Column(
"time_created", sa.DateTime(timezone=True), server_default=sa.text("now()")
),
)
op.create_index("ix_search_term_entities", "kg_term", ["entity_types"])
op.create_index("ix_search_term_term", "kg_term", ["id_term"])
op.add_column(
"document",
sa.Column("kg_stage", sa.String(), nullable=True, index=True),
)
op.add_column(
"document",
sa.Column("kg_processing_time", sa.DateTime(timezone=True), nullable=True),
)
op.add_column(
"connector",
sa.Column(
"kg_processing_enabled",
sa.Boolean(),
nullable=True,
server_default="false",
),
)
op.add_column(
"connector",
sa.Column(
"kg_coverage_days",
sa.Integer(),
nullable=True,
server_default=None,
),
)
# Create GIN index for clustering and normalization
op.execute(
"CREATE INDEX IF NOT EXISTS idx_kg_entity_clustering_trigrams "
f"ON kg_entity USING GIN (name {POSTGRES_DEFAULT_SCHEMA}.gin_trgm_ops)"
)
op.execute(
"CREATE INDEX IF NOT EXISTS idx_kg_entity_normalization_trigrams "
"ON kg_entity USING GIN (name_trigrams)"
)
# Create kg_entity trigger to update kg_entity.name and its trigrams
alphanum_pattern = r"[^a-z0-9]+"
truncate_length = 1000
function = "update_kg_entity_name"
op.execute(
text(
f"""
CREATE OR REPLACE FUNCTION {function}()
RETURNS TRIGGER AS $$
DECLARE
name text;
cleaned_name text;
BEGIN
-- Set name to semantic_id if document_id is not NULL
IF NEW.document_id IS NOT NULL THEN
SELECT lower(semantic_id) INTO name
FROM document
WHERE id = NEW.document_id;
ELSE
name = lower(NEW.name);
END IF;
-- Clean name and truncate if too long
cleaned_name = regexp_replace(
name,
'{alphanum_pattern}', '', 'g'
);
IF length(cleaned_name) > {truncate_length} THEN
cleaned_name = left(cleaned_name, {truncate_length});
END IF;
-- Set name and name trigrams
NEW.name = name;
NEW.name_trigrams = {POSTGRES_DEFAULT_SCHEMA}.show_trgm(cleaned_name);
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
"""
)
)
trigger = f"{function}_trigger"
op.execute(f"DROP TRIGGER IF EXISTS {trigger} ON kg_entity")
op.execute(
f"""
CREATE TRIGGER {trigger}
BEFORE INSERT OR UPDATE OF name
ON kg_entity
FOR EACH ROW
EXECUTE FUNCTION {function}();
"""
)
# Create kg_entity trigger to update kg_entity.name and its trigrams
function = "update_kg_entity_name_from_doc"
op.execute(
text(
f"""
CREATE OR REPLACE FUNCTION {function}()
RETURNS TRIGGER AS $$
DECLARE
doc_name text;
cleaned_name text;
BEGIN
doc_name = lower(NEW.semantic_id);
-- Clean name and truncate if too long
cleaned_name = regexp_replace(
doc_name,
'{alphanum_pattern}', '', 'g'
);
IF length(cleaned_name) > {truncate_length} THEN
cleaned_name = left(cleaned_name, {truncate_length});
END IF;
-- Set name and name trigrams for all entities referencing this document
UPDATE kg_entity
SET
name = doc_name,
name_trigrams = {POSTGRES_DEFAULT_SCHEMA}.show_trgm(cleaned_name)
WHERE document_id = NEW.id;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
"""
)
)
trigger = f"{function}_trigger"
op.execute(f"DROP TRIGGER IF EXISTS {trigger} ON document")
op.execute(
f"""
CREATE TRIGGER {trigger}
AFTER UPDATE OF semantic_id
ON document
FOR EACH ROW
EXECUTE FUNCTION {function}();
"""
)
def downgrade() -> None:
# Drop all views that start with 'kg_'
op.execute(
"""
DO $$
DECLARE
view_name text;
BEGIN
FOR view_name IN
SELECT c.relname
FROM pg_catalog.pg_class c
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind = 'v'
AND n.nspname = current_schema()
AND c.relname LIKE 'kg_relationships_with_access%'
LOOP
EXECUTE 'DROP VIEW IF EXISTS ' || quote_ident(view_name);
END LOOP;
END $$;
"""
)
op.execute(
"""
DO $$
DECLARE
view_name text;
BEGIN
FOR view_name IN
SELECT c.relname
FROM pg_catalog.pg_class c
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind = 'v'
AND n.nspname = current_schema()
AND c.relname LIKE 'allowed_docs%'
LOOP
EXECUTE 'DROP VIEW IF EXISTS ' || quote_ident(view_name);
END LOOP;
END $$;
"""
)
for table, function in (
("kg_entity", "update_kg_entity_name"),
("document", "update_kg_entity_name_from_doc"),
):
op.execute(f"DROP TRIGGER IF EXISTS {function}_trigger ON {table}")
op.execute(f"DROP FUNCTION IF EXISTS {function}()")
# Drop index
op.execute("DROP INDEX IF EXISTS idx_kg_entity_clustering_trigrams")
op.execute("DROP INDEX IF EXISTS idx_kg_entity_normalization_trigrams")
# Drop tables in reverse order of creation to handle dependencies
op.drop_table("kg_term")
op.drop_table("kg_relationship")
op.drop_table("kg_entity")
op.drop_table("kg_relationship_type")
op.drop_table("kg_relationship_extraction_staging")
op.drop_table("kg_relationship_type_extraction_staging")
op.drop_table("kg_entity_extraction_staging")
op.drop_table("kg_entity_type")
op.drop_column("connector", "kg_processing_enabled")
op.drop_column("connector", "kg_coverage_days")
op.drop_column("document", "kg_stage")
op.drop_column("document", "kg_processing_time")
op.drop_table("kg_config")
# Revoke usage on current schema for the readonly user
op.execute(
text(
f"""
DO $$
BEGIN
IF EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = '{DB_READONLY_USER}') THEN
EXECUTE format('REVOKE ALL ON SCHEMA %I FROM %I', current_schema(), '{DB_READONLY_USER}');
END IF;
END
$$;
"""
)
)
if not MULTI_TENANT:
# Drop read-only db user here only in single tenant mode. For multi-tenant mode,
# the user is dropped in the alembic_tenants migration.
op.execute(
text(
f"""
DO $$
BEGIN
IF EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = '{DB_READONLY_USER}') THEN
-- First revoke all privileges from the database
EXECUTE format('REVOKE ALL ON DATABASE %I FROM %I', current_database(), '{DB_READONLY_USER}');
-- Then drop the user
EXECUTE format('DROP USER %I', '{DB_READONLY_USER}');
END IF;
END
$$;
"""
)
)
op.execute(text("DROP EXTENSION IF EXISTS pg_trgm"))

View File

@@ -5,6 +5,7 @@ Revises: 7477a5f5d728
Create Date: 2024-08-10 19:20:34.527559
"""
from alembic import op
import sqlalchemy as sa

View File

@@ -5,6 +5,7 @@ Revises: d9ec13955951
Create Date: 2024-08-20 15:28:52.993827
"""
from alembic import op
# revision identifiers, used by Alembic.

View File

@@ -5,7 +5,11 @@ Revises: f1ca58b2f2ec
Create Date: 2025-01-29 07:48:46.784041
"""
import logging
from typing import cast
from alembic import op
from sqlalchemy.exc import IntegrityError
from sqlalchemy.sql import text
@@ -15,21 +19,45 @@ down_revision = "f1ca58b2f2ec"
branch_labels = None
depends_on = None
logger = logging.getLogger("alembic.runtime.migration")
def upgrade() -> None:
# Get database connection
"""Conflicts on lowercasing will result in the uppercased email getting a
unique integer suffix when converted to lowercase."""
connection = op.get_bind()
# Update all user emails to lowercase
connection.execute(
text(
"""
UPDATE "user"
SET email = LOWER(email)
WHERE email != LOWER(email)
"""
)
)
# Fetch all user emails that are not already lowercase
user_emails = connection.execute(
text('SELECT id, email FROM "user" WHERE email != LOWER(email)')
).fetchall()
for user_id, email in user_emails:
email = cast(str, email)
username, domain = email.rsplit("@", 1)
new_email = f"{username.lower()}@{domain.lower()}"
attempt = 1
while True:
try:
# Try updating the email
connection.execute(
text('UPDATE "user" SET email = :new_email WHERE id = :user_id'),
{"new_email": new_email, "user_id": user_id},
)
break # Success, exit loop
except IntegrityError:
next_email = f"{username.lower()}_{attempt}@{domain.lower()}"
# Email conflict occurred, append `_1`, `_2`, etc., to the username
logger.warning(
f"Conflict while lowercasing email: "
f"old_email={email} "
f"conflicting_email={new_email} "
f"next_email={next_email}"
)
new_email = next_email
attempt += 1
def downgrade() -> None:

View File

@@ -5,6 +5,7 @@ Revises: 47e5bef3a1d7
Create Date: 2024-11-06 13:15:53.302644
"""
from typing import cast
from alembic import op
import sqlalchemy as sa

View File

@@ -5,6 +5,7 @@ Revises: 7da0ae5ad583
Create Date: 2023-11-27 17:23:29.668422
"""
from alembic import op
import sqlalchemy as sa

View File

@@ -5,6 +5,7 @@ Revises: f7e58d357687
Create Date: 2024-08-28 17:40:46.077470
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.sql import func

View File

@@ -5,6 +5,7 @@ Revises: 94dc3d0236f8
Create Date: 2024-12-11 18:05:05.490737
"""
from alembic import op

View File

@@ -5,6 +5,7 @@ Revises: 61ff3651add4
Create Date: 2024-09-18 17:00:23.755399
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql

View File

@@ -5,6 +5,7 @@ Revises: 7547d982db8f
Create Date: 2024-05-04 17:49:28.568109
"""
from alembic import op
import sqlalchemy as sa

View File

@@ -5,6 +5,7 @@ Revises: 800f48024ae9
Create Date: 2023-09-20 16:59:39.097177
"""
from alembic import op
import fastapi_users_db_sqlalchemy
import sqlalchemy as sa

View File

@@ -5,6 +5,7 @@ Revises: d929f0c1c6af
Create Date: 2023-09-04 15:29:44.002164
"""
import fastapi_users_db_sqlalchemy
from alembic import op
import sqlalchemy as sa

View File

@@ -0,0 +1,90 @@
"""add stale column to external user group tables
Revision ID: 58c50ef19f08
Revises: 7b9b952abdf6
Create Date: 2025-06-25 14:08:14.162380
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = "58c50ef19f08"
down_revision = "7b9b952abdf6"
branch_labels = None
depends_on = None
def upgrade() -> None:
# Add the stale column with default value False to user__external_user_group_id
op.add_column(
"user__external_user_group_id",
sa.Column("stale", sa.Boolean(), nullable=False, server_default="false"),
)
# Create index for efficient querying of stale rows by cc_pair_id
op.create_index(
"ix_user__external_user_group_id_cc_pair_id_stale",
"user__external_user_group_id",
["cc_pair_id", "stale"],
unique=False,
)
# Create index for efficient querying of all stale rows
op.create_index(
"ix_user__external_user_group_id_stale",
"user__external_user_group_id",
["stale"],
unique=False,
)
# Add the stale column with default value False to public_external_user_group
op.add_column(
"public_external_user_group",
sa.Column("stale", sa.Boolean(), nullable=False, server_default="false"),
)
# Create index for efficient querying of stale rows by cc_pair_id
op.create_index(
"ix_public_external_user_group_cc_pair_id_stale",
"public_external_user_group",
["cc_pair_id", "stale"],
unique=False,
)
# Create index for efficient querying of all stale rows
op.create_index(
"ix_public_external_user_group_stale",
"public_external_user_group",
["stale"],
unique=False,
)
def downgrade() -> None:
# Drop the indices for public_external_user_group first
op.drop_index(
"ix_public_external_user_group_stale", table_name="public_external_user_group"
)
op.drop_index(
"ix_public_external_user_group_cc_pair_id_stale",
table_name="public_external_user_group",
)
# Drop the stale column from public_external_user_group
op.drop_column("public_external_user_group", "stale")
# Drop the indices for user__external_user_group_id
op.drop_index(
"ix_user__external_user_group_id_stale",
table_name="user__external_user_group_id",
)
op.drop_index(
"ix_user__external_user_group_id_cc_pair_id_stale",
table_name="user__external_user_group_id",
)
# Drop the stale column from user__external_user_group_id
op.drop_column("user__external_user_group_id", "stale")

View File

@@ -5,6 +5,7 @@ Revises: 949b4a92a401
Create Date: 2024-10-30 19:37:59.630704
"""
from alembic import op
import sqlalchemy as sa

Some files were not shown because too many files have changed in this diff Show More