armand0e commited on
Commit
f15ff24
·
1 Parent(s): 46d4f6c

Optionally add name upon submission + update source models with Qwen3 2507 specifications

Browse files
eslint.config.mjs ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { dirname } from "path";
2
+ import { fileURLToPath } from "url";
3
+ import { defineConfig, globalIgnores } from "eslint/config";
4
+ import { FlatCompat } from "@eslint/eslintrc";
5
+
6
+ const __filename = fileURLToPath(import.meta.url);
7
+ const __dirname = dirname(__filename);
8
+
9
+ const compat = new FlatCompat({
10
+ baseDirectory: __dirname,
11
+ });
12
+
13
+ const eslintConfig = defineConfig([
14
+ ...compat.extends("next/core-web-vitals"),
15
+ globalIgnores([
16
+ "node_modules/**",
17
+ ".next/**",
18
+ ".next/standalone/**",
19
+ "out/**",
20
+ "build/**",
21
+ "next-env.d.ts",
22
+ ]),
23
+ {
24
+ linterOptions: {
25
+ reportUnusedDisableDirectives: false,
26
+ },
27
+ },
28
+ ]);
29
+
30
+ export default eslintConfig;
src/app/admin/page.tsx CHANGED
@@ -24,6 +24,7 @@ type DistillationRequest = {
24
  id: string;
25
  sourceDataset: string;
26
  studentModel: string;
 
27
  additionalNotes: string;
28
  upvotes: number;
29
  createdAt: string;
@@ -33,6 +34,7 @@ type DistillationRequest = {
33
  type DatasetRequest = {
34
  id: string;
35
  sourceModel: string;
 
36
  datasetSize: string;
37
  reasoningDepth: string;
38
  topics: string[];
@@ -298,6 +300,9 @@ export default function AdminPage() {
298
  {request.additionalNotes ? (
299
  <p className="mt-2 text-sm text-muted-foreground">{request.additionalNotes}</p>
300
  ) : null}
 
 
 
301
  {type === "dataset" ? (
302
  <div className="mt-2 flex flex-wrap gap-1">
303
  <Badge variant="outline">{(request as DatasetRequest).reasoningDepth} reasoning</Badge>
 
24
  id: string;
25
  sourceDataset: string;
26
  studentModel: string;
27
+ submitterName?: string;
28
  additionalNotes: string;
29
  upvotes: number;
30
  createdAt: string;
 
34
  type DatasetRequest = {
35
  id: string;
36
  sourceModel: string;
37
+ submitterName?: string;
38
  datasetSize: string;
39
  reasoningDepth: string;
40
  topics: string[];
 
300
  {request.additionalNotes ? (
301
  <p className="mt-2 text-sm text-muted-foreground">{request.additionalNotes}</p>
302
  ) : null}
303
+ {(request as any).submitterName ? (
304
+ <p className="mt-2 text-sm text-muted-foreground">By {(request as any).submitterName}</p>
305
+ ) : null}
306
  {type === "dataset" ? (
307
  <div className="mt-2 flex flex-wrap gap-1">
308
  <Badge variant="outline">{(request as DatasetRequest).reasoningDepth} reasoning</Badge>
src/app/api/dataset/route.ts CHANGED
@@ -20,7 +20,7 @@ export async function POST(request: NextRequest) {
20
  try {
21
  const { userId, shouldSetCookie } = getOrCreateUserId(request);
22
  const body = await request.json();
23
- const { sourceModel, datasetSize, reasoningDepth, topics, additionalNotes } = body;
24
 
25
  if (!sourceModel) {
26
  return NextResponse.json(
@@ -31,6 +31,7 @@ export async function POST(request: NextRequest) {
31
 
32
  const newRequest = await addDatasetRequest({
33
  sourceModel,
 
34
  datasetSize: datasetSize || "250x",
35
  reasoningDepth: reasoningDepth || "high",
36
  topics: topics || [],
 
20
  try {
21
  const { userId, shouldSetCookie } = getOrCreateUserId(request);
22
  const body = await request.json();
23
+ const { sourceModel, submitterName, datasetSize, reasoningDepth, topics, additionalNotes } = body;
24
 
25
  if (!sourceModel) {
26
  return NextResponse.json(
 
31
 
32
  const newRequest = await addDatasetRequest({
33
  sourceModel,
34
+ submitterName: typeof submitterName === "string" && submitterName.trim() ? submitterName.trim() : undefined,
35
  datasetSize: datasetSize || "250x",
36
  reasoningDepth: reasoningDepth || "high",
37
  topics: topics || [],
src/app/api/distillation/route.ts CHANGED
@@ -20,7 +20,7 @@ export async function POST(request: NextRequest) {
20
  try {
21
  const { userId, shouldSetCookie } = getOrCreateUserId(request);
22
  const body = await request.json();
23
- const { sourceDataset, studentModel, additionalNotes } = body;
24
 
25
  if (!sourceDataset || !studentModel) {
26
  return NextResponse.json(
@@ -32,6 +32,7 @@ export async function POST(request: NextRequest) {
32
  const newRequest = await addDistillationRequest({
33
  sourceDataset,
34
  studentModel,
 
35
  additionalNotes: additionalNotes || "",
36
  ownerId: userId,
37
  });
 
20
  try {
21
  const { userId, shouldSetCookie } = getOrCreateUserId(request);
22
  const body = await request.json();
23
+ const { sourceDataset, studentModel, submitterName, additionalNotes } = body;
24
 
25
  if (!sourceDataset || !studentModel) {
26
  return NextResponse.json(
 
32
  const newRequest = await addDistillationRequest({
33
  sourceDataset,
34
  studentModel,
35
+ submitterName: typeof submitterName === "string" && submitterName.trim() ? submitterName.trim() : undefined,
36
  additionalNotes: additionalNotes || "",
37
  ownerId: userId,
38
  });
src/app/page.tsx CHANGED
@@ -25,6 +25,7 @@ interface DistillationRequest {
25
  id: string;
26
  sourceDataset: string;
27
  studentModel: string;
 
28
  additionalNotes: string;
29
  upvotes: number;
30
  createdAt: string;
@@ -34,6 +35,7 @@ interface DistillationRequest {
34
  interface DatasetRequest {
35
  id: string;
36
  sourceModel: string;
 
37
  datasetSize: string;
38
  reasoningDepth: string;
39
  topics: string[];
@@ -60,12 +62,14 @@ interface HuggingFaceModel {
60
 
61
  const STUDENT_MODELS = [
62
  "Qwen3-4B",
 
 
63
  "Qwen3-8B",
64
  "Qwen3-14B",
65
- "Qwen3-30B-A3B",
66
  "Qwen3-32B",
67
- "Nemotron-Cascade-14B",
68
- "Nemotron-Cascade-8B",
69
  "Other",
70
  ];
71
 
@@ -114,11 +118,13 @@ export default function Home() {
114
  const [sourceDatasetOther, setSourceDatasetOther] = useState("");
115
  const [studentModel, setStudentModel] = useState("");
116
  const [studentModelOther, setStudentModelOther] = useState("");
 
117
  const [distillNotes, setDistillNotes] = useState("");
118
 
119
  // Dataset form state
120
  const [sourceModel, setSourceModel] = useState("");
121
  const [sourceModelOther, setSourceModelOther] = useState("");
 
122
  const [datasetSize, setDatasetSize] = useState("250x");
123
  const [reasoningDepth, setReasoningDepth] = useState("high");
124
  const [selectedTopics, setSelectedTopics] = useState<string[]>([]);
@@ -237,6 +243,7 @@ export default function Home() {
237
  e.preventDefault();
238
  const resolvedSourceDataset = sourceDataset === "Other" ? sourceDatasetOther.trim() : sourceDataset;
239
  const resolvedStudentModel = studentModel === "Other" ? studentModelOther.trim() : studentModel;
 
240
  if (!resolvedSourceDataset || !resolvedStudentModel) {
241
  toast({ title: "Error", description: "Please fill in required fields", variant: "destructive" });
242
  return;
@@ -249,6 +256,7 @@ export default function Home() {
249
  body: JSON.stringify({
250
  sourceDataset: resolvedSourceDataset,
251
  studentModel: resolvedStudentModel,
 
252
  additionalNotes: distillNotes,
253
  }),
254
  });
@@ -260,6 +268,7 @@ export default function Home() {
260
  setStudentModelOther("");
261
  setDistillHfModelQuery("");
262
  setDistillHuggingfaceModels([]);
 
263
  setDistillNotes("");
264
  setShowDistillForm(false);
265
  fetchRequests();
@@ -277,6 +286,7 @@ export default function Home() {
277
  e.preventDefault();
278
  const resolvedSourceModel =
279
  sourceModel === SOURCE_MODEL_OTHER_HF ? sourceModelOther.trim() : sourceModel;
 
280
  if (!resolvedSourceModel) {
281
  toast({ title: "Error", description: "Please select a source model", variant: "destructive" });
282
  return;
@@ -288,6 +298,7 @@ export default function Home() {
288
  headers: { "Content-Type": "application/json" },
289
  body: JSON.stringify({
290
  sourceModel: resolvedSourceModel,
 
291
  datasetSize,
292
  reasoningDepth,
293
  topics: selectedTopics,
@@ -300,6 +311,7 @@ export default function Home() {
300
  setSourceModelOther("");
301
  setHfModelQuery("");
302
  setHuggingfaceModels([]);
 
303
  setDatasetSize("250x");
304
  setReasoningDepth("high");
305
  setSelectedTopics([]);
@@ -515,6 +527,17 @@ export default function Home() {
515
  />
516
  </div>
517
  )}
 
 
 
 
 
 
 
 
 
 
 
518
  <div className="space-y-2">
519
  <Label htmlFor="notes">Additional Notes</Label>
520
  <Textarea
@@ -581,6 +604,9 @@ export default function Home() {
581
  </h3>
582
  {getStatusBadge(request.status)}
583
  </div>
 
 
 
584
  {request.additionalNotes && (
585
  <p className="mb-2 text-sm text-muted-foreground">{request.additionalNotes}</p>
586
  )}
@@ -675,6 +701,17 @@ export default function Home() {
675
  />
676
  </div>
677
  )}
 
 
 
 
 
 
 
 
 
 
 
678
  <div className="space-y-2">
679
  <Label htmlFor="depth">Reasoning Depth</Label>
680
  <Select value={reasoningDepth} onValueChange={setReasoningDepth}>
@@ -775,6 +812,9 @@ export default function Home() {
775
  {getStatusBadge(request.status)}
776
  <Badge variant="outline">{request.reasoningDepth} reasoning</Badge>
777
  </div>
 
 
 
778
  {request.topics.length > 0 && (
779
  <div className="mb-2 flex flex-wrap gap-1">
780
  {request.topics.map((topic) => (
 
25
  id: string;
26
  sourceDataset: string;
27
  studentModel: string;
28
+ submitterName?: string;
29
  additionalNotes: string;
30
  upvotes: number;
31
  createdAt: string;
 
35
  interface DatasetRequest {
36
  id: string;
37
  sourceModel: string;
38
+ submitterName?: string;
39
  datasetSize: string;
40
  reasoningDepth: string;
41
  topics: string[];
 
62
 
63
  const STUDENT_MODELS = [
64
  "Qwen3-4B",
65
+ "Qwen3-4B-Thinking-2507",
66
+ "Qwen3-4B-Instruct-2507",
67
  "Qwen3-8B",
68
  "Qwen3-14B",
69
+ "Qwen3-30B-A3B-Thinking-2507",
70
  "Qwen3-32B",
71
+ "Nemotron-Cascade-14B-Thinking",
72
+ "Nemotron-Cascade-8B-Thinking",
73
  "Other",
74
  ];
75
 
 
118
  const [sourceDatasetOther, setSourceDatasetOther] = useState("");
119
  const [studentModel, setStudentModel] = useState("");
120
  const [studentModelOther, setStudentModelOther] = useState("");
121
+ const [distillSubmitterName, setDistillSubmitterName] = useState("");
122
  const [distillNotes, setDistillNotes] = useState("");
123
 
124
  // Dataset form state
125
  const [sourceModel, setSourceModel] = useState("");
126
  const [sourceModelOther, setSourceModelOther] = useState("");
127
+ const [datasetSubmitterName, setDatasetSubmitterName] = useState("");
128
  const [datasetSize, setDatasetSize] = useState("250x");
129
  const [reasoningDepth, setReasoningDepth] = useState("high");
130
  const [selectedTopics, setSelectedTopics] = useState<string[]>([]);
 
243
  e.preventDefault();
244
  const resolvedSourceDataset = sourceDataset === "Other" ? sourceDatasetOther.trim() : sourceDataset;
245
  const resolvedStudentModel = studentModel === "Other" ? studentModelOther.trim() : studentModel;
246
+ const resolvedSubmitterName = distillSubmitterName.trim();
247
  if (!resolvedSourceDataset || !resolvedStudentModel) {
248
  toast({ title: "Error", description: "Please fill in required fields", variant: "destructive" });
249
  return;
 
256
  body: JSON.stringify({
257
  sourceDataset: resolvedSourceDataset,
258
  studentModel: resolvedStudentModel,
259
+ submitterName: resolvedSubmitterName || undefined,
260
  additionalNotes: distillNotes,
261
  }),
262
  });
 
268
  setStudentModelOther("");
269
  setDistillHfModelQuery("");
270
  setDistillHuggingfaceModels([]);
271
+ setDistillSubmitterName("");
272
  setDistillNotes("");
273
  setShowDistillForm(false);
274
  fetchRequests();
 
286
  e.preventDefault();
287
  const resolvedSourceModel =
288
  sourceModel === SOURCE_MODEL_OTHER_HF ? sourceModelOther.trim() : sourceModel;
289
+ const resolvedSubmitterName = datasetSubmitterName.trim();
290
  if (!resolvedSourceModel) {
291
  toast({ title: "Error", description: "Please select a source model", variant: "destructive" });
292
  return;
 
298
  headers: { "Content-Type": "application/json" },
299
  body: JSON.stringify({
300
  sourceModel: resolvedSourceModel,
301
+ submitterName: resolvedSubmitterName || undefined,
302
  datasetSize,
303
  reasoningDepth,
304
  topics: selectedTopics,
 
311
  setSourceModelOther("");
312
  setHfModelQuery("");
313
  setHuggingfaceModels([]);
314
+ setDatasetSubmitterName("");
315
  setDatasetSize("250x");
316
  setReasoningDepth("high");
317
  setSelectedTopics([]);
 
527
  />
528
  </div>
529
  )}
530
+ <div className="space-y-2">
531
+ <Label htmlFor="distillSubmitterName">Name (optional)</Label>
532
+ <input
533
+ id="distillSubmitterName"
534
+ title="Name"
535
+ className="flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2"
536
+ value={distillSubmitterName}
537
+ onChange={(e) => setDistillSubmitterName(e.target.value)}
538
+ placeholder="Your name (optional)"
539
+ />
540
+ </div>
541
  <div className="space-y-2">
542
  <Label htmlFor="notes">Additional Notes</Label>
543
  <Textarea
 
604
  </h3>
605
  {getStatusBadge(request.status)}
606
  </div>
607
+ {request.submitterName ? (
608
+ <p className="mb-2 text-sm text-muted-foreground">By {request.submitterName}</p>
609
+ ) : null}
610
  {request.additionalNotes && (
611
  <p className="mb-2 text-sm text-muted-foreground">{request.additionalNotes}</p>
612
  )}
 
701
  />
702
  </div>
703
  )}
704
+ <div className="space-y-2">
705
+ <Label htmlFor="datasetSubmitterName">Name (optional)</Label>
706
+ <input
707
+ id="datasetSubmitterName"
708
+ title="Name"
709
+ className="flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2"
710
+ value={datasetSubmitterName}
711
+ onChange={(e) => setDatasetSubmitterName(e.target.value)}
712
+ placeholder="Your name (optional)"
713
+ />
714
+ </div>
715
  <div className="space-y-2">
716
  <Label htmlFor="depth">Reasoning Depth</Label>
717
  <Select value={reasoningDepth} onValueChange={setReasoningDepth}>
 
812
  {getStatusBadge(request.status)}
813
  <Badge variant="outline">{request.reasoningDepth} reasoning</Badge>
814
  </div>
815
+ {request.submitterName ? (
816
+ <p className="mb-2 text-sm text-muted-foreground">By {request.submitterName}</p>
817
+ ) : null}
818
  {request.topics.length > 0 && (
819
  <div className="mb-2 flex flex-wrap gap-1">
820
  {request.topics.map((topic) => (
src/app/requests/[type]/[id]/page.tsx CHANGED
@@ -18,6 +18,7 @@ type DistillationRequest = {
18
  id: string;
19
  sourceDataset: string;
20
  studentModel: string;
 
21
  additionalNotes: string;
22
  upvotes: number;
23
  createdAt: string;
@@ -29,6 +30,7 @@ type DistillationRequest = {
29
  type DatasetRequest = {
30
  id: string;
31
  sourceModel: string;
 
32
  datasetSize: string;
33
  reasoningDepth: string;
34
  topics: string[];
@@ -316,6 +318,9 @@ export default function RequestDiscussionPage() {
316
  {request ? <StatusBadge status={request.status} /> : null}
317
  <Badge variant="outline">{type}</Badge>
318
  </div>
 
 
 
319
  <p className="mt-1 text-sm text-muted-foreground">
320
  <Link href="/" className="hover:underline">Home</Link>
321
  <span className="mx-2">/</span>
@@ -346,6 +351,13 @@ export default function RequestDiscussionPage() {
346
  <Badge variant="outline">Created {formatDate(request.createdAt)}</Badge>
347
  </div>
348
 
 
 
 
 
 
 
 
349
  {type === "distillation" ? (
350
  <div className="space-y-2">
351
  <div className="text-sm">
 
18
  id: string;
19
  sourceDataset: string;
20
  studentModel: string;
21
+ submitterName?: string;
22
  additionalNotes: string;
23
  upvotes: number;
24
  createdAt: string;
 
30
  type DatasetRequest = {
31
  id: string;
32
  sourceModel: string;
33
+ submitterName?: string;
34
  datasetSize: string;
35
  reasoningDepth: string;
36
  topics: string[];
 
318
  {request ? <StatusBadge status={request.status} /> : null}
319
  <Badge variant="outline">{type}</Badge>
320
  </div>
321
+ {request && (request as any).submitterName ? (
322
+ <p className="mt-1 text-sm text-muted-foreground">By {(request as any).submitterName}</p>
323
+ ) : null}
324
  <p className="mt-1 text-sm text-muted-foreground">
325
  <Link href="/" className="hover:underline">Home</Link>
326
  <span className="mx-2">/</span>
 
351
  <Badge variant="outline">Created {formatDate(request.createdAt)}</Badge>
352
  </div>
353
 
354
+ {(request as any).submitterName ? (
355
+ <div className="text-sm">
356
+ <span className="text-muted-foreground">Submitted by:</span>{" "}
357
+ <span className="text-foreground">{(request as any).submitterName}</span>
358
+ </div>
359
+ ) : null}
360
+
361
  {type === "distillation" ? (
362
  <div className="space-y-2">
363
  <div className="text-sm">
src/lib/store.ts CHANGED
@@ -4,6 +4,7 @@ export interface DistillationRequest {
4
  id: string;
5
  sourceDataset: string;
6
  studentModel: string;
 
7
  additionalNotes: string;
8
  upvotes: number;
9
  votedIps: string[];
@@ -15,6 +16,7 @@ export interface DistillationRequest {
15
  export interface DatasetRequest {
16
  id: string;
17
  sourceModel: string;
 
18
  datasetSize: string;
19
  reasoningDepth: string;
20
  topics: string[];
@@ -56,10 +58,12 @@ function normalizeStatus(value: unknown): "pending" | "in_progress" | "completed
56
  }
57
 
58
  function mapDistillationRow(row: any): DistillationRequest {
 
59
  return {
60
  id: String(row?.id ?? ""),
61
  sourceDataset: String(row?.source_dataset ?? ""),
62
  studentModel: String(row?.student_model ?? ""),
 
63
  additionalNotes: String(row?.additional_notes ?? ""),
64
  upvotes: typeof row?.upvotes === "number" ? row.upvotes : 0,
65
  votedIps: Array.isArray(row?.voted_ips) ? row.voted_ips.map(String) : [],
@@ -70,9 +74,11 @@ function mapDistillationRow(row: any): DistillationRequest {
70
  }
71
 
72
  function mapDatasetRow(row: any): DatasetRequest {
 
73
  return {
74
  id: String(row?.id ?? ""),
75
  sourceModel: String(row?.source_model ?? ""),
 
76
  datasetSize: String(row?.dataset_size ?? "250x"),
77
  reasoningDepth: String(row?.reasoning_depth ?? "high"),
78
  topics: Array.isArray(row?.topics) ? row.topics.map(String) : [],
@@ -388,6 +394,7 @@ export async function addDistillationRequest(
388
  body: JSON.stringify({
389
  source_dataset: request.sourceDataset,
390
  student_model: request.studentModel,
 
391
  additional_notes: request.additionalNotes,
392
  owner_id: request.ownerId,
393
  }),
@@ -412,6 +419,7 @@ export async function addDatasetRequest(
412
  method: "POST",
413
  body: JSON.stringify({
414
  source_model: request.sourceModel,
 
415
  dataset_size: request.datasetSize,
416
  reasoning_depth: request.reasoningDepth,
417
  topics: request.topics,
 
4
  id: string;
5
  sourceDataset: string;
6
  studentModel: string;
7
+ submitterName?: string;
8
  additionalNotes: string;
9
  upvotes: number;
10
  votedIps: string[];
 
16
  export interface DatasetRequest {
17
  id: string;
18
  sourceModel: string;
19
+ submitterName?: string;
20
  datasetSize: string;
21
  reasoningDepth: string;
22
  topics: string[];
 
58
  }
59
 
60
  function mapDistillationRow(row: any): DistillationRequest {
61
+ const submitterNameRaw = typeof row?.submitter_name === "string" ? row.submitter_name.trim() : "";
62
  return {
63
  id: String(row?.id ?? ""),
64
  sourceDataset: String(row?.source_dataset ?? ""),
65
  studentModel: String(row?.student_model ?? ""),
66
+ submitterName: submitterNameRaw ? submitterNameRaw : undefined,
67
  additionalNotes: String(row?.additional_notes ?? ""),
68
  upvotes: typeof row?.upvotes === "number" ? row.upvotes : 0,
69
  votedIps: Array.isArray(row?.voted_ips) ? row.voted_ips.map(String) : [],
 
74
  }
75
 
76
  function mapDatasetRow(row: any): DatasetRequest {
77
+ const submitterNameRaw = typeof row?.submitter_name === "string" ? row.submitter_name.trim() : "";
78
  return {
79
  id: String(row?.id ?? ""),
80
  sourceModel: String(row?.source_model ?? ""),
81
+ submitterName: submitterNameRaw ? submitterNameRaw : undefined,
82
  datasetSize: String(row?.dataset_size ?? "250x"),
83
  reasoningDepth: String(row?.reasoning_depth ?? "high"),
84
  topics: Array.isArray(row?.topics) ? row.topics.map(String) : [],
 
394
  body: JSON.stringify({
395
  source_dataset: request.sourceDataset,
396
  student_model: request.studentModel,
397
+ submitter_name: request.submitterName ? request.submitterName : null,
398
  additional_notes: request.additionalNotes,
399
  owner_id: request.ownerId,
400
  }),
 
419
  method: "POST",
420
  body: JSON.stringify({
421
  source_model: request.sourceModel,
422
+ submitter_name: request.submitterName ? request.submitterName : null,
423
  dataset_size: request.datasetSize,
424
  reasoning_depth: request.reasoningDepth,
425
  topics: request.topics,
supabase/schema.sql CHANGED
@@ -4,6 +4,7 @@ create table if not exists public.distillation_requests (
4
  id uuid primary key default gen_random_uuid (),
5
  source_dataset text not null,
6
  student_model text not null,
 
7
  additional_notes text not null default '',
8
  upvotes integer not null default 0,
9
  voted_ips text [] not null default '{}',
@@ -15,6 +16,7 @@ create table if not exists public.distillation_requests (
15
  create table if not exists public.dataset_requests (
16
  id uuid primary key default gen_random_uuid (),
17
  source_model text not null,
 
18
  dataset_size text not null default '250x',
19
  reasoning_depth text not null default 'high',
20
  topics text [] not null default '{}',
@@ -26,6 +28,12 @@ create table if not exists public.dataset_requests (
26
  status text not null default 'pending'
27
  );
28
 
 
 
 
 
 
 
29
  create table if not exists public.request_comments (
30
  id uuid primary key default gen_random_uuid (),
31
  request_type text not null check (
 
4
  id uuid primary key default gen_random_uuid (),
5
  source_dataset text not null,
6
  student_model text not null,
7
+ submitter_name text null,
8
  additional_notes text not null default '',
9
  upvotes integer not null default 0,
10
  voted_ips text [] not null default '{}',
 
16
  create table if not exists public.dataset_requests (
17
  id uuid primary key default gen_random_uuid (),
18
  source_model text not null,
19
+ submitter_name text null,
20
  dataset_size text not null default '250x',
21
  reasoning_depth text not null default 'high',
22
  topics text [] not null default '{}',
 
28
  status text not null default 'pending'
29
  );
30
 
31
+ alter table public.distillation_requests
32
+ add column if not exists submitter_name text;
33
+
34
+ alter table public.dataset_requests
35
+ add column if not exists submitter_name text;
36
+
37
  create table if not exists public.request_comments (
38
  id uuid primary key default gen_random_uuid (),
39
  request_type text not null check (