lemonade-sdk 8.0.6__py3-none-any.whl → 8.1.1__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.
Potentially problematic release.
This version of lemonade-sdk might be problematic. Click here for more details.
- lemonade/common/inference_engines.py +62 -77
- lemonade/common/network.py +18 -1
- lemonade/common/system_info.py +61 -44
- lemonade/tools/llamacpp/bench.py +3 -1
- lemonade/tools/llamacpp/load.py +13 -4
- lemonade/tools/llamacpp/utils.py +229 -61
- lemonade/tools/oga/load.py +239 -112
- lemonade/tools/oga/utils.py +19 -7
- lemonade/tools/server/llamacpp.py +30 -53
- lemonade/tools/server/serve.py +64 -123
- lemonade/tools/server/static/styles.css +208 -6
- lemonade/tools/server/static/webapp.html +510 -71
- lemonade/tools/server/tray.py +4 -2
- lemonade/tools/server/utils/thread.py +2 -4
- lemonade/version.py +1 -1
- lemonade_install/install.py +90 -86
- {lemonade_sdk-8.0.6.dist-info → lemonade_sdk-8.1.1.dist-info}/METADATA +74 -24
- {lemonade_sdk-8.0.6.dist-info → lemonade_sdk-8.1.1.dist-info}/RECORD +27 -27
- lemonade_server/cli.py +79 -26
- lemonade_server/model_manager.py +4 -3
- lemonade_server/pydantic_models.py +1 -4
- lemonade_server/server_models.json +60 -11
- {lemonade_sdk-8.0.6.dist-info → lemonade_sdk-8.1.1.dist-info}/WHEEL +0 -0
- {lemonade_sdk-8.0.6.dist-info → lemonade_sdk-8.1.1.dist-info}/entry_points.txt +0 -0
- {lemonade_sdk-8.0.6.dist-info → lemonade_sdk-8.1.1.dist-info}/licenses/LICENSE +0 -0
- {lemonade_sdk-8.0.6.dist-info → lemonade_sdk-8.1.1.dist-info}/licenses/NOTICE.md +0 -0
- {lemonade_sdk-8.0.6.dist-info → lemonade_sdk-8.1.1.dist-info}/top_level.txt +0 -0
|
@@ -27,7 +27,6 @@ body {
|
|
|
27
27
|
min-height: 100vh;
|
|
28
28
|
display: flex;
|
|
29
29
|
flex-direction: column;
|
|
30
|
-
padding-bottom: 5rem;
|
|
31
30
|
}
|
|
32
31
|
|
|
33
32
|
body::before {
|
|
@@ -102,13 +101,9 @@ body::before {
|
|
|
102
101
|
}
|
|
103
102
|
|
|
104
103
|
.site-footer {
|
|
105
|
-
position: fixed;
|
|
106
|
-
left: 0;
|
|
107
|
-
bottom: 0;
|
|
108
|
-
width: 100%;
|
|
109
104
|
background: transparent;
|
|
110
105
|
padding-top: 0.5rem;
|
|
111
|
-
|
|
106
|
+
margin-top: auto;
|
|
112
107
|
}
|
|
113
108
|
|
|
114
109
|
.dad-joke {
|
|
@@ -421,6 +416,37 @@ body::before {
|
|
|
421
416
|
color: #222;
|
|
422
417
|
}
|
|
423
418
|
|
|
419
|
+
.input-with-indicator {
|
|
420
|
+
flex: 1;
|
|
421
|
+
position: relative;
|
|
422
|
+
display: flex;
|
|
423
|
+
align-items: center;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
.input-with-indicator input[type='text'] {
|
|
427
|
+
flex: 1;
|
|
428
|
+
padding: 0.5em;
|
|
429
|
+
border: 1px solid #ddd;
|
|
430
|
+
border-radius: 4px;
|
|
431
|
+
background: #fff;
|
|
432
|
+
color: #222;
|
|
433
|
+
margin: 0;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
#attachment-indicator {
|
|
437
|
+
position: absolute;
|
|
438
|
+
right: 8px;
|
|
439
|
+
top: 50%;
|
|
440
|
+
transform: translateY(-50%);
|
|
441
|
+
font-size: 14px;
|
|
442
|
+
color: #666;
|
|
443
|
+
pointer-events: none;
|
|
444
|
+
background: rgba(255, 255, 255, 0.9);
|
|
445
|
+
padding: 2px 4px;
|
|
446
|
+
border-radius: 3px;
|
|
447
|
+
border: 1px solid #ddd;
|
|
448
|
+
}
|
|
449
|
+
|
|
424
450
|
.chat-input-row button {
|
|
425
451
|
padding: 0.5em 1.2em;
|
|
426
452
|
background: #e6b800;
|
|
@@ -432,6 +458,29 @@ body::before {
|
|
|
432
458
|
font-weight: 600;
|
|
433
459
|
}
|
|
434
460
|
|
|
461
|
+
#attachment-btn {
|
|
462
|
+
padding: 0.5em 0.8em;
|
|
463
|
+
background: #f0f0f0;
|
|
464
|
+
color: #222;
|
|
465
|
+
border: 1px solid #ddd;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
#attachment-btn:hover {
|
|
469
|
+
background: #e0e0e0;
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
#clear-attachments-btn {
|
|
473
|
+
padding: 0.5em 0.6em;
|
|
474
|
+
background: #ff6b6b;
|
|
475
|
+
color: white;
|
|
476
|
+
border: 1px solid #ff5252;
|
|
477
|
+
margin-left: 0.2em;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
#clear-attachments-btn:hover {
|
|
481
|
+
background: #ff5252;
|
|
482
|
+
}
|
|
483
|
+
|
|
435
484
|
.chat-input-row button:hover {
|
|
436
485
|
background: #d4a500;
|
|
437
486
|
}
|
|
@@ -442,6 +491,121 @@ body::before {
|
|
|
442
491
|
cursor: not-allowed;
|
|
443
492
|
}
|
|
444
493
|
|
|
494
|
+
/* Image attachment preview styles */
|
|
495
|
+
.attachments-preview-container {
|
|
496
|
+
padding: 0.5em 1em 0 1em;
|
|
497
|
+
background: #f9f9f9;
|
|
498
|
+
border-top: 1px solid #e0e0e0;
|
|
499
|
+
display: none;
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
.attachments-preview-container.has-attachments {
|
|
503
|
+
display: block;
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
.attachments-preview-row {
|
|
507
|
+
display: flex;
|
|
508
|
+
gap: 8px;
|
|
509
|
+
align-items: center;
|
|
510
|
+
flex-wrap: wrap;
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
.attachment-preview {
|
|
514
|
+
display: flex;
|
|
515
|
+
align-items: center;
|
|
516
|
+
gap: 6px;
|
|
517
|
+
padding: 4px 8px;
|
|
518
|
+
background: #fff;
|
|
519
|
+
border: 1px solid #ddd;
|
|
520
|
+
border-radius: 4px;
|
|
521
|
+
box-shadow: 0 1px 2px rgba(0,0,0,0.05);
|
|
522
|
+
transition: all 0.2s ease;
|
|
523
|
+
font-size: 0.85em;
|
|
524
|
+
position: relative;
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
.attachment-preview:hover {
|
|
528
|
+
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
|
529
|
+
background: #fafafa;
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
.attachment-thumbnail {
|
|
533
|
+
width: 20px;
|
|
534
|
+
height: 20px;
|
|
535
|
+
border-radius: 2px;
|
|
536
|
+
object-fit: cover;
|
|
537
|
+
background: #f8f8f8;
|
|
538
|
+
border: 1px solid #e0e0e0;
|
|
539
|
+
flex-shrink: 0;
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
.attachment-filename {
|
|
543
|
+
color: #666;
|
|
544
|
+
max-width: 120px;
|
|
545
|
+
overflow: hidden;
|
|
546
|
+
text-overflow: ellipsis;
|
|
547
|
+
white-space: nowrap;
|
|
548
|
+
font-size: 0.9em;
|
|
549
|
+
line-height: 1;
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
.attachment-remove-btn {
|
|
553
|
+
background: none;
|
|
554
|
+
border: none;
|
|
555
|
+
color: #999;
|
|
556
|
+
cursor: pointer;
|
|
557
|
+
font-size: 14px;
|
|
558
|
+
padding: 0 2px;
|
|
559
|
+
margin-left: 4px;
|
|
560
|
+
transition: color 0.2s ease;
|
|
561
|
+
flex-shrink: 0;
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
.attachment-remove-btn:hover {
|
|
565
|
+
color: #ff6b6b;
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
.attachment-remove-btn:active {
|
|
569
|
+
transform: scale(0.9);
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
/* Fallback for non-image files or broken images */
|
|
573
|
+
.attachment-preview.no-preview .attachment-thumbnail {
|
|
574
|
+
display: flex;
|
|
575
|
+
align-items: center;
|
|
576
|
+
justify-content: center;
|
|
577
|
+
background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
|
|
578
|
+
border: 1px dashed #dee2e6;
|
|
579
|
+
color: #6c757d;
|
|
580
|
+
font-size: 12px;
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
/* Mobile responsive adjustments */
|
|
584
|
+
@media (max-width: 600px) {
|
|
585
|
+
.attachments-preview-row {
|
|
586
|
+
gap: 6px;
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
.attachment-preview {
|
|
590
|
+
padding: 3px 6px;
|
|
591
|
+
gap: 4px;
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
.attachment-thumbnail {
|
|
595
|
+
width: 18px;
|
|
596
|
+
height: 18px;
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
.attachment-filename {
|
|
600
|
+
max-width: 100px;
|
|
601
|
+
font-size: 0.8em;
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
.attachment-remove-btn {
|
|
605
|
+
font-size: 12px;
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
|
|
445
609
|
/* Model Management */
|
|
446
610
|
.model-mgmt-container {
|
|
447
611
|
display: flex;
|
|
@@ -535,6 +699,10 @@ body::before {
|
|
|
535
699
|
background-color: #ca4747;
|
|
536
700
|
}
|
|
537
701
|
|
|
702
|
+
.model-label.coding {
|
|
703
|
+
background-color: #ff6b35;
|
|
704
|
+
}
|
|
705
|
+
|
|
538
706
|
.model-labels-container {
|
|
539
707
|
display: flex;
|
|
540
708
|
align-items: center;
|
|
@@ -1378,3 +1546,37 @@ body::before {
|
|
|
1378
1546
|
from { opacity: 0; transform: translateY(-5px); }
|
|
1379
1547
|
to { opacity: 1; transform: translateY(0); }
|
|
1380
1548
|
}
|
|
1549
|
+
|
|
1550
|
+
/* Error banner styles */
|
|
1551
|
+
.error-banner {
|
|
1552
|
+
position: fixed;
|
|
1553
|
+
top: 10px;
|
|
1554
|
+
left: 50%;
|
|
1555
|
+
transform: translateX(-50%);
|
|
1556
|
+
background-color: #dc3545;
|
|
1557
|
+
color: #fff;
|
|
1558
|
+
padding: 0.6em 1.2em;
|
|
1559
|
+
border-radius: 6px;
|
|
1560
|
+
box-shadow: 0 2px 8px rgba(0,0,0,0.2);
|
|
1561
|
+
z-index: 10000;
|
|
1562
|
+
font-weight: 600;
|
|
1563
|
+
white-space: pre-line;
|
|
1564
|
+
display: none;
|
|
1565
|
+
animation: fadeIn 0.2s ease;
|
|
1566
|
+
align-items: center;
|
|
1567
|
+
}
|
|
1568
|
+
|
|
1569
|
+
.error-banner .close-btn {
|
|
1570
|
+
background: none;
|
|
1571
|
+
border: none;
|
|
1572
|
+
color: #fff;
|
|
1573
|
+
font-size: 1.2em;
|
|
1574
|
+
margin-left: 0.8em;
|
|
1575
|
+
cursor: pointer;
|
|
1576
|
+
padding: 0;
|
|
1577
|
+
line-height: 1;
|
|
1578
|
+
}
|
|
1579
|
+
|
|
1580
|
+
.error-banner .close-btn:hover {
|
|
1581
|
+
opacity: 0.8;
|
|
1582
|
+
}
|