update
This commit is contained in:
@@ -504,7 +504,11 @@ async def generate_bausteine(topic: str, instructions: str = "", provider: str =
|
|||||||
# --- Guide-Generierung: Bausteine → (Plan) → Writer → JSON ---
|
# --- Guide-Generierung: Bausteine → (Plan) → Writer → JSON ---
|
||||||
|
|
||||||
# Parallele Writer pro Format (OnePager hat einen eigenen Weg).
|
# Parallele Writer pro Format (OnePager hat einen eigenen Weg).
|
||||||
WRITER_COUNT = {"MiniGuide": 1, "Guide": 2, "FullGuide": 4}
|
# Writer skalieren mit der Section-Zahl: 1 Writer je ~30 Sections (gedeckelt).
|
||||||
|
# Kleine Pakete vermeiden Lazy-Output bei langen Listen und begrenzen den Schaden
|
||||||
|
# eines fehlgeschlagenen Writers.
|
||||||
|
WRITER_SECTIONS = 30
|
||||||
|
WRITER_MAX = 10
|
||||||
|
|
||||||
|
|
||||||
def _resolve_gliederung(data, entries: dict[int, str], soll: int) -> list[dict] | None:
|
def _resolve_gliederung(data, entries: dict[int, str], soll: int) -> list[dict] | None:
|
||||||
@@ -743,7 +747,8 @@ async def _generate_sections(
|
|||||||
await _fail(guide_id, "Gliederung fehlgeschlagen")
|
await _fail(guide_id, "Gliederung fehlgeschlagen")
|
||||||
return None
|
return None
|
||||||
plan = res[0]
|
plan = res[0]
|
||||||
chunks = _split_chunks(plan, WRITER_COUNT[format_name])
|
total_sections = sum(len(c["nums"]) for c in plan)
|
||||||
|
chunks = _split_chunks(plan, min(WRITER_MAX, max(1, math.ceil(total_sections / WRITER_SECTIONS))))
|
||||||
zuteilungen = [_zuteilung_text(chunk, entries) for chunk in chunks]
|
zuteilungen = [_zuteilung_text(chunk, entries) for chunk in chunks]
|
||||||
chunk_sizes = [sum(len(c["nums"]) for c in chunk) for chunk in chunks]
|
chunk_sizes = [sum(len(c["nums"]) for c in chunk) for chunk in chunks]
|
||||||
|
|
||||||
|
|||||||
@@ -254,6 +254,9 @@ async function send() {
|
|||||||
<style scoped>
|
<style scoped>
|
||||||
.detail {
|
.detail {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
/* Flex-Item darf schmaler werden als seine Code-Blöcke — sonst sprengt
|
||||||
|
deren Mindestbreite auf Mobile das Layout */
|
||||||
|
min-width: 0;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
@@ -261,6 +264,8 @@ async function send() {
|
|||||||
.guide-scroll {
|
.guide-scroll {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
|
/* Kein horizontales Pannen der ganzen Seite — Code-Blöcke scrollen intern */
|
||||||
|
overflow-x: hidden;
|
||||||
background: var(--bg-preview);
|
background: var(--bg-preview);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -270,6 +275,12 @@ async function send() {
|
|||||||
padding: 2rem 2.5rem 5rem;
|
padding: 2rem 2.5rem 5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media (max-width: 600px) {
|
||||||
|
.guide-content {
|
||||||
|
padding: 1.25rem 0.9rem 4rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.guide-head {
|
.guide-head {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: baseline;
|
align-items: baseline;
|
||||||
@@ -398,6 +409,8 @@ async function send() {
|
|||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
font-family: "SF Mono", Consolas, monospace;
|
font-family: "SF Mono", Consolas, monospace;
|
||||||
font-size: 0.85em;
|
font-size: 0.85em;
|
||||||
|
/* Lange Bezeichner (Namespaces, Pfade) dürfen umbrechen statt zu überlaufen */
|
||||||
|
overflow-wrap: anywhere;
|
||||||
}
|
}
|
||||||
|
|
||||||
.markdown :deep(pre) {
|
.markdown :deep(pre) {
|
||||||
|
|||||||
Reference in New Issue
Block a user