KI: Vorgabemodell auf gpt-6-luna umgestellt

gpt-6-luna kostet rund 50 % weniger als gpt-5.6-luna. Das Modell in
icon_settings (Einstellungen -> KI) hat weiter Vorrang vor der Vorgabe.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
schakal00783
2026-09-29 10:10:41 +02:00
co-authored by Claude Opus 5.5
parent 4adf48f336
commit 6fe5b18c11
6 changed files with 524 additions and 524 deletions
+3 -3
View File
@@ -1,6 +1,6 @@
# 05 KI # 05 KI
Modell: **`gpt-5.6-luna`** (OpenAI), angesprochen über `chat/completions`. Der Modell: **`gpt-6-luna`** (OpenAI, seit 29.09.2026; vorher `gpt-5.6-luna`, rund 50 % teurer), angesprochen über `chat/completions`. Der
Browser spricht nie direkt mit OpenAI, jede Anfrage läuft über das Backend Browser spricht nie direkt mit OpenAI, jede Anfrage läuft über das Backend
(`server/src/ai.js`). Schlüssel und Modell werden unter *Einstellungen → KI* (`server/src/ai.js`). Schlüssel und Modell werden unter *Einstellungen → KI*
gepflegt und liegen in `icon_settings`; `server/.env` (chmod 600) bleibt gepflegt und liegen in `icon_settings`; `server/.env` (chmod 600) bleibt
@@ -22,7 +22,7 @@ Dienst neu starten müssen.
| Anzeige | nur verkürzt (`sk-proj…a1b2`) – vollständig verlässt der Schlüssel den Server nie | | Anzeige | nur verkürzt (`sk-proj…a1b2`) – vollständig verlässt der Schlüssel den Server nie |
| Eingabe | Passwortfeld, schreibt nur; ein bestehender Wert wird ersetzt | | Eingabe | Passwortfeld, schreibt nur; ein bestehender Wert wird ersetzt |
| Entfernen | löscht den Wert in der Datenbank; steht in der `.env` einer, gilt wieder dieser | | Entfernen | löscht den Wert in der Datenbank; steht in der `.env` einer, gilt wieder dieser |
| Modell | Auswahlliste der Chat-Modelle, die der Schlüssel nutzen darf (siehe unten); Vorgabe `gpt-5.6-luna` | | Modell | Auswahlliste der Chat-Modelle, die der Schlüssel nutzen darf (siehe unten); Vorgabe `gpt-6-luna` |
| Test | ein Miniaufruf gegen das Modell – sagt, ob Schlüssel, Modellname und Kontingent zusammenpassen | | Test | ein Miniaufruf gegen das Modell – sagt, ob Schlüssel, Modellname und Kontingent zusammenpassen |
In der Historie landet, **dass** jemand den Schlüssel gewechselt hat, nie der In der Historie landet, **dass** jemand den Schlüssel gewechselt hat, nie der
@@ -61,7 +61,7 @@ sequenceDiagram
| Liste nicht abrufbar (kein Schlüssel, OpenAI down) | Rückfall auf das Textfeld mit Hinweis und *Erneut versuchen* | | Liste nicht abrufbar (kein Schlüssel, OpenAI down) | Rückfall auf das Textfeld mit Hinweis und *Erneut versuchen* |
| Schlüssel gespeichert/entfernt | Liste wird neu geladen bzw. verworfen | | Schlüssel gespeichert/entfernt | Liste wird neu geladen bzw. verworfen |
> **Fallstrick:** `gpt-5.6-luna` akzeptiert **kein eigenes `temperature`** und > **Fallstrick:** die Luna-Modelle (`gpt-5.6-luna`, `gpt-6-luna`) akzeptieren **kein eigenes `temperature`** und
> weist jeden Wert außer dem Standard mit HTTP 400 ab. `ai.js` schickt deshalb > weist jeden Wert außer dem Standard mit HTTP 400 ab. `ai.js` schickt deshalb
> keines. `response_format: {type:'json_object'}` funktioniert dagegen. > keines. `response_format: {type:'json_object'}` funktioniert dagegen.
+1 -1
View File
@@ -88,7 +88,7 @@ Zuordnung in `navigation.open()` und der Filter in der Historie.
## Bekannte Fallen ## Bekannte Fallen
**`gpt-5.6-luna` und `temperature`.** Jeder eigene Wert wird mit HTTP 400 **Luna-Modelle und `temperature`.** Jeder eigene Wert wird mit HTTP 400
abgewiesen. `ai.js` schickt keinen. abgewiesen. `ai.js` schickt keinen.
**Instabile Arrays in der Netzwerkansicht.** Ein `= []` als Vorgabewert erzeugt **Instabile Arrays in der Netzwerkansicht.** Ein `= []` als Vorgabewert erzeugt
+1 -1
View File
@@ -40,7 +40,7 @@ flowchart TB
DB[("MariaDB<br/>icon_CRM")] DB[("MariaDB<br/>icon_CRM")]
end end
OAI["OpenAI<br/>gpt-5.6-luna"] OAI["OpenAI<br/>gpt-6-luna"]
PCRM["perinco CRM<br/>pcrm.perinco.de"] PCRM["perinco CRM<br/>pcrm.perinco.de"]
HF["Hugging-Face-CDN"] HF["Hugging-Face-CDN"]
+2 -2
View File
@@ -36,10 +36,10 @@ UPLOAD_DIR=/var/www/icon_CRM/uploads
# Der Schluessel bleibt auf dem Server - der Browser spricht nie direkt mit # Der Schluessel bleibt auf dem Server - der Browser spricht nie direkt mit
# OpenAI. Fehlt er, laeuft das CRM normal weiter und blendet die KI-Knoepfe aus. # OpenAI. Fehlt er, laeuft das CRM normal weiter und blendet die KI-Knoepfe aus.
# #
# Hinweis zum Modell: gpt-5.6-luna akzeptiert KEIN eigenes "temperature"; # Hinweis zum Modell: die Luna-Modelle akzeptieren KEIN eigenes "temperature";
# ai.js schickt deshalb nur den Standardwert. # ai.js schickt deshalb nur den Standardwert.
OPENAI_API_KEY= OPENAI_API_KEY=
OPENAI_MODEL=gpt-5.6-luna OPENAI_MODEL=gpt-6-luna
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# Lesender Zugriff auf die Kontakte des perinco CRM # Lesender Zugriff auf die Kontakte des perinco CRM
+3 -3
View File
@@ -26,7 +26,7 @@ const ENDPOINT = 'https://api.openai.com/v1/chat/completions';
/** Nach dieser Zeit wird abgebrochen - die Oberflaeche soll nicht haengen. */ /** Nach dieser Zeit wird abgebrochen - die Oberflaeche soll nicht haengen. */
const TIMEOUT_MS = 120_000; const TIMEOUT_MS = 120_000;
export const DEFAULT_MODEL = 'gpt-5.6-luna'; export const DEFAULT_MODEL = 'gpt-6-luna';
const KEY_SETTING = 'openai_api_key'; const KEY_SETTING = 'openai_api_key';
const MODEL_SETTING = 'openai_model'; const MODEL_SETTING = 'openai_model';
@@ -164,8 +164,8 @@ class AiError extends Error {
/** /**
* Ein Aufruf an das Modell. * Ein Aufruf an das Modell.
* *
* `temperature` wird bewusst NICHT mitgeschickt: gpt-5.6-luna laesst nur den * `temperature` wird bewusst NICHT mitgeschickt: die Luna-Modelle lassen nur den
* Standardwert zu und weist jeden anderen mit 400 ab. * Standardwert zu und weisen jeden anderen mit 400 ab.
* *
* @param {object} options * @param {object} options
* @param {string} options.system Rollenanweisung * @param {string} options.system Rollenanweisung
+1 -1
View File
@@ -174,7 +174,7 @@ export const AiSettings: React.FC = () => {
hint={ hint={
models models
? `${models.length} Modelle für diesen Schlüssel verfügbar. Vorgabe ist ${config.defaultModel}.` ? `${models.length} Modelle für diesen Schlüssel verfügbar. Vorgabe ist ${config.defaultModel}.`
: `Vorgabe ist ${config.defaultModel}. Achtung: gpt-5.6-luna erlaubt keinen eigenen „temperature"-Wert – das Backend schickt deshalb keinen.` : `Vorgabe ist ${config.defaultModel}. Achtung: die Luna-Modelle erlauben keinen eigenen „temperature"-Wert – das Backend schickt deshalb keinen.`
} }
> >
{models ? ( {models ? (