KI: Modellauswahl als Dropdown + Abgleich mit Produktionsstand
Einstellungen -> KI: statt freiem Modellnamen ein Dropdown mit den Chat-Modellen, die der hinterlegte OpenAI-Schluessel nutzen darf. - Backend: listAiModels() fragt OpenAI GET /v1/models, filtert auf Chat-Modelle (gpt-*, o*, chatgpt-*; ohne Embedding/Audio/Bild/Instruct usw.), neueste zuerst, 10 min im Speicher (Schluesselwechsel laedt neu) - Neuer Endpunkt GET /api/ai/models (admin) - Frontend: aktives Modell bleibt waehlbar, auch wenn nicht mehr gelistet; Rueckfall auf Textfeld, wenn die Liste nicht abrufbar ist - Doku: 05-ki (Modellauswahl mit Ablaufdiagramm), 10-api, 08-anleitung Zieht ausserdem den bereits live laufenden, bisher nicht eingecheckten Stand nach (perinco-Kontaktabgleich/MergeDialog, Projektmargen, Whisper-Anpassungen u. a.). Repo entspricht damit icrm.icon-experts.de. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
3f25355a6d
commit
cbac02a96a
@@ -308,6 +308,7 @@ export const aiApi = {
|
||||
text: (task: AiTask, current: string, prompt?: string) =>
|
||||
post<{ text: string; model: string }>('/ai/text', { task, current, prompt }),
|
||||
config: () => get<AiConfig>('/ai/config'),
|
||||
models: () => get<{ models: { id: string; created: number }[] }>('/ai/models'),
|
||||
saveConfig: (changes: { key?: string; model?: string }) => patch<AiConfig>('/ai/config', changes),
|
||||
test: () => post<{ ok: true; model: string; ms: number; answer: string }>('/ai/test'),
|
||||
};
|
||||
@@ -315,6 +316,24 @@ export const aiApi = {
|
||||
export const perincoApi = {
|
||||
status: () => get<{ configured: boolean; url: string | null }>('/perinco/status'),
|
||||
contacts: () => get<{ contacts: PerincoContact[]; cached: boolean }>('/perinco/contacts'),
|
||||
/**
|
||||
* Abgleich eines doppelt gefuehrten Kontakts.
|
||||
*
|
||||
* `local` sind die Felder, die hier gelten sollen, `remote` die, die drueben
|
||||
* gelten sollen - beide in der Sprache der Bruecke (`notes`, `source`).
|
||||
*/
|
||||
merge: (
|
||||
remoteId: string,
|
||||
body: {
|
||||
contact_id: number;
|
||||
local: Record<string, unknown>;
|
||||
remote: Record<string, unknown>;
|
||||
}
|
||||
) =>
|
||||
post<{ ok: true; local_changed: string[]; remote_changed: string[] }>(
|
||||
`/perinco/contacts/${remoteId}/merge`,
|
||||
body
|
||||
),
|
||||
};
|
||||
|
||||
export const historyApi = {
|
||||
|
||||
Reference in New Issue
Block a user