AiCoderv2 commited on
Commit
bacbce1
·
verified ·
1 Parent(s): 302d169

Upload folder using huggingface_hub

Browse files
Files changed (3) hide show
  1. assets/css/styles.css +731 -0
  2. assets/js/app.js +1 -0
  3. index.html +213 -19
assets/css/styles.css ADDED
@@ -0,0 +1,731 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ :root {
2
+ --primary-color: #6366f1;
3
+ --primary-dark: #4f46e5;
4
+ --secondary-color: #8b5cf6;
5
+ --success-color: #10b981;
6
+ --warning-color: #f59e0b;
7
+ --danger-color: #ef4444;
8
+ --bg-primary: #ffffff;
9
+ --bg-secondary: #f9fafb;
10
+ --bg-tertiary: #f3f4f6;
11
+ --text-primary: #111827;
12
+ --text-secondary: #6b7280;
13
+ --text-tertiary: #9ca3af;
14
+ --border-color: #e5e7eb;
15
+ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
16
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
17
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
18
+ --radius-sm: 0.375rem;
19
+ --radius-md: 0.5rem;
20
+ --radius-lg: 0.75rem;
21
+ }
22
+
23
+ [data-theme="dark"] {
24
+ --bg-primary: #111827;
25
+ --bg-secondary: #1f2937;
26
+ --bg-tertiary: #374151;
27
+ --text-primary: #f9fafb;
28
+ --text-secondary: #d1d5db;
29
+ --text-tertiary: #9ca3af;
30
+ --border-color: #374151;
31
+ }
32
+
33
+ * {
34
+ margin: 0;
35
+ padding: 0;
36
+ box-sizing: border-box;
37
+ }
38
+
39
+ body {
40
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
41
+ background-color: var(--bg-secondary);
42
+ color: var(--text-primary);
43
+ line-height: 1.6;
44
+ transition: background-color 0.3s, color 0.3s;
45
+ }
46
+
47
+ .header {
48
+ background: var(--bg-primary);
49
+ border-bottom: 1px solid var(--border-color);
50
+ position: sticky;
51
+ top: 0;
52
+ z-index: 100;
53
+ box-shadow: var(--shadow-sm);
54
+ }
55
+
56
+ .header-container {
57
+ max-width: 1400px;
58
+ margin: 0 auto;
59
+ padding: 1rem 1.5rem;
60
+ display: flex;
61
+ justify-content: space-between;
62
+ align-items: center;
63
+ }
64
+
65
+ .logo {
66
+ display: flex;
67
+ align-items: center;
68
+ gap: 0.75rem;
69
+ font-size: 1.25rem;
70
+ font-weight: 600;
71
+ color: var(--primary-color);
72
+ }
73
+
74
+ .logo i {
75
+ font-size: 1.5rem;
76
+ }
77
+
78
+ .nav {
79
+ display: flex;
80
+ gap: 1rem;
81
+ align-items: center;
82
+ }
83
+
84
+ .nav-link {
85
+ color: var(--text-secondary);
86
+ text-decoration: none;
87
+ padding: 0.5rem 1rem;
88
+ border-radius: var(--radius-md);
89
+ transition: all 0.2s;
90
+ display: flex;
91
+ align-items: center;
92
+ gap: 0.5rem;
93
+ }
94
+
95
+ .nav-link:hover {
96
+ color: var(--primary-color);
97
+ background: var(--bg-tertiary);
98
+ }
99
+
100
+ .anycoder-link {
101
+ background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
102
+ color: white !important;
103
+ font-weight: 500;
104
+ }
105
+
106
+ .anycoder-link:hover {
107
+ transform: translateY(-1px);
108
+ box-shadow: var(--shadow-md);
109
+ }
110
+
111
+ .main-container {
112
+ display: flex;
113
+ height: calc(100vh - 73px);
114
+ max-width: 1400px;
115
+ margin: 0 auto;
116
+ gap: 1rem;
117
+ padding: 1rem;
118
+ }
119
+
120
+ .sidebar {
121
+ width: 320px;
122
+ background: var(--bg-primary);
123
+ border-radius: var(--radius-lg);
124
+ padding: 1.5rem;
125
+ overflow-y: auto;
126
+ box-shadow: var(--shadow-md);
127
+ }
128
+
129
+ .model-selector h3 {
130
+ margin-bottom: 1rem;
131
+ font-size: 1.125rem;
132
+ font-weight: 600;
133
+ }
134
+
135
+ .search-box {
136
+ position: relative;
137
+ margin-bottom: 1rem;
138
+ }
139
+
140
+ .search-box i {
141
+ position: absolute;
142
+ left: 0.75rem;
143
+ top: 50%;
144
+ transform: translateY(-50%);
145
+ color: var(--text-tertiary);
146
+ }
147
+
148
+ .search-box input {
149
+ width: 100%;
150
+ padding: 0.625rem 1rem 0.625rem 2.5rem;
151
+ border: 1px solid var(--border-color);
152
+ border-radius: var(--radius-md);
153
+ background: var(--bg-secondary);
154
+ color: var(--text-primary);
155
+ font-size: 0.875rem;
156
+ transition: all 0.2s;
157
+ }
158
+
159
+ .search-box input:focus {
160
+ outline: none;
161
+ border-color: var(--primary-color);
162
+ box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1);
163
+ }
164
+
165
+ .model-categories {
166
+ display: flex;
167
+ flex-wrap: wrap;
168
+ gap: 0.5rem;
169
+ margin-bottom: 1rem;
170
+ }
171
+
172
+ .category-btn {
173
+ padding: 0.375rem 0.75rem;
174
+ border: 1px solid var(--border-color);
175
+ background: var(--bg-secondary);
176
+ color: var(--text-secondary);
177
+ border-radius: var(--radius-sm);
178
+ font-size: 0.75rem;
179
+ cursor: pointer;
180
+ transition: all 0.2s;
181
+ }
182
+
183
+ .category-btn:hover {
184
+ background: var(--bg-tertiary);
185
+ }
186
+
187
+ .category-btn.active {
188
+ background: var(--primary-color);
189
+ color: white;
190
+ border-color: var(--primary-color);
191
+ }
192
+
193
+ .model-list {
194
+ display: flex;
195
+ flex-direction: column;
196
+ gap: 0.5rem;
197
+ }
198
+
199
+ .model-item {
200
+ padding: 0.75rem;
201
+ border: 1px solid var(--border-color);
202
+ border-radius: var(--radius-md);
203
+ cursor: pointer;
204
+ transition: all 0.2s;
205
+ display: flex;
206
+ justify-content: space-between;
207
+ align-items: center;
208
+ }
209
+
210
+ .model-item:hover {
211
+ background: var(--bg-tertiary);
212
+ border-color: var(--primary-color);
213
+ }
214
+
215
+ .model-item.selected {
216
+ background: linear-gradient(135deg, rgba(99, 102, 241, 0.1), rgba(139, 92, 246, 0.1));
217
+ border-color: var(--primary-color);
218
+ }
219
+
220
+ .model-name {
221
+ font-weight: 500;
222
+ font-size: 0.875rem;
223
+ }
224
+
225
+ .model-size {
226
+ font-size: 0.75rem;
227
+ color: var(--text-tertiary);
228
+ }
229
+
230
+ .chat-container {
231
+ flex: 1;
232
+ background: var(--bg-primary);
233
+ border-radius: var(--radius-lg);
234
+ display: flex;
235
+ flex-direction: column;
236
+ box-shadow: var(--shadow-md);
237
+ overflow: hidden;
238
+ }
239
+
240
+ .chat-header {
241
+ padding: 1rem 1.5rem;
242
+ border-bottom: 1px solid var(--border-color);
243
+ display: flex;
244
+ justify-content: space-between;
245
+ align-items: center;
246
+ }
247
+
248
+ .current-model {
249
+ display: flex;
250
+ align-items: center;
251
+ gap: 0.75rem;
252
+ font-weight: 500;
253
+ }
254
+
255
+ .model-status {
256
+ width: 8px;
257
+ height: 8px;
258
+ border-radius: 50%;
259
+ background: var(--success-color);
260
+ animation: pulse 2s infinite;
261
+ }
262
+
263
+ @keyframes pulse {
264
+ 0%, 100% { opacity: 1; }
265
+ 50% { opacity: 0.5; }
266
+ }
267
+
268
+ .chat-actions {
269
+ display: flex;
270
+ gap: 0.5rem;
271
+ }
272
+
273
+ .action-btn {
274
+ padding: 0.5rem;
275
+ background: var(--bg-secondary);
276
+ border: 1px solid var(--border-color);
277
+ border-radius: var(--radius-md);
278
+ color: var(--text-secondary);
279
+ cursor: pointer;
280
+ transition: all 0.2s;
281
+ }
282
+
283
+ .action-btn:hover {
284
+ background: var(--bg-tertiary);
285
+ color: var(--text-primary);
286
+ }
287
+
288
+ .chat-messages {
289
+ flex: 1;
290
+ overflow-y: auto;
291
+ padding: 1.5rem;
292
+ display: flex;
293
+ flex-direction: column;
294
+ gap: 1rem;
295
+ }
296
+
297
+ .welcome-message {
298
+ text-align: center;
299
+ padding: 3rem 1rem;
300
+ color: var(--text-secondary);
301
+ }
302
+
303
+ .welcome-message i {
304
+ font-size: 3rem;
305
+ color: var(--primary-color);
306
+ margin-bottom: 1rem;
307
+ }
308
+
309
+ .welcome-message h2 {
310
+ margin-bottom: 0.5rem;
311
+ color: var(--text-primary);
312
+ }
313
+
314
+ .quick-actions {
315
+ display: flex;
316
+ gap: 1rem;
317
+ justify-content: center;
318
+ margin-top: 2rem;
319
+ flex-wrap: wrap;
320
+ }
321
+
322
+ .example-btn {
323
+ padding: 0.75rem 1.25rem;
324
+ background: var(--bg-secondary);
325
+ border: 1px solid var(--border-color);
326
+ border-radius: var(--radius-md);
327
+ color: var(--text-primary);
328
+ cursor: pointer;
329
+ transition: all 0.2s;
330
+ display: flex;
331
+ align-items: center;
332
+ gap: 0.5rem;
333
+ font-size: 0.875rem;
334
+ }
335
+
336
+ .example-btn:hover {
337
+ background: var(--primary-color);
338
+ color: white;
339
+ border-color: var(--primary-color);
340
+ transform: translateY(-2px);
341
+ box-shadow: var(--shadow-md);
342
+ }
343
+
344
+ .message {
345
+ display: flex;
346
+ gap: 0.75rem;
347
+ animation: fadeIn 0.3s ease-in;
348
+ }
349
+
350
+ @keyframes fadeIn {
351
+ from { opacity: 0; transform: translateY(10px); }
352
+ to { opacity: 1; transform: translateY(0); }
353
+ }
354
+
355
+ .message.user {
356
+ flex-direction: row-reverse;
357
+ }
358
+
359
+ .message-avatar {
360
+ width: 32px;
361
+ height: 32px;
362
+ border-radius: 50%;
363
+ display: flex;
364
+ align-items: center;
365
+ justify-content: center;
366
+ font-size: 0.875rem;
367
+ flex-shrink: 0;
368
+ }
369
+
370
+ .message.user .message-avatar {
371
+ background: var(--primary-color);
372
+ color: white;
373
+ }
374
+
375
+ .message.assistant .message-avatar {
376
+ background: var(--bg-tertiary);
377
+ color: var(--text-secondary);
378
+ }
379
+
380
+ .message-content {
381
+ max-width: 70%;
382
+ padding: 0.75rem 1rem;
383
+ border-radius: var(--radius-lg);
384
+ background: var(--bg-secondary);
385
+ border: 1px solid var(--border-color);
386
+ }
387
+
388
+ .message.user .message-content {
389
+ background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
390
+ color: white;
391
+ border: none;
392
+ }
393
+
394
+ .message-text {
395
+ white-space: pre-wrap;
396
+ word-wrap: break-word;
397
+ }
398
+
399
+ .message-time {
400
+ font-size: 0.75rem;
401
+ color: var(--text-tertiary);
402
+ margin-top: 0.25rem;
403
+ }
404
+
405
+ .typing-indicator {
406
+ display: flex;
407
+ gap: 0.25rem;
408
+ padding: 0.5rem 0;
409
+ }
410
+
411
+ .typing-dot {
412
+ width: 8px;
413
+ height: 8px;
414
+ border-radius: 50%;
415
+ background: var(--text-tertiary);
416
+ animation: typing 1.4s infinite;
417
+ }
418
+
419
+ .typing-dot:nth-child(2) { animation-delay: 0.2s; }
420
+ .typing-dot:nth-child(3) { animation-delay: 0.4s; }
421
+
422
+ @keyframes typing {
423
+ 0%, 60%, 100% { transform: translateY(0); }
424
+ 30% { transform: translateY(-10px); }
425
+ }
426
+
427
+ .chat-input-container {
428
+ padding: 1rem 1.5rem;
429
+ border-top: 1px solid var(--border-color);
430
+ background: var(--bg-primary);
431
+ }
432
+
433
+ .input-wrapper {
434
+ display: flex;
435
+ gap: 0.75rem;
436
+ align-items: flex-end;
437
+ background: var(--bg-secondary);
438
+ border: 1px solid var(--border-color);
439
+ border-radius: var(--radius-lg);
440
+ padding: 0.75rem;
441
+ transition: all 0.2s;
442
+ }
443
+
444
+ .input-wrapper:focus-within {
445
+ border-color: var(--primary-color);
446
+ box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1);
447
+ }
448
+
449
+ #messageInput {
450
+ flex: 1;
451
+ border: none;
452
+ background: transparent;
453
+ color: var(--text-primary);
454
+ font-size: 0.875rem;
455
+ resize: none;
456
+ outline: none;
457
+ max-height: 120px;
458
+ line-height: 1.5;
459
+ }
460
+
461
+ #messageInput::placeholder {
462
+ color: var(--text-tertiary);
463
+ }
464
+
465
+ .input-actions {
466
+ display: flex;
467
+ gap: 0.5rem;
468
+ }
469
+
470
+ .input-action-btn {
471
+ padding: 0.5rem;
472
+ background: transparent;
473
+ border: none;
474
+ color: var(--text-tertiary);
475
+ cursor: pointer;
476
+ border-radius: var(--radius-sm);
477
+ transition: all 0.2s;
478
+ }
479
+
480
+ .input-action-btn:hover {
481
+ background: var(--bg-tertiary);
482
+ color: var(--text-primary);
483
+ }
484
+
485
+ .send-btn {
486
+ padding: 0.5rem 0.75rem;
487
+ background: var(--primary-color);
488
+ border: none;
489
+ color: white;
490
+ cursor: pointer;
491
+ border-radius: var(--radius-sm);
492
+ transition: all 0.2s;
493
+ }
494
+
495
+ .send-btn:hover {
496
+ background: var(--primary-dark);
497
+ transform: translateY(-1px);
498
+ }
499
+
500
+ .send-btn:disabled {
501
+ opacity: 0.5;
502
+ cursor: not-allowed;
503
+ }
504
+
505
+ .input-info {
506
+ display: flex;
507
+ justify-content: space-between;
508
+ margin-top: 0.5rem;
509
+ font-size: 0.75rem;
510
+ color: var(--text-tertiary);
511
+ }
512
+
513
+ .modal {
514
+ display: none;
515
+ position: fixed;
516
+ top: 0;
517
+ left: 0;
518
+ width: 100%;
519
+ height: 100%;
520
+ background: rgba(0, 0, 0, 0.5);
521
+ z-index: 1000;
522
+ align-items: center;
523
+ justify-content: center;
524
+ }
525
+
526
+ .modal.active {
527
+ display: flex;
528
+ }
529
+
530
+ .modal-content {
531
+ background: var(--bg-primary);
532
+ border-radius: var(--radius-lg);
533
+ width: 90%;
534
+ max-width: 500px;
535
+ max-height: 80vh;
536
+ overflow-y: auto;
537
+ box-shadow: var(--shadow-lg);
538
+ }
539
+
540
+ .modal-header {
541
+ padding: 1.5rem;
542
+ border-bottom: 1px solid var(--border-color);
543
+ display: flex;
544
+ justify-content: space-between;
545
+ align-items: center;
546
+ }
547
+
548
+ .modal-header h3 {
549
+ font-size: 1.25rem;
550
+ font-weight: 600;
551
+ }
552
+
553
+ .close-btn {
554
+ background: transparent;
555
+ border: none;
556
+ color: var(--text-tertiary);
557
+ cursor: pointer;
558
+ padding: 0.5rem;
559
+ border-radius: var(--radius-sm);
560
+ transition: all 0.2s;
561
+ }
562
+
563
+ .close-btn:hover {
564
+ background: var(--bg-tertiary);
565
+ color: var(--text-primary);
566
+ }
567
+
568
+ .modal-body {
569
+ padding: 1.5rem;
570
+ }
571
+
572
+ .setting-group {
573
+ margin-bottom: 1.5rem;
574
+ }
575
+
576
+ .setting-group label {
577
+ display: block;
578
+ margin-bottom: 0.5rem;
579
+ font-weight: 500;
580
+ color: var(--text-secondary);
581
+ font-size: 0.875rem;
582
+ }
583
+
584
+ .setting-group input[type="range"] {
585
+ width: 100%;
586
+ margin-bottom: 0.5rem;
587
+ }
588
+
589
+ .setting-group select,
590
+ .setting-group textarea {
591
+ width: 100%;
592
+ padding: 0.625rem;
593
+ border: 1px solid var(--border-color);
594
+ border-radius: var(--radius-md);
595
+ background: var(--bg-secondary);
596
+ color: var(--text-primary);
597
+ font-size: 0.875rem;
598
+ }
599
+
600
+ .setting-group textarea {
601
+ resize: vertical;
602
+ min-height: 80px;
603
+ }
604
+
605
+ .modal-footer {
606
+ padding: 1rem 1.5rem;
607
+ border-top: 1px solid var(--border-color);
608
+ display: flex;
609
+ justify-content: flex-end;
610
+ }
611
+
612
+ .btn-primary {
613
+ padding: 0.625rem 1.25rem;
614
+ background: var(--primary-color);
615
+ color: white;
616
+ border: none;
617
+ border-radius: var(--radius-md);
618
+ cursor: pointer;
619
+ font-weight: 500;
620
+ transition: all 0.2s;
621
+ }
622
+
623
+ .btn-primary:hover {
624
+ background: var(--primary-dark);
625
+ transform: translateY(-1px);
626
+ }
627
+
628
+ .model-stats {
629
+ display: grid;
630
+ grid-template-columns: repeat(3, 1fr);
631
+ gap: 1rem;
632
+ margin-bottom: 1.5rem;
633
+ }
634
+
635
+ .stat-card {
636
+ text-align: center;
637
+ padding: 1rem;
638
+ background: var(--bg-secondary);
639
+ border-radius: var(--radius-md);
640
+ }
641
+
642
+ .stat-card i {
643
+ font-size: 1.5rem;
644
+ color: var(--primary-color);
645
+ margin-bottom: 0.5rem;
646
+ }
647
+
648
+ .stat-card h4 {
649
+ font-size: 1.5rem;
650
+ font-weight: 600;
651
+ color: var(--text-primary);
652
+ }
653
+
654
+ .stat-card p {
655
+ font-size: 0.875rem;
656
+ color: var(--text-tertiary);
657
+ }
658
+
659
+ .model-categories-info ul {
660
+ list-style: none;
661
+ padding: 0;
662
+ }
663
+
664
+ .model-categories-info li {
665
+ padding: 0.5rem 0;
666
+ border-bottom: 1px solid var(--border-color);
667
+ }
668
+
669
+ .model-categories-info li:last-child {
670
+ border-bottom: none;
671
+ }
672
+
673
+ @media (max-width: 768px) {
674
+ .main-container {
675
+ flex-direction: column;
676
+ }
677
+
678
+ .sidebar {
679
+ width: 100%;
680
+ max-height: 300px;
681
+ }
682
+
683
+ .message-content {
684
+ max-width: 85%;
685
+ }
686
+
687
+ .quick-actions {
688
+ flex-direction: column;
689
+ align-items: center;
690
+ }
691
+
692
+ .example-btn {
693
+ width: 100%;
694
+ max-width: 250px;
695
+ }
696
+
697
+ .model-stats {
698
+ grid-template-columns: 1fr;
699
+ }
700
+ }
701
+
702
+ @media (max-width: 480px) {
703
+ .header-container {
704
+ padding: 1rem;
705
+ }
706
+
707
+ .nav {
708
+ gap: 0.5rem;
709
+ }
710
+
711
+ .nav-link span {
712
+ display: none;
713
+ }
714
+
715
+ .main-container {
716
+ padding: 0.5rem;
717
+ gap: 0.5rem;
718
+ }
719
+
720
+ .chat-header {
721
+ padding: 0.75rem 1rem;
722
+ }
723
+
724
+ .chat-messages {
725
+ padding: 1rem;
726
+ }
727
+
728
+ .chat-input-container {
729
+ padding: 0.75rem 1rem;
730
+ }
731
+ }
assets/js/app.js ADDED
@@ -0,0 +1 @@
 
 
1
+ // generated stub
index.html CHANGED
@@ -1,19 +1,213 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>AI Chat Hub - 50+ Free Models</title>
7
+ <meta name="description" content="Chat with 50+ AI models including OpenAI GPT OSS 120B, 20B, and more. Free access to cutting-edge language models.">
8
+ <meta name="keywords" content="AI chat, GPT, language models, free AI, OpenAI, chatbot">
9
+ <link rel="stylesheet" href="assets/css/styles.css">
10
+ <link rel="preconnect" href="https://fonts.googleapis.com">
11
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
12
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
13
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
14
+ </head>
15
+ <body>
16
+ <header class="header">
17
+ <div class="header-container">
18
+ <div class="logo">
19
+ <i class="fas fa-robot"></i>
20
+ <span>AI Chat Hub</span>
21
+ </div>
22
+ <nav class="nav">
23
+ <a href="#" class="nav-link" onclick="showModelInfo()">
24
+ <i class="fas fa-info-circle"></i> Models
25
+ </a>
26
+ <a href="#" class="nav-link" onclick="toggleSettings()">
27
+ <i class="fas fa-cog"></i> Settings
28
+ </a>
29
+ <a href="https://huggingface.co/spaces/akhaliq/anycoder" target="_blank" class="nav-link anycoder-link">
30
+ Built with anycoder
31
+ </a>
32
+ </nav>
33
+ </div>
34
+ </header>
35
+
36
+ <main class="main-container">
37
+ <aside class="sidebar">
38
+ <div class="model-selector">
39
+ <h3>Select Model</h3>
40
+ <div class="search-box">
41
+ <i class="fas fa-search"></i>
42
+ <input type="text" id="modelSearch" placeholder="Search models...">
43
+ </div>
44
+ <div class="model-categories">
45
+ <button class="category-btn active" data-category="all">All Models</button>
46
+ <button class="category-btn" data-category="openai">OpenAI OSS</button>
47
+ <button class="category-btn" data-category="meta">Meta</button>
48
+ <button class="category-btn" data-category="google">Google</button>
49
+ <button class="category-btn" data-category="mistral">Mistral</button>
50
+ <button class="category-btn" data-category="other">Other</button>
51
+ </div>
52
+ <div class="model-list" id="modelList">
53
+ <!-- Models will be populated by JavaScript -->
54
+ </div>
55
+ </div>
56
+ </aside>
57
+
58
+ <section class="chat-container">
59
+ <div class="chat-header">
60
+ <div class="current-model">
61
+ <i class="fas fa-brain"></i>
62
+ <span id="currentModelName">OpenAI GPT OSS 120B</span>
63
+ <span class="model-status online"></span>
64
+ </div>
65
+ <div class="chat-actions">
66
+ <button onclick="clearChat()" class="action-btn" title="Clear chat">
67
+ <i class="fas fa-trash"></i>
68
+ </button>
69
+ <button onclick="exportChat()" class="action-btn" title="Export chat">
70
+ <i class="fas fa-download"></i>
71
+ </button>
72
+ <button onclick="toggleDarkMode()" class="action-btn" title="Toggle dark mode">
73
+ <i class="fas fa-moon"></i>
74
+ </button>
75
+ </div>
76
+ </div>
77
+
78
+ <div class="chat-messages" id="chatMessages">
79
+ <div class="welcome-message">
80
+ <i class="fas fa-robot"></i>
81
+ <h2>Welcome to AI Chat Hub</h2>
82
+ <p>Select a model from the sidebar and start chatting. Access 50+ cutting-edge AI models for free!</p>
83
+ <div class="quick-actions">
84
+ <button onclick="sendExample('Tell me about yourself')" class="example-btn">
85
+ <i class="fas fa-comment"></i> Tell me about yourself
86
+ </button>
87
+ <button onclick="sendExample('Help me write a story')" class="example-btn">
88
+ <i class="fas fa-pen"></i> Help me write a story
89
+ </button>
90
+ <button onclick="sendExample('Explain quantum computing')" class="example-btn">
91
+ <i class="fas fa-atom"></i> Explain quantum computing
92
+ </button>
93
+ </div>
94
+ </div>
95
+ </div>
96
+
97
+ <div class="chat-input-container">
98
+ <div class="input-wrapper">
99
+ <textarea
100
+ id="messageInput"
101
+ placeholder="Type your message here..."
102
+ rows="1"
103
+ maxlength="4000"
104
+ ></textarea>
105
+ <div class="input-actions">
106
+ <button onclick="attachFile()" class="input-action-btn" title="Attach file">
107
+ <i class="fas fa-paperclip"></i>
108
+ </button>
109
+ <button onclick="sendVoiceMessage()" class="input-action-btn" title="Voice input">
110
+ <i class="fas fa-microphone"></i>
111
+ </button>
112
+ <button onclick="sendMessage()" class="send-btn" id="sendBtn">
113
+ <i class="fas fa-paper-plane"></i>
114
+ </button>
115
+ </div>
116
+ </div>
117
+ <div class="input-info">
118
+ <span id="charCount">0 / 4000</span>
119
+ <span id="modelInfo">Model: OpenAI GPT OSS 120B • Free tier</span>
120
+ </div>
121
+ </div>
122
+ </section>
123
+ </main>
124
+
125
+ <div class="settings-modal" id="settingsModal">
126
+ <div class="modal-content">
127
+ <div class="modal-header">
128
+ <h3>Settings</h3>
129
+ <button onclick="toggleSettings()" class="close-btn">
130
+ <i class="fas fa-times"></i>
131
+ </button>
132
+ </div>
133
+ <div class="modal-body">
134
+ <div class="setting-group">
135
+ <label>Temperature</label>
136
+ <input type="range" id="temperature" min="0" max="100" value="70">
137
+ <span id="tempValue">0.7</span>
138
+ </div>
139
+ <div class="setting-group">
140
+ <label>Max Tokens</label>
141
+ <select id="maxTokens">
142
+ <option value="512">512</option>
143
+ <option value="1024">1024</option>
144
+ <option value="2048" selected>2048</option>
145
+ <option value="4096">4096</option>
146
+ </select>
147
+ </div>
148
+ <div class="setting-group">
149
+ <label>System Prompt</label>
150
+ <textarea id="systemPrompt" placeholder="Enter system prompt...">You are a helpful AI assistant.</textarea>
151
+ </div>
152
+ <div class="setting-group">
153
+ <label>
154
+ <input type="checkbox" id="streamResponse" checked>
155
+ Stream responses
156
+ </label>
157
+ </div>
158
+ </div>
159
+ <div class="modal-footer">
160
+ <button onclick="saveSettings()" class="btn-primary">Save Settings</button>
161
+ </div>
162
+ </div>
163
+ </div>
164
+
165
+ <div class="model-info-modal" id="modelInfoModal">
166
+ <div class="modal-content">
167
+ <div class="modal-header">
168
+ <h3>Available Models</h3>
169
+ <button onclick="closeModelInfo()" class="close-btn">
170
+ <i class="fas fa-times"></i>
171
+ </button>
172
+ </div>
173
+ <div class="modal-body">
174
+ <div class="model-stats">
175
+ <div class="stat-card">
176
+ <i class="fas fa-brain"></i>
177
+ <div>
178
+ <h4>50+</h4>
179
+ <p>Total Models</p>
180
+ </div>
181
+ </div>
182
+ <div class="stat-card">
183
+ <i class="fas fa-bolt"></i>
184
+ <div>
185
+ <h4>Free</h4>
186
+ <p>Access</p>
187
+ </div>
188
+ </div>
189
+ <div class="stat-card">
190
+ <i class="fas fa-server"></i>
191
+ <div>
192
+ <h4>120B</h4>
193
+ <p>Max Parameters</p>
194
+ </div>
195
+ </div>
196
+ </div>
197
+ <div class="model-categories-info">
198
+ <h4>Model Categories</h4>
199
+ <ul>
200
+ <li><strong>OpenAI OSS:</strong> GPT-120B, GPT-20B, and more</li>
201
+ <li><strong>Meta:</strong> LLaMA 2 70B, 13B, 7B variants</li>
202
+ <li><strong>Google:</strong> PaLM 2, Gemini models</li>
203
+ <li><strong>Mistral:</strong> Mixtral 8x7B, Mistral 7B</li>
204
+ <li><strong>Other:</strong> Falcon, Claude, Vicuna, and more</li>
205
+ </ul>
206
+ </div>
207
+ </div>
208
+ </div>
209
+ </div>
210
+
211
+ <script src="assets/js/app.js"></script>
212
+ </body>
213
+ </html>