diff --git a/api/_lib/researchAnalysis.ts b/api/_lib/researchAnalysis.ts index f2eca53..b4f6711 100644 --- a/api/_lib/researchAnalysis.ts +++ b/api/_lib/researchAnalysis.ts @@ -113,6 +113,24 @@ export const MODEL = process.env.LIVIA_RESEARCH_MODEL ?? 'claude-opus-5' */ const TEXT_LIMIT = Number(process.env.LIVIA_RESEARCH_TEXT_LIMIT ?? 2000) +/** + * Welche Modelle den `effort`-Schalter kennen. + * + * Nicht alle tun das: Haiku 4.5 weist die Anfrage mit «This model does not + * support the effort parameter» ab. Da das Modell über eine Umgebungsvariable + * frei wählbar ist, darf der Schalter nicht bedingungslos mitgeschickt werden — + * sonst macht eine Kostenoptimierung die Funktion kaputt, und zwar erst zur + * Laufzeit. + * + * Bewusst als Erlaubnisliste: Ein unbekanntes Modell läuft dann ohne den + * Schalter. Das kostet etwas mehr, funktioniert aber — die umgekehrte + * Voreinstellung würde raten und scheitern. + */ +const EFFORT_MODELS = /^claude-(fable|mythos|opus|sonnet)-/ +function supportsEffort(model: string): boolean { + return EFFORT_MODELS.test(model) +} + /** * Wie viele Teilstapel gleichzeitig beurteilt werden. * @@ -148,8 +166,9 @@ async function analyzeBatch( max_tokens: 8000, system: SYSTEM_PROMPT, // Einordnen ist bei fünf Einträgen eine Routineaufgabe — die niedrige Stufe - // spart Zeit und Kosten, ohne das Modell zu wechseln. - output_config: { effort: 'low' }, + // spart Zeit und Kosten. Nur die grossen Modelle kennen den Schalter; bei + // den kleineren wird die Anfrage sonst abgewiesen (siehe SUPPORTS_EFFORT). + ...(supportsEffort(MODEL) ? { output_config: { effort: 'low' as const } } : {}), messages: [{ role: 'user', content: eingabe }], })