Skip to content

Commit d2ad0ac

Browse files
committed
Merge branch 'develop' into 'fb-dia-2142/new-button-lso'
Workflow run: https://github.com/HumanSignal/label-studio/actions/runs/14906019023
2 parents 189e2e5 + f788c41 commit d2ad0ac

File tree

47 files changed

+795
-311
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+795
-311
lines changed

.github/ISSUE_TEMPLATE/config.yml

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
blank_issues_enabled: true
2+
contact_links:
3+
- name: Label Studio Slack Community
4+
url: https://slack.labelstud.io/?source=github-1
5+
about: Ask questions and discuss with other users
6+
- name: Label Studio Documentation
7+
url: https://labelstud.io/guide/
8+
about: Check out the official Label Studio documentation
9+
- name: Label Studio Website
10+
url: https://labelstud.io/
11+
about: Visit the Label Studio website for more information

.github/workflows/build_pypi.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ env:
6464
PYTHON_VERSION_FILE: "pyproject.toml"
6565
FRONTEND_MONOREPO_DIR: "web"
6666
NODE: "18"
67-
POETRY_VERSION: 2.1.2
67+
POETRY_VERSION: 2.1.3
6868

6969
jobs:
7070
pypi:
@@ -175,7 +175,7 @@ jobs:
175175
176176
- name: Check SDK version is not git sha
177177
if: inputs.release_type == 'release'
178-
run: grep 'label-studio-sdk\s*=\s*"[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"' pyproject.toml
178+
run: grep 'label-studio-sdk (==[0-9]\+\.[0-9]\+\.[0-9]\+)' pyproject.toml
179179

180180
- name: Check Build
181181
run: poetry run twine check dist/*

.github/workflows/docker-build.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ env:
2121
DOCKER_CLI_EXPERIMENTAL: enabled
2222
IMAGE_NAME: "${{ vars.DOCKERHUB_ORG }}/label-studio"
2323
DOCKER_IMAGE_TAG_CHECK_NAME: "Docker image tag"
24-
POETRY_VERSION: 2.1.2
24+
POETRY_VERSION: 2.1.3
2525

2626
jobs:
2727
docker_build_and_push:

.github/workflows/follow-merge-upstream-repo-sync-v2.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ concurrency:
1818
cancel-in-progress: true
1919

2020
env:
21-
POETRY_VERSION: 2.1.2
21+
POETRY_VERSION: 2.1.3
2222

2323
jobs:
2424
sync:

.github/workflows/test_conda.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ on:
99

1010
env:
1111
CACHE_NAME_PREFIX: v1
12-
POETRY_VERSION: 2.1.2
12+
POETRY_VERSION: 2.1.3
1313

1414
jobs:
1515
conda:

.github/workflows/test_migrations.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ env:
1616
LABEL_STUDIO_TEST_ENVIRONMENT: false
1717
SENTRY_RATE: 0
1818
JSON_LOG: 0
19-
POETRY_VERSION: 2.1.2
19+
POETRY_VERSION: 2.1.3
2020

2121
jobs:
2222
sqlite-migrations:

.github/workflows/tests.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ on:
1010
env:
1111
NODE: '18'
1212
CACHE_NAME_PREFIX: v1
13-
POETRY_VERSION: 2.1.2
13+
POETRY_VERSION: 2.1.3
1414

1515
jobs:
1616
run_pytest_sqlite:

.github/workflows/update_pip_dependency.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ concurrency:
99
group: ${{ github.workflow }}-${{ github.event.client_payload.branch_name || 'schedule' }}
1010

1111
env:
12-
POETRY_VERSION: 2.1.2
12+
POETRY_VERSION: 2.1.3
1313

1414
jobs:
1515
open:

.github/workflows/zendesk_issue_created.yml

+2-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ jobs:
2121
ISSUE_USER: ${{ github.event.issue.user.login }}
2222
ISSUE_URL: ${{ github.event.issue.html_url }}
2323
WORKFLOW_RUN_LINK: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
24+
REPO_NAME: ${{ github.event.repository.name }}
2425
run: |
2526
body=$(jq -n --arg body "$ISSUE_BODY" '{body: $body}' | jq .body)
2627
echo "$body"
@@ -32,7 +33,7 @@ jobs:
3233
--data-binary @- <<DATA
3334
{
3435
"ticket": {
35-
"subject": "Github_Issue: $ISSUE_TITLE",
36+
"subject": "Github_Issue - ${REPO_NAME}: ${ISSUE_TITLE:0:35}",
3637
"comment": {
3738
"body": "[GITHUB_ISSUE_DESCRIPTION]\n\n${body:1:-1}\n\nGITHUB ISSUE URL: ${ISSUE_URL}\nWORKFLOW RUN: ${WORKFLOW_RUN_LINK}"
3839
},

Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# syntax=docker/dockerfile:1
22
ARG NODE_VERSION=18
33
ARG PYTHON_VERSION=3.12
4-
ARG POETRY_VERSION=2.1.2
4+
ARG POETRY_VERSION=2.1.3
55
ARG VERSION_OVERRIDE
66
ARG BRANCH_OVERRIDE
77

docs/source/guide/helm_values.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ short: Available Helm values
44
tier: all
55
type: guide
66
order: 72
7-
order_enterprise: 72
7+
order_enterprise: 74
88
meta_title: Available Helm values for Label Studio Helm Chart
99
meta_description: For cases when you want to customize your Label Studio Kubernetes deployment, review these available Helm values that you can set in your Helm chart.
1010
section: "Install & Setup"

docs/source/guide/install_k8s_airgapped.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ short: Airgapped Server
44
tier: all
55
type: guide
66
order: 71
7-
order_enterprise: 71
7+
order_enterprise: 73
88
meta_title: Install Label Studio without public internet access
99
meta_description: Install Label Studio without public internet access to create machine learning and data science projects in an airgapped environment.
1010
section: "Install & Setup"

docs/source/guide/install_prompts.md

+167
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
---
2+
title: Install Prompts in an on-prem environment (optional)
3+
short: Install Prompts
4+
type: guide
5+
tier: enterprise
6+
order: 0
7+
order_enterprise: 71
8+
meta_title: Install Prompts
9+
meta_description: Install Prompts in a Label Studio Enterprise on-prem environment
10+
section: "Install & Setup"
11+
parent: "install_k8s"
12+
parent_enterprise: "install_enterprise_k8s"
13+
---
14+
15+
Installing Prompts in an on-prem environment requires installing Adala, our data labeling agent microservice.
16+
17+
You only need to complete these steps if you want to use Prompts. For more information, see our [Prompts overview](prompts_overview).
18+
19+
20+
## Prerequisites
21+
22+
- Kubernetes cluster **v1.24** or later
23+
- Helm **v3.8.0** or later
24+
- Docker CLI (for logging into Docker Hub)
25+
26+
## Resource requirements
27+
28+
Before installing, ensure your Kubernetes cluster can provide the following minimum resources for Adala:
29+
30+
| Resource | Requirement |
31+
| --- | --- |
32+
| CPU | 6 cores |
33+
| Memory | 12 GB |
34+
35+
## 1. Authenticate to Docker Hub and validate access
36+
37+
You will need your Docker Hub username and password. If you do not have them, [request access from the HumanSignal team](mailto:[email protected]).
38+
39+
Log in to DockerHub to access the private OCI repository:
40+
41+
```bash
42+
43+
docker login -u CUSTOMER_USERNAME
44+
```
45+
46+
When prompted, enter your Docker Hub password.
47+
48+
Then verify your credentials and access:
49+
50+
```bash
51+
helm pull oci://registry-1.docker.io/heartexlabs/adala
52+
```
53+
54+
Expected output:
55+
56+
```bash
57+
Pulled: registry-1.docker.io/heartexlabs/adala:X.X.X
58+
Digest: sha256:***************************************************
59+
```
60+
61+
## 2. Create a Kubernetes secret for image pulling
62+
63+
Create a Kubernetes secret to allow your cluster to pull private Adala images:
64+
65+
```bash
66+
kubectl create secret docker-registry heartex-pull-key \
67+
--docker-server=https://index.docker.io/v2/ \
68+
--docker-username=CUSTOMER_USERNAME \
69+
--docker-password=CUSTOMER_PASSWORD
70+
```
71+
72+
## 3. Prepare your custom values file
73+
74+
Create a file named `custom.values.yaml` with the following contents:
75+
76+
```yaml
77+
adala-app:
78+
deployment:
79+
image:
80+
tag: 20250428.151611-master-592e818
81+
pullSecrets:
82+
- heartex-pull-key
83+
adala-worker:
84+
deployment:
85+
image:
86+
tag: 20250428.151611-master-592e818
87+
pullSecrets:
88+
- heartex-pull-key
89+
```
90+
91+
!!! note
92+
Replace the `image.tag` with the appropriate version if necessary.
93+
94+
95+
## 4. Create a dedicated namespace for Adala
96+
97+
Create a dedicated namespace `prompt` for Adala:
98+
99+
```bash
100+
kubectl create namespace prompt
101+
```
102+
103+
## 5. Install the Adala Helm chart
104+
105+
Run the following command to install **Adala** using your custom values:
106+
107+
```bash
108+
helm install lse oci://registry-1.docker.io/heartexlabs/adala --values custom.values.yaml
109+
```
110+
111+
## 6. Validate that Adala is running
112+
113+
Check if all pods in the `prompt` namespace are in the **Running** or **Completed** state:
114+
115+
```bash
116+
kubectl get pods -n prompt
117+
```
118+
119+
You should see output where all pods have `STATUS` set to `Running`, for example:
120+
121+
```
122+
NAME READY STATUS RESTARTS AGE
123+
adala-adala-app-d4564ffd7-gtmhx 1/1 Running 0 100m
124+
adala-adala-kafka-controller-0 1/1 Running 0 110m
125+
adala-adala-kafka-controller-1 1/1 Running 0 111m
126+
adala-adala-kafka-controller-2 1/1 Running 0 113m
127+
adala-adala-redis-master-0 1/1 Running 0 125m
128+
adala-adala-worker-5d87f97f76-mq952 1/1 Running 0 111m
129+
130+
```
131+
132+
If any pod is not running, you can investigate further:
133+
134+
```bash
135+
136+
kubectl describe pod <pod-name> -n prompt
137+
```
138+
139+
or
140+
141+
```bash
142+
kubectl logs <pod-name> -n prompt
143+
```
144+
145+
## 7. Update the Label Studio `values.yaml` file
146+
147+
You will need to update the `global` section of your Label Studio Enterprise `values.yaml` file to include the following:
148+
149+
* Add the Adala endpoint, which will allow Label Studio to connect to Adala.
150+
* Add the Prompts feature flag, to enable Prompts visibility within Label Studio.
151+
152+
153+
```yaml
154+
global:
155+
extraEnvironmentVars:
156+
PROMPTER_ADALA_URL: http://adala-adala-app.prompt:8000
157+
featureFlags:
158+
fflag_feat_all_dia_835_prompter_workflow_long: true
159+
```
160+
161+
Note the following for `PROMPTER_ADALA_URL`:
162+
163+
- `prompt` is the namespace where Adala is installed.
164+
- `adala-adala-app` is the name of the Adala service automatically created by the Helm release.
165+
- Port `8000` is the default port where Adala listens.
166+
167+
After updating the values file, redeploy Label Studio to apply the changes.

docs/source/guide/prompts_overview.md

+4-1
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,13 @@ With Prompts, you can:
3838
| **Network access** | If you are using a firewall or restricting network access to your OpenAI models, you will need to allow the following IPs: <br>3.219.3.197 <br>34.237.73.3 <br>4.216.17.242 |
3939
| **Required permissions** | **Owners, Administrators, Managers** -- Can create Prompt models and update projects with auto-annotations. Managers can only apply models to projects in which they are already a member. <br><br>**Reviewers and Annotators** -- No access to the Prompts tool, but can see the predictions generated by the prompts from within the project (depending on your [project settings](project_settings_lse)). |
4040
| **ML backend support** | Prompts should not be used with a project that is connected to an ML backend, as this can affect how certain evaluation metrics are calculated. |
41-
| **Enterprise vs. Open Source** | Label Studio Enterprise (Cloud only)<br />Starter Cloud|
41+
| **Enterprise vs. Open Source** | Label Studio Enterprise <br />Starter Cloud|
4242

4343
</div>
4444

45+
!!! note
46+
For information on installing Prompts for on-prem environments, see [Install Prompts](install_prompts).
47+
4548
## Supported base models
4649

4750
<div class="noheader rowheader">

label_studio/core/feature_flags/stale_feature_flags.py

-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
'fflag_feature_all_optic_1421_cold_start_v2': False,
2929
'fflag_fix_back_optic_1407_optimize_tasks_api_pagination_counts': True,
3030
'fflag_fix_optic_1259_lse_projects_read_apis_use_replica_short': True,
31-
'fflag_feat_all_optic_1181_membership_performance': True,
3231
'fflag_feat_optic_1025_zendesk_widget_integration': False,
3332
'fflag_feat_all_optic_991_dashboard_v2_short': True,
3433
'fflag_feat_optic_378_limit_projects_per_page_to_ten_short': True,

label_studio/core/settings/base.py

+4
Original file line numberDiff line numberDiff line change
@@ -606,6 +606,10 @@
606606
DELETE_TASKS_ANNOTATIONS_POSTPROCESS = None
607607
FEATURE_FLAGS_GET_USER_REPR = 'core.feature_flags.utils.get_user_repr'
608608

609+
# Test factories
610+
PROJECT_FACTORY = 'projects.tests.factories.ProjectFactory'
611+
USER_FACTORY = 'users.tests.factories.UserFactory'
612+
609613

610614
def project_delete(project):
611615
project.delete()

0 commit comments

Comments
 (0)