This commit is contained in:
2026-08-10 16:20:59 +02:00
parent 005fd6ca51
commit bb19bbd30e
19 changed files with 2491 additions and 33 deletions
+15 -7
View File
@@ -11,6 +11,7 @@ import (
"errors"
"fmt"
"io"
"log"
"net/http"
"net/url"
"os"
@@ -78,7 +79,9 @@ func (w *Worker) Run(ctx context.Context) {
case <-ctx.Done():
return
case <-t.C:
_ = w.one(ctx)
if err := w.one(ctx); err != nil {
log.Printf("artifact worker: %v", err)
}
}
}
}
@@ -142,12 +145,12 @@ func (w *Worker) one(ctx context.Context) error {
img, err := w.generate(ctx, cfg, x, prompt, negativePrompt)
if err != nil {
w.fail(ctx, x.ID, err)
return err
return fmt.Errorf("task %s: %w", x.ID, err)
}
if len(img.Bytes) == 0 {
err := errors.New("image provider returned empty output")
w.fail(ctx, x.ID, err)
return err
return fmt.Errorf("task %s: %w", x.ID, err)
}
if img.Ext == "" {
img.Ext = "png"
@@ -202,7 +205,7 @@ func (w *Worker) one(ctx context.Context) error {
outDir := filepath.Join(w.dir, artifactID)
if err := os.MkdirAll(outDir, 0o750); err != nil {
w.fail(ctx, x.ID, err)
return err
return fmt.Errorf("task %s: %w", x.ID, err)
}
if preset == collectionPresetRaccoon {
rawName := "art." + strings.TrimPrefix(strings.ToLower(img.Ext), ".")
@@ -214,16 +217,21 @@ func (w *Worker) one(ctx context.Context) error {
imageName := "image." + finalExt
if err := atomicWrite(filepath.Join(outDir, imageName), finalBytes, 0o640); err != nil {
w.fail(ctx, x.ID, err)
return err
return fmt.Errorf("task %s: %w", x.ID, err)
}
if err := atomicWrite(filepath.Join(outDir, "manifest.json"), mb, 0o640); err != nil {
w.fail(ctx, x.ID, err)
return err
return fmt.Errorf("task %s: %w", x.ID, err)
}
imgURI := w.uri(filepath.ToSlash(filepath.Join(relDir, imageName)))
manURI := w.uri(filepath.ToSlash(filepath.Join(relDir, "manifest.json")))
_, err = w.db.ExecContext(ctx, `UPDATE tasks SET artifact_status='ready',artifact_uri=?,artifact_manifest_uri=?,artifact_error=NULL WHERE id=?`, imgURI, manURI, x.ID)
return err
if err != nil {
w.fail(ctx, x.ID, err)
return fmt.Errorf("task %s: finalize artifact: %w", x.ID, err)
}
log.Printf("artifact worker task %s ready: %s", x.ID, imgURI)
return nil
}
func joinPrompt(parts ...string) string {