All checks were successful
Release / Test backend (push) Successful in 51s
Release / Check ui (push) Successful in 47s
Release / Docker / caddy (push) Successful in 44s
Release / Docker / backend (push) Successful in 3m0s
Release / Docker / runner (push) Successful in 2m38s
Release / Docker / ui (push) Successful in 2m16s
Release / Gitea Release (push) Successful in 36s
Split chapter-name LLM requests into 100-chapter batches and stream results back as SSE so large books (e.g. Shadow Slave: 2916 chapters) never time out or truncate. Frontend shows live batch progress inline and accumulates proposals as they arrive.
48 lines
1.3 KiB
TypeScript
48 lines
1.3 KiB
TypeScript
import type { PageServerLoad } from './$types';
|
|
import { backendFetch } from '$lib/server/scraper';
|
|
import { log } from '$lib/server/logger';
|
|
import { listBooks } from '$lib/server/pocketbase';
|
|
|
|
export interface ImageModelInfo {
|
|
id: string;
|
|
label: string;
|
|
provider: string;
|
|
supports_ref: boolean;
|
|
recommended_for: string[]; // "cover" | "chapter"
|
|
description: string;
|
|
}
|
|
|
|
export interface BookSummary {
|
|
slug: string;
|
|
title: string;
|
|
summary: string;
|
|
cover: string;
|
|
}
|
|
|
|
export const load: PageServerLoad = async () => {
|
|
// parent layout already guards admin role
|
|
const [modelsResult, books] = await Promise.allSettled([
|
|
(async () => {
|
|
const res = await backendFetch('/api/admin/image-gen/models');
|
|
if (!res.ok) throw new Error(`status ${res.status}`);
|
|
const data = await res.json();
|
|
return (data.models ?? []) as ImageModelInfo[];
|
|
})(),
|
|
listBooks()
|
|
]);
|
|
|
|
if (modelsResult.status === 'rejected') {
|
|
log.warn('admin/image-gen', 'failed to load models', { err: String(modelsResult.reason) });
|
|
}
|
|
|
|
return {
|
|
models: modelsResult.status === 'fulfilled' ? modelsResult.value : ([] as ImageModelInfo[]),
|
|
books: (books.status === 'fulfilled' ? books.value : []).map((b) => ({
|
|
slug: b.slug,
|
|
title: b.title,
|
|
summary: b.summary ?? '',
|
|
cover: b.cover ?? ''
|
|
})) as BookSummary[]
|
|
};
|
|
};
|