diff --git a/cli.py b/cli.py index 05f7035b51..84f600c2e8 100644 --- a/cli.py +++ b/cli.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + from cli import app if __name__ == "__main__": diff --git a/cli/__init__.py b/cli/__init__.py index 7a0918d16b..fe3321f38a 100644 --- a/cli/__init__.py +++ b/cli/__init__.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + import typer from cli.commands.train import train diff --git a/cli/commands/export.py b/cli/commands/export.py index 375b6902ba..ba487aeff3 100644 --- a/cli/commands/export.py +++ b/cli/commands/export.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + from pathlib import Path from typing import Optional diff --git a/cli/commands/inference.py b/cli/commands/inference.py index 83928b2dbc..18ff1bb183 100644 --- a/cli/commands/inference.py +++ b/cli/commands/inference.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + import sys from typing import Optional diff --git a/cli/commands/studio.py b/cli/commands/studio.py index 2489676844..e7be41a441 100644 --- a/cli/commands/studio.py +++ b/cli/commands/studio.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + import time from pathlib import Path from typing import Optional diff --git a/cli/commands/train.py b/cli/commands/train.py index 5941cfa5c3..2e78db7375 100644 --- a/cli/commands/train.py +++ b/cli/commands/train.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + import time from pathlib import Path from typing import Optional diff --git a/cli/commands/ui.py b/cli/commands/ui.py index 6eaeeb793e..9b950214ca 100644 --- a/cli/commands/ui.py +++ b/cli/commands/ui.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + import time from pathlib import Path from typing import Optional diff --git a/cli/config.py b/cli/config.py index b6bc8dc999..c6c886d7b2 100644 --- a/cli/config.py +++ b/cli/config.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + from pathlib import Path from typing import Literal, Optional, List diff --git a/cli/options.py b/cli/options.py index dbc66a9931..3cdc75fb85 100644 --- a/cli/options.py +++ b/cli/options.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """Generate Typer CLI options from Pydantic models.""" import functools diff --git a/install_python_stack.py b/install_python_stack.py index c6b4e556f4..78ddc571d0 100644 --- a/install_python_stack.py +++ b/install_python_stack.py @@ -1,4 +1,8 @@ #!/usr/bin/env python3 + +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """Cross-platform Python dependency installer for Unsloth Studio. Called by both setup.sh (Linux / WSL) and setup.ps1 (Windows) after the diff --git a/setup.ps1 b/setup.ps1 index 61ae40f3b2..5a573126aa 100644 --- a/setup.ps1 +++ b/setup.ps1 @@ -1,4 +1,6 @@ #Requires -Version 5.1 +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI <# .SYNOPSIS Full environment setup for Unsloth Studio on Windows (bundled version). diff --git a/setup.sh b/setup.sh index 6edb470d8d..b1ff403fbe 100755 --- a/setup.sh +++ b/setup.sh @@ -1,4 +1,7 @@ #!/usr/bin/env bash +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" diff --git a/studio/backend/auth/__init__.py b/studio/backend/auth/__init__.py index 60ad59885c..d9abcc6d3c 100644 --- a/studio/backend/auth/__init__.py +++ b/studio/backend/auth/__init__.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Authentication module for JWT-based auth with SQLite storage. """ diff --git a/studio/backend/auth/authentication.py b/studio/backend/auth/authentication.py index e725834630..57569df497 100644 --- a/studio/backend/auth/authentication.py +++ b/studio/backend/auth/authentication.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + import secrets from datetime import datetime, timedelta, timezone from typing import Optional diff --git a/studio/backend/auth/hashing.py b/studio/backend/auth/hashing.py index c5d629a2a2..d2ba1e92a9 100644 --- a/studio/backend/auth/hashing.py +++ b/studio/backend/auth/hashing.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Password hashing utilities using PBKDF2. """ diff --git a/studio/backend/auth/storage.py b/studio/backend/auth/storage.py index e5a486bca2..f72a7ed943 100644 --- a/studio/backend/auth/storage.py +++ b/studio/backend/auth/storage.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ SQLite storage for authentication data (user credentials + JWT secret). """ diff --git a/studio/backend/colab.py b/studio/backend/colab.py index e3e9bc0cf0..69400ea673 100644 --- a/studio/backend/colab.py +++ b/studio/backend/colab.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Colab-specific helpers for running Unsloth Studio. Uses Colab's built-in proxy - no external tunneling needed! diff --git a/studio/backend/core/__init__.py b/studio/backend/core/__init__.py index 2b1e3246c0..3a44c3b3c1 100644 --- a/studio/backend/core/__init__.py +++ b/studio/backend/core/__init__.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Unified core module for Unsloth backend diff --git a/studio/backend/core/data_recipe/__init__.py b/studio/backend/core/data_recipe/__init__.py index 0665a8e4c2..eab78fb801 100644 --- a/studio/backend/core/data_recipe/__init__.py +++ b/studio/backend/core/data_recipe/__init__.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Data Recipe core (DataDesigner wrapper + job runner). """ diff --git a/studio/backend/core/data_recipe/jobs/__init__.py b/studio/backend/core/data_recipe/jobs/__init__.py index bac519ee3a..eb157ba833 100644 --- a/studio/backend/core/data_recipe/jobs/__init__.py +++ b/studio/backend/core/data_recipe/jobs/__init__.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + from .manager import JobManager, get_job_manager __all__ = ["JobManager", "get_job_manager"] diff --git a/studio/backend/core/data_recipe/jobs/constants.py b/studio/backend/core/data_recipe/jobs/constants.py index 5d4081abbc..c67894c7fc 100644 --- a/studio/backend/core/data_recipe/jobs/constants.py +++ b/studio/backend/core/data_recipe/jobs/constants.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + from __future__ import annotations # stages parsed from data-designer logs diff --git a/studio/backend/core/data_recipe/jobs/manager.py b/studio/backend/core/data_recipe/jobs/manager.py index de367dcce6..6e1856b308 100644 --- a/studio/backend/core/data_recipe/jobs/manager.py +++ b/studio/backend/core/data_recipe/jobs/manager.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + from __future__ import annotations import asyncio diff --git a/studio/backend/core/data_recipe/jobs/parse.py b/studio/backend/core/data_recipe/jobs/parse.py index 858ddb7f03..9812baad3b 100644 --- a/studio/backend/core/data_recipe/jobs/parse.py +++ b/studio/backend/core/data_recipe/jobs/parse.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + from __future__ import annotations import re diff --git a/studio/backend/core/data_recipe/jobs/types.py b/studio/backend/core/data_recipe/jobs/types.py index 80bd03cf77..c004c28d91 100644 --- a/studio/backend/core/data_recipe/jobs/types.py +++ b/studio/backend/core/data_recipe/jobs/types.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + from __future__ import annotations from dataclasses import dataclass, field diff --git a/studio/backend/core/data_recipe/jobs/worker.py b/studio/backend/core/data_recipe/jobs/worker.py index 9181fd8136..fbe9d91b6d 100644 --- a/studio/backend/core/data_recipe/jobs/worker.py +++ b/studio/backend/core/data_recipe/jobs/worker.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + from __future__ import annotations import json diff --git a/studio/backend/core/data_recipe/jsonable.py b/studio/backend/core/data_recipe/jsonable.py index b45a378028..5912e6daf7 100644 --- a/studio/backend/core/data_recipe/jsonable.py +++ b/studio/backend/core/data_recipe/jsonable.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + from __future__ import annotations import base64 diff --git a/studio/backend/core/data_recipe/local_callable_validators.py b/studio/backend/core/data_recipe/local_callable_validators.py index 3d95e68265..5e2749d45d 100644 --- a/studio/backend/core/data_recipe/local_callable_validators.py +++ b/studio/backend/core/data_recipe/local_callable_validators.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + from __future__ import annotations import json diff --git a/studio/backend/core/data_recipe/service.py b/studio/backend/core/data_recipe/service.py index 01855f5b1d..63d841c372 100644 --- a/studio/backend/core/data_recipe/service.py +++ b/studio/backend/core/data_recipe/service.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + from __future__ import annotations import base64 diff --git a/studio/backend/core/export/__init__.py b/studio/backend/core/export/__init__.py index 0a883f5f3f..43c827c613 100644 --- a/studio/backend/core/export/__init__.py +++ b/studio/backend/core/export/__init__.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Export submodule - Model export operations diff --git a/studio/backend/core/export/export.py b/studio/backend/core/export/export.py index bd14fb412e..986da0def2 100644 --- a/studio/backend/core/export/export.py +++ b/studio/backend/core/export/export.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + # backend/export.py """ Export backend - handles model exporting in various formats diff --git a/studio/backend/core/export/orchestrator.py b/studio/backend/core/export/orchestrator.py index 790ac4b000..d6a04a3c1b 100644 --- a/studio/backend/core/export/orchestrator.py +++ b/studio/backend/core/export/orchestrator.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Export orchestrator — subprocess-based. diff --git a/studio/backend/core/export/worker.py b/studio/backend/core/export/worker.py index 82428e670b..a19ba429e9 100644 --- a/studio/backend/core/export/worker.py +++ b/studio/backend/core/export/worker.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Export subprocess entry point. diff --git a/studio/backend/core/inference/__init__.py b/studio/backend/core/inference/__init__.py index 6d44742d9c..a0567b8c4e 100644 --- a/studio/backend/core/inference/__init__.py +++ b/studio/backend/core/inference/__init__.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Inference submodule - Inference backend for model loading and generation diff --git a/studio/backend/core/inference/audio_codecs.py b/studio/backend/core/inference/audio_codecs.py index 5a1fd5d984..b5cdd92560 100644 --- a/studio/backend/core/inference/audio_codecs.py +++ b/studio/backend/core/inference/audio_codecs.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Audio codec loading and decoding for TTS inference. Supports: SNAC (Orpheus), CSM (Sesame), BiCodec (Spark), DAC (OuteTTS) diff --git a/studio/backend/core/inference/inference.py b/studio/backend/core/inference/inference.py index 6ced3fc2ad..bd9a9c0c43 100644 --- a/studio/backend/core/inference/inference.py +++ b/studio/backend/core/inference/inference.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Core inference backend - streamlined """ diff --git a/studio/backend/core/inference/llama_cpp.py b/studio/backend/core/inference/llama_cpp.py index f47b9132db..37a57e4c39 100644 --- a/studio/backend/core/inference/llama_cpp.py +++ b/studio/backend/core/inference/llama_cpp.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ llama-server inference backend for GGUF models. diff --git a/studio/backend/core/inference/orchestrator.py b/studio/backend/core/inference/orchestrator.py index 6910b3dc19..acab9e2245 100644 --- a/studio/backend/core/inference/orchestrator.py +++ b/studio/backend/core/inference/orchestrator.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Inference orchestrator — subprocess-based. diff --git a/studio/backend/core/inference/worker.py b/studio/backend/core/inference/worker.py index e59372c216..21214fbbc5 100644 --- a/studio/backend/core/inference/worker.py +++ b/studio/backend/core/inference/worker.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Inference subprocess entry point. diff --git a/studio/backend/core/training/__init__.py b/studio/backend/core/training/__init__.py index 0e0299caf6..a081d1c658 100644 --- a/studio/backend/core/training/__init__.py +++ b/studio/backend/core/training/__init__.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Training submodule - Training backends and trainer classes """ diff --git a/studio/backend/core/training/trainer.py b/studio/backend/core/training/trainer.py index 96d593b6cf..31e05d0bda 100644 --- a/studio/backend/core/training/trainer.py +++ b/studio/backend/core/training/trainer.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Unsloth Training Backend Integrates Unsloth training capabilities with the FastAPI backend diff --git a/studio/backend/core/training/training.py b/studio/backend/core/training/training.py index b4d33d7c35..101ba13621 100644 --- a/studio/backend/core/training/training.py +++ b/studio/backend/core/training/training.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Training backend — subprocess orchestrator. diff --git a/studio/backend/core/training/worker.py b/studio/backend/core/training/worker.py index f657b1c77a..7b98865eea 100644 --- a/studio/backend/core/training/worker.py +++ b/studio/backend/core/training/worker.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Training subprocess entry point. diff --git a/studio/backend/main.py b/studio/backend/main.py index 696d8a4d10..3a437f08ff 100644 --- a/studio/backend/main.py +++ b/studio/backend/main.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Main FastAPI application for Unsloth UI Backend """ diff --git a/studio/backend/models/__init__.py b/studio/backend/models/__init__.py index bafcb45a9f..a6c1b38b34 100644 --- a/studio/backend/models/__init__.py +++ b/studio/backend/models/__init__.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Pydantic models for API request/response schemas """ diff --git a/studio/backend/models/auth.py b/studio/backend/models/auth.py index 43c591fb53..c46196271d 100644 --- a/studio/backend/models/auth.py +++ b/studio/backend/models/auth.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Pydantic schemas for Authentication API """ diff --git a/studio/backend/models/data_recipe.py b/studio/backend/models/data_recipe.py index 418ef97afc..fc7e0e8a69 100644 --- a/studio/backend/models/data_recipe.py +++ b/studio/backend/models/data_recipe.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Pydantic schemas for Data Recipe (DataDesigner) API. """ diff --git a/studio/backend/models/datasets.py b/studio/backend/models/datasets.py index 49d8b4c419..73c75dc650 100644 --- a/studio/backend/models/datasets.py +++ b/studio/backend/models/datasets.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Dataset-related Pydantic models for API requests and responses. """ diff --git a/studio/backend/models/export.py b/studio/backend/models/export.py index df17596185..182c41bf96 100644 --- a/studio/backend/models/export.py +++ b/studio/backend/models/export.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Pydantic schemas for Export API. """ diff --git a/studio/backend/models/inference.py b/studio/backend/models/inference.py index d285d99507..37f342f48c 100644 --- a/studio/backend/models/inference.py +++ b/studio/backend/models/inference.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Pydantic schemas for Inference API """ diff --git a/studio/backend/models/models.py b/studio/backend/models/models.py index 8d5a2bfc0a..e69c48691f 100644 --- a/studio/backend/models/models.py +++ b/studio/backend/models/models.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Pydantic schemas for Model Management API """ diff --git a/studio/backend/models/responses.py b/studio/backend/models/responses.py index c72dfc54dd..c157717262 100644 --- a/studio/backend/models/responses.py +++ b/studio/backend/models/responses.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Pydantic response schemas for endpoints that previously returned raw dicts. These are small response models for training and model management routes. diff --git a/studio/backend/models/training.py b/studio/backend/models/training.py index c03d7b04bf..c3b8d99bb4 100644 --- a/studio/backend/models/training.py +++ b/studio/backend/models/training.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Pydantic schemas for Training API """ diff --git a/studio/backend/models/users.py b/studio/backend/models/users.py index c90e27942f..a12e7d5908 100644 --- a/studio/backend/models/users.py +++ b/studio/backend/models/users.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """Pydantic models for authentication tokens. This module defines the Token response model used by auth routes. diff --git a/studio/backend/plugins/data-designer-unstructured-seed/src/data_designer_unstructured_seed/__init__.py b/studio/backend/plugins/data-designer-unstructured-seed/src/data_designer_unstructured_seed/__init__.py index 0d9b5ce7eb..020da831f2 100644 --- a/studio/backend/plugins/data-designer-unstructured-seed/src/data_designer_unstructured_seed/__init__.py +++ b/studio/backend/plugins/data-designer-unstructured-seed/src/data_designer_unstructured_seed/__init__.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + from .chunking import ( DEFAULT_CHUNK_OVERLAP, DEFAULT_CHUNK_SIZE, diff --git a/studio/backend/plugins/data-designer-unstructured-seed/src/data_designer_unstructured_seed/chunking.py b/studio/backend/plugins/data-designer-unstructured-seed/src/data_designer_unstructured_seed/chunking.py index 4ce7d360bc..358e7ea701 100644 --- a/studio/backend/plugins/data-designer-unstructured-seed/src/data_designer_unstructured_seed/chunking.py +++ b/studio/backend/plugins/data-designer-unstructured-seed/src/data_designer_unstructured_seed/chunking.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + from __future__ import annotations import hashlib diff --git a/studio/backend/plugins/data-designer-unstructured-seed/src/data_designer_unstructured_seed/config.py b/studio/backend/plugins/data-designer-unstructured-seed/src/data_designer_unstructured_seed/config.py index 487579fda1..1f323856d4 100644 --- a/studio/backend/plugins/data-designer-unstructured-seed/src/data_designer_unstructured_seed/config.py +++ b/studio/backend/plugins/data-designer-unstructured-seed/src/data_designer_unstructured_seed/config.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + from __future__ import annotations from pathlib import Path diff --git a/studio/backend/plugins/data-designer-unstructured-seed/src/data_designer_unstructured_seed/impl.py b/studio/backend/plugins/data-designer-unstructured-seed/src/data_designer_unstructured_seed/impl.py index 0c81f636bf..5a5143d118 100644 --- a/studio/backend/plugins/data-designer-unstructured-seed/src/data_designer_unstructured_seed/impl.py +++ b/studio/backend/plugins/data-designer-unstructured-seed/src/data_designer_unstructured_seed/impl.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + from __future__ import annotations from pathlib import Path diff --git a/studio/backend/plugins/data-designer-unstructured-seed/src/data_designer_unstructured_seed/plugin.py b/studio/backend/plugins/data-designer-unstructured-seed/src/data_designer_unstructured_seed/plugin.py index e96d1d2cd6..6692317d0e 100644 --- a/studio/backend/plugins/data-designer-unstructured-seed/src/data_designer_unstructured_seed/plugin.py +++ b/studio/backend/plugins/data-designer-unstructured-seed/src/data_designer_unstructured_seed/plugin.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + from data_designer.plugins.plugin import Plugin, PluginType unstructured_seed_plugin = Plugin( diff --git a/studio/backend/routes/__init__.py b/studio/backend/routes/__init__.py index 7ee5d318d2..13896854f6 100644 --- a/studio/backend/routes/__init__.py +++ b/studio/backend/routes/__init__.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ API Routes """ diff --git a/studio/backend/routes/auth.py b/studio/backend/routes/auth.py index 0ad5bb0ea8..76bd15d846 100644 --- a/studio/backend/routes/auth.py +++ b/studio/backend/routes/auth.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Authentication API routes """ diff --git a/studio/backend/routes/data_recipe/__init__.py b/studio/backend/routes/data_recipe/__init__.py index 65e7db0279..3f78c40393 100644 --- a/studio/backend/routes/data_recipe/__init__.py +++ b/studio/backend/routes/data_recipe/__init__.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """Data Recipe route package.""" from __future__ import annotations diff --git a/studio/backend/routes/data_recipe/jobs.py b/studio/backend/routes/data_recipe/jobs.py index 67a64ec784..b698848d22 100644 --- a/studio/backend/routes/data_recipe/jobs.py +++ b/studio/backend/routes/data_recipe/jobs.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """Job lifecycle endpoints for data recipe.""" from __future__ import annotations diff --git a/studio/backend/routes/data_recipe/mcp.py b/studio/backend/routes/data_recipe/mcp.py index 5aa5c3247c..310fe3b449 100644 --- a/studio/backend/routes/data_recipe/mcp.py +++ b/studio/backend/routes/data_recipe/mcp.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """MCP helper endpoints for data recipe.""" from __future__ import annotations diff --git a/studio/backend/routes/data_recipe/seed.py b/studio/backend/routes/data_recipe/seed.py index f0396939ca..e803c054c2 100644 --- a/studio/backend/routes/data_recipe/seed.py +++ b/studio/backend/routes/data_recipe/seed.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """Seed inspect endpoints for data recipe.""" from __future__ import annotations diff --git a/studio/backend/routes/data_recipe/validate.py b/studio/backend/routes/data_recipe/validate.py index a8755f9410..16995aabb6 100644 --- a/studio/backend/routes/data_recipe/validate.py +++ b/studio/backend/routes/data_recipe/validate.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """Validation endpoints for data recipe.""" from __future__ import annotations diff --git a/studio/backend/routes/datasets.py b/studio/backend/routes/datasets.py index b06fa33942..d21974d540 100644 --- a/studio/backend/routes/datasets.py +++ b/studio/backend/routes/datasets.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Datasets API routes """ diff --git a/studio/backend/routes/export.py b/studio/backend/routes/export.py index bf41cba424..b475f75941 100644 --- a/studio/backend/routes/export.py +++ b/studio/backend/routes/export.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Export API routes: checkpoint discovery and model export operations. """ diff --git a/studio/backend/routes/inference.py b/studio/backend/routes/inference.py index 287a4d52c5..387268edbb 100644 --- a/studio/backend/routes/inference.py +++ b/studio/backend/routes/inference.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Inference API routes for model loading and text generation. """ diff --git a/studio/backend/routes/models.py b/studio/backend/routes/models.py index 1590947fdd..e217ff63d8 100644 --- a/studio/backend/routes/models.py +++ b/studio/backend/routes/models.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Model Management API routes """ diff --git a/studio/backend/routes/training.py b/studio/backend/routes/training.py index 545ef18747..3deabb5253 100644 --- a/studio/backend/routes/training.py +++ b/studio/backend/routes/training.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Training API routes """ diff --git a/studio/backend/run.py b/studio/backend/run.py index 0959746a19..48cc25cce0 100644 --- a/studio/backend/run.py +++ b/studio/backend/run.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Run script for Unsloth UI Backend. Works independently and can be moved to any directory. diff --git a/studio/backend/tests/conftest.py b/studio/backend/tests/conftest.py index 82cbeb3da5..62edae7fd8 100644 --- a/studio/backend/tests/conftest.py +++ b/studio/backend/tests/conftest.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Shared pytest configuration for the backend test suite. Ensures that the backend root is on sys.path so that diff --git a/studio/backend/tests/test_utils.py b/studio/backend/tests/test_utils.py index afb4bab65a..97466040cf 100644 --- a/studio/backend/tests/test_utils.py +++ b/studio/backend/tests/test_utils.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Tests for utils/hardware and utils/utils — device detection, GPU memory, error formatting. diff --git a/studio/backend/utils/cache_cleanup.py b/studio/backend/utils/cache_cleanup.py index 4673cf995f..9b18fb08c8 100644 --- a/studio/backend/utils/cache_cleanup.py +++ b/studio/backend/utils/cache_cleanup.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Utility for cleaning up the Unsloth compiled cache directory. diff --git a/studio/backend/utils/datasets/__init__.py b/studio/backend/utils/datasets/__init__.py index 2e78057237..4146006c18 100644 --- a/studio/backend/utils/datasets/__init__.py +++ b/studio/backend/utils/datasets/__init__.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Dataset utilities package. diff --git a/studio/backend/utils/datasets/chat_templates.py b/studio/backend/utils/datasets/chat_templates.py index 52c876291d..ae80055241 100644 --- a/studio/backend/utils/datasets/chat_templates.py +++ b/studio/backend/utils/datasets/chat_templates.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Chat template application utilities for dataset processing. diff --git a/studio/backend/utils/datasets/data_collators.py b/studio/backend/utils/datasets/data_collators.py index 41062f6a6f..f362e93799 100644 --- a/studio/backend/utils/datasets/data_collators.py +++ b/studio/backend/utils/datasets/data_collators.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Data collators for dataset processing. diff --git a/studio/backend/utils/datasets/dataset_utils.py b/studio/backend/utils/datasets/dataset_utils.py index 9c78d1a49a..b2a290355a 100644 --- a/studio/backend/utils/datasets/dataset_utils.py +++ b/studio/backend/utils/datasets/dataset_utils.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Dataset utilities for format detection, conversion, and template application. diff --git a/studio/backend/utils/datasets/format_conversion.py b/studio/backend/utils/datasets/format_conversion.py index 41a9617857..bb80dd8d6e 100644 --- a/studio/backend/utils/datasets/format_conversion.py +++ b/studio/backend/utils/datasets/format_conversion.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Format conversion utilities for dataset processing. diff --git a/studio/backend/utils/datasets/format_detection.py b/studio/backend/utils/datasets/format_detection.py index 2337833bef..b8385faec8 100644 --- a/studio/backend/utils/datasets/format_detection.py +++ b/studio/backend/utils/datasets/format_detection.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Format detection utilities for dataset processing. diff --git a/studio/backend/utils/datasets/model_mappings.py b/studio/backend/utils/datasets/model_mappings.py index 22b0f4334b..56e8ea70c1 100644 --- a/studio/backend/utils/datasets/model_mappings.py +++ b/studio/backend/utils/datasets/model_mappings.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Model and template mappings for dataset processing. diff --git a/studio/backend/utils/datasets/vlm_processing.py b/studio/backend/utils/datasets/vlm_processing.py index a864db52fa..b17c57ef35 100644 --- a/studio/backend/utils/datasets/vlm_processing.py +++ b/studio/backend/utils/datasets/vlm_processing.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ VLM (Vision-Language Model) processing utilities. diff --git a/studio/backend/utils/hardware/__init__.py b/studio/backend/utils/hardware/__init__.py index e8256eb9aa..b48eacbb8b 100644 --- a/studio/backend/utils/hardware/__init__.py +++ b/studio/backend/utils/hardware/__init__.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Hardware detection and GPU utilities """ diff --git a/studio/backend/utils/hardware/hardware.py b/studio/backend/utils/hardware/hardware.py index fd43e620bb..5b1ef8cfa3 100644 --- a/studio/backend/utils/hardware/hardware.py +++ b/studio/backend/utils/hardware/hardware.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Hardware detection — run once at startup, read everywhere. diff --git a/studio/backend/utils/inference/__init__.py b/studio/backend/utils/inference/__init__.py index 660643a436..85a6f8fb5c 100644 --- a/studio/backend/utils/inference/__init__.py +++ b/studio/backend/utils/inference/__init__.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Inference utility functions """ diff --git a/studio/backend/utils/inference/inference_config.py b/studio/backend/utils/inference/inference_config.py index ff82b47fa6..05ad01071f 100644 --- a/studio/backend/utils/inference/inference_config.py +++ b/studio/backend/utils/inference/inference_config.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Inference configuration loading utilities. diff --git a/studio/backend/utils/models/__init__.py b/studio/backend/utils/models/__init__.py index 11d5f54539..5463d98222 100644 --- a/studio/backend/utils/models/__init__.py +++ b/studio/backend/utils/models/__init__.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Model and LoRA configuration handling """ diff --git a/studio/backend/utils/models/checkpoints.py b/studio/backend/utils/models/checkpoints.py index 7a50d0900d..c601cf64db 100644 --- a/studio/backend/utils/models/checkpoints.py +++ b/studio/backend/utils/models/checkpoints.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Checkpoint scanning utilities for discovering training runs and their checkpoints. """ diff --git a/studio/backend/utils/models/model_config.py b/studio/backend/utils/models/model_config.py index f301e42a78..8724f4b00b 100644 --- a/studio/backend/utils/models/model_config.py +++ b/studio/backend/utils/models/model_config.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Model and LoRA configuration handling """ diff --git a/studio/backend/utils/paths/__init__.py b/studio/backend/utils/paths/__init__.py index ffc16dfb3d..d196f8ce14 100644 --- a/studio/backend/utils/paths/__init__.py +++ b/studio/backend/utils/paths/__init__.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Path utilities for model and dataset handling """ diff --git a/studio/backend/utils/paths/path_utils.py b/studio/backend/utils/paths/path_utils.py index 856e478bc2..1151362c4c 100644 --- a/studio/backend/utils/paths/path_utils.py +++ b/studio/backend/utils/paths/path_utils.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Path utilities for model and dataset handling """ diff --git a/studio/backend/utils/transformers_version.py b/studio/backend/utils/transformers_version.py index 8efbab46a2..d003084b85 100644 --- a/studio/backend/utils/transformers_version.py +++ b/studio/backend/utils/transformers_version.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Automatic transformers version switching. diff --git a/studio/backend/utils/utils.py b/studio/backend/utils/utils.py index 0acdbb3313..a61ce4c7e7 100644 --- a/studio/backend/utils/utils.py +++ b/studio/backend/utils/utils.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Shared backend utilities """ diff --git a/studio/frontend/src/app/app.tsx b/studio/frontend/src/app/app.tsx index 356738ede9..285746adef 100644 --- a/studio/frontend/src/app/app.tsx +++ b/studio/frontend/src/app/app.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { RouterProvider } from "@tanstack/react-router"; import { router } from "./router"; diff --git a/studio/frontend/src/app/auth-guards.ts b/studio/frontend/src/app/auth-guards.ts index 6aaa6694ef..f000db4832 100644 --- a/studio/frontend/src/app/auth-guards.ts +++ b/studio/frontend/src/app/auth-guards.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { redirect } from "@tanstack/react-router"; import { getPostAuthRoute, diff --git a/studio/frontend/src/app/provider.tsx b/studio/frontend/src/app/provider.tsx index da88e0cfa3..84746c8859 100644 --- a/studio/frontend/src/app/provider.tsx +++ b/studio/frontend/src/app/provider.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Toaster } from "@/components/ui/sonner"; import { ThemeProvider } from "next-themes"; import type { ReactNode } from "react"; diff --git a/studio/frontend/src/app/router.tsx b/studio/frontend/src/app/router.tsx index dbbd9b1148..2a5a9f704e 100644 --- a/studio/frontend/src/app/router.tsx +++ b/studio/frontend/src/app/router.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { createRouter } from "@tanstack/react-router"; import { Route as rootRoute } from "./routes/__root"; import { Route as dataRecipesRoute } from "./routes/data-recipes"; diff --git a/studio/frontend/src/app/routes/__root.tsx b/studio/frontend/src/app/routes/__root.tsx index bf47008c70..ad7027109e 100644 --- a/studio/frontend/src/app/routes/__root.tsx +++ b/studio/frontend/src/app/routes/__root.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Navbar } from "@/components/navbar"; import { Outlet, diff --git a/studio/frontend/src/app/routes/chat.tsx b/studio/frontend/src/app/routes/chat.tsx index d773b74a41..4addf9d6cb 100644 --- a/studio/frontend/src/app/routes/chat.tsx +++ b/studio/frontend/src/app/routes/chat.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { createRoute } from "@tanstack/react-router"; import { lazy } from "react"; import { requireAuth } from "../auth-guards"; diff --git a/studio/frontend/src/app/routes/data-recipes.$recipeId.tsx b/studio/frontend/src/app/routes/data-recipes.$recipeId.tsx index 0ee88ac0a1..ace55de439 100644 --- a/studio/frontend/src/app/routes/data-recipes.$recipeId.tsx +++ b/studio/frontend/src/app/routes/data-recipes.$recipeId.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { createRoute } from "@tanstack/react-router"; import type { ReactElement } from "react"; import { lazy } from "react"; diff --git a/studio/frontend/src/app/routes/data-recipes.tsx b/studio/frontend/src/app/routes/data-recipes.tsx index ff34f5530e..45bb0252bd 100644 --- a/studio/frontend/src/app/routes/data-recipes.tsx +++ b/studio/frontend/src/app/routes/data-recipes.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { createRoute } from "@tanstack/react-router"; import { lazy } from "react"; import { requireAuth } from "../auth-guards"; diff --git a/studio/frontend/src/app/routes/export.tsx b/studio/frontend/src/app/routes/export.tsx index 26f047b23d..3037f38f3a 100644 --- a/studio/frontend/src/app/routes/export.tsx +++ b/studio/frontend/src/app/routes/export.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { createRoute } from "@tanstack/react-router"; import { lazy } from "react"; import { requireAuth } from "../auth-guards"; diff --git a/studio/frontend/src/app/routes/grid-test.tsx b/studio/frontend/src/app/routes/grid-test.tsx index dd9113bf28..48de750593 100644 --- a/studio/frontend/src/app/routes/grid-test.tsx +++ b/studio/frontend/src/app/routes/grid-test.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { DashboardGrid, DashboardLayout } from "@/components/layout"; import { Card, diff --git a/studio/frontend/src/app/routes/index.tsx b/studio/frontend/src/app/routes/index.tsx index 4ce567fbec..818bd3fdc9 100644 --- a/studio/frontend/src/app/routes/index.tsx +++ b/studio/frontend/src/app/routes/index.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { createRoute, redirect } from "@tanstack/react-router"; import { getPostAuthRoute } from "@/features/auth"; import { requireAuth } from "../auth-guards"; diff --git a/studio/frontend/src/app/routes/login.tsx b/studio/frontend/src/app/routes/login.tsx index 5d86484288..36323aa7a0 100644 --- a/studio/frontend/src/app/routes/login.tsx +++ b/studio/frontend/src/app/routes/login.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { createRoute } from "@tanstack/react-router"; import { lazy } from "react"; import { requireGuest } from "../auth-guards"; diff --git a/studio/frontend/src/app/routes/onboarding.tsx b/studio/frontend/src/app/routes/onboarding.tsx index 664f75249e..5d6d3e47a8 100644 --- a/studio/frontend/src/app/routes/onboarding.tsx +++ b/studio/frontend/src/app/routes/onboarding.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { createRoute } from "@tanstack/react-router"; import { lazy } from "react"; import { requireAuth } from "../auth-guards"; diff --git a/studio/frontend/src/app/routes/signup.tsx b/studio/frontend/src/app/routes/signup.tsx index 241a8e852a..a8bc00b8a3 100644 --- a/studio/frontend/src/app/routes/signup.tsx +++ b/studio/frontend/src/app/routes/signup.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { createRoute } from "@tanstack/react-router"; import { lazy } from "react"; import { requireGuest } from "../auth-guards"; diff --git a/studio/frontend/src/app/routes/studio.tsx b/studio/frontend/src/app/routes/studio.tsx index be3a912644..6dded2fcd7 100644 --- a/studio/frontend/src/app/routes/studio.tsx +++ b/studio/frontend/src/app/routes/studio.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { createRoute } from "@tanstack/react-router"; import { lazy } from "react"; import { requireAuth } from "../auth-guards"; diff --git a/studio/frontend/src/components/assistant-ui/attachment.tsx b/studio/frontend/src/components/assistant-ui/attachment.tsx index 94e30fb4ac..52aa07201a 100644 --- a/studio/frontend/src/components/assistant-ui/attachment.tsx +++ b/studio/frontend/src/components/assistant-ui/attachment.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + "use client"; // Avatar removed — caused circular crop on image thumbnails diff --git a/studio/frontend/src/components/assistant-ui/audio-player.tsx b/studio/frontend/src/components/assistant-ui/audio-player.tsx index 8c5d19abae..2ad74feecd 100644 --- a/studio/frontend/src/components/assistant-ui/audio-player.tsx +++ b/studio/frontend/src/components/assistant-ui/audio-player.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + "use client"; import { Button } from "@/components/ui/button"; diff --git a/studio/frontend/src/components/assistant-ui/markdown-text.tsx b/studio/frontend/src/components/assistant-ui/markdown-text.tsx index ecc272815c..9d6815b4f6 100644 --- a/studio/frontend/src/components/assistant-ui/markdown-text.tsx +++ b/studio/frontend/src/components/assistant-ui/markdown-text.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + "use client"; import { copyToClipboard } from "@/lib/copy-to-clipboard"; diff --git a/studio/frontend/src/components/assistant-ui/model-selector.tsx b/studio/frontend/src/components/assistant-ui/model-selector.tsx index c6685f0214..5f69471f18 100644 --- a/studio/frontend/src/components/assistant-ui/model-selector.tsx +++ b/studio/frontend/src/components/assistant-ui/model-selector.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + "use client"; import { diff --git a/studio/frontend/src/components/assistant-ui/model-selector/pickers.tsx b/studio/frontend/src/components/assistant-ui/model-selector/pickers.tsx index 3d91cffb8c..b834d75902 100644 --- a/studio/frontend/src/components/assistant-ui/model-selector/pickers.tsx +++ b/studio/frontend/src/components/assistant-ui/model-selector/pickers.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Input } from "@/components/ui/input"; import { Spinner } from "@/components/ui/spinner"; import { diff --git a/studio/frontend/src/components/assistant-ui/model-selector/types.ts b/studio/frontend/src/components/assistant-ui/model-selector/types.ts index 0e8cf5fb4d..eba840f40b 100644 --- a/studio/frontend/src/components/assistant-ui/model-selector/types.ts +++ b/studio/frontend/src/components/assistant-ui/model-selector/types.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { ReactNode } from "react"; export interface ModelOption { diff --git a/studio/frontend/src/components/assistant-ui/reasoning.tsx b/studio/frontend/src/components/assistant-ui/reasoning.tsx index 7ecbaaf63f..85c8dae5cf 100644 --- a/studio/frontend/src/components/assistant-ui/reasoning.tsx +++ b/studio/frontend/src/components/assistant-ui/reasoning.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + "use client"; /* eslint-disable react-refresh/only-export-components */ diff --git a/studio/frontend/src/components/assistant-ui/thread.tsx b/studio/frontend/src/components/assistant-ui/thread.tsx index d959305c63..8bf17494fd 100644 --- a/studio/frontend/src/components/assistant-ui/thread.tsx +++ b/studio/frontend/src/components/assistant-ui/thread.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { ComposerAddAttachment, ComposerAttachments, diff --git a/studio/frontend/src/components/assistant-ui/tool-fallback.tsx b/studio/frontend/src/components/assistant-ui/tool-fallback.tsx index cd805e8aaa..bfc0e9b53e 100644 --- a/studio/frontend/src/components/assistant-ui/tool-fallback.tsx +++ b/studio/frontend/src/components/assistant-ui/tool-fallback.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + "use client"; import { diff --git a/studio/frontend/src/components/assistant-ui/tooltip-icon-button.tsx b/studio/frontend/src/components/assistant-ui/tooltip-icon-button.tsx index 986a3d1e71..2a1d04f657 100644 --- a/studio/frontend/src/components/assistant-ui/tooltip-icon-button.tsx +++ b/studio/frontend/src/components/assistant-ui/tooltip-icon-button.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + "use client"; import { Slottable } from "@radix-ui/react-slot"; diff --git a/studio/frontend/src/components/example.tsx b/studio/frontend/src/components/example.tsx index 36bbe8e29d..bda3d0cdc7 100644 --- a/studio/frontend/src/components/example.tsx +++ b/studio/frontend/src/components/example.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { cn } from "@/lib/utils"; import type { ComponentProps } from "react"; diff --git a/studio/frontend/src/components/layout/dashboard-grid.tsx b/studio/frontend/src/components/layout/dashboard-grid.tsx index a749b584e4..42def43e7b 100644 --- a/studio/frontend/src/components/layout/dashboard-grid.tsx +++ b/studio/frontend/src/components/layout/dashboard-grid.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type * as React from "react"; import { cn } from "@/lib/utils"; diff --git a/studio/frontend/src/components/layout/dashboard-layout.tsx b/studio/frontend/src/components/layout/dashboard-layout.tsx index bd3926b613..e5a263056d 100644 --- a/studio/frontend/src/components/layout/dashboard-layout.tsx +++ b/studio/frontend/src/components/layout/dashboard-layout.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type * as React from "react"; import { cn } from "@/lib/utils"; diff --git a/studio/frontend/src/components/layout/index.ts b/studio/frontend/src/components/layout/index.ts index 34a7b75a4c..f6c784469d 100644 --- a/studio/frontend/src/components/layout/index.ts +++ b/studio/frontend/src/components/layout/index.ts @@ -1,2 +1,5 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export { DashboardLayout } from "./dashboard-layout"; export { DashboardGrid } from "./dashboard-grid"; diff --git a/studio/frontend/src/components/markdown/markdown-preview.tsx b/studio/frontend/src/components/markdown/markdown-preview.tsx index c10ec783be..bc2b13b36e 100644 --- a/studio/frontend/src/components/markdown/markdown-preview.tsx +++ b/studio/frontend/src/components/markdown/markdown-preview.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { cn } from "@/lib/utils"; import { code } from "@streamdown/code"; import { math } from "@streamdown/math"; diff --git a/studio/frontend/src/components/markdown/mermaid-error.tsx b/studio/frontend/src/components/markdown/mermaid-error.tsx index 4e352d4768..0d20523240 100644 --- a/studio/frontend/src/components/markdown/mermaid-error.tsx +++ b/studio/frontend/src/components/markdown/mermaid-error.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { MermaidErrorComponentProps } from "streamdown"; function hasSlashComment(chart: string): boolean { diff --git a/studio/frontend/src/components/navbar.tsx b/studio/frontend/src/components/navbar.tsx index 478651ec95..cfd16702fc 100644 --- a/studio/frontend/src/components/navbar.tsx +++ b/studio/frontend/src/components/navbar.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { HoverCard, HoverCardContent, diff --git a/studio/frontend/src/components/section-card.tsx b/studio/frontend/src/components/section-card.tsx index aee6fdfa05..ee7269b23a 100644 --- a/studio/frontend/src/components/section-card.tsx +++ b/studio/frontend/src/components/section-card.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { cn } from "@/lib/utils"; import type { ReactNode } from "react"; diff --git a/studio/frontend/src/components/ui/accordion.tsx b/studio/frontend/src/components/ui/accordion.tsx index 51f928df65..edefe6d35b 100644 --- a/studio/frontend/src/components/ui/accordion.tsx +++ b/studio/frontend/src/components/ui/accordion.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + "use client"; import { Accordion as AccordionPrimitive } from "radix-ui"; diff --git a/studio/frontend/src/components/ui/alert-dialog.tsx b/studio/frontend/src/components/ui/alert-dialog.tsx index 61327e525e..cbeb02163a 100644 --- a/studio/frontend/src/components/ui/alert-dialog.tsx +++ b/studio/frontend/src/components/ui/alert-dialog.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { AlertDialog as AlertDialogPrimitive } from "radix-ui"; import type * as React from "react"; diff --git a/studio/frontend/src/components/ui/alert.tsx b/studio/frontend/src/components/ui/alert.tsx index b98fe92af6..d0db9be0f9 100644 --- a/studio/frontend/src/components/ui/alert.tsx +++ b/studio/frontend/src/components/ui/alert.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { type VariantProps, cva } from "class-variance-authority"; import type * as React from "react"; diff --git a/studio/frontend/src/components/ui/animated-shiny-text.tsx b/studio/frontend/src/components/ui/animated-shiny-text.tsx index 93f3fd58ad..48672f31fe 100644 --- a/studio/frontend/src/components/ui/animated-shiny-text.tsx +++ b/studio/frontend/src/components/ui/animated-shiny-text.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { ComponentPropsWithoutRef, CSSProperties, FC } from "react" import { cn } from "@/lib/utils" diff --git a/studio/frontend/src/components/ui/animated-theme-toggler.tsx b/studio/frontend/src/components/ui/animated-theme-toggler.tsx index 1a1c85722e..a6999c6eb2 100644 --- a/studio/frontend/src/components/ui/animated-theme-toggler.tsx +++ b/studio/frontend/src/components/ui/animated-theme-toggler.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { useCallback, useEffect, useRef, useState } from "react" import { Moon, Sun } from "lucide-react" import { flushSync } from "react-dom" diff --git a/studio/frontend/src/components/ui/aspect-ratio.tsx b/studio/frontend/src/components/ui/aspect-ratio.tsx index d2bc9a9fe8..0c93ebaea2 100644 --- a/studio/frontend/src/components/ui/aspect-ratio.tsx +++ b/studio/frontend/src/components/ui/aspect-ratio.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { AspectRatio as AspectRatioPrimitive } from "radix-ui"; function AspectRatio({ diff --git a/studio/frontend/src/components/ui/avatar.tsx b/studio/frontend/src/components/ui/avatar.tsx index 2f78ecb2e9..d58bbf4b21 100644 --- a/studio/frontend/src/components/ui/avatar.tsx +++ b/studio/frontend/src/components/ui/avatar.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Avatar as AvatarPrimitive } from "radix-ui"; import type * as React from "react"; diff --git a/studio/frontend/src/components/ui/badge.tsx b/studio/frontend/src/components/ui/badge.tsx index 72a126cede..fc8fa2a5db 100644 --- a/studio/frontend/src/components/ui/badge.tsx +++ b/studio/frontend/src/components/ui/badge.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + /* eslint-disable react-refresh/only-export-components */ import { type VariantProps, cva } from "class-variance-authority"; diff --git a/studio/frontend/src/components/ui/breadcrumb.tsx b/studio/frontend/src/components/ui/breadcrumb.tsx index 0ec0f336da..28f9e7c80f 100644 --- a/studio/frontend/src/components/ui/breadcrumb.tsx +++ b/studio/frontend/src/components/ui/breadcrumb.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Slot } from "radix-ui"; import type * as React from "react"; diff --git a/studio/frontend/src/components/ui/button.tsx b/studio/frontend/src/components/ui/button.tsx index ccc99180e7..2763ffacd5 100644 --- a/studio/frontend/src/components/ui/button.tsx +++ b/studio/frontend/src/components/ui/button.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + /* eslint-disable react-refresh/only-export-components */ import { type VariantProps, cva } from "class-variance-authority"; diff --git a/studio/frontend/src/components/ui/calendar.tsx b/studio/frontend/src/components/ui/calendar.tsx index aafeec3e91..c15322ef35 100644 --- a/studio/frontend/src/components/ui/calendar.tsx +++ b/studio/frontend/src/components/ui/calendar.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import * as React from "react"; import { type DayButton, diff --git a/studio/frontend/src/components/ui/card.tsx b/studio/frontend/src/components/ui/card.tsx index 058a9d3fd3..ba67a5054a 100644 --- a/studio/frontend/src/components/ui/card.tsx +++ b/studio/frontend/src/components/ui/card.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type * as React from "react"; import { cn } from "@/lib/utils"; diff --git a/studio/frontend/src/components/ui/chart.tsx b/studio/frontend/src/components/ui/chart.tsx index 7ebf5bad3a..e800c362c0 100644 --- a/studio/frontend/src/components/ui/chart.tsx +++ b/studio/frontend/src/components/ui/chart.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import * as React from "react"; import * as RechartsPrimitive from "recharts"; diff --git a/studio/frontend/src/components/ui/checkbox.tsx b/studio/frontend/src/components/ui/checkbox.tsx index a5ec1cb85f..528acf7a87 100644 --- a/studio/frontend/src/components/ui/checkbox.tsx +++ b/studio/frontend/src/components/ui/checkbox.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Checkbox as CheckboxPrimitive } from "radix-ui"; import type * as React from "react"; diff --git a/studio/frontend/src/components/ui/collapsible.tsx b/studio/frontend/src/components/ui/collapsible.tsx index eb2810762b..e0dff5e31e 100644 --- a/studio/frontend/src/components/ui/collapsible.tsx +++ b/studio/frontend/src/components/ui/collapsible.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { cn } from "@/lib/utils"; import { Collapsible as CollapsiblePrimitive } from "radix-ui"; diff --git a/studio/frontend/src/components/ui/combobox.tsx b/studio/frontend/src/components/ui/combobox.tsx index 34b66ea64e..42c6f6f49a 100644 --- a/studio/frontend/src/components/ui/combobox.tsx +++ b/studio/frontend/src/components/ui/combobox.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + "use client"; /* eslint-disable react-refresh/only-export-components */ diff --git a/studio/frontend/src/components/ui/command.tsx b/studio/frontend/src/components/ui/command.tsx index cf3d02f97f..3a97db8bfc 100644 --- a/studio/frontend/src/components/ui/command.tsx +++ b/studio/frontend/src/components/ui/command.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + "use client"; import { Command as CommandPrimitive } from "cmdk"; diff --git a/studio/frontend/src/components/ui/confetti.tsx b/studio/frontend/src/components/ui/confetti.tsx index cd0b44cda7..e80bf25c34 100644 --- a/studio/frontend/src/components/ui/confetti.tsx +++ b/studio/frontend/src/components/ui/confetti.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { GlobalOptions as ConfettiGlobalOptions, CreateTypes as ConfettiInstance, diff --git a/studio/frontend/src/components/ui/context-menu.tsx b/studio/frontend/src/components/ui/context-menu.tsx index 398d12e922..71720bd5e5 100644 --- a/studio/frontend/src/components/ui/context-menu.tsx +++ b/studio/frontend/src/components/ui/context-menu.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + "use client"; import { ContextMenu as ContextMenuPrimitive } from "radix-ui"; diff --git a/studio/frontend/src/components/ui/data-table.tsx b/studio/frontend/src/components/ui/data-table.tsx index bf2d07021d..da450e4202 100644 --- a/studio/frontend/src/components/ui/data-table.tsx +++ b/studio/frontend/src/components/ui/data-table.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { type ColumnDef, type SortingState, diff --git a/studio/frontend/src/components/ui/dialog.tsx b/studio/frontend/src/components/ui/dialog.tsx index 40f5427728..8930428539 100644 --- a/studio/frontend/src/components/ui/dialog.tsx +++ b/studio/frontend/src/components/ui/dialog.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + "use client"; import { Dialog as DialogPrimitive } from "radix-ui"; diff --git a/studio/frontend/src/components/ui/dropdown-menu.tsx b/studio/frontend/src/components/ui/dropdown-menu.tsx index a3e27884d8..3894c7b022 100644 --- a/studio/frontend/src/components/ui/dropdown-menu.tsx +++ b/studio/frontend/src/components/ui/dropdown-menu.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { DropdownMenu as DropdownMenuPrimitive } from "radix-ui"; import type * as React from "react"; diff --git a/studio/frontend/src/components/ui/empty.tsx b/studio/frontend/src/components/ui/empty.tsx index 90353e5e18..aaa9ad1fbc 100644 --- a/studio/frontend/src/components/ui/empty.tsx +++ b/studio/frontend/src/components/ui/empty.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { cva, type VariantProps } from "class-variance-authority" import { cn } from "@/lib/utils" diff --git a/studio/frontend/src/components/ui/field.tsx b/studio/frontend/src/components/ui/field.tsx index 0e20f5125e..d6a173dbbf 100644 --- a/studio/frontend/src/components/ui/field.tsx +++ b/studio/frontend/src/components/ui/field.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { type VariantProps, cva } from "class-variance-authority"; import { useMemo } from "react"; diff --git a/studio/frontend/src/components/ui/hover-card.tsx b/studio/frontend/src/components/ui/hover-card.tsx index f691a7e062..c6a73ee420 100644 --- a/studio/frontend/src/components/ui/hover-card.tsx +++ b/studio/frontend/src/components/ui/hover-card.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { HoverCard as HoverCardPrimitive } from "radix-ui"; import type * as React from "react"; diff --git a/studio/frontend/src/components/ui/input-group.tsx b/studio/frontend/src/components/ui/input-group.tsx index 32f7d0b598..86e403ceed 100644 --- a/studio/frontend/src/components/ui/input-group.tsx +++ b/studio/frontend/src/components/ui/input-group.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { type VariantProps, cva } from "class-variance-authority"; import type * as React from "react"; diff --git a/studio/frontend/src/components/ui/input.tsx b/studio/frontend/src/components/ui/input.tsx index b9a2ac3462..c60b6b1b02 100644 --- a/studio/frontend/src/components/ui/input.tsx +++ b/studio/frontend/src/components/ui/input.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type * as React from "react"; import { cn } from "@/lib/utils"; diff --git a/studio/frontend/src/components/ui/label.tsx b/studio/frontend/src/components/ui/label.tsx index a6ba63ed86..f26b4d9434 100644 --- a/studio/frontend/src/components/ui/label.tsx +++ b/studio/frontend/src/components/ui/label.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + "use client"; import { Label as LabelPrimitive } from "radix-ui"; diff --git a/studio/frontend/src/components/ui/light-rays.tsx b/studio/frontend/src/components/ui/light-rays.tsx index 582390607f..405ba83915 100644 --- a/studio/frontend/src/components/ui/light-rays.tsx +++ b/studio/frontend/src/components/ui/light-rays.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { motion } from "motion/react"; import { type CSSProperties, useState } from "react"; diff --git a/studio/frontend/src/components/ui/menubar.tsx b/studio/frontend/src/components/ui/menubar.tsx index e48159dfc3..089e9bb24f 100644 --- a/studio/frontend/src/components/ui/menubar.tsx +++ b/studio/frontend/src/components/ui/menubar.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + "use client"; import { Menubar as MenubarPrimitive } from "radix-ui"; diff --git a/studio/frontend/src/components/ui/navigation-menu.tsx b/studio/frontend/src/components/ui/navigation-menu.tsx index 407c6acb2a..129b97ae50 100644 --- a/studio/frontend/src/components/ui/navigation-menu.tsx +++ b/studio/frontend/src/components/ui/navigation-menu.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + /* eslint-disable react-refresh/only-export-components */ import { cva } from "class-variance-authority"; diff --git a/studio/frontend/src/components/ui/pagination.tsx b/studio/frontend/src/components/ui/pagination.tsx index 53df2652be..895f6f1201 100644 --- a/studio/frontend/src/components/ui/pagination.tsx +++ b/studio/frontend/src/components/ui/pagination.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type * as React from "react"; import { Button } from "@/components/ui/button"; diff --git a/studio/frontend/src/components/ui/popover.tsx b/studio/frontend/src/components/ui/popover.tsx index 8912b73bd3..34c0686a99 100644 --- a/studio/frontend/src/components/ui/popover.tsx +++ b/studio/frontend/src/components/ui/popover.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + "use client"; import { Popover as PopoverPrimitive } from "radix-ui"; diff --git a/studio/frontend/src/components/ui/progress.tsx b/studio/frontend/src/components/ui/progress.tsx index 92ca40b73e..ca4bc0fe0b 100644 --- a/studio/frontend/src/components/ui/progress.tsx +++ b/studio/frontend/src/components/ui/progress.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + "use client"; import { Progress as ProgressPrimitive } from "radix-ui"; diff --git a/studio/frontend/src/components/ui/radio-group.tsx b/studio/frontend/src/components/ui/radio-group.tsx index 383d82b60e..47685748bf 100644 --- a/studio/frontend/src/components/ui/radio-group.tsx +++ b/studio/frontend/src/components/ui/radio-group.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { RadioGroup as RadioGroupPrimitive } from "radix-ui"; import type * as React from "react"; diff --git a/studio/frontend/src/components/ui/resizable.tsx b/studio/frontend/src/components/ui/resizable.tsx index b93636cb63..5c9c07bd8c 100644 --- a/studio/frontend/src/components/ui/resizable.tsx +++ b/studio/frontend/src/components/ui/resizable.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type * as React from "react"; import * as ResizablePrimitive from "react-resizable-panels"; diff --git a/studio/frontend/src/components/ui/scroll-area.tsx b/studio/frontend/src/components/ui/scroll-area.tsx index a99e76871f..3abbefc9ab 100644 --- a/studio/frontend/src/components/ui/scroll-area.tsx +++ b/studio/frontend/src/components/ui/scroll-area.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + "use client"; import { ScrollArea as ScrollAreaPrimitive } from "radix-ui"; diff --git a/studio/frontend/src/components/ui/select.tsx b/studio/frontend/src/components/ui/select.tsx index 4c500af08e..8feeb28068 100644 --- a/studio/frontend/src/components/ui/select.tsx +++ b/studio/frontend/src/components/ui/select.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + "use client"; import { Select as SelectPrimitive } from "radix-ui"; diff --git a/studio/frontend/src/components/ui/separator.tsx b/studio/frontend/src/components/ui/separator.tsx index fecc43663a..bf3f967b62 100644 --- a/studio/frontend/src/components/ui/separator.tsx +++ b/studio/frontend/src/components/ui/separator.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Separator as SeparatorPrimitive } from "radix-ui"; import type * as React from "react"; diff --git a/studio/frontend/src/components/ui/sheet.tsx b/studio/frontend/src/components/ui/sheet.tsx index b086790203..3227583bc0 100644 --- a/studio/frontend/src/components/ui/sheet.tsx +++ b/studio/frontend/src/components/ui/sheet.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Dialog as SheetPrimitive } from "radix-ui"; import type * as React from "react"; diff --git a/studio/frontend/src/components/ui/shine-border.tsx b/studio/frontend/src/components/ui/shine-border.tsx index 40b1fe8cf1..d8a0f8d01e 100644 --- a/studio/frontend/src/components/ui/shine-border.tsx +++ b/studio/frontend/src/components/ui/shine-border.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import * as React from "react" import { cn } from "@/lib/utils" diff --git a/studio/frontend/src/components/ui/sidebar.tsx b/studio/frontend/src/components/ui/sidebar.tsx index e2d611259a..85e82b63ad 100644 --- a/studio/frontend/src/components/ui/sidebar.tsx +++ b/studio/frontend/src/components/ui/sidebar.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + "use client" import * as React from "react" diff --git a/studio/frontend/src/components/ui/skeleton.tsx b/studio/frontend/src/components/ui/skeleton.tsx index 339123e3c3..1459672802 100644 --- a/studio/frontend/src/components/ui/skeleton.tsx +++ b/studio/frontend/src/components/ui/skeleton.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { cn } from "@/lib/utils"; function Skeleton({ className, ...props }: React.ComponentProps<"div">) { diff --git a/studio/frontend/src/components/ui/slider.tsx b/studio/frontend/src/components/ui/slider.tsx index 5d75b88e6d..edb30ce2c4 100644 --- a/studio/frontend/src/components/ui/slider.tsx +++ b/studio/frontend/src/components/ui/slider.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Slider as SliderPrimitive } from "radix-ui"; import * as React from "react"; diff --git a/studio/frontend/src/components/ui/sonner.tsx b/studio/frontend/src/components/ui/sonner.tsx index 9a12a4bb50..b38efaf4b8 100644 --- a/studio/frontend/src/components/ui/sonner.tsx +++ b/studio/frontend/src/components/ui/sonner.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Alert02Icon, CheckmarkCircle02Icon, diff --git a/studio/frontend/src/components/ui/sparkles-text.tsx b/studio/frontend/src/components/ui/sparkles-text.tsx index 552e99cb1c..b69aa5a6ba 100644 --- a/studio/frontend/src/components/ui/sparkles-text.tsx +++ b/studio/frontend/src/components/ui/sparkles-text.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { motion } from "motion/react"; import { type CSSProperties, diff --git a/studio/frontend/src/components/ui/spinner.tsx b/studio/frontend/src/components/ui/spinner.tsx index 3030726f0f..4853f04015 100644 --- a/studio/frontend/src/components/ui/spinner.tsx +++ b/studio/frontend/src/components/ui/spinner.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { cn } from "@/lib/utils" import { HugeiconsIcon } from "@hugeicons/react" import { Loading03Icon } from "@hugeicons/core-free-icons" diff --git a/studio/frontend/src/components/ui/switch.tsx b/studio/frontend/src/components/ui/switch.tsx index bf11dc7d45..b2f8a2e3b7 100644 --- a/studio/frontend/src/components/ui/switch.tsx +++ b/studio/frontend/src/components/ui/switch.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Switch as SwitchPrimitive } from "radix-ui"; import type * as React from "react"; diff --git a/studio/frontend/src/components/ui/table.tsx b/studio/frontend/src/components/ui/table.tsx index 96eaf73373..44cae79896 100644 --- a/studio/frontend/src/components/ui/table.tsx +++ b/studio/frontend/src/components/ui/table.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type * as React from "react"; import { cn } from "@/lib/utils"; diff --git a/studio/frontend/src/components/ui/tabs.tsx b/studio/frontend/src/components/ui/tabs.tsx index 3c3fe2c023..6dc92198d1 100644 --- a/studio/frontend/src/components/ui/tabs.tsx +++ b/studio/frontend/src/components/ui/tabs.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + "use client"; /* eslint-disable react-refresh/only-export-components */ diff --git a/studio/frontend/src/components/ui/terminal.tsx b/studio/frontend/src/components/ui/terminal.tsx index d9483eaca5..496e74053c 100644 --- a/studio/frontend/src/components/ui/terminal.tsx +++ b/studio/frontend/src/components/ui/terminal.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { cn } from "@/lib/utils" import { Children, diff --git a/studio/frontend/src/components/ui/textarea.tsx b/studio/frontend/src/components/ui/textarea.tsx index 3133779c44..edbea03848 100644 --- a/studio/frontend/src/components/ui/textarea.tsx +++ b/studio/frontend/src/components/ui/textarea.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type * as React from "react"; import { cn } from "@/lib/utils"; diff --git a/studio/frontend/src/components/ui/toggle-group.tsx b/studio/frontend/src/components/ui/toggle-group.tsx index 5850f1b186..6e750b435b 100644 --- a/studio/frontend/src/components/ui/toggle-group.tsx +++ b/studio/frontend/src/components/ui/toggle-group.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + "use client"; import type { VariantProps } from "class-variance-authority"; diff --git a/studio/frontend/src/components/ui/toggle.tsx b/studio/frontend/src/components/ui/toggle.tsx index 65a7fd6fbb..ae71b6e87d 100644 --- a/studio/frontend/src/components/ui/toggle.tsx +++ b/studio/frontend/src/components/ui/toggle.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + "use client"; /* eslint-disable react-refresh/only-export-components */ diff --git a/studio/frontend/src/components/ui/tooltip.tsx b/studio/frontend/src/components/ui/tooltip.tsx index 6584cfaf95..94fba54cc2 100644 --- a/studio/frontend/src/components/ui/tooltip.tsx +++ b/studio/frontend/src/components/ui/tooltip.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Tooltip as TooltipPrimitive } from "radix-ui"; import type * as React from "react"; diff --git a/studio/frontend/src/config/env.ts b/studio/frontend/src/config/env.ts index fa7fedb2d6..5169b9f5a1 100644 --- a/studio/frontend/src/config/env.ts +++ b/studio/frontend/src/config/env.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export const env = { MODE: import.meta.env.MODE, DEV: import.meta.env.DEV, diff --git a/studio/frontend/src/config/training.ts b/studio/frontend/src/config/training.ts index b812dd89f1..5ae61c5129 100644 --- a/studio/frontend/src/config/training.ts +++ b/studio/frontend/src/config/training.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { ModelType, StepConfig } from "@/types/training"; import type { PipelineType } from "@huggingface/hub"; diff --git a/studio/frontend/src/features/auth/api.ts b/studio/frontend/src/features/auth/api.ts index f42a544757..257b9b7339 100644 --- a/studio/frontend/src/features/auth/api.ts +++ b/studio/frontend/src/features/auth/api.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { clearAuthTokens, getAuthToken, diff --git a/studio/frontend/src/features/auth/components/auth-form.tsx b/studio/frontend/src/features/auth/components/auth-form.tsx index 5ed529a9e8..309a0001a6 100644 --- a/studio/frontend/src/features/auth/components/auth-form.tsx +++ b/studio/frontend/src/features/auth/components/auth-form.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; diff --git a/studio/frontend/src/features/auth/index.ts b/studio/frontend/src/features/auth/index.ts index bd0b98f6be..264ee240fe 100644 --- a/studio/frontend/src/features/auth/index.ts +++ b/studio/frontend/src/features/auth/index.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export { LoginPage } from "./login-page"; export { SignupPage } from "./signup-page"; export { authFetch, refreshSession } from "./api"; diff --git a/studio/frontend/src/features/auth/login-page.tsx b/studio/frontend/src/features/auth/login-page.tsx index b6ccfe0c1c..15418d6678 100644 --- a/studio/frontend/src/features/auth/login-page.tsx +++ b/studio/frontend/src/features/auth/login-page.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { LightRays } from "@/components/ui/light-rays"; import { Card } from "@/components/ui/card"; import { AuthForm } from "./components/auth-form"; diff --git a/studio/frontend/src/features/auth/session.ts b/studio/frontend/src/features/auth/session.ts index 69ff2ac2a2..151aa9e70b 100644 --- a/studio/frontend/src/features/auth/session.ts +++ b/studio/frontend/src/features/auth/session.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export const AUTH_TOKEN_KEY = "unsloth_auth_token"; export const AUTH_REFRESH_TOKEN_KEY = "unsloth_auth_refresh_token"; export const ONBOARDING_DONE_KEY = "unsloth_onboarding_done"; diff --git a/studio/frontend/src/features/auth/signup-page.tsx b/studio/frontend/src/features/auth/signup-page.tsx index 9d83b0bc66..f608b1bb9b 100644 --- a/studio/frontend/src/features/auth/signup-page.tsx +++ b/studio/frontend/src/features/auth/signup-page.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { LightRays } from "@/components/ui/light-rays"; import { Card } from "@/components/ui/card"; import { AuthForm } from "./components/auth-form"; diff --git a/studio/frontend/src/features/chat/api/chat-adapter.ts b/studio/frontend/src/features/chat/api/chat-adapter.ts index 8abe71fd62..af6fcef6e9 100644 --- a/studio/frontend/src/features/chat/api/chat-adapter.ts +++ b/studio/frontend/src/features/chat/api/chat-adapter.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { ChatModelAdapter } from "@assistant-ui/react"; import { toast } from "sonner"; import { generateAudio, streamChatCompletions } from "./chat-api"; diff --git a/studio/frontend/src/features/chat/api/chat-api.ts b/studio/frontend/src/features/chat/api/chat-api.ts index f7a47c6a19..c73b60d440 100644 --- a/studio/frontend/src/features/chat/api/chat-api.ts +++ b/studio/frontend/src/features/chat/api/chat-api.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { authFetch } from "@/features/auth"; import type { AudioGenerationResponse, diff --git a/studio/frontend/src/features/chat/chat-page.tsx b/studio/frontend/src/features/chat/chat-page.tsx index f4b0ae72fa..3972fc2f35 100644 --- a/studio/frontend/src/features/chat/chat-page.tsx +++ b/studio/frontend/src/features/chat/chat-page.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { type LoraModelOption, type ModelOption, diff --git a/studio/frontend/src/features/chat/chat-settings-sheet.tsx b/studio/frontend/src/features/chat/chat-settings-sheet.tsx index 2ffa5a5370..62ec2fcf8f 100644 --- a/studio/frontend/src/features/chat/chat-settings-sheet.tsx +++ b/studio/frontend/src/features/chat/chat-settings-sheet.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Select, SelectContent, diff --git a/studio/frontend/src/features/chat/db.ts b/studio/frontend/src/features/chat/db.ts index cc000edae9..c2bdf3fa44 100644 --- a/studio/frontend/src/features/chat/db.ts +++ b/studio/frontend/src/features/chat/db.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import Dexie, { type EntityTable, liveQuery } from "dexie"; import { useEffect, useState } from "react"; import type { MessageRecord, ThreadRecord } from "./types"; diff --git a/studio/frontend/src/features/chat/hooks/use-chat-model-runtime.ts b/studio/frontend/src/features/chat/hooks/use-chat-model-runtime.ts index 303030372d..da7d9258f7 100644 --- a/studio/frontend/src/features/chat/hooks/use-chat-model-runtime.ts +++ b/studio/frontend/src/features/chat/hooks/use-chat-model-runtime.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { useCallback, useState } from "react"; import { toast } from "sonner"; import { diff --git a/studio/frontend/src/features/chat/index.ts b/studio/frontend/src/features/chat/index.ts index 521a0fe27f..1017763a35 100644 --- a/studio/frontend/src/features/chat/index.ts +++ b/studio/frontend/src/features/chat/index.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export { ChatPage } from "./chat-page"; export { ChatSettingsPanel, diff --git a/studio/frontend/src/features/chat/lib/training-compare-handoff.ts b/studio/frontend/src/features/chat/lib/training-compare-handoff.ts index 1ceaf7a00b..b6613d4ca2 100644 --- a/studio/frontend/src/features/chat/lib/training-compare-handoff.ts +++ b/studio/frontend/src/features/chat/lib/training-compare-handoff.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + const TRAINING_COMPARE_HANDOFF_KEY = "chat:training-compare-handoff:v1"; const HANDOFF_MAX_AGE_MS = 15 * 60 * 1000; diff --git a/studio/frontend/src/features/chat/runtime-provider.tsx b/studio/frontend/src/features/chat/runtime-provider.tsx index 46e3c697ad..320ec00906 100644 --- a/studio/frontend/src/features/chat/runtime-provider.tsx +++ b/studio/frontend/src/features/chat/runtime-provider.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { AssistantRuntimeProvider, type AttachmentAdapter, diff --git a/studio/frontend/src/features/chat/shared-composer.tsx b/studio/frontend/src/features/chat/shared-composer.tsx index fb4eb8fa69..8b78822799 100644 --- a/studio/frontend/src/features/chat/shared-composer.tsx +++ b/studio/frontend/src/features/chat/shared-composer.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { TooltipIconButton } from "@/components/assistant-ui/tooltip-icon-button"; import { Button } from "@/components/ui/button"; import { AUDIO_ACCEPT, MAX_AUDIO_SIZE, fileToBase64 } from "@/lib/audio-utils"; diff --git a/studio/frontend/src/features/chat/stores/chat-runtime-store.ts b/studio/frontend/src/features/chat/stores/chat-runtime-store.ts index d10a6a22d2..f73248ae44 100644 --- a/studio/frontend/src/features/chat/stores/chat-runtime-store.ts +++ b/studio/frontend/src/features/chat/stores/chat-runtime-store.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { create } from "zustand"; import { DEFAULT_INFERENCE_PARAMS, diff --git a/studio/frontend/src/features/chat/thread-sidebar.tsx b/studio/frontend/src/features/chat/thread-sidebar.tsx index b72d48ddfd..103e847f86 100644 --- a/studio/frontend/src/features/chat/thread-sidebar.tsx +++ b/studio/frontend/src/features/chat/thread-sidebar.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { SidebarContent, SidebarGroup, diff --git a/studio/frontend/src/features/chat/tour/index.ts b/studio/frontend/src/features/chat/tour/index.ts index 8db3c1d207..489c8941b8 100644 --- a/studio/frontend/src/features/chat/tour/index.ts +++ b/studio/frontend/src/features/chat/tour/index.ts @@ -1,2 +1,5 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export { buildChatTourSteps } from "./steps"; diff --git a/studio/frontend/src/features/chat/tour/steps.tsx b/studio/frontend/src/features/chat/tour/steps.tsx index 193a6b6ad3..e6be1aa05b 100644 --- a/studio/frontend/src/features/chat/tour/steps.tsx +++ b/studio/frontend/src/features/chat/tour/steps.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { TourStep } from "@/features/tour"; export function buildChatTourSteps({ diff --git a/studio/frontend/src/features/chat/types.ts b/studio/frontend/src/features/chat/types.ts index a60bcbe657..9ed6854ce8 100644 --- a/studio/frontend/src/features/chat/types.ts +++ b/studio/frontend/src/features/chat/types.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export type ModelType = "base" | "lora"; export type ChatView = diff --git a/studio/frontend/src/features/chat/types/api.ts b/studio/frontend/src/features/chat/types/api.ts index 602574f00a..b11d570eef 100644 --- a/studio/frontend/src/features/chat/types/api.ts +++ b/studio/frontend/src/features/chat/types/api.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export interface BackendModelDetails { id: string; name?: string | null; diff --git a/studio/frontend/src/features/chat/types/runtime.ts b/studio/frontend/src/features/chat/types/runtime.ts index a1c98ada7d..b94dce994f 100644 --- a/studio/frontend/src/features/chat/types/runtime.ts +++ b/studio/frontend/src/features/chat/types/runtime.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export interface InferenceParams { temperature: number; topP: number; diff --git a/studio/frontend/src/features/chat/utils/parse-assistant-content.ts b/studio/frontend/src/features/chat/utils/parse-assistant-content.ts index fdf4ce051e..4d0d7bb875 100644 --- a/studio/frontend/src/features/chat/utils/parse-assistant-content.ts +++ b/studio/frontend/src/features/chat/utils/parse-assistant-content.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { ChatModelRunResult } from "@assistant-ui/react"; type ContentPart = NonNullable[number]; diff --git a/studio/frontend/src/features/data-recipes/data/recipes-db.ts b/studio/frontend/src/features/data-recipes/data/recipes-db.ts index 1fc9bb17c1..7b1cb8b60e 100644 --- a/studio/frontend/src/features/data-recipes/data/recipes-db.ts +++ b/studio/frontend/src/features/data-recipes/data/recipes-db.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { createEmptyRecipePayload } from "@/features/recipe-studio"; import { normalizeNonEmptyName } from "@/utils"; import Dexie, { type EntityTable, liveQuery } from "dexie"; diff --git a/studio/frontend/src/features/data-recipes/index.ts b/studio/frontend/src/features/data-recipes/index.ts index 9c0e59e147..88dc5f47fd 100644 --- a/studio/frontend/src/features/data-recipes/index.ts +++ b/studio/frontend/src/features/data-recipes/index.ts @@ -1,2 +1,5 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export { DataRecipesPage } from "./pages/data-recipes-page"; export { EditRecipePage } from "./pages/edit-recipe-page"; diff --git a/studio/frontend/src/features/data-recipes/learning-recipes/index.ts b/studio/frontend/src/features/data-recipes/learning-recipes/index.ts index 98e20a954a..3038831b44 100644 --- a/studio/frontend/src/features/data-recipes/learning-recipes/index.ts +++ b/studio/frontend/src/features/data-recipes/learning-recipes/index.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { RecipePayload } from "@/features/recipe-studio"; const structuredOutputsJinjaUrl = new URL( diff --git a/studio/frontend/src/features/data-recipes/pages/data-recipes-page.tsx b/studio/frontend/src/features/data-recipes/pages/data-recipes-page.tsx index e9e85e23b8..8874a63892 100644 --- a/studio/frontend/src/features/data-recipes/pages/data-recipes-page.tsx +++ b/studio/frontend/src/features/data-recipes/pages/data-recipes-page.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { diff --git a/studio/frontend/src/features/data-recipes/pages/edit-recipe-page.tsx b/studio/frontend/src/features/data-recipes/pages/edit-recipe-page.tsx index 329e0ea87d..19ef7a2427 100644 --- a/studio/frontend/src/features/data-recipes/pages/edit-recipe-page.tsx +++ b/studio/frontend/src/features/data-recipes/pages/edit-recipe-page.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Button } from "@/components/ui/button"; import { RecipeStudioPage, type RecipePayload } from "@/features/recipe-studio"; import { useNavigate } from "@tanstack/react-router"; diff --git a/studio/frontend/src/features/data-recipes/types.ts b/studio/frontend/src/features/data-recipes/types.ts index c16e039d56..f4a5e85256 100644 --- a/studio/frontend/src/features/data-recipes/types.ts +++ b/studio/frontend/src/features/data-recipes/types.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { RecipePayload } from "@/features/recipe-studio"; export type RecipeRecord = { diff --git a/studio/frontend/src/features/export/anim.ts b/studio/frontend/src/features/export/anim.ts index 0bfc5aaa8a..04750f69ba 100644 --- a/studio/frontend/src/features/export/anim.ts +++ b/studio/frontend/src/features/export/anim.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export const collapseAnim = { initial: { height: 0, opacity: 0 }, animate: { height: "auto" as const, opacity: 1 }, diff --git a/studio/frontend/src/features/export/api/export-api.ts b/studio/frontend/src/features/export/api/export-api.ts index 1eac52f216..a2fde28869 100644 --- a/studio/frontend/src/features/export/api/export-api.ts +++ b/studio/frontend/src/features/export/api/export-api.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { authFetch } from "@/features/auth"; async function readError(response: Response): Promise { diff --git a/studio/frontend/src/features/export/components/export-dialog.tsx b/studio/frontend/src/features/export/components/export-dialog.tsx index 42cf54b65d..1591cf92c3 100644 --- a/studio/frontend/src/features/export/components/export-dialog.tsx +++ b/studio/frontend/src/features/export/components/export-dialog.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Button } from "@/components/ui/button"; import { Dialog, diff --git a/studio/frontend/src/features/export/components/method-picker.tsx b/studio/frontend/src/features/export/components/method-picker.tsx index 1096947d94..7fbdd8491c 100644 --- a/studio/frontend/src/features/export/components/method-picker.tsx +++ b/studio/frontend/src/features/export/components/method-picker.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Badge } from "@/components/ui/badge"; import { Tooltip, diff --git a/studio/frontend/src/features/export/components/quant-picker.tsx b/studio/frontend/src/features/export/components/quant-picker.tsx index 8136a46bb5..08eed2b06a 100644 --- a/studio/frontend/src/features/export/components/quant-picker.tsx +++ b/studio/frontend/src/features/export/components/quant-picker.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Tooltip, TooltipContent, diff --git a/studio/frontend/src/features/export/constants.ts b/studio/frontend/src/features/export/constants.ts index 857e8fa91a..de1a0d76af 100644 --- a/studio/frontend/src/features/export/constants.ts +++ b/studio/frontend/src/features/export/constants.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { TrainingMethod } from "@/types/training"; export type ExportMethod = "merged" | "lora" | "gguf"; diff --git a/studio/frontend/src/features/export/export-page.tsx b/studio/frontend/src/features/export/export-page.tsx index fa43c5eb98..05d697bd5e 100644 --- a/studio/frontend/src/features/export/export-page.tsx +++ b/studio/frontend/src/features/export/export-page.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { SectionCard } from "@/components/section-card"; import { Button } from "@/components/ui/button"; import { diff --git a/studio/frontend/src/features/export/index.ts b/studio/frontend/src/features/export/index.ts index 320f8b6d2e..42c0c3bd5f 100644 --- a/studio/frontend/src/features/export/index.ts +++ b/studio/frontend/src/features/export/index.ts @@ -1 +1,4 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export { ExportPage } from "./export-page"; diff --git a/studio/frontend/src/features/export/tour/index.ts b/studio/frontend/src/features/export/tour/index.ts index 68384f2fc5..ace954425c 100644 --- a/studio/frontend/src/features/export/tour/index.ts +++ b/studio/frontend/src/features/export/tour/index.ts @@ -1,2 +1,5 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export { exportTourSteps } from "./steps"; diff --git a/studio/frontend/src/features/export/tour/steps.tsx b/studio/frontend/src/features/export/tour/steps.tsx index 559524894b..d65019a0e3 100644 --- a/studio/frontend/src/features/export/tour/steps.tsx +++ b/studio/frontend/src/features/export/tour/steps.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { TourStep } from "@/features/tour"; export const exportTourSteps: TourStep[] = [ diff --git a/studio/frontend/src/features/onboarding/components/splash-screen.tsx b/studio/frontend/src/features/onboarding/components/splash-screen.tsx index 9839d967af..f116391597 100644 --- a/studio/frontend/src/features/onboarding/components/splash-screen.tsx +++ b/studio/frontend/src/features/onboarding/components/splash-screen.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Button } from "@/components/ui/button"; import { Card } from "@/components/ui/card"; import { motion } from "motion/react"; diff --git a/studio/frontend/src/features/onboarding/components/steps/dataset-step.tsx b/studio/frontend/src/features/onboarding/components/steps/dataset-step.tsx index 5e72e4b765..0c366c766d 100644 --- a/studio/frontend/src/features/onboarding/components/steps/dataset-step.tsx +++ b/studio/frontend/src/features/onboarding/components/steps/dataset-step.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { diff --git a/studio/frontend/src/features/onboarding/components/steps/hyperparameters-step.tsx b/studio/frontend/src/features/onboarding/components/steps/hyperparameters-step.tsx index 9ad9c31e0a..bb154de0c7 100644 --- a/studio/frontend/src/features/onboarding/components/steps/hyperparameters-step.tsx +++ b/studio/frontend/src/features/onboarding/components/steps/hyperparameters-step.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { FieldGroup, FieldLabel, diff --git a/studio/frontend/src/features/onboarding/components/steps/model-selection-step.tsx b/studio/frontend/src/features/onboarding/components/steps/model-selection-step.tsx index 94f0084100..fe37ab4db2 100644 --- a/studio/frontend/src/features/onboarding/components/steps/model-selection-step.tsx +++ b/studio/frontend/src/features/onboarding/components/steps/model-selection-step.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Combobox, ComboboxContent, diff --git a/studio/frontend/src/features/onboarding/components/steps/model-type-step.tsx b/studio/frontend/src/features/onboarding/components/steps/model-type-step.tsx index 8cf6e8bc07..8fbbe8ec64 100644 --- a/studio/frontend/src/features/onboarding/components/steps/model-type-step.tsx +++ b/studio/frontend/src/features/onboarding/components/steps/model-type-step.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Badge } from "@/components/ui/badge"; import { Card, CardContent } from "@/components/ui/card"; import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"; diff --git a/studio/frontend/src/features/onboarding/components/steps/summary-step.tsx b/studio/frontend/src/features/onboarding/components/steps/summary-step.tsx index b1ded62f80..8b4737015c 100644 --- a/studio/frontend/src/features/onboarding/components/steps/summary-step.tsx +++ b/studio/frontend/src/features/onboarding/components/steps/summary-step.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Badge } from "@/components/ui/badge"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Separator } from "@/components/ui/separator"; diff --git a/studio/frontend/src/features/onboarding/components/wizard-content.tsx b/studio/frontend/src/features/onboarding/components/wizard-content.tsx index 20e37f7d58..1f265e2b9b 100644 --- a/studio/frontend/src/features/onboarding/components/wizard-content.tsx +++ b/studio/frontend/src/features/onboarding/components/wizard-content.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { STEPS } from "@/config/training"; import { useTrainingConfigStore } from "@/features/training"; import type { StepNumber } from "@/types/training"; diff --git a/studio/frontend/src/features/onboarding/components/wizard-footer.tsx b/studio/frontend/src/features/onboarding/components/wizard-footer.tsx index 2b3af5aa96..9d755e8e14 100644 --- a/studio/frontend/src/features/onboarding/components/wizard-footer.tsx +++ b/studio/frontend/src/features/onboarding/components/wizard-footer.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Button } from "@/components/ui/button"; import { STEPS } from "@/config/training"; import { markOnboardingDone } from "@/features/auth"; diff --git a/studio/frontend/src/features/onboarding/components/wizard-layout.tsx b/studio/frontend/src/features/onboarding/components/wizard-layout.tsx index 8153922395..d23e6a8128 100644 --- a/studio/frontend/src/features/onboarding/components/wizard-layout.tsx +++ b/studio/frontend/src/features/onboarding/components/wizard-layout.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Card } from "@/components/ui/card"; import { useNavigate } from "@tanstack/react-router"; import { motion } from "motion/react"; diff --git a/studio/frontend/src/features/onboarding/components/wizard-sidebar.tsx b/studio/frontend/src/features/onboarding/components/wizard-sidebar.tsx index 734c8c166d..7ef8937137 100644 --- a/studio/frontend/src/features/onboarding/components/wizard-sidebar.tsx +++ b/studio/frontend/src/features/onboarding/components/wizard-sidebar.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Progress } from "@/components/ui/progress"; import { STEPS } from "@/config/training"; import { useTrainingConfigStore } from "@/features/training"; diff --git a/studio/frontend/src/features/onboarding/components/wizard-step-item.tsx b/studio/frontend/src/features/onboarding/components/wizard-step-item.tsx index 953b1699c7..70cf3d2fdd 100644 --- a/studio/frontend/src/features/onboarding/components/wizard-step-item.tsx +++ b/studio/frontend/src/features/onboarding/components/wizard-step-item.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { cn } from "@/lib/utils"; import { useTrainingConfigStore } from "@/features/training"; import type { StepConfig, StepNumber } from "@/types/training"; diff --git a/studio/frontend/src/features/onboarding/index.ts b/studio/frontend/src/features/onboarding/index.ts index 4f1fb06265..e1e8a02758 100644 --- a/studio/frontend/src/features/onboarding/index.ts +++ b/studio/frontend/src/features/onboarding/index.ts @@ -1 +1,4 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export { WizardLayout } from "./components/wizard-layout"; diff --git a/studio/frontend/src/features/recipe-studio/api/index.ts b/studio/frontend/src/features/recipe-studio/api/index.ts index ef13eb92da..fe3ab9dd5a 100644 --- a/studio/frontend/src/features/recipe-studio/api/index.ts +++ b/studio/frontend/src/features/recipe-studio/api/index.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { authFetch } from "@/features/auth"; const DEFAULT_BASE = "/api/data-recipe"; diff --git a/studio/frontend/src/features/recipe-studio/blocks/definitions.ts b/studio/frontend/src/features/recipe-studio/blocks/definitions.ts index c2d68b26cf..d059d04cfb 100644 --- a/studio/frontend/src/features/recipe-studio/blocks/definitions.ts +++ b/studio/frontend/src/features/recipe-studio/blocks/definitions.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { BalanceScaleIcon, Clock01Icon, diff --git a/studio/frontend/src/features/recipe-studio/blocks/registry.ts b/studio/frontend/src/features/recipe-studio/blocks/registry.ts index 3551981695..0dd395d0d3 100644 --- a/studio/frontend/src/features/recipe-studio/blocks/registry.ts +++ b/studio/frontend/src/features/recipe-studio/blocks/registry.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export type { BlockDefinition, BlockDialogKey, diff --git a/studio/frontend/src/features/recipe-studio/blocks/render-dialog.tsx b/studio/frontend/src/features/recipe-studio/blocks/render-dialog.tsx index d8d8222842..4455259527 100644 --- a/studio/frontend/src/features/recipe-studio/blocks/render-dialog.tsx +++ b/studio/frontend/src/features/recipe-studio/blocks/render-dialog.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { ReactElement } from "react"; import type { NodeConfig, SamplerConfig } from "../types"; import { getBlockDefinitionForConfig } from "./definitions"; diff --git a/studio/frontend/src/features/recipe-studio/components/block-sheet.tsx b/studio/frontend/src/features/recipe-studio/components/block-sheet.tsx index 079a0ee004..c04bd87f5f 100644 --- a/studio/frontend/src/features/recipe-studio/components/block-sheet.tsx +++ b/studio/frontend/src/features/recipe-studio/components/block-sheet.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { Input } from "@/components/ui/input"; diff --git a/studio/frontend/src/features/recipe-studio/components/chip-input.tsx b/studio/frontend/src/features/recipe-studio/components/chip-input.tsx index a7dd5ccc16..e2ae74b90e 100644 --- a/studio/frontend/src/features/recipe-studio/components/chip-input.tsx +++ b/studio/frontend/src/features/recipe-studio/components/chip-input.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Button } from "@/components/ui/button"; import { Cancel01Icon } from "@hugeicons/core-free-icons"; import { HugeiconsIcon } from "@hugeicons/react"; diff --git a/studio/frontend/src/features/recipe-studio/components/controls/layout-controls.tsx b/studio/frontend/src/features/recipe-studio/components/controls/layout-controls.tsx index 3208688c04..21f2c4d8da 100644 --- a/studio/frontend/src/features/recipe-studio/components/controls/layout-controls.tsx +++ b/studio/frontend/src/features/recipe-studio/components/controls/layout-controls.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { type ReactElement, useCallback } from "react"; import { Panel, diff --git a/studio/frontend/src/features/recipe-studio/components/controls/run-validate-floating-controls.tsx b/studio/frontend/src/features/recipe-studio/components/controls/run-validate-floating-controls.tsx index c8ca937d1e..8115b56624 100644 --- a/studio/frontend/src/features/recipe-studio/components/controls/run-validate-floating-controls.tsx +++ b/studio/frontend/src/features/recipe-studio/components/controls/run-validate-floating-controls.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { CookBookIcon, TestTube01Icon } from "@hugeicons/core-free-icons"; import { HugeiconsIcon } from "@hugeicons/react"; import type { ReactElement } from "react"; diff --git a/studio/frontend/src/features/recipe-studio/components/controls/viewport-controls.tsx b/studio/frontend/src/features/recipe-studio/components/controls/viewport-controls.tsx index 2ba13bfb33..15bd2d7b4e 100644 --- a/studio/frontend/src/features/recipe-studio/components/controls/viewport-controls.tsx +++ b/studio/frontend/src/features/recipe-studio/components/controls/viewport-controls.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { type ReactElement, useCallback } from "react"; import { Lock, LockOpen, Maximize2, Minus, Plus } from "lucide-react"; import { Panel, useReactFlow } from "@xyflow/react"; diff --git a/studio/frontend/src/features/recipe-studio/components/executions/execution-columns-tab.tsx b/studio/frontend/src/features/recipe-studio/components/executions/execution-columns-tab.tsx index 525dfefba0..b2c57a0667 100644 --- a/studio/frontend/src/features/recipe-studio/components/executions/execution-columns-tab.tsx +++ b/studio/frontend/src/features/recipe-studio/components/executions/execution-columns-tab.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { ReactElement } from "react"; import { Table, diff --git a/studio/frontend/src/features/recipe-studio/components/executions/execution-data-tab.tsx b/studio/frontend/src/features/recipe-studio/components/executions/execution-data-tab.tsx index 3d4cc11ab6..45c5b27aae 100644 --- a/studio/frontend/src/features/recipe-studio/components/executions/execution-data-tab.tsx +++ b/studio/frontend/src/features/recipe-studio/components/executions/execution-data-tab.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { ReactElement } from "react"; import type { ColumnDef } from "@tanstack/react-table"; import { Button } from "@/components/ui/button"; diff --git a/studio/frontend/src/features/recipe-studio/components/executions/execution-overview-tab.tsx b/studio/frontend/src/features/recipe-studio/components/executions/execution-overview-tab.tsx index e24d23bc8e..56ba5bbf0e 100644 --- a/studio/frontend/src/features/recipe-studio/components/executions/execution-overview-tab.tsx +++ b/studio/frontend/src/features/recipe-studio/components/executions/execution-overview-tab.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { ReactElement, RefObject, UIEvent } from "react"; import { Database01Icon, diff --git a/studio/frontend/src/features/recipe-studio/components/executions/execution-raw-tab.tsx b/studio/frontend/src/features/recipe-studio/components/executions/execution-raw-tab.tsx index 718722fc67..6d8cd3a543 100644 --- a/studio/frontend/src/features/recipe-studio/components/executions/execution-raw-tab.tsx +++ b/studio/frontend/src/features/recipe-studio/components/executions/execution-raw-tab.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { ReactElement } from "react"; type ExecutionRawTabProps = { diff --git a/studio/frontend/src/features/recipe-studio/components/executions/execution-sidebar.tsx b/studio/frontend/src/features/recipe-studio/components/executions/execution-sidebar.tsx index 75441daf09..78cde58f4c 100644 --- a/studio/frontend/src/features/recipe-studio/components/executions/execution-sidebar.tsx +++ b/studio/frontend/src/features/recipe-studio/components/executions/execution-sidebar.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { ReactElement } from "react"; import { Badge } from "@/components/ui/badge"; import { cn } from "@/lib/utils"; diff --git a/studio/frontend/src/features/recipe-studio/components/executions/executions-view-helpers.ts b/studio/frontend/src/features/recipe-studio/components/executions/executions-view-helpers.ts index 0533a2e67f..dcb91ab4ff 100644 --- a/studio/frontend/src/features/recipe-studio/components/executions/executions-view-helpers.ts +++ b/studio/frontend/src/features/recipe-studio/components/executions/executions-view-helpers.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { RecipeExecutionAnalysis, RecipeExecutionStatus, diff --git a/studio/frontend/src/features/recipe-studio/components/executions/executions-view.tsx b/studio/frontend/src/features/recipe-studio/components/executions/executions-view.tsx index 8fe9a0d225..619c8512c9 100644 --- a/studio/frontend/src/features/recipe-studio/components/executions/executions-view.tsx +++ b/studio/frontend/src/features/recipe-studio/components/executions/executions-view.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { useEffect, useMemo, useRef, useState, type ReactElement } from "react"; import type { ColumnDef } from "@tanstack/react-table"; import { diff --git a/studio/frontend/src/features/recipe-studio/components/graph/internals-sync.tsx b/studio/frontend/src/features/recipe-studio/components/graph/internals-sync.tsx index 5200d02d04..5a674272c9 100644 --- a/studio/frontend/src/features/recipe-studio/components/graph/internals-sync.tsx +++ b/studio/frontend/src/features/recipe-studio/components/graph/internals-sync.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { useUpdateNodeInternals } from "@xyflow/react"; import { useEffect, useMemo, useRef } from "react"; diff --git a/studio/frontend/src/features/recipe-studio/components/inline/inline-category-badges.tsx b/studio/frontend/src/features/recipe-studio/components/inline/inline-category-badges.tsx index f7eca468eb..cb15bfcee7 100644 --- a/studio/frontend/src/features/recipe-studio/components/inline/inline-category-badges.tsx +++ b/studio/frontend/src/features/recipe-studio/components/inline/inline-category-badges.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Badge } from "@/components/ui/badge"; import { type ReactElement, useLayoutEffect, useRef, useState } from "react"; diff --git a/studio/frontend/src/features/recipe-studio/components/inline/inline-expression.tsx b/studio/frontend/src/features/recipe-studio/components/inline/inline-expression.tsx index 206a068a78..4c1883cd0a 100644 --- a/studio/frontend/src/features/recipe-studio/components/inline/inline-expression.tsx +++ b/studio/frontend/src/features/recipe-studio/components/inline/inline-expression.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Input } from "@/components/ui/input"; import { Select, diff --git a/studio/frontend/src/features/recipe-studio/components/inline/inline-field.tsx b/studio/frontend/src/features/recipe-studio/components/inline/inline-field.tsx index 9938cf3541..29aba8fada 100644 --- a/studio/frontend/src/features/recipe-studio/components/inline/inline-field.tsx +++ b/studio/frontend/src/features/recipe-studio/components/inline/inline-field.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { cn } from "@/lib/utils"; import type { ReactElement, ReactNode } from "react"; diff --git a/studio/frontend/src/features/recipe-studio/components/inline/inline-llm.tsx b/studio/frontend/src/features/recipe-studio/components/inline/inline-llm.tsx index 1e7bfef6c5..1393e2e971 100644 --- a/studio/frontend/src/features/recipe-studio/components/inline/inline-llm.tsx +++ b/studio/frontend/src/features/recipe-studio/components/inline/inline-llm.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Combobox, ComboboxContent, diff --git a/studio/frontend/src/features/recipe-studio/components/inline/inline-model.tsx b/studio/frontend/src/features/recipe-studio/components/inline/inline-model.tsx index 2c2c2ffd41..ce9e445d33 100644 --- a/studio/frontend/src/features/recipe-studio/components/inline/inline-model.tsx +++ b/studio/frontend/src/features/recipe-studio/components/inline/inline-model.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Input } from "@/components/ui/input"; import type { ReactElement } from "react"; import type { ModelConfig, ModelProviderConfig } from "../../types"; diff --git a/studio/frontend/src/features/recipe-studio/components/inline/inline-policy.ts b/studio/frontend/src/features/recipe-studio/components/inline/inline-policy.ts index 954c00ceaf..0cec106e54 100644 --- a/studio/frontend/src/features/recipe-studio/components/inline/inline-policy.ts +++ b/studio/frontend/src/features/recipe-studio/components/inline/inline-policy.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { NodeConfig, SamplerType } from "../../types"; export type ConfigUiMode = "inline" | "dialog"; diff --git a/studio/frontend/src/features/recipe-studio/components/inline/inline-sampler.tsx b/studio/frontend/src/features/recipe-studio/components/inline/inline-sampler.tsx index e3918729be..bd0b2a5a27 100644 --- a/studio/frontend/src/features/recipe-studio/components/inline/inline-sampler.tsx +++ b/studio/frontend/src/features/recipe-studio/components/inline/inline-sampler.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Input } from "@/components/ui/input"; import { Select, diff --git a/studio/frontend/src/features/recipe-studio/components/inline/inline-seed.tsx b/studio/frontend/src/features/recipe-studio/components/inline/inline-seed.tsx index 619faa7704..2f4e6708c8 100644 --- a/studio/frontend/src/features/recipe-studio/components/inline/inline-seed.tsx +++ b/studio/frontend/src/features/recipe-studio/components/inline/inline-seed.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { DocumentAttachmentIcon, DocumentCodeIcon, Plant01Icon } from "@hugeicons/core-free-icons"; import { HugeiconsIcon } from "@hugeicons/react"; import type { ReactElement } from "react"; diff --git a/studio/frontend/src/features/recipe-studio/components/recipe-floating-icon-button-class.ts b/studio/frontend/src/features/recipe-studio/components/recipe-floating-icon-button-class.ts index ed375eef7c..5002d35f6c 100644 --- a/studio/frontend/src/features/recipe-studio/components/recipe-floating-icon-button-class.ts +++ b/studio/frontend/src/features/recipe-studio/components/recipe-floating-icon-button-class.ts @@ -1,2 +1,5 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export const RECIPE_FLOATING_ICON_BUTTON_CLASS = "corner-squircle group h-11 w-11 rounded-xl border border-border/60 bg-transparent p-0 text-muted-foreground hover:bg-transparent hover:text-primary hover:border-primary/60"; diff --git a/studio/frontend/src/features/recipe-studio/components/recipe-graph-aux-node.tsx b/studio/frontend/src/features/recipe-studio/components/recipe-graph-aux-node.tsx index 8559f3e05c..69f8c16c52 100644 --- a/studio/frontend/src/features/recipe-studio/components/recipe-graph-aux-node.tsx +++ b/studio/frontend/src/features/recipe-studio/components/recipe-graph-aux-node.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; diff --git a/studio/frontend/src/features/recipe-studio/components/recipe-graph-node.tsx b/studio/frontend/src/features/recipe-studio/components/recipe-graph-node.tsx index 8f2308c4ac..afc088e10a 100644 --- a/studio/frontend/src/features/recipe-studio/components/recipe-graph-node.tsx +++ b/studio/frontend/src/features/recipe-studio/components/recipe-graph-node.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { MarkdownPreview } from "@/components/markdown/markdown-preview"; diff --git a/studio/frontend/src/features/recipe-studio/components/recipe-graph-semantic-edge.tsx b/studio/frontend/src/features/recipe-studio/components/recipe-graph-semantic-edge.tsx index 9908a91f92..2841facbc2 100644 --- a/studio/frontend/src/features/recipe-studio/components/recipe-graph-semantic-edge.tsx +++ b/studio/frontend/src/features/recipe-studio/components/recipe-graph-semantic-edge.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { BaseEdge, type EdgeProps, getSmoothStepPath } from "@xyflow/react"; import { memo, type ReactElement } from "react"; diff --git a/studio/frontend/src/features/recipe-studio/components/recipe-studio-header.tsx b/studio/frontend/src/features/recipe-studio/components/recipe-studio-header.tsx index 4a4df6df45..fb22cd5b19 100644 --- a/studio/frontend/src/features/recipe-studio/components/recipe-studio-header.tsx +++ b/studio/frontend/src/features/recipe-studio/components/recipe-studio-header.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { type KeyboardEvent, type ReactElement, useState } from "react"; import { CookBookIcon, diff --git a/studio/frontend/src/features/recipe-studio/components/rf-ui/base-handle.tsx b/studio/frontend/src/features/recipe-studio/components/rf-ui/base-handle.tsx index 1901b141f1..db3147459a 100644 --- a/studio/frontend/src/features/recipe-studio/components/rf-ui/base-handle.tsx +++ b/studio/frontend/src/features/recipe-studio/components/rf-ui/base-handle.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { ComponentProps, ReactElement } from "react"; import { Handle, type HandleProps } from "@xyflow/react"; diff --git a/studio/frontend/src/features/recipe-studio/components/rf-ui/base-node.tsx b/studio/frontend/src/features/recipe-studio/components/rf-ui/base-node.tsx index 5bfc573f4a..a1e9435bd6 100644 --- a/studio/frontend/src/features/recipe-studio/components/rf-ui/base-node.tsx +++ b/studio/frontend/src/features/recipe-studio/components/rf-ui/base-node.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { ComponentProps, ReactElement } from "react"; import { cn } from "@/lib/utils"; diff --git a/studio/frontend/src/features/recipe-studio/components/rf-ui/data-edge.tsx b/studio/frontend/src/features/recipe-studio/components/rf-ui/data-edge.tsx index ee475b7459..ccf564ce86 100644 --- a/studio/frontend/src/features/recipe-studio/components/rf-ui/data-edge.tsx +++ b/studio/frontend/src/features/recipe-studio/components/rf-ui/data-edge.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { ReactElement } from "react"; import { BaseEdge, diff --git a/studio/frontend/src/features/recipe-studio/components/rf-ui/labeled-handle.tsx b/studio/frontend/src/features/recipe-studio/components/rf-ui/labeled-handle.tsx index b365bc0b32..7ec18eee7e 100644 --- a/studio/frontend/src/features/recipe-studio/components/rf-ui/labeled-handle.tsx +++ b/studio/frontend/src/features/recipe-studio/components/rf-ui/labeled-handle.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { type ComponentProps, type ReactElement } from "react"; import { type HandleProps } from "@xyflow/react"; diff --git a/studio/frontend/src/features/recipe-studio/components/runtime/execution-progress-island.tsx b/studio/frontend/src/features/recipe-studio/components/runtime/execution-progress-island.tsx index 9cf2791416..833a16356e 100644 --- a/studio/frontend/src/features/recipe-studio/components/runtime/execution-progress-island.tsx +++ b/studio/frontend/src/features/recipe-studio/components/runtime/execution-progress-island.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { ArrowDown01Icon, ArrowUp01Icon, diff --git a/studio/frontend/src/features/recipe-studio/components/shared/available-references-inline.tsx b/studio/frontend/src/features/recipe-studio/components/shared/available-references-inline.tsx index 938e5405ab..9e20a761ff 100644 --- a/studio/frontend/src/features/recipe-studio/components/shared/available-references-inline.tsx +++ b/studio/frontend/src/features/recipe-studio/components/shared/available-references-inline.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Badge } from "@/components/ui/badge"; import { type ReactElement, useLayoutEffect, useRef, useState } from "react"; import type { AvailableVariableEntry } from "../../utils/variables"; diff --git a/studio/frontend/src/features/recipe-studio/components/shared/hf-dataset-combobox.tsx b/studio/frontend/src/features/recipe-studio/components/shared/hf-dataset-combobox.tsx index 7377bcac69..8287b4bf01 100644 --- a/studio/frontend/src/features/recipe-studio/components/shared/hf-dataset-combobox.tsx +++ b/studio/frontend/src/features/recipe-studio/components/shared/hf-dataset-combobox.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Combobox, ComboboxContent, diff --git a/studio/frontend/src/features/recipe-studio/constants.ts b/studio/frontend/src/features/recipe-studio/constants.ts index 94fdb02868..af76da04f1 100644 --- a/studio/frontend/src/features/recipe-studio/constants.ts +++ b/studio/frontend/src/features/recipe-studio/constants.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export const DEFAULT_NODE_WIDTH = 400; export const DEFAULT_NODE_HEIGHT = 120; export const MIN_NODE_WIDTH = 260; diff --git a/studio/frontend/src/features/recipe-studio/data/executions-db.ts b/studio/frontend/src/features/recipe-studio/data/executions-db.ts index e09824a664..1374a2ebb5 100644 --- a/studio/frontend/src/features/recipe-studio/data/executions-db.ts +++ b/studio/frontend/src/features/recipe-studio/data/executions-db.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import Dexie, { type EntityTable } from "dexie"; import type { RecipeExecutionRecord } from "../execution-types"; diff --git a/studio/frontend/src/features/recipe-studio/dialogs/config-dialog.tsx b/studio/frontend/src/features/recipe-studio/dialogs/config-dialog.tsx index ef290f18fb..400050669a 100644 --- a/studio/frontend/src/features/recipe-studio/dialogs/config-dialog.tsx +++ b/studio/frontend/src/features/recipe-studio/dialogs/config-dialog.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogFooter } from "@/components/ui/dialog"; import { Switch } from "@/components/ui/switch"; diff --git a/studio/frontend/src/features/recipe-studio/dialogs/expression/expression-dialog.tsx b/studio/frontend/src/features/recipe-studio/dialogs/expression/expression-dialog.tsx index c734f67fae..76a431cae3 100644 --- a/studio/frontend/src/features/recipe-studio/dialogs/expression/expression-dialog.tsx +++ b/studio/frontend/src/features/recipe-studio/dialogs/expression/expression-dialog.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Select, SelectContent, diff --git a/studio/frontend/src/features/recipe-studio/dialogs/import-dialog.tsx b/studio/frontend/src/features/recipe-studio/dialogs/import-dialog.tsx index 379091a8ae..89f56ebab7 100644 --- a/studio/frontend/src/features/recipe-studio/dialogs/import-dialog.tsx +++ b/studio/frontend/src/features/recipe-studio/dialogs/import-dialog.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Button } from "@/components/ui/button"; import { Dialog, diff --git a/studio/frontend/src/features/recipe-studio/dialogs/llm/general-tab.tsx b/studio/frontend/src/features/recipe-studio/dialogs/llm/general-tab.tsx index 561165c7d0..ef7e38417c 100644 --- a/studio/frontend/src/features/recipe-studio/dialogs/llm/general-tab.tsx +++ b/studio/frontend/src/features/recipe-studio/dialogs/llm/general-tab.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Collapsible, CollapsibleContent, diff --git a/studio/frontend/src/features/recipe-studio/dialogs/llm/llm-dialog.tsx b/studio/frontend/src/features/recipe-studio/dialogs/llm/llm-dialog.tsx index 7069f6119a..6d87f7b117 100644 --- a/studio/frontend/src/features/recipe-studio/dialogs/llm/llm-dialog.tsx +++ b/studio/frontend/src/features/recipe-studio/dialogs/llm/llm-dialog.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { type ReactElement, useRef } from "react"; import type { LlmConfig } from "../../types"; import { LlmGeneralTab } from "./general-tab"; diff --git a/studio/frontend/src/features/recipe-studio/dialogs/llm/scores-tab.tsx b/studio/frontend/src/features/recipe-studio/dialogs/llm/scores-tab.tsx index f83d40161f..8b36278e0c 100644 --- a/studio/frontend/src/features/recipe-studio/dialogs/llm/scores-tab.tsx +++ b/studio/frontend/src/features/recipe-studio/dialogs/llm/scores-tab.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Button } from "@/components/ui/button"; import { Empty, diff --git a/studio/frontend/src/features/recipe-studio/dialogs/markdown-note/markdown-note-dialog.tsx b/studio/frontend/src/features/recipe-studio/dialogs/markdown-note/markdown-note-dialog.tsx index 5cb04b5169..d0fa03160b 100644 --- a/studio/frontend/src/features/recipe-studio/dialogs/markdown-note/markdown-note-dialog.tsx +++ b/studio/frontend/src/features/recipe-studio/dialogs/markdown-note/markdown-note-dialog.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Slider } from "@/components/ui/slider"; import { Textarea } from "@/components/ui/textarea"; import type { ReactElement } from "react"; diff --git a/studio/frontend/src/features/recipe-studio/dialogs/models/model-config-dialog.tsx b/studio/frontend/src/features/recipe-studio/dialogs/models/model-config-dialog.tsx index ed03018dda..905526bc73 100644 --- a/studio/frontend/src/features/recipe-studio/dialogs/models/model-config-dialog.tsx +++ b/studio/frontend/src/features/recipe-studio/dialogs/models/model-config-dialog.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Collapsible, CollapsibleContent, diff --git a/studio/frontend/src/features/recipe-studio/dialogs/models/model-provider-dialog.tsx b/studio/frontend/src/features/recipe-studio/dialogs/models/model-provider-dialog.tsx index e50beb28c3..11f0ddd67c 100644 --- a/studio/frontend/src/features/recipe-studio/dialogs/models/model-provider-dialog.tsx +++ b/studio/frontend/src/features/recipe-studio/dialogs/models/model-provider-dialog.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Collapsible, CollapsibleContent, diff --git a/studio/frontend/src/features/recipe-studio/dialogs/preview-dialog.tsx b/studio/frontend/src/features/recipe-studio/dialogs/preview-dialog.tsx index 05b2e45874..545b4f9690 100644 --- a/studio/frontend/src/features/recipe-studio/dialogs/preview-dialog.tsx +++ b/studio/frontend/src/features/recipe-studio/dialogs/preview-dialog.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Button } from "@/components/ui/button"; import { Collapsible, diff --git a/studio/frontend/src/features/recipe-studio/dialogs/processors-dialog.tsx b/studio/frontend/src/features/recipe-studio/dialogs/processors-dialog.tsx index 345cfe89a6..20da471d6a 100644 --- a/studio/frontend/src/features/recipe-studio/dialogs/processors-dialog.tsx +++ b/studio/frontend/src/features/recipe-studio/dialogs/processors-dialog.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogFooter, DialogTitle } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; diff --git a/studio/frontend/src/features/recipe-studio/dialogs/samplers/bernoulli-dialog.tsx b/studio/frontend/src/features/recipe-studio/dialogs/samplers/bernoulli-dialog.tsx index 41322a6f0b..3517c32cd1 100644 --- a/studio/frontend/src/features/recipe-studio/dialogs/samplers/bernoulli-dialog.tsx +++ b/studio/frontend/src/features/recipe-studio/dialogs/samplers/bernoulli-dialog.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Input } from "@/components/ui/input"; import type { ReactElement } from "react"; import type { SamplerConfig } from "../../types"; diff --git a/studio/frontend/src/features/recipe-studio/dialogs/samplers/category-dialog.tsx b/studio/frontend/src/features/recipe-studio/dialogs/samplers/category-dialog.tsx index 3a776fadd9..2766f5ab9e 100644 --- a/studio/frontend/src/features/recipe-studio/dialogs/samplers/category-dialog.tsx +++ b/studio/frontend/src/features/recipe-studio/dialogs/samplers/category-dialog.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Button } from "@/components/ui/button"; import { Collapsible, diff --git a/studio/frontend/src/features/recipe-studio/dialogs/samplers/datetime-dialog.tsx b/studio/frontend/src/features/recipe-studio/dialogs/samplers/datetime-dialog.tsx index 4d9c134d06..e89309713e 100644 --- a/studio/frontend/src/features/recipe-studio/dialogs/samplers/datetime-dialog.tsx +++ b/studio/frontend/src/features/recipe-studio/dialogs/samplers/datetime-dialog.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Input } from "@/components/ui/input"; import { Select, diff --git a/studio/frontend/src/features/recipe-studio/dialogs/samplers/gaussian-dialog.tsx b/studio/frontend/src/features/recipe-studio/dialogs/samplers/gaussian-dialog.tsx index f135e1cd20..936f52a715 100644 --- a/studio/frontend/src/features/recipe-studio/dialogs/samplers/gaussian-dialog.tsx +++ b/studio/frontend/src/features/recipe-studio/dialogs/samplers/gaussian-dialog.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Input } from "@/components/ui/input"; import { Select, diff --git a/studio/frontend/src/features/recipe-studio/dialogs/samplers/person-dialog.tsx b/studio/frontend/src/features/recipe-studio/dialogs/samplers/person-dialog.tsx index b266c76763..3fa2f02c92 100644 --- a/studio/frontend/src/features/recipe-studio/dialogs/samplers/person-dialog.tsx +++ b/studio/frontend/src/features/recipe-studio/dialogs/samplers/person-dialog.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Input } from "@/components/ui/input"; import { Select, diff --git a/studio/frontend/src/features/recipe-studio/dialogs/samplers/subcategory-dialog.tsx b/studio/frontend/src/features/recipe-studio/dialogs/samplers/subcategory-dialog.tsx index 475ecda79e..1c6adce804 100644 --- a/studio/frontend/src/features/recipe-studio/dialogs/samplers/subcategory-dialog.tsx +++ b/studio/frontend/src/features/recipe-studio/dialogs/samplers/subcategory-dialog.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Select, SelectContent, diff --git a/studio/frontend/src/features/recipe-studio/dialogs/samplers/timedelta-dialog.tsx b/studio/frontend/src/features/recipe-studio/dialogs/samplers/timedelta-dialog.tsx index bdd42b0aa0..b36124d651 100644 --- a/studio/frontend/src/features/recipe-studio/dialogs/samplers/timedelta-dialog.tsx +++ b/studio/frontend/src/features/recipe-studio/dialogs/samplers/timedelta-dialog.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Input } from "@/components/ui/input"; import { Select, diff --git a/studio/frontend/src/features/recipe-studio/dialogs/samplers/uniform-dialog.tsx b/studio/frontend/src/features/recipe-studio/dialogs/samplers/uniform-dialog.tsx index 9692cd57cc..5a344f0570 100644 --- a/studio/frontend/src/features/recipe-studio/dialogs/samplers/uniform-dialog.tsx +++ b/studio/frontend/src/features/recipe-studio/dialogs/samplers/uniform-dialog.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Input } from "@/components/ui/input"; import { Select, diff --git a/studio/frontend/src/features/recipe-studio/dialogs/samplers/uuid-dialog.tsx b/studio/frontend/src/features/recipe-studio/dialogs/samplers/uuid-dialog.tsx index 5a1da73b61..7574ed2e10 100644 --- a/studio/frontend/src/features/recipe-studio/dialogs/samplers/uuid-dialog.tsx +++ b/studio/frontend/src/features/recipe-studio/dialogs/samplers/uuid-dialog.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Input } from "@/components/ui/input"; import type { ReactElement } from "react"; import type { SamplerConfig } from "../../types"; diff --git a/studio/frontend/src/features/recipe-studio/dialogs/seed/seed-dialog.tsx b/studio/frontend/src/features/recipe-studio/dialogs/seed/seed-dialog.tsx index 67d005dab3..3ba7c8f82f 100644 --- a/studio/frontend/src/features/recipe-studio/dialogs/seed/seed-dialog.tsx +++ b/studio/frontend/src/features/recipe-studio/dialogs/seed/seed-dialog.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Button } from "@/components/ui/button"; import { Checkbox } from "@/components/ui/checkbox"; import { diff --git a/studio/frontend/src/features/recipe-studio/dialogs/shared/available-variables.tsx b/studio/frontend/src/features/recipe-studio/dialogs/shared/available-variables.tsx index b726541d53..1aa089ae89 100644 --- a/studio/frontend/src/features/recipe-studio/dialogs/shared/available-variables.tsx +++ b/studio/frontend/src/features/recipe-studio/dialogs/shared/available-variables.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Badge } from "@/components/ui/badge"; import { type ReactElement, useMemo, useState } from "react"; import { useRecipeStudioStore } from "../../stores/recipe-studio"; diff --git a/studio/frontend/src/features/recipe-studio/dialogs/shared/dialog-shell.tsx b/studio/frontend/src/features/recipe-studio/dialogs/shared/dialog-shell.tsx index cbfe5b6d69..8c9ac11750 100644 --- a/studio/frontend/src/features/recipe-studio/dialogs/shared/dialog-shell.tsx +++ b/studio/frontend/src/features/recipe-studio/dialogs/shared/dialog-shell.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { DialogDescription, DialogHeader, diff --git a/studio/frontend/src/features/recipe-studio/dialogs/shared/field-label.tsx b/studio/frontend/src/features/recipe-studio/dialogs/shared/field-label.tsx index a57c8cbcda..8632ec8afa 100644 --- a/studio/frontend/src/features/recipe-studio/dialogs/shared/field-label.tsx +++ b/studio/frontend/src/features/recipe-studio/dialogs/shared/field-label.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"; import { InformationCircleIcon } from "@hugeicons/core-free-icons"; import { HugeiconsIcon } from "@hugeicons/react"; diff --git a/studio/frontend/src/features/recipe-studio/dialogs/shared/name-field.tsx b/studio/frontend/src/features/recipe-studio/dialogs/shared/name-field.tsx index bd2212f79f..756c554b1b 100644 --- a/studio/frontend/src/features/recipe-studio/dialogs/shared/name-field.tsx +++ b/studio/frontend/src/features/recipe-studio/dialogs/shared/name-field.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Input } from "@/components/ui/input"; import { type ReactElement, useId } from "react"; import { FieldLabel } from "./field-label"; diff --git a/studio/frontend/src/features/recipe-studio/dialogs/shared/validation-banner.tsx b/studio/frontend/src/features/recipe-studio/dialogs/shared/validation-banner.tsx index 088ebfd36c..8389f4c0dc 100644 --- a/studio/frontend/src/features/recipe-studio/dialogs/shared/validation-banner.tsx +++ b/studio/frontend/src/features/recipe-studio/dialogs/shared/validation-banner.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { ReactElement } from "react"; import type { NodeConfig } from "../../types"; import { getConfigErrors } from "../../utils"; diff --git a/studio/frontend/src/features/recipe-studio/dialogs/tool-profile/helpers.ts b/studio/frontend/src/features/recipe-studio/dialogs/tool-profile/helpers.ts index 332c92fbfa..788371bbde 100644 --- a/studio/frontend/src/features/recipe-studio/dialogs/tool-profile/helpers.ts +++ b/studio/frontend/src/features/recipe-studio/dialogs/tool-profile/helpers.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { LlmMcpProviderConfig } from "../../types"; export function createMcpProviderId(prefix: string, index: number): string { diff --git a/studio/frontend/src/features/recipe-studio/dialogs/tool-profile/tool-profile-dialog.tsx b/studio/frontend/src/features/recipe-studio/dialogs/tool-profile/tool-profile-dialog.tsx index 76a8e5b449..0d7cee840c 100644 --- a/studio/frontend/src/features/recipe-studio/dialogs/tool-profile/tool-profile-dialog.tsx +++ b/studio/frontend/src/features/recipe-studio/dialogs/tool-profile/tool-profile-dialog.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { diff --git a/studio/frontend/src/features/recipe-studio/dialogs/validators/validator-dialog.tsx b/studio/frontend/src/features/recipe-studio/dialogs/validators/validator-dialog.tsx index de2d413fd4..f62acf7026 100644 --- a/studio/frontend/src/features/recipe-studio/dialogs/validators/validator-dialog.tsx +++ b/studio/frontend/src/features/recipe-studio/dialogs/validators/validator-dialog.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Collapsible, CollapsibleContent, diff --git a/studio/frontend/src/features/recipe-studio/execution-types.ts b/studio/frontend/src/features/recipe-studio/execution-types.ts index 1df493a6d5..4281d58296 100644 --- a/studio/frontend/src/features/recipe-studio/execution-types.ts +++ b/studio/frontend/src/features/recipe-studio/execution-types.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export type RecipeStudioView = "editor" | "executions"; export type RecipeExecutionKind = "preview" | "full"; diff --git a/studio/frontend/src/features/recipe-studio/executions/execution-helpers.ts b/studio/frontend/src/features/recipe-studio/executions/execution-helpers.ts index 99e9035d9b..244f6baec4 100644 --- a/studio/frontend/src/features/recipe-studio/executions/execution-helpers.ts +++ b/studio/frontend/src/features/recipe-studio/executions/execution-helpers.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { RecipeExecutionAnalysis, RecipeExecutionRecord, diff --git a/studio/frontend/src/features/recipe-studio/executions/hydration.ts b/studio/frontend/src/features/recipe-studio/executions/hydration.ts index 08490aec21..aaa8f22183 100644 --- a/studio/frontend/src/features/recipe-studio/executions/hydration.ts +++ b/studio/frontend/src/features/recipe-studio/executions/hydration.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { listRecipeExecutions } from "../data/executions-db"; import type { RecipeExecutionRecord } from "../execution-types"; import { diff --git a/studio/frontend/src/features/recipe-studio/executions/run-settings.ts b/studio/frontend/src/features/recipe-studio/executions/run-settings.ts index 627722b21e..49a6f8fb2e 100644 --- a/studio/frontend/src/features/recipe-studio/executions/run-settings.ts +++ b/studio/frontend/src/features/recipe-studio/executions/run-settings.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { RecipeExecutionKind } from "../execution-types"; import type { RecipeRunSettings } from "../stores/recipe-executions"; import type { RecipePayload } from "../utils/payload/types"; diff --git a/studio/frontend/src/features/recipe-studio/executions/runtime.ts b/studio/frontend/src/features/recipe-studio/executions/runtime.ts index e9f6a22002..a690b12f04 100644 --- a/studio/frontend/src/features/recipe-studio/executions/runtime.ts +++ b/studio/frontend/src/features/recipe-studio/executions/runtime.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { JobEvent, JobStatusResponse } from "../api"; import type { RecipeExecutionBatch, diff --git a/studio/frontend/src/features/recipe-studio/executions/tracker.ts b/studio/frontend/src/features/recipe-studio/executions/tracker.ts index eda95933f1..96be37b996 100644 --- a/studio/frontend/src/features/recipe-studio/executions/tracker.ts +++ b/studio/frontend/src/features/recipe-studio/executions/tracker.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { toastError, toastSuccess } from "@/shared/toast"; import { getRecipeJobAnalysis, diff --git a/studio/frontend/src/features/recipe-studio/hooks/use-recipe-editor-graph.ts b/studio/frontend/src/features/recipe-studio/hooks/use-recipe-editor-graph.ts index 11e60c06d7..e7be023137 100644 --- a/studio/frontend/src/features/recipe-studio/hooks/use-recipe-editor-graph.ts +++ b/studio/frontend/src/features/recipe-studio/hooks/use-recipe-editor-graph.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { Edge, EdgeChange, diff --git a/studio/frontend/src/features/recipe-studio/hooks/use-recipe-executions.ts b/studio/frontend/src/features/recipe-studio/hooks/use-recipe-executions.ts index a0f6cda8b3..7afe586d41 100644 --- a/studio/frontend/src/features/recipe-studio/hooks/use-recipe-executions.ts +++ b/studio/frontend/src/features/recipe-studio/hooks/use-recipe-executions.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { useCallback, useEffect, useState } from "react"; import { useShallow } from "zustand/react/shallow"; import { toastError } from "@/shared/toast"; diff --git a/studio/frontend/src/features/recipe-studio/hooks/use-recipe-persistence.ts b/studio/frontend/src/features/recipe-studio/hooks/use-recipe-persistence.ts index 7ea6f8726e..b420811b43 100644 --- a/studio/frontend/src/features/recipe-studio/hooks/use-recipe-persistence.ts +++ b/studio/frontend/src/features/recipe-studio/hooks/use-recipe-persistence.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { useCallback, useEffect, useMemo, useState } from "react"; import { toastError, toastSuccess } from "@/shared/toast"; import { normalizeNonEmptyName } from "@/utils"; diff --git a/studio/frontend/src/features/recipe-studio/hooks/use-recipe-runtime-visuals.ts b/studio/frontend/src/features/recipe-studio/hooks/use-recipe-runtime-visuals.ts index 5389909b74..fe28151812 100644 --- a/studio/frontend/src/features/recipe-studio/hooks/use-recipe-runtime-visuals.ts +++ b/studio/frontend/src/features/recipe-studio/hooks/use-recipe-runtime-visuals.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { BalanceScaleIcon, Clock01Icon, diff --git a/studio/frontend/src/features/recipe-studio/hooks/use-recipe-studio-actions.ts b/studio/frontend/src/features/recipe-studio/hooks/use-recipe-studio-actions.ts index f2e8331c5c..946ebc4e9b 100644 --- a/studio/frontend/src/features/recipe-studio/hooks/use-recipe-studio-actions.ts +++ b/studio/frontend/src/features/recipe-studio/hooks/use-recipe-studio-actions.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { useRecipeExecutions } from "./use-recipe-executions"; import { useRecipePersistence } from "./use-recipe-persistence"; import type { diff --git a/studio/frontend/src/features/recipe-studio/index.ts b/studio/frontend/src/features/recipe-studio/index.ts index a38b4ed210..6be3c0c985 100644 --- a/studio/frontend/src/features/recipe-studio/index.ts +++ b/studio/frontend/src/features/recipe-studio/index.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export { RecipeStudioPage } from "./recipe-studio-page"; export type { PersistRecipeInput, diff --git a/studio/frontend/src/features/recipe-studio/recipe-studio-page.tsx b/studio/frontend/src/features/recipe-studio/recipe-studio-page.tsx index d2617cb21f..1851c6f1b9 100644 --- a/studio/frontend/src/features/recipe-studio/recipe-studio-page.tsx +++ b/studio/frontend/src/features/recipe-studio/recipe-studio-page.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Background, BackgroundVariant, diff --git a/studio/frontend/src/features/recipe-studio/stores/helpers/edge-sync.ts b/studio/frontend/src/features/recipe-studio/stores/helpers/edge-sync.ts index 379a285654..8af7d38d61 100644 --- a/studio/frontend/src/features/recipe-studio/stores/helpers/edge-sync.ts +++ b/studio/frontend/src/features/recipe-studio/stores/helpers/edge-sync.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { type Edge, addEdge } from "@xyflow/react"; import type { LayoutDirection, diff --git a/studio/frontend/src/features/recipe-studio/stores/helpers/model-infra-layout.ts b/studio/frontend/src/features/recipe-studio/stores/helpers/model-infra-layout.ts index cd065103af..0a250bb389 100644 --- a/studio/frontend/src/features/recipe-studio/stores/helpers/model-infra-layout.ts +++ b/studio/frontend/src/features/recipe-studio/stores/helpers/model-infra-layout.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { Edge, XYPosition } from "@xyflow/react"; import { DEFAULT_NODE_HEIGHT, DEFAULT_NODE_WIDTH } from "../../constants"; import type { LayoutDirection, NodeConfig, RecipeNode } from "../../types"; diff --git a/studio/frontend/src/features/recipe-studio/stores/helpers/node-updates.ts b/studio/frontend/src/features/recipe-studio/stores/helpers/node-updates.ts index 0473776d7d..5e5b888bb0 100644 --- a/studio/frontend/src/features/recipe-studio/stores/helpers/node-updates.ts +++ b/studio/frontend/src/features/recipe-studio/stores/helpers/node-updates.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { XYPosition } from "@xyflow/react"; import { DEFAULT_NODE_WIDTH } from "../../constants"; import type { diff --git a/studio/frontend/src/features/recipe-studio/stores/helpers/reference-sync.ts b/studio/frontend/src/features/recipe-studio/stores/helpers/reference-sync.ts index c0d7fe892a..df551f7efd 100644 --- a/studio/frontend/src/features/recipe-studio/stores/helpers/reference-sync.ts +++ b/studio/frontend/src/features/recipe-studio/stores/helpers/reference-sync.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { LlmConfig, ModelConfig, diff --git a/studio/frontend/src/features/recipe-studio/stores/helpers/removals.ts b/studio/frontend/src/features/recipe-studio/stores/helpers/removals.ts index 5c78d8b578..3dbf4b2795 100644 --- a/studio/frontend/src/features/recipe-studio/stores/helpers/removals.ts +++ b/studio/frontend/src/features/recipe-studio/stores/helpers/removals.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { Edge } from "@xyflow/react"; import type { NodeConfig } from "../../types"; import { isCategoryConfig, isSubcategoryConfig } from "../../utils"; diff --git a/studio/frontend/src/features/recipe-studio/stores/recipe-executions.ts b/studio/frontend/src/features/recipe-studio/stores/recipe-executions.ts index c776536ca9..42bd1b7aaf 100644 --- a/studio/frontend/src/features/recipe-studio/stores/recipe-executions.ts +++ b/studio/frontend/src/features/recipe-studio/stores/recipe-executions.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { create } from "zustand"; import type { RecipeExecutionKind } from "../execution-types"; import type { RecipeExecutionRecord } from "../execution-types"; diff --git a/studio/frontend/src/features/recipe-studio/stores/recipe-studio-helpers.ts b/studio/frontend/src/features/recipe-studio/stores/recipe-studio-helpers.ts index 4515ba1e69..f796ebe493 100644 --- a/studio/frontend/src/features/recipe-studio/stores/recipe-studio-helpers.ts +++ b/studio/frontend/src/features/recipe-studio/stores/recipe-studio-helpers.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export { applyLayoutDirectionToNodes, buildNodeUpdate, diff --git a/studio/frontend/src/features/recipe-studio/stores/recipe-studio.ts b/studio/frontend/src/features/recipe-studio/stores/recipe-studio.ts index 7c71400c15..5095ce9190 100644 --- a/studio/frontend/src/features/recipe-studio/stores/recipe-studio.ts +++ b/studio/frontend/src/features/recipe-studio/stores/recipe-studio.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { type Connection, type Edge, diff --git a/studio/frontend/src/features/recipe-studio/types/index.ts b/studio/frontend/src/features/recipe-studio/types/index.ts index 4e0470db71..8cd8a67f03 100644 --- a/studio/frontend/src/features/recipe-studio/types/index.ts +++ b/studio/frontend/src/features/recipe-studio/types/index.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { Node } from "@xyflow/react"; export type SamplerType = diff --git a/studio/frontend/src/features/recipe-studio/utils/config-factories.ts b/studio/frontend/src/features/recipe-studio/utils/config-factories.ts index 697a819ecf..eac6c6639a 100644 --- a/studio/frontend/src/features/recipe-studio/utils/config-factories.ts +++ b/studio/frontend/src/features/recipe-studio/utils/config-factories.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { ExpressionConfig, LlmConfig, diff --git a/studio/frontend/src/features/recipe-studio/utils/config-labels.ts b/studio/frontend/src/features/recipe-studio/utils/config-labels.ts index b70d7566b1..f30b0f1b67 100644 --- a/studio/frontend/src/features/recipe-studio/utils/config-labels.ts +++ b/studio/frontend/src/features/recipe-studio/utils/config-labels.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { ExpressionDtype, LlmType, diff --git a/studio/frontend/src/features/recipe-studio/utils/config-type-guards.ts b/studio/frontend/src/features/recipe-studio/utils/config-type-guards.ts index af40b524b0..57faada7f6 100644 --- a/studio/frontend/src/features/recipe-studio/utils/config-type-guards.ts +++ b/studio/frontend/src/features/recipe-studio/utils/config-type-guards.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { ExpressionConfig, LlmConfig, diff --git a/studio/frontend/src/features/recipe-studio/utils/graph.ts b/studio/frontend/src/features/recipe-studio/utils/graph.ts index d2fe8878d7..a5ba83fcc1 100644 --- a/studio/frontend/src/features/recipe-studio/utils/graph.ts +++ b/studio/frontend/src/features/recipe-studio/utils/graph.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export { applyRecipeConnection, isValidRecipeConnection, diff --git a/studio/frontend/src/features/recipe-studio/utils/graph/derive-display-graph.ts b/studio/frontend/src/features/recipe-studio/utils/graph/derive-display-graph.ts index 45fbea828e..120875d427 100644 --- a/studio/frontend/src/features/recipe-studio/utils/graph/derive-display-graph.ts +++ b/studio/frontend/src/features/recipe-studio/utils/graph/derive-display-graph.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { Edge, Node, XYPosition } from "@xyflow/react"; import type { RecipeGraphAuxNodeData } from "../../components/recipe-graph-aux-node"; import { DEFAULT_NODE_HEIGHT, DEFAULT_NODE_WIDTH } from "../../constants"; diff --git a/studio/frontend/src/features/recipe-studio/utils/graph/fit-view.ts b/studio/frontend/src/features/recipe-studio/utils/graph/fit-view.ts index 8b0175a1df..70cc29d5e6 100644 --- a/studio/frontend/src/features/recipe-studio/utils/graph/fit-view.ts +++ b/studio/frontend/src/features/recipe-studio/utils/graph/fit-view.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { Node } from "@xyflow/react"; function isMarkdownNoteNode(node: Node): boolean { diff --git a/studio/frontend/src/features/recipe-studio/utils/graph/recipe-graph-connection.ts b/studio/frontend/src/features/recipe-studio/utils/graph/recipe-graph-connection.ts index bcafb09ebc..3b15836c29 100644 --- a/studio/frontend/src/features/recipe-studio/utils/graph/recipe-graph-connection.ts +++ b/studio/frontend/src/features/recipe-studio/utils/graph/recipe-graph-connection.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { type Connection, type Edge, addEdge } from "@xyflow/react"; import type { LayoutDirection, NodeConfig, SamplerConfig } from "../../types"; import { diff --git a/studio/frontend/src/features/recipe-studio/utils/graph/relations.ts b/studio/frontend/src/features/recipe-studio/utils/graph/relations.ts index a032cc65d8..a725166cfb 100644 --- a/studio/frontend/src/features/recipe-studio/utils/graph/relations.ts +++ b/studio/frontend/src/features/recipe-studio/utils/graph/relations.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { NodeConfig } from "../../types"; export function isSemanticRelation( diff --git a/studio/frontend/src/features/recipe-studio/utils/graph/runtime-visual-state.ts b/studio/frontend/src/features/recipe-studio/utils/graph/runtime-visual-state.ts index 4806892d27..b12f54cb89 100644 --- a/studio/frontend/src/features/recipe-studio/utils/graph/runtime-visual-state.ts +++ b/studio/frontend/src/features/recipe-studio/utils/graph/runtime-visual-state.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { Edge } from "@xyflow/react"; import type { RecipeExecutionBatch, diff --git a/studio/frontend/src/features/recipe-studio/utils/handle-layout.ts b/studio/frontend/src/features/recipe-studio/utils/handle-layout.ts index 467d62f5bf..eb15c301ac 100644 --- a/studio/frontend/src/features/recipe-studio/utils/handle-layout.ts +++ b/studio/frontend/src/features/recipe-studio/utils/handle-layout.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export const NODE_HANDLE_CLASS = "pointer-events-auto !size-2.5 !border-border/80 !bg-muted shadow-sm hover:!border-primary/70 hover:!bg-primary/20"; diff --git a/studio/frontend/src/features/recipe-studio/utils/handles.ts b/studio/frontend/src/features/recipe-studio/utils/handles.ts index 4e8b85e3ab..c0111416b8 100644 --- a/studio/frontend/src/features/recipe-studio/utils/handles.ts +++ b/studio/frontend/src/features/recipe-studio/utils/handles.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { Connection } from "@xyflow/react"; import type { LayoutDirection } from "../types"; diff --git a/studio/frontend/src/features/recipe-studio/utils/image-preview.ts b/studio/frontend/src/features/recipe-studio/utils/image-preview.ts index 0f13bc3411..c196f2b310 100644 --- a/studio/frontend/src/features/recipe-studio/utils/image-preview.ts +++ b/studio/frontend/src/features/recipe-studio/utils/image-preview.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export const MAX_IMAGE_PREVIEW_BYTES = 200 * 1024; type PreviewImagePayload = { diff --git a/studio/frontend/src/features/recipe-studio/utils/import/edges.ts b/studio/frontend/src/features/recipe-studio/utils/import/edges.ts index 127b2015bb..6534b30a5e 100644 --- a/studio/frontend/src/features/recipe-studio/utils/import/edges.ts +++ b/studio/frontend/src/features/recipe-studio/utils/import/edges.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { Edge } from "@xyflow/react"; import type { LayoutDirection, NodeConfig } from "../../types"; import { diff --git a/studio/frontend/src/features/recipe-studio/utils/import/helpers.ts b/studio/frontend/src/features/recipe-studio/utils/import/helpers.ts index e8d543df97..cd55ca162d 100644 --- a/studio/frontend/src/features/recipe-studio/utils/import/helpers.ts +++ b/studio/frontend/src/features/recipe-studio/utils/import/helpers.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { extractRefs as extractJinjaRefs } from "../refs"; export function isRecord(value: unknown): value is Record { diff --git a/studio/frontend/src/features/recipe-studio/utils/import/importer.ts b/studio/frontend/src/features/recipe-studio/utils/import/importer.ts index 41460fb7bf..fc17a8d0ea 100644 --- a/studio/frontend/src/features/recipe-studio/utils/import/importer.ts +++ b/studio/frontend/src/features/recipe-studio/utils/import/importer.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { LlmConfig, LlmMcpProviderConfig, diff --git a/studio/frontend/src/features/recipe-studio/utils/import/index.ts b/studio/frontend/src/features/recipe-studio/utils/import/index.ts index 09e5f76bc5..f550523adc 100644 --- a/studio/frontend/src/features/recipe-studio/utils/import/index.ts +++ b/studio/frontend/src/features/recipe-studio/utils/import/index.ts @@ -1,2 +1,5 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export { importRecipePayload } from "./importer"; export type { RecipeSnapshot, ImportResult } from "./types"; diff --git a/studio/frontend/src/features/recipe-studio/utils/import/parsers.ts b/studio/frontend/src/features/recipe-studio/utils/import/parsers.ts index 3b7d445011..5cf8284cc8 100644 --- a/studio/frontend/src/features/recipe-studio/utils/import/parsers.ts +++ b/studio/frontend/src/features/recipe-studio/utils/import/parsers.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { NodeConfig } from "../../types"; import { readString } from "./helpers"; import { parseExpression } from "./parsers/expression-parser"; diff --git a/studio/frontend/src/features/recipe-studio/utils/import/parsers/expression-parser.ts b/studio/frontend/src/features/recipe-studio/utils/import/parsers/expression-parser.ts index 03585a1f11..334394d3ab 100644 --- a/studio/frontend/src/features/recipe-studio/utils/import/parsers/expression-parser.ts +++ b/studio/frontend/src/features/recipe-studio/utils/import/parsers/expression-parser.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { ExpressionConfig, ExpressionDtype, diff --git a/studio/frontend/src/features/recipe-studio/utils/import/parsers/llm-parser.ts b/studio/frontend/src/features/recipe-studio/utils/import/parsers/llm-parser.ts index 28b3e5e87a..7c67f15518 100644 --- a/studio/frontend/src/features/recipe-studio/utils/import/parsers/llm-parser.ts +++ b/studio/frontend/src/features/recipe-studio/utils/import/parsers/llm-parser.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { LlmConfig, Score, diff --git a/studio/frontend/src/features/recipe-studio/utils/import/parsers/model-parser.ts b/studio/frontend/src/features/recipe-studio/utils/import/parsers/model-parser.ts index 5c7085a2de..47424a3d34 100644 --- a/studio/frontend/src/features/recipe-studio/utils/import/parsers/model-parser.ts +++ b/studio/frontend/src/features/recipe-studio/utils/import/parsers/model-parser.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { ModelConfig, ModelProviderConfig, diff --git a/studio/frontend/src/features/recipe-studio/utils/import/parsers/sampler-parser.ts b/studio/frontend/src/features/recipe-studio/utils/import/parsers/sampler-parser.ts index 067216af1a..eea64d847a 100644 --- a/studio/frontend/src/features/recipe-studio/utils/import/parsers/sampler-parser.ts +++ b/studio/frontend/src/features/recipe-studio/utils/import/parsers/sampler-parser.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { SamplerConfig, SamplerType, diff --git a/studio/frontend/src/features/recipe-studio/utils/import/parsers/seed-config-parser.ts b/studio/frontend/src/features/recipe-studio/utils/import/parsers/seed-config-parser.ts index e8035c30b4..6cf2d71ef9 100644 --- a/studio/frontend/src/features/recipe-studio/utils/import/parsers/seed-config-parser.ts +++ b/studio/frontend/src/features/recipe-studio/utils/import/parsers/seed-config-parser.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { SeedConfig, SeedSamplingStrategy, diff --git a/studio/frontend/src/features/recipe-studio/utils/import/parsers/validator-parser.ts b/studio/frontend/src/features/recipe-studio/utils/import/parsers/validator-parser.ts index 14d9d3116e..6e5362d9b9 100644 --- a/studio/frontend/src/features/recipe-studio/utils/import/parsers/validator-parser.ts +++ b/studio/frontend/src/features/recipe-studio/utils/import/parsers/validator-parser.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { ValidatorConfig } from "../../../types"; import { readNumberString } from "../helpers"; import { normalizeValidatorCodeLang } from "../../validators/code-lang"; diff --git a/studio/frontend/src/features/recipe-studio/utils/import/types.ts b/studio/frontend/src/features/recipe-studio/utils/import/types.ts index 281a4e1ad5..8e8b232360 100644 --- a/studio/frontend/src/features/recipe-studio/utils/import/types.ts +++ b/studio/frontend/src/features/recipe-studio/utils/import/types.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { Edge, XYPosition } from "@xyflow/react"; import type { LayoutDirection, diff --git a/studio/frontend/src/features/recipe-studio/utils/import/ui.ts b/studio/frontend/src/features/recipe-studio/utils/import/ui.ts index 76698fc8f2..43a073f701 100644 --- a/studio/frontend/src/features/recipe-studio/utils/import/ui.ts +++ b/studio/frontend/src/features/recipe-studio/utils/import/ui.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { RecipeNode, NodeConfig } from "../../types"; import { DEFAULT_NODE_WIDTH } from "../../constants"; import { nodeDataFromConfig } from "../index"; diff --git a/studio/frontend/src/features/recipe-studio/utils/index.ts b/studio/frontend/src/features/recipe-studio/utils/index.ts index a30db80f98..1cfb31d3b6 100644 --- a/studio/frontend/src/features/recipe-studio/utils/index.ts +++ b/studio/frontend/src/features/recipe-studio/utils/index.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export { makeExpressionConfig, makeLlmConfig, diff --git a/studio/frontend/src/features/recipe-studio/utils/layout.ts b/studio/frontend/src/features/recipe-studio/utils/layout.ts index 519637172d..a915c708fe 100644 --- a/studio/frontend/src/features/recipe-studio/utils/layout.ts +++ b/studio/frontend/src/features/recipe-studio/utils/layout.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import dagre from "@dagrejs/dagre"; import type { Edge, Node } from "@xyflow/react"; import { DEFAULT_NODE_HEIGHT, DEFAULT_NODE_WIDTH } from "../constants"; diff --git a/studio/frontend/src/features/recipe-studio/utils/naming.ts b/studio/frontend/src/features/recipe-studio/utils/naming.ts index 664ed62c08..657229766d 100644 --- a/studio/frontend/src/features/recipe-studio/utils/naming.ts +++ b/studio/frontend/src/features/recipe-studio/utils/naming.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { NodeConfig } from "../types"; export function nextName(existing: NodeConfig[], prefix: string): string { diff --git a/studio/frontend/src/features/recipe-studio/utils/node-data.ts b/studio/frontend/src/features/recipe-studio/utils/node-data.ts index 195a5f03bb..739d7ccf2b 100644 --- a/studio/frontend/src/features/recipe-studio/utils/node-data.ts +++ b/studio/frontend/src/features/recipe-studio/utils/node-data.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { RecipeNodeData, LayoutDirection, NodeConfig } from "../types"; import { labelForExpression, diff --git a/studio/frontend/src/features/recipe-studio/utils/parse.ts b/studio/frontend/src/features/recipe-studio/utils/parse.ts index ea422533db..64e27f6fad 100644 --- a/studio/frontend/src/features/recipe-studio/utils/parse.ts +++ b/studio/frontend/src/features/recipe-studio/utils/parse.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export function parseNumber(value?: string): number | null { if (!value) { return null; diff --git a/studio/frontend/src/features/recipe-studio/utils/payload/build-payload.ts b/studio/frontend/src/features/recipe-studio/utils/payload/build-payload.ts index 758fcd4986..5f6122b24b 100644 --- a/studio/frontend/src/features/recipe-studio/utils/payload/build-payload.ts +++ b/studio/frontend/src/features/recipe-studio/utils/payload/build-payload.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { Edge, XYPosition } from "@xyflow/react"; import type { LayoutDirection, diff --git a/studio/frontend/src/features/recipe-studio/utils/payload/builders-llm.ts b/studio/frontend/src/features/recipe-studio/utils/payload/builders-llm.ts index f805a046f7..af5c5d07ae 100644 --- a/studio/frontend/src/features/recipe-studio/utils/payload/builders-llm.ts +++ b/studio/frontend/src/features/recipe-studio/utils/payload/builders-llm.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { LlmConfig, LlmMcpProviderConfig, diff --git a/studio/frontend/src/features/recipe-studio/utils/payload/builders-model.ts b/studio/frontend/src/features/recipe-studio/utils/payload/builders-model.ts index 1d7f732122..e70e2224d5 100644 --- a/studio/frontend/src/features/recipe-studio/utils/payload/builders-model.ts +++ b/studio/frontend/src/features/recipe-studio/utils/payload/builders-model.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { ModelConfig, ModelProviderConfig } from "../../types"; import { parseJsonObject } from "./parse"; diff --git a/studio/frontend/src/features/recipe-studio/utils/payload/builders-processors.ts b/studio/frontend/src/features/recipe-studio/utils/payload/builders-processors.ts index e50f31db4f..a9e8453d3f 100644 --- a/studio/frontend/src/features/recipe-studio/utils/payload/builders-processors.ts +++ b/studio/frontend/src/features/recipe-studio/utils/payload/builders-processors.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { ExpressionConfig, RecipeProcessorConfig } from "../../types"; import { parseJsonObject } from "./parse"; diff --git a/studio/frontend/src/features/recipe-studio/utils/payload/builders-sampler.ts b/studio/frontend/src/features/recipe-studio/utils/payload/builders-sampler.ts index 59065861bd..66e163e688 100644 --- a/studio/frontend/src/features/recipe-studio/utils/payload/builders-sampler.ts +++ b/studio/frontend/src/features/recipe-studio/utils/payload/builders-sampler.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { CategoryConditionalParams, SamplerConfig } from "../../types"; import { isValidSex, parseAgeRange, parseNumber } from "./parse"; diff --git a/studio/frontend/src/features/recipe-studio/utils/payload/builders-seed.ts b/studio/frontend/src/features/recipe-studio/utils/payload/builders-seed.ts index 16c47e5b76..fdefc05e43 100644 --- a/studio/frontend/src/features/recipe-studio/utils/payload/builders-seed.ts +++ b/studio/frontend/src/features/recipe-studio/utils/payload/builders-seed.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { NodeConfig, SeedConfig } from "../../types"; const DEFAULT_CHUNK_SIZE = 1200; diff --git a/studio/frontend/src/features/recipe-studio/utils/payload/builders-validator.ts b/studio/frontend/src/features/recipe-studio/utils/payload/builders-validator.ts index ce6e8bf11b..78a7b1a8c0 100644 --- a/studio/frontend/src/features/recipe-studio/utils/payload/builders-validator.ts +++ b/studio/frontend/src/features/recipe-studio/utils/payload/builders-validator.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { NodeConfig, ValidatorConfig } from "../../types"; import { isValidatorCodeLang } from "../validators/code-lang"; diff --git a/studio/frontend/src/features/recipe-studio/utils/payload/builders.ts b/studio/frontend/src/features/recipe-studio/utils/payload/builders.ts index b963d6bc0b..99a8c72b0f 100644 --- a/studio/frontend/src/features/recipe-studio/utils/payload/builders.ts +++ b/studio/frontend/src/features/recipe-studio/utils/payload/builders.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export { buildLlmColumn, buildLlmMcpProvider, diff --git a/studio/frontend/src/features/recipe-studio/utils/payload/empty.ts b/studio/frontend/src/features/recipe-studio/utils/payload/empty.ts index d0ec917321..4f5986d03c 100644 --- a/studio/frontend/src/features/recipe-studio/utils/payload/empty.ts +++ b/studio/frontend/src/features/recipe-studio/utils/payload/empty.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { RecipePayload } from "./types"; export function createEmptyRecipePayload(): RecipePayload { diff --git a/studio/frontend/src/features/recipe-studio/utils/payload/index.ts b/studio/frontend/src/features/recipe-studio/utils/payload/index.ts index 11877e0820..549364e5c0 100644 --- a/studio/frontend/src/features/recipe-studio/utils/payload/index.ts +++ b/studio/frontend/src/features/recipe-studio/utils/payload/index.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export { buildRecipePayload } from "./build-payload"; export { createEmptyRecipePayload } from "./empty"; export type { RecipePayload, RecipePayloadResult } from "./types"; diff --git a/studio/frontend/src/features/recipe-studio/utils/payload/parse.ts b/studio/frontend/src/features/recipe-studio/utils/payload/parse.ts index 782683d4fb..c6318e54aa 100644 --- a/studio/frontend/src/features/recipe-studio/utils/payload/parse.ts +++ b/studio/frontend/src/features/recipe-studio/utils/payload/parse.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export { isValidSex, parseAgeRange, diff --git a/studio/frontend/src/features/recipe-studio/utils/payload/types.ts b/studio/frontend/src/features/recipe-studio/utils/payload/types.ts index 69db100d96..e35f36c59d 100644 --- a/studio/frontend/src/features/recipe-studio/utils/payload/types.ts +++ b/studio/frontend/src/features/recipe-studio/utils/payload/types.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export type RecipePayload = { recipe: { // biome-ignore lint/style/useNamingConvention: api schema diff --git a/studio/frontend/src/features/recipe-studio/utils/payload/validate.ts b/studio/frontend/src/features/recipe-studio/utils/payload/validate.ts index bb02c23f50..1537d7a75b 100644 --- a/studio/frontend/src/features/recipe-studio/utils/payload/validate.ts +++ b/studio/frontend/src/features/recipe-studio/utils/payload/validate.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { ModelConfig, ModelProviderConfig, diff --git a/studio/frontend/src/features/recipe-studio/utils/processors.ts b/studio/frontend/src/features/recipe-studio/utils/processors.ts index 4622ee9334..79ded782b7 100644 --- a/studio/frontend/src/features/recipe-studio/utils/processors.ts +++ b/studio/frontend/src/features/recipe-studio/utils/processors.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { RecipeProcessorConfig } from "../types"; export function buildDefaultSchemaTransform(): RecipeProcessorConfig { diff --git a/studio/frontend/src/features/recipe-studio/utils/reactflow-changes.ts b/studio/frontend/src/features/recipe-studio/utils/reactflow-changes.ts index fa3fff8ddf..03fc0773cd 100644 --- a/studio/frontend/src/features/recipe-studio/utils/reactflow-changes.ts +++ b/studio/frontend/src/features/recipe-studio/utils/reactflow-changes.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { Edge, EdgeChange, diff --git a/studio/frontend/src/features/recipe-studio/utils/recipe-studio-view.ts b/studio/frontend/src/features/recipe-studio/utils/recipe-studio-view.ts index d16175933e..85915376d0 100644 --- a/studio/frontend/src/features/recipe-studio/utils/recipe-studio-view.ts +++ b/studio/frontend/src/features/recipe-studio/utils/recipe-studio-view.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { NodeConfig, SamplerConfig } from "../types"; export type DialogOptions = { diff --git a/studio/frontend/src/features/recipe-studio/utils/refs.ts b/studio/frontend/src/features/recipe-studio/utils/refs.ts index 50c5e3d7f7..8270141108 100644 --- a/studio/frontend/src/features/recipe-studio/utils/refs.ts +++ b/studio/frontend/src/features/recipe-studio/utils/refs.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + const JINJA_REF_RE = /{{\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*}}/g; const JINJA_EXPR_RE = /{{\s*([^{}]+?)\s*}}/g; const SIMPLE_JINJA_EXPR_RE = /^[a-zA-Z_][a-zA-Z0-9_.]*$/; diff --git a/studio/frontend/src/features/recipe-studio/utils/rf-node-dimensions.ts b/studio/frontend/src/features/recipe-studio/utils/rf-node-dimensions.ts index 04881ab881..5301ddf6f4 100644 --- a/studio/frontend/src/features/recipe-studio/utils/rf-node-dimensions.ts +++ b/studio/frontend/src/features/recipe-studio/utils/rf-node-dimensions.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { Node } from "@xyflow/react"; function parseDim(value: unknown): number | null { diff --git a/studio/frontend/src/features/recipe-studio/utils/validation.ts b/studio/frontend/src/features/recipe-studio/utils/validation.ts index 7aa755971a..2d43bd137e 100644 --- a/studio/frontend/src/features/recipe-studio/utils/validation.ts +++ b/studio/frontend/src/features/recipe-studio/utils/validation.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { NodeConfig } from "../types"; import { isValidSex, parseAgeRange, parseIntNumber, parseNumber } from "./parse"; import { VALIDATOR_OXC_CODE_LANGS, VALIDATOR_SQL_CODE_LANGS } from "./validators/code-lang"; diff --git a/studio/frontend/src/features/recipe-studio/utils/validators/code-lang.ts b/studio/frontend/src/features/recipe-studio/utils/validators/code-lang.ts index 35aeb32388..21471c324d 100644 --- a/studio/frontend/src/features/recipe-studio/utils/validators/code-lang.ts +++ b/studio/frontend/src/features/recipe-studio/utils/validators/code-lang.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { ValidatorCodeLang } from "../../types"; export const VALIDATOR_OXC_CODE_LANGS: ValidatorCodeLang[] = [ diff --git a/studio/frontend/src/features/recipe-studio/utils/validators/oxc-code-shape.ts b/studio/frontend/src/features/recipe-studio/utils/validators/oxc-code-shape.ts index 3db49a5dc9..4772b239e4 100644 --- a/studio/frontend/src/features/recipe-studio/utils/validators/oxc-code-shape.ts +++ b/studio/frontend/src/features/recipe-studio/utils/validators/oxc-code-shape.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { OxcCodeShape } from "../../types"; export const OXC_CODE_SHAPES: OxcCodeShape[] = [ diff --git a/studio/frontend/src/features/recipe-studio/utils/validators/oxc-mode.ts b/studio/frontend/src/features/recipe-studio/utils/validators/oxc-mode.ts index 70b368b9d7..d22d815c99 100644 --- a/studio/frontend/src/features/recipe-studio/utils/validators/oxc-mode.ts +++ b/studio/frontend/src/features/recipe-studio/utils/validators/oxc-mode.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { OxcValidationMode } from "../../types"; export const OXC_VALIDATION_MODES: OxcValidationMode[] = [ diff --git a/studio/frontend/src/features/recipe-studio/utils/variables.ts b/studio/frontend/src/features/recipe-studio/utils/variables.ts index 7a34ad7006..f11f9d4059 100644 --- a/studio/frontend/src/features/recipe-studio/utils/variables.ts +++ b/studio/frontend/src/features/recipe-studio/utils/variables.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { NodeConfig } from "../types"; export type AvailableVariableSource = "column" | "seed"; diff --git a/studio/frontend/src/features/studio/index.ts b/studio/frontend/src/features/studio/index.ts index 19cb5780a7..608ad00764 100644 --- a/studio/frontend/src/features/studio/index.ts +++ b/studio/frontend/src/features/studio/index.ts @@ -1 +1,4 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export { StudioPage } from "./studio-page"; diff --git a/studio/frontend/src/features/studio/sections/charts-content.tsx b/studio/frontend/src/features/studio/sections/charts-content.tsx index 2af4a3b5e8..912474c064 100644 --- a/studio/frontend/src/features/studio/sections/charts-content.tsx +++ b/studio/frontend/src/features/studio/sections/charts-content.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { type ReactElement, useEffect, useMemo } from "react"; import { useShallow } from "zustand/react/shallow"; import { useChartPreferencesStore } from "./charts/chart-preferences-store"; diff --git a/studio/frontend/src/features/studio/sections/charts-section.tsx b/studio/frontend/src/features/studio/sections/charts-section.tsx index 7c2c248608..44cdb6a6e6 100644 --- a/studio/frontend/src/features/studio/sections/charts-section.tsx +++ b/studio/frontend/src/features/studio/sections/charts-section.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { useTrainingRuntimeStore } from "@/features/training"; import { type ReactElement, Suspense, lazy, useMemo } from "react"; diff --git a/studio/frontend/src/features/studio/sections/charts/chart-preferences-store.ts b/studio/frontend/src/features/studio/sections/charts/chart-preferences-store.ts index fe6a301532..e67d16a105 100644 --- a/studio/frontend/src/features/studio/sections/charts/chart-preferences-store.ts +++ b/studio/frontend/src/features/studio/sections/charts/chart-preferences-store.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { create } from "zustand"; import type { OutlierMode, ScaleMode } from "./types"; import { DEFAULT_VISIBLE_POINTS, clamp } from "./utils"; diff --git a/studio/frontend/src/features/studio/sections/charts/chart-settings-sheet.tsx b/studio/frontend/src/features/studio/sections/charts/chart-settings-sheet.tsx index f12e5f19cd..fe635f3df5 100644 --- a/studio/frontend/src/features/studio/sections/charts/chart-settings-sheet.tsx +++ b/studio/frontend/src/features/studio/sections/charts/chart-settings-sheet.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Button } from "@/components/ui/button"; import { Label } from "@/components/ui/label"; import { Separator } from "@/components/ui/separator"; diff --git a/studio/frontend/src/features/studio/sections/charts/eval-loss-chart-card.tsx b/studio/frontend/src/features/studio/sections/charts/eval-loss-chart-card.tsx index 2a1e837cf3..779d423149 100644 --- a/studio/frontend/src/features/studio/sections/charts/eval-loss-chart-card.tsx +++ b/studio/frontend/src/features/studio/sections/charts/eval-loss-chart-card.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { ChartContainer, diff --git a/studio/frontend/src/features/studio/sections/charts/grad-norm-chart-card.tsx b/studio/frontend/src/features/studio/sections/charts/grad-norm-chart-card.tsx index db9c987c40..c4c66e5ff7 100644 --- a/studio/frontend/src/features/studio/sections/charts/grad-norm-chart-card.tsx +++ b/studio/frontend/src/features/studio/sections/charts/grad-norm-chart-card.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { ChartContainer, diff --git a/studio/frontend/src/features/studio/sections/charts/learning-rate-chart-card.tsx b/studio/frontend/src/features/studio/sections/charts/learning-rate-chart-card.tsx index 0c46afb73c..8301cbf7a3 100644 --- a/studio/frontend/src/features/studio/sections/charts/learning-rate-chart-card.tsx +++ b/studio/frontend/src/features/studio/sections/charts/learning-rate-chart-card.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { ChartContainer, diff --git a/studio/frontend/src/features/studio/sections/charts/training-loss-chart-card.tsx b/studio/frontend/src/features/studio/sections/charts/training-loss-chart-card.tsx index 7004108e1d..20105601f1 100644 --- a/studio/frontend/src/features/studio/sections/charts/training-loss-chart-card.tsx +++ b/studio/frontend/src/features/studio/sections/charts/training-loss-chart-card.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { ChartContainer, diff --git a/studio/frontend/src/features/studio/sections/charts/types.ts b/studio/frontend/src/features/studio/sections/charts/types.ts index adec7ba5e3..e4b2941d1b 100644 --- a/studio/frontend/src/features/studio/sections/charts/types.ts +++ b/studio/frontend/src/features/studio/sections/charts/types.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export type ScaleMode = "linear" | "log"; export type OutlierMode = "none" | "p99" | "p95"; diff --git a/studio/frontend/src/features/studio/sections/charts/utils.ts b/studio/frontend/src/features/studio/sections/charts/utils.ts index 1d40b2f90d..89381f60dc 100644 --- a/studio/frontend/src/features/studio/sections/charts/utils.ts +++ b/studio/frontend/src/features/studio/sections/charts/utils.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { LossHistoryItem, OutlierMode, SmoothedLossItem } from "./types"; export const CHART_SYNC_ID = "train-metrics-sync"; diff --git a/studio/frontend/src/features/studio/sections/dataset-preview-dialog-mapping.tsx b/studio/frontend/src/features/studio/sections/dataset-preview-dialog-mapping.tsx index 70f0cf5231..10a49be7fe 100644 --- a/studio/frontend/src/features/studio/sections/dataset-preview-dialog-mapping.tsx +++ b/studio/frontend/src/features/studio/sections/dataset-preview-dialog-mapping.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { diff --git a/studio/frontend/src/features/studio/sections/dataset-preview-dialog-utils.ts b/studio/frontend/src/features/studio/sections/dataset-preview-dialog-utils.ts index 735a3abbff..954bc1e739 100644 --- a/studio/frontend/src/features/studio/sections/dataset-preview-dialog-utils.ts +++ b/studio/frontend/src/features/studio/sections/dataset-preview-dialog-utils.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + type PreviewImagePayload = { type: "image"; mime?: string; diff --git a/studio/frontend/src/features/studio/sections/dataset-preview-dialog.tsx b/studio/frontend/src/features/studio/sections/dataset-preview-dialog.tsx index a0133e9536..650d03cc14 100644 --- a/studio/frontend/src/features/studio/sections/dataset-preview-dialog.tsx +++ b/studio/frontend/src/features/studio/sections/dataset-preview-dialog.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { type ReactNode, useCallback, useEffect, useMemo, useRef, useState } from "react"; import type { ColumnDef } from "@tanstack/react-table"; import { diff --git a/studio/frontend/src/features/studio/sections/dataset-section.tsx b/studio/frontend/src/features/studio/sections/dataset-section.tsx index a72c21100a..e701e13b45 100644 --- a/studio/frontend/src/features/studio/sections/dataset-section.tsx +++ b/studio/frontend/src/features/studio/sections/dataset-section.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { SectionCard } from "@/components/section-card"; import { Button } from "@/components/ui/button"; import { diff --git a/studio/frontend/src/features/studio/sections/model-section.tsx b/studio/frontend/src/features/studio/sections/model-section.tsx index 015abc3106..13cabb0a77 100644 --- a/studio/frontend/src/features/studio/sections/model-section.tsx +++ b/studio/frontend/src/features/studio/sections/model-section.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { SectionCard } from "@/components/section-card"; import { Combobox, diff --git a/studio/frontend/src/features/studio/sections/params-section.tsx b/studio/frontend/src/features/studio/sections/params-section.tsx index 77680cfd82..51d4c56821 100644 --- a/studio/frontend/src/features/studio/sections/params-section.tsx +++ b/studio/frontend/src/features/studio/sections/params-section.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { SectionCard } from "@/components/section-card"; import { Checkbox } from "@/components/ui/checkbox"; import { diff --git a/studio/frontend/src/features/studio/sections/progress-section-lib.ts b/studio/frontend/src/features/studio/sections/progress-section-lib.ts index bff5daed81..eded598149 100644 --- a/studio/frontend/src/features/studio/sections/progress-section-lib.ts +++ b/studio/frontend/src/features/studio/sections/progress-section-lib.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { TrainingPhase } from "@/features/training"; export const phaseLabel: Record = { diff --git a/studio/frontend/src/features/studio/sections/progress-section.tsx b/studio/frontend/src/features/studio/sections/progress-section.tsx index 2125c95164..bc8858fb95 100644 --- a/studio/frontend/src/features/studio/sections/progress-section.tsx +++ b/studio/frontend/src/features/studio/sections/progress-section.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { SectionCard } from "@/components/section-card"; import { AlertDialog, diff --git a/studio/frontend/src/features/studio/sections/training-section.tsx b/studio/frontend/src/features/studio/sections/training-section.tsx index 43cc2f889e..9d359bd975 100644 --- a/studio/frontend/src/features/studio/sections/training-section.tsx +++ b/studio/frontend/src/features/studio/sections/training-section.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { SectionCard } from "@/components/section-card"; import { Button } from "@/components/ui/button"; import { ChartContainer } from "@/components/ui/chart"; diff --git a/studio/frontend/src/features/studio/studio-page.tsx b/studio/frontend/src/features/studio/studio-page.tsx index c5651290be..54cba515a7 100644 --- a/studio/frontend/src/features/studio/studio-page.tsx +++ b/studio/frontend/src/features/studio/studio-page.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Button } from "@/components/ui/button"; import { shouldShowTrainingView, diff --git a/studio/frontend/src/features/studio/tour/index.ts b/studio/frontend/src/features/studio/tour/index.ts index 249d21ada0..fe9d322da4 100644 --- a/studio/frontend/src/features/studio/tour/index.ts +++ b/studio/frontend/src/features/studio/tour/index.ts @@ -1,2 +1,5 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export { studioTourSteps } from "./steps"; export { studioTrainingTourSteps } from "./training"; diff --git a/studio/frontend/src/features/studio/tour/steps/base-model.tsx b/studio/frontend/src/features/studio/tour/steps/base-model.tsx index cf89aa9965..810ddf29b7 100644 --- a/studio/frontend/src/features/studio/tour/steps/base-model.tsx +++ b/studio/frontend/src/features/studio/tour/steps/base-model.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { ReadMore, type TourStep } from "@/features/tour"; export const studioBaseModelStep: TourStep = { diff --git a/studio/frontend/src/features/studio/tour/steps/dataset.tsx b/studio/frontend/src/features/studio/tour/steps/dataset.tsx index 4a418d626c..575d64b8ee 100644 --- a/studio/frontend/src/features/studio/tour/steps/dataset.tsx +++ b/studio/frontend/src/features/studio/tour/steps/dataset.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { ReadMore, type TourStep } from "@/features/tour"; export const studioDatasetStep: TourStep = { diff --git a/studio/frontend/src/features/studio/tour/steps/index.tsx b/studio/frontend/src/features/studio/tour/steps/index.tsx index a11907d085..69d8781801 100644 --- a/studio/frontend/src/features/studio/tour/steps/index.tsx +++ b/studio/frontend/src/features/studio/tour/steps/index.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { TourStep } from "@/features/tour"; import { studioBaseModelStep } from "./base-model"; import { studioDatasetStep } from "./dataset"; diff --git a/studio/frontend/src/features/studio/tour/steps/local-model.tsx b/studio/frontend/src/features/studio/tour/steps/local-model.tsx index bd8a389364..8da60cbcb0 100644 --- a/studio/frontend/src/features/studio/tour/steps/local-model.tsx +++ b/studio/frontend/src/features/studio/tour/steps/local-model.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { ReadMore, type TourStep } from "@/features/tour"; export const studioLocalModelStep: TourStep = { diff --git a/studio/frontend/src/features/studio/tour/steps/method.tsx b/studio/frontend/src/features/studio/tour/steps/method.tsx index 418ea51e48..14a623ee75 100644 --- a/studio/frontend/src/features/studio/tour/steps/method.tsx +++ b/studio/frontend/src/features/studio/tour/steps/method.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { ReadMore, type TourStep } from "@/features/tour"; export const studioMethodStep: TourStep = { diff --git a/studio/frontend/src/features/studio/tour/steps/nav.tsx b/studio/frontend/src/features/studio/tour/steps/nav.tsx index 9656f26cf1..f5b976d6c9 100644 --- a/studio/frontend/src/features/studio/tour/steps/nav.tsx +++ b/studio/frontend/src/features/studio/tour/steps/nav.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { TourStep } from "@/features/tour"; export const studioNavStep: TourStep = { diff --git a/studio/frontend/src/features/studio/tour/steps/params.tsx b/studio/frontend/src/features/studio/tour/steps/params.tsx index d39baac592..7e29d3c776 100644 --- a/studio/frontend/src/features/studio/tour/steps/params.tsx +++ b/studio/frontend/src/features/studio/tour/steps/params.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { ReadMore, type TourStep } from "@/features/tour"; export const studioParamsStep: TourStep = { diff --git a/studio/frontend/src/features/studio/tour/steps/save.tsx b/studio/frontend/src/features/studio/tour/steps/save.tsx index d93548fc3d..742c3b51df 100644 --- a/studio/frontend/src/features/studio/tour/steps/save.tsx +++ b/studio/frontend/src/features/studio/tour/steps/save.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { TourStep } from "@/features/tour"; export const studioSaveStep: TourStep = { diff --git a/studio/frontend/src/features/studio/tour/steps/start.tsx b/studio/frontend/src/features/studio/tour/steps/start.tsx index 768071df98..3e3e021e64 100644 --- a/studio/frontend/src/features/studio/tour/steps/start.tsx +++ b/studio/frontend/src/features/studio/tour/steps/start.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { TourStep } from "@/features/tour"; export const studioStartStep: TourStep = { diff --git a/studio/frontend/src/features/studio/tour/training/index.ts b/studio/frontend/src/features/studio/tour/training/index.ts index 5b81ac78e2..7342cd8879 100644 --- a/studio/frontend/src/features/studio/tour/training/index.ts +++ b/studio/frontend/src/features/studio/tour/training/index.ts @@ -1,2 +1,5 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export { studioTrainingTourSteps } from "./steps"; diff --git a/studio/frontend/src/features/studio/tour/training/steps.tsx b/studio/frontend/src/features/studio/tour/training/steps.tsx index 2cd812ad8b..c5a3a3bd21 100644 --- a/studio/frontend/src/features/studio/tour/training/steps.tsx +++ b/studio/frontend/src/features/studio/tour/training/steps.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { TourStep } from "@/features/tour"; export const studioTrainingTourSteps: TourStep[] = [ diff --git a/studio/frontend/src/features/studio/training-start-overlay.tsx b/studio/frontend/src/features/studio/training-start-overlay.tsx index 7d38943c06..e2d660343a 100644 --- a/studio/frontend/src/features/studio/training-start-overlay.tsx +++ b/studio/frontend/src/features/studio/training-start-overlay.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { AlertDialog, AlertDialogAction, diff --git a/studio/frontend/src/features/studio/training-view.tsx b/studio/frontend/src/features/studio/training-view.tsx index 368d0b6ed0..219ab97ec7 100644 --- a/studio/frontend/src/features/studio/training-view.tsx +++ b/studio/frontend/src/features/studio/training-view.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { cn } from "@/lib/utils"; import { useTrainingRuntimeStore } from "@/features/training"; import type { ReactElement } from "react"; diff --git a/studio/frontend/src/features/tour/components/guided-tour.tsx b/studio/frontend/src/features/tour/components/guided-tour.tsx index 0a950814a7..6cd2970fa5 100644 --- a/studio/frontend/src/features/tour/components/guided-tour.tsx +++ b/studio/frontend/src/features/tour/components/guided-tour.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { Button } from "@/components/ui/button"; import { cn } from "@/lib/utils"; import { HugeiconsIcon } from "@hugeicons/react"; diff --git a/studio/frontend/src/features/tour/components/read-more.tsx b/studio/frontend/src/features/tour/components/read-more.tsx index 42c40f26f7..6b66bec863 100644 --- a/studio/frontend/src/features/tour/components/read-more.tsx +++ b/studio/frontend/src/features/tour/components/read-more.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export function ReadMore({ href = "#" }: { href?: string }) { return ( (value: T, delayMs = 300): T { diff --git a/studio/frontend/src/hooks/use-gpu-info.ts b/studio/frontend/src/hooks/use-gpu-info.ts index 98ca056050..250703a5f0 100644 --- a/studio/frontend/src/hooks/use-gpu-info.ts +++ b/studio/frontend/src/hooks/use-gpu-info.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { useEffect, useState } from "react"; export interface GpuInfo { diff --git a/studio/frontend/src/hooks/use-gpu-utilization.ts b/studio/frontend/src/hooks/use-gpu-utilization.ts index 785104489b..4b55dc1e3f 100644 --- a/studio/frontend/src/hooks/use-gpu-utilization.ts +++ b/studio/frontend/src/hooks/use-gpu-utilization.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { authFetch } from "@/features/auth"; import { useEffect, useRef, useState } from "react"; diff --git a/studio/frontend/src/hooks/use-hardware-info.ts b/studio/frontend/src/hooks/use-hardware-info.ts index 150e03ad08..017a99b70c 100644 --- a/studio/frontend/src/hooks/use-hardware-info.ts +++ b/studio/frontend/src/hooks/use-hardware-info.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { authFetch } from "@/features/auth"; import { useEffect, useState } from "react"; diff --git a/studio/frontend/src/hooks/use-hf-dataset-search.ts b/studio/frontend/src/hooks/use-hf-dataset-search.ts index f051ec1a68..e5c821bb5c 100644 --- a/studio/frontend/src/hooks/use-hf-dataset-search.ts +++ b/studio/frontend/src/hooks/use-hf-dataset-search.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { listDatasets } from "@huggingface/hub"; import { useCallback, useMemo } from "react"; import type { ModelType } from "@/types/training"; diff --git a/studio/frontend/src/hooks/use-hf-dataset-splits.ts b/studio/frontend/src/hooks/use-hf-dataset-splits.ts index 3f5f5c36ac..a3d4ee295d 100644 --- a/studio/frontend/src/hooks/use-hf-dataset-splits.ts +++ b/studio/frontend/src/hooks/use-hf-dataset-splits.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { useCallback, useEffect, useState } from "react"; // --------------------------------------------------------------------------- diff --git a/studio/frontend/src/hooks/use-hf-model-search.ts b/studio/frontend/src/hooks/use-hf-model-search.ts index dd5f9cf8a7..5f603a71e8 100644 --- a/studio/frontend/src/hooks/use-hf-model-search.ts +++ b/studio/frontend/src/hooks/use-hf-model-search.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import type { PipelineType } from "@huggingface/hub"; import { listModels } from "@huggingface/hub"; import { useCallback, useMemo } from "react"; diff --git a/studio/frontend/src/hooks/use-hf-paginated-search.ts b/studio/frontend/src/hooks/use-hf-paginated-search.ts index f78f560dd6..2060d4d996 100644 --- a/studio/frontend/src/hooks/use-hf-paginated-search.ts +++ b/studio/frontend/src/hooks/use-hf-paginated-search.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { useCallback, useEffect, useRef, useState } from "react"; interface HfPaginatedState { diff --git a/studio/frontend/src/hooks/use-hf-token-validation.ts b/studio/frontend/src/hooks/use-hf-token-validation.ts index 1882745eca..24cd49b8d6 100644 --- a/studio/frontend/src/hooks/use-hf-token-validation.ts +++ b/studio/frontend/src/hooks/use-hf-token-validation.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { whoAmI } from "@huggingface/hub"; import { useCallback, useEffect, useRef, useState } from "react"; import { useDebouncedValue } from "./use-debounced-value"; diff --git a/studio/frontend/src/hooks/use-infinite-scroll.ts b/studio/frontend/src/hooks/use-infinite-scroll.ts index 5c7a7f1cf0..296e4df3a3 100644 --- a/studio/frontend/src/hooks/use-infinite-scroll.ts +++ b/studio/frontend/src/hooks/use-infinite-scroll.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { useEffect, useRef } from "react"; export function useInfiniteScroll(fetchMore: () => void, _itemCount: number) { diff --git a/studio/frontend/src/hooks/use-mobile.ts b/studio/frontend/src/hooks/use-mobile.ts index 6c79753ee8..84a05f3650 100644 --- a/studio/frontend/src/hooks/use-mobile.ts +++ b/studio/frontend/src/hooks/use-mobile.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { useEffect, useState } from "react"; const MOBILE_BREAKPOINT = 768; diff --git a/studio/frontend/src/hooks/use-recommended-model-vram.ts b/studio/frontend/src/hooks/use-recommended-model-vram.ts index 69692ff416..2ba9731c99 100644 --- a/studio/frontend/src/hooks/use-recommended-model-vram.ts +++ b/studio/frontend/src/hooks/use-recommended-model-vram.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { modelInfo } from "@huggingface/hub"; import { useEffect, useState } from "react"; diff --git a/studio/frontend/src/index.css b/studio/frontend/src/index.css index f3f45f407f..419883ebf6 100644 --- a/studio/frontend/src/index.css +++ b/studio/frontend/src/index.css @@ -1,3 +1,6 @@ +/* SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 */ +/* Copyright © 2025 Unsloth AI */ + @import "tailwindcss"; @import "tw-animate-css"; @import "shadcn/tailwind.css"; diff --git a/studio/frontend/src/lib/audio-utils.ts b/studio/frontend/src/lib/audio-utils.ts index 5adde372f2..7101a3c245 100644 --- a/studio/frontend/src/lib/audio-utils.ts +++ b/studio/frontend/src/lib/audio-utils.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export const AUDIO_ACCEPT = "audio/wav,audio/mpeg,audio/webm,audio/ogg,audio/flac,audio/mp4"; export const MAX_AUDIO_SIZE = 50 * 1024 * 1024; diff --git a/studio/frontend/src/lib/copy-to-clipboard.ts b/studio/frontend/src/lib/copy-to-clipboard.ts index 3ef3df1177..45ab1fece4 100644 --- a/studio/frontend/src/lib/copy-to-clipboard.ts +++ b/studio/frontend/src/lib/copy-to-clipboard.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + /** * Copy text to clipboard in a way that works on Mac/Safari. * Uses a synchronous textarea + execCommand fallback so the copy runs in the diff --git a/studio/frontend/src/lib/utils.ts b/studio/frontend/src/lib/utils.ts index 74c6227f81..c925d22b60 100644 --- a/studio/frontend/src/lib/utils.ts +++ b/studio/frontend/src/lib/utils.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { type ClassValue, clsx } from "clsx"; import { twMerge } from "tailwind-merge"; diff --git a/studio/frontend/src/lib/vram.ts b/studio/frontend/src/lib/vram.ts index 8152104ee2..e02ee875ef 100644 --- a/studio/frontend/src/lib/vram.ts +++ b/studio/frontend/src/lib/vram.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + /** * VRAM estimation for model loading (4-bit quantization via bitsandbytes). * diff --git a/studio/frontend/src/main.tsx b/studio/frontend/src/main.tsx index 4358241c94..a04585cd6c 100644 --- a/studio/frontend/src/main.tsx +++ b/studio/frontend/src/main.tsx @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; diff --git a/studio/frontend/src/shared/toast.ts b/studio/frontend/src/shared/toast.ts index f3cfa08a9d..6e459de28d 100644 --- a/studio/frontend/src/shared/toast.ts +++ b/studio/frontend/src/shared/toast.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { toast } from "sonner"; export function toastSuccess(message: string): void { diff --git a/studio/frontend/src/speech-recognition.d.ts b/studio/frontend/src/speech-recognition.d.ts index c583b200a6..e70f9c160f 100644 --- a/studio/frontend/src/speech-recognition.d.ts +++ b/studio/frontend/src/speech-recognition.d.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + /** * Minimal Web Speech API (Speech Recognition) types for browsers that support it. * Full types: @types/dom-speech-recognition diff --git a/studio/frontend/src/stores/index.ts b/studio/frontend/src/stores/index.ts index 700bc2e935..91b0dc175e 100644 --- a/studio/frontend/src/stores/index.ts +++ b/studio/frontend/src/stores/index.ts @@ -1,2 +1,5 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + // Global stores export {}; diff --git a/studio/frontend/src/stores/training.ts b/studio/frontend/src/stores/training.ts index d3bd63d648..64dd1cce9a 100644 --- a/studio/frontend/src/stores/training.ts +++ b/studio/frontend/src/stores/training.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + import { useTrainingConfigStore } from "@/features/training"; export const useWizardStore = useTrainingConfigStore; diff --git a/studio/frontend/src/types/index.ts b/studio/frontend/src/types/index.ts index e668ba7d64..80459afba7 100644 --- a/studio/frontend/src/types/index.ts +++ b/studio/frontend/src/types/index.ts @@ -1,2 +1,5 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + // Shared types export type {}; diff --git a/studio/frontend/src/types/training.ts b/studio/frontend/src/types/training.ts index 18c3bbe407..690929b9a3 100644 --- a/studio/frontend/src/types/training.ts +++ b/studio/frontend/src/types/training.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export type ModelType = "vision" | "tts" | "embeddings" | "text"; export type TrainingMethod = "qlora" | "lora" | "full"; diff --git a/studio/frontend/src/utils/index.ts b/studio/frontend/src/utils/index.ts index f2bd368099..22221d3c60 100644 --- a/studio/frontend/src/utils/index.ts +++ b/studio/frontend/src/utils/index.ts @@ -1,2 +1,5 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + // Utility functions export { normalizeNonEmptyName } from "./strings"; diff --git a/studio/frontend/src/utils/strings.ts b/studio/frontend/src/utils/strings.ts index a9f1bc5797..de5eba119a 100644 --- a/studio/frontend/src/utils/strings.ts +++ b/studio/frontend/src/utils/strings.ts @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +// Copyright © 2025 Unsloth AI + export function normalizeNonEmptyName( value: string, fallback = "Unnamed", diff --git a/studio/tests/test_openai_completions.py b/studio/tests/test_openai_completions.py index 31bbc6d51e..71cb062bd7 100644 --- a/studio/tests/test_openai_completions.py +++ b/studio/tests/test_openai_completions.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Tests for the OpenAI-compatible /chat/completions endpoint. diff --git a/studio/tests/test_remote_lora_detection.py b/studio/tests/test_remote_lora_detection.py index 870758e76e..c0ada86e0a 100644 --- a/studio/tests/test_remote_lora_detection.py +++ b/studio/tests/test_remote_lora_detection.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Test remote LoRA adapter detection via HuggingFace Hub API. diff --git a/studio/tests/test_sse_progress.py b/studio/tests/test_sse_progress.py index d2c007d99e..c6a3ae6a07 100644 --- a/studio/tests/test_sse_progress.py +++ b/studio/tests/test_sse_progress.py @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: AGPL-3.0-only - See /studio/LICENSE.AGPL-3.0 +# Copyright © 2025 Unsloth AI + """ Tests for the SSE training progress endpoint and status fallback.