Skip to content

Commit 2c1e6b7

Browse files
authored
Generate AI values correctly when the output field is Single Select a… (baserow#4600)
1 parent 346849b commit 2c1e6b7

File tree

3 files changed

+61
-3
lines changed

3 files changed

+61
-3
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"type": "bug",
3+
"message": "Fix Generate all AI values doesn't work when the output field is Single Select and Generate only values for empty cells is checked",
4+
"issue_origin": "github",
5+
"issue_number": 4596,
6+
"domain": "database",
7+
"bullet_points": [],
8+
"created_at": "2026-01-28"
9+
}

premium/backend/src/baserow_premium/fields/job_types.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -188,9 +188,14 @@ def _filter_empty_values(
188188
:return: The filtered queryset.
189189
"""
190190

191-
return queryset.filter(
192-
**{f"{ai_field.db_column}__isnull": True}
193-
) | queryset.filter(**{ai_field.db_column: ""})
191+
baserow_field_type = ai_field.get_type().get_baserow_field_type(ai_field)
192+
model_field = baserow_field_type.get_model_field(ai_field)
193+
q = ai_field.get_type().empty_query(
194+
ai_field.db_column,
195+
model_field,
196+
ai_field,
197+
)
198+
return queryset.filter(q)
194199

195200
def _get_field(self, field_id: int) -> AIField:
196201
"""

premium/backend/tests/baserow_premium_tests/fields/test_generate_ai_values_job_type.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
from baserow.contrib.database.fields.exceptions import FieldDoesNotExist
1313
from baserow.contrib.database.fields.handler import FieldHandler
14+
from baserow.contrib.database.fields.models import SelectOption
1415
from baserow.contrib.database.rows.exceptions import RowDoesNotExist
1516
from baserow.contrib.database.rows.handler import RowHandler
1617
from baserow.contrib.database.views.exceptions import ViewDoesNotExist
@@ -19,6 +20,7 @@
1920
from baserow.core.jobs.handler import JobHandler
2021
from baserow.core.storage import get_default_storage
2122
from baserow.core.user_files.handler import UserFileHandler
23+
from baserow_premium.fields.ai_field_output_types import ChoiceAIFieldOutputType
2224
from baserow_premium.fields.models import GenerateAIValuesJob
2325

2426

@@ -182,6 +184,48 @@ def test_create_job_with_only_empty_flag_table_mode(premium_data_fixture):
182184
assert job.mode == GenerateAIValuesJob.MODES.TABLE
183185

184186

187+
@pytest.mark.django_db
188+
@pytest.mark.field_ai
189+
def test_create_job_with_only_empty_choice_output_type(premium_data_fixture):
190+
"""Test job creation with only_empty=True and single select output."""
191+
192+
premium_data_fixture.register_fake_generate_ai_type()
193+
user = premium_data_fixture.create_user()
194+
database = premium_data_fixture.create_database_application(user=user)
195+
table = premium_data_fixture.create_database_table(database=database)
196+
field = premium_data_fixture.create_ai_field(
197+
table=table, ai_prompt="'test'", ai_output_type=ChoiceAIFieldOutputType.type
198+
)
199+
option_1 = SelectOption.objects.create(field=field, value="A", order=1)
200+
SelectOption.objects.create(field=field, value="B", order=2)
201+
model = table.get_model()
202+
203+
rows = (
204+
RowHandler()
205+
.create_rows(
206+
user, table, rows_values=[{f"field_{field.id}": option_1.value}, {}, {}]
207+
)
208+
.created_rows
209+
)
210+
row_ids = [row.id for row in rows]
211+
212+
job = JobHandler().create_and_start_job(
213+
user,
214+
"generate_ai_values",
215+
field_id=field.id,
216+
row_ids=row_ids,
217+
only_empty=True,
218+
sync=True,
219+
)
220+
221+
assert job.only_empty is True
222+
assert job.mode == GenerateAIValuesJob.MODES.ROWS
223+
224+
choice_values = model.objects.all().values_list(f"field_{field.id}", flat=True)
225+
assert choice_values[0] == option_1.id
226+
assert all(x is not None for x in choice_values), choice_values
227+
228+
185229
@pytest.mark.django_db
186230
@pytest.mark.field_ai
187231
def test_create_job_with_nonexistent_field(premium_data_fixture):

0 commit comments

Comments
 (0)