llms-py 3.0.0b4__py3-none-any.whl → 3.0.0b5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- llms/__pycache__/main.cpython-314.pyc +0 -0
- llms/main.py +134 -20
- llms/providers-extra.json +32 -0
- llms/providers.json +1 -1
- llms/ui/App.mjs +3 -3
- llms/ui/ai.mjs +1 -1
- llms/ui/app.css +195 -0
- llms/ui/ctx.mjs +18 -9
- llms/ui/index.mjs +10 -1
- llms/ui/lib/servicestack-vue.mjs +3 -3
- llms/ui/modules/analytics.mjs +28 -15
- llms/ui/modules/chat/ChatBody.mjs +130 -8
- llms/ui/modules/chat/index.mjs +10 -0
- llms/ui/modules/tools.mjs +202 -0
- llms/ui/tailwind.input.css +20 -0
- llms/ui/utils.mjs +6 -0
- {llms_py-3.0.0b4.dist-info → llms_py-3.0.0b5.dist-info}/METADATA +1 -1
- {llms_py-3.0.0b4.dist-info → llms_py-3.0.0b5.dist-info}/RECORD +22 -21
- {llms_py-3.0.0b4.dist-info → llms_py-3.0.0b5.dist-info}/WHEEL +0 -0
- {llms_py-3.0.0b4.dist-info → llms_py-3.0.0b5.dist-info}/entry_points.txt +0 -0
- {llms_py-3.0.0b4.dist-info → llms_py-3.0.0b5.dist-info}/licenses/LICENSE +0 -0
- {llms_py-3.0.0b4.dist-info → llms_py-3.0.0b5.dist-info}/top_level.txt +0 -0
llms/ui/App.mjs
CHANGED
|
@@ -49,7 +49,7 @@ const LeftPanel = {
|
|
|
49
49
|
|
|
50
50
|
const TopBar = {
|
|
51
51
|
template: `
|
|
52
|
-
<div class="flex space-x-
|
|
52
|
+
<div class="flex space-x-1">
|
|
53
53
|
<div v-for="(icon, id) in $ctx.top" :key="id" class="relative flex items-center justify-center">
|
|
54
54
|
<component :is="icon.component"
|
|
55
55
|
class="size-7 p-1 cursor-pointer text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 block"
|
|
@@ -60,7 +60,7 @@ const TopBar = {
|
|
|
60
60
|
<div v-if="tooltip === icon.id && !icon.isActive({ ...$layout })"
|
|
61
61
|
class="absolute top-full mt-2 px-2 py-1 text-xs text-white bg-gray-900 dark:bg-gray-800 rounded shadow-md z-50 whitespace-nowrap pointer-events-none"
|
|
62
62
|
:class="last2.includes(id) ? 'right-0' : 'left-1/2 -translate-x-1/2'">
|
|
63
|
-
{{icon.name}}
|
|
63
|
+
{{icon.title ?? icon.name}}
|
|
64
64
|
</div>
|
|
65
65
|
</div>
|
|
66
66
|
</div>
|
|
@@ -178,7 +178,7 @@ export default {
|
|
|
178
178
|
<TopBar />
|
|
179
179
|
</div>
|
|
180
180
|
<TopPanel class="shrink-0" />
|
|
181
|
-
<div class="flex-1 overflow-
|
|
181
|
+
<div class="flex-1 overflow-y-auto min-h-0 flex flex-col">
|
|
182
182
|
<RouterView class="h-full" />
|
|
183
183
|
</div>
|
|
184
184
|
</div>
|
llms/ui/ai.mjs
CHANGED
llms/ui/app.css
CHANGED
|
@@ -80,7 +80,12 @@
|
|
|
80
80
|
--color-purple-700: oklch(49.6% 0.265 301.924);
|
|
81
81
|
--color-purple-800: oklch(43.8% 0.218 303.724);
|
|
82
82
|
--color-purple-900: oklch(38.1% 0.176 304.987);
|
|
83
|
+
--color-fuchsia-100: oklch(95.2% 0.037 318.852);
|
|
84
|
+
--color-fuchsia-200: oklch(90.3% 0.076 319.62);
|
|
85
|
+
--color-fuchsia-300: oklch(83.3% 0.145 321.434);
|
|
83
86
|
--color-fuchsia-600: oklch(59.1% 0.293 322.896);
|
|
87
|
+
--color-fuchsia-800: oklch(45.2% 0.211 324.591);
|
|
88
|
+
--color-fuchsia-900: oklch(40.1% 0.17 325.612);
|
|
84
89
|
--color-slate-50: oklch(98.4% 0.003 247.858);
|
|
85
90
|
--color-slate-200: oklch(92.9% 0.013 255.508);
|
|
86
91
|
--color-slate-400: oklch(70.4% 0.04 256.788);
|
|
@@ -110,6 +115,7 @@
|
|
|
110
115
|
--container-2xl: 42rem;
|
|
111
116
|
--container-3xl: 48rem;
|
|
112
117
|
--container-6xl: 72rem;
|
|
118
|
+
--container-7xl: 80rem;
|
|
113
119
|
--text-xs: 0.75rem;
|
|
114
120
|
--text-xs--line-height: calc(1 / 0.75);
|
|
115
121
|
--text-sm: 0.875rem;
|
|
@@ -347,6 +353,9 @@
|
|
|
347
353
|
.top-0 {
|
|
348
354
|
top: calc(var(--spacing) * 0);
|
|
349
355
|
}
|
|
356
|
+
.top-1 {
|
|
357
|
+
top: calc(var(--spacing) * 1);
|
|
358
|
+
}
|
|
350
359
|
.top-1\/2 {
|
|
351
360
|
top: calc(1/2 * 100%);
|
|
352
361
|
}
|
|
@@ -374,6 +383,9 @@
|
|
|
374
383
|
.left-0 {
|
|
375
384
|
left: calc(var(--spacing) * 0);
|
|
376
385
|
}
|
|
386
|
+
.left-1 {
|
|
387
|
+
left: calc(var(--spacing) * 1);
|
|
388
|
+
}
|
|
377
389
|
.left-1\/2 {
|
|
378
390
|
left: calc(1/2 * 100%);
|
|
379
391
|
}
|
|
@@ -440,9 +452,15 @@
|
|
|
440
452
|
max-width: 96rem;
|
|
441
453
|
}
|
|
442
454
|
}
|
|
455
|
+
.-m-2 {
|
|
456
|
+
margin: calc(var(--spacing) * -2);
|
|
457
|
+
}
|
|
443
458
|
.-m-2\.5 {
|
|
444
459
|
margin: calc(var(--spacing) * -2.5);
|
|
445
460
|
}
|
|
461
|
+
.-mx-1 {
|
|
462
|
+
margin-inline: calc(var(--spacing) * -1);
|
|
463
|
+
}
|
|
446
464
|
.-mx-1\.5 {
|
|
447
465
|
margin-inline: calc(var(--spacing) * -1.5);
|
|
448
466
|
}
|
|
@@ -455,6 +473,9 @@
|
|
|
455
473
|
.mx-auto {
|
|
456
474
|
margin-inline: auto;
|
|
457
475
|
}
|
|
476
|
+
.-my-1 {
|
|
477
|
+
margin-block: calc(var(--spacing) * -1);
|
|
478
|
+
}
|
|
458
479
|
.-my-1\.5 {
|
|
459
480
|
margin-block: calc(var(--spacing) * -1.5);
|
|
460
481
|
}
|
|
@@ -476,6 +497,9 @@
|
|
|
476
497
|
.-mt-36 {
|
|
477
498
|
margin-top: calc(var(--spacing) * -36);
|
|
478
499
|
}
|
|
500
|
+
.mt-0 {
|
|
501
|
+
margin-top: calc(var(--spacing) * 0);
|
|
502
|
+
}
|
|
479
503
|
.mt-0\.5 {
|
|
480
504
|
margin-top: calc(var(--spacing) * 0.5);
|
|
481
505
|
}
|
|
@@ -503,6 +527,9 @@
|
|
|
503
527
|
.mt-10 {
|
|
504
528
|
margin-top: calc(var(--spacing) * 10);
|
|
505
529
|
}
|
|
530
|
+
.mt-auto {
|
|
531
|
+
margin-top: auto;
|
|
532
|
+
}
|
|
506
533
|
.mr-1 {
|
|
507
534
|
margin-right: calc(var(--spacing) * 1);
|
|
508
535
|
}
|
|
@@ -593,6 +620,10 @@
|
|
|
593
620
|
.table {
|
|
594
621
|
display: table;
|
|
595
622
|
}
|
|
623
|
+
.size-3 {
|
|
624
|
+
width: calc(var(--spacing) * 3);
|
|
625
|
+
height: calc(var(--spacing) * 3);
|
|
626
|
+
}
|
|
596
627
|
.size-3\.5 {
|
|
597
628
|
width: calc(var(--spacing) * 3.5);
|
|
598
629
|
height: calc(var(--spacing) * 3.5);
|
|
@@ -762,6 +793,9 @@
|
|
|
762
793
|
.max-w-6xl {
|
|
763
794
|
max-width: var(--container-6xl);
|
|
764
795
|
}
|
|
796
|
+
.max-w-7xl {
|
|
797
|
+
max-width: var(--container-7xl);
|
|
798
|
+
}
|
|
765
799
|
.max-w-48 {
|
|
766
800
|
max-width: calc(var(--spacing) * 48);
|
|
767
801
|
}
|
|
@@ -841,6 +875,10 @@
|
|
|
841
875
|
.origin-top-right {
|
|
842
876
|
transform-origin: 100% 0;
|
|
843
877
|
}
|
|
878
|
+
.-translate-x-1 {
|
|
879
|
+
--tw-translate-x: calc(var(--spacing) * -1);
|
|
880
|
+
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
881
|
+
}
|
|
844
882
|
.-translate-x-1\/2 {
|
|
845
883
|
--tw-translate-x: calc(calc(1/2 * 100%) * -1);
|
|
846
884
|
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
@@ -861,6 +899,10 @@
|
|
|
861
899
|
--tw-translate-x: 100%;
|
|
862
900
|
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
863
901
|
}
|
|
902
|
+
.-translate-y-1 {
|
|
903
|
+
--tw-translate-y: calc(var(--spacing) * -1);
|
|
904
|
+
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
905
|
+
}
|
|
864
906
|
.-translate-y-1\/2 {
|
|
865
907
|
--tw-translate-y: calc(calc(1/2 * 100%) * -1);
|
|
866
908
|
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
@@ -930,6 +972,9 @@
|
|
|
930
972
|
.flex-wrap {
|
|
931
973
|
flex-wrap: wrap;
|
|
932
974
|
}
|
|
975
|
+
.items-baseline {
|
|
976
|
+
align-items: baseline;
|
|
977
|
+
}
|
|
933
978
|
.items-center {
|
|
934
979
|
align-items: center;
|
|
935
980
|
}
|
|
@@ -986,6 +1031,13 @@
|
|
|
986
1031
|
margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)));
|
|
987
1032
|
}
|
|
988
1033
|
}
|
|
1034
|
+
.space-y-3 {
|
|
1035
|
+
:where(& > :not(:last-child)) {
|
|
1036
|
+
--tw-space-y-reverse: 0;
|
|
1037
|
+
margin-block-start: calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));
|
|
1038
|
+
margin-block-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)));
|
|
1039
|
+
}
|
|
1040
|
+
}
|
|
989
1041
|
.space-y-4 {
|
|
990
1042
|
:where(& > :not(:last-child)) {
|
|
991
1043
|
--tw-space-y-reverse: 0;
|
|
@@ -1000,6 +1052,9 @@
|
|
|
1000
1052
|
margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)));
|
|
1001
1053
|
}
|
|
1002
1054
|
}
|
|
1055
|
+
.gap-x-1 {
|
|
1056
|
+
column-gap: calc(var(--spacing) * 1);
|
|
1057
|
+
}
|
|
1003
1058
|
.gap-x-1\.5 {
|
|
1004
1059
|
column-gap: calc(var(--spacing) * 1.5);
|
|
1005
1060
|
}
|
|
@@ -1168,6 +1223,10 @@
|
|
|
1168
1223
|
border-bottom-style: var(--tw-border-style);
|
|
1169
1224
|
border-bottom-width: 2px;
|
|
1170
1225
|
}
|
|
1226
|
+
.border-l {
|
|
1227
|
+
border-left-style: var(--tw-border-style);
|
|
1228
|
+
border-left-width: 1px;
|
|
1229
|
+
}
|
|
1171
1230
|
.border-l-4 {
|
|
1172
1231
|
border-left-style: var(--tw-border-style);
|
|
1173
1232
|
border-left-width: 4px;
|
|
@@ -1191,6 +1250,9 @@
|
|
|
1191
1250
|
.border-blue-600 {
|
|
1192
1251
|
border-color: var(--color-blue-600);
|
|
1193
1252
|
}
|
|
1253
|
+
.border-fuchsia-200 {
|
|
1254
|
+
border-color: var(--color-fuchsia-200);
|
|
1255
|
+
}
|
|
1194
1256
|
.border-gray-100 {
|
|
1195
1257
|
border-color: var(--color-gray-100);
|
|
1196
1258
|
}
|
|
@@ -1206,12 +1268,18 @@
|
|
|
1206
1268
|
.border-gray-700 {
|
|
1207
1269
|
border-color: var(--color-gray-700);
|
|
1208
1270
|
}
|
|
1271
|
+
.border-green-200 {
|
|
1272
|
+
border-color: var(--color-green-200);
|
|
1273
|
+
}
|
|
1209
1274
|
.border-green-400 {
|
|
1210
1275
|
border-color: var(--color-green-400);
|
|
1211
1276
|
}
|
|
1212
1277
|
.border-indigo-500 {
|
|
1213
1278
|
border-color: var(--color-indigo-500);
|
|
1214
1279
|
}
|
|
1280
|
+
.border-purple-200 {
|
|
1281
|
+
border-color: var(--color-purple-200);
|
|
1282
|
+
}
|
|
1215
1283
|
.border-red-200 {
|
|
1216
1284
|
border-color: var(--color-red-200);
|
|
1217
1285
|
}
|
|
@@ -1227,6 +1295,9 @@
|
|
|
1227
1295
|
.border-yellow-400 {
|
|
1228
1296
|
border-color: var(--color-yellow-400);
|
|
1229
1297
|
}
|
|
1298
|
+
.bg-black {
|
|
1299
|
+
background-color: var(--color-black);
|
|
1300
|
+
}
|
|
1230
1301
|
.bg-black\/40 {
|
|
1231
1302
|
background-color: color-mix(in srgb, #000 40%, transparent);
|
|
1232
1303
|
@supports (color: color-mix(in lab, red, red)) {
|
|
@@ -1257,12 +1328,21 @@
|
|
|
1257
1328
|
.bg-cyan-600 {
|
|
1258
1329
|
background-color: var(--color-cyan-600);
|
|
1259
1330
|
}
|
|
1331
|
+
.bg-fuchsia-100 {
|
|
1332
|
+
background-color: var(--color-fuchsia-100);
|
|
1333
|
+
}
|
|
1260
1334
|
.bg-fuchsia-600 {
|
|
1261
1335
|
background-color: var(--color-fuchsia-600);
|
|
1262
1336
|
}
|
|
1263
1337
|
.bg-gray-50 {
|
|
1264
1338
|
background-color: var(--color-gray-50);
|
|
1265
1339
|
}
|
|
1340
|
+
.bg-gray-50\/30 {
|
|
1341
|
+
background-color: color-mix(in srgb, oklch(98.5% 0.002 247.839) 30%, transparent);
|
|
1342
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
1343
|
+
background-color: color-mix(in oklab, var(--color-gray-50) 30%, transparent);
|
|
1344
|
+
}
|
|
1345
|
+
}
|
|
1266
1346
|
.bg-gray-100 {
|
|
1267
1347
|
background-color: var(--color-gray-100);
|
|
1268
1348
|
}
|
|
@@ -1275,6 +1355,9 @@
|
|
|
1275
1355
|
.bg-gray-400 {
|
|
1276
1356
|
background-color: var(--color-gray-400);
|
|
1277
1357
|
}
|
|
1358
|
+
.bg-gray-500 {
|
|
1359
|
+
background-color: var(--color-gray-500);
|
|
1360
|
+
}
|
|
1278
1361
|
.bg-gray-500\/75 {
|
|
1279
1362
|
background-color: color-mix(in srgb, oklch(55.1% 0.027 264.364) 75%, transparent);
|
|
1280
1363
|
@supports (color: color-mix(in lab, red, red)) {
|
|
@@ -1338,6 +1421,9 @@
|
|
|
1338
1421
|
.bg-sky-600 {
|
|
1339
1422
|
background-color: var(--color-sky-600);
|
|
1340
1423
|
}
|
|
1424
|
+
.bg-slate-400 {
|
|
1425
|
+
background-color: var(--color-slate-400);
|
|
1426
|
+
}
|
|
1341
1427
|
.bg-slate-400\/10 {
|
|
1342
1428
|
background-color: color-mix(in srgb, oklch(70.4% 0.04 256.788) 10%, transparent);
|
|
1343
1429
|
@supports (color: color-mix(in lab, red, red)) {
|
|
@@ -1413,6 +1499,9 @@
|
|
|
1413
1499
|
.px-6 {
|
|
1414
1500
|
padding-inline: calc(var(--spacing) * 6);
|
|
1415
1501
|
}
|
|
1502
|
+
.py-0 {
|
|
1503
|
+
padding-block: calc(var(--spacing) * 0);
|
|
1504
|
+
}
|
|
1416
1505
|
.py-0\.5 {
|
|
1417
1506
|
padding-block: calc(var(--spacing) * 0.5);
|
|
1418
1507
|
}
|
|
@@ -1443,6 +1532,9 @@
|
|
|
1443
1532
|
.py-12 {
|
|
1444
1533
|
padding-block: calc(var(--spacing) * 12);
|
|
1445
1534
|
}
|
|
1535
|
+
.pt-0 {
|
|
1536
|
+
padding-top: calc(var(--spacing) * 0);
|
|
1537
|
+
}
|
|
1446
1538
|
.pt-0\.5 {
|
|
1447
1539
|
padding-top: calc(var(--spacing) * 0.5);
|
|
1448
1540
|
}
|
|
@@ -1585,6 +1677,9 @@
|
|
|
1585
1677
|
font-size: var(--text-xs);
|
|
1586
1678
|
line-height: var(--tw-leading, var(--text-xs--line-height));
|
|
1587
1679
|
}
|
|
1680
|
+
.text-\[10px\] {
|
|
1681
|
+
font-size: 10px;
|
|
1682
|
+
}
|
|
1588
1683
|
.text-\[11px\] {
|
|
1589
1684
|
font-size: 11px;
|
|
1590
1685
|
}
|
|
@@ -1634,6 +1729,9 @@
|
|
|
1634
1729
|
.break-words {
|
|
1635
1730
|
overflow-wrap: break-word;
|
|
1636
1731
|
}
|
|
1732
|
+
.break-all {
|
|
1733
|
+
word-break: break-all;
|
|
1734
|
+
}
|
|
1637
1735
|
.text-ellipsis {
|
|
1638
1736
|
text-overflow: ellipsis;
|
|
1639
1737
|
}
|
|
@@ -1655,6 +1753,9 @@
|
|
|
1655
1753
|
.text-blue-600 {
|
|
1656
1754
|
color: var(--color-blue-600);
|
|
1657
1755
|
}
|
|
1756
|
+
.text-blue-600\! {
|
|
1757
|
+
color: var(--color-blue-600) !important;
|
|
1758
|
+
}
|
|
1658
1759
|
.text-blue-700 {
|
|
1659
1760
|
color: var(--color-blue-700);
|
|
1660
1761
|
}
|
|
@@ -1664,6 +1765,9 @@
|
|
|
1664
1765
|
.text-cyan-600 {
|
|
1665
1766
|
color: var(--color-cyan-600);
|
|
1666
1767
|
}
|
|
1768
|
+
.text-fuchsia-800 {
|
|
1769
|
+
color: var(--color-fuchsia-800);
|
|
1770
|
+
}
|
|
1667
1771
|
.text-gray-200 {
|
|
1668
1772
|
color: var(--color-gray-200);
|
|
1669
1773
|
}
|
|
@@ -1784,6 +1888,9 @@
|
|
|
1784
1888
|
.italic {
|
|
1785
1889
|
font-style: italic;
|
|
1786
1890
|
}
|
|
1891
|
+
.underline {
|
|
1892
|
+
text-decoration-line: underline;
|
|
1893
|
+
}
|
|
1787
1894
|
.placeholder-gray-400 {
|
|
1788
1895
|
&::placeholder {
|
|
1789
1896
|
color: var(--color-gray-400);
|
|
@@ -1865,6 +1972,9 @@
|
|
|
1865
1972
|
--tw-inset-ring-shadow: inset 0 0 0 1px var(--tw-inset-ring-color, currentcolor);
|
|
1866
1973
|
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
1867
1974
|
}
|
|
1975
|
+
.ring-black {
|
|
1976
|
+
--tw-ring-color: var(--color-black);
|
|
1977
|
+
}
|
|
1868
1978
|
.ring-black\/5 {
|
|
1869
1979
|
--tw-ring-color: color-mix(in srgb, #000 5%, transparent);
|
|
1870
1980
|
@supports (color: color-mix(in lab, red, red)) {
|
|
@@ -1886,6 +1996,9 @@
|
|
|
1886
1996
|
.ring-indigo-500 {
|
|
1887
1997
|
--tw-ring-color: var(--color-indigo-500);
|
|
1888
1998
|
}
|
|
1999
|
+
.inset-ring-gray-900 {
|
|
2000
|
+
--tw-inset-ring-color: var(--color-gray-900);
|
|
2001
|
+
}
|
|
1889
2002
|
.inset-ring-gray-900\/5 {
|
|
1890
2003
|
--tw-inset-ring-color: color-mix(in srgb, oklch(21% 0.034 264.665) 5%, transparent);
|
|
1891
2004
|
@supports (color: color-mix(in lab, red, red)) {
|
|
@@ -3090,6 +3203,11 @@
|
|
|
3090
3203
|
padding: calc(var(--spacing) * 4);
|
|
3091
3204
|
}
|
|
3092
3205
|
}
|
|
3206
|
+
.md\:p-6 {
|
|
3207
|
+
@media (width >= 48rem) {
|
|
3208
|
+
padding: calc(var(--spacing) * 6);
|
|
3209
|
+
}
|
|
3210
|
+
}
|
|
3093
3211
|
.lg\:fixed {
|
|
3094
3212
|
@media (width >= 64rem) {
|
|
3095
3213
|
position: fixed;
|
|
@@ -3264,6 +3382,11 @@
|
|
|
3264
3382
|
border-color: var(--color-blue-800);
|
|
3265
3383
|
}
|
|
3266
3384
|
}
|
|
3385
|
+
.dark\:border-fuchsia-800 {
|
|
3386
|
+
&:where(.dark, .dark *) {
|
|
3387
|
+
border-color: var(--color-fuchsia-800);
|
|
3388
|
+
}
|
|
3389
|
+
}
|
|
3267
3390
|
.dark\:border-gray-600 {
|
|
3268
3391
|
&:where(.dark, .dark *) {
|
|
3269
3392
|
border-color: var(--color-gray-600);
|
|
@@ -3279,6 +3402,16 @@
|
|
|
3279
3402
|
border-color: var(--color-gray-800);
|
|
3280
3403
|
}
|
|
3281
3404
|
}
|
|
3405
|
+
.dark\:border-green-800 {
|
|
3406
|
+
&:where(.dark, .dark *) {
|
|
3407
|
+
border-color: var(--color-green-800);
|
|
3408
|
+
}
|
|
3409
|
+
}
|
|
3410
|
+
.dark\:border-purple-800 {
|
|
3411
|
+
&:where(.dark, .dark *) {
|
|
3412
|
+
border-color: var(--color-purple-800);
|
|
3413
|
+
}
|
|
3414
|
+
}
|
|
3282
3415
|
.dark\:border-red-600 {
|
|
3283
3416
|
&:where(.dark, .dark *) {
|
|
3284
3417
|
border-color: var(--color-red-600);
|
|
@@ -3335,6 +3468,14 @@
|
|
|
3335
3468
|
}
|
|
3336
3469
|
}
|
|
3337
3470
|
}
|
|
3471
|
+
.dark\:bg-blue-900\/40 {
|
|
3472
|
+
&:where(.dark, .dark *) {
|
|
3473
|
+
background-color: color-mix(in srgb, oklch(37.9% 0.146 265.522) 40%, transparent);
|
|
3474
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
3475
|
+
background-color: color-mix(in oklab, var(--color-blue-900) 40%, transparent);
|
|
3476
|
+
}
|
|
3477
|
+
}
|
|
3478
|
+
}
|
|
3338
3479
|
.dark\:bg-blue-900\/50 {
|
|
3339
3480
|
&:where(.dark, .dark *) {
|
|
3340
3481
|
background-color: color-mix(in srgb, oklch(37.9% 0.146 265.522) 50%, transparent);
|
|
@@ -3353,6 +3494,14 @@
|
|
|
3353
3494
|
background-color: var(--color-cyan-600);
|
|
3354
3495
|
}
|
|
3355
3496
|
}
|
|
3497
|
+
.dark\:bg-fuchsia-900\/40 {
|
|
3498
|
+
&:where(.dark, .dark *) {
|
|
3499
|
+
background-color: color-mix(in srgb, oklch(40.1% 0.17 325.612) 40%, transparent);
|
|
3500
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
3501
|
+
background-color: color-mix(in oklab, var(--color-fuchsia-900) 40%, transparent);
|
|
3502
|
+
}
|
|
3503
|
+
}
|
|
3504
|
+
}
|
|
3356
3505
|
.dark\:bg-gray-200 {
|
|
3357
3506
|
&:where(.dark, .dark *) {
|
|
3358
3507
|
background-color: var(--color-gray-200);
|
|
@@ -3373,6 +3522,14 @@
|
|
|
3373
3522
|
background-color: var(--color-gray-700);
|
|
3374
3523
|
}
|
|
3375
3524
|
}
|
|
3525
|
+
.dark\:bg-gray-700\/30 {
|
|
3526
|
+
&:where(.dark, .dark *) {
|
|
3527
|
+
background-color: color-mix(in srgb, oklch(37.3% 0.034 259.733) 30%, transparent);
|
|
3528
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
3529
|
+
background-color: color-mix(in oklab, var(--color-gray-700) 30%, transparent);
|
|
3530
|
+
}
|
|
3531
|
+
}
|
|
3532
|
+
}
|
|
3376
3533
|
.dark\:bg-gray-800 {
|
|
3377
3534
|
&:where(.dark, .dark *) {
|
|
3378
3535
|
background-color: var(--color-gray-800);
|
|
@@ -3409,6 +3566,14 @@
|
|
|
3409
3566
|
}
|
|
3410
3567
|
}
|
|
3411
3568
|
}
|
|
3569
|
+
.dark\:bg-green-900\/40 {
|
|
3570
|
+
&:where(.dark, .dark *) {
|
|
3571
|
+
background-color: color-mix(in srgb, oklch(39.3% 0.095 152.535) 40%, transparent);
|
|
3572
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
3573
|
+
background-color: color-mix(in oklab, var(--color-green-900) 40%, transparent);
|
|
3574
|
+
}
|
|
3575
|
+
}
|
|
3576
|
+
}
|
|
3412
3577
|
.dark\:bg-green-900\/50 {
|
|
3413
3578
|
&:where(.dark, .dark *) {
|
|
3414
3579
|
background-color: color-mix(in srgb, oklch(39.3% 0.095 152.535) 50%, transparent);
|
|
@@ -3524,6 +3689,11 @@
|
|
|
3524
3689
|
color: var(--color-blue-300);
|
|
3525
3690
|
}
|
|
3526
3691
|
}
|
|
3692
|
+
.dark\:text-blue-300\! {
|
|
3693
|
+
&:where(.dark, .dark *) {
|
|
3694
|
+
color: var(--color-blue-300) !important;
|
|
3695
|
+
}
|
|
3696
|
+
}
|
|
3527
3697
|
.dark\:text-blue-400 {
|
|
3528
3698
|
&:where(.dark, .dark *) {
|
|
3529
3699
|
color: var(--color-blue-400);
|
|
@@ -3534,6 +3704,11 @@
|
|
|
3534
3704
|
color: var(--color-cyan-400);
|
|
3535
3705
|
}
|
|
3536
3706
|
}
|
|
3707
|
+
.dark\:text-fuchsia-300 {
|
|
3708
|
+
&:where(.dark, .dark *) {
|
|
3709
|
+
color: var(--color-fuchsia-300);
|
|
3710
|
+
}
|
|
3711
|
+
}
|
|
3537
3712
|
.dark\:text-gray-50 {
|
|
3538
3713
|
&:where(.dark, .dark *) {
|
|
3539
3714
|
color: var(--color-gray-50);
|
|
@@ -3577,6 +3752,11 @@
|
|
|
3577
3752
|
color: var(--color-gray-600);
|
|
3578
3753
|
}
|
|
3579
3754
|
}
|
|
3755
|
+
.dark\:text-gray-700 {
|
|
3756
|
+
&:where(.dark, .dark *) {
|
|
3757
|
+
color: var(--color-gray-700);
|
|
3758
|
+
}
|
|
3759
|
+
}
|
|
3580
3760
|
.dark\:text-green-100 {
|
|
3581
3761
|
&:where(.dark, .dark *) {
|
|
3582
3762
|
color: var(--color-green-100);
|
|
@@ -4271,6 +4451,9 @@
|
|
|
4271
4451
|
*, ::after, ::before, ::backdrop, ::file-selector-button {
|
|
4272
4452
|
border-color: hsl(var(--border));
|
|
4273
4453
|
}
|
|
4454
|
+
.reasoning .prose-xs p, .reasoning .prose-xs li {
|
|
4455
|
+
font-size: 13px;
|
|
4456
|
+
}
|
|
4274
4457
|
}
|
|
4275
4458
|
@layer base {
|
|
4276
4459
|
[v-cloak] {
|
|
@@ -4356,6 +4539,18 @@
|
|
|
4356
4539
|
background-color: #f9fafb;
|
|
4357
4540
|
font-weight: 600;
|
|
4358
4541
|
}
|
|
4542
|
+
.tool-arguments, .tool-output {
|
|
4543
|
+
margin: 0 !important;
|
|
4544
|
+
padding: 0 !important;
|
|
4545
|
+
background-color: transparent !important;
|
|
4546
|
+
color: inherit !important;
|
|
4547
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important;
|
|
4548
|
+
font-size: 0.75rem !important;
|
|
4549
|
+
white-space: pre-wrap !important;
|
|
4550
|
+
word-break: break-all !important;
|
|
4551
|
+
border: none !important;
|
|
4552
|
+
border-radius: 0 !important;
|
|
4553
|
+
}
|
|
4359
4554
|
.hljs {
|
|
4360
4555
|
background: white;
|
|
4361
4556
|
color: black;
|
llms/ui/ctx.mjs
CHANGED
|
@@ -11,12 +11,13 @@ export class ExtensionScope {
|
|
|
11
11
|
this.baseUrl = `${ctx.ai.base}/ext/${this.id}`
|
|
12
12
|
this.storageKey = `llms.${this.id}`
|
|
13
13
|
this.state = reactive({})
|
|
14
|
+
this.prefs = reactive(storageObject(this.storageKey))
|
|
14
15
|
}
|
|
15
16
|
getPrefs() {
|
|
16
|
-
return
|
|
17
|
+
return this.prefs
|
|
17
18
|
}
|
|
18
19
|
setPrefs(o) {
|
|
19
|
-
storageObject(this.storageKey, Object.assign(this.
|
|
20
|
+
storageObject(this.storageKey, Object.assign(this.prefs, o))
|
|
20
21
|
}
|
|
21
22
|
get(url, options) {
|
|
22
23
|
return this.ctx.ai.get(combinePaths(this.baseUrl, url), options)
|
|
@@ -45,7 +46,6 @@ export class AppContext {
|
|
|
45
46
|
this.events = new EventBus()
|
|
46
47
|
this.modalComponents = {}
|
|
47
48
|
this.extensions = []
|
|
48
|
-
this.layout = reactive(storageObject(`llms.layout`))
|
|
49
49
|
this.chatRequestFilters = []
|
|
50
50
|
this.chatResponseFilters = []
|
|
51
51
|
this.chatErrorFilters = []
|
|
@@ -53,12 +53,15 @@ export class AppContext {
|
|
|
53
53
|
this.updateThreadFilters = []
|
|
54
54
|
this.top = {}
|
|
55
55
|
this.left = {}
|
|
56
|
+
this.layout = reactive(storageObject(`llms.layout`))
|
|
57
|
+
this.prefs = reactive(storageObject(ai.prefsKey))
|
|
56
58
|
|
|
57
59
|
if (!Array.isArray(this.layout.hide)) {
|
|
58
60
|
this.layout.hide = []
|
|
59
61
|
}
|
|
60
62
|
Object.assign(app.config.globalProperties, {
|
|
61
63
|
$ctx: this,
|
|
64
|
+
$prefs: this.prefs,
|
|
62
65
|
$state: this.state,
|
|
63
66
|
$layout: this.layout,
|
|
64
67
|
$ai: ai,
|
|
@@ -80,6 +83,12 @@ export class AppContext {
|
|
|
80
83
|
this[name] = global
|
|
81
84
|
})
|
|
82
85
|
}
|
|
86
|
+
getPrefs() {
|
|
87
|
+
return this.prefs
|
|
88
|
+
}
|
|
89
|
+
setPrefs(o) {
|
|
90
|
+
storageObject(this.ai.prefsKey, Object.assign(this.prefs, o))
|
|
91
|
+
}
|
|
83
92
|
_validateIcons(icons) {
|
|
84
93
|
Object.entries(icons).forEach(([id, icon]) => {
|
|
85
94
|
if (!icon.component) {
|
|
@@ -173,12 +182,6 @@ export class AppContext {
|
|
|
173
182
|
layoutVisible(key) {
|
|
174
183
|
return !this.layout.hide.includes(key)
|
|
175
184
|
}
|
|
176
|
-
getPrefs() {
|
|
177
|
-
return storageObject(this.ai.prefsKey)
|
|
178
|
-
}
|
|
179
|
-
setPrefs(o) {
|
|
180
|
-
storageObject(this.ai.prefsKey, Object.assign(this.getPrefs(), o))
|
|
181
|
-
}
|
|
182
185
|
toggleTop(name) {
|
|
183
186
|
console.log('toggleTop', name)
|
|
184
187
|
this.layout.top = this.layout.top == name ? undefined : name
|
|
@@ -193,4 +196,10 @@ export class AppContext {
|
|
|
193
196
|
this.router.push({ path })
|
|
194
197
|
}
|
|
195
198
|
}
|
|
199
|
+
getJson(url, options) {
|
|
200
|
+
return this.ai.getJson(url, options)
|
|
201
|
+
}
|
|
202
|
+
postJson(url, options) {
|
|
203
|
+
return this.ai.postJson(url, options)
|
|
204
|
+
}
|
|
196
205
|
}
|
llms/ui/index.mjs
CHANGED
|
@@ -9,6 +9,7 @@ import ChatModule from './modules/chat/index.mjs'
|
|
|
9
9
|
import ThreadsModule from './modules/threads/index.mjs'
|
|
10
10
|
import ModelSelectorModule from './modules/model-selector.mjs'
|
|
11
11
|
import AnalyticsModule from './modules/analytics.mjs'
|
|
12
|
+
import ToolsModule from './modules/tools.mjs'
|
|
12
13
|
import { utilsFunctions, utilsFormatters } from './utils.mjs'
|
|
13
14
|
import { markdownFormatters } from './markdown.mjs'
|
|
14
15
|
import { AppContext } from './ctx.mjs'
|
|
@@ -22,6 +23,7 @@ const BuiltInModules = {
|
|
|
22
23
|
ThreadsModule,
|
|
23
24
|
ModelSelectorModule,
|
|
24
25
|
AnalyticsModule,
|
|
26
|
+
ToolsModule,
|
|
25
27
|
}
|
|
26
28
|
|
|
27
29
|
|
|
@@ -53,10 +55,13 @@ export async function createContext() {
|
|
|
53
55
|
}
|
|
54
56
|
}))
|
|
55
57
|
|
|
58
|
+
const installedModules = []
|
|
59
|
+
|
|
56
60
|
// Install built-in modules sequentially
|
|
57
61
|
Object.entries(BuiltInModules).forEach(([name, module]) => {
|
|
58
62
|
try {
|
|
59
63
|
module.install(ctx)
|
|
64
|
+
installedModules.push({ extension: { id: name }, module: { default: module } })
|
|
60
65
|
console.log(`Installed built-in: ${name}`)
|
|
61
66
|
} catch (e) {
|
|
62
67
|
console.error(`Failed to install built-in ${name}:`, e)
|
|
@@ -68,6 +73,7 @@ export async function createContext() {
|
|
|
68
73
|
if (result && result.module.default && result.module.default.install) {
|
|
69
74
|
try {
|
|
70
75
|
result.module.default.install(ctx)
|
|
76
|
+
installedModules.push(result)
|
|
71
77
|
console.log(`Installed extension: ${result.extension.id}`)
|
|
72
78
|
} catch (e) {
|
|
73
79
|
console.error(`Failed to install extension ${result.extension.id}:`, e)
|
|
@@ -103,8 +109,11 @@ export async function createContext() {
|
|
|
103
109
|
ctx.router.push({ path: ctx.layout.path })
|
|
104
110
|
}
|
|
105
111
|
|
|
112
|
+
const loadModules = installedModules.filter(x => x.module.default && x.module.default.load)
|
|
113
|
+
console.log('Loading modules: ', loadModules.map(x => x.extension.id))
|
|
114
|
+
|
|
106
115
|
// Load all extensions in parallel
|
|
107
|
-
await Promise.all(
|
|
116
|
+
await Promise.all(loadModules.map(async result => {
|
|
108
117
|
try {
|
|
109
118
|
await result.module.default.load(ctx)
|
|
110
119
|
console.log(`Loaded extension: ${result.extension.id}`)
|