admin: run AI generation as background jobs to avoid proxy timeouts #94
Closed
opened 2026-09-30 03:04:51 +00:00 by eleith
·
1 comment
No Branch/Tag Specified
main
feat/template-preparation
@luzzle/web.lsp@0.0.249
@luzzle/web.proxy@0.0.249
@luzzle/web.worker@0.0.249
@luzzle/web@0.0.249
@luzzle/lsp@0.0.249
@luzzle/core@0.0.249
@luzzle/cli@0.0.249
@luzzle/web.lsp@0.0.248
@luzzle/web.proxy@0.0.248
@luzzle/web.worker@0.0.248
@luzzle/web@0.0.248
@luzzle/lsp@0.0.248
@luzzle/cli@0.0.248
@luzzle/core@0.0.248
@luzzle/web.lsp@0.0.247
@luzzle/web.proxy@0.0.247
@luzzle/web.worker@0.0.247
@luzzle/web@0.0.247
@luzzle/lsp@0.0.247
@luzzle/cli@0.0.247
@luzzle/core@0.0.247
@luzzle/web.lsp@0.0.246
@luzzle/web.proxy@0.0.246
@luzzle/web.worker@0.0.246
@luzzle/web@0.0.246
@luzzle/lsp@0.0.246
@luzzle/cli@0.0.246
@luzzle/core@0.0.246
@luzzle/web.lsp@0.0.245
@luzzle/web.proxy@0.0.245
@luzzle/web.worker@0.0.245
@luzzle/web@0.0.245
@luzzle/lsp@0.0.245
@luzzle/cli@0.0.245
@luzzle/core@0.0.245
@luzzle/web.worker@0.0.244
@luzzle/web.proxy@0.0.244
@luzzle/web.lsp@0.0.244
@luzzle/web@0.0.244
@luzzle/lsp@0.0.244
@luzzle/core@0.0.244
@luzzle/cli@0.0.244
@luzzle/web.lsp@0.0.243
@luzzle/web.proxy@0.0.243
@luzzle/web.worker@0.0.243
@luzzle/web@0.0.243
@luzzle/lsp@0.0.243
@luzzle/cli@0.0.243
@luzzle/core@0.0.243
@luzzle/web.worker@0.0.242
@luzzle/web.proxy@0.0.242
@luzzle/web.lsp@0.0.242
@luzzle/web@0.0.242
@luzzle/lsp@0.0.242
@luzzle/core@0.0.242
@luzzle/cli@0.0.242
@luzzle/web@0.0.241
@luzzle/web.worker@0.0.241
@luzzle/web.proxy@0.0.241
@luzzle/web.lsp@0.0.241
@luzzle/lsp@0.0.241
@luzzle/core@0.0.241
@luzzle/cli@0.0.241
@luzzle/web@0.0.240
@luzzle/web.worker@0.0.240
@luzzle/web.proxy@0.0.240
@luzzle/web.lsp@0.0.240
@luzzle/lsp@0.0.240
@luzzle/core@0.0.240
@luzzle/cli@0.0.240
@luzzle/web@0.0.239
@luzzle/web.worker@0.0.239
@luzzle/web.proxy@0.0.239
@luzzle/web.lsp@0.0.239
@luzzle/lsp@0.0.239
@luzzle/core@0.0.239
@luzzle/cli@0.0.239
@luzzle/web@0.0.238
@luzzle/web.worker@0.0.238
@luzzle/web.proxy@0.0.238
@luzzle/web.lsp@0.0.238
@luzzle/lsp@0.0.238
@luzzle/core@0.0.238
@luzzle/cli@0.0.238
@luzzle/web@0.0.237
@luzzle/web.worker@0.0.237
@luzzle/lsp@0.0.237
@luzzle/core@0.0.237
@luzzle/cli@0.0.237
@luzzle/web@0.0.236
@luzzle/web.worker@0.0.236
@luzzle/lsp@0.0.236
@luzzle/core@0.0.236
@luzzle/cli@0.0.236
web.lsp/v0.0.9
web/v0.0.235
cli/v0.0.146
lsp/v0.0.2
web.worker/v0.0.21
core/v0.0.67
web/v0.0.234
web.worker/v0.0.20
web/v0.0.233
web.worker/v0.0.19
cli/v0.0.145
core/v0.0.66
web/v0.0.232
core/v0.0.65
web/v0.0.231
web/v0.0.230
web/v0.0.229
web.worker/v0.0.18
web/v0.0.228
web.worker/v0.0.17
web/v0.0.227
web.worker/v0.0.16
web/v0.0.226
cli/v0.0.144
core/v0.0.64
cli/v0.0.143
core/v0.0.63
web/v0.0.225
web/v0.0.224
web.worker/v0.0.15
web.proxy/v0.0.24
web.worker/v0.0.14
web/v0.0.223
web.lsp/v0.0.8
web.proxy/v0.0.23
web/v0.0.222
web.worker/v0.0.13
web.worker/v0.0.12
web.worker/v0.0.11
web/v0.0.221
web/v0.0.220
web.worker/v0.0.10
web.lsp/v0.0.7
web.worker/v0.0.8
web/v0.0.219
web/v0.0.218
web.worker/v0.0.7
web/v0.0.217
web/v0.0.216
web/v0.0.215
web/v0.0.214
web/v0.0.213
web.worker/v0.0.6
web.lsp/v0.0.6
web.proxy/v0.0.22
web/v0.0.212
web/v0.0.211
web.worker/v0.0.5
cli/v0.0.142
core/v0.0.62
web.worker/v0.0.4
cli/v0.0.141
core/v0.0.61
core/v0.0.60
web/v0.0.210
web.proxy/v0.0.21
web.tools/v0.0.129
web.config/v0.0.3
web.config/v0.0.2
web.proxy/v0.0.20
web/v0.0.209
web/v0.0.208
web.builder/v0.0.55
web.tools/v0.0.128
web.utils/v0.0.33
web/v0.0.207
web.builder/v0.0.54
web.tools/v0.0.127
cli/v0.0.139
cli/v0.0.140
core/v0.0.59
web.proxy/v0.0.19
web.builder/v0.0.53
web/v0.0.206
web.builder/v0.0.52
web.proxy/v0.0.18
web.lsp/v0.0.5
web/v0.0.205
web/v0.0.204
web.lsp/v0.0.4
web/v0.0.203
web.builder/v0.0.51
cli/v0.0.138
web.tools/v0.0.126
core/v0.0.58
web/v0.0.201
web/v0.0.200
web/v0.0.199
web.proxy/v0.0.17
web/v0.0.198
web/v0.0.197
web.builder/v0.0.49
web.tools/v0.0.125
cli/v0.0.137
core/v0.0.57
web/v0.0.196
web/v0.0.195
web.builder/v0.0.48
web.tools/v0.0.124
web/v0.0.194
web/v0.0.193
web/v0.0.192
web/v0.0.191
web.builder/v0.0.47
web.tools/v0.0.123
web/v0.0.190
web/v0.0.189
web/v0.0.188
web/v0.0.187
web/v0.0.186
web.proxy/v0.0.16
web/v0.0.185
web.proxy/v0.0.15
web.proxy/v0.0.14
web/v0.0.184
web/v0.0.183
web.builder/v0.0.46
web.tools/v0.0.122
core/v0.0.56
web/v0.0.182
web.builder/v0.0.45
web.tools/v0.0.121
core/v0.0.55
web.utils/v0.0.32
web/v0.0.181
web/v0.0.180
web.lsp/v0.0.3
web/v0.0.179
web.builder/v0.0.44
web.tools/v0.0.120
cli/v0.0.136
core/v0.0.54
web/v0.0.178
web.lsp/v0.0.2
web.proxy/v0.0.13
web/v0.0.177
web.builder/v0.0.43
web.tools/v0.0.119
web.tools/v0.0.118
core/v0.0.53
web/v0.0.176
web/v0.0.175
web/v0.0.174
web.builder/v0.0.42
web.tools/v0.0.117
core/v0.0.52
web/v0.0.173
web/v0.0.172
web/v0.0.171
lsp/v0.0.1
cli/v0.0.135
web.builder/v0.0.41
web/v0.0.170
web.tools/v0.0.116
web/v0.0.169
web.builder/v0.0.40
web.tools/v0.0.115
core/v0.0.51
web/v0.0.168
web.builder/v0.0.39
web.tools/v0.0.114
core/v0.0.50
web.tools/v0.0.113
web.utils/v0.0.31
web/v0.0.167
web.builder/v0.0.38
web.tools/v0.0.112
core/v0.0.49
web/v0.0.166
web.builder/v0.0.37
web.tools/v0.0.111
core/v0.0.48
web/v0.0.165
web.builder/v0.0.36
web.tools/v0.0.110
core/v0.0.47
web.builder/v0.0.35
web/v0.0.164
web.builder/v0.0.34
web.tools/v0.0.109
core/v0.0.46
web/v0.0.163
web.builder/v0.0.33
web.tools/v0.0.108
web/v0.0.162
web.builder/v0.0.32
web.tools/v0.0.107
web.utils/v0.0.30
core/v0.0.45
web/v0.0.161
web.builder/v0.0.31
web.tools/v0.0.106
web/v0.0.160
web/v0.0.159
web.builder/v0.0.30
web.tools/v0.0.105
web.utils/v0.0.29
web/v0.0.158
web.builder/v0.0.29
web.tools/v0.0.104
web.utils/v0.0.28
web.utils/v0.0.27
web/v0.0.157
web/v0.0.156
web.builder/v0.0.28
web.tools/v0.0.102
web/v0.0.155
web/v0.0.154
web.builder/v0.0.27
web.tools/v0.0.101
web.utils/v0.0.26
web/v0.0.153
web.builder/v0.0.26
web.tools/v0.0.100
web/v0.0.152
web/v0.0.151
web.builder/v0.0.25
web.tools/v0.0.99
web.tools/v0.0.98
web.utils/v0.0.25
web/v0.0.150
web.builder/v0.0.24
web.tools/v0.0.97
core/v0.0.44
cli/v0.0.133
core/v0.0.43
core/v0.0.42
web.proxy/v0.0.12
web.builder/v0.0.23
web.tools/v0.0.96
cli/v0.0.132
core/v0.0.41
cli/v0.0.131
web.builder/v0.0.22
web.tools/v0.0.95
core/v0.0.40
web.builder/v0.0.21
web.tools/v0.0.94
core/v0.0.39
web.tools/v0.0.93
core/v0.0.38
web/v0.0.149
web.builder/v0.0.19
web/v0.0.148
web.proxy/v0.0.11
web.proxy/v0.0.10
web/v0.0.147
web.builder/v0.0.18
web.tools/v0.0.92
web.utils/v0.0.24
web.tools/v0.0.91
web.utils/v0.0.23
web.builder/v0.0.16
web.proxy/v0.0.9
web/v0.0.146
web.proxy/v0.0.8
web.builder/v0.0.15
web.tools/v0.0.90
web.utils/v0.0.22
web.tools/v0.0.89
web.utils/v0.0.21
web.tools/v0.0.88
web.builder/v0.0.14
web.tools/v0.0.87
web.builder/v0.0.13
web.builder/v0.0.12
web.tools/v0.0.86
web.utils/v0.0.20
web/v0.0.145
web/v0.0.144
web/v0.0.143
web.cache/v0.0.5
web/v0.0.142
web/v0.0.141
web/v0.0.140
web/v0.0.139
web.builder/v0.0.11
web.tools/v0.0.85
web/v0.0.138
web.builder/v0.0.10
web.tools/v0.0.84
web/v0.0.137
web.builder/v0.0.9
web.builder/v0.0.8
web.builder/v0.0.7
web.cache/v0.0.4
web.builder/v0.0.6
web.cache/v0.0.3
web.builder/v0.0.5
web.cache/v0.0.2
web.builder/v0.0.4
web.cache/v0.0.1
web.builder/v0.0.3
web/v0.0.136
web.builder/v0.0.2
web/v0.0.135
web.tools/v0.0.83
web.utils/v0.0.19
web/v0.0.134
web.builder/v0.0.1
web.tools/v0.0.82
web.tools/v0.0.81
web/v0.0.133
web/v0.0.132
web/v0.0.131
web/v0.0.130
web/v0.0.129
web.tools/v0.0.80
web.utils/v0.0.18
web.tools/v0.0.79
web.utils/v0.0.17
web/v0.0.128
web.tools/v0.0.78
web.utils/v0.0.16
web/v0.0.127
web.tools/v0.0.77
cli/v0.0.130
core/v0.0.37
web/v0.0.126
web.tools/v0.0.76
web.utils/v0.0.15
web/v0.0.125
web/v0.0.124
web.tools/v0.0.75
web/v0.0.123
web/v0.0.122
web.tools/v0.0.74
cli/v0.0.129
core/v0.0.36
web/v0.0.121
web.tools/v0.0.73
cli/v0.0.128
core/v0.0.35
web/v0.0.120
web/v0.0.119
web.tools/v0.0.72
web.utils/v0.0.14
web/v0.0.118
web.tools/v0.0.71
web.utils/v0.0.13
core/v0.0.34
web.tools/v0.0.70
web.utils/v0.0.12
cli/v0.0.126
core/v0.0.33
web/v0.0.117
web.tools/v0.0.69
cli/v0.0.125
core/v0.0.32
web/v0.0.115
web.tools/v0.0.68
cli/v0.0.124
core/v0.0.31
core/v0.0.30
core/v0.0.29
web/v0.0.114
web.tools/v0.0.67
web/v0.0.113
web.tools/v0.0.66
cli/v0.0.123
core/v0.0.28
core/v0.0.27
web/v0.0.111
web.tools/v0.0.64
web.tools/v0.0.63
web/v0.0.110
web/v0.0.109
web/v0.0.108
web/v0.0.107
web/v0.0.105
web.tools/v0.0.62
web.tools/v0.0.61
web.utils/v0.0.11
core/v0.0.25
core/v0.0.24
web/v0.0.104
web.utils/v0.0.10
web/v0.0.103
web.tools/v0.0.59
web.utils/v0.0.9
web.utils/v0.0.8
web.tools/v0.0.58
web/v0.0.102
web.utils/v0.0.7
web.utils/v0.0.6
web.utils/v0.0.5
web.utils/v0.0.4
web.utils/v0.0.3
web.utils/v0.0.2
web.utils/v0.0.1
web/v0.0.101
tools/v0.0.57
web/v0.0.100
web/v0.0.99
tools/v0.0.56
tools/v0.0.55
web/v0.0.98
tools/v0.0.54
tools/v0.0.53
tools/v0.0.52
web/v0.0.96
tools/v0.0.51
cli/v0.0.121
core/v0.0.23
web/v0.0.94
tools/v0.0.50
web/v0.0.93
web/v0.0.92
tools/v0.0.49
web/v0.0.91
0.0.32
web/v0.0.89
0.0.31
0.0.30
0.0.29
0.0.28
0.0.27
0.0.26
0.0.25
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14
No labels
enhancement
Milestone
No items
No Milestone
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: eleith/luzzle#94
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Problem
Admin create & generate and generate for an existing piece run synchronously in one HTTP form request. Every reverse proxy in front of the app needs a long read timeout; an outer proxy left at its default can still return a 504 before Luzzle responds. Refreshing or disconnecting also loses the result of in-flight generation. #93 extends the inner proxy timeout and sets a bounded SDK request timeout, but does not remove this architectural limitation.
Desired behavior
Run generation in the background using the web stack's existing worker/job infrastructure. Return promptly with a job identifier, show pending/running/succeeded/failed status in the admin UI, and persist the result so the user can return after a refresh or disconnect. Show a useful failure reason and allow retry without duplicate piece creation. Keep generated metadata reviewable before the user saves it; a failed create-and-generate job must not create a piece (as in #77).
Acceptance direction
Related: #77 (generation error UX), #93 (bounded synchronous timeouts). This is a larger architectural enhancement, not part of the one-commit issue batch.
background jobs come with a lot more weight because data would be passed through storage (sqlite). what we actually wanted was streaming (SSE) so we can avoid nginx timeouts and having to manually specify timeout limits. this will be addressed by #95 #96 and #97