fix(ki): gpt-6 und spaetere Modelle als Reasoning-Modelle erkennen

isReasoningModel() kannte nur gpt-5. gpt-6-luna bekam deshalb
temperature 0.1 und OpenAI lehnte jeden Aufruf mit 400 ab ("Only the
default (1) value is supported"). Jetzt zaehlt jede Generation ab 5.
Vergleich gpt-4o-mini gegen gpt-6-luna in docs/14-ki.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Sascha Wolf
2026-09-24 09:45:34 +02:00
co-authored by Claude Opus 5.5
parent 1eb115bb7a
commit 2c50049238
3 changed files with 29 additions and 8 deletions
+7 -5
View File
@@ -52,7 +52,7 @@ export const AI_PURPOSES = {
* Auswahl, falls OpenAI die Modellliste nicht liefert (kein Schluessel,
* nicht erreichbar). Die aktuell eingestellten Modelle kommen immer dazu.
*/
const FALLBACK_MODELS = ['gpt-5.6-luna', 'gpt-5', 'gpt-5-mini', 'gpt-4.1', 'gpt-4.1-mini', 'gpt-4o', 'gpt-4o-mini'];
const FALLBACK_MODELS = ['gpt-6-luna', 'gpt-5.6-luna', 'gpt-5', 'gpt-5-mini', 'gpt-4.1', 'gpt-4.1-mini', 'gpt-4o', 'gpt-4o-mini'];
const settingKey = (purpose) => `ai_model_${purpose}`;
@@ -147,12 +147,14 @@ export function isValidModel(value) {
}
/**
* Reasoning-Modelle (o1, o3, o4-mini, gpt-5 ...) nehmen kein `temperature`,
* dafuer `reasoning_effort`. Wer in den Einstellungen umstellt, soll keinen
* 400er von OpenAI bekommen - die Aufrufer fragen deshalb hier nach.
* Reasoning-Modelle (o1, o3, o4-mini, gpt-5 ..., gpt-6 ...) nehmen kein
* `temperature`, dafuer `reasoning_effort`. Wer in den Einstellungen umstellt,
* soll keinen 400er von OpenAI bekommen - die Aufrufer fragen deshalb hier nach.
* Ab gpt-5 zaehlt jede Generation dazu: gpt-6-luna lehnte `temperature: 0.1`
* am 24.09.2026 mit "Only the default (1) value is supported" ab.
*/
export function isReasoningModel(model) {
return /^(o\d|gpt-5)/i.test(String(model ?? ''));
return /^(o\d|gpt-([5-9]|\d{2,}))/i.test(String(model ?? ''));
}
/** Eingestelltes Modell je Zweck, sonst die Vorgabe. */
+1 -1
View File
@@ -28,7 +28,7 @@ for (const name of ['', ' gpt-4o', 'gpt 4o', 'gpt-4o;drop', 'x'.repeat(101), nul
check(`ungueltig: ${JSON.stringify(name)?.slice(0, 20)}`, !isValidModel(name));
}
for (const name of ['o1', 'o3-mini', 'o4-mini', 'gpt-5', 'gpt-5.6-luna']) {
for (const name of ['o1', 'o3-mini', 'o4-mini', 'gpt-5', 'gpt-5.6-luna', 'gpt-6-luna', 'gpt-6-sol', 'gpt-10']) {
check(`reasoning: ${name}`, isReasoningModel(name));
}
for (const name of ['gpt-4o-mini', 'gpt-4.1', 'chatgpt-4o-latest']) {