update
This commit is contained in:
@@ -77,13 +77,13 @@ export async function chatBaustein({ topic, baustein, section, section_kompakt =
|
||||
|
||||
export async function pruefeBaustein({
|
||||
topic, baustein, section, section_kompakt = '', provider,
|
||||
aktion = 'frage', frage = '', letzte_bewertung = '', vermeide = [],
|
||||
aktion = 'frage', frage = '', letzte_bewertung = '', vermeide = [], anzahl = 5,
|
||||
tier2 = false, tier3 = false, messages = [], gruendlich = false,
|
||||
}) {
|
||||
const res = await fetch(`${BASE}/bausteine/pruefung`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ topic, baustein, section, section_kompakt, aktion, frage, letzte_bewertung, vermeide, tier2, tier3, messages, provider, gruendlich }),
|
||||
body: JSON.stringify({ topic, baustein, section, section_kompakt, aktion, frage, letzte_bewertung, vermeide, anzahl, tier2, tier3, messages, provider, gruendlich }),
|
||||
})
|
||||
return jsonOrThrow(res)
|
||||
}
|
||||
|
||||
@@ -137,27 +137,24 @@ function vermeideListe() {
|
||||
return [...gestellt, ...pool.value]
|
||||
}
|
||||
|
||||
async function frageEinzeln() {
|
||||
const res = await pruefeBaustein({
|
||||
topic: props.topic, baustein: props.baustein, section: props.section, section_kompakt: props.sectionKompakt,
|
||||
provider: props.provider, aktion: 'frage', messages: pruefDialog(), vermeide: vermeideListe(),
|
||||
})
|
||||
return res.frage
|
||||
}
|
||||
|
||||
// Pool SEQUENZIELL auffüllen — je eine Generierung; jede neue sieht die vorigen
|
||||
// (Verlauf + Pool) in der Vermeide-Liste und divergiert. Verhindert ähnliche Dubletten.
|
||||
// Pool als BATCH auffüllen: EIN Planer entwirft die fehlenden Fragen auf einmal
|
||||
// (verschieden by design), parallel geprüft → schnell und ohne ähnliche Dubletten.
|
||||
function poolFuellen() {
|
||||
if (inflight.value > 0) return
|
||||
if (pool.value.length >= POOL_ZIEL || poolMiss >= 6) return
|
||||
const brauche = POOL_ZIEL - pool.value.length
|
||||
if (brauche <= 0 || poolMiss >= 3) return
|
||||
inflight.value++
|
||||
frageEinzeln()
|
||||
.then((text) => {
|
||||
if (text && !istBekannt(text)) { pool.value.push(text); poolMiss = 0 }
|
||||
pruefeBaustein({
|
||||
topic: props.topic, baustein: props.baustein, section: props.section, section_kompakt: props.sectionKompakt,
|
||||
provider: props.provider, aktion: 'fragen', anzahl: brauche, messages: pruefDialog(), vermeide: vermeideListe(),
|
||||
})
|
||||
.then((res) => {
|
||||
const neu = (res.fragen || []).filter((f) => f && !istBekannt(f))
|
||||
if (neu.length) { pool.value.push(...neu); poolMiss = 0 }
|
||||
else poolMiss++
|
||||
})
|
||||
.catch(() => { poolMiss++ })
|
||||
.finally(() => { inflight.value--; poolFuellen() })
|
||||
.finally(() => { inflight.value--; if (pool.value.length < POOL_ZIEL) poolFuellen() })
|
||||
}
|
||||
|
||||
// Eine Frage aus dem Pool nehmen; ist er leer, auf die erste eintreffende warten.
|
||||
@@ -165,7 +162,7 @@ async function poolNehmen() {
|
||||
if (!pool.value.length) {
|
||||
pruefLoading.value = true
|
||||
try {
|
||||
while (!pool.value.length && (inflight.value > 0 || poolMiss < 6)) {
|
||||
while (!pool.value.length && (inflight.value > 0 || poolMiss < 3)) {
|
||||
if (!inflight.value) poolFuellen()
|
||||
await new Promise((r) => setTimeout(r, 120))
|
||||
}
|
||||
@@ -299,6 +296,7 @@ onMounted(() => {
|
||||
if (props.mode !== 'full') return // Trigger-Modus (Liste): nur Tab-Leiste, keine Prüfungs-/Text-Logik
|
||||
window.addEventListener('keydown', onWindowKey)
|
||||
window.addEventListener('keydown', onPruefKey)
|
||||
poolFuellen() // Pool schon beim Öffnen vorfüllen — keine Wartezeit bei der ersten Frage
|
||||
})
|
||||
onUnmounted(() => {
|
||||
window.removeEventListener('keydown', onWindowKey)
|
||||
|
||||
Reference in New Issue
Block a user